-
Notifications
You must be signed in to change notification settings - Fork 0
Board store needs operation-owned loading state instead of one shared Boolean #3305
Copy link
Copy link
Open
Labels
Priority IIThe active direction's next tranche: wedge capabilities, significant defects, near-term hardening.The active direction's next tranche: wedge capabilities, significant defects, near-term hardening.bugSomething isn't workingSomething isn't workingfrontendPrimary implementation impact in Vue/TypeScript UI and client runtime.Primary implementation impact in Vue/TypeScript UI and client runtime.tech-debtDebt cleanup or deferred engineering quality work with limited product-surface change.Debt cleanup or deferred engineering quality work with limited product-surface change.testingTest coverage, harnesses, regression prevention, and verification pipeline work.Test coverage, harnesses, regression prevention, and verification pipeline work.
Description
Activity
Metadata
Metadata
Assignees
Labels
Priority IIThe active direction's next tranche: wedge capabilities, significant defects, near-term hardening.The active direction's next tranche: wedge capabilities, significant defects, near-term hardening.bugSomething isn't workingSomething isn't workingfrontendPrimary implementation impact in Vue/TypeScript UI and client runtime.Primary implementation impact in Vue/TypeScript UI and client runtime.tech-debtDebt cleanup or deferred engineering quality work with limited product-surface change.Debt cleanup or deferred engineering quality work with limited product-surface change.testingTest coverage, harnesses, regression prevention, and verification pipeline work.Test coverage, harnesses, regression prevention, and verification pipeline work.
Projects
- StatusShow more project fieldsPending
Summary
Every board sub-store currently writes the same
state.loadingBoolean directly. Independent asynchronous operations can overlap, so whichever operation settles first clears loading for all of them—even when another request still owns a visible board/list load.Confirmed navigation race
state.loading = true.true.finallywritesstate.loading = false.BoardView/PaperBoardViewlose skeleton or retry-disabled state early and may expose stale/empty detail until the read settles.The same ownership failure exists between overlapping board-list/detail reads and card, column, label, or comment mutations. Post-await board-state guards do not fix the flag because each
finallystill clears it unconditionally.Expected design
Replace direct shared-Boolean ownership with one store-level operation mechanism, such as epoch-aware loading tokens or a reset-safe active-operation set:
loadingremains true while any current-epoch token exists;Do not solve this with scattered board-id conditions: list reads, detail reads, and mutations overlap across different contexts.
Acceptance
state.loading.value = true/falsewrites in board action modules either move behind the shared owner or are explicitly justified as reset/demo boundaries.Audit provenance
Found during the sibling async-integrity pass that produced #3299, #3301, and #3303. Kept separate because it is a cross-module ownership invariant rather than a local fix.