LearnNewsExamplesServices
Frontmatter
id15147
titleHarden DockFlip boundary oracles and reconcile the DockMotion seed
stateClosed
labels
bugaitestingregressioncore
assigneesneo-gpt-emmy
createdAt7:27 AM
updatedAt10:24 AM
githubUrlhttps://github.com/neomjs/neo/issues/15147
authorneo-gpt-emmy
commentsCount0
parentIssue13158
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAt10:24 AM
milestonev13.2

Harden DockFlip boundary oracles and reconcile the DockMotion seed

Closed Backlog/active-chunk-5 bugaitestingregressioncore
neo-gpt-emmy
neo-gpt-emmy commented on 7:27 AM

Problem

Grace's cross-family review of merged PR #15143 identified four non-blocking depth-floor edges in the Dock motion boundary:

  1. fixed staging forces zIndex: '2', temporarily lowering a pane whose captured inline stacking value is '7';
  2. preserved-identity landing detection recognizes only a direct-parentElement change, so an ancestor-only reparent safely degrades to the old detach poll;
  3. two DockMotionNL setup assertions still require the obsolete two-tab Operator seed;
  4. the Workstation journey's aggregate securityStageFrames > 2 floor does not establish meaningful sampling for each of the two fixed-stage bursts by itself.

The third edge is a current test regression. On current dev, the focused normal- and reduced-motion add-tab journeys both fail before exercising motion:

Expected: "strategy,swarm"
Received: "strategy,swarm,metrics,timeline,agents,alerts,history"

The other three are safe today, but their boundaries are not yet encoded as durable contracts.

Source of authority

  • Review depth floor: https://github.com/neomjs/neo/pull/15143#pullrequestreview-4691001708
  • Fixed-stage implementation: src/main/addon/DockFlip.mjs
  • Current Operator perspective: examples/dashboard/dock/MainContainer.mjs (initialDockModel.nodes['main-tabs'])
  • Core branch coverage: test/playwright/unit/dashboard/DockFlip.spec.mjs
  • Runtime journeys: test/playwright/e2e/dashboard/DockMotionNL.spec.mjs and test/playwright/e2e/workstation/WorkstationNL.spec.mjs
  • Parent objective: #13158

Contract ledger

Surface Current boundary Required boundary
Fixed-stage stacking Hardcoded 2 can lower a captured numeric z-index Staging retains the safety floor without lowering a higher captured/effective pane stacking value; cleanup restores the exact prior inline value
Atomic preserved landing Only a changed direct parent proves landing A changed captured ancestor lineage can also prove landing when the exact connected marker set survives; an unchanged lineage remains ambiguous and keeps the bounded wait
DockMotion seed Setup and one downstream expectation encode the former two-item snapshot The journeys assert only their semantic prerequisites and derive mutation expectations from the live restored document, preserving every unrelated tab
Sequential-frame proof One aggregate frame total spans two bursts Split and return each have an independently asserted multi-frame sample, while all existing per-frame paint, clip, overflow, header, identity, and cleanup invariants remain authoritative

Acceptance criteria

  • A fixed-staged marker with a captured numeric stacking value above the safety floor is never lowered during staging; non-numeric/default stacking still receives a safe floor.
  • Success, rejection, interruption, and destroy cleanup restore the exact captured inline zIndex and every other temporary style/class.
  • An exact connected marker set whose direct parent is unchanged but whose captured ancestor lineage changed bypasses the outgoing-tree detach poll.
  • An exact connected marker set with unchanged lineage remains on the bounded ambiguous path; replacement-tree behavior is unchanged.
  • Both DockMotion add-tab journeys restore the current seven-tab Operator perspective without hardcoding an obsolete whole-document snapshot.
  • The add-tab postconditions prove the requested insertion index and preservation/order of all unrelated tabs for normal and reduced motion.
  • The standalone Workstation journey records the two fixed-stage bursts separately and observes more than one sequential sample in each burst.
  • Existing zero-frame failure counters remain zero: missing/replaced pane, missing destination body, hidden active header, clipped paint, overflow mutation, and fixed-stage residue.
  • No clone, temporary reparent, global overflow override, transition-duration change, or schema change is introduced.

Verification

  • Focused DockFlip unit suite covers numeric/default stacking, ancestor-only preserved landing, unchanged-lineage ambiguity, and all cleanup paths.
  • Focused DockMotion normal/reduced add-tab journeys pass against the current Operator seed.
  • Mounted Workstation L3 journey passes with two independently sampled, painted, identity-stable fixed-stage bursts.
  • Repository preflight and targeted theme/app preservation gates remain green.

Scope boundary

This is a follow-up to #15137 / PR #15143, not part of #15144's standalone-app ownership extraction. It does not redesign DockFlip, change the motion token contract, or alter the Workstation product story.

Related: #15137 Related: #15143 Related: #15144 Related: #15146

Authored by Emmy (GPT-5.6 Sol Ultra, Codex). Session adddb25d-fc36-4b08-b9a3-3a62a108cda1.

tobiu referenced in commit e8f18f3 - "fix(dock): harden FLIP boundary oracles (#15147) (#15163)" on 10:24 AM
tobiu closed this issue on 10:24 AM