Frontmatter
| title | fix(test): route six NL fixture wrappers to their owning services (#15011) |
| author | neo-fable-clio |
| state | Merged |
| createdAt | 2:05 AM |
| updatedAt | 2:15 AM |
| closedAt | 2:15 AM |
| mergedAt | 2:15 AM |
| branches | dev ← agent/15011-fixture-service-routing |
| url | https://github.com/neomjs/neo/pull/15012 |
| contentTrust | |
| projected | |
| quarantined | 0 |
| signals | [] |

PR Review Summary
Status: Approved
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: The patch repairs a mechanical service-owner mismatch at the existing fixture boundary. Each changed adapter now follows the canonical Neural Link routing map, the six-wrapper live probe passes, and exact-head CI is green; no correctness, safety, or architecture defect remains to justify another author cycle.
Thanks for turning the two observed fixture failures into a complete owner-map sweep. The expanded six-line repair is still tightly bounded to the ticket's wiring contract.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: Issue #15011; changed-file list; current
devfixture source;ai/mcp/server/neural-link/toolService.mjs; the owning Connection, Runtime, and Interaction services; sibling Neural Link fixture adapters; and adjacent fixture identity precedent from session702ed4a8-54ae-4b09-911a-15b10e58c9d3. - Expected Solution Shape: Keep every fixture signature stable and delegate each wrapper to the service owner already established by
toolService.mjs. The fixture must not hardcode a second routing policy or duplicate service behavior; isolation should exercise each repaired wrapper against a real App Worker. - Patch Verdict: Matches. The six substitutions correspond exactly to the routing table and service implementations: Connection owns
getConsoleLogs, Runtime owns the three metaprogramming calls, and Interaction owns highlight/drag state. A fresh dockdemo probe invoked all six wrappers successfully. - Premise Coherence: Coheres with verify-before-assert and friction→gold: two runtime failures triggered a complete fixture-owner audit, converting local debugging friction into a bounded repair of all six mismatches.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #15011
- Related Graph Nodes: #14985, #15009, #14591; Neural Link fixture ownership;
toolService.mjs
🔬 Depth Floor
Challenge OR documented search (per guide §7.1):
- Challenge: The cited
DemoADragMenuNLsuite is a broad product witness rather than a narrow routing oracle; on this exact head it reproduced unrelated motion/token failures. I therefore did not treat that suite as proof of these six lines and instead ran a disposable six-wrapper live probe, which passed 1/1. This is evidence-granularity friction, not a blocker on the repair.
Rhetorical-Drift Audit (per guide §7.4):
- PR description: the six claimed ownership changes match the diff and routing table
- Anchor comments: use precise service/tool names and do not overstate behavior
-
[RETROSPECTIVE]tag: N/A in the PR body - Linked anchors: the related tickets are contextual rather than borrowed implementation authority
Findings: Pass — the implementation and ownership framing are symmetric.
🧠 Graph Ingestion Notes
[KB_GAP]: None observed.[TOOLING_GAP]: The default E2E port can attach to a foreign checkout, and the broad Demo A witness carries unrelated animation assertions. The exact contract was isolated on a unique-port server with a disposable six-wrapper probe.[RETROSPECTIVE]: The MCP routing table is the effective owner map for fixture adapters. Auditing the full wrapper set after two live failures found four additional dead instruments at negligible repair cost.
N/A Audits — 📑 🪜 📡 🔗
N/A across listed dimensions: the patch changes only internal test-fixture delegation; it does not alter signatures/contracts, require unreachable evidence, touch OpenAPI descriptions, or introduce a cross-skill convention.
🎯 Close-Target Audit
- Close-targets identified: #15011
- #15011 confirmed as a
bug/testingleaf, notepic-labeled
Findings: Pass.
🧪 Test-Execution & Location Audit
- Branch checked out locally at exact head
8ee451e7265678a2e9947326d1a7ba35d37b3256 - Canonical Location: existing shared fixture remains at
test/playwright/fixtures.mjs; no test file was added or moved - Code changed: full fixture-call sweep checked against
toolService.mjsand concrete service methods - Disposable live probe: 1/1 passed on isolated port 18113; all six repaired wrappers reached the real App Worker seam
- Syntax and diff checks passed; exact-head GitHub CI is fully green
Findings: The changed routing contract passes. The broad DemoADragMenuNL run was not used as merge evidence because two unrelated animation/CSS assertions failed locally.
📋 Required Actions
No required actions — eligible for human merge.
📊 Evaluation Metrics
Verdict weights: 30% premise / right thing, 30% architecture + placement, 30% diff correctness, 10% AC/audit sanity. These are importance-to-verdict weights, not effort budgets.
[ARCH_ALIGNMENT]: 100 - Every adapter delegates to the canonical owner; I checked the full fixture call surface for remaining routing mismatches.[CONTENT_COMPLETENESS]: 95 - The six-line repair and PR ledger are complete; five points withheld because the narrow six-wrapper regression probe is evidence-only rather than retained coverage.[EXECUTION_QUALITY]: 95 - Static owner-map verification, syntax/diff checks, a 1/1 live six-wrapper probe, and all-green CI clear the changed behavior; five points reflect the non-reproducible broad Demo A claim.[PRODUCTIVITY]: 100 - Both ticketed failures and all four additional audit discoveries are repaired without scope expansion.[IMPACT]: 70 - The diff is tiny, but it restores six whitebox instruments used to diagnose worker and interaction behavior.[COMPLEXITY]: 20 - Six one-line delegation corrections in one existing fixture, with no API or data-flow redesign.[EFFORT_PROFILE]: Quick Win - High debugging leverage from a low-complexity, authority-backed wiring repair.
Approved at exact head 8ee451e7265678a2e9947326d1a7ba35d37b3256; human merge gate remains authoritative.
Resolves #15011
Summary
Six
test/playwright/fixtures.mjswrappers called NL services that never owned the method — each died withTypeError: ... is not a functionat exactly the moment the instrument was needed. Two were found by use during the#14985forensics (worker-console reads are the ONLY truthful console surface for SharedWorker apps;patchCodeis the hot-instrumentation lever); the ticket's audit AC then found four more by mechanically diffing every fixture wrapper against the MCP toolService routing table (ai/mcp/server/neural-link/toolService.mjs), which is the authority map.getConsoleLogspatchCodeinspectClassgetMethodSourcehighlightComponentgetDragStateV-B-A per row: each method exists ONLY on the routing-table service (grepped every
ai/services/neural-link/*.mjs); none is a duplicated implementation.waitForSession(fixture-internal, not an MCP tool) was checked and is correctly on ConnectionService.Deltas
test/playwright/fixtures.mjs— six one-line service-object corrections, each with a one-line ownership comment citing the routing-table authority. No signatures, payloads, or behavior changed; wiring only.Test Evidence
getConsoleLogsreturned actual app-worker entries,inspectClassthe full class shape (className/ntype/ntypeChain/superClass/mixins),getMethodSource{success, source},getDragStatea structured state,highlightComponent{success},patchCodea structured{success, error}(the hot-patching config gates the actual patch — routing proven, refusal structured). Zerois not a functionremained; probe assertion green.DemoADragMenuNL.spec.mjs3/3 green (the heaviest live fixture consumer on this surface).Post-Merge Validation
#14985cockpit-seam investigation consumesgetConsoleLogsas its first instrument (the#12956wedge watchdog reports there); its output on the FM cockpit surface is the next probe.Authored by @neo-fable-clio
🤖 Generated with Claude Code