fix(labels): bind async commits to their board - #3302
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 58fa07b027
ℹ️ 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".
Chris0Jeky
left a comment
There was a problem hiding this comment.
Found and fixed a remaining same-board read-error ownership gap during the merge review. Successful reads splice the existing label array, so the old catch guard (array/visit identity only) allowed an older failed fetch to publish after a newer successful fetch, overwrite a newer fetch error, or publish after a confirmed label mutation.
Canonical four-case regression file committed first in 2b3248f; production fix committed in b18f779. Error publication now requires the same current read and mutation versions as successful data publication. The obsolete caller still receives its original rejection, and current failures remain visible. No assertion was relaxed and no production errors were globally swallowed.
Local focused validation: a dependency-injected Node harness executes the exact GitHub production source after TypeScript type stripping, with a no-op watcher for these same-board schedules. Original head: 3 failures / 1 passing current-error control. Fixed source: 4 passed / 0 failed. This is not a Vue/Vitest or full-suite execution. The canonical Vitest file and complete exact-head hosted CI remain required. GitHub returned blob 7c3ddec, matching the locally verified fixed source. Keeping draft until the new head qualifies; the body's older ba2eba8 green results cannot qualify this new head.
Chris0Jeky
left a comment
There was a problem hiding this comment.
Continuation merge verification: exact head b18f779 now has Required CI 35670029491, Self-Test 35670029235 and Extended 35670029466 all completed/success. Marking ready triggered Codex's new review, completed at this same head on 2026-09-22T00:37:26Z. Re-read inline threads after completion: the two prior findings are resolved and no new open thread exists.
The last change fences fetch failure publication by the same read/mutation epochs as success, preserving rejection for the original caller and current-error visibility. The four canonical regression schedules and earlier board-visit/queue coverage remain present; no assertion or guard was weakened to qualify the branch. No local Vue/.NET execution is claimed. Under the maintainer's renewed instruction, proceeding with an expected-head-pinned normal merge of this bounded label correction, not a claim that all other board-store lifetimes or the release are qualified.
Closes #3301 once final review and validation qualify the complete change.
Current status
Draft. Latest implementation head:
b18f7794d945d4294c947fb4c48946f7f34ac36a. Fresh exact-head hosted CI is required. The earlier green results atba2eba81e08aa4a221dd26920f86404580242baaremain historical and do not qualify the new regression/fix commits.Implementation
New merge-review fix
The old fetch failure path checked cache identity but omitted the read/mutation versions used by successful reads. Because a newer fetch splices the same array, an older failed fetch could publish after a newer success, overwrite a newer error, or publish after a confirmed mutation.
Test-first commit
2b3248ffe4ec039d1a0f7cd7b095aa72b6b51a18addslabelStoreReadErrors.spec.tswith those three obsolete-error schedules and a current-error positive control. Fix commitb18f7794d945d4294c947fb4c48946f7f34ac36aapplies the same version predicates to error publication. Original promise rejection is preserved; current errors remain visible. No blanket error suppression or assertion relaxation.Verification and limits
A local focused Node harness executes the exact production source after TypeScript type stripping with injected dependencies and a no-op watcher for same-board schedules. Before: 3 failed / 1 passed. After: 4 passed / 0 failed. The published production blob
7c3ddec989a88c4c566c4c899e79e6c2fdaa40d1matches the locally verified source.This is not a local Vue/Vitest or full-suite run. Canonical tests are committed for hosted execution. Original navigation, overlapping read/write, same-board refresh, reopened-board, and queued-session regressions remain in place. Exact-head required CI and final review must finish before merging.
No DTO, route, migration, workflow, dependency manifest or canonical-governance document changes.