Skip to content

Swarm Feature Parity Audit

This page records the 2026-04-28 sub-agent swarm audit for the question: how do we know all Hermes and Honcho features are mapped into Gormes?

The answer has three layers:

  1. Source-class coverage is executable. Upstream Coverage Ledger plus go test ./docs -run TestUpstreamCoverageLedgerMatchesSourceClasses -count=1 proves every feature-like top-level upstream source class is represented or explicitly ignored as repo hygiene.
  2. Raw feature-level gaps are recorded here. Five read-only parity agents audited separate Hermes/Honcho surfaces and found broad map coverage plus missing or vague feature-level rows. Those gaps are mapped below to Go targets and progress actions.
  3. Second-wave reconciliation is canonical. Hermes/Honcho To Gormes Go Runtime Plan classifies every broad subsystem as mapped-by-symbol, mapped-by-contract, owned, excluded, or still row-backed. No subsystem-level unknown/gap remains after that pass.

Do not claim implementation parity from this page. You may claim feature mapping completeness only when the source-class test passes, the runtime plan has no unknown/gap subsystem, and TestNestedUpstreamFeatureCoverage passes against available sibling upstream checkouts.

A second overnight reconciliation re-ran the audit as seven independent specialists (Hermes mapper, Honcho mapper, Go architecture planner, runtime/contracts auditor, test matrix planner, docs/register maintainer, gap classifier). Each specialist worked independently and reported back; the findings landed verbatim into the surfaces below. The five-lane register beneath this section is the lane-level view of the same investigation.

