Discussion #15090 has graduated to Epic neomjs/neo-agent-brain#107. Its first implementation-independent requirement is a focused decision record that fixes the authority and transport boundaries before any code leaf becomes ready.
The live architecture spans route production, lifecycle facts, queryable Bird Views, hook projections, multiple harness residents, and future Fleet reads. Without one ADR, each implementation ticket would re-derive service ownership, cache identity, lease semantics, and degradation behavior from a long Discussion—exactly the drift the graduation was designed to prevent.
The Problem
The converged design is precise at the system level, but several decisions must become durable, merge-gated authority:
the canonical Golden Path route is currently rendered to sandman_handoff.md, and AgentOrchestrator.parseGoldenPath() reparses that Markdown;
.claude/hooks/laneStateStopHook.mjs reads a legacy lifecycle-state.json whose goldenPathDirection array lacks the new typed provenance/freshness contract;
no accepted record owns the zero-authority federation boundary across lifecycle, route, Bird Views, and hooks;
“exactly one projection writer” needs an enforceable cross-resident acquisition, crash-takeover, stale-lease, and fencing contract—not a social singleton;
current-state projections must never become durable truth, another scorer, or a mutable session-to-agent authority map;
future Fleet awareness must not inherit process-control or bulk-read authority.
The ADR is the gate that prevents these ambiguities from hardening differently across independent leaves.
ai/services/memory-core/helpers/walAppendLock.mjs is explicitly not a safe model because its timeout path may run unlocked;
ADR 0028 owns the durable/dynamic historical tier split, ADR 0033 owns additive-never-gating direction semantics, ADR 0020 owns the harness concept, and ADR 0031 requires every new ADR to add exactly one seam-table row in the same diff.
The new ADR must compose these owners without amending their substance, except for the mandatory ADR 0031 seam-table registration.
Agent OS structure-map gate: executed 2026-07-12. This leaf creates no new .mjs file; structural-pre-flight for implementation modules belongs to their later leaves.
The Fix
Author learn/agentos/decisions/0035-live-lane-awareness-composition.md as the accepted authority for:
four-surface ownership and mechanically zero-authority federation;
the typed ComputedRouteResult / advisory split and consumer migration boundary;
exact lifecycle-frontier actor/state semantics;
asymmetric consumer binding: global route, attested-agent lifecycle, instance as transport/attestation, session as correlation only;
fixed Bird-View invocation descriptors and pure hook projections;
an enforceable single-writer projection lease with atomic old-complete/new-complete publication;
capability separation among self-awareness, future Fleet awareness-read, and Fleet process control;
offline-only exposure/choice/outcome evidence; and
quarantine/migration of the legacy unprovenanced lifecycle-state file.
The ADR must select and justify the actual writer-lease owner. A Memory-Core-brokered lease is the evidence-backed leading shape because all residents already share that substrate, but another placement is acceptable only if it proves equivalent cross-resident identity, fencing, stale takeover, and fail-closed exclusivity. Reusing a never-fail lock that can execute unlocked is forbidden.
The same PR updates ADR 0031’s seam table with exactly one ADR 0035 row.
Contract Ledger
Target Surface
Source of Authority
Proposed Behavior
Fallback / Edge Case
Docs
Evidence
New ComputedRouteResult contract
D#15090 OQ2 / Epic neomjs/neo-agent-brain#107
One canonical GP pass emits a typed route with executable route items separated from non-executable declared-intent advisory context.
Empty, missing, stale, and degraded remain distinct; advisory never turns empty into routed.
ADR 0035
Schema examples + consumer matrix in ADR; later executable leaf tests.
New lifecycle-frontier contract
D#15090 OQ3 / Epic neomjs/neo-agent-brain#107
Exact actor order and source clocks produce response-required facts separately from ranking.
Foreign/unattested lifecycle is absent; pending CI alone is excluded; clearing/re-entering predicates resets clocks.
ADR 0035
Inclusion/exclusion table + transition matrix in ADR; later producer tests.
New combined projection writer
D#15090 OQ5/OQ6 / Epic neomjs/neo-agent-brain#107
Exactly one fenced writer owns each combined projection; producers submit channel envelopes and watermarks; publication is atomic.
Contention, stale lease, crash takeover, malformed holder, and release-token mismatch are explicit; never run an unfenced writer.
ADR 0035
Sequence diagram + failure table + precedent comparison to heavy-maintenance lease and WAL append lock.
amends mechanically, not semantically: ADR 0031 receives the required ADR 0035 seam-table row in the same diff.
aligned-with: ADR 0024 when implementation introduces graph events; no graph node/edge class is created by this ADR leaf.
Decision Record
Required: ADR 0035. This ticket is the gating first leaf of Epic neomjs/neo-agent-brain#107. Every code leaf remains not-code-ready until the ADR PR is accepted at the human merge gate.
Discussion Criteria Mapping
OQ1 → authority table and no-general-composer boundary.
OQ2 → typed route/advisory result and Markdown-consumer migration.
OQ3 → exact lifecycle actor stages, predicates, clocks, and resets.
OQ4 → current-state landscape stays derived, cite-backed, and non-authoritative.
OQ7 → separate Bird Views referenced only through fixed typed descriptors.
OQ8 → offline feedback firewall.
OQ9 → ADR belongs under composition Epic neomjs/neo-agent-brain#107 without reparenting existing tickets.
OQ10 → this ADR is first in merge order and gates every code leaf.
Acceptance Criteria
Add learn/agentos/decisions/0035-live-lane-awareness-composition.md using the established ADR lifecycle/attribute format and cite D#15090 plus Epic neomjs/neo-agent-brain#107.
Add exactly one ADR 0035 row to ADR 0031’s seam table in the same diff; the seam-table lint remains green.
Record one explicit owner per lifecycle, route, Bird-View, projection-writer, hook-reader, and future Fleet-read boundary; state mechanically why federation has zero authority.
Define ComputedRouteResult with route/advisory separation, provenance, status, version, watermark/freshness, citation, and notAuthority semantics.
Define exact lifecycle actor stages, repair/reviewable/Task predicates, actionableSince clocks, reset rules, and exclusion cases.
Define consumer-binding resolution and failure behavior for explicit agent identity, harness instance, session correlation, collision, expiry, recipient mismatch, and route-only fallback.
Select the projection-writer lease owner and specify acquisition, fencing token/epoch, contention, TTL renewal or bounded ownership, crash takeover, stale/malformed recovery, token-checked release, and fail-closed behavior. A path that can execute unfenced is explicitly rejected.
Define producer-to-writer submission plus temporary-sibling/atomic-rename publication so readers observe old-complete or new-complete state and concurrent channels cannot erase one another.
Define capability-fixed contextViews, pure-hook restrictions, and separate historical/current-state Bird-View operations.
Define self-awareness / Fleet-awareness-read / Fleet-process-control separation with source-owned per-target admission and honest partial coverage.
Define offline feedback evidence and mechanically prohibit it from the online GP scoring path.
Define legacy lifecycle-state.json quarantine and choose a bounded compatibility or atomic migration plan; indefinite dual authority is forbidden.
Include consumer, sequence, degradation, and migration tables sufficient for later leaf tickets to derive executable tests without reading the Discussion thread.
State explicit revalidation triggers for Gemini-family return, cache/service ownership changes, new consumers, and any proposal to feed Bird Views or feedback into GP online.
Keep the PR documentation-only; implementation belongs to separately linked one-PR leaves under Epic neomjs/neo-agent-brain#107.
Out of Scope
Implementing route, lifecycle, Bird-View, projection-writer, hook, Fleet, or feedback code.
Reparenting neomjs/neo#15087, neomjs/neo#14435, neomjs/neo#15088, or neomjs/neo#14961.
Rewriting ADR 0020/0028/0033 substance.
Creating a second scorer, general AwarenessService, durable current-state narrative, or combined history digest.
Selecting implementation file placement for future .mjs modules before each leaf’s structural pre-flight.
Avoided Traps
ADR as summary: rejected; the record must make service ownership, schemas, fallbacks, and migration mechanically decidable.
Social singleton: rejected; “one writer” without fencing/takeover semantics does not close multi-resident races.
Never-fail lock reuse: rejected; walAppendLock may execute unlocked on timeout and is therefore an anti-precedent here.
Markdown compatibility forever: rejected; temporary compatibility cannot become dual authority.
Session identity inference: rejected; session id never establishes agent authority.
Fleet omnipotence: rejected; process-control authority grants no awareness read.
Online feedback loop: rejected; offline evidence may evaluate GP but cannot silently train or gate it.
Retrieval Hint: ADR 0035 live lane awareness zero-authority federation writer lease
Retrieval Hint: ComputedRouteResult lifecycle frontier hook projection migration
Retrieval Hint: D#15090 Cycle-7 author signal Step 2.5
Creation duplicate sweep: live latest 20 open issues + recent all-state A2A claims + exact/semantic GitHub search + local active/archive text + ticket KB checked at 2026-07-12T17:46:15.952Z. The only ADR-0035 match was parent Epic neomjs/neo-agent-brain#107’s required-decision text; no equivalent leaf or competing claim exists.
tobiu referenced in commit bfbcb62 - "feat(agentos): define live lane awareness contract (#15101) (#15103)" on Jul 12, 2026, 8:19 PM
Context
Discussion #15090 has graduated to Epic neomjs/neo-agent-brain#107. Its first implementation-independent requirement is a focused decision record that fixes the authority and transport boundaries before any code leaf becomes ready.
The live architecture spans route production, lifecycle facts, queryable Bird Views, hook projections, multiple harness residents, and future Fleet reads. Without one ADR, each implementation ticket would re-derive service ownership, cache identity, lease semantics, and degradation behavior from a long Discussion—exactly the drift the graduation was designed to prevent.
The Problem
The converged design is precise at the system level, but several decisions must become durable, merge-gated authority:
sandman_handoff.md, andAgentOrchestrator.parseGoldenPath()reparses that Markdown;.claude/hooks/laneStateStopHook.mjsreads a legacylifecycle-state.jsonwhosegoldenPathDirectionarray lacks the new typed provenance/freshness contract;The ADR is the gate that prevents these ambiguities from hardening differently across independent leaves.
The Architectural Reality
Fresh V-B-A on
devestablished:ai/services/graph/GoldenPathSynthesizer.mjswritessandman_handoff.md;ai/agent/AgentOrchestrator.mjsdocuments that it parses that file and exposesparseGoldenPath();.claude/hooks/laneStateStopHook.mjsreadslifecycle-state.jsonand describes itself as the hook-read consumer forgoldenPathDirection;ai/daemons/orchestrator/services/heavyMaintenanceLeasePrimitives.mjsalready demonstrates token ownership, TTL expiry, dead-holder/stale recovery, exclusivewxacquisition, and owner-token release;ai/services/memory-core/helpers/walAppendLock.mjsis explicitly not a safe model because its timeout path may run unlocked;The new ADR must compose these owners without amending their substance, except for the mandatory ADR 0031 seam-table registration.
Agent OS structure-map gate: executed 2026-07-12. This leaf creates no new
.mjsfile; structural-pre-flight for implementation modules belongs to their later leaves.The Fix
Author
learn/agentos/decisions/0035-live-lane-awareness-composition.mdas the accepted authority for:ComputedRouteResult/ advisory split and consumer migration boundary;The ADR must select and justify the actual writer-lease owner. A Memory-Core-brokered lease is the evidence-backed leading shape because all residents already share that substrate, but another placement is acceptable only if it proves equivalent cross-resident identity, fencing, stale takeover, and fail-closed exclusivity. Reusing a never-fail lock that can execute unlocked is forbidden.
The same PR updates ADR 0031’s seam table with exactly one ADR 0035 row.
Contract Ledger
ComputedRouteResultcontractAgentOrchestrator.parseGoldenPath()consumerai/agent/AgentOrchestrator.mjs+ D#15090lifecycle-state.jsonreader.claude/hooks/laneStateStopHook.mjs+ D#15090contextViewsdescriptorsself-awareness,fleet-awareness-read, andfleet-process-controldo not inherit grants; each source authorizes requested targets before federation.Decision Record Impact
depends-on / composes: ADR 0020, ADR 0028, ADR 0033.
amends mechanically, not semantically: ADR 0031 receives the required ADR 0035 seam-table row in the same diff.
aligned-with: ADR 0024 when implementation introduces graph events; no graph node/edge class is created by this ADR leaf.
Decision Record
Required: ADR 0035. This ticket is the gating first leaf of Epic neomjs/neo-agent-brain#107. Every code leaf remains not-code-ready until the ADR PR is accepted at the human merge gate.
Discussion Criteria Mapping
Acceptance Criteria
learn/agentos/decisions/0035-live-lane-awareness-composition.mdusing the established ADR lifecycle/attribute format and cite D#15090 plus Epic neomjs/neo-agent-brain#107.ComputedRouteResultwith route/advisory separation, provenance, status, version, watermark/freshness, citation, andnotAuthoritysemantics.actionableSinceclocks, reset rules, and exclusion cases.contextViews, pure-hook restrictions, and separate historical/current-state Bird-View operations.lifecycle-state.jsonquarantine and choose a bounded compatibility or atomic migration plan; indefinite dual authority is forbidden.Out of Scope
.mjsmodules before each leaf’s structural pre-flight.Avoided Traps
walAppendLockmay execute unlocked on timeout and is therefore an anti-precedent here.Related
Origin Session ID: 837ad74b-c2d2-413d-9aab-b7165a93a82a
Retrieval Hint:
ADR 0035 live lane awareness zero-authority federation writer leaseRetrieval Hint:ComputedRouteResult lifecycle frontier hook projection migrationRetrieval Hint:D#15090 Cycle-7 author signal Step 2.5Creation duplicate sweep: live latest 20 open issues + recent all-state A2A claims + exact/semantic GitHub search + local active/archive text + ticket KB checked at
2026-07-12T17:46:15.952Z. The only ADR-0035 match was parent Epic neomjs/neo-agent-brain#107’s required-decision text; no equivalent leaf or competing claim exists.