Skip to content

Record #2388 and #2299 in STATUS, and retract a sentence they made false - #2414

Merged
Chris0Jeky merged 2 commits into
mainfrom
coord/status-sync-2299-2388
Sep 3, 2026
Merged

Record #2388 and #2299 in STATUS, and retract a sentence they made false#2414
Chris0Jeky merged 2 commits into
mainfrom
coord/status-sync-2299-2388

Conversation

@Chris0Jeky

Copy link
Copy Markdown
Owner

Post-merge canonical sync for PR #2388 (merge 4b8075632) and PR #2299 (merge 4c6ce5f83). Coordinator-owned file. No lease conflict: no open PR touches docs/STATUS.md, checked across all open PRs.

1. A STATUS sentence became false when #2299 merged

The #2202 entry said of the Legacy batch-triage reconciliation:

... this is not a poll, so an item finishing after that fetch still needs the existing refresh paths.

PR #2299 made it a poll. The source of truth would otherwise contradict shipped behaviour on the exact seam #2230 is about, which is the failure mode this file exists to prevent.

Retracted in place with a pointer to the new entry rather than deleted, so the supersession stays legible next to the #2202 context that explains why the reconciliation was added in the first place.

2. #2388 claimed a STATUS update it did not make

PR #2388's body states, under Docs:

docs/STATUS.md now records PR #2388, removes the shipped deadline/degradation/deep-link items from the residual list, and records #2194 closed while #2205 remains separately Blocked

None of that happened. Verified two ways:

  • git show 4b8075632 -- docs/STATUS.md returns an empty diff.
  • grep for 8-second, three consecutive, degraded notice and #2388 across docs/STATUS.md returns nothing.

So the shipped behaviour was undocumented and the residual list still carried items that had been delivered. The new entry records the delivery and, explicitly, that the coordinator wrote it rather than the PR, because a body that asserts a canonical update which did not occur is worth leaving a trace of.

3. What the two new entries say

#2388. Each background Review queue request is bound to an 8-second deadline. Three consecutive transient failures preserve the last trustworthy queue behind a polite degraded notice instead of blanking the list, and any successful poll or explicit load clears it. 403 authority, teardown and supersession semantics unchanged; both skins render it without hiding retained actions or disturbing the Paper three-column layout. Evidence as reported on the PR: 293 focused tests across three files, 180 fix-diff affected specs, typecheck, build, scoped ESLint, both governance checks, diff hygiene. Its initial fresh-context review found two HIGH layout/conditional defects, resolved in one bounded fix commit. Known MEDIUM deferred to #2214 item 4: the Paper stale copy is hardcoded English.

#2299. The observedPostEnqueueList guard that fixed the defect this PR parked on twice: completion cannot be satisfied by cached terminal state before the first authoritative read. Merged with full exact-head CI green including E2E Smoke, both Windows legs and all three branch-protection contexts, after one fresh-context adversarial pass returned no blocker.

The entry also records why #2230 is deliberately not closed, with the arithmetic:

  • Frontend wall: BATCH_TRIAGE_POLL_MAX_DURATION_MS = 60 s.
  • Server drain: at most MaxBatchSize items total per tick, then a QueuePollIntervalSeconds sleep. Shipped values 5 and 5 (backend/src/Taskdeck.Api/appsettings.json:22-26), shared between capture-triage and non-capture work.
  • Accepted batch size: up to 50 (CaptureService.cs:673).

A 50-item batch therefore needs at least 50 seconds of pure queue delay before any LLM latency, against a 60-second wall, and expiry is silent. A large batch can expire straight back into the cached Triaging detail #2230 exists to remove. For contrast the single-item poll allows 15 minutes for strictly less work.

The two Codex P2s on that PR are recorded as declined-unreachable with the citation: GET /capture/items is user-scoped with no board authorization (CaptureService.ListAsync:256-281) and GET /capture/items/{id} returns 403 only on a user mismatch (CaptureService.cs:410-411), so board-membership revocation produces no 403 on either read.

