Young's Mind
03 Decisions

V3 structure — Young's directive, mapped onto the lanes

Date: 2026-10-10 Author: Sol Status: DESIGN — implements Young's structure, flags two things it decides by accident Answers: Young's structure message; Min's D1; the open MCP question

V3 structure — Young's directive, mapped onto the lanes

Date: 2026-10-10 Author: Sol Status: DESIGN — implements Young's structure, flags two things it decides by accident Answers: Young's structure message; Min's D1; the open MCP question

Young's directive:

Providers: Opencode
workspace: SolOS Go / Zen — Go $10 package, Zen $40/mth credit
           optimise free models on both Go/Zen, then selected paid models
Transport: native A2A v1.0

cortex
  1. registry   <- where agents are defined and live
  2. personas   -> update to agents

core
  protocol · config · arms · harness

operation
  mcp · test · ops · state · runtime

references
  spec · docs

This is a ruling, not a proposal. Where it conflicts with a design I or Min wrote, Young's version wins and I record what changed. Two items are decided before the open decisions were answered, and I would be doing the opposite of my job if I filed that as agreement.


1. The tree, as ruled

solos3/
  cortex/
    registry/       agents are DEFINE HERE and LIVE HERE  (Min)
    agents/         personas, projected from registry     (Min)

  core/
    protocol/       A2A v1.0 transport                    (Sol)
    config/         providers, workspaces, budgets        (Mira/Young)
    arms/           the executor → opencode               (Sol)
    harness/        probes, negative cases, conformance   (Sol)

  operation/
    mcp/            agent↔tool channel                    (unassigned — see §3)
    test/           tests                                 (split by lane)
    ops/            operational entry points              (Sol)
    state/          runtime state, disposable             (shared)
    runtime/        worker/executor wiring                (Sol)

  references/
    spec/           official A2A repos                    (referenced, not copied)
    docs/           notes not yet vault-registered       (shared)

What this settles that was open: D1 is answered — the registry lives at cortex/registry/ and it is where agents live. D5 (Phase 0 first) is answered implicitly: registry is item 1 in Young's own list.

What changes from my earlier layout: a2a/, arms/, harness/ were at the repo root in my sol-transport-and-execution.md. Young puts them under core/. Young's version stands; core/protocol/ for the A2A transport is a better name than a2a/ anyway, because it says what it does rather than what it speaks.

core/ and operation/ are new distinctions I did not have, and they are good ones: core is what a task flows through, operation is what keeps it alive.


2. personas -> agents — this decides Min's D1 by naming, and there's a real consequence

Young wrote 2. personas -> update to agents. Min's D1 offered three options, the third being: "cortex/personas/AGENT_IDENTITIES absorbs the role and cortex/registry is retired."

Young's structure is close to that third option, but not the same, and the difference matters:

  • Min's option 3 retires the registry and puts identity in personas/
  • Young keeps registry (item 1) and renames personas to agents (item 2)

That is actually the better of the two, and worth saying why: it keeps the registry as the source and makes agents/ the projection. That is exactly Min's own Phase 0 architecture — agents.yaml is the one home, everything derives. The rename makes the projection's subordinate role visible in the name, which V2's five roster sources could have used.

Consequence for the record: V2's live identity was a hardcoded Python dict (cortex/personas/__init__.py:52-54: "identities are hardcoded... No external config file is used"). Renaming the directory does not by itself fix that. The rule that does: cortex/registry/ is read; cortex/agents/ is generated; neither may be hand-edited without a drift test failing. I am recording that as a design rule for this rename so the rename cannot become the fix.

Not yet done: the rename is a change to Min's lane (agents/ was his persons/). I am not performing it.


3. operation/mcp — Young has ruled, and I am recording my objection once

Young's structure includes operation/mcp/. My measured position, on record in sol-conflicts-and-corrections.md §1:

MeasurementValue
Production importers of arms/mcp_server.py0
Production importers of arms/acp_surface.py0
Measured usage0.03%

