capture #49f: central relay + I2 security-baseline ledger entry (non-library harnesses) #55
Closed
opened 2026-06-22 20:28:06 +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#55
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.
Parent: #49 · Spec:
specs/capture-bdd-spec.md§2 (I2), §4.3 · Depends on: #53 (REST adapter), #54 (audit path) · The last sub-issue — heaviest security reviewScope
The central relay that lets harnesses which can't run the use-case library in-process (claude.ai Chat/Cowork/Design, Crush, Pi, LLM Council) reach capture — plus the mandatory I2 security-baseline ledger entry that must land before the relay ships. Split from the audit path (#54) deliberately so direct-REST capture (CLI/Agentsquad) works end-to-end first; this issue takes on the relay's concentration-risk review separately.
Why this is gated, not free (the I2 tension)
Per
brain/wiki/homelab/decisions/no-centralized-cross-harness-observer-2026-06-17, a standing node with cross-harness reach is exactly the high-degree concentration Zero Trust / sovereign-containment is suspicious of. The relay is admissible only as: thin, no standing visibility, retains nothing beyond the I5 audit log, each call carrying the caller's own principal — AND only once its cross-harness reach is entered in the acceptance ledger. The ledger entry is a precondition of shipping, not documentation-after.What to build
infra/docs/security-baseline.mdwith: what's accepted, why, the containment properties (thin/stateless/audit-only/per-principal), and a concrete "Revisit if" trigger. This lands and is reviewed before any relay code shers.CaptureService. No standing state; no retention beyond the I5 audit path (#54).infra/k3s/apps/**, Flux-reconciled. No untracked runtime.Acceptance criteria
infra/docs/security-baseline.mdledger entry merged and reviewed BEFORE relay code ships (Why-accepted / containment props / Revisit-if)infra/k3s/apps/**(I3), Flux-reconciledtask checkgreen; secret-handling respectedNotes
This closes the loop on "uniform across ALL harnesses" — without it, capture works from CLI/Agentsquad but not from claude.ai chat. It's last because it carries the most security weight (the I2 concentration acceptance) and depends on the audit path being solid first. Do NOT ship the relay before its ledger entry is merged.
I2 ledger entry drafted — infra PR #151 (the shipping gate)
PR: mathias/infra#151 →
mathias/infradocs/security-baseline.md.Per this issue's gating rule, the relay's cross-harness reach is entered in the acceptance ledger before any relay code. The entry records it as a bounded doorway (not the standing observer the 2026-06-17 decision rejected), with six containment properties — all must hold or the acceptance voids:
Held for review — not auto-merged. Relay code (steps 2–4 of this issue) does not start until #151 merges.
Build constraints #151 pins on the relay
<brain>/.audit-buffer/) needs a persistent volume in the manifest, else durable-across-restart breaks on pod reschedule.Relay implemented — two PRs open (neither auto-merged)
capturetool)Relay = MCP
capturetool (decided shape): claude.ai/Crush/Pi/LLM Council reach it via the existing/mcpOAuth connector. Thin forwarder to the sameCaptureService; no state, audit-only retention — the six I2 containment properties hold by construction.ServeHTTPre-derives the caller's principal from the Bearer header (chassis middleware gates but discards it) → tool resolves origin from it.OAuth path for claude.ai (AC): the existing Dex/
oauth/tokenconnector — the tool rides it, no new code. claude.ai's subject → us-nexus (not inBRAIN_CAPTURE_SOVEREIGN_PRINCIPALS).I3 manifest (#152): new
gitea-api-tokenExternalSecret +BRAIN_GITEA_TOKEN/BRAIN_LOKI_URLenv. Audit buffer needs no PV — it's on the brain hostPath, nodeSelector-pinned to koala, so it survives restart (corrects my #54 note).Gating
DMABE_GITEA_API_TOKEN).capturetool goes live on the claude.ai connector.After both merge: capture is uniform across all harnesses — epic #49 complete.
Shipped — closing
Both halves merged; full GitOps chain landed:
cc223ec(image bump to the #61 SHA).main→ ingestion rolls to76514215with the capture env. ThecaptureMCP tool goes live on the claude.ai connector once the pod rolls.Tagged v0.11.0 marking the capability complete.
Closing as done — deployment converges via Flux (no manual reconcile needed).