feat(brain): cross-wing tunnels — bidirectional wikilinks between notes in different Wings #16
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
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.