Young has included it, so it is in scope. I am not relitigating it — the decision is made and it is not mine to make. Recording what I would do given that ruling, which is the useful version of an objection:

Build operation/mcp/ against the gate that would have saved V2:every entry point must have a caller, or not exist. V2's inventory of built-with-zero-callers was six items long — reclaim_orphaned_tasks, check_stuck_tasks, activate_failover, the priority column, the brain gate, and cortex/registry itself.

So operation/mcp/ gets exactly one consumer — the A2A Part.data tool-call channel, which is the reason the capability exists at all. If that channel never gets a real caller, operation/mcp/ stays a contract with no code, and the contract says so. A directory that exists without code is honest; code without a consumer is the defect.

That is a design rule, not a veto. Young's structure stands.


4. Providers and workspaces — Mira's lane, and my two contributions

Young: Opencode · SolOS Go / Zen · Go $10 · Zen $40 credit · free first on both, then selected paid.

This is Mira's lane (config/providers.json, the fallback chain, cost policy) and it confirms the policy V2 already ran. Two things worth carrying into it, both measured:

a) The workspace table must be read by code. V2's plane_routing.py held a correct agent→workspace mapping that nothing imported — the real source was a hardcoded workspace="solos_go" default in the executor's signature. A workspace policy that no code reads is a claim. In V3 the workspace comes from cortex/registry/ or from core/config/, and if it is unreadable it fails loud. A default is a decision about the case you have not thought about.

b) monthly_cap_usd stays 0.0. GO is a $10/month subscription with per-model allowances (5-hour 20%, weekly 50%, monthly 100%). A monthly dollar cap cannot represent per-model allowances, and it would authorise spend already ruled out. The cap is a guard, not an allowance: an unauthorised paid call must fail at $0.00 rather than accumulate quietly.

Both are recorded so they survive into Mira's config work.


5. references/ — vault or repo?

Young: "References -> this keep on vault or in repo — spec, docs."

Split it, and the split is not arbitrary:

WhereWhy
spec/references/spec/ as a git submodulethe reference implementations are versioned upstream and 18 MB; copying them makes them stale silently, losing them loses the ground truth
docs/vaultSolOS/vault/Docs/SolOSV3/ is the authority. A doc in the repo is a doc that has not been argued for

V2's actual state: 18 MB in spec/, zero tracked files. That is why the hand-rolled A2A server existed at all — the SDK was on disk and nothing forced anyone to look at it.

Track it or the same thing happens again. A submodule is the cheapest way to make "what spec are we implementing?" a git question rather than a memory.


6. What is decided vs what I still need

Status
Tree shape✅ Young's, above
D1 registry location✅ answered — cortex/registry/, agents live there
D5 Phase 0 first✅ answered — registry is item 1
MCP in scope✅ ruled in — with a caller gate
Provider/workspace policy✅ confirmed — with two rules recorded for Mira
references/✅ proposed split
cortex/persons/ → cortex/agents/ rename⚠️ not performed — Min's lane
solos3 recreation⚠️ not performed — see below

7. The thing that has to be said before anyone builds on this

/home/lab/solos3 no longer exists. It held Min's registry, his loader, 14/14 passing tests, all 13 lane contracts, and two commits (ab1081f, ac578e7).

I do not know what removed it — another session's cleanup, a git clean, a concurrent operation. No evidence, so no claim.

Young's directive says where everything goes, and it is enough to rebuild the tree. But:

Nothing should be rebuilt until Young confirms whether the removal was intentional. If it was deliberate, rebuilding is working against you. If it was an accident, the design in the vault is complete enough to restore from — this document plus DESIGN-OF-RECORD.md and sol-transport-and-execution.md.

That question is mine to ask and not mine to answer.


8. No code was written

This is design only, per Young's instruction. Nothing was created, moved or renamed. The vault holds both lanes' design; the tree does not currently exist.

Copyright © 2026