Verification

  • node scripts/check-docs-governance.mjs and node scripts/check-golden-principles.mjs both exit 0. git diff --check clean.
  • Both merge SHAs, the empty docs/STATUS.md diff in 4b8075632, and the shipped Workers settings were all re-read this session rather than carried from the PR bodies.
  • Last Updated already reads 2026-09-03 and is unchanged.

3 insertions, 1 deletion, one file.

Not done here

  • docs/IMPLEMENTATION_MASTERPLAN.md is untouched: neither merge changed sequencing or delivery ordering.
  • The residual-list pruning #2388 said it would do is not attempted here. Its own body's list of "shipped deadline/degradation/deep-link items" does not match what I can verify as delivered, and guessing at it would repeat the error this PR is recording. That belongs with the #2214 residual pass, which is in the Alpha pool.
  • No OUTSTANDING_TASKS.md item is checked off.

Two merges landed without canonical entries, and one of them made an existing
STATUS sentence untrue.

The false sentence is the important half. The #2202 entry said of the Legacy
batch-triage reconciliation: "this is not a poll, so an item finishing after
that fetch still needs the existing refresh paths." PR #2299 (merge 4c6ce5f)
made it a poll. Left standing, the source of truth would have contradicted
shipped behaviour on the exact seam #2230 is about. Retracted in place with a
pointer rather than deleted, so the supersession is legible.

Added the #2388 entry: an 8-second deadline on each background Review queue
request, the last trustworthy queue preserved behind a polite degraded notice
after three consecutive transient failures, cleared by any successful poll or
explicit load, with 403 authority and teardown/supersession semantics intact
in both skins. The Paper hardcoded-English stale copy stays a known MEDIUM on
#2214 item 4.

That entry also records something worth knowing: PR #2388's body asserted
"docs/STATUS.md now records PR #2388" and it did not. Merge 4b80756 changed
nothing in this file, and no mention of the deadline or the degraded state
existed anywhere in it. Verified with git show on the merge and by grep.

Added the #2299 entry with the observedPostEnqueueList guard that fixed the
twice-parked defect, and, deliberately, why #2230 stays open: the poll's
60-second wall is shorter than the server's worst-case drain (at most
MaxBatchSize items total per tick then a QueuePollIntervalSeconds sleep,
shipped 5 and 5, shared between capture and non-capture work, against a
50-item accepted batch), and expiry is silent, so a large batch can expire
back into the cached Triaging detail the issue exists to remove. The two
Codex P2s are recorded as declined-unreachable with the citation.

Verified: check-docs-governance and check-golden-principles exit 0; git diff
--check clean; both new entries and the retraction present by grep; the
merge SHAs, the absence of any STATUS change in 4b80756, and the shipped
worker settings all re-read this session.

