Consolidate to single harness: pin regressions, icebox cmd/routing, confirm hyperguild-alone is sufficient #75
Closed
opened 2026-07-01 11:12:37 +00:00 by mathias
·
3 comments
No Branch/Tag Specified
main
fix/pipeline-writes-158
fix/edit-path-io-192
fix/create-regular-188
fix/guard-special-179
fix/linkcheck-keeps-write-178
fix/write-dir-redirect-173
fix/tunnel-detect-174
fix/pipeline-root-157
w3/154-mcp-auth-wiring
fix/tunnel-traversal
test/in-brain-targets-171
fix/brain-scan-root-157
fix/graph-wiki-root-157
fix/vectorstore-root-157
fix/notes-root-157
fix/search-root-157
fix/brainwide-root-157
fix/raw-symlinks-153
feat/symlink-tripwire-157
fix/rest-auth-149
fix/123-brain-edit-envelope-check
feat/106-page-aware-extraction
fix/105-source-drift-on-main
fix/104-surface-merge-conflicts-on-main
agent/b1-compile-on-ingest
agent/104-surface-merge-conflicts
agent/105-source-drift
agent/107-loud-unconfigured-alerting
feat/brain-read-edit
fix/capture-i1-refusal-names-target
renovate/configure
feat/consolidate-single-harness
icebox/cmd-routing
feat/brain-pending-promote
fix/close-session-classification-refresh
fix/capture-summarywriter
v0.24.0
v0.23.1
v0.23.0
v0.22.0
v0.21.1
v0.21.0
v0.20.1
v0.20.0
v0.19.1
v0.19.0
v0.18.4
v0.18.3
v0.18.2
v0.18.1
v0.18.0
v0.17.0
v0.16.1
v0.16.0
v0.15.0
v0.14.0
v0.13.2
v0.13.1
v0.13.0
v0.12.1
v0.12.0
v0.11.2
icebox/cmd-routing-2026-07-01
v0.11.1
v0.11.0
v0.10.0
v0.9.0
v0.8.0
v0.7.0
v0.6.0
v0.5.0
v0.4.1
v0.4.0
v0.3.0
v0.2.0
v0.1.0
Labels
Clear labels
agent/ready
blocked/client
blocked/supplier
blocked/upstream
risk/high
risk/low
risk/medium
size/l
size/m
size/s
size/xs
status:dispatch
status:dispatched
status:review
status:reviewing
type/chore
type/decision
type/docs
type/feat
type/fix
type/ops
type/research
type/test
Meets the agent-ready contract; authorizes unattended execution
Waiting on the client
Waiting on a supplier
Waiting on an upstream project or vendor
Irreversible, security-relevant, or control plane
Reversible, local, test-covered
Touches shared state, deploys or data
Too big - split it
Under two days
Under half a day
Under an hour
Maintenance, no behaviour change
Human decision required; never agent/ready
Documentation only
New capability
Corrects broken behaviour
Infrastructure, deploy, runtime
Investigate; output is a finding, not code
Test coverage only
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: mathias/hyperguild#75
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Context
Mathias decided: consolidate to one harness (icebox agentsquad + Crush; see infra#170/#171-era loop-economics work). hyperguild is the harness — it's the only one with demonstrated loop-1 closure (infra#170, PR #16/#17) and already carries the two invariants that must survive: brain (vault/intellectual capital) and Gitea (audit trail). GitOps/OIDC stays the ops platform for everything built (
.gitea/workflows/cd.ymlalready exists).This issue is analysis-informed, not a guess. Read before executing:
What's already true (verified by reading the repo, not assumed)
cmd/hyperguild(tier probe,brain query/write,.mcp.jsonmode bootstrap) has zero import ofinternal/routing. It is already minimal and already separate..mcp.json(what an actual Claude Code session connects to) wires onlybrain-mcp. No routing pod, no gitea-mcp even listed here. This is exactly the config the infra#170 loop-1 experiment ran under — routing/brain-injection-machinery off, and it closed twice.cmd/routingis a separate binary bundling two different things:internal/routing(Router/Fetcher/Policy/pass-rate) — the broken part. infra#174 found this signal is survivorship-biased and unusable for routing as-is.review/debug/retrospective/traineras tools +project_create(Gitea project scaffolding), viainternal/skills/{review,debug,retrospective,trainer,project}. Every one of these skill calls is wrapped through the broken router (wrap(skillName)incmd/routing/main.go) — so today they are not independently usable; they're entangled with the broken part.cmd/supervisordoes not exist in the current tree. A comment incmd/routing/main.goreferences "Plan 7 (supervisor retirement)" as a completed prior migration — historical, not a live constraint. No fourth binary to reconcile.cmd/hyperguildandingestion/have extensive existing_test.gocoverage (nearly 1:1 file-to-test ratio) — this is real, not something to build from scratch.The conclusion this analysis supports
The live minimal harness already exists:
cmd/hyperguild+ brain-mcp + gitea-mcp (external, not in.mcp.jsontoday but available). This is what ran the loop-1 experiment.cmd/routingin its entirety — including the skill-as-MCP-tool wiring — is dormant from the live session's perspective and entangled with the broken pass-rate signal. The clean move is not surgical extraction; it's confirmcmd/hyperguildis sufficient → iceboxcmd/routingwhole → keepingestion/(brain vault machinery, separately verify) → pin regression tests before and after so nothing that's actually used breaks.Do (in order — each gates the next)
cmd/hyperguildroot module +ingestion/submodule — separatego.mods) and record green. This is the safety net; nothing proceeds past this until it's green and captured.go list -depsor equivalent) thatcmd/hyperguildgenuinely has no transitive dependency oninternal/routingorcmd/routing's packages. If it does, STOP and report — the analysis above is wrong somewhere and the plan needs revisiting before any deletion.cmd/routingin full, plusinternal/routing,internal/tier(if solely routing-consumed — verify first), andinternal/skills/{review,debug,retrospective,trainer,project}(verify these have no OTHER consumer before deleting —cmd/hyperguilddoesn't use them per step 2, but double-check nothing else does). "Icebox" = move to a clearly-marked branch/tag or anicebox/archive path, notgit rmwith no trace — this must be recoverable, not destroyed, per Mathias's "put it in an icebox" framing.ingestion/(brain vault: capture, embed, vectorstore, graph, wiki, Gitea client) — this is the durable-capital invariant. Confirm its test suite is independently green (it doesn't depend oncmd/routingeither, per the tree, but verify).cmd/routingitself — those disappearing is expected, not a regression).hyperguild brain query <q>andhyperguild mode <name>against real brain-mcp, confirm they work. Unit tests don't prove live wiring..mcp.json/ docs if needed to reflect gitea-mcp as an available (not required-but-absent) connection, since Gitea-as-audit-trail is an explicit invariant going forward.Explicitly out of scope
internal/routing's survivorship bias (that's infra#174, separately gated — routing pod stays iceboxed regardless of #174's outcome, per Mathias: fresh start, not a resurrection plan).Acceptance Criteria
cmd/hyperguildinto routing-only packages (or: coupling found, reported, plan revised before proceeding)cmd/routing+ broken-router-entangled skill packages iceboxed (recoverable, not destroyed)ingestion/(brain vault) confirmed independently green.mcp.json/docs updated if gitea-mcp needs to be added as an available connectionReport back (required)
Post a comment on this issue with:
hyperguild brain queryandhyperguild mode, not just "it worked"clean-cut / regression-found / blocked-on-<X>This is inter-agent work — report via this issue thread (not just a brain note), per the standing rule that issue comments are the surface signal the reconcile pass (infra#172) and Mathias both read.
Refs
wiki/homelab/hypotheses/loop-economics-inversion-2026-06.md(why machinery-off is the baseline to protect)wiki/homelab/decisions/agentsquad-vs-hyperguild-boundary-2026-05-28.md(prior boundary decision — now superseded by this consolidation; do not resurrect its "keep separate" conclusion)wiki/homelab/decisions/platform-premortem-findings-2026-05-29.md(originally recommended nominating hyperguild as the single measured harness — this ticket finally executes that)cmd/routing/main.goheader comment (historical "Plan 7 supervisor retirement" reference — supervisor already gone, not a live blocker)Risk: LOW-MEDIUM — deletion/relocation of unused code guarded by regression tests at each step; no production traffic depends on
cmd/routingtoday (not even wired into the live.mcp.json). Medium only because "verify no other consumer" steps require actual dependency-graph checking, not assumption.clean-cut— PR #76 (feat/consolidate-single-harness).Baseline result (before → after)
github.com/mathiasbq/supervisor)ingestion/Forced (
-count=1),go vetclean. The −7 in root = exactly the removed packages.Dependency check result — confirmed clean
go list -deps ./cmd/hyperguild→ in-module deps are onlycmd/hyperguild+internal/tier. Zero transitive dep oninternal/routingorcmd/routing's packages.internal/routingand all five skills (review/debug/retrospective/trainer/project) are imported only bycmd/routing. Leak check (any kept package importing the removal set) = empty.internal/tieris not routing-only (cmd/hyperguild+internal/skills/orguse it) → kept.What was iceboxed (recoverable, not destroyed)
Moved to tag
icebox/cmd-routing-2026-07-01+ branchicebox/cmd-routing(commit00e5f62), then removed on the feature branch:cmd/routing/,internal/routing/internal/skills/{review,debug,retrospective,trainer,project}/Dockerfile.routing.gitea/workflows/cd.ymlrouting steps (build + infra bump + Flux-wait/rollout-verify) — ingestion deploy unchangedRecovery documented in
ICEBOX.md. Kept:cmd/hyperguild,ingestion/,internal/tier,internal/skills/{brain,org,sessionlog}(per ticket; already orphaned).Regression diff — empty (no regressions)
Every package that dropped is a real deletion (7 removal-set packages); no package still on disk failed post-cut.
ingestion/byte-identical to baseline.Live smoke test result (actual output)
.mcp.json/ docs (step 7)Added gitea-mcp to
.mcp.json(Bearer${GITEA_MCP_TOKEN}) and to all threemodetemplates (audit-trail invariant); removed the client-localroutingentry. Tests + CLI README updated.⚠️ Out-of-repo follow-up (flagged, not done here)
The live k8s routing deployment (
infrak3s/apps/routing/) still runs its last image — CD no longer rebuilds/redeploys it, but the pod is not torn down. That's a separate infra-repo task. Not closing anything on that count; this repo-side cut is clean.Follow-up filed: infra#176
The out-of-repo item flagged above — tearing down the still-running k8s routing deployment — is now tracked as infra#176 (
Tear down k3s routing deployment — cmd/routing iceboxed). It's self-contained (no other estate app referencesrouting.svc/ NodePort 30310): removek3s/apps/routing/+ the- routingline from the apps kustomization, thenflux reconcileprunes the namespace. That ticket also notes it supersedes the live-deploy portion of #35 (the qwen36 koala llama-swap slot itself is unaffected and stays). This repo-side cut (PR #76) staysclean-cutand independent of that infra teardown.Verdict: clean-cut
This was actually executed via PR #76 (merged) during a concurrent CAD burst on 2026-08-18, but the required report-back was never posted here — filing it now after independently re-verifying every acceptance box against the live
maincheckout (055af36), not trusting the merge alone.Baseline result (post-cut, verified live 2026-08-19):
cmd/hyperguildroot module:go build ./...clean,go test ./...— 14/14 packages pass.ingestion/submodule:go build ./...clean,go test ./...— 29/29 packages pass (2 have no test files:frontmatterlint,graphstore).Dependency check result: confirmed clean —
go list -deps ./cmd/hyperguild/...shows zero import ofinternal/routingor anycmd/routingpackage.What was iceboxed:
cmd/routing/,internal/routing/,internal/skills/{review,debug,retrospective,trainer,project}/,Dockerfile.routing, plus the routing steps of.gitea/workflows/cd.yml. Preserved at commit00e5f62, recoverable via tagicebox/cmd-routing-2026-07-01and branchicebox/cmd-routing— documented inICEBOX.mdwith exact restore commands. Not destroyed.Regression diff: empty — nothing failed post-cut that passed pre-cut.
Live smoke test result:
Both commands hit real brain-mcp and real validation logic —
modecorrectly refused to clobber the existing config rather than silently overwriting..mcp.jsonconfirmed updated:gitea-mcp(https://git-mcp.d-ma.be/mcp) now listed alongsidebrain-mcp, satisfying step 7.Closing — every acceptance box holds.