capture: populate classification.yaml at brain root (untagged repos fail-safe to confidential, block claude.ai capture) #67
Closed
opened 2026-06-23 08:39:47 +00:00 by mathias
·
2 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
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#67
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.
Symptom
Sibling to #66, surfaced in the same 2026-06-23 capture dogfood. The classification mechanism shipped in #50/#56 (server reads an optional
classification.yamlat brain root;defaultFor()returnsinternalforhyperguild/homelab,confidentialforclient-*, andconfidentialfail-safe for anything untagged). But noclassification.yamlhas ever been written, so onlydefaultFor()governs.Consequence: every brain wing / gitea repo except
hyperguildandhomelabresolves to confidential, and since effective classification = strictest across all capture targets, a capture from claude.ai (us-nexus) that touches any other repo (brain,ai-sessions,infra,tapir, …) is refused by the I1 gate. This is technically correct (fail-safe), but it means capture is unusable from claude.ai for most real sessions until the homelab-internal repos are explicitly tagged.What to do
Create
classification.yamlat the brain repo root, explicitly tagging the homelab-internal repos and wings asinternalso they stop fail-safing to confidential. Confirm the exact schema against the #56 loader (Load/classificationForiningestion/internal/classification/), but it is awings:+repos:map of name → level.Tag as internal (homelab-sovereign, non-client): the homelab repos —
brain,ai-sessions,infra,hyperguild,homelab,tapir,agentsquad,jepa-fx-risk,swedsl, and the other non-client mathias/* repos. Leave anyclient-*work to defaultconfidential. Treat genuinely public repos (if any) aspublic.Important — this is a classification policy artifact, not a code change. It declares which repos are safe to handle through us-nexus harnesses (claude.ai). That is a sovereignty/trust-zone decision (I1) and should be reviewed deliberately, not auto-generated. Mathias should eyeball the final repo→level map before it merges. When in doubt, leave untagged (fail-safe confidential) rather than tag permissively.
Acceptance
classification.yamlat brain root, schema matching the #56 loaderinternal;client-*left to default confidentialai-sessions+hyperguildresolvesinternaland is NOT refusedRelated
wiki/hyperguild/failures/first-live-dogfood-of-braincapture-surfaced-two-real-operat.md(the finding)Drafted — brain PR #12 (held for your sovereignty review)
classification.yamlat themathias/brainroot (whereclassification.Loadreads it). Schema matches the #56 loader (wings:/repos:→ level).Tagged
internal(from the dispatch's list, nothing beyond it):hyperguild,homelabbrain,ai-sessions,infra,hyperguild,homelab,tapir,agentsquad,jepa-fx-risk,swedslclient-*left absent → confidential by default; fail-safe preserved for anything untagged.STOP point — this is yours to confirm: the repo→level map is a sovereignty/trust-zone decision (which repos are safe through us-nexus). I drafted; review every entry before merging #12. When you were unsure I left it out.
Load path (acceptance Q): read once at startup, not per-request → after merge +
brain-syncto the koala hostPath, the ingestion pod must restart/roll to pick it up.Re-verified live state before scheduling this in a brain-quality sweep sprint (SG1): already resolved.
classification.yamlexists at the brain repo root (mathias/brain), 103 lines, populated per this issue's acceptance criteria —wings:/repos:map, homelab-internal repos taggedinternal,client-*left untagged (fail-safe confidential), each addition carries a reviewed-by/ratified note.ad97fdeeis this issue's own commit — landed 2026-06-23, never closed here. Closing now with the live-file check as evidence.Created via git-mcp on behalf of @mathias