CanonicalizeLinks silently leaves wing:/wiki/-prefixed wikilinks broken instead of repairing them #87
Closed
opened 2026-07-26 21:12:24 +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#87
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.
Problem
4 wikilinks have a literal path-root prefix baked into the target text instead of a clean slug:
wiki/homelab/failures/act-runner-host-mode-container-needs-node-and-libatomic.md→[[wing:homelab/failures/rootless-buildah-act-runner-run-containers-denied]][[wing:homelab/failures/act-runner-host-executor-tmp-persists]]wiki/agentsquad/hypotheses/council-consolidation-standalone-deliberation-service.md→[[wiki/agentsquad/decisions/autoresearch-council-sibling-pipe]][[wiki/agentsquad/facts/llm-council-design-and-first-runs-2026-06-21]]Both targets resolve correctly once the
wing:/wiki/prefix is stripped — the underlying notes exist.Where it lives
ingestion/internal/pipeline/links.go,CanonicalizeLinks/canonicalizeContent.plainLinkREmatches any[[...]]without a pipe, including these path-prefixed forms, and treats the whole string as a "display name" to look up intitleToSlug(built from note titles, not paths). Lookup fails, it emits an "unknown wikilink" warning and leaves the malformed link untouched — so however the LLM extraction step originally produced a path-style link (likely a schema/prompt slip, not this function), this canonicalization pass has no path to actually repair it.Scope
Before falling back to the title-lookup path, detect and strip a leading
wing:orwiki/(or any known root prefix) from the bracket content, and try resolving the remainder as a path-stylewing/hall/slugorhall/slugtarget directly (same resolution style the audit tooling in brain-gardener already uses perknowledge/brain-graph-key-by-path-not-basename-slug.md). Also worth checkingBuildPrompt's schema instructions — if the LLM is told exact link syntax and still produces prefixed forms, the schema/prompt may need tightening too.Scope (repair)
Fix the 4 existing links to clean
hall/slugform once the normalizer handles this case.Acceptance criteria
Fixed in hyperguild@6d014c1.
canonicalizeContentnow strips a knownwing:/wiki/root prefix and emits the clean path-style target directly when the title-lookup fails (path-style targets never match a title, so they always fell through to the unknown-wikilink warning before). Regression tests cover both prefix shapes; confirmed title-lookup still takes priority for normal display-name links.Repaired the 4 known-broken links in
mathias/brain@3bcae87(confirmed all 4 targets exist before editing):wing:homelab/failures/rootless-buildah-act-runner-run-containers-denied→homelab/failures/rootless-buildah-act-runner-run-containers-deniedwing:homelab/failures/act-runner-host-executor-tmp-persists→homelab/failures/act-runner-host-executor-tmp-persistswiki/agentsquad/decisions/autoresearch-council-sibling-pipe→agentsquad/decisions/autoresearch-council-sibling-pipewiki/agentsquad/facts/llm-council-design-and-first-runs-2026-06-21→agentsquad/facts/llm-council-design-and-first-runs-2026-06-21