Skip to content

fix(labels): bind async commits to their board - #3302

Merged
Chris0Jeky merged 14 commits into
mainfrom
codex/3301-label-board-ownership
Sep 22, 2026
Merged

Chris0Jeky merged 14 commits into
mainfrom
codex/3301-label-board-ownership

Conversation

@Chris0Jeky

@Chris0Jeky Chris0Jeky commented Sep 20, 2026

Copy link
Copy Markdown
Owner

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 at ba2eba81e08aa4a221dd26920f86404580242baa remain historical and do not qualify the new regression/fix commits.

Implementation

  • Fence label reads by board visit, cache identity, read version and mutation version.
  • Distinguish A-to-B-to-A and session-reset visits from same-board detail refreshes.
  • Apply confirmed current-visit writes to the current label array; deduplicate creates by stable ID.
  • Reconcile a successful old-visit write only when the same board has reopened.
  • Serialize same-label update/delete transport; queued writes recheck their initiating visit before sending.
  • Start the first unqueued write synchronously in its initiating call stack.

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 2b3248ffe4ec039d1a0f7cd7b095aa72b6b51a18 adds labelStoreReadErrors.spec.ts with those three obsolete-error schedules and a current-error positive control. Fix commit b18f7794d945d4294c947fb4c48946f7f34ac36a applies 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 7c3ddec989a88c4c566c4c899e79e6c2fdaa40d1 matches 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.

@Chris0Jeky
Chris0Jeky marked this pull request as ready for review September 20, 2026 15:13
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 20, 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-22T00:37:26.073225Z b18f779 Draft marked ready
ℹ️ 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 marked this pull request as ready for review September 20, 2026 18:31

@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: 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".

Comment thread frontend/taskdeck-web/src/store/board/labelStore.ts Outdated
Comment thread frontend/taskdeck-web/src/store/board/labelStore.ts Outdated
@Chris0Jeky
Chris0Jeky marked this pull request as draft September 20, 2026 18:49
@Chris0Jeky
Chris0Jeky marked this pull request as ready for review September 20, 2026 21:51
@Chris0Jeky
Chris0Jeky marked this pull request as draft September 21, 2026 23:56

@Chris0Jeky Chris0Jeky left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

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
Chris0Jeky marked this pull request as ready for review September 22, 2026 00:32

@Chris0Jeky Chris0Jeky left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

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.

@Chris0Jeky
Chris0Jeky merged commit c0aa8ce into main Sep 22, 2026
55 checks passed
@Chris0Jeky
Chris0Jeky deleted the codex/3301-label-board-ownership branch September 22, 2026 00:41
@github-project-automation github-project-automation Bot moved this from Pending to Done in Taskdeck Execution Sep 22, 2026
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.

Label operations can commit into a board selected after navigation

1 participant