Skip to content

Legacy assignment-save owner can strand navigation if its ColumnLane unmounts #3311

Description

@Chris0Jeky

Summary

PR #3309 correctly aggregates simultaneous card-editor-saving-change owners by column id so one clean lane cannot clear another lane's pending assignment PUT. A separate lifecycle boundary remains: the owning ColumnLane can unmount while its request is still in flight.

Reachable shape

  1. A Legacy CardModal starts an assignment save and its lane emits true.
  2. A collaborator deletes that column/card, or an authoritative detail refresh otherwise removes the lane while the request is still pending.
  3. BoardCanvas retains the column id in its aggregate owner set.
  4. The removed child no longer has a dependable mounted event channel for its eventual false; if the late emit is dropped, route navigation remains refused indefinitely.

Pruning the id merely because the lane disappeared is not sufficient: the server request may still be active, so that would produce the opposite false-negative and allow navigation before settlement.

Expected design

Move assignment-save ownership to a lifecycle that outlives the rendering lane—such as an operation token/promise registry in the board view/store—or explicitly prove and contract that a post-unmount finally emit is delivered to the same parent owner.

The solution must:

  • preserve fix(board): aggregate Legacy assignment-save owners #3309's multi-lane aggregation;
  • stay true while an unmounted lane's real request remains pending;
  • settle when that request resolves or rejects;
  • reset safely on logout/board-session replacement without letting an old request clear a new session;
  • avoid permanent navigation refusal when a remote refresh removes the owner;
  • cover success, failure, and A→B/session replacement with deferred-promise tests.

Audit provenance

Found during exact-head review of PR #3309. Kept separate because #3309 fixes the confirmed sibling-lane false-clear race with a focused two-file patch; this residual needs a cross-component operation owner rather than another set-pruning condition.

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 IIIValuable but unscheduled: residuals, tech-debt, performance, depth work.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