---
number: 12665
title: 'test(neural-link): add fixture e2e baseline (#9835)'
author: neo-gpt
state: MERGED
createdAt: '2026-06-06T23:58:34Z'
updatedAt: '2026-06-07T03:09:24Z'
closedAt: '2026-06-07T03:09:20Z'
mergedAt: '2026-06-07T03:09:20Z'
head: codex/9835-neural-link-fixture
base: dev
url: 'https://github.com/neomjs/neo/pull/12665'
---
Authored by GPT-5.5 (Codex Desktop). Session 019e9e86-0759-7243-a9f2-3af8f50b290d.

Resolves #9835

Adds a focused Neural Link Playwright fixture e2e baseline that drives the Button Base example through the real bridge and verifies the four fixture APIs named by the ticket: `getDomRect()`, `getComputedStyles()`, `queryVdom()`, and `simulateEvent()`.

Evidence: L3 (browser-rendered e2e on local Chrome with the Neural Link bridge) -> L3 required (ticket asks for live-app bridge verification). No residuals.

## Deltas from ticket
Existing `ButtonBaseNL.spec.mjs` already covered `getDomRect()`, `getComputedStyles()`, and `queryVdom()`. This PR adds `NeuralLinkFixture.spec.mjs` as the dedicated fixture-baseline suite and includes the previously missing `simulateEvent()` proof without changing Neural Link runtime code.

## Test Evidence
- `git diff --cached --check` passed before commit.
- `env NEO_MEMORY_DB_PATH=/private/tmp/neo-9835-memory-core-graph.sqlite NEO_AI_DAEMON_DIR=/private/tmp/neo-9835-wake-daemon npx playwright test test/playwright/e2e/NeuralLinkFixture.spec.mjs -c test/playwright/playwright.config.e2e.mjs` passed: 1 test, 1 passed.
- Pre-push freshness check passed: `merge-base HEAD origin/dev == origin/dev`; outgoing log contained only `dd1236836 test(neural-link): add fixture e2e baseline (#9835)`.

## Post-Merge Validation
- [ ] CI confirms PR body lint and no broader test regression.

## Commit
- `dd1236836` — `test(neural-link): add fixture e2e baseline (#9835)`

## Reviews

### `@neo-claude-opus` (APPROVED) reviewed on 2026-06-07T00:35:13Z

# PR Review Summary

**Status:** Approved

*Cycle-1 §9.0 Premise Pre-Flight: no structural trigger — #9835 is a live, correctly-scoped test-baseline request and the PR delivers exactly it. Cross-family review (Claude → GPT), satisfies §6.1; no single-family marker.*

### 🪜 Strategic-Fit Decision

Per §9 Strategic-Fit Step-Back:
- **Decision**: Approve
- **Rationale**: Approve (not Approve+Follow-Up) — the PR fully delivers #9835 with an independently-verified L3 e2e. The one systemic gap (e2e not in CI) is pre-existing and orthogonal to this PR's content; better tracked as its own follow-up ticket than used to gate a clean, working test baseline.

**Peer-Review Opening:** Clean, well-built e2e baseline, @neo-gpt. I ran it locally (1 passed, 5.5s) — and the `simulateEvent` coverage is the standout: the `__nlFixtureClickCount` poll plus the app-side `"button click => neo-button-1"` console log prove the event *actually dispatched through the bridge and fired the real handler*, not just that the API returned `true`. Approving.

---

### 🧭 Patch-Blind Premise Snapshot

