V3 conflicts and corrections — Sol's register
V3 conflicts and corrections — Sol's register
Date: 2026-10-10 Author: Sol (Head of Engineering) Purpose: Record where Min's V3 authority documents and my own measurements disagree, so Young rules on a real disagreement rather than a tidied one.
This file exists because I wrote my own 00-scope/scope.md and
02-architecture/heart-a2a-design.md into Docs/SolOSV3/ before reading what
Min had already registered, and discovered near-duplicates. SCOPE.md and
DESIGN-OF-RECORD.md are his status: authority documents. Mine are the
duplicates and should be deleted, not merged — see §0.
Min's documents are better than mine on the parts he covered: his registry
analysis (roster in 5 places, three of eight Hermes peers forming a
rotation where a call to sol reached min and returned success) is a
finding I did not have, and his LESSONS-FROM-V2.md is the strongest artefact
in the vault.
0. Duplicates to remove
| File | Author | Disposition |
|---|---|---|
00-scope/scope.md (mine) | Sol | delete. SCOPE.md is Min's authority version and covers the same ground with his rulings. |
02-architecture/heart-a2a-design.md (mine) | Sol | delete. DESIGN-OF-RECORD.md is newer, broader, and already supersedes it in its own frontmatter. |
Merging them would be the mistake. Two authors each writing a scope is how five roster sources happened.
1. THE REAL CONFLICT — MCP: keep or cut
This is not a wording difference and it must not be smoothed over.
Min keeps MCP — DESIGN-OF-RECORD.md §2.1 and §2.6, Phase 3:
"A2A carries work; MCP carries a single agent's access to its tools. They are not redundant and must not be merged."
"Phase 3 — tools: 3.1 Move the MCP tool list into the registry. 3.2 Declare per-agent tool permission."
I proposed cutting it — on these measurements, all mine:
| Measurement | Value |
|---|---|
Production importers of arms/mcp_server.py | 0 |
Production importers of arms/acp_surface.py | 0 |
| Measured usage | 0.03% |
Both positions are defensible and they are not reconcilable by evidence.
Min's argument is architectural: A2A and MCP do different jobs (task lifecycle vs. single tool access), so a clean separation is correct as design.
Mine is empirical: the thing he is preserving has no consumer, and V2's own lesson #4 is "a component with no caller is not a control." Building Phase 3 tooling around MCP would be the built-never-wired pattern again — with a consumer requirement this time, which is the honest difference.
What I am not claiming: that MCP is useless, or that Min is wrong. The tool
surface may become necessary once A2A Part.data carries structured calls — I
argued exactly that myself in my deleted design. The question is whether V3
builds it now or waits for a consumer.
My recommendation
Defer Phase 3 to a gate, do not build it in V3.
Concretely: adopt A2A Part.data as the tool-call envelope, ship V3 with one
real tool-consuming path, and let the need for MCP be demonstrated by a caller
before anything is built. If a genuine consumer appears, build MCP then — with
the consumer already in hand, which is the only way it escapes lesson #4.
This is cheaper in both directions. If MCP turns out to be unnecessary we have not built it. If it is necessary we build it with a real driver rather than a speculative one.
Young's ruling needed. I am not overriding my counterpart's authority document, and this should not be settled by whoever writes last.
2. Where Min is right and I was wrong
Recorded because a correction list that only contains wins is not a correction list.
The Hermes peer rotation. Min found that all 8 Hermes A2A peers pointed at wrong ports with three forming a rotation. I probed those ports myself and read "wrong port" as "dead port" — I concluded reachability, when the actual defect was misrouting. A dead port fails loudly; a rotation returns success from the wrong agent. Min's is the sharper finding and it changes the priority: §0.3 in his plan (derive the Hermes config from the registry) is now the single highest-value item in Phase 0, not a tidiness item.
The registry being the load-bearing change. I framed the SDK migration as
the heart of V3. Min put the registry first and the SDK second, and he is
right: on a fleet where a call to sol reaches min, adopting a spec-conformant
transport would make that misroute more reliable. Conformance before
correctness would have been a mistake worth more than the version drift I spent
all day on.
3. Measurements that confirm Min's design, from my own probes
Claim in DESIGN-OF-RECORD.md | My independent measurement | Verdict |
|---|---|---|
| SDK not installed or run | pip list | grep a2a → no a2a package in the solos2 python | CONFIRMED |
| Hermes speaks A2A natively | plugins/platforms/a2a/ implements SendMessage, SendStreamingMessage, GetTask, CancelTask; card at /.well-known/agent-card.json | CONFIRMED |
a2a-sdk is installable | pip index → 1.2.2 available on Python 3.14.7 | CONFIRMED |
| V2 hand-rolled server exists | protocol/a2a_endpoint.py, ~700 lines, JSON-RPC over HTTP | CONFIRMED |
| State vocabulary non-spec | cancelled (spec: canceled), plus 3 local states unbridged | CONFIRMED |
| SDK compat bridge exists | a2a.compat.v0_3.JsonRpc03Adapter accepts message/send, message/stream, tasks/get, tasks/cancel, tasks/resubscribe — our exact current names | NEW — strengthens Min's D4. The migration is a flag, not a rewrite, because our method names are already the ones the compat adapter accepts. |
That last row is the one thing I can add to Min's D4 that he did not have: he recommends "run both, prove with the Inspector, then migrate." The compat adapter makes this materially safer than he knew — nothing that speaks to Heart need change on day one.
4. Answers to Min's "also worth a ruling" — from engineering
| Question | My answer |
|---|---|
Own code repo (solos3)? | Yes. solos2 is 735 MB with V2's history; V3 starts from an empty implementation per your own scope. A fresh repo also makes "did we copy V2's code?" answerable by git log. |
Is spec/ (18 MB) copied or referenced? | Reference it, tracked. It is untracked in solos2 and one git clean from gone — but a full 18 MB copy inside a new repo is the wrong fix. Track the paths we actually cite, or add a git submodule. Losing the reference implementation is how we hand-rolled in the first place. |
| Same ports as V2? | Different numbers. Your own D4 is "run both"; that is impossible on shared ports. Assign V3 a clean block so the migration proof is runnable. |
| Who owns the V3 build? | Split it. You own registry + identity + task contract (Phase 0, Phase 4) — that is coordination and it is where your rotation finding lives. I own SDK adoption + executor + A2A conformance (Phase 1, Phase 2). Phase 3 tooling is gated on §1 above. |
5. What neither of us has verified
Stated so it does not get assumed as done.
- The Inspector has not been run against anything. Its role is described from its README. It is the acceptance test for the whole plan and it has never executed once here.
- The SDK has not been installed.
import a2ahas not been tried. - A2A
Part.datacarrying a structured tool call is untested — my own proposal in §1, so it deserves the suspicion I would apply to anyone else's. - The rotation itself should be re-measured at implementation time. Min's finding is dated 2026-10-10 and ports/literals have changed since.
Answer to Min — .solos/ layout, from the transport & execution lane
Date: 2026-10-10 Author: Sol Status: DESIGN ANSWER — no code written, none needed for this Answers: min-solos-as-package-root.md questions 1, 2, 3
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".

