Skip to content

[Frontend][Inbox] Surface batch triage polling expiry - #2421

Merged
Chris0Jeky merged 76 commits into
mainfrom
issue-2230/inbox-poll-timeout
Sep 3, 2026
Merged

[Frontend][Inbox] Surface batch triage polling expiry#2421
Chris0Jeky merged 76 commits into
mainfrom
issue-2230/inbox-poll-timeout

Conversation

@Chris0Jeky

@Chris0Jeky Chris0Jeky commented Sep 3, 2026

Copy link
Copy Markdown
Owner

Summary

  • report when Legacy Inbox batch-triage checking reaches its 60-second deadline with unresolved captures
  • keep the receipt truthful: the accepted triage may still be running, and Refresh Detail is the recovery action
  • render expiry as a persistent warning, not a failed action
  • leave terminal completion and explicit polling cleanup quiet

This closes the remaining #2230 acceptance without extending client polling or relabelling an accepted triage as failed.

Current-base proof

  • exact head: 390a311a29c1d2c0d092a821f1f6b502bce57335
  • reviewed base: 98f3fbd145dd6c48e3b47da56fc110d3e975b4c1
  • 126/126 Inbox/API/orchestrator tests passed
  • 60/60 toast/render tests passed
  • scoped ESLint passed
  • explicit typecheck and production build passed
  • diff hygiene passed
  • fresh current-base interaction review found no CRITICAL/HIGH blocker
  • automatic Codex review completed on this head with no new finding
  • Smart CI run 33781168216, CI Extended run 33781131953, and Required CI run 33781131973 passed; the first E2E attempt stopped before tests when two Microsoft Ubuntu feeds returned 403, and the same-head failed-job rerun passed E2E Smoke

Non-blocking residuals:

  • concurrent polls can each publish one truthful warning, and an older poll can replace the shared batchError; the visible receipt stays truthful and batchError has no production template consumer, so per-batch error ownership is declined as out of scope
  • batch selection clears after submission, so the user may need to reopen a capture before Refresh Detail is visible

No browser, live-provider timing, or screen-reader run was performed locally. Deterministic fake-timer regressions exercise the owned deadline contract, and hosted E2E Smoke passed.

Closes #2230

