LearnNewsExamplesServices
Frontmatter
id14591
titleWhitebox e2e: dock-layout operations + animation assertions via the NL fixture
stateClosed
labels
enhancementaitesting
assigneesneo-opus-grace
createdAtJul 4, 2026, 3:59 AM
updatedAt1:49 PM
githubUrlhttps://github.com/neomjs/neo/issues/14591
authorneo-fable-clio
commentsCount0
parentIssue13158
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAt1:49 PM
milestonev13.2

Whitebox e2e: dock-layout operations + animation assertions via the NL fixture

Closed Backlog/active-chunk-3 enhancementaitesting
neo-fable-clio
neo-fable-clio commented on Jul 4, 2026, 3:59 AM

Context

Operator seed (2026-07-04, live): /whitebox-e2e named explicitly — the Lane-3 bar is "NL changes layouts live, animated, e2e-tested" (D#14561). Model-level unit coverage exists; nothing asserts the rendered, animated, multi-surface reality end-to-end.

The Problem

Dock operations that pass model unit specs can still ship broken renders, janky transitions, or drag/animation regressions — the classes only a whitebox e2e (NL fixture inside the real app) catches. The two showcase demos additionally need their tour runs regression-locked: a broken tour is a broken video pipeline AND a broken demo.

The Architectural Reality

  • The whitebox-e2e skill + NL Playwright fixture are the house pattern (CRITICAL inherited rule: custom playwright configs only — never default npx playwright test).
  • Assertion substrate: get_dock_topology (#14587) for structural truth after each op; observe_motion for animation-state assertions; get_drag_state/get_drag_trace for drag flows.
  • e2e honesty discipline: e2e lives outside CI; specs broken by pending work stay failing-honest (red is the pointer); NEO_TEST_SKIP_CI owns CI-exclusion — never hardcoded skips (house rule, operator-corrected precedent).

The Fix

One PR, one suite (extends in a follow-up commit-range when Demo B lands):

  1. Per-operation structural specs: for each v1 op class (split, tab-move, auto-hide/reveal, resize) — execute via execute_dock_operation, assert the returned delta AND an independent get_dock_topology read agree.
  2. Animation assertions: observe_motion around each transition — motion occurs, completes, and settles (no stuck/instant transitions on the demo path).
  3. Tour replay as the e2e scenario: Demo A's deterministic tour runs as a spec — the same artifact is the test, the demo, and the recording script (one source of truth for all three).
  4. Post-#14423/Demo-B extension (same suite, later range): perspective restore + pop-out state-continuity assertions (the pane-never-remounts proof).

Acceptance Criteria

  • Every v1 op class has a structural spec (delta + independent topology read agree).
  • Animation specs assert start/settle via observe_motion (no timing sleeps — event/state-driven waits per the skill).
  • Demo A tour replays green as a spec; a tour break fails the suite.
  • Suite runs via its own named config; CI-exclusion (if any) via NEO_TEST_SKIP_CI only.
  • Cross-family review before merge.

Out of Scope

  • Demo B assertions before #14423 + #14590-class work lands (named as the follow-up range, not silently pending).
  • Unit-level model specs (exist; not duplicated).
  • Performance benchmarks (#13032 guardrail).

Related

Parent: #13158. Consumes: #14587 (NL tools), #14589 (Demo A tour). Extends-to: the perspectives showcase (Demo B). Skill: whitebox-e2e (fixture + config discipline at claim). Sweeps: live latest-20 + A2A scan 2026-07-04T01:56Z — no equivalent, no competing claim.

Origin Session ID: fa2a6fd5-7488-4af6-a0d2-3855c86003e4 Retrieval Hint: "whitebox e2e dock operations observe_motion tour replay NL fixture"

Scope reconciliation (2026-07-10, PR #14940)

This ticket predates the motion-layer gap discovery (#14929/#14779): its animation-assertion AC presumed a landed animation layer, and its tour-replay AC presumed the Demo-A tour surface. Both now have truer owners, so this ticket re-scopes to its deliverable core — the STRUCTURAL op suite (PR #14940):

  • Animation assertions (observe_motion start/settle): move to the follow-up leaf the #14779 reconciliation thread already binds — the e2e assertions land in their own commit-range once ONE dock-animating motion contract exists (#14929↔#14779 disposition, see #14779 comment thread). The epic closure matrix (#14934 / ADR 0029 §4.1) carries the evidence requirement either way — nothing is lost, it is owned where the substrate lives.
  • Tour replay as spec: belongs to the Demo-A tour surface's own acceptance (the tour-runner lane, #14912/#14640 lineage) — a tour spec without the tour is unwritable here.
  • Delivered by PR #14940: per-op structural specs (delta ↔ independent get_dock_topology agreement, byte-exact), §2.7 exclusivity live, fail-closed no-commit negative, named-config + NEO_TEST_SKIP_CI discipline.
tobiu referenced in commit b2e3a71 - "test(dashboard): whitebox NL e2e for the dockZone.v1 op surface — per-class delta↔topology agreement (#14591) (#14940)" on 1:49 PM
tobiu closed this issue on 1:49 PM