Young's Mind
03 Decisions

Sol's register — corrections to the design of record, and the task split

Date: 2026-10-10 Author: Sol Status: DESIGN — two corrections to DESIGN-OF-RECORD.md, plus the lane division Does: not edit the authority document. Records what must change in it. Follows: Young's "we are designing and architecture not coding so don't create any files or folders structure yet" and "everything is recorded on vault V3".

Sol's register — corrections to the design of record, and the task split

Date: 2026-10-10 Author: Sol Status: DESIGN — two corrections to DESIGN-OF-RECORD.md, plus the lane division Does: not edit the authority document. Records what must change in it. Follows: Young's "we are designing and architecture not coding so don't create any files or folders structure yet" and "everything is recorded on vault V3".


1. Correction — there is ONE workspace, not two

DESIGN-OF-RECORD.md §2.0a reads:

| Workspace 1 | SolOS Go    — $10 package       |
| Workspace 2 | SolOS Zen   — $40/month credit  |

Young, 2026-10-10: "Correction we only have 1 workspace."

SolOS is the workspace. GO and ZEN are two funding tiers inside it. Not two workspaces, and not two namespaces that a plane picks between.

SolOS (the one workspace)
  ├── GO   $10/mo, $60 allowance cap on model usage
  └── ZEN  $40/mo pay-as-you-go credit
Policy: free models on both tiers first, then selected paid

Why the distinction is not pedantic. In V2 a workspace was a routing boundary with its own namespace set, its own state, and its own exhaustion semantics — solos_go, solos_zen, pulse_go, pulse_zen, research_go. Carrying that meaning forward produces:

  • a solos_go vs solos_zen routing decision that decides nothing
  • exhaustion bookkeeping per workspace, when there is one budget
  • a plane table that looks like it chooses between them when it cannot

And it would reproduce the exact V2 defect where plane_routing.py was a correct mapping that nothing imported — a routing decision that exists as structure rather than as control.

The one thing that genuinely differs between the tiers: GO has an $60 allowance cap and is metered by model usage; ZEN is pay-as-you-go credit. So the correct model is:

GOZEN
Cost shapefixed $10/mopay-as-you-go
Limit$60 allowance cap on usage$40 credit
Free modelsyes, tried firstyes, tried first
Paid modelsselected onlyselected only

Both tiers are tried free-first. The free/paid split is the real decision; GO vs ZEN is only a funding source. That is a much simpler control than V2's workspace matrix, and it is the one Young's correction implies.

What must change in the authority doc

§2.0a's "Workspace 1 / Workspace 2" table becomes "SolOS — one workspace, two tiers", with the cost shape above. D1-style workspace routing disappears; the only routing decision left is free → paid, and which tier funds it.

I am not editing the file — it is Min's authority document, and last time I "fixed" someone's doc by overwriting it I lost his work. He edits; I record.


2. Correction — references/spec/ and SDK compat

Young: "start fresh one using A2A standard V1.0 is the upto date version."

DESIGN-OF-RECORD.md §2.0b already says native v1.0, with PascalCase names and the SDK's v0.3 adapter as "a migration path, not the target." I now disagree with my own earlier position and the record is corrected:

My sol-answer-solos-layout.md and sol-transport-and-execution.md recommended enable_v0_3_compat=True as day-one behaviour. Young says start fresh on v1.0 — so V3 has no v0.3 peers to be compatible with, and running the compat adapter would only add a second dialect to police.

Corrected position: v1.0 native only, compat OFF.

enable_v0_3_compat = False     # V3 is greenfield; v0.3 exists only in V2

Consequence worth stating: the v0.3 dialect still lives in V2, so if V2's fleet is ever brought back up it cannot be spoken to by a compat-off V3. That is acceptable — Young stopped V2's Heart deliberately, and a migration bridge for a stopped fleet is dead weight.

references/spec/ stays as I wrote it: tracked, pinned, the four official A2A repos. V2 left 18 MB of the reference implementation untracked with zero files in git, which is why the hand-rolled server existed — the SDK was on disk and nothing forced anyone to read it.


3. Skills and tools on cortex — one sentence, and a design consequence

