LearnNewsExamplesServices
Frontmatter
id15286
titleDockDragDropNL seed assert drifted from the dock example's 7-item main-tabs
stateClosed
labels
bugaitesting
assigneesneo-fable-clio
createdAtJul 16, 2026, 6:56 PM
updatedAtJul 16, 2026, 7:22 PM
githubUrlhttps://github.com/neomjs/neo/issues/15286
authorneo-fable-clio
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtJul 16, 2026, 7:22 PM

DockDragDropNL seed assert drifted from the dock example's 7-item main-tabs

Closed Backlog/active-chunk-6 bugaitesting
neo-fable-clio
neo-fable-clio commented on Jul 16, 2026, 6:56 PM

Context

test/playwright/e2e/dashboard/DockDragDropNL.spec.mjs fails at its seed assert — before any drag runs: Error: the example must seed main-tabs as [strategy, swarm]. Found 2026-07-16 during the #15207 regression sweep; verified pre-existing on the agent/15207-shared-affordance-owner baseline via a clean-stash run (identical failure with zero working-tree changes), so it is not caused by that lane's diff. Per the repo's honest-red policy, broken-by-drift e2e specs stay failing rather than skipped — this ticket is the realignment.

The Problem

The spec pins the dock example's seed document as main-tabs: [strategy, swarm], but examples/dashboard/dock/MainContainer.mjs:43 now seeds seven items: ['strategy', 'swarm', 'metrics', 'timeline', 'agents', 'alerts', 'history'] (the example evolved deliberately — seven tabs create the overflow pressure the tab-overflow affordance work needed). The spec's journey intent (a real pointer drag reorders the COMMITTED dock model in the App Worker) is untouched; only its seed coupling and its drag targeting are stale:

  • the before assert hard-equals the 2-item list;
  • the drag releases at swarmBox.x + swarmBox.width + 12 — "just past Swarm's right edge" was the tab-into-last-position gesture on a 2-tab bar, but on a 7-tab bar that point sits inside Metrics' territory, so even post-seed-fix the landing index would be ambiguous.

The Architectural Reality

The spec reads worker truth through the neuralLink fixture (getComponent(holderId, ['dockModel'])) against Neo.examples.dashboard.dock.MainContainer — the right pattern; only the pinned expectations drifted. The example seed at examples/dashboard/dock/MainContainer.mjs:29-43 is the product surface and stays authoritative (a review-mode variant at line 54 flips activeItemId — untouched here). The base sort commits a reorder when the drag crosses a sibling's midpoint (src/draggable/container/SortZone.mjs startIndex !== currentIndex at drag end), so a release at Swarm's center is the deterministic single-swap gesture regardless of how many tabs follow.

The Fix

One PR, spec-only (test/playwright/e2e/dashboard/DockDragDropNL.spec.mjs):

  1. Seed assert becomes position-scoped: items.slice(0, 2) equals ['strategy', 'swarm'] — the drag's actual precondition (the two participants adjacent at the head), robust to future tail-item evolution while still failing loudly if the participants move.
  2. The drag releases at Swarm's center (drop the +width+12 overshoot): crossing exactly one sibling midpoint = exactly one swap.
  3. The post-drag assert checks items.slice(0, 2) equals ['swarm', 'strategy'] AND the tail (items.slice(2)) is byte-identical to the seed's tail — the reorder moved exactly the two participants and nothing else.

Acceptance Criteria

  • NEO_E2E_PORT=8096 npx playwright test DockDragDropNL -c test/playwright/playwright.config.e2e.mjs --workers=1 → 1/1 green on current dev.
  • The spec survives future tail-item additions to the example seed (no full-list hard-equal remains).
  • The reorder assert proves the exact single swap (head pair flipped, tail unchanged) in the App-Worker committed document.

Out of Scope

The example's seed content itself (authoritative as-is) · the drag-stack repairs riding PR #15282 (sensor detached-node dispatch, zero-area self-heal, path-reorder suppression) — if this spec's drag empirically requires the sensor repair on the 7-tab overflowing bar, this ticket gains a blocked_by edge to #15207's PR instead of duplicating the fix.

Related

Found during #15207 / PR #15282 regression sweep · example seed evolution context: the tab-overflow affordance arc (#15098) · honest-red policy precedent: NEO_TEST_SKIP_CI owns CI-exclusion, specs stay failing-honest.

Live latest-open sweep: checked latest 20 open issues at 2026-07-16T16:55Z; no equivalent found. A2A in-flight sweep (30 messages, all read-states, herd window): no competing [lane-claim] on this scope.

Origin Session ID: 9324eb66-9cca-4ca9-9286-af37733ed699 Retrieval Hint: "DockDragDropNL seed drift dock example seven tabs reorder journey realignment"

tobiu referenced in commit d0f2c2e - "test(dashboard): realign the dock reorder journey with the 7-item example seed (#15286) (#15289) on Jul 16, 2026, 7:22 PM
tobiu closed this issue on Jul 16, 2026, 7:22 PM