apps/agentos — the Fleet Manager cockpit — now lives in neomjs/neo-agent-institution, which was created on 2026-08-26 and runs today against a dockerized Agent OS. The Engine still carries a full duplicate of the app, its styles, and the Electron harness. Two copies of a live application in two repositories is a divergence waiting to happen, and the Engine is the wrong owner: it is the Body, and the Fleet Manager is a product built on the Body.
This is the Engine-side completion of a move that has already happened on the receiving end.
The Problem
The Engine ships an entire application it does not own. Concretely, apps/agentos/**, three trees of agentos SCSS, and harness/** are duplicated between this repository and the institution repo, while the agentos and harness specs still run here against source that now has its canonical home elsewhere.
The institution repo also has no test/ directory at all, while its package.json already declares test-unit and test-e2e scripts pointing at test/playwright/playwright.config.unit.mjs and test/playwright/playwright.config.e2e.mjs. Those scripts are dangling today. Removing the Engine's copies without moving coverage first would leave the app with no tests in either repository.
Sequencing is therefore load-bearing: coverage moves first, removal second. A removal that lands ahead of the move converts a duplicate into a gap.
The Architectural Reality
Measured at origin/dev514c6709bb.
Remove from the Engine — 165 files:
path
files
apps/agentos/**
112
resources/scss/src/apps/agentos/**
29
resources/scss/theme-neo-dark/apps/agentos/**
2
resources/scss/theme-neo-light/apps/agentos/**
2
harness/**
20
The two theme trees are easy to miss when scoping from resources/scss/src/ alone; all three must go together or the theme build retains rules for an app that no longer exists.
The receive is complete.neo-agent-institution PR #6 merged at 48fcc8e, landing 132 product-coverage paths (103 specs + 29 support files) plus the Playwright runners the target repo lacked. Census verified against neomjs/neo@915c1a01e7: 58 unit/apps/agentos · 8 unit/harness · 58 e2e/agentos · 1 component · 1 visual spec + 6 goldens.
All 15 non-received paths carry a disposition — none falls through as a side effect of the source removal (ledger by @neo-gpt-emmy, verified here against the tree):
FleetManagerNoTourWitnessNL.spec.mjs moved with the receive rather than retiring: what it witnesses is that the Fleet Manager runs no tour, and no-tour is now the product contract.
Keep src/ai/client/TourRunner.mjs and src/ai/client/tourScript.mjs. Removing them was considered and rejected: apps/workstation is a pure demo app that legitimately keeps its tour, and it consumes the runner at apps/workstation/view/Workspace.mjs:18. Two surviving specs also bind to it — unit/apps/workstation/tour/denseWorkstation.spec.mjs and unit/examples/dashboard/choreography/demoADockChoreography.spec.mjs. The runner keeps a real consumer and stays.
The Fix
The receive gate is closed, so what remains is the Engine-side removal. Ledger:
Shared runners and Engine-owned witnesses are kept and retargeted. No tour or Mission-Control source is restored.
Acceptance Criteria
AC-1 — coverage lands before removal. Satisfied: institution PR #6 merged at 48fcc8e with 132 product-coverage paths and green CI on both its isolated and explicit-Brain jobs.
AC-2apps/agentos/, resources/scss/{src,theme-neo-dark,theme-neo-light}/apps/agentos/ and harness/ are absent from dev. Verify: git ls-tree -r --name-only origin/dev | grep -cE '^(apps/agentos/|harness/|resources/scss/.*agentos)' returns 0.
AC-3 No dangling references remain. grep -rn "apps/agentos\|/harness/" --include='*.mjs' --include='*.json' --include='*.yml' src/ apps/ test/ buildScripts/ .github/ package.json returns nothing outside the generated ticket-data mirrors — resources/content/**andapps/portal/resources/data/tickets/**, both of which quote removed paths inside issue titles and are records rather than references. This is the check that the deleted apps/agentos/tour/ directory failed in the other direction — a removal whose consumer was never named.
AC-4src/ai/client/TourRunner.mjs and tourScript.mjs are still present, and unit/apps/workstation/tour/denseWorkstation.spec.mjs plus unit/examples/dashboard/choreography/demoADockChoreography.spec.mjs are green.
AC-5 The theme build succeeds with no agentos rules emitted. npm run build-themes -- -n -e dev -t all completes and no built CSS references an agentos selector.
AC-6 — every non-received path is dispositioned, and the ledger reconciles. The 15 exclusions resolve as 6 retired + 9 moved; the PR shows 312 old paths removed, 9 added, net −303, and the three removal populations measured at head (112 / 20 / 33). Silence is not a disposition.
AC-7 — the 9 moved specs are green at their new home under test/playwright/e2e/dashboard/, and none retains an agentos import path.
Out of Scope
apps/workstation and its tour. It is a pure demo app; a demo may carry its own tour. Explicitly not touched.
src/ai/client/**. The Fleet Manager reaches the Agent OS over the wire, not through imports; the client layer is Engine capability and stays.
Anything under resources/content/**. That tree is the mirrored public record of issues and PRs that referenced these paths. It documents what happened and must not be rewritten.
Avoided Traps
Scoping the SCSS from resources/scss/src/ alone. That finds 29 of 33 and silently leaves the two theme trees behind.
Moving every agentos spec. 15 test source that does not exist in the destination, so moving them ports a break rather than coverage — they retire or relocate to their real subject instead.
Removing before the move. Turns a duplicate into a coverage gap, in a repository that currently has no test/ directory at all.
Removing TourRunner because its most visible consumer is leaving. It has a live consumer in apps/workstation and two surviving specs; readers orphaning a writer is the same defect class as a writer orphaning its readers.
Decision Record impact
none — this removes a duplicate application from the Engine. It records no new architectural decision and amends no ADR.
Anchor: all counts reproduce from origin/dev915c1a01e7 via the AC-2 and AC-3 commands.
Live latest-open sweep: checked the latest 20 open issues at 2026-08-26T21:30Z; no equivalent found. A2A in-flight claim sweep: 20 most recent messages; active claims are neo-agent-brain#179 and neomjs/neo#17791 (@neo-gpt-emmy / @neo-gpt), both different scope — no collision.
Context
apps/agentos— the Fleet Manager cockpit — now lives inneomjs/neo-agent-institution, which was created on 2026-08-26 and runs today against a dockerized Agent OS. The Engine still carries a full duplicate of the app, its styles, and the Electron harness. Two copies of a live application in two repositories is a divergence waiting to happen, and the Engine is the wrong owner: it is the Body, and the Fleet Manager is a product built on the Body.This is the Engine-side completion of a move that has already happened on the receiving end.
The Problem
The Engine ships an entire application it does not own. Concretely,
apps/agentos/**, three trees ofagentosSCSS, andharness/**are duplicated between this repository and the institution repo, while the agentos and harness specs still run here against source that now has its canonical home elsewhere.The institution repo also has no
test/directory at all, while itspackage.jsonalready declarestest-unitandtest-e2escripts pointing attest/playwright/playwright.config.unit.mjsandtest/playwright/playwright.config.e2e.mjs. Those scripts are dangling today. Removing the Engine's copies without moving coverage first would leave the app with no tests in either repository.Sequencing is therefore load-bearing: coverage moves first, removal second. A removal that lands ahead of the move converts a duplicate into a gap.
The Architectural Reality
Measured at
origin/dev514c6709bb.Remove from the Engine — 165 files:
apps/agentos/**resources/scss/src/apps/agentos/**resources/scss/theme-neo-dark/apps/agentos/**resources/scss/theme-neo-light/apps/agentos/**harness/**The two theme trees are easy to miss when scoping from
resources/scss/src/alone; all three must go together or the theme build retains rules for an app that no longer exists.The receive is complete. neo-agent-institution PR #6 merged at
48fcc8e, landing 132 product-coverage paths (103 specs + 29 support files) plus the Playwright runners the target repo lacked. Census verified againstneomjs/neo@915c1a01e7: 58unit/apps/agentos· 8unit/harness· 58e2e/agentos· 1 component · 1 visual spec + 6 goldens.All 15 non-received paths carry a disposition — none falls through as a side effect of the source removal (ledger by @neo-gpt-emmy, verified here against the tree):
e2e/dashboardTearOutMatrixRows4To7NLFleetManagerNoTourWitnessNL.spec.mjsmoved with the receive rather than retiring: what it witnesses is that the Fleet Manager runs no tour, and no-tour is now the product contract.Keep
src/ai/client/TourRunner.mjsandsrc/ai/client/tourScript.mjs. Removing them was considered and rejected:apps/workstationis a pure demo app that legitimately keeps its tour, and it consumes the runner atapps/workstation/view/Workspace.mjs:18. Two surviving specs also bind to it —unit/apps/workstation/tour/denseWorkstation.spec.mjsandunit/examples/dashboard/choreography/demoADockChoreography.spec.mjs. The runner keeps a real consumer and stays.The Fix
The receive gate is closed, so what remains is the Engine-side removal. Ledger:
apps/agentos· 20harness· 33 AgentOS SCSSe2e/dashboardShared runners and Engine-owned witnesses are kept and retargeted. No tour or Mission-Control source is restored.
Acceptance Criteria
48fcc8ewith 132 product-coverage paths and green CI on both its isolated and explicit-Brain jobs.apps/agentos/,resources/scss/{src,theme-neo-dark,theme-neo-light}/apps/agentos/andharness/are absent fromdev. Verify:git ls-tree -r --name-only origin/dev | grep -cE '^(apps/agentos/|harness/|resources/scss/.*agentos)'returns 0.grep -rn "apps/agentos\|/harness/" --include='*.mjs' --include='*.json' --include='*.yml' src/ apps/ test/ buildScripts/ .github/ package.jsonreturns nothing outside the generated ticket-data mirrors —resources/content/**andapps/portal/resources/data/tickets/**, both of which quote removed paths inside issue titles and are records rather than references. This is the check that the deletedapps/agentos/tour/directory failed in the other direction — a removal whose consumer was never named.src/ai/client/TourRunner.mjsandtourScript.mjsare still present, andunit/apps/workstation/tour/denseWorkstation.spec.mjsplusunit/examples/dashboard/choreography/demoADockChoreography.spec.mjsare green.agentosrules emitted.npm run build-themes -- -n -e dev -t allcompletes and no built CSS references anagentosselector.312old paths removed,9added, net−303, and the three removal populations measured at head (112 / 20 / 33). Silence is not a disposition.test/playwright/e2e/dashboard/, and none retains anagentosimport path.Out of Scope
apps/workstationand its tour. It is a pure demo app; a demo may carry its own tour. Explicitly not touched.src/ai/client/**. The Fleet Manager reaches the Agent OS over the wire, not through imports; the client layer is Engine capability and stays.resources/content/**. That tree is the mirrored public record of issues and PRs that referenced these paths. It documents what happened and must not be rewritten.Avoided Traps
resources/scss/src/alone. That finds 29 of 33 and silently leaves the two theme trees behind.test/directory at all.TourRunnerbecause its most visible consumer is leaving. It has a live consumer inapps/workstationand two surviving specs; readers orphaning a writer is the same defect class as a writer orphaning its readers.Decision Record impact
none— this removes a duplicate application from the Engine. It records no new architectural decision and amends no ADR.Related
#17791 (Brain executables leave the Engine — sibling removal, different subject) · #17786 · #17422 (same shape for devindex: move tests out first, then remove) · neo-agent-institution#1 (the receive ticket) · neo-agent-institution PR #6 (merged
48fcc8e) ·neomjs/neo-agent-brainPR #178Handoff Retrieval Hints
"Fleet Manager app leaves the Engine agentos scss harness removal"origin/dev915c1a01e7via the AC-2 and AC-3 commands.Live latest-open sweep: checked the latest 20 open issues at 2026-08-26T21:30Z; no equivalent found. A2A in-flight claim sweep: 20 most recent messages; active claims are
neo-agent-brain#179andneomjs/neo#17791(@neo-gpt-emmy / @neo-gpt), both different scope — no collision.Origin Session ID: 17d624e9-5964-4766-a40a-e971cfd3c5a2
— Vega (Claude Opus 5, Claude Code) 🌿