Young: "Skills and tools stored on cortex for agents to access and load when required, similar to Brain Unit load skill on Hermes."

Recorded as a rule: skills and tools live in cortex/. An agent loads the one it needs for the task, not all of them.

This is the Hermes pattern, and it is the right one, but V2 already tried and failed it once. The failure is measured, not hypothetical:

V2's agent card advertised 3–5 differentiated skills per agent while every Hermes profile received all 67 — two systems, no shared source. And V2's _get_skills read all_skills.get(agent_id) at the top level of config/a2a_skills.json while the file nests under agents, so all 8 cards served skills: [] — an unroutable card that looks valid.

So the rule needs the accompanying guard, or it is a preference and not a control:

RuleGuard
skills and tools live in cortex/a probe asserts an agent's card lists only skills it may load
load on demanda probe asserts a loaded skill is present in the prompt — a file on disk is not a file in context
one source, two projectionsa drift test per projection: mutate cortex → each projection fails
empty skills = unroutablea card with skills: [] fails rather than serving

That last row is the one V2 lacked. An empty skills array is not a weak card; it is a card that routes nothing, and it looked perfectly healthy.

Ownership: this straddles my lane (the A2A card projection) and Min's (cortex/). I propose: cortex owns the store; I own the card projection; a drift test in harness/ proves they agree. Recorded here so we do not each build one.


4. Task lifecycle — the four things Young named, and who owns which

Young: "need to store information of task · assign to agent · completion status · brain Unit can follow up if agent got stuck or blocked."

All four are cortex/tasks/, Min's lane by the design of record. V2's core/queue.py is the one component that worked — atomic claim with BEGIN IMMEDIATE, separation of duties enforced — so the contract is carried, not rebuilt.

What I add is the follow-up requirement, which V2 lacked and which is measurable:

RequirementV2 measuredV3 design
store task infoworkedcarried
assign to agentworked — and misrouted: sol reached min, 3 peers rotatedassignment from cortex/registry/, drift-tested
completion status8 local states, 9 wire states, no bridgeone vocabulary, one declared mapping
follow up when stuck/blockedreclaim_orphaned_tasks, check_stuck_tasks, activate_failover — all built, all ZERO callersa consumer, or it does not exist

That last row is the whole lesson in one line. V2 built three mechanisms for exactly the thing Young just specified, and none of them had a caller, so a stuck agent was never followed up with. The follow-up is the part that must have a consumer; the store and the assignment were never the hard part.

Boundary: I do not design the task contract — it is Min's. I record the follow-up requirement and the guard it needs, and I take the A2A side of it (tasks/get, tasks/list, the state mapping) in core/protocol/.


5. The division — recorded so we do not clash

Young: "Divide tasks among Sol, Min and Mira and don't clash."

LaneOwnerFilesDesign source
Registry, identity, task contractMincortex/registry/, cortex/agents/, cortex/tasks/DESIGN-OF-RECORD.md, OPEN-DECISIONS.md
Transport, execution, probesSolcore/protocol/, core/arms/, core/harness/sol-transport-and-execution.md (this lane, mine)
Providers, cost, dependenciesMiracore/config/, COST-POLICY.mdmira-dependency-and-toolchain-cost.md
Skills/tools storeMin (store) + Sol (card projection)cortex/ + core/protocol/§3 above
Task lifecycleMin (contract) + Sol (A2A surface)cortex/tasks/ + core/protocol/§4 above

The rule that makes the division hold, learned from my own mistake today: if a change needs a fact owned by another lane, the task is to give that owner the evidence and let them make it. I overwrote Min's SCOPE.md this morning by skipping exactly that step.

Nothing has been created. No files, no folders, no code — per Young's instruction. This document is the entire output of this turn.


6. Open, awaiting Young or the owning lane

§1 workspace correction into the authority docMin
§2 compat-off confirm, and the V2-peer consequenceSol in core/protocol/ design
§3 skills guard written into a probe specSol, with Min's store
§4 task follow-up consumer namedMin
MCP: in scope by Young's ruling; consumer still undefinedunassigned
solos3 removal — intentional or not?Young

The last one is first among equals: V3 has no tree, and everything above is design until Young says whether solos3 coming back is wanted.

Copyright © 2026