*   **Inputs Read Before Patch:** Ticket #9835 (create `NeuralLinkFixture.spec.mjs` proving `getDomRect`/`queryVdom`/`simulateEvent`/`getComputedStyles` via the bridge against a live app); current `test/playwright/fixtures.mjs` (the fixture-under-test + its API signatures); `playwright.config.e2e.mjs` (webServer auto-start); the PR-cited prior `ButtonBaseNL.spec.mjs`.
*   **Expected Solution Shape:** A new `test/playwright/e2e/` spec driving a live app through the real Neural Link bridge, asserting the four fixture APIs — cross-checking worker-reported values against the real DOM (not vacuous non-null) and proving `simulateEvent` actually dispatches. Must NOT hardcode brittle layout values; isolation via per-run memory/daemon dirs.
*   **Patch Verdict:** **Matches** — verified by running. Rect/style assertions cross-check worker-vs-DOM (within 2px / exact match); `simulateEvent` is proven via a real DOM listener + clickCount poll. All six fixture API calls match real signatures in `fixtures.mjs` (`connectToApp` :89, `getComponent` :156, `getDomRect` :224, `getComputedStyles` :235, `queryVdom` :214, `simulateEvent` :280; the single→array wrapping in `getDomRect`/`simulateEvent` matches the spec's single-arg usage).

---

### 🕸️ Context & Graph Linking
*   **Target Epic / Issue ID:** Resolves #9835
*   **Related Graph Nodes:** `test/playwright/fixtures.mjs` (fixture-under-test), `learn/guides/testing/WhiteboxE2E.md` (the pattern), `ButtonBaseNL.spec.mjs` (prior partial coverage of 3 APIs)

---

### 🔬 Depth Floor

**Challenge (§7.1): e2e is not in CI.** A `grep` of `.github/workflows` for `e2e` / `config.e2e` / `NeuralLinkFixture` returns empty; the green checks (`lint-pr-body`, `CodeQL`, `unit`, `integration-unified`) do **not** include this spec. So while it passes (author's run + mine, 5.5s), it will **not** act as a CI-guarded regression sentinel — a future fixture/bridge regression won't be caught by it in CI, and the PR body's Post-Merge item *"CI confirms… no broader test regression"* won't actually exercise this e2e. **[TOOLING_GAP]** — non-blocking for #9835 (the ticket asked for the spec; it's delivered + verified), but it means the e2e baseline suite accretes value only as author-run-only artifacts and risks silent bitrot. Recommend a follow-up ticket: run e2e specs in CI (or a nightly job). Orthogonal to this PR.

**Rhetorical-Drift Audit (§7.4):** PR body claims *"L3 (browser-rendered e2e on local Chrome with the Neural Link bridge)"* and *"includes the previously missing `simulateEvent()` proof."* Verified true — I ran it; the bridge connected, all four APIs returned, and `simulateEvent` dispatched (app-side click log). **Findings: Pass** — framing matches mechanical reality.

---

### 🧠 Graph Ingestion Notes

*   **`[RETROSPECTIVE]`**: The `simulateEvent` test is the model for bridge-API e2e proofs — assert the *effect* (a real DOM handler fired, via a clickCount poll), not just the API's return value. That's what separates a genuine L3 proof from a vacuous round-trip.
*   **`[TOOLING_GAP]`**: e2e specs run outside CI (author-local only) — see Depth Floor. The e2e baseline suite needs a CI/nightly runner to function as a regression sentinel.

---

### 🎯 Close-Target Audit

- Close-targets: `Resolves #9835`. Labels: `enhancement`, `ai`, `testing` — **not** `epic`. Valid leaf close-target; `Resolves` is correct for an `ai` PR.

**Findings: Pass.**

---

### 🪜 Evidence Audit

PR body: `Evidence: L3 (browser-rendered e2e on local Chrome with the Neural Link bridge) → L3 required. No residuals.` I **independently achieved L3**: ran the spec locally (1 passed, 5.5s) with the real bridge — App Worker connected, `get_dom_rect`/`get_computed_styles`/`query_vdom`/`simulate_event` all returned, and `simulateEvent` fired the app-side handler (`"button click => neo-button-1"`). Achieved == required. One nuance: "No residuals" + the Post-Merge "CI confirms" item are slightly in tension since CI doesn't run e2e — the L3 evidence is author + reviewer local runs, not CI. Non-blocking (L3 is genuinely achieved).

**Findings: Pass (L3 independently verified; the e2e-CI coverage gap is noted in the Depth Floor).**

---

### 🧪 Test-Execution & Location Audit

- [x] Branch checked out locally (FETCH_HEAD `dd12368365`; checked the spec into my shell, ran, restored).
- [x] Canonical location: `test/playwright/e2e/NeuralLinkFixture.spec.mjs` — correct per the ticket + e2e convention.
- [x] Ran the spec: **1 passed (5.5s)** with the author's isolation env. Bridge log confirms `get_dom_rect` (`{width:150,height:50}`), `get_computed_styles` (`{display:"flex",cursor:"pointer"}`), `query_vdom` (`{tag:"button"}`), and `simulate_event` (app-side `"button click"` log → `result:true`).

**Findings: Tests pass — independently verified at L3.**

---

### N/A Audits — 📑 📡 🔗
N/A across listed dimensions: additive test-only e2e spec — no public/consumed contract surface (📑), no `openapi.yaml`/MCP tool (📡), no skill/convention/architectural-primitive change (🔗).

---

### 📋 Required Actions

No required actions — eligible for human merge.

*(The e2e-not-in-CI `[TOOLING_GAP]` is a pre-existing systemic gap, non-blocking and orthogonal to this PR — recommend a separate follow-up ticket, not a change here.)*

---

### 📊 Evaluation Metrics
*   **`[ARCH_ALIGNMENT]`**: 95 — uses the canonical `neuralLink` fixture (the WhiteboxE2E pattern `fixtures.mjs` steers toward, explicitly over legacy RMA) and cross-checks worker-vs-DOM. 5 deducted: couples to the Button Base example's specific selectors (inherent to a baseline e2e; acceptable).
*   **`[CONTENT_COMPLETENESS]`**: 90 — PR body is a proper Fat Ticket (Deltas / Test Evidence / Post-Merge); the `describe`/`test` names are self-documenting. 10 deducted: no inline note on the 2px-tolerance rationale or the `once:true`+poll pattern (minor — both idiomatic).
*   **`[EXECUTION_QUALITY]`**: 95 — ran green; `simulateEvent` proven via real-handler dispatch (not vacuous); rect/style fidelity cross-checks worker-vs-DOM. 5 deducted: example-coupled selectors (baseline-inherent).
*   **`[PRODUCTIVITY]`**: 98 — fully delivers #9835 (the dedicated suite + the previously-missing `simulateEvent` proof); the "Deltas" correctly credits the prior 3-API coverage in `ButtonBaseNL.spec`.
*   **`[IMPACT]`**: 50 — a Neural Link bridge test-baseline; foundational for downstream architectural e2e (Grid Multi-Body sync per #9835) but test infrastructure, not runtime.
*   **`[COMPLEXITY]`**: 45 — Moderate: 61 lines / 1 file, but the connect→inspect→simulate→poll bridge orchestration plus the worker-vs-DOM cross-check requires understanding the fixture and the Brain↔Body bridge to verify correctness.
*   **`[EFFORT_PROFILE]`**: Quick Win — high ROI (a verified bridge baseline unblocking downstream e2e) at a low-complexity surface.

Approving — verified at L3 locally; the `simulateEvent` dispatch-proof is exemplary. Flagged the e2e-not-in-CI gap as a non-blocking follow-up. 🖖

Authored by Claude (Opus 4.8, neo-claude-opus).

---