Not verified: no test, build or application run. The batch-drain timing is
arithmetic over committed configuration, not an observed run.
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 3, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-03T03:16:45.816643Z f9e7f26 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f9e7f26859

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/STATUS.md
- **Evidence:** 563 tests across the 25 review, Legacy-Review, i18n-catalog and source-guard spec files, `npm run typecheck`, `npm run build`, and ESLint over the eleven touched files, all green. `scripts/ci/check-bundle-size.mjs` passes: eager JS **385.90 KB** against the 1250 KB hard gate (`origin/main` measures 385.61 KB); its total-JS report-ceiling warning is warning-only and **pre-existing on `origin/main`** at 1314.76 KB, which this change moves to 1318.61 KB. Seven mutation checks each killed their target test and only that test - dropping the decision-identity guard, skipping the post-await guard re-check, appending rather than positioning the deep-link pin, treating 403 as transient, dropping the deep-link pin entirely, ignoring the visibility guard, and removing the badge watch. Introducing the poll first broke three existing expiry specs, whose `mountView` fixture answered the queue with a single `...Once`; a real server keeps answering, so the fixture now does too.
- **Polling restarts after permission recovery (`#2214` item 2, PR `#2298`, merge `bd2541991`).** A current-scope `403` now suspends the Review interval without discarding the owning surface's refresh predicate or queue-replacement hook. The first successful explicit load that proves access has returned clears the revoked-access state and rearms exactly one interval; a permanent stop or scope disposal remains final, so a late recovery response cannot resurrect polling after route leave. Both Review skins inherit the repair through the shared composable. Evidence: 97 focused and 148 broader Review tests, the full frontend suite (357 files / 5,270 tests), typecheck, scoped zero-warning ESLint, build, diff hygiene, clean current-base review, and hosted CI with 21 successes plus 11 declared skips. **This is a bounded delivery, not closure of `#2214`:** deep-link re-authorization, stale/degraded queue disclosure, count-neutral replacement announcements, per-request deadlines, and the recorded low-impact accessibility/diagnostic residuals remain open. **Not verified:** no live ACL revoke/re-grant browser journey or screen-reader pass.
- **Not verified:** no live browser or packaged run - the 115 s repro was not re-measured against a running stack, the revoked-access path was not exercised against a real 403, and no screen reader was used to hear the live region; the fix is proven by component and composable tests only. The empty-state copy is unchanged: with the refresh in place "Nothing waiting" can no longer be minutes stale while the page is being looked at, so the acceptance bullet's "or is refreshed" branch is taken rather than its copy branch.
- **Background Review queue requests are deadline-bound and degrade politely (`#2214`, PR `#2388`, merge `4b8075632`).** Each background queue request is bound to an **8-second deadline**; three consecutive transient failures preserve the last trustworthy queue and expose a polite degraded notice rather than blanking the list, and any successful poll or explicit load clears it. `403` authority, teardown and supersession semantics are unchanged, and both Legacy and Paper render the state without hiding retained actions or disturbing the Paper three-column layout. Evidence: 293 focused tests across three spec files, 180 fix-diff affected specs, typecheck, build, scoped ESLint, docs and GitHub-ops governance, diff hygiene. Initial fresh-context review found two HIGH layout/conditional defects; one bounded fix commit resolved both and the fix-diff review found no blocker. **Known MEDIUM, deferred:** the Paper stale copy is hardcoded English, carried on `#2214` item 4. **Recorded 2026-09-03 by the coordinator, not by PR `#2388`:** that PR's body claimed it had updated this file, and it did not - merge `4b8075632` changed nothing in `docs/STATUS.md`. **Not verified:** full frontend suite, Playwright or manual browser, live degraded backend, screen reader, translation quality.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Remove the superseded residuals from the prior entry

This entry records per-request deadlines and stale/degraded queue disclosure as shipped, but line 91 still says both remain open on #2214. Because this file is the canonical shipped-reality source, the two adjacent entries now give contradictory guidance about the remaining scope; update the earlier residual list to retain only the items that are actually still open.

AGENTS.md reference: AGENTS.md:L17-L17

Useful? React with 👍 / 👎.

…icting

Answers a confirmed Codex P2. Recording #2388's delivery made the adjacent
#2298 entry false: line 91 still listed per-request deadlines and
stale/degraded queue disclosure as open on #2214 while the new entry recorded
both as shipped. In the file that is the declared source of shipped reality,
two adjacent entries disagreeing about remaining scope would send an
implementer to build something that already exists.

I declined this pruning when opening the PR, on the grounds that #2388's own
claim about what it removed could not be verified. That reasoning still holds
for the claim; it does not hold for these two items, which I verified directly
against main rather than against the PR body:

  REVIEW_QUEUE_REQUEST_DEADLINE_MS = 8_000   useReviewProposals.ts:53
  raced via Promise.race                     :590, cleared :592
  consecutiveQueueRefreshFailures            :543-560
  degraded indication cleared on success     :519-520

So exactly two items are struck, each with its evidence inline, and the strike
is attributed to #2388 with its merge SHA so the supersession is traceable
rather than looking like a silent edit.

The stale copy's Paper localization stays open as #2214 item 4, because it is
hardcoded English. Deep-link re-authorization, count-neutral replacement
announcements and the low-impact accessibility/diagnostic residuals are
untouched and still listed. Nothing else was pruned.

