Context
PR #14828 merged the operator-directed removal of the constrained-blueprint create spine from apps/agentos and closed #14826. During exact-head review of f5e81c857fd8fd91a8455988bc9a102f5bcf8926, the removal shape was mostly correct, but the replacement childapp-connect e2e proof failed locally after the PR moved NeuralLinkChildappConnect.spec.mjs from the removed AgentOS widget fixture to apps/colors/childapps/widget.
This ticket captures the post-merge test repair requested after #14828 merged. It is intentionally narrow: restore the Neural Link childapp-connect proof without reopening the removed create-spine product direction.
The Problem
test/playwright/e2e/NeuralLinkChildappConnect.spec.mjs now navigates to /apps/colors/childapps/widget/index.html and waits for .neo-viewport to be visible before connecting through the Neural Link fixture. On exact-head local e2e, that wait times out:
TimeoutError: page.waitForSelector: Timeout 30000ms exceeded.
waiting for locator('.neo-viewport') to be visible
locator resolved to hidden <div id="colors-widget-viewport" class="neo-viewport ..."></div>The failure occurs before neuralLink.connectToApp('colors') and before the getComponent('colors-widget-viewport', ['className', 'ntype']) assertion. That means the intended replacement proof for childapp connection did not actually execute, even though the production removal PR was otherwise mergeable.
Related evidence from the same exact-head review run:
NeuralLinkCreateGrid.spec.mjs passed.
NeuralLinkWindowOps.spec.mjs passed, proving the restored bare apps/agentos/childapps/widget popup host still supports the multi-window path.
NeuralLinkChildappConnect.spec.mjs failed on the visibility wait above.
The Architectural Reality
The childapp-connect test is a Neural Link / SharedWorker topology proof, not a visual-layout proof. The important contract is that a childapp sharing a worker can be reached through neuralLink.connectToApp(...) and that a live component can be read back through the session.
The colors childapp now provides a stable root id:
apps/colors/childapps/widget/view/Viewport.mjs declares id: 'colors-widget-viewport'.
apps/colors/childapps/widget/neo-config.json enables useAiClient.
test/playwright/e2e/NeuralLinkChildappConnect.spec.mjs reads back ColorsWidget.view.Viewport by id.
An empty viewport may be attached but not visible. If the test is proving Neural Link childapp connectivity, it should wait for the stable component/DOM anchor that represents app boot and then assert engine truth through Neural Link. If visible viewport layout is intended to be part of the contract, the fixture should be made visibly mounted and the reason documented in the test.
The Fix
Repair test/playwright/e2e/NeuralLinkChildappConnect.spec.mjs so it passes against the merged #14828 tree while preserving the original proof:
- Prefer a whitebox-friendly boot wait such as
#colors-widget-viewport attached before the Neural Link readback, unless visibility is intentionally part of the proof.
- Keep the Neural Link assertion against
colors-widget-viewport and ColorsWidget.view.Viewport.
- Avoid reusing the deleted
apps/agentos/childapps/widget funnel content or restoring any create-spine fixture.
- If the colors childapp should be visibly mounted, make the minimal fixture-side change and document why visibility is part of this e2e contract.
Contract Ledger
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback |
Docs |
Evidence |
test/playwright/e2e/NeuralLinkChildappConnect.spec.mjs |
#14828 review evidence + #14826 coverage-preservation intent |
Prove connectToApp resolves a childapp and reads the live colors widget viewport |
If visibility is required, make the fixture visible and document that contract |
Test JSDoc in the spec |
Focused e2e pass |
apps/colors/childapps/widget/view/Viewport.mjs |
#14828 moved fixture |
Stable root id remains available for Neural Link readback |
Use another non-funnel childapp fixture only if colors cannot satisfy the contract |
Existing JSDoc |
Focused e2e pass |
Decision Record impact
none. This is a post-merge e2e repair for an existing Neural Link proof; it does not alter the #13349 supersession or #14826 removal decision.
Acceptance Criteria
Out of Scope
- Re-planning the conversational-creation pillar.
- Reintroducing any constrained-blueprint schema, grammar, materializer, evidence pane, or first-widget fixture.
- Changing the AgentOS popup-host behavior that #14828 preserved.
- Adding broad visual requirements to a Neural Link connectivity proof unless the test explicitly needs them.
Avoided Traps
- Treating a hidden empty viewport as a product bug: rejected unless a separate visible-layout contract proves it. This ticket is about an e2e proof that used the wrong readiness predicate.
- Deleting the childapp-connect proof: rejected. #14828 needed the capability coverage to survive the fixture move.
- Restoring the removed AgentOS widget fixture: rejected. That would reintroduce the deleted create-spine attractor.
Related
Live latest-open sweep: checked latest 20 open issues immediately before filing on 2026-07-05; no equivalent found.
A2A in-flight sweep: checked latest 30 all-status mailbox messages immediately before filing on 2026-07-05; no active overlapping claim found.
Semantic KB sweep: ask_knowledge_base("Is there an existing ticket about NeuralLinkChildappConnect failing on the colors childapp hidden viewport after PR #14828?", type="ticket") returned no PR #14828 equivalent in the available context.
Origin Session ID: 6ab85930-3c14-4b18-b3b3-97989d1e75c6
Retrieval Hint: "PR #14828 NeuralLinkChildappConnect hidden colors widget viewport exact-head e2e"
Context
PR #14828 merged the operator-directed removal of the constrained-blueprint create spine from
apps/agentosand closed #14826. During exact-head review off5e81c857fd8fd91a8455988bc9a102f5bcf8926, the removal shape was mostly correct, but the replacement childapp-connect e2e proof failed locally after the PR movedNeuralLinkChildappConnect.spec.mjsfrom the removed AgentOS widget fixture toapps/colors/childapps/widget.This ticket captures the post-merge test repair requested after #14828 merged. It is intentionally narrow: restore the Neural Link childapp-connect proof without reopening the removed create-spine product direction.
The Problem
test/playwright/e2e/NeuralLinkChildappConnect.spec.mjsnow navigates to/apps/colors/childapps/widget/index.htmland waits for.neo-viewportto be visible before connecting through the Neural Link fixture. On exact-head local e2e, that wait times out:TimeoutError: page.waitForSelector: Timeout 30000ms exceeded. waiting for locator('.neo-viewport') to be visible locator resolved to hidden <div id="colors-widget-viewport" class="neo-viewport ..."></div>The failure occurs before
neuralLink.connectToApp('colors')and before thegetComponent('colors-widget-viewport', ['className', 'ntype'])assertion. That means the intended replacement proof for childapp connection did not actually execute, even though the production removal PR was otherwise mergeable.Related evidence from the same exact-head review run:
NeuralLinkCreateGrid.spec.mjspassed.NeuralLinkWindowOps.spec.mjspassed, proving the restored bareapps/agentos/childapps/widgetpopup host still supports the multi-window path.NeuralLinkChildappConnect.spec.mjsfailed on the visibility wait above.The Architectural Reality
The childapp-connect test is a Neural Link / SharedWorker topology proof, not a visual-layout proof. The important contract is that a childapp sharing a worker can be reached through
neuralLink.connectToApp(...)and that a live component can be read back through the session.The colors childapp now provides a stable root id:
apps/colors/childapps/widget/view/Viewport.mjsdeclaresid: 'colors-widget-viewport'.apps/colors/childapps/widget/neo-config.jsonenablesuseAiClient.test/playwright/e2e/NeuralLinkChildappConnect.spec.mjsreads backColorsWidget.view.Viewportby id.An empty viewport may be attached but not visible. If the test is proving Neural Link childapp connectivity, it should wait for the stable component/DOM anchor that represents app boot and then assert engine truth through Neural Link. If visible viewport layout is intended to be part of the contract, the fixture should be made visibly mounted and the reason documented in the test.
The Fix
Repair
test/playwright/e2e/NeuralLinkChildappConnect.spec.mjsso it passes against the merged #14828 tree while preserving the original proof:#colors-widget-viewportattached before the Neural Link readback, unless visibility is intentionally part of the proof.colors-widget-viewportandColorsWidget.view.Viewport.apps/agentos/childapps/widgetfunnel content or restoring any create-spine fixture.Contract Ledger
test/playwright/e2e/NeuralLinkChildappConnect.spec.mjsconnectToAppresolves a childapp and reads the live colors widget viewportapps/colors/childapps/widget/view/Viewport.mjsDecision Record impact
none. This is a post-merge e2e repair for an existing Neural Link proof; it does not alter the #13349 supersession or #14826 removal decision.
Acceptance Criteria
test/playwright/e2e/NeuralLinkChildappConnect.spec.mjspasses against currentdev.neuralLink.connectToApp('colors')and readscolors-widget-viewportthrough the Neural Link fixture.NeuralLinkWindowOps.spec.mjsstill passes, preserving the bare AgentOS popup-host proof from #14828.apps/agentos/view/create/**or first-widget funnel code is restored.Out of Scope
Avoided Traps
Related
Live latest-open sweep: checked latest 20 open issues immediately before filing on 2026-07-05; no equivalent found.
A2A in-flight sweep: checked latest 30 all-status mailbox messages immediately before filing on 2026-07-05; no active overlapping claim found.
Semantic KB sweep:
ask_knowledge_base("Is there an existing ticket about NeuralLinkChildappConnect failing on the colors childapp hidden viewport after PR #14828?", type="ticket")returned no PR #14828 equivalent in the available context.Origin Session ID: 6ab85930-3c14-4b18-b3b3-97989d1e75c6
Retrieval Hint: "PR #14828 NeuralLinkChildappConnect hidden colors widget viewport exact-head e2e"