Swarm Feature Parity Audit
Swarm Feature Parity Audit
Section titled “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:
- Source-class coverage is executable.
Upstream Coverage Ledgerplusgo test ./docs -run TestUpstreamCoverageLedgerMatchesSourceClasses -count=1proves every feature-like top-level upstream source class is represented or explicitly ignored as repo hygiene. - 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.
- 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, orstill row-backed. No subsystem-levelunknown/gapremains 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.
2026-04-27 Seven-Agent Pass
Section titled “2026-04-27 Seven-Agent Pass”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.
| Specialist | Scope | Outputs landed in | Verdict |
|---|---|---|---|
| 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/**, packaging | feature map provider/tool/gateway rows, this register, runtime plan nested matrix | 200-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 files | feature map Goncho rows, this register, runtime plan nested matrix | 169-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 subsystems | feature map Go architecture target table, runtime plan classifications | Deep-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/** package | runtime plan classification column, this register’s classification column | 50+ 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 map | TestNestedUpstreamFeatureCoverage matrix, fixture donor recommendations | Identified 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 entries | Seven 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 counts | this register’s classification, runtime plan splits, Row Split Candidates From Swarm table | 337 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.
2026-04-29 Operator Dogfood Parity Pass
Section titled “2026-04-29 Operator Dogfood Parity Pass”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.
| Specialist | Scope | Verdict |
|---|---|---|
| Telegram UX/status | Gateway 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 identity | Final Telegram provider payload, context discovery, metadata, role ordering, model/tool guidance | A 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/auth | Hermes CLI command tree, config, auth, provider runtime recovery, redacted diagnostics | Manifests 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/tools | Durable memory, Goncho/Honcho lifecycle, browser contracts, artifacts, Telegram rendering | Goncho 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 slice | Standalone gormes telegram live-turn metadata wiring | cmd/gormes/telegram.go now routes through telegramManagerConfig, which reuses gatewayManagerConfig; cmd/gormes/telegram_test.go proves non-nil timestamp/model/provider seams. |
Operator UX Parity Matrix
Section titled “Operator UX Parity Matrix”| Area | Hermes/Sidon source reference | Gormes source reference | Expected Hermes behavior | Current Gormes behavior | Status | Test coverage | Owner/lane | Progress row ID | Evidence command | Live Telegram evidence |
|---|---|---|---|---|---|---|---|---|---|---|
/status | gateway/run.py:4646-4680 | internal/gateway/status_command.go:14-69 | Gateway 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. | partial | internal/gateway/status_command_test.go | B/C | existing Phase 2.F.3 plus planned row: Telegram /status Hermes-format closeout | go test ./internal/gateway -run TestManagerStatusCommand -count=1 | not reverified live in this pass |
/help | gateway/run.py:3196-3200, hermes_cli/commands.py | internal/gateway/commands.go:160-179 | Registry-driven gateway help; never submitted to provider. | Registry-driven Gormes help exists; copy and command set differ where Gormes exposes unavailable commands. | partial | internal/gateway/commands_test.go | B/H | Phase 2 slash registry rows; Phase 5.O CLI command-tree rows | `go test ./internal/gateway -run ‘Help | CommandRegistry’ -count=1` |
| slash menu | gateway/platforms/telegram.py:822-837, hermes_cli/commands.py:357-372 | internal/channels/telegram/bot.go:49-64, internal/gateway/commands.go:181-190 | Telegram setMyCommands registers canonical menu names with aliases omitted. | Core menu registers from CommandRegistry. | parity | internal/channels/telegram/bot_test.go:TestBot_RunRegistersHermesTelegramCommands | B | Phase 2 slash registry rows | go test ./internal/channels/telegram -run TestBot_RunRegistersHermesTelegramCommands -count=1 | not reverified live |
| dynamic slash menu | hermes_cli/commands.py:558-589 | internal/gateway/commands.go:194-207 | Menu includes enabled plugin/skill commands up to Telegram limits with hidden-count evidence. | Helper exists, but runtime registerCommands still uses core TelegramBotCommands only. | partial | helper-level skill tests only | B/H | existing Skill preprocessing + dynamic slash commands; planned row: Telegram dynamic BotCommand menu wiring | `rg -n ‘TelegramBotCommandsWith | registerCommands’ internal` |
| unknown command | gateway/run.py:3435-3452 | internal/gateway/manager.go:704-727 | Unknown slash never enters model; user gets resend-without-slash guidance. | Unknown slash is intercepted and not submitted; copy is shorter. | parity | internal/gateway/active_turn_command_bypass_test.go | B | Phase 2 slash registry rows | `go test ./internal/gateway -run ‘Unknown | SlashCommand’ -count=1` |
| unavailable command | hermes_cli/commands.py:253-290 | internal/gateway/commands.go:76-89, internal/gateway/manager.go:704-727 | Recognized 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. | partial | internal/gateway/active_turn_command_bypass_test.go | B/C | planned row: Gateway /title manual session title command | `rg -n ‘“title” | EventTitle |
| active-turn slash behavior | gateway/run.py:2950-3225, hermes_cli/commands.py:267-290 | internal/gateway/commands.go:37-90, internal/gateway/manager.go:704-727 | Status/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. | partial | internal/gateway/active_turn_command_bypass_test.go | B | planned row: Gateway active-turn policy manifest closeout | go test ./internal/gateway -run TestManager_ActiveTurnSlashCommand -count=1 | not reverified live |
| reply quoting | gateway/platforms/telegram.py:904-922, gateway/platforms/telegram.py:1022-1032, gateway/platforms/telegram.py:2935-2959 | internal/channels/telegram/bot.go:140-165, internal/gateway/manager.go:858-970 | Replies 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. | partial | internal/channels/telegram/bot_test.go, internal/gateway/manager_test.go, internal/gateway/status_command_test.go | B | planned row: Telegram reply_to_mode and reply-context parity | `go test ./internal/channels/telegram ./internal/gateway -run ‘Reply | Status’ -count=1` |
| hourglass lifecycle | gateway/platforms/base.py:1718-1724, gateway/platforms/base.py:1976-1986, gateway/platforms/telegram.py:1909-1935 | internal/gateway/coalesce.go, internal/gateway/manager.go:911-928, internal/channels/telegram/bot.go:159-165 | Activity 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. | partial | coalescer and placeholder tests | B/G | existing fresh-final rows plus planned row: Telegram typing action + placeholder lifecycle parity | `rg -n ‘SendPlaceholder | DeleteMessage |
| streaming text | gateway/stream_consumer.py:482-508 | internal/gateway/render.go, internal/tooltrace | Streaming 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. | parity | internal/gateway/render_test.go, internal/gateway/manager_test.go, internal/config/config_test.go | B | complete row: Gateway stream/tool trace formatting fixture matrix | `go test ./internal/gateway -run ‘TestFormatToolProgress | TestFormatStream’ -count=1` |
| tool traces | gateway/run.py tool progress callbacks, gateway/stream_consumer.py, agent/display.py:get_tool_emoji | internal/tooltrace, internal/gateway/render.go, internal/tui, internal/slack/render.go, internal/discord/render.go | Tool 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 overrides | internal/tooltrace/tooltrace_test.go, internal/gateway/render_test.go, internal/tui/viewport_history_test.go, internal/slack/render_test.go, internal/discord/render_test.go | B/G | complete 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 ‘ToolTrace | ToolProgress |
| errors | gateway/run.py:4396-4439 | internal/gateway/render.go:39-82, provider error classifiers | Provider errors are redacted, concise, and actionable; no HTML/secrets. | HTML/secret sanitization is covered for gateway renderers; full provider-specific hint parity remains partial. | partial | internal/gateway/render_test.go, internal/llm/*error*test.go | F/B | existing provider error rows plus Provider runtime recovery policy wiring | `go test ./internal/gateway ./internal/llm -run ‘Error | Provider’ -count=1` |
| identity/name question | run_agent.py, agent/prompt_builder.py, tools/memory_tool.py | internal/gateway/live_turn_prompt.go, internal/kernel/kernel.go:296-340 | Provider 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. | partial | internal/gateway/live_turn_prompt_test.go:TestLiveTurn_TelegramFinalProviderRequestIncludesOperatorContext | D | fixture-ready row: Telegram production live-turn provider payload golden | go test ./internal/gateway -run TelegramFinalProviderRequestIncludesOperatorContext -count=1 | not reverified live |
| final provider request | run_agent.py:3667-3779 | internal/kernel/kernel.go:296-340, internal/llm/client.go | Final 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. | partial | cmd/gormes/telegram_test.go, internal/gateway/live_turn_prompt_test.go | D | fixture-ready row: Telegram production live-turn provider payload golden | `go test ./cmd/gormes ./internal/gateway -run ‘Telegram.*ProviderPayload | LiveTurn’ -count=1` |
| session title | agent/title_generator.py, gateway/run.py:4657-4671 | internal/persistence/session/auto_title.go, internal/gateway/status_command.go:139-178 | Meaningful 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. | partial | internal/persistence/session/auto_title_test.go, internal/gateway/status_command_test.go | C | existing Phase 4.F rows plus planned row: Telegram /status Hermes-format closeout | `rg -n ‘PerformAutoTitle | SetTitle’ internal cmd` |
/title | gateway/run.py:6697-6743, upstream title command tests | internal/gateway/commands.go:76-79 | /title [name] sets manual title; /title shows current title; invalid titles produce guidance. | Command is advertised but unavailable. | regressed | no Gormes handler test | C | planned row: Gateway /title manual session title command | `rg -n ‘“title” | handleTitle |
| session id | gateway/session.py, gateway/run.py:4648-4668 | internal/gateway/status_command.go:72-108 | Session ID is Hermes-style, not telegram:<chat_id>. | Status path replaces legacy chat-key IDs and persists generated IDs. | parity | internal/gateway/status_command_test.go:TestManagerStatusCommandReplacesLegacyChatKeySessionID | C | Phase 2.F.3 status rows | go test ./internal/gateway -run ReplacesLegacyChatKeySessionID -count=1 | not reverified live |
| created time | gateway/run.py:4672 | internal/gateway/status_command.go:25-35, :110-124 | Created uses session metadata semantics. | Status-created sessions persist CreatedAt; generated IDs derive created time as fallback. | parity | internal/gateway/status_command_test.go | C | Phase 2.F.3 status rows | go test ./internal/gateway -run StatusCommand -count=1 | not reverified live |
| last activity | gateway/run.py:4673 | internal/gateway/status_command.go:25-35 | Last Activity uses session updated metadata. | Status-created metadata writes UpdatedAt; broader conversational update semantics need live-turn coverage. | partial | internal/gateway/status_command_test.go | C | planned row: Gateway conversational session metadata refresh | `rg -n ‘UpdatedAt | PutMetadata’ internal/gateway internal/persistence/session` |
| token accounting | gateway/run.py:4674 | internal/gateway/status_command.go:38, internal/gateway/usage_command.go | Status shows accumulated session tokens. | Status uses last usage frame totals; session-wide persistence semantics are not proven. | partial | internal/gateway/status_command_test.go | C/F | existing provider account usage rows plus planned row: Gateway session token accounting parity | `go test ./internal/gateway -run ‘Status | Usage’ -count=1` |
| agent running | gateway/run.py:4653-4655, :4675 | internal/gateway/status_command.go:38-42 | Shows Yes ⚡ while agent is running, No otherwise. | Running check exists; copy differs. | partial | status tests | C/B | Telegram /status Hermes-format closeout | go test ./internal/gateway -run StatusCommand -count=1 | not reverified live |
| connected platforms | gateway/run.py:4651, :4677 | internal/gateway/status_command.go:43-68 | Shows connected adapters. | Gormes renders connected registered channels or event platform fallback. | parity | status tests | C | Phase 2.F.3 status rows | go test ./internal/gateway -run StatusCommand -count=1 | not reverified live |
| SOUL.md loading | agent/prompt_builder.py, run_agent.py | internal/llm/context_files.go, internal/gateway/live_turn_prompt.go:83-101 | Identity/SOUL reaches provider request. | Workspace ancestor, Gormes home, migrated memory, and direct Hermes home lookup exist; profile-name lookup still needs a row. | partial | internal/gateway/live_turn_prompt_test.go | D | planned row: Active Hermes/Sidon profile context root resolver for live turns | `go test ./internal/gateway -run ‘SOUL | ProviderRequest’ -count=1` |
| USER.md/MEMORY.md loading | tools/memory_tool.py:105,124,359 | internal/llm/durable_user_context.go, internal/gateway/live_turn_prompt.go:103-131 | Durable 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. | partial | internal/llm/durable_user_context_test.go, internal/gateway/live_turn_prompt_test.go | D/E | existing live-turn durable row plus planned row: Durable context ordering and frozen snapshot decision fixture | `go test ./internal/llm ./internal/gateway -run ‘DurableUserContext | LiveTurn’ -count=1` |
| AGENTS/project context | agent/prompt_builder.py, project context discovery | internal/llm/context_files.go, internal/gateway/live_turn_prompt.go:236 | Project instructions such as AGENTS reach provider before the user turn. | Helper supports AGENTS/project files; final provider test does not assert AGENTS yet. | partial | context file tests | D | Telegram production live-turn provider payload golden | `go test ./internal/llm ./internal/gateway -run ‘ContextFiles | ProviderRequest’ -count=1` |
| timestamp/model/provider metadata | run_agent.py:3770-3779 | internal/llm/turn_metadata.go, cmd/gormes/gateway.go:235, cmd/gormes/telegram.go | Live turns include timestamp, session id, model, and provider metadata. | gateway and standalone telegram manager configs now both expose metadata seams. | parity | cmd/gormes/gateway_test.go, cmd/gormes/telegram_test.go, internal/gateway/live_turn_prompt_test.go | D | Phase 2.B.5 Live-turn metadata production wiring | `go test ./cmd/gormes -run ‘GatewayManagerConfig_LiveTurn | TelegramManagerConfig_LiveTurn’ -count=1` |
| skill guidance | skill_preprocessing.py, skill_commands.py, prompt_builder.py | internal/kernel/kernel.go:319-330, internal/skills | Relevant 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. | partial | skill preprocessing tests | D/H | existing skill rows plus planned row: Live-turn model/tool guidance wiring | `go test ./internal/kernel ./internal/skills -run ‘Skill | Prompt’ -count=1` |
| tool guidance | run_agent.py:3667-3712, prompt_builder.py | internal/llm/model_guidance.go, cmd/gormes/registry.go | Tool-use enforcement and tool descriptors reach provider in provider-compatible roles. | Constants/helper exist; request-level wiring and role swap still partial. | partial | model guidance tests | D/F | planned row: Live-turn model/tool guidance wiring | `go test ./internal/llm ./internal/kernel -run ‘Guidance | Tool’ -count=1` |
| developer role | upstream provider parity tests | internal/llm/http_client.go:463, internal/llm/model_guidance.go | GPT-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. | missing | no API-boundary role-swap fixture | D/F | planned row: OpenAI-compatible developer-role API-boundary swap | `go test ./internal/llm -run ‘DeveloperRole | OpenAICompatible’ -count=1` |
| provider stream final answer | provider transport refs | internal/llm/provider_transport.go, internal/kernel/kernel.go | Stream events accumulate final answer and tool continuations like Hermes. | Transport fixture harness exists; live runtime recovery/fallback remains partial. | partial | provider transport and stream tests | F | existing provider rows plus Provider runtime recovery policy wiring | `go test ./internal/llm ./internal/kernel -run ‘Stream | Provider |
| auth status | hermes_cli/auth.py, auth_commands.py | cmd/gormes/auth.go, internal/llm/provider_registry_manifest.go | Per-provider status reports configured/logged-in state without secrets. | Aggregator exists; some provider adapters and display-name parity remain partial. | partial | cmd auth tests | F/H | Gormes auth status per-provider aggregator; auth adapter rows | go test ./cmd/gormes -run 'Auth.*Status' -count=1 | not applicable |
| auth add/list/remove/logout | auth_commands.py:141, hermes_cli/main.py auth parser | cmd/gormes/auth.go | Add/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. | partial | auth command tests | F/H | existing Gormes top-level logout provider shortcut, Hermes auth Spotify service-provider subcommand | `go test ./cmd/gormes -run ‘Auth | Logout’ -count=1` |
| config discovery | hermes_cli/config.py:3616, config migration tests | cmd/gormes/config.go, internal/config | Hermes 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. | partial | config tests | H | existing Config, profile, auth, and setup command surfaces and Diagnostics, backup, logs, and status CLI | `go test ./cmd/gormes ./internal/config -run ‘Config | Migrate’ -count=1` |
| gateway status CLI | gateway/status.py, hermes_cli/status.py | cmd/gormes/gateway_status_test.go, internal/gateway/status.go | Read-only lifecycle, channel, pairing, pid/state evidence without starting transports. | Implemented for Gormes runtime stores. | parity | cmd/gormes/gateway_status_test.go | H/C | Phase 2.F.3 gormes gateway status | go test ./cmd/gormes -run GatewayStatus -count=1 | local CLI only |
| memory prompt insertion | tools/memory_tool.py:105,124,359 | internal/llm/durable_user_context.go, internal/kernel/kernel.go:303-318 | Memory 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. | partial | durable context and memory tests | E | refine System + memory + tools + history assembly | `go test ./internal/llm ./internal/gateway ./internal/kernel -run ‘Memory | DurableUserContext |
Hermes memory tool | tools/memory_tool.py:222-513 | cmd/gormes/registry.go, internal/gonchotools | User-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. | missing | no TestMemoryTool | E | planned row: Hermes memory tool over Goncho/local durable store | rg -n 'memory' cmd/gormes/registry.go internal/tools internal/gonchotools | not reverified live |
| Goncho provider lifecycle | agent/memory_manager.py:97,178,210,296,315,331 | internal/memory, internal/goncho, internal/kernel | One provider manager owns initialize, prefetch, sync, pre-compress, mirror, delegation, shutdown. | Pieces exist, but no single Hermes-compatible lifecycle adapter contract. | partial | memory/goncho/kernel tests | E | planned row: Goncho memory provider lifecycle adapter | `go test ./internal/memory ./internal/goncho ./internal/kernel -run ‘Memory | Shutdown |
| browser tool contract | tools/browser_tool.py:738,1386,1415,1762,2002 | internal/tools/browser_contract.go, internal/tools/browser_harness_tools.go | Browser action/result schemas, snapshots, clicks, types, screenshots, safety contract exist. | Contract and wrappers are mostly covered. | parity | browser harness/tool tests | G | Phase 5.C browser contract rows | `go test ./internal/tools -run ‘Browser.*Contract | BrowserHarness’ -count=1` |
| Go browser harness backend | sibling go-browser-harness refs, Hermes browser providers | internal/tools/browser_harness_tools.go | Default Go harness backend executes fakeable action JSON without live Chrome in unit tests. | Planned row exists; backend remains planned. | partial | browser bridge tests | G | go-browser-harness Chromedp action backend | `go test ./internal/tools -run ‘Browser | Harness’ -count=1` |
| browser artifacts/console | browser_camofox.py:300,493,583 | internal/tools/browser_contract.go:54, internal/tools/result_budget.go | Screenshot 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. | partial | tool-level budget tests | G/B | planned row: Browser artifact and console render contract | `go test ./internal/tools ./internal/gateway -run ‘Browser.*Artifact | Browser.*Console’ -count=1` |
| Telegram browser rendering | Hermes Telegram media/reply paths | internal/gateway/render.go, internal/tools/browser_harness_tools.go | Browser screenshots/artifacts are channel-safe and mobile-readable in Telegram. | No dedicated Telegram browser artifact rendering fixture. | missing | none | G/B | planned row: Telegram browser artifact rendering | `go test ./internal/gateway ./internal/tools -run ‘Telegram.*Browser | Browser.*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.
2026-04-28 Swarm Lanes (Five Lanes)
Section titled “2026-04-28 Swarm Lanes (Five Lanes)”| Lane | Upstream scope | Verdict |
|---|---|---|
| Hermes runtime/providers | run_agent.py, agent/**, environments/agent_loop.py, trajectory_compressor.py | Source-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/plugins | tools/**, plugins/**, skills/**, optional-skills/**, acp_adapter/**, mcp_serve.py | Source-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/release | gateway/**, cron/**, hermes_cli/**, tui_gateway/**, web/**, website/**, packaging/deploy files | Source-class covered; gateway operator, dashboard management, CLI umbrella, channel bootstrap, OCI, Homebrew, and release rows are row-backed with split targets. |
| Honcho core/Goncho | src/**, migrations, routers, CRUD, dialectic, deriver, dreamer, vector, telemetry, webhooks | Source-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/deploy | docs/**, sdks/**, mcp/**, honcho-cli/**, examples/**, tests/**, deploy/config files | Source-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. |
Canonical Surfaces And Ownership
Section titled “Canonical Surfaces And Ownership”| Surface | Canonical file | Classification |
|---|---|---|
| Source-class inventory | Upstream Coverage Ledger | mapped-by-symbol at top-level source-class granularity |
| Feature-family map | Hermes And Honcho Feature Map | mapped-by-contract |
| Reconciled implementation plan | Hermes/Honcho To Gormes Go Runtime Plan | owned planning surface for Go package targets, classifications, dependency order, and row split candidates |
| Executable nested coverage gate | docs/upstream_coverage_test.go::TestNestedUpstreamFeatureCoverage | mapped-by-symbol for representative nested upstream paths |
| Implementation backlog | docs/content/building-gormes/architecture_plan/progress.json | owned canonical register; no side backlog |
Feature-Level Gap Register
Section titled “Feature-Level Gap Register”Every gap below must resolve to one of three states before implementation:
- an exact builder-ready
progress.jsonrow; - an
ownedorexcludeddecision in the runtime plan with replacement proof; - a nested coverage matrix entry that keeps the gap visible until split.
Hermes Feature-Level Gaps
Section titled “Hermes Feature-Level Gaps”| Gap | Upstream refs | Go target | Classification / progress action |
|---|---|---|---|
| Provider transport abstraction | ../hermes-agent/agent/transports/{base,types,chat_completions,codex,anthropic,bedrock}.py | internal/llm transport interfaces and stream/event fixtures | complete 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.py | internal/persistence/transcript, internal/audit, internal/telemetry, internal/llm | Phase 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.py | internal/llm schema sanitizer | complete 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 callers | internal/config, internal/cli, internal/llm | still 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.py | internal/config, internal/cli, internal/llm | Update 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.py | cmd/gormes, internal/config, internal/llm, internal/plugins | Row-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 internals | context_compressor.py, manual_compression_feedback.py, context_references.py | internal/llm, internal/kernel, internal/persistence/transcript | Phase 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 internals | prompt_builder.py, skill_preprocessing.py, skill_commands.py | internal/llm, internal/skills, internal/cli | Add 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 helpers | credential_pool.py, credential_sources.py, prompt_caching.py, rate_limit_tracker.py, nous_rate_guard.py | internal/config, internal/llm, internal/telemetry | still row-backed by Phase 4.G/4.H; convert note rows into builder-ready credential, rate, and prompt-cache slices. |
| Provider account usage reporting | agent/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.py | internal/llm, internal/telemetry, internal/gateway, cmd/gormes | still 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/*.py | internal/llm parser/repair fixtures or dedicated parser package | manifest 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.py | internal/channels/telegram, internal/config | still 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.py | cmd/gormes, internal/config, internal/persistence/session, internal/memory | owned config layout plus row-backed migration path; add explicit migration command before claiming legacy state import parity. |
Hermes Tooling And Operations Gaps
Section titled “Hermes Tooling And Operations Gaps”| Gap | Upstream refs | Go target | Classification / progress action |
|---|---|---|---|
| Yuanbao tool drift | ../hermes-agent/tools/yuanbao_tools.py, toolsets.py, model_tools.py | internal/tools/testdata/upstream_tool_parity_manifest.json | still 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}.py | future internal/protocols/acp or internal/plugins + internal/apiserver | Row-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.py | internal/plugins, internal/tools, internal/apiserver | Split 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/goncho | Still 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/gormes | Still 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 details | tools/environments/**, environments/**, tools/credential_files.py, tools/env_passthrough.py | internal/tools, internal/cmdrunner, internal/config | Row-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 surfaces | browser_*, browser_providers/**, tts_tool.py, voice_mode.py, transcription_tools.py, tirith_security.py, website_policy.py, url_safety.py | internal/tools, internal/doctor, future browser/media packages | Still 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 tools | todo_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.py | internal/tools, internal/gateway, internal/persistence/sessionsearchtool, internal/subagent | Still 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.yml | docs/CI contract or cmd/repoctl | still row-backed by Phase 5.P/6; add a CI contract row if these workflows remain part of public operational parity. |
Hermes Gateway, CLI, And Release Gaps
Section titled “Hermes Gateway, CLI, And Release Gaps”| Gap | Upstream refs | Go target | Classification / progress action |
|---|---|---|---|
| Channel directory/mirror/sticker cache | gateway/channel_directory.py, gateway/mirror.py, gateway/sticker_cache.py | internal/gateway, internal/channels/*, internal/persistence/store | Convert Phase 2.F.4 note rows into builder-ready slices for persistence, refresh/stale invalidation, mirror writes, and sticker cache injection. |
| Dashboard management routes | hermes_cli/web_server.py, web/**, website/** | internal/apiserver, www.gormes.ai, internal/config | Still 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 manifest | hermes_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_command | cmd/gormes/hermes_cli_parity.go, internal/cli, cmd/gormes, internal/plugins | Phase 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 umbrellas | hermes_cli/**, cli.py | cmd/gormes, internal/cli, internal/config, internal/doctor | Split Phase 5.O umbrella rows into command-tree, auth/setup/config, management CLI, and diagnostics/log/status contracts. |
| Channel bootstrap | gateway/platforms/** | internal/channels/*, internal/gateway | Still row-backed by Phase 7 channel bootstrap rows for Signal, Matrix, Mattermost, Feishu, DingTalk SDK, QQ, and Yuanbao transport/bootstrap metadata. |
| Release and packaging | scripts/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.ai | Row-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. |
Honcho/Goncho Feature-Level Gaps
Section titled “Honcho/Goncho Feature-Level Gaps”| Gap | Upstream refs | Go target | Classification / 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.ts | internal/goncho, internal/gonchotools, future compatibility adapter | Row-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/apiserver | Still 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/instructions | internal/gonchotools, internal/plugins, internal/tools | Complete 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, tests | cmd/gormes goncho, internal/config, internal/doctor | Row-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.example | cmd/gormes, internal/config, internal/doctor, release docs | Owned/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 invariants | src/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, migrations | internal/goncho, internal/persistence/store, internal/memory, internal/persistence/session | Row-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 lifecycle | src/deriver/queue_manager.py, src/deriver/**, src/reconciler/** | internal/goncho, internal/automation/cron, internal/doctor | Still 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 tree | src/crud/representation.py, src/crud/document.py, src/deriver/**, migrations | internal/goncho, internal/memory | Still 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 execution | src/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, tests | internal/goncho, internal/kernel, internal/automation/cron | Still 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, telemetry | src/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/goncho | key 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 divergence | src/vector_store/**, src/reconciler/** | internal/memory, internal/persistence/store | Complete 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 drift | internal/gonchotools/honcho_tools.go, internal/goncho/types.go | internal/gonchotools | mapped-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.py | internal/goncho/compat, internal/config | still 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_*.json | internal/config.GonchoCfg, internal/goncho.Config | mapped-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 engine | still 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 examples | mapped-by-contract; import representative fixture examples before claiming guide-level compatibility. |
| Honcho live LLM tests | ../honcho/tests/live_llm/** | fake/local LLM fixtures only | excluded for live-provider execution; any behavior needed by Gormes must move through hermetic ../honcho/tests/llm/** fixtures. |
Required Next Planning Gates
Section titled “Required Next Planning Gates”The map can only be called feature-complete after these gates pass:
- Source-class ledger test passes.
- Swarm gap register contains no
missingorvagueentry without a builder-ready row. - All feature-derived rows have
source_refs,write_scope,test_commandsorno_test_required, acceptance, and done signal. - Rows with intentionally different Go behavior state
ownedorexcludedand name the replacement test. - A focused docs test checks selected nested source classes, not only top-level directories.
Update Rules
Section titled “Update Rules”- 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
ownedorexcludedwith 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.
Per-Pass Audit Index
Section titled “Per-Pass Audit Index”| Pass date | Form | Notes |
|---|---|---|
| 2026-04-29 | Four-lane operator dogfood | Added 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-27 | Seven-agent | First 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-28 | Five-lane | Lane-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.
2026-04-27 Builder-Ready Row Candidates
Section titled “2026-04-27 Builder-Ready Row Candidates”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 name | Phase anchor | Go target | Test command (focused) | Status |
|---|---|---|---|---|---|
| 1 | Provider transport interface + stream fixture harness | 4.A | internal/llm.ProviderTransport + transcript fixtures across Anthropic/Bedrock/Codex/Chat-Completions | go test ./internal/llm -run ProviderTransport -count=1 | shipped 2026-04-28 (Phase 4.A row complete) |
| 2 | Moonshot/Kimi tool-schema sanitizer | 4.A | internal/llm/moonshot_schema*.go | go test ./internal/llm -run Moonshot -count=1 | shipped 2026-04-28 (Phase 4.A row complete) |
| 3 | Trajectory compressor + compressed-evidence lineage | 4.E | internal/persistence/transcript/trajectory_compressor*.go, internal/audit/trajectory_link.go | go test ./internal/persistence/transcript -run TrajectoryCompressor -count=1 | shipped 2026-04-28 (Phase 4.E row complete) |
| 4 | Context references stable-handle store | 4.B | internal/llm/context_references*.go, internal/contextrefs/refs.go, internal/persistence/transcript/refs.go | go test ./internal/llm -run ContextReferences -count=1 | shipped 2026-04-28 (Phase 4.B row complete; parser + pending handle store only, live expansion remains row-backed) |
| 5 | Goncho keys + webhooks compatibility surface | 3.G | internal/goncho/{keys,webhooks}*.go; HTTP route binding remains row-backed under the OpenAPI route parity slice | go test ./internal/goncho -run Keys -count=1, go test ./internal/goncho -run Webhooks -count=1 | shipped 2026-04-28 (Phase 3.G row complete; internal key/webhook surface only, HTTP route binding and delivery workers remain row-backed) |
| 6 | Goncho MCP tool catalog | 5.G | internal/gonchotools/honcho_mcp_catalog*.go | go test ./internal/gonchotools -run HonchoMCPCatalog -count=1 | shipped 2026-04-28 (Phase 5.G row complete) |
| 7 | Goncho HTTP route parity over OpenAPI v3 | 3.G/5.Q | internal/goncho/http/* | go test ./internal/goncho/http -count=1 | shipped 2026-04-28 (Phase 3.G row complete; OpenAPI route manifest and unsupported-route contract only, handler binding remains row-backed) |
| 8 | Goncho CLI command-tree parity | 3.G/5.O | cmd/gormes/goncho*.go, cmd/gormes/goncho_cli_parity_test.go | go test ./cmd/gormes -run GonchoCLIParity -count=1 | shipped 2026-04-28 (Phase 3.G row complete; command-tree manifest only, functional command execution remains row-backed) |
| 9 | Goncho CRUD lifecycle invariants | 3.F | internal/goncho/crud_invariants_test.go, internal/goncho/sql.go | go test ./internal/goncho -run CRUDInvariants -count=1 | shipped 2026-04-28 (Phase 3.F row complete; local SQLite lifecycle invariants only) |
| 10 | Vector store + reconciler divergence proof | 3.D/3.G | internal/memory/divergence_test.go, internal/memory/vector_divergence.go | go test ./internal/memory -run Divergence -count=1 | shipped 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.