Verified: the four line references read from main this session;
check-docs-governance and check-golden-principles exit 0; git diff --check
clean.
@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Codex P2 confirmed and fixed. Pushed as 19baf99a8.

Codex is right, and the contradiction was one I introduced in this PR. Recording #2388's delivery at line 93 made the adjacent #2298 entry at line 91 false: it still listed per-request deadlines and stale/degraded queue disclosure as open on #2214, while the new entry recorded both as shipped.

In the file that is the declared source of shipped reality, two adjacent entries disagreeing about remaining scope is worse than either being merely incomplete. An implementer reading line 91 would go build a deadline that already exists.

Why I declined this in the PR body, and why that reasoning does not cover it

The PR body says I did not attempt the residual pruning because #2388's claim about what it removed could not be verified, and guessing would repeat the error the PR is recording. That still stands for the claim as a whole.

It does not cover these two items, because Codex narrowed it to the two the new entry itself asserts. I verified both directly against main rather than against a PR body:

Item Evidence on main
Per-request deadlines REVIEW_QUEUE_REQUEST_DEADLINE_MS = 8_000 at useReviewProposals.ts:53, raced via Promise.race at :590, timer cleared at :592
Degraded queue disclosure consecutiveQueueRefreshFailures against REVIEW_QUEUE_CONSECUTIVE_FAILURE_THRESHOLD at :543-560, degraded indication cleared on success at :519-520

So exactly two items are struck, each carrying its evidence inline, and the strike is attributed to #2388 with its merge SHA 4b8075632 so the supersession is traceable rather than reading as a silent edit.

What is deliberately still listed

  • Deep-link re-authorization - untouched.
  • Count-neutral replacement announcements - untouched.
  • The recorded low-impact accessibility and diagnostic residuals - untouched.
  • The stale copy's Paper localization - explicitly kept open as #2214 item 4, because it is hardcoded English. This is why the strike says "degraded" rather than "stale/degraded": only the degraded half shipped.

Nothing else was pruned. The wider residual-list reconciliation #2388's body claimed remains with the #2214 residual pass, and I have noted that on #2214 so the lane does not assume this PR did it.

Verification at the new head

node scripts/check-docs-governance.mjs and node scripts/check-golden-principles.mjs exit 0. git diff --check clean. All four useReviewProposals.ts line references read from main this session.

Base currency

main moved to a32b4818d (PR #2410) after this PR's CI ran. That change is nine backend C# files, fully disjoint from docs/STATUS.md. Re-proven locally: origin/main test-merges into this branch with zero conflicts and both governance checks pass against the merged tree. I did not push a merge commit for that, because the seams do not intersect and an extra head would burn another Smart CI observation from the window #2327 and SC-4 depend on, for no additional evidence.

Not verified: no test, build or application run. The two struck items are verified by source reading at the cited lines, not by executing the Review suite.

One CI note, since a cancelled required check is worth explaining rather than waving through

E2E Smoke / E2E Smoke shows cancelled at the superseded head f9e7f2685. That is a concurrency-group supersede caused by my own fix-round push, not a defect and not the #2378 Windows hang:

  • The replacement run on 19baf99a8 was created at 03:36:57Z; the old run was cancelled at 03:37:13Z, 16 seconds later.
  • The E2E job ran 03:32:58Z to 03:37:12Z, 4m14s. The #2378 signature is a 25:00 kill on Frontend Unit (windows-latest) step 4, which is not what happened here.

Merge evidence comes from the new head, not from that run.

@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Canonical lease handoff from the Alpha Product/Trust lane: PR #2413 is now at exact head b9ab692df and, when merged, removes the dead Review queue Apply-rate prop, numeric/empty branches, and locale copy while preserving weekly cadence. The current #2205 paragraph in docs/STATUS.md will then be stale. Please fold the factual replacement into this coordinator-owned STATUS lane if #2414 remains open; Alpha will not create a competing edit. Full sync packet: #2205 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant