Skip to content

Keep explicit board loads authoritative over realtime refresh - #2433

Merged
Chris0Jeky merged 9 commits into
mainfrom
issue-1736/board-refresh-arbitration
Sep 3, 2026
Merged

Keep explicit board loads authoritative over realtime refresh#2433
Chris0Jeky merged 9 commits into
mainfrom
issue-1736/board-refresh-arbitration

Conversation

@Chris0Jeky

@Chris0Jeky Chris0Jeky commented Sep 3, 2026

Copy link
Copy Markdown
Owner

Summary

  • Keep explicit Board route loads and Retry authoritative while matching realtime refreshes queue and coalesce.
  • Retain one current-board mutation refresh that arrives during an active background read, then drain it without parallel work.
  • Cancel queued or active background work on route replacement or unmount.
  • Reject board detail fan-outs that began before a successful local card or column mutation.
  • Preserve cached board data while surfacing explicit permission truth when a current background read receives HTTP 403.

Closes #1736

Evidence

Red first at 2647c3a:

  • initial six-file seam: 21 failed, 125 passed, with 2 unhandled rejections
  • fix-round realtime/parity pair: 1 failed, 25 passed because the active refresh discarded its successor
  • final Axios-shaped 403 regression: 1 failed, 1 passed, 37 skipped because generic Axios text displaced explicit permission wording

Green at a3e5925 on current base d3a3f7a:

  • focused current and stale HTTP 403 cases: 2/2 passed
  • boardCrudStore.spec.ts: 39/39 passed
  • eight-file board arbitration, resilience, and parity seam: 174/174 passed, zero unhandled rejections
  • adjacent BoardView coverage and keyboard seam: 15/15 passed before the current-base backend-only merge
  • scoped ESLint across the touched frontend files: passed with zero warnings
  • npm run typecheck: passed
  • npm run build: passed, 812 modules transformed; existing toast-store dynamic-import warning only
  • git diff --check: passed

Hosted attempt 1, run 33757901420, failed on both frontend platforms only because the parity guard classified the new read-lifecycle cancellation action as a mutation. That guard was corrected before the final head.

Exact-head Smart CI, Smart CI Self-Test, CI Extended, and Required CI run 33762281670 are green, including both Windows matrices and E2E Smoke.

Review disposition

  • Independent HIGH fixed: mutations arriving during active refresh F1 now coalesce into one current-board F2 after F1 settles; route switch and stop clear it.
  • Automatic P1 fixed: a current background HTTP 403 preserves cached board data and reports You no longer have access to this board; stale 403 results remain suppressed.
  • Fresh-context review of the final fix found no CRITICAL/HIGH blocker.
  • Stale recovery and restored-access error clearing are tracked by Clear stale board-load errors after background recovery #2434.
  • Remaining mutation and authorization arbitration residuals are tracked by Complete board detail arbitration after local writes #2435.
  • The final two automatic P2 findings were triaged into those issues; the bounded review ceiling is complete.

Boundaries

@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-03T13:43:27.083316Z a3e5925 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.

@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: e8186ca9c3

ℹ️ 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/views/BoardView.vue
Comment thread frontend/taskdeck-web/src/store/board/boardCrudStore.ts
@Chris0Jeky

Copy link
Copy Markdown
Owner Author

[Codex independent review disposition]
base: 2647c3a
head: e8186ca

HIGH, fix required: a matching mutation that reaches the debounce callback while a background refresh is already in flight is discarded. The active read may have started before that mutation, so the newer state can remain stale indefinitely. The fix round will retain one pending current-board refresh and drain it only after the active refresh settles, while preserving route and stop cancellation.

MEDIUM, non-blocking: a failed explicit Retry followed by a successful queued background refresh can leave the prior BoardView load error visible over fresh data. This is outside the merge-blocking fix and will be reconciled against existing issues before tracking.

Hosted Required CI run 33757901420 also found a deterministic fixture failure: the board capability parity guard classifies cancelBackgroundBoardFetch as a mutation because it is exported from boardCrud. It is a read-lifecycle action with no server write and will be explicitly accounted as such in the guard.

No merge decision applies to this head. One bounded fix and affected reproof follow.

@Chris0Jeky

Copy link
Copy Markdown
Owner Author

MEDIUM review disposition: tracked as #2434. It remains outside this merge-blocking fix round.

@Chris0Jeky

Copy link
Copy Markdown
Owner Author

[Codex independent review disposition]
base: d3a3f7a
head: e96ba77

Final fresh-context review found no CRITICAL/HIGH direct blocker. The prior HIGH is fixed: one current-board mutation refresh is retained during F1 and drained after settlement; route switch and stop clear it; current-board checks prevent wrong-board drain; store generation and mutation epochs preserve explicit/background ordering and stale suppression.

Exact-head local proof: 172/172 affected tests, scoped ESLint, typecheck, production build, and diff check passed. Hosted exact-head CI and automatic review remain in progress.

@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: e96ba77b66

ℹ️ 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/boardCrudStore.ts
@Chris0Jeky Chris0Jeky moved this from Pending to Review in Taskdeck Execution Sep 3, 2026
@Chris0Jeky

Copy link
Copy Markdown
Owner Author

[Codex final fix review disposition]
base: d3a3f7a
head: a3e5925

Fresh-context review of the bounded HTTP 403 fix found no CRITICAL/HIGH direct blocker. Generation and mutation-epoch checks run before the new permission branch, so stale, superseded, cancelled, and mutation-invalidated failures remain suppressed; non-403 background failures remain silent. Current 403 preserves cached detail and reports explicit access-loss truth.

Reviewer proof: targeted store/realtime/view/resilience tests 128/128, boardCrudStore 39/39, typecheck, and diff check passed. Hosted exact-head CI and automatic review remain in progress.

@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: a3e5925867

ℹ️ 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/boardCrudStore.ts
Comment thread frontend/taskdeck-web/src/store/board/boardCrudStore.ts
@Chris0Jeky
Chris0Jeky merged commit ebf68e0 into main Sep 3, 2026
41 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-1736/board-refresh-arbitration branch September 3, 2026 14:10
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.

Keep explicit board retry authoritative over realtime refresh

1 participant