feat(brain): cross-wing tunnels — bidirectional wikilinks between notes in different Wings #16
Closed
opened 2026-05-18 18:03:55 +00:00 by mathias
·
1 comment
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#16
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
Successor to the Tunnels portion of #2. The embedding-retrieval portion of #2 is superseded by #8 (Qdrant + nomic-embed-text), which is the project's chosen vector backend per DECISIONS.md 2026-04-08.
This issue scopes only to cross-Wing concept linking — making the same concept discoverable from any Wing it appears in, without rebuilding retrieval.
Depends on #1 (Hall taxonomy) — Wing/Hall path layout must exist for tunnels to be meaningful.
Problem
The same concept can appear in multiple Wings (e.g.
pex-copperin bothbathroom-plumbingandkoala-plumbing, orval-vol-r2in bothjepa-fxandhyperguild). Current retrieval treats Wings as isolated silos. There is no way to ask "what do I know about X across all Wings?" and get a navigable cross-Wing path.Design
A Tunnel is a bidirectional wikilink between two notes in different Wings that share a concept. Two creation paths:
Automatic — when
brain_writewrites a note withwing=A, run a lightweight concept-match pass over the new note's content against an in-memory index of existing Wing names and note titles. On exact match in Wing B, append a## See alsosection to the new note with a wikilink to the matched note in Wing B, and append a reciprocal link to that note.Manual — new MCP tool
brain_tunneltakingsource(wing/hall/slug) andtarget(wing/hall/slug) writes the bidirectional link explicitly.Tunnels are plain Obsidian wikilinks (
[[wing-b/hall/slug]]) — no special syntax, no database. Obsidian's graph view shows cross-wing edges naturally.Fuzzy auto-matches (not exact) land in
brain/raw/tunnel-candidates-<date>.mdfor human review, never written automatically.Implementation
ingestion/internal/brain/tunnel.goNew MCP tool:
brain_tunnelAuto-tunnel hook in
brain_writeAfter every
brain_writewithwing+hall, runDetectTunnelsover the new content. Exact title matches → write bidirectional link. Fuzzy candidates → append tobrain/raw/tunnel-candidates-<YYYY-MM-DD>.md.Acceptance criteria
brain_tunnel source=jepa-fx/decisions/val-vol-r2 target=hyperguild/decisions/routing-floorwrites wikilinks in both files and is idempotent on second callbrain_writecreates a link when an exact Wing/note title match is found in contentbrain/raw/tunnel-candidates-<date>.md, not written automaticallytask checkpassesOut of scope
Dependencies
Shipped in
ddd07ae. TDD all the way: each helper landed RED → GREEN with regression tests.Acceptance criteria
brain_tunnel source=jepa-fx/decisions/val-vol target=hyperguild/decisions/routingwrites wikilinks in both files; re-call is a no-op (idempotency test asserts link count = 1 after 3 calls)brain_writecreates a link when an exact wing/note-title match is found in content (TestBrainWriteAutoTunnelsOnExactMatch)TestBrainWriteAutoTunnelSkipsSameWing)brain/raw/tunnel-candidates-<date>.md, not written automatically (TestAutoTunnel_FuzzyGoesToCandidatesFile)[[wing/hall/slug]]wikilinks under## See alsotask checkgreenSurface added
MCP additions:
brain_tunnel(source, target)— manual cross-wing linkbrain_writewith wing+hall now runsAutoTunnelafter the writeSlug-fallback titles humanise (
widget-flags→widget flags) so titleless notes still participate in matching.Live deploy
CI/CD picks up
ddd07aeautomatically. Live brain MCP will expose the new tool after the routing-pod-style ingestion image rebuild lands in infra.Closing.