SpecialistScopeOutputs landed inVerdict
Hermes mapper (#1)Full Hermes feature inventory of run_agent.py, agent/**, agent/transports/**, tools/**, environments/**, gateway/**, cron/**, hermes_cli/**, mcp_serve.py, acp_adapter/**, plugins/**, skills/**, optional-skills/**, tui_gateway/**, web/**, website/**, packagingfeature map provider/tool/gateway rows, this register, runtime plan nested matrix200-feature taxonomy with 11 hidden risks (notably environments/ vs tools/environments/ name collision, gateway/restart.py exit-code-75 contract, gateway/whatsapp_identity.py JID collapse, cli-config.yaml.example 51 KB schema, dashboard plugin SPA contract, skills/index-cache/*.json four third-party indexes, gateway/builtin_hooks/boot_md.py agent-spawning startup hook).
Honcho mapper (#2)Full Honcho feature inventory of src/**, migrations/**, database/**, docs/v1..v3/**, sdks/**, mcp/**, honcho-cli/**, examples/**, tests/**, deploy/config filesfeature map Goncho rows, this register, runtime plan nested matrix169-feature taxonomy plus a 30-tool MCP catalog, full v3 endpoint matrix (45 endpoints), 25-migration timeline, dreamer surprisal-tree taxonomy (rptree/kdtree/balltree/covertree/lsh/graph/prototype), and explicit database/init.sql (CREATE EXTENSION vector) deploy divergence.
Go architecture planner (#3)Go-native package boundaries and deep-module interfaces for 30 subsystemsfeature map Go architecture target table, runtime plan classificationsDeep-module score per subsystem; flagged eight risk-of-shallow areas (provider transport, prompt builder, operator tools, channel adapters, API server, plugins SDK, observability, packaging) with widening recommendations.
Runtime/contracts auditor (#4)Six-bucket classification of every internal/**, cmd/**, www.gormes.ai/** packageruntime plan classification column, this register’s classification column50+ packages classified; flagged duplicate internal/discord vs internal/channels/discord (both target gateway/platforms/discord.py), dormant internal/pybridge, thin internal/telemetry vs Honcho’s multi-file src/telemetry/**, and missing operator-tool symbols in Phase 5.N.
Test matrix planner (#5)Nested feature-level coverage test matrix and fixture donor mapTestNestedUpstreamFeatureCoverage matrix, fixture donor recommendationsIdentified 18 nested-glob registries needed; ~150 missing Goncho coverage rows (router endpoints × success/empty/auth/pagination, CRUD invariants, MCP tools, SDK matrices, honcho-cli commands); 3 missing Go channel packages (matrix, mattermost, yuanbao); top-10 broad-glob risk register.
Docs/register maintainer (#6)Edit plan for the six target planning docs (this page, feature map, ledger, parity-map, progress-row contract, upstream coverage test)this section, ledger rows for cli-config.yaml.example/constraints-termux.txt/tinker-atropos/database/init.sql, test extensions for .sql/.txt/.example source detection, assets/ ignored entriesSeven new ledger entries; test source-extension expansion landed; six runtime-plan classifications stay accurate after detection extends.
Gap classifier (#7)Seven-bucket classification of every Hermes/Honcho subsystem and every progress.json subphase, plus phase countsthis register’s classification, runtime plan splits, Row Split Candidates From Swarm table337 complete · 146 planned · 31 porting · 2 owned · 2 converged across progress.json; 33 enumerated feature-level residuals each with a sub-agent task brief; 10 builder-ready row proposals; ~16 umbrella rows still need splitting (3 in Phase 4, 13 in Phase 5).

The seven-agent pass re-confirmed the 2026-04-28 verdict at higher resolution: source-class coverage stays executable, no subsystem-level unknown/gap remains, and the feature-level gap register below carries the remaining row-split work into existing phase anchors.

This pass records the operator-visible parity matrix requested after live Telegram dogfood exposed /status, reply quoting, identity, and stream UX drift. It is narrower than the source-class audit above: the unit of account is what Juan sees or what reaches the final provider request, not whether a source file is represented somewhere in the map.

2026-04-30 update: this section remains a historical audit snapshot, not the current dispatch queue. Later builder passes have already validated several rows that appear as planned or partial below, including production live-turn provider payloads, /status closeout, reply-mode parity, dynamic Telegram menus, typing actions, active-turn slash policy, shared gateway/TUI/Slack/ Discord tool traces, and the Hermes-compatible memory tool. Use progress.json, contract-readiness.md, and the parity matrix for current row state before dispatching work from this snapshot.

The pass used four read-only specialists plus one coordinator TDD slice. Runtime edits in this pass were limited to the standalone gormes telegram manager construction path, which now reuses the same live-turn metadata seams as gormes gateway.

SpecialistScopeVerdict
Telegram UX/statusGateway slash commands, /status, reply quoting, Telegram menu, stream/error rendering/status and outbound reply quoting are now covered by tests, but Hermes-format closeout, /title, dynamic Telegram menu, reply modes, and richer stream/tool trace parity remain row-backed gaps.
Prompt/provider identityFinal Telegram provider payload, context discovery, metadata, role ordering, model/tool guidanceA gateway-level final-provider request test exists, but the production Telegram command path needed metadata seam parity; provider payload golden tests must still move closer to the actual cmd/gormes telegram entrypoint.
CLI/config/provider/authHermes CLI command tree, config, auth, provider runtime recovery, redacted diagnosticsManifests and many helpers exist, but exposed Cobra commands, config discovery depth, Spotify/top-level logout, runtime recovery, and diagnostics remain partial or planned.
Memory/browser/toolsDurable memory, Goncho/Honcho lifecycle, browser contracts, artifacts, Telegram renderingGoncho naming and browser action contracts are strong; Hermes memory tool lifecycle, provider manager lifecycle, frozen memory prompt semantics, browser artifact/console rendering, and Telegram browser handoff remain partial.
Coordinator TDD sliceStandalone gormes telegram live-turn metadata wiringcmd/gormes/telegram.go now routes through telegramManagerConfig, which reuses gatewayManagerConfig; cmd/gormes/telegram_test.go proves non-nil timestamp/model/provider seams.
AreaHermes/Sidon source referenceGormes source referenceExpected Hermes behaviorCurrent Gormes behaviorStatusTest coverageOwner/laneProgress row IDEvidence commandLive Telegram evidence
/statusgateway/run.py:4646-4680internal/gateway/status_command.go:14-69Gateway command, not model text; reply includes session id, optional title, created, last activity, tokens, agent running, connected platforms.Gateway command path is tested and now quotes the triggering message; title is present when metadata exists, but formatting is not byte-equivalent and Yes lacks Hermes’ marker.partialinternal/gateway/status_command_test.goB/Cexisting Phase 2.F.3 plus planned row: Telegram /status Hermes-format closeoutgo test ./internal/gateway -run TestManagerStatusCommand -count=1not reverified live in this pass
/helpgateway/run.py:3196-3200, hermes_cli/commands.pyinternal/gateway/commands.go:160-179Registry-driven gateway help; never submitted to provider.Registry-driven Gormes help exists; copy and command set differ where Gormes exposes unavailable commands.partialinternal/gateway/commands_test.goB/HPhase 2 slash registry rows; Phase 5.O CLI command-tree rows`go test ./internal/gateway -run ‘HelpCommandRegistry’ -count=1`
slash menugateway/platforms/telegram.py:822-837, hermes_cli/commands.py:357-372internal/channels/telegram/bot.go:49-64, internal/gateway/commands.go:181-190Telegram setMyCommands registers canonical menu names with aliases omitted.Core menu registers from CommandRegistry.parityinternal/channels/telegram/bot_test.go:TestBot_RunRegistersHermesTelegramCommandsBPhase 2 slash registry rowsgo test ./internal/channels/telegram -run TestBot_RunRegistersHermesTelegramCommands -count=1not reverified live
dynamic slash menuhermes_cli/commands.py:558-589internal/gateway/commands.go:194-207Menu includes enabled plugin/skill commands up to Telegram limits with hidden-count evidence.Helper exists, but runtime registerCommands still uses core TelegramBotCommands only.partialhelper-level skill tests onlyB/Hexisting Skill preprocessing + dynamic slash commands; planned row: Telegram dynamic BotCommand menu wiring`rg -n ‘TelegramBotCommandsWithregisterCommands’ internal`
unknown commandgateway/run.py:3435-3452internal/gateway/manager.go:704-727Unknown slash never enters model; user gets resend-without-slash guidance.Unknown slash is intercepted and not submitted; copy is shorter.parityinternal/gateway/active_turn_command_bypass_test.goBPhase 2 slash registry rows`go test ./internal/gateway -run ‘UnknownSlashCommand’ -count=1`
unavailable commandhermes_cli/commands.py:253-290internal/gateway/commands.go:76-89, internal/gateway/manager.go:704-727Recognized but unavailable commands get visible operator guidance and do not hit provider.Unavailable commands are recognized and rejected; /title is advertised but unavailable, which is now a specific gap.partialinternal/gateway/active_turn_command_bypass_test.goB/Cplanned row: Gateway /title manual session title command`rg -n ‘“title”EventTitle
active-turn slash behaviorgateway/run.py:2950-3225, hermes_cli/commands.py:267-290internal/gateway/commands.go:37-90, internal/gateway/manager.go:704-727Status/help/stop and safe info commands bypass active agent; mutators reject/drain; slash text never leaks.Channel-neutral policy exists for core commands; Hermes has a broader command set than Gormes currently implements.partialinternal/gateway/active_turn_command_bypass_test.goBplanned row: Gateway active-turn policy manifest closeoutgo test ./internal/gateway -run TestManager_ActiveTurnSlashCommand -count=1not reverified live
reply quotinggateway/platforms/telegram.py:904-922, gateway/platforms/telegram.py:1022-1032, gateway/platforms/telegram.py:2935-2959internal/channels/telegram/bot.go:140-165, internal/gateway/manager.go:858-970Replies thread to original message according to reply mode; deleted target falls back; inbound reply text can enrich context.Outbound ReplyToMessageID is used for placeholders/finals and /status; no reply mode, deleted-target fallback, or inbound reply text enrichment yet.partialinternal/channels/telegram/bot_test.go, internal/gateway/manager_test.go, internal/gateway/status_command_test.goBplanned row: Telegram reply_to_mode and reply-context parity`go test ./internal/channels/telegram ./internal/gateway -run ‘ReplyStatus’ -count=1`
hourglass lifecyclegateway/platforms/base.py:1718-1724, gateway/platforms/base.py:1976-1986, gateway/platforms/telegram.py:1909-1935internal/gateway/coalesce.go, internal/gateway/manager.go:911-928, internal/channels/telegram/bot.go:159-165Activity indicator or placeholder is cleaned up or finalized without stale previews.Gormes uses editable placeholder and fresh-final delete rows; Telegram typing action parity is not proven.partialcoalescer and placeholder testsB/Gexisting fresh-final rows plus planned row: Telegram typing action + placeholder lifecycle parity`rg -n ‘SendPlaceholderDeleteMessage
streaming textgateway/stream_consumer.py:482-508internal/gateway/render.go, internal/tooltraceStreaming drafts are compact, readable, and safely escaped per channel.2026-04-30 current state: gateway fixtures validate cursor handling, separate tool progress, final-answer separation, errors, and display.tool_progress modes.parityinternal/gateway/render_test.go, internal/gateway/manager_test.go, internal/config/config_test.goBcomplete row: Gateway stream/tool trace formatting fixture matrix`go test ./internal/gateway -run ‘TestFormatToolProgressTestFormatStream’ -count=1`
tool tracesgateway/run.py tool progress callbacks, gateway/stream_consumer.py, agent/display.py:get_tool_emojiinternal/tooltrace, internal/gateway/render.go, internal/tui, internal/slack/render.go, internal/discord/render.goTool calls show compact labeled progress such as memory/search/read/patch/terminal.2026-04-30 current state: shared renderer covers gateway/TUI/Slack/Discord icons, quoted previews, duplicate collapse, new/all/off modes, and tool done: suppression; only skin-configurable emoji overrides remain partial.partial only for skin overridesinternal/tooltrace/tooltrace_test.go, internal/gateway/render_test.go, internal/tui/viewport_history_test.go, internal/slack/render_test.go, internal/discord/render_test.goB/Gcomplete row: Gateway stream/tool trace formatting fixture matrix; complete row: Native TUI Hermes tool progress + modal panel renderers`go test ./internal/tooltrace ./internal/gateway ./internal/tui ./internal/slack ./internal/discord -run ‘ToolTraceToolProgress
errorsgateway/run.py:4396-4439internal/gateway/render.go:39-82, provider error classifiersProvider errors are redacted, concise, and actionable; no HTML/secrets.HTML/secret sanitization is covered for gateway renderers; full provider-specific hint parity remains partial.partialinternal/gateway/render_test.go, internal/llm/*error*test.goF/Bexisting provider error rows plus Provider runtime recovery policy wiring`go test ./internal/gateway ./internal/llm -run ‘ErrorProvider’ -count=1`
identity/name questionrun_agent.py, agent/prompt_builder.py, tools/memory_tool.pyinternal/gateway/live_turn_prompt.go, internal/kernel/kernel.go:296-340Provider request contains Gormes/Sidon identity before user text; output is natural provider response, not postprocessed replacement.Gateway-level fake provider test proves Gormes SOUL, USER, MEMORY, and Telegram context; production Telegram command golden still needed.partialinternal/gateway/live_turn_prompt_test.go:TestLiveTurn_TelegramFinalProviderRequestIncludesOperatorContextDfixture-ready row: Telegram production live-turn provider payload goldengo test ./internal/gateway -run TelegramFinalProviderRequestIncludesOperatorContext -count=1not reverified live
final provider requestrun_agent.py:3667-3779internal/kernel/kernel.go:296-340, internal/llm/client.goFinal ChatRequest has ordered system context, user turn, tool descriptors, model/provider metadata, and channel/session context.Internal gateway test captures request; actual cmd/gormes telegram path now has metadata seams but lacks golden provider-payload coverage.partialcmd/gormes/telegram_test.go, internal/gateway/live_turn_prompt_test.goDfixture-ready row: Telegram production live-turn provider payload golden`go test ./cmd/gormes ./internal/gateway -run ‘Telegram.*ProviderPayloadLiveTurn’ -count=1`
session titleagent/title_generator.py, gateway/run.py:4657-4671internal/persistence/session/auto_title.go, internal/gateway/status_command.go:139-178Meaningful auto title persists after conversation; manual title is preserved; /status shows it.Auto-title helper exists; /status now creates a deterministic fallback title for status-created sessions, but gateway conversational auto-title binding is not proven.partialinternal/persistence/session/auto_title_test.go, internal/gateway/status_command_test.goCexisting Phase 4.F rows plus planned row: Telegram /status Hermes-format closeout`rg -n ‘PerformAutoTitleSetTitle’ internal cmd`
/titlegateway/run.py:6697-6743, upstream title command testsinternal/gateway/commands.go:76-79/title [name] sets manual title; /title shows current title; invalid titles produce guidance.Command is advertised but unavailable.regressedno Gormes handler testCplanned row: Gateway /title manual session title command`rg -n ‘“title”handleTitle
session idgateway/session.py, gateway/run.py:4648-4668internal/gateway/status_command.go:72-108Session ID is Hermes-style, not telegram:<chat_id>.Status path replaces legacy chat-key IDs and persists generated IDs.parityinternal/gateway/status_command_test.go:TestManagerStatusCommandReplacesLegacyChatKeySessionIDCPhase 2.F.3 status rowsgo test ./internal/gateway -run ReplacesLegacyChatKeySessionID -count=1not reverified live
created timegateway/run.py:4672internal/gateway/status_command.go:25-35, :110-124Created uses session metadata semantics.Status-created sessions persist CreatedAt; generated IDs derive created time as fallback.parityinternal/gateway/status_command_test.goCPhase 2.F.3 status rowsgo test ./internal/gateway -run StatusCommand -count=1not reverified live
last activitygateway/run.py:4673internal/gateway/status_command.go:25-35Last Activity uses session updated metadata.Status-created metadata writes UpdatedAt; broader conversational update semantics need live-turn coverage.partialinternal/gateway/status_command_test.goCplanned row: Gateway conversational session metadata refresh`rg -n ‘UpdatedAtPutMetadata’ internal/gateway internal/persistence/session`
token accountinggateway/run.py:4674internal/gateway/status_command.go:38, internal/gateway/usage_command.goStatus shows accumulated session tokens.Status uses last usage frame totals; session-wide persistence semantics are not proven.partialinternal/gateway/status_command_test.goC/Fexisting provider account usage rows plus planned row: Gateway session token accounting parity`go test ./internal/gateway -run ‘StatusUsage’ -count=1`
agent runninggateway/run.py:4653-4655, :4675internal/gateway/status_command.go:38-42Shows Yes ⚡ while agent is running, No otherwise.Running check exists; copy differs.partialstatus testsC/BTelegram /status Hermes-format closeoutgo test ./internal/gateway -run StatusCommand -count=1not reverified live
connected platformsgateway/run.py:4651, :4677internal/gateway/status_command.go:43-68Shows connected adapters.Gormes renders connected registered channels or event platform fallback.paritystatus testsCPhase 2.F.3 status rowsgo test ./internal/gateway -run StatusCommand -count=1not reverified live
SOUL.md loadingagent/prompt_builder.py, run_agent.pyinternal/llm/context_files.go, internal/gateway/live_turn_prompt.go:83-101Identity/SOUL reaches provider request.Workspace ancestor, Gormes home, migrated memory, and direct Hermes home lookup exist; profile-name lookup still needs a row.partialinternal/gateway/live_turn_prompt_test.goDplanned row: Active Hermes/Sidon profile context root resolver for live turns`go test ./internal/gateway -run ‘SOULProviderRequest’ -count=1`
USER.md/MEMORY.md loadingtools/memory_tool.py:105,124,359internal/llm/durable_user_context.go, internal/gateway/live_turn_prompt.go:103-131Durable user/memory context reaches provider prompt with safe ordering.Gormes loads USER then MEMORY on each turn; Hermes freezes a memory prompt snapshot and upstream order differs.partialinternal/llm/durable_user_context_test.go, internal/gateway/live_turn_prompt_test.goD/Eexisting live-turn durable row plus planned row: Durable context ordering and frozen snapshot decision fixture`go test ./internal/llm ./internal/gateway -run ‘DurableUserContextLiveTurn’ -count=1`
AGENTS/project contextagent/prompt_builder.py, project context discoveryinternal/llm/context_files.go, internal/gateway/live_turn_prompt.go:236Project instructions such as AGENTS reach provider before the user turn.Helper supports AGENTS/project files; final provider test does not assert AGENTS yet.partialcontext file testsDTelegram production live-turn provider payload golden`go test ./internal/llm ./internal/gateway -run ‘ContextFilesProviderRequest’ -count=1`
timestamp/model/provider metadatarun_agent.py:3770-3779internal/llm/turn_metadata.go, cmd/gormes/gateway.go:235, cmd/gormes/telegram.goLive turns include timestamp, session id, model, and provider metadata.gateway and standalone telegram manager configs now both expose metadata seams.paritycmd/gormes/gateway_test.go, cmd/gormes/telegram_test.go, internal/gateway/live_turn_prompt_test.goDPhase 2.B.5 Live-turn metadata production wiring`go test ./cmd/gormes -run ‘GatewayManagerConfig_LiveTurnTelegramManagerConfig_LiveTurn’ -count=1`
skill guidanceskill_preprocessing.py, skill_commands.py, prompt_builder.pyinternal/kernel/kernel.go:319-330, internal/skillsRelevant skill guidance is in provider context and command exposure.Kernel injects selected skill blocks as separate system messages; full Hermes guidance ordering and Telegram menu exposure are partial.partialskill preprocessing testsD/Hexisting skill rows plus planned row: Live-turn model/tool guidance wiring`go test ./internal/kernel ./internal/skills -run ‘SkillPrompt’ -count=1`
tool guidancerun_agent.py:3667-3712, prompt_builder.pyinternal/llm/model_guidance.go, cmd/gormes/registry.goTool-use enforcement and tool descriptors reach provider in provider-compatible roles.Constants/helper exist; request-level wiring and role swap still partial.partialmodel guidance testsD/Fplanned row: Live-turn model/tool guidance wiring`go test ./internal/llm ./internal/kernel -run ‘GuidanceTool’ -count=1`
developer roleupstream provider parity testsinternal/llm/http_client.go:463, internal/llm/model_guidance.goGPT-5/Codex system guidance uses provider-expected developer role at API boundary without mutating internal messages.Helper exists, but OpenAI-compatible builder currently copies roles unchanged.missingno API-boundary role-swap fixtureD/Fplanned row: OpenAI-compatible developer-role API-boundary swap`go test ./internal/llm -run ‘DeveloperRoleOpenAICompatible’ -count=1`
provider stream final answerprovider transport refsinternal/llm/provider_transport.go, internal/kernel/kernel.goStream events accumulate final answer and tool continuations like Hermes.Transport fixture harness exists; live runtime recovery/fallback remains partial.partialprovider transport and stream testsFexisting provider rows plus Provider runtime recovery policy wiring`go test ./internal/llm ./internal/kernel -run ‘StreamProvider
auth statushermes_cli/auth.py, auth_commands.pycmd/gormes/auth.go, internal/llm/provider_registry_manifest.goPer-provider status reports configured/logged-in state without secrets.Aggregator exists; some provider adapters and display-name parity remain partial.partialcmd auth testsF/HGormes auth status per-provider aggregator; auth adapter rowsgo test ./cmd/gormes -run 'Auth.*Status' -count=1not applicable
auth add/list/remove/logoutauth_commands.py:141, hermes_cli/main.py auth parsercmd/gormes/auth.goAdd/list/remove/reset/status/logout/spotify match Hermes non-deprecated auth surface.Many commands exist; top-level logout, source cleanup, Spotify, and suppression parity are planned.partialauth command testsF/Hexisting Gormes top-level logout provider shortcut, Hermes auth Spotify service-provider subcommand`go test ./cmd/gormes -run ‘AuthLogout’ -count=1`
config discoveryhermes_cli/config.py:3616, config migration testscmd/gormes/config.go, internal/configHermes config.yaml, profile, env, managed/container, edit/check/migrate behavior are compatible or explicitly owned.Hermes config bridge and native config commands exist; full discovery/migration warning parity remains partial.partialconfig testsHexisting Config, profile, auth, and setup command surfaces and Diagnostics, backup, logs, and status CLI`go test ./cmd/gormes ./internal/config -run ‘ConfigMigrate’ -count=1`
gateway status CLIgateway/status.py, hermes_cli/status.pycmd/gormes/gateway_status_test.go, internal/gateway/status.goRead-only lifecycle, channel, pairing, pid/state evidence without starting transports.Implemented for Gormes runtime stores.paritycmd/gormes/gateway_status_test.goH/CPhase 2.F.3 gormes gateway statusgo test ./cmd/gormes -run GatewayStatus -count=1local CLI only
memory prompt insertiontools/memory_tool.py:105,124,359internal/llm/durable_user_context.go, internal/kernel/kernel.go:303-318Memory snapshot enters prompt predictably; mid-session writes follow Hermes snapshot semantics.Durable files and recall can enter prompts; frozen snapshot semantics are not yet matched.partialdurable context and memory testsErefine System + memory + tools + history assembly`go test ./internal/llm ./internal/gateway ./internal/kernel -run ‘MemoryDurableUserContext
Hermes memory tooltools/memory_tool.py:222-513cmd/gormes/registry.go, internal/gonchotoolsUser-visible memory tool supports add/replace/remove over memory/user targets with safe writes.Gormes has Goncho/Honcho tools but no Hermes-compatible memory tool in default registry.missingno TestMemoryToolEplanned row: Hermes memory tool over Goncho/local durable storerg -n 'memory' cmd/gormes/registry.go internal/tools internal/gonchotoolsnot reverified live
Goncho provider lifecycleagent/memory_manager.py:97,178,210,296,315,331internal/memory, internal/goncho, internal/kernelOne provider manager owns initialize, prefetch, sync, pre-compress, mirror, delegation, shutdown.Pieces exist, but no single Hermes-compatible lifecycle adapter contract.partialmemory/goncho/kernel testsEplanned row: Goncho memory provider lifecycle adapter`go test ./internal/memory ./internal/goncho ./internal/kernel -run ‘MemoryShutdown
browser tool contracttools/browser_tool.py:738,1386,1415,1762,2002internal/tools/browser_contract.go, internal/tools/browser_harness_tools.goBrowser action/result schemas, snapshots, clicks, types, screenshots, safety contract exist.Contract and wrappers are mostly covered.paritybrowser harness/tool testsGPhase 5.C browser contract rows`go test ./internal/tools -run ‘Browser.*ContractBrowserHarness’ -count=1`
Go browser harness backendsibling go-browser-harness refs, Hermes browser providersinternal/tools/browser_harness_tools.goDefault Go harness backend executes fakeable action JSON without live Chrome in unit tests.Planned row exists; backend remains planned.partialbrowser bridge testsGgo-browser-harness Chromedp action backend`go test ./internal/tools -run ‘BrowserHarness’ -count=1`
browser artifacts/consolebrowser_camofox.py:300,493,583internal/tools/browser_contract.go:54, internal/tools/result_budget.goScreenshot path, console logs/errors, and snapshot excerpts render as bounded artifacts, not raw bytes.Envelope fields and budgets exist; Telegram-safe artifact rendering is not proven.partialtool-level budget testsG/Bplanned row: Browser artifact and console render contract`go test ./internal/tools ./internal/gateway -run ‘Browser.*ArtifactBrowser.*Console’ -count=1`
Telegram browser renderingHermes Telegram media/reply pathsinternal/gateway/render.go, internal/tools/browser_harness_tools.goBrowser screenshots/artifacts are channel-safe and mobile-readable in Telegram.No dedicated Telegram browser artifact rendering fixture.missingnoneG/Bplanned row: Telegram browser artifact rendering`go test ./internal/gateway ./internal/tools -run ‘Telegram.*BrowserBrowser.*Artifact’ -count=1`

Rows marked “planned row” or “fixture-ready row” are represented in progress.json; builders should still use gormes-planner to refine draft rows before implementation. The highest-value immediate implementation slice from this pass was the production Telegram metadata seam; the highest-value next fixture-ready slice is the production Telegram provider-payload golden.

LaneUpstream scopeVerdict
Hermes runtime/providersrun_agent.py, agent/**, environments/agent_loop.py, trajectory_compressor.pySource-class covered; feature-level transport, trajectory, Moonshot, OAuth, compression, prompt, credential, model metadata, environment, and parser rows are now explicitly row-backed.
Hermes tools/security/pluginstools/**, plugins/**, skills/**, optional-skills/**, acp_adapter/**, mcp_serve.pySource-class covered; ACP/MCP/plugins/skills/sandbox/browser/security/operator-tool surfaces are either mapped-by-contract or row-backed and must be split before builder selection.
Hermes gateway/CLI/releasegateway/**, cron/**, hermes_cli/**, tui_gateway/**, web/**, website/**, packaging/deploy filesSource-class covered; gateway operator, dashboard management, CLI umbrella, channel bootstrap, OCI, Homebrew, and release rows are row-backed with split targets.
Honcho core/Gonchosrc/**, migrations, routers, CRUD, dialectic, deriver, dreamer, vector, telemetry, webhooksSource-class covered; API, CRUD invariants, queue, document tree, dialectic/dream execution, webhooks, telemetry, and divergence rows are mapped-by-contract, owned/excluded, or still row-backed.
Honcho SDK/docs/MCP/CLI/deploydocs/**, sdks/**, mcp/**, honcho-cli/**, examples/**, tests/**, deploy/config filesSource-class covered; SDK refs, OpenAPI/MCP/CLI/deploy/example/test fixture rows are now exact enough for nested coverage tests and row-backed where runtime work remains.
SurfaceCanonical fileClassification
Source-class inventoryUpstream Coverage Ledgermapped-by-symbol at top-level source-class granularity
Feature-family mapHermes And Honcho Feature Mapmapped-by-contract
Reconciled implementation planHermes/Honcho To Gormes Go Runtime Planowned planning surface for Go package targets, classifications, dependency order, and row split candidates
Executable nested coverage gatedocs/upstream_coverage_test.go::TestNestedUpstreamFeatureCoveragemapped-by-symbol for representative nested upstream paths
Implementation backlogdocs/content/building-gormes/architecture_plan/progress.jsonowned canonical register; no side backlog

Every gap below must resolve to one of three states before implementation:

  1. an exact builder-ready progress.json row;
  2. an owned or excluded decision in the runtime plan with replacement proof;
  3. a nested coverage matrix entry that keeps the gap visible until split.
GapUpstream refsGo targetClassification / progress action
Provider transport abstraction../hermes-agent/agent/transports/{base,types,chat_completions,codex,anthropic,bedrock}.pyinternal/llm transport interfaces and stream/event fixturescomplete in Phase 4.A row Provider interface + stream fixture harness; internal/llm/provider_transport_contract_test.go proves ProviderTransport request building and fixture replay for chat_completions, anthropic_messages, bedrock_converse, and codex_responses. Remaining provider-specific live auth/routing/error features stay row-backed under their adapter rows.
Trajectory compressor../hermes-agent/trajectory_compressor.pyinternal/persistence/transcript, internal/audit, internal/telemetry, internal/llmPhase 4.E row Trajectory compressor + compressed-evidence lineage now ports the pure protected-region compression metrics and redacted audit lineage; provider selection, async directory processing, and CLI/batch IO remain future row-backed work.
Moonshot/Kimi schema sanitizer../hermes-agent/agent/moonshot_schema.py, ../hermes-agent/tests/agent/test_moonshot_schema.py, ../hermes-agent/tests/agent/transports/test_chat_completions.pyinternal/llm schema sanitizercomplete in Phase 4.A row Moonshot/Kimi tool-schema sanitizer; internal/llm/moonshot_schema_test.go covers sanitize_moonshot_tool_parameters, sanitize_moonshot_tools, is_moonshot_model, and request-boundary aggregator routing.
Google/Gemini OAuth correction../hermes-agent/agent/google_oauth.py, Gemini auth callersinternal/config, internal/cli, internal/llmstill row-backed by Phase 4.G; fix feature-map ownership so Google OAuth belongs to Gemini/Google provider auth, not Codex OAuth.
Codex OAuth refs../hermes-agent/hermes_cli/auth.py, ../hermes-agent/agent/auxiliary_client.py, ../hermes-agent/run_agent.pyinternal/config, internal/cli, internal/llmUpdate Phase 4.A/4.G refs so Codex auth uses Codex/ChatGPT credentials and stale-token refresh evidence.
Provider auth CLI command surface../hermes-agent/hermes_cli/main.py:auth_parser, ../hermes-agent/hermes_cli/auth.py, ../hermes-agent/hermes_cli/auth_commands.py, ../hermes-agent/tests/hermes_cli/test_auth_commands.py, ../hermes-agent/tests/hermes_cli/test_spotify_auth.pycmd/gormes, internal/config, internal/llm, internal/pluginsRow-backed by Phase 5.O rows Hermes auth command-tree manifest refresh, Hermes auth credential-pool command surface, Hermes auth OAuth provider adapters, and Hermes auth Spotify service-provider subcommand; current Hermes provider login is auth add <provider> --type oauth, not auth login, while top-level login is removed guidance.
Context compression internalscontext_compressor.py, manual_compression_feedback.py, context_references.pyinternal/llm, internal/kernel, internal/persistence/transcriptPhase 4.B row Context references stable-handle parser now ports typed @ reference parsing and pending handle storage; expansion/injection, sensitive-path filtering, URL/git execution, manual feedback, and remaining compression internals stay row-backed.
Prompt builder internalsprompt_builder.py, skill_preprocessing.py, skill_commands.pyinternal/llm, internal/skills, internal/cliAdd source refs and acceptance to Phase 4.C rows for context-file scan, HERMES.md discovery, frontmatter stripping, skill manifest, and skill system prompt.
Credential/rate/cache helperscredential_pool.py, credential_sources.py, prompt_caching.py, rate_limit_tracker.py, nous_rate_guard.pyinternal/config, internal/llm, internal/telemetrystill row-backed by Phase 4.G/4.H; convert note rows into builder-ready credential, rate, and prompt-cache slices.
Provider account usage reportingagent/account_usage.py:render_account_usage_lines, agent/account_usage.py:fetch_account_usage, cli.py /usage, gateway/run.py:_handle_usage_command, tests/test_account_usage.py, tests/gateway/test_usage_command.pyinternal/llm, internal/telemetry, internal/gateway, cmd/gormesstill row-backed by Phase 4.H rows Provider account usage read model + renderer and Gateway /usage command binding over provider account usage; fixture-backed builder work must first normalize Codex, Anthropic, and OpenRouter usage, then bind CLI/gateway command precedence and transcript-history fallback through shared redacted rendering.
Raw tool-call parser matrix../hermes-agent/environments/tool_call_parsers/*.pyinternal/llm parser/repair fixtures or dedicated parser packagemanifest complete/validated by Raw tool-call parser fixture matrix; Hermes XML and DeepSeek v3.1 have golden fixtures, while the remaining parser families stay row-backed for execution parity.
Telegram fallback transport../hermes-agent/gateway/platforms/telegram_network.pyinternal/channels/telegram, internal/configstill row-backed by Phase 2.B/7; add fallback network transport parity row if Telegram runtime needs upstream-compatible proxy behavior.
Hermes state/config migration../hermes-agent/hermes_constants.py, hermes_state.py, hermes_cli/config.pycmd/gormes, internal/config, internal/persistence/session, internal/memoryowned config layout plus row-backed migration path; add explicit migration command before claiming legacy state import parity.
GapUpstream refsGo targetClassification / progress action
Yuanbao tool drift../hermes-agent/tools/yuanbao_tools.py, toolsets.py, model_tools.pyinternal/tools/testdata/upstream_tool_parity_manifest.jsonstill row-backed by Phase 5.A/7.E; refresh manifest for Hermes audit commit and include yb_query_group_info, yb_query_group_members, yb_send_dm, yb_search_sticker, yb_send_sticker.
ACP adapter slices../hermes-agent/acp_adapter/{auth,entry,events,permissions,server,session,tools}.pyfuture internal/protocols/acp or internal/plugins + internal/apiserverRow-backed by Phase 5.H ACP server side; later planner splits may carve registry/stdio launch, session lifecycle, event rendering, tool rendering, permission bridge, and model/slash-command state rows from that packet.
MCP server/runtime../hermes-agent/mcp_serve.py, tools/mcp_tool.py, tools/managed_tool_gateway.pyinternal/plugins, internal/tools, internal/apiserverSplit Phase 5.G rows for conversation bridge, resource/prompt wrappers, sampling runtime, prompt-injection scan, and OSV checks.
Plugin inventory../hermes-agent/plugins/**internal/plugins, internal/tools, internal/gonchoStill row-backed by Phase 5.I plugin SDK/inventory rows and Phase 5.O Hermes CLI command-tree parity manifest for dynamic plugin command discovery; disk cleanup, image generation plugins, and memory plugins beyond Honcho must be split before builder selection.
Skill catalog parity../hermes-agent/skills/**, ../hermes-agent/optional-skills/**internal/skills, docs/development-skills, cmd/gormesStill row-backed by Phase 5.F/6.C skill registry, prompt snapshot, and learning-loop rows; bundled/optional catalog provenance and enablement remain split targets.
Sandbox environment detailstools/environments/**, environments/**, tools/credential_files.py, tools/env_passthrough.pyinternal/tools, internal/cmdrunner, internal/configRow-backed by Environment interface + file sync contract; local env scrubbing, SSH, managed Modal, file sync checksum/delete, credential mounts, and env passthrough remain narrow follow-up rows.
Browser/media/security surfacesbrowser_*, browser_providers/**, tts_tool.py, voice_mode.py, transcription_tools.py, tirith_security.py, website_policy.py, url_safety.pyinternal/tools, internal/doctor, future browser/media packagesStill row-backed by Phase 5.C/5.E/5.J browser, media, voice, and security rows; CDP/dialog/snapshot/provider routing, voice state, TTS/transcription, and URL/site/tool-output security must stay separate builder packets.
Operator toolstodo_tool.py, clarify_tool.py, debug_helpers.py, send_message_tool.py, interrupt.py, memory_tool.py, rl_training_tool.py, mixture_of_agents_tool.pyinternal/tools, internal/gateway, internal/persistence/sessionsearchtool, internal/subagentStill row-backed by Phase 5.N operator-tool rows; each operator-visible contract must be made builder-ready before handler ports.
Supply-chain and skills-index workflow parity.github/workflows/supply-chain-audit.yml, .github/workflows/skills-index.ymldocs/CI contract or cmd/repoctlstill row-backed by Phase 5.P/6; add a CI contract row if these workflows remain part of public operational parity.
GapUpstream refsGo targetClassification / progress action
Channel directory/mirror/sticker cachegateway/channel_directory.py, gateway/mirror.py, gateway/sticker_cache.pyinternal/gateway, internal/channels/*, internal/persistence/storeConvert Phase 2.F.4 note rows into builder-ready slices for persistence, refresh/stale invalidation, mirror writes, and sticker cache injection.
Dashboard management routeshermes_cli/web_server.py, web/**, website/**internal/apiserver, www.gormes.ai, internal/configStill row-backed by Phase 5.Q API/dashboard rows; config/env/logs/OAuth mutation/theme/plugin assets must be split or marked owned exclusions before implementation.
CLI command-tree manifesthermes_cli/main.py, hermes_cli/commands.py:GATEWAY_KNOWN_COMMANDS, gateway/run.py:_handle_status_command,_handle_restart_command,_handle_reset_command,_handle_help_command,_handle_model_command,_handle_profile_command,_handle_update_command,_handle_approve_command,_handle_deny_command,_handle_voice_command,_handle_usage_command, plugins/memory/__init__.py:discover_plugin_cli_commands, plugins/disk-cleanup/__init__.py:PluginContext.register_commandcmd/gormes/hermes_cli_parity.go, internal/cli, cmd/gormes, internal/pluginsPhase 5.O row Hermes CLI command-tree parity manifest classifies every top-level command, nested command, root/global flag, static slash command, dynamic plugin command, alias, gateway handler, removed Hermes -z/--oneshot guidance, and Gormes-owned addition before handler ports.
CLI umbrellashermes_cli/**, cli.pycmd/gormes, internal/cli, internal/config, internal/doctorSplit Phase 5.O umbrella rows into command-tree, auth/setup/config, management CLI, and diagnostics/log/status contracts.
Channel bootstrapgateway/platforms/**internal/channels/*, internal/gatewayStill row-backed by Phase 7 channel bootstrap rows for Signal, Matrix, Mattermost, Feishu, DingTalk SDK, QQ, and Yuanbao transport/bootstrap metadata.
Release and packagingscripts/release.py, Dockerfile, docker/entrypoint.sh, docker/**, docker-compose.yml, packaging/homebrew/hermes-agent.rb, nix/**, flake.*installers, service units, OCI image, Makefile, cmd/gormes, www.gormes.aiRow-backed by Phase 5.P OCI image, Homebrew, and installer/site rows; Nix/flake/NixOS, release artifact/versioning, service install, and public installer/site contracts remain separate packets.
GapUpstream refsGo targetClassification / progress action
SDK refs and fixture matrix../honcho/tests/sdk/**, ../honcho/sdks/typescript/__tests__/**, ../honcho/sdks/python/src/honcho/{client,aio,api_types,mixins}.py, ../honcho/sdks/typescript/src/{client,validation}.ts, ../honcho/sdks/typescript/src/http/streaming.tsinternal/goncho, internal/gonchotools, future compatibility adapterRow-backed by Goncho Honcho SDK compatibility e2e harness; Python SDK matrix, TypeScript SDK matrix, and unsupported-field evidence can split from that packet when builder scope is too large.
OpenAPI v3 route manifest../honcho/docs/v3/openapi.json, ../honcho/src/routers/{workspaces,peers,sessions,messages,conclusions,keys,webhooks}.py, ../honcho/tests/routes/**future internal/goncho/http, internal/apiserverStill row-backed by Phase 3.G/5.Q route manifest rows for route shape, aliases, validation, status codes, pagination, errors, and unsupported-route evidence.
Honcho MCP catalog../honcho/mcp/src/tools/**, MCP README/instructionsinternal/gonchotools, internal/plugins, internal/toolsComplete in Phase 5.G row Goncho MCP tool catalog; internal/gonchotools/honcho_mcp_catalog_test.go proves all upstream MCP tool names are mapped, partially mapped with field-level degradation, or explicit unsupported rows.
Honcho CLI compatibility../honcho/honcho-cli/src/honcho_cli/{main,config,output,validation,_help,branding}.py, ../honcho/honcho-cli/src/honcho_cli/commands/{workspace,peer,session,message,conclusion,config_cmd,setup}.py, testscmd/gormes goncho, internal/config, internal/doctorRow-backed by Goncho CLI command-tree parity; functional command groups, JSON/table output, config preservation, ID validation, destructive confirms, and exit codes remain follow-up rows.
Deploy/config divergence.env.template, config.toml.example, Dockerfile, compose, fly.toml, docker/entrypoint.sh, docker/prometheus.yml, docker/grafana-datasource.yml, database/init.sql, mcp/.dev.vars.examplecmd/gormes, internal/config, internal/doctor, release docsOwned/excluded divergence is recorded in the runtime plan and ledger: hosted FastAPI/Postgres/Redis/Fly/Alembic plus Prometheus/Grafana adjuncts are local-Goncho divergence unless a future exporter/deploy row promotes them.
CRUD invariantssrc/models.py:MessageEmbedding,Collection,Document,QueueItem,ActiveQueueSession,WebhookEndpoint,SessionPeer, src/schemas/**, src/crud/{workspace,peer,message,document,webhook,peer_card,deriver,collection,session,representation}.py, migrationsinternal/goncho, internal/persistence/store, internal/memory, internal/persistence/sessionRow-backed by Goncho CRUD lifecycle invariants; config merge/replace, metadata validation, clone/update/delete route variants, and unsupported HTTP semantics remain follow-up packets.
Deriver queue lifecyclesrc/deriver/queue_manager.py, src/deriver/**, src/reconciler/**internal/goncho, internal/automation/cron, internal/doctorStill row-backed by Phase 3.F/6 queue and deriver rows for queue item state, ownership, stale cleanup, errors, and queue.empty event evidence before LLM derivation.
Observation document treesrc/crud/representation.py, src/crud/document.py, src/deriver/**, migrationsinternal/goncho, internal/memoryStill row-backed by Phase 3.F/6 observation/document rows for explicit/deductive/inductive/contradiction observations, source IDs, duplicate replacement, soft delete, and derived-count semantics.
Dialectic and dream executionsrc/dialectic/{chat,core,prompts}.py, src/dreamer/{dream_scheduler,orchestrator,specialists,surprisal}.py, src/dreamer/trees/{base,covertree,graph,lsh,prototype,rptree,sklearn_wrapper}.py, testsinternal/goncho, internal/kernel, internal/automation/cronStill row-backed by Phase 3.F/6 dialectic and dream rows; fake-provider tool-loop chat, reasoning levels, streaming finalization, scheduled dream execution, observations, and peer-card side effects remain separate packets.
Webhooks, keys, telemetrysrc/routers/{keys,webhooks}.py, src/webhooks/events.py, src/webhooks/webhook_delivery.py, src/telemetry/emitter.py, src/telemetry/reasoning_traces.py, src/telemetry/events/**internal/apiserver, internal/gateway, internal/telemetry, internal/audit, internal/gonchokey creation, webhook CRUD/test/HMAC are complete in Goncho keys + webhooks compatibility surface; outbound delivery/retries are still row-backed by Goncho webhook delivery retry worker contract; local event names and reasoning evidence are still row-backed by enriched Self-monitoring telemetry; hosted metrics/exporters stay owned/excluded until a dedicated exporter row exists.
Vector/reconciler divergencesrc/vector_store/**, src/reconciler/**internal/memory, internal/persistence/storeComplete in Phase 3.F row Vector store + reconciler divergence proof; internal/memory/divergence_test.go proves LanceDB/Turbopuffer/reconciler surfaces are explicit excluded divergence and SQLite semantic recall has no external sync-state dependency.
Goncho tool schema driftinternal/gonchotools/honcho_tools.go, internal/goncho/types.gointernal/gonchotoolsmapped-by-symbol for honcho_search.filters and honcho_search.limit through complete rows Goncho search filter grammar and Honcho-compatible scope/source tool schema; honcho_context.include_dream_status is still row-backed by Goncho dreaming scheduler contract and Goncho context representation options if it remains a public compatibility knob.
Honcho API validation limits../honcho/src/schemas/api.py, ../honcho/tests/test_schema_validations.pyinternal/goncho/compat, internal/configstill row-backed by Phase 3.G; add metadata, ID regex, token limit, and message limit sanitizer fixtures.
Honcho effective config hierarchy../honcho/src/schemas/configuration.py, ../honcho/tests/unified/test_cases/config_*.jsoninternal/config.GonchoCfg, internal/goncho.Configmapped-by-contract but needs row split for workspace/peer/session/message override fixtures.
Honcho model config/provider bridge../honcho/src/llm/**, ../honcho/tests/llm/**internal/goncho, internal/llm bridge or owned deterministic enginestill row-backed by Phase 3.G/4.A; fake-provider fixtures decide which hosted LLM behavior is compatible versus owned.
Honcho integration guides and examples../honcho/docs/v3/guides/**, ../honcho/examples/**, ../honcho/tests/unified/**internal/goncho/compat/testdata, docs examplesmapped-by-contract; import representative fixture examples before claiming guide-level compatibility.
Honcho live LLM tests../honcho/tests/live_llm/**fake/local LLM fixtures onlyexcluded for live-provider execution; any behavior needed by Gormes must move through hermetic ../honcho/tests/llm/** fixtures.

The map can only be called feature-complete after these gates pass:

  1. Source-class ledger test passes.
  2. Swarm gap register contains no missing or vague entry without a builder-ready row.
  3. All feature-derived rows have source_refs, write_scope, test_commands or no_test_required, acceptance, and done signal.
  4. Rows with intentionally different Go behavior state owned or excluded and name the replacement test.
  5. A focused docs test checks selected nested source classes, not only top-level directories.
  • Do not add a side TODO list. Runtime work belongs in progress.json.
  • When a broad gap gets split, update the runtime plan, this register, and the nested coverage matrix in the same planner pass.
  • When Gormes intentionally diverges, record owned or excluded with a replacement proof or explicit live-only exclusion.
  • When a nested upstream path appears in a sibling checkout and is not in the matrix, add it or explain why it is repo hygiene.
Pass dateFormNotes
2026-04-29Four-lane operator dogfoodAdded row-level operator UX matrix for Telegram commands, /status, identity/provider payload, sessions, memory, browser artifacts, CLI/config/auth, and stream/reply behavior. Coordinator also closed the standalone gormes telegram live-turn metadata seam.
2026-04-27Seven-agentFirst pass to apply seven-bucket classification end-to-end and to add coverage detection for cli-config.yaml.example, constraints-termux.txt, tinker-atropos, and database/init.sql.
2026-04-28Five-laneLane-level summary of the same overnight investigation with the gap-register form below.

Each new swarm pass appends a row here and adds a ## YYYY-MM-DD ... Pass section above with the same specialist table template.

The gap classifier proposed ten builder-ready rows that later planner/builder passes wrote into progress.json. This table is now a historical audit record; it is non-executable unless the named row is represented in the canonical progress register. Each entry names the parent phase anchor.

#Row namePhase anchorGo targetTest command (focused)Status
1Provider transport interface + stream fixture harness4.Ainternal/llm.ProviderTransport + transcript fixtures across Anthropic/Bedrock/Codex/Chat-Completionsgo test ./internal/llm -run ProviderTransport -count=1shipped 2026-04-28 (Phase 4.A row complete)
2Moonshot/Kimi tool-schema sanitizer4.Ainternal/llm/moonshot_schema*.gogo test ./internal/llm -run Moonshot -count=1shipped 2026-04-28 (Phase 4.A row complete)
3Trajectory compressor + compressed-evidence lineage4.Einternal/persistence/transcript/trajectory_compressor*.go, internal/audit/trajectory_link.gogo test ./internal/persistence/transcript -run TrajectoryCompressor -count=1shipped 2026-04-28 (Phase 4.E row complete)
4Context references stable-handle store4.Binternal/llm/context_references*.go, internal/contextrefs/refs.go, internal/persistence/transcript/refs.gogo test ./internal/llm -run ContextReferences -count=1shipped 2026-04-28 (Phase 4.B row complete; parser + pending handle store only, live expansion remains row-backed)
5Goncho keys + webhooks compatibility surface3.Ginternal/goncho/{keys,webhooks}*.go; HTTP route binding remains row-backed under the OpenAPI route parity slicego test ./internal/goncho -run Keys -count=1, go test ./internal/goncho -run Webhooks -count=1shipped 2026-04-28 (Phase 3.G row complete; internal key/webhook surface only, HTTP route binding and delivery workers remain row-backed)
6Goncho MCP tool catalog5.Ginternal/gonchotools/honcho_mcp_catalog*.gogo test ./internal/gonchotools -run HonchoMCPCatalog -count=1shipped 2026-04-28 (Phase 5.G row complete)
7Goncho HTTP route parity over OpenAPI v33.G/5.Qinternal/goncho/http/*go test ./internal/goncho/http -count=1shipped 2026-04-28 (Phase 3.G row complete; OpenAPI route manifest and unsupported-route contract only, handler binding remains row-backed)
8Goncho CLI command-tree parity3.G/5.Ocmd/gormes/goncho*.go, cmd/gormes/goncho_cli_parity_test.gogo test ./cmd/gormes -run GonchoCLIParity -count=1shipped 2026-04-28 (Phase 3.G row complete; command-tree manifest only, functional command execution remains row-backed)
9Goncho CRUD lifecycle invariants3.Finternal/goncho/crud_invariants_test.go, internal/goncho/sql.gogo test ./internal/goncho -run CRUDInvariants -count=1shipped 2026-04-28 (Phase 3.F row complete; local SQLite lifecycle invariants only)
10Vector store + reconciler divergence proof3.D/3.Ginternal/memory/divergence_test.go, internal/memory/vector_divergence.gogo test ./internal/memory -run Divergence -count=1shipped 2026-04-28 (Phase 3.F row complete)

Plus 23 additional feature-level residuals the gap classifier surfaced (sandbox env split, voice/TTS/transcription split, browser provider rows, ACP 7-row split, MCP server-side runtime split, operator-tool rows, CLI umbrella splits, dashboard mutation rows, SDK matrix split, deploy divergence matrix, prompt/audit/debug-bundle redaction, Google OAuth ownership re-anchor, deriver queue lifecycle, observation document tree, dialectic and dream fake-provider execution, Goncho telemetry, Honcho deploy divergence matrix, Yuanbao manifest refresh, Codex umbrella deletion, Yuanbao gateway/toolset cross-link, Goncho tool schema knobs, plugin inventory beyond Spotify/Google Meet, deprecated-cron-umbrella cleanup). The planner pass reclassified these as row-backed, owned/excluded divergence, or inventory-only umbrella placeholders in progress.json; none remains an unbacked planner instruction.