Chris0Jeky and others added 20 commits September 2, 2026 13:04
Bumps [@humanfs/node](https://github.com/humanwhocodes/humanfs/tree/HEAD/packages/node) from 0.16.7 to 0.16.8.
- [Release notes](https://github.com/humanwhocodes/humanfs/releases)
- [Changelog](https://github.com/humanwhocodes/humanfs/blob/main/packages/node/CHANGELOG.md)
- [Commits](https://github.com/humanwhocodes/humanfs/commits/node-v0.16.8/packages/node)

---
updated-dependencies:
- dependency-name: "@humanfs/node"
  dependency-version: 0.16.8
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.5 to 3.1.7.
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](fastify/fast-uri@v3.1.5...v3.1.7)

---
updated-dependencies:
- dependency-name: fast-uri
  dependency-version: 3.1.7
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
@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-03T16:53:48.527329Z 390a311 New commits
ℹ️ 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.

@Chris0Jeky Chris0Jeky moved this from Pending to Review in Taskdeck Execution Sep 3, 2026

@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: 80e4811372

ℹ️ 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 frontend/taskdeck-web/src/store/captureStore.ts Outdated
@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Independent exact-diff review at 80e481137253c843d684a70e61e8651ea6f71a5f: no CRITICAL/HIGH finding.

Verified independently: capture store 57/57, Inbox orchestrator 55/55, typecheck, and diff check. toast.error defaults to duration 0, so this is a persistent receipt.

Nonblocking review disposition:

  • declined operation-scoped timeout copy in this slice: concurrent poll A can outlive completed poll B, but the generic receipt remains truthful and does not identify or mutate the wrong capture
  • declined a second deadline-specific AbortSignal test: the deadline calls the same stop() path already covered by the existing in-flight abort regression; the new deadline regression proves that path is selected and emits exactly one receipt

Hosted exact-head CI is now the remaining gate.

@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Fix-diff independent review at 3ec891eea92ecb7b3a08deb859ca0227e85b36dd: no CRITICAL/HIGH finding.

The reviewer verified that toast.warning(message, 0) is persistent in the shared store, renders as a non-failure in both Legacy and Paper, has no assertive error semantics, and shows no countdown. Focused capture tests passed 57/57; toast-store and both renderer suites passed 60/60; diff check passed.

The reviewer noted that the terminal-completion regression does not separately assert the warning mock is quiet. Classified nonblocking and declined at the fix-review ceiling: the test completes before the deadline and advances beyond it, while source inspection confirms completion clears that same deadline timer. The explicit-stop regression does assert both error and warning remain absent.

@Chris0Jeky Chris0Jeky moved this from Review to Blocked in Taskdeck Execution Sep 3, 2026
@Chris0Jeky Chris0Jeky moved this from Blocked to Review in Taskdeck Execution Sep 3, 2026
@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Fresh current-base interaction review completed at 390a311a29c1d2c0d092a821f1f6b502bce57335 against 98f3fbd145dd6c48e3b47da56fc110d3e975b4c1.

No CRITICAL/HIGH blocker was found. The deadline path checks completion before publishing one persistent warning and batchError, then aborts and stops polling. Terminal completion and explicit stop stay quiet, and the current request guards prevent late list or detail writes.

Current-base proof passed: 126/126 Inbox/API/orchestrator tests, 60/60 toast/render tests, scoped ESLint, explicit typecheck, production build, and diff hygiene.

Non-blocking review note: concurrent polls share batchError, so an older poll can replace newer shared text. The warning remains truthful for the older accepted work and batchError has no production template consumer. Classified P2 and declined as outside #2230's expiry-disclosure acceptance. Hosted exact-head CI and automatic review remain pending.

@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Coordination note on the parked state. Evidence only; the restart decision stays with the owning lane.

This head has no file-level interaction with anything that landed under it

Merge base is a127dee4f; main has advanced 27 commits since. Computed locally, the intersection of the files this PR changes (src/store/captureStore.ts and its spec) with the files main changed over those 27 commits is empty. The third 2026-09-03 block was two MCP backend slices, a board-refresh arbitration slice and an E2E path fix, none of which touch the capture store. Commit distance here is not evidence of staleness in the change itself.

The only red is #2401, not this branch

Smart CI / Required Gate failed on run 33754458696 with:

  • base-sha-mismatch — plan e1ea14fad vs event 2647c3af0
  • trust-mismatch — plan says T3, the event re-derives T1

The plan's base is an ancestor of the gate event's base, so main moved between the Plan job and the Gate job of the same run. The identical two-line verdict appeared on PR #2408 (run 33736889079) the same day with unrelated branch content. Both are recorded on #2401.

Smart CI / Required Gate is not an enforced branch-protection context. Measured today, main requires exactly three, all security. The verdict here is shadow-mode observation evidence, and it does count against SC-4's clean-window condition, which is why #2401 now sits first on the release chain.

Note for the #2230 restart contract

The reviewed acceptance (a truthful timeout receipt at the 60-second deadline that does not relabel triage as failed) is unaffected by everything that landed. A current-base run plus the usual disposition should be sufficient; no re-derivation of the polling behaviour is indicated by anything on main.

@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Required CI run 33781131973 reached E2E only after all 16 prerequisite jobs passed. E2E did not start the Taskdeck test suite: npx playwright install-deps chromium failed during apt metadata refresh because both packages.microsoft.com Noble feeds returned HTTP 403. The checked-out merge SHA was f9ffdd0554ae03e5d92cfae9db7a3a369cab422c, combining head 390a311a with base 98f3fbd14.

This is an external runner dependency-install failure, not a product-test result. I am rerunning the failed job once on the same exact head; merge remains blocked until that rerun is green.

@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Required CI run 33781131973 attempt 2 passed on the unchanged exact head. The rerun cleared Playwright dependency installation and completed E2E Smoke successfully. No product test failed in either attempt.

@Chris0Jeky
Chris0Jeky merged commit 01d77fa into main Sep 3, 2026
55 of 56 checks passed
@github-project-automation github-project-automation Bot moved this from Review to Done in Taskdeck Execution Sep 3, 2026
@Chris0Jeky
Chris0Jeky deleted the issue-2230/inbox-poll-timeout branch September 3, 2026 17:22
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.

[Frontend][Inbox] Legacy batch triage never polls to completion — a degraded notice stays hidden behind the cached Triaging detail

1 participant