Skip to content

fix(board): own assignment saves beyond lane lifetime - #3313

Open
Chris0Jeky wants to merge 7 commits into
codex/3308-legacy-save-ownerfrom
codex/3311-assignment-save-registry
Open

Chris0Jeky wants to merge 7 commits into
codex/3308-legacy-save-ownerfrom
codex/3311-assignment-save-registry

Conversation

@Chris0Jeky

@Chris0Jeky Chris0Jeky commented Sep 20, 2026

Copy link
Copy Markdown
Owner

Stack and scope

Stacked on review-ready PR #3309 (codex/3308-legacy-save-owner) so the multi-lane aggregation fix remains independently reviewable. Refs #3311. Retarget to main only after #3309 lands, then requalify the resulting exact head.

Change

Moves assignment-save ownership from rendered ColumnLane events to a request-owned registry that outlives lane unmounts:

  • each save receives a stable operation token;
  • aggregate saving stays true while any registered request remains pending, even if its lane disappears;
  • settlement removes only the matching token;
  • board/session replacement invalidates old owners without allowing late settlement to clear a newer session;
  • Legacy route-leave, same-view navigation and beforeunload protections consume the registry aggregate;
  • obsolete BoardCanvas lane-event ownership coverage was removed after the registry became authoritative, while ColumnLane compatibility coverage remains.

Tests

Focused coverage proves concurrent owners, lane unmount during success/failure, stale settlement after session replacement, idempotent cleanup, and the Legacy navigation boundary. The test-only correction at 7333ee3 removes the stale expectation that BoardCanvas still forwards lane ownership.

Verification

Exact head: 7333ee311db91f22a024266529fce0a8ad3ea8e1

  • Focused registry/navigation suite: 4 files, 10 tests passed in the verified worktree.
  • Frontend typecheck and production build passed.
  • Full frontend suite: 499 files, 7,153 tests passed, 3 skipped.
  • Hosted exact-head CI and final Codex review are triggered by marking this PR ready.
  • No API, DTO, schema, route, migration or canonical-document changes.

Closes #3311

Copy link
Copy Markdown
Owner Author

@codex address the exact-head frontend failure as a stale legacy test only; do not restore lane-event ownership.

The Ubuntu JUnit artifact has one failure:

LegacyAssignmentSaveNavigation.spec.ts > Legacy assignment-save event propagation > forwards the lane saving state through BoardCanvas

That assertion is obsolete by design. BoardCanvas no longer listens to ColumnLane's card-editor-saving-change; it provides the request-owned registry, and the new BoardCanvasSaveLifecycle.spec.ts, BoardCanvasSaveOwnership.spec.ts, and CardAssignmentSaveRegistry.spec.ts cover the replacement contract.

Remove the obsolete BoardCanvas lane-event test (or replace it with a negative assertion that a synthetic lane event has no ownership authority, only if that adds non-duplicative value). Keep the preceding ColumnLane compatibility test and the route-leave tests intact. Run the focused legacy + three new registry specs and the full frontend matrix. Do not re-add the event listener to production.

@chatgpt-codex-connector

Copy link
Copy Markdown

Summary

  • Removed the obsolete BoardCanvas lane-event propagation test and its unused import. No production code or lane-event listener was added.
  • Preserved the ColumnLane compatibility test that verifies CardModal still forwards its local saving state. frontend/taskdeck-web/src/tests/views/LegacyAssignmentSaveNavigation.spec.tsL240-L280
  • Preserved both route-leave protections, including page exit and same-view board navigation while an assignment save is pending. frontend/taskdeck-web/src/tests/views/LegacyAssignmentSaveNavigation.spec.tsL282-L333
  • Committed as a8bc8bf3 (test(board): remove obsolete lane save propagation case) and created the follow-up PR metadata titled “test(board): remove obsolete lane save propagation coverage.”
  • No canonical documentation changed because this only removes stale test coverage; runtime behavior and roadmap sequencing are unchanged.

Testing

  • npx vitest --run --maxWorkers=2 src/tests/views/LegacyAssignmentSaveNavigation.spec.ts src/tests/components/BoardCanvasSaveLifecycle.spec.ts src/tests/components/BoardCanvasSaveOwnership.spec.ts src/tests/components/CardAssignmentSaveRegistry.spec.ts — 4 files and 10 tests passed.
  • npm run typecheck
  • npm run build
  • npx vitest --run --maxWorkers=2 — 499 files passed; 7,153 tests passed and 3 skipped.
  • git diff --check
  • git status --short --branch — clean after commit.

Outstanding Human Actions

Open items remain in OUTSTANDING_TASKS.md, notably: RT-1–RT-3, CL-1, BEN-1, DIST-1, CF-22, SC-4, SC-6, SC-7, SC-10 follow-through, the PR #2787/control-plane review decisions, and D-4/D-6/D-9, plus the other issue and phase checkpoints listed there.

View task →

Copy link
Copy Markdown
Owner Author

@codex publish the verified a8bc8bf3 test-only commit onto this PR's existing branch codex/3311-assignment-save-registry. Do not create a follow-up PR or leave the commit only in the task worktree. The GitHub diff must change only LegacyAssignmentSaveNavigation.spec.ts. Reply with the published head SHA so hosted CI can qualify it.

@chatgpt-codex-connector

Copy link
Copy Markdown

Summary

  • Recreated and committed the verified test-only change with the exact full SHA a8bc8bf3ce3c253c732e4d6ed3505f6e52ec30eb.
  • The commit removes the obsolete BoardCanvas lane-event test and unused import while preserving the ColumnLane compatibility coverage and route-navigation tests. frontend/taskdeck-web/src/tests/views/LegacyAssignmentSaveNavigation.spec.tsL1-L7 frontend/taskdeck-web/src/tests/views/LegacyAssignmentSaveNavigation.spec.tsL240-L290
  • Publication is blocked: this environment has neither GitHub CLI authentication nor Git HTTPS credentials. The push therefore failed, and the hosted codex/3311-assignment-save-registry head remains 761afdb02614ebe5a607689eac4f00b00e92cb20, not a8bc8bf3.
  • Open human actions remain in OUTSTANDING_TASKS.md, including RT-1–RT-3, CL-1, BEN-1, DIST-1, CF-22, SC-4, SC-6, SC-7, SC-10 follow-through, control-plane review decisions, and D-4/D-6/D-9.

Testing and publication checks

  • git commit -m 'test(board): remove obsolete lane save propagation case' — created exact commit a8bc8bf3ce3c253c732e4d6ed3505f6e52ec30eb.
  • git diff-tree --no-commit-id --name-only -r HEAD — reports only frontend/taskdeck-web/src/tests/views/LegacyAssignmentSaveNavigation.spec.ts.
  • git diff --check HEAD^ HEAD
  • git status --short --branch — clean working tree.
  • git push origin HEAD:refs/heads/codex/3311-assignment-save-registry — failed because the environment could not read GitHub credentials.
  • ⚠️ git ls-remote origin refs/heads/codex/3311-assignment-save-registry — confirms the hosted branch is still at 761afdb02614ebe5a607689eac4f00b00e92cb20; hosted CI cannot yet qualify a8bc8bf3.

View task →

@Chris0Jeky
Chris0Jeky marked this pull request as ready for review September 20, 2026 22:14
@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-20T22:17:07.124941Z 7333ee3 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.

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

Labels

None yet

Projects

Status: Pending

Development

Successfully merging this pull request may close these issues.

1 participant