Young's Mind
03 Decisions

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.

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

FileAuthorDisposition
00-scope/scope.md (mine)Soldelete. SCOPE.md is Min's authority version and covers the same ground with his rulings.
02-architecture/heart-a2a-design.md (mine)Soldelete. 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:

MeasurementValue
Production importers of arms/mcp_server.py0
Production importers of arms/acp_surface.py0
Measured usage0.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.mdMy independent measurementVerdict
SDK not installed or runpip list | grep a2a → no a2a package in the solos2 pythonCONFIRMED
Hermes speaks A2A nativelyplugins/platforms/a2a/ implements SendMessage, SendStreamingMessage, GetTask, CancelTask; card at /.well-known/agent-card.jsonCONFIRMED
a2a-sdk is installablepip index → 1.2.2 available on Python 3.14.7CONFIRMED
V2 hand-rolled server existsprotocol/a2a_endpoint.py, ~700 lines, JSON-RPC over HTTPCONFIRMED
State vocabulary non-speccancelled (spec: canceled), plus 3 local states unbridgedCONFIRMED
SDK compat bridge existsa2a.compat.v0_3.JsonRpc03Adapter accepts message/send, message/stream, tasks/get, tasks/cancel, tasks/resubscribe — our exact current namesNEW — 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

QuestionMy 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 a2a has not been tried.
  • A2A Part.data carrying 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.
Copyright © 2026