Skip to content

Column mutations lack board-visit and operation-order ownership #3314

Description

@Chris0Jeky

Summary

columnStore has the same selected-board asynchronous ownership gaps now fixed for labels/comments/cards, but its writes also share the board's ordered column set:

  • create/update/delete/reorder responses authorize local commits using only the current board id, so A→B→A can reuse an old visit;
  • overlapping reorders and column writes execute concurrently even though the API exposes no revision/If-Match precondition, allowing server commit order and client settlement order to diverge;
  • a queued pre-logout intent would start with whichever authentication token exists when its transport eventually runs if serialization is added without a session gate;
  • deleteColumn filters currentBoardCards after every successful response, even when another board/session now owns that collection;
  • an already-started old-visit write that succeeds while the same board is reopened currently has no bounded authoritative reconciliation rule.

Expected contract

  • One per-board mutation lane serializes create/update/delete/reorder in user-intent order; unrelated boards remain independent.
  • The first intent starts transport immediately. A genuinely queued intent rechecks the initiating board-visit generation before invoking the API, so logout/login or A→B→A cannot run old intent under a later session.
  • Post-await state, toast, error and loading writes are scoped to the initiating visit.
  • A successful already-started write from an older visit performs a bounded getColumns reconciliation only when that same board is currently reopened; it never patches another board.
  • Same-board detail refreshes during a write remain compatible: create deduplicates stable ids, update patches the current array, delete removes only current-board state, and reorder installs its confirmed result.
  • A newer same-board mutation prevents an older reconciliation read from overwriting it.

Acceptance

  • Deferred-promise regressions for reverse-settling reorders, queued mutation after navigation/logout, late delete after navigation, same-board refresh during write, and A→B→A post-write reconciliation.
  • No production API/DTO/schema change.
  • Frontend lint, typecheck, build, focused/full tests and exact-head hosted CI pass.

Audit provenance

Found during the 2026-09-20 selected-board asynchronous integrity pass after #3302, #3304 and #3312. Kept in columnStore.ts to avoid overlap with the shared loading/session-epoch follow-ups #3305 and #3306.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Priority IIThe active direction's next tranche: wedge capabilities, significant defects, near-term hardening.bugSomething isn't workingfrontendPrimary implementation impact in Vue/TypeScript UI and client runtime.testingTest coverage, harnesses, regression prevention, and verification pipeline work.

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions