LearnNewsExamplesServices
Frontmatter
id15212
titleRepair stale FM cockpit drill/a11y E2E witnesses after native-button convergence
stateClosed
labels
bugaitestingregression
assigneesneo-gpt
createdAtJul 16, 2026, 9:22 AM
updatedAt6:51 AM
githubUrlhttps://github.com/neomjs/neo/issues/15212
authorneo-fable
commentsCount4
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[ ] 15251 Fleet cockpit consumes the dock tear-out seam, [ ] 14613 FM cockpit drill e2e: card → detail → pop-out → reattach round-trip
closedAt6:51 AM

Repair stale FM cockpit drill/a11y E2E witnesses after native-button convergence

Closed Backlog/active-chunk-6 bugaitestingregression
neo-fable
neo-fable commented on Jul 16, 2026, 9:22 AM

Context

The Fleet cockpit has two red Whitebox E2E witnesses on current dev, but fresh falsification shows that the production card→detail path is not regressed. The ticket's original diagnosis predated the deliberate #14619 / PR #15094 accessibility convergence and therefore prescribed restoring a retired interaction.

Clean-current-dev evidence at 5738546bf4 (2026-07-16):

NEO_E2E_PORT=8212 NEO_TEST_SKIP_CI=true npx playwright test \
  test/playwright/e2e/agentos/FleetCockpitDrillNL.spec.mjs \
  test/playwright/e2e/agentos/FleetGridKeyboardA11y.spec.mjs \
  -c test/playwright/playwright.config.e2e.mjs --workers=1
<h1 class="neo-h1" data-record-id="3">2 failed</h1>
  • FleetCockpitDrillNL.spec.mjs still clicks .fm-card-avatar. PR #15094 intentionally made each card a non-interactive role=listitem and moved drill activation onto the dedicated native .fm-card-drill Button. The avatar doing nothing is now correct.
  • FleetGridKeyboardA11y.spec.mjs successfully executes native Enter and Space and renders Bravo, then Charlie. It fails later because it expects a persistent .fm-card-control-status after a successful lifecycle settle. The current lifecycle contract clears pendingAction/controlReason on success, so absence of a persistent status is correct. The test needs deterministic request evidence instead of inferring intent delivery from a state that is intentionally transient.

The prior whole-card restoration experiment is quarantined and must not be revived: it would merge the non-interactive listitem and its three native child Buttons back into competing activation authorities, undoing #14619's accepted semantics.

The Problem

The committed E2E witnesses encode two stale assumptions:

  1. The old avatar/body click target still owns drill activation.
  2. A successful lifecycle intent leaves a persistent control-status marker.

Because custom E2E configurations are not hosted-CI gates, these stale witnesses remained red while the production contracts evolved correctly.

The Architectural Reality

  • AgentCard is a non-interactive role=listitem. The resident name is a dedicated native drill Button (.fm-card-drill) with native Enter/Space semantics; lifecycle toggle/restart are separate sibling Buttons.
  • AgentCardController.onCardSelect is intentionally scoped to the drill Button. Restoring a card-root click handler would create competing drill/control authority and regress the accessibility topology ratified in #14619 / PR #15094.
  • The keyboard witness may execute a lifecycle Button, but it must do so against a deterministic test-owned Fleet bridge. It must prove one minimal request plus no drill leakage without touching a live/shared fleet or relying on transient UI state.
  • Whitebox evidence remains Playwright interaction → Neural Link engine truth. No direct controller shortcut may replace the real DOM activation path.

The Fix

  1. Update FleetCockpitDrillNL.spec.mjs to click the exact selected card's native .fm-card-drill Button. Keep the exact resident-id possession assertion and update the stale whole-card narrative.
  2. Make the lifecycle-isolation leg in FleetGridKeyboardA11y.spec.mjs deterministic: use a test-owned recording/rejecting Fleet bridge, execute the native lifecycle Button, assert exactly one minimal lifecycle request, assert the named rejection/status without a roster refresh, and prove the detail pane remains on Charlie.
  3. Re-run both scoped Whitebox E2Es together on a clean current-dev baseline.

Contract Ledger

Target Surface Source of Authority Required Behavior Forbidden Fallback Evidence
Card→detail drill witness #14619 / PR #15094 native Button convergence Click the exact resident's .fm-card-drill Button and possess that resident in AgentDetail Avatar/body click or direct controller invocation FleetCockpitDrillNL.spec.mjs
Keyboard drill witness #14619 / PR #15094 Native Enter + Space drill activation remains executable Restoring an interactive card root FleetGridKeyboardA11y.spec.mjs
Lifecycle isolation witness B4÷C2 intent seam + #14619 sibling controls Native control activation emits one minimal request and does not drill Shared/live fleet mutation; persistent-success-status assumption Recording loopback + mounted DOM/Neural Link assertions
Production code Current AgentCard / AgentCardController Remains unchanged unless a new falsifier proves a product defect Whole-card listener restoration Exact diff + both E2Es green

Acceptance Criteria

  • FleetCockpitDrillNL.spec.mjs passes by activating the dedicated native drill Button and still proves exact resident possession.
  • FleetGridKeyboardA11y.spec.mjs passes with native Enter/Space, deterministic lifecycle-request evidence, no drill leakage, focus restoration, zero scroll, and zero uncaught page errors.
  • The lifecycle leg cannot mutate a live/shared fleet and does not depend on a persistent success status.
  • No production AgentCard, AgentCardController, or Fleet interaction semantics are changed.
  • The PR body names both stale assumptions and cites #14619 / PR #15094 as the successor authority.

Out of Scope

Restoring whole-card/avatar activation · changing lifecycle product semantics · changing hosted-CI E2E coverage · the broader drill-tour leaf #14613.

Related

Parent surface #14560 · original detail witness #14608 / PR #15063 · successor accessibility authority #14619 / PR #15094 · broader drill journey #14613.

Successor-risk verdict: the ticket goal remains positive-ROI, but the original production-regression premise and unchanged-spec prescription were superseded by #14619. Amended to valid-as-written at this body revision.

Origin Session IDs: 2c0a23e9-f468-4de6-9e29-ddec96103fb4, d99146da-0478-4f23-bc16-dff04f5d650c, 1200dbd1-5159-45be-84c3-b7e323ad4979

Retrieval Hint: "FM cockpit stale drill witness native Button lifecycle status loopback"