2025-10-14 - 2026-10-14
Overview
40 Releases published by 1 user
Published
v0.24.0
Published
v0.23.1
Published
v0.23.0
Published
v0.22.0
Published
v0.21.1
Published
v0.21.0
Published
v0.20.1
Published
v0.20.0
Published
v0.19.1
Published
v0.19.0
Published
v0.18.4
Published
v0.18.3
Published
v0.18.2
Published
v0.18.1
Published
v0.18.0
Published
v0.17.0
Published
v0.16.1
Published
v0.16.0
Published
v0.15.0
Published
v0.14.0
Published
v0.13.2
Published
v0.13.1
Published
v0.13.0
Published
v0.12.1
Published
v0.12.0
Published
v0.11.2
Published
icebox/cmd-routing-2026-07-01
Published
v0.11.1
Published
v0.11.0
Published
v0.10.0
Published
v0.9.0
Published
v0.8.0
Published
v0.7.0
Published
v0.6.0
Published
v0.5.0
Published
v0.4.1
Published
v0.4.0
Published
v0.3.0
Published
v0.2.0
Published
v0.1.0
55 Pull requests merged by 1 user
Merged
#201 chore(context): restore the root rules in AGENTS.md and system-prompt.txt (#200)
Merged
#189 fix: creating and generated writes go through the brain root (#188, #158 part A)
Merged
#191 fix(linkcheck): keep the write when the link index cannot be built (#178)
Merged
#190 fix(symlinkguard): report and remove FIFOs, sockets and devices too (#179)
Merged
#187 fix(brainfs): refuse a file behind a symlinked directory for reads and writes (#173)
Merged
#186 fix(tunnel): DetectTunnels walks and reads through brainfs (#174, #157 slice 5b)
Merged
#172 test(brainfs): per-caller in-brain symlink targets for slices 1-3 (#171)
Merged
#176 fix(pipeline,classification): read the brain through brainfs (#157, slice 6)
Merged
#170 fix: brain_tunnel, brain_update and session_log confine caller-supplied paths (#169)
Merged
#183 fix(ingestion): build /mcp's bearer and the metrics wrap inside buildMux (#154)
Merged
#180 fix(symlinkguard): deliver alerts beside the scan, not inside it (#164)
Merged
#181 fix(ingestion): bump mcp-chassis to v0.7.1; label refused REST requests by route (#155)
Merged
#175 fix(brain): wing indexes and the link check read through brainfs (#157, slice 5a)
Merged
#168 fix(graph,wiki): read the brain through brainfs (#157, slice 4)
Merged
#166 fix(vectorstore): walk and read the brain through brainfs (#157, slice 3)
Merged
#165 fix(brain): context, brain_get and brain_read read through brainfs (#157, slice 2)
Merged
#161 fix(search): walk and read the brain through an os.Root (#157, slice 1)
Merged
#160 feat(ingestion): runtime symlink tripwire removes what it finds, 30s scans (#157)
Merged
#156 fix(ingestion): brain/raw/ readers go through an os.Root; symlinks are inert (#153)
Merged
#159 feat(ingestion): symlink tripwire for the Syncthing-shared brain dir (#157)
Merged
#152 fix(ingestion): authenticate the REST API; confine ingest paths to brain/raw/ (#149)
Merged
#147 feat(brain): tool-call audit log (#144) + server-owned write provenance (#145)
Merged
#139 fix(frontmatter): consolidate 3 independent fence-parsers into one
Merged
#140 feat(server): say at startup when alerting is unconfigured (#107)
Merged
#136 fix(mcp): validate the claim envelope before brain_edit writes too
Merged
#137 fix(api): UpdateNote reserves updated_at/supersedes/supersede_reason from the caller's fragment
Merged
#135 fix(api): frontmatter parser must not misparse indented list items as keys
Merged
#133 feat(brain): add brain_reject — the missing third option for raw/ notes
Merged
#132 feat(pipeline): feed the current source page into the extraction prompt (#106)
Merged
#131 chore(brain): remove brain_write legacy params domain/type/knowledge-path (ADR-0012)
Merged
#129 feat(pipeline): report when a re-ingest disagrees with the page on disk (#104)
Merged
#126 feat(pipeline): skip extraction when the source has not changed (#105)
Merged
#103 feat(pipeline): ingest revises the existing page instead of clobbering it
Merged
#124 Brain-quality sweep, batch 1: brain_edit/brain_update correctness + close-session docs
Merged
#121 fix(taskfile): remove build targets for binaries deleted months ago, and make check build
Merged
#119 fix(config): delete the model-routing chain — nothing has called it since April
Merged
#102 feat(brain): validate the claim-property envelope on write (brain#21)
Merged
#99 docs: name brain-mcp and say where its code lives (#94)
Merged
#98 feat(mcp): record and alert on a governance-file rewrite (#97)
Merged
#96 feat(mcp): brain_read + brain_edit, contained to the sync source (brain#4)
Merged
#95 fix(capture): name what escalated the classification in an I1 refusal (#91 part 1)
Merged
#76 Consolidate to single harness: icebox cmd/routing, keep cmd/hyperguild + ingestion (#75)
Merged
#70 feat: brain_pending + brain_promote — close the raw→wiki curation loop (#38)
Merged
#69 docs(close-session): refresh classification gate post-#67 (#62)
Merged
#68 fix: wire ai-sessions SummaryWriter into the capture relay (#66)
Merged
#61 feat: capture relay — MCP capture tool for non-library harnesses (#55, capture 49f)
Merged
#60 feat: I5 audit path + classification-aware degradation (#54, capture 49e)
Merged
#59 feat: POST /capture REST adapter + OAuth2 + I1 sovereignty gate (#53, capture 49d)
Merged
#58 feat: Gitea IssueTracker client + inject into brain server (#52, capture 49c)
Merged
#57 feat: CaptureService use-case + BrainStore extraction (#51, capture 49b)
Merged
#56 feat: capture classification taxonomy + per-wing/repo tags (#50, capture 49a)
Merged
#48 chore(context): drop unsupported cursor + aider adapters
Merged
#46 feat: brain_update supersede verb + brain_get / brain_write read-after-write handle (#45)
Merged
#4 refactor(routing): rename local/claude to fast/thinking model pair
Merged
#3 chore(mcp): switch MCP endpoints to HTTPS domain URLs
3 Pull requests proposed by 2 users
Proposed
#92 chore: Configure Renovate
Proposed
#194 fix(brain_edit): snapshot, rollback and lock file go through the brain root (#192)
Proposed
#195 fix: pipeline, backfill, watcher and archive writes go through the brain root (#158 part B)
110 Issues closed from 2 users
Closed
#200 chore(context): restore the root rules in AGENTS.md and system-prompt.txt (project-only since 10-08)
Closed
#185 ingestion metrics: an authenticated request to an unregistered path is labelled with the raw URL path (unbounded series)
Closed
#193 symlinkguard: Watch alert-queue tests flake under -race and CPU load
Closed
#163 ntfy notifier hard-codes the title "brain-capture audit degraded" for every alert
Closed
#188 brain_write follows a symlinked wing directory, including one that points outside the brain
Closed
#178 brain_write loses the learning when any subdirectory under knowledge/ or wiki/ is unreadable
Closed
#179 symlinkguard ignores FIFOs and other special files: a planted FIFO classification.yaml crash-loops the pod
Closed
#157 SECURITY: symlinks anywhere in the Syncthing-shared brain dir are followed by search, vectorstore, context and graph readers
Closed
#173 Writes follow a static intermediate in-brain directory symlink (brain_update, brain_tunnel, session_log)
Closed
#174 DetectTunnels blocks on a FIFO under wiki/, hanging brain_update and brain_write
Closed
#171 #157 slices 1–3: per-caller tests with in-brain symlink targets (search, hydrate, vectorstore, context excerpt, ReadNote)
Closed
#169 brain_tunnel: path traversal lets an MCP token holder rewrite any file the pod can write
Closed
#154 Test that /mcp authenticates through the production router; close the re-wrap gap in main.go
Closed
#164 symlinkguard: a hung ntfy delays symlink removal (alert flush runs in the scan goroutine)
Closed
#155 ingestion pins mcp-chassis v0.2.0: auth rejections aren't logged; REST metrics collapse to path="/"
Closed
#177 brainfstest: swap-race asserts can pass vacuously (no read/iteration floor, swallowed Query errors)
Closed
#83 ingestion: retry OIDC discovery instead of exiting on cold-boot 502
Closed
#43 Brain interface: intent↔interface mismatch analysis (problem statement, evidence-backed)
Closed
#162 test(ingestion): raw swap-race tests do not join the swapper goroutine; TempDir cleanup flakes CI
Closed
#153 brain/raw/ readers follow symlinks (pending, promote); raw/ is writable via Syncthing
Closed
#149 SECURITY: ingestion REST routes have no in-process auth; brain_ingest/ingest-path read any server file
Closed
#144 brain-mcp: one shared bearer for every client, no per-caller read scoping (OWASP MCP07/MCP10)
Closed
#145 brain_write is an ungated persistent prompt-injection path into every future session (OWASP MCP06)
Closed
#142 claudewatcher scrubber misses https://user:secret@host — the git credential-store shape passes every rule
Closed
#138 Consolidate the three independent frontmatter-fence parsers
Closed
#107 Say so at startup when a security-relevant alert is unconfigured, instead of skipping silently
Closed
#82 Surface aging brain/raw/ pending notes instead of relying on someone remembering to check
Closed
#101 cd.yml fails on a duplicate run: "nothing to commit" is treated as an error
Closed
#120 Procfile, Taskfile and smoke-routing.sh still invoke cmd/supervisor and cmd/routing, neither of which exists
Closed
#134 Live-triage the real brain/raw/ backlog with brain_reject (deferred from #81)
Closed
#123 Audit remaining write paths that reach disk without claim-envelope validation (brain_edit, ingestion pipeline)
Closed
#125 UpdateNote: supersede_reason settable via caller's own frontmatter fragment, bypassing the Reason option
Closed
#128 api/frontmatter.go's parseFrontmatter misparses an indented list item containing a colon as a top-level key
Closed
#81 Add brain_reject: brain/raw/ pending notes can only be promoted, never discarded
Closed
#106 Compile-on-ingest, second half: let the extraction see the page it is revising
Closed
#79 chore(brain): deprecate + remove brain_write legacy params (domain/type/knowledge-path) (ADR-0012)
Closed
#104 Contradiction flagging at ingest — reuse brain-gardener's Judge, do not build a second one
Closed
#105 Source drift: hash the ingested body, skip an unchanged re-ingest, flag a changed one
Closed
#112 close-session: teach it the claim envelope, and refresh its stale classification hint list
Closed
#115 brain_edit always fails with "old_str is empty" even when old_str is non-empty
Closed
#111 brain_update bypasses claim-envelope validation — a note can be superseded into a bad envelope
Closed
#67 capture: populate classification.yaml at brain root (untagged repos fail-safe to confidential, block claude.ai capture)
Closed
#117 ~385 auto-written See-also edges point at one-word TELOS entries — the graph's top two nodes are artifacts
Closed
#118 CD runs twice per push and the second run fails on "nothing to commit" — a red CI signal with nothing wrong
Closed
#116 config/models.yaml is not read by the deployed service, and names two models that no longer exist
Closed
#84 Consolidate brain-ingest-ntfy + brain-weekly-ingest into hyperguild/ingestion
Closed
#47 follow-up: synchronous semantic read-after-write for brain_update — DEFERRED (retro skill uses option b)
Closed
#77 mcp-chassis: validate a LIST of trusted issuers (accept k8s SA tokens) — ADR-0011
Closed
#100 The audit ntfy notifier is dark in production — BRAIN_NTFY_URL is unset on ingestion
Closed
#94 brain-mcp is unfindable by name — fix the repo description and README (from #91 part 2)
Closed
#97 brain_edit_root: alert and audit a governance-file rewrite, don't just slog it
Closed
#22 chore(brain): migrate legacy notes into wing/hall layout
Closed
#35 Validate the core hypothesis: MVP pass-rate dataset + fast-model kill-date
Closed
#34 chore: gate #25 and #29 on routing bootstrap + fast-model validation (30-day hold)
Closed
#32 chore: verify brain injection wired in all four routing skill handlers
Closed
#31 fix: connect routing-mcp to claude.ai as custom MCP connector (project_create gap)
Closed
#75 Consolidate to single harness: pin regressions, icebox cmd/routing, confirm hyperguild-alone is sufficient
Closed
#65 chore: prune merged feature branches (hyperguild + infra)
Closed
#39 chore: add brain tunnel between gitea-mcp/failures and hyperguild/decisions notes
Closed
#33 chore: track crush.json in dotfiles repo
Closed
#91 brain-mcp: capture with a tickets array fails; decide whether it graduates to its own repo (from infra#265)
Closed
#93 wiki/index.md contains a truncated UTF-8 sequence — the index writer cuts mid-character
Closed
#78 chore(brain): de-surface brain_index from the model-facing MCP toolset (ADR-0012 rule 4)
Closed
#90 wiki notes with unquoted colon in title: produce invalid YAML frontmatter (8 files found)
Closed
#89 Sprint 1: unblock deploy + stop ingestion data corruption
Closed
#88 Extraction/canonicalization mass-attaches spurious [[mission]] link to unrelated tunnel-candidates notes
Closed
#87 CanonicalizeLinks silently leaves wing:/wiki/-prefixed wikilinks broken instead of repairing them
Closed
#86 writeHallNote stacks a second frontmatter block instead of merging (75 wiki notes affected)
Closed
#85 Extraction pipeline drops source/author/published frontmatter (46/46 wiki/sources notes affected)
Closed
#72 Routing pod: HYPERGUILD_CLAUDE_MODEL is a dead env key — thinking tier runs on default (offline iguana/gemma4-26b)
Closed
#42 chore: move Go module path from github.com/mathiasbq/supervisor → git.d-ma.be/mathias/hyperguild
Closed
#74 CD broken since gitea.d-ma.be→git.d-ma.be rename: ingestion build fails go mod download on mcp-chassis module path
Closed
#73 P0: routing pod pass-rate instrumentation is broken 3 ways — #35 data gate is unsatisfiable as-coded
Closed
#38 feat: brain_pending and brain_promote — close the curation loop for raw → wiki promotion
Closed
#62 capture follow-up: close-session SKILL veneer over the capture tool
Closed
#66 bug: capture relay has no SummaryWriter wired — summary silently fails (ai-sessions path)
Closed
#49 feat: uniform capture capability — REST+OAuth2 spine for session insight/ticket capture across all harnesses
Closed
#55 capture #49f: central relay + I2 security-baseline ledger entry (non-library harnesses)
Closed
#54 capture #49e: I5 audit path + classification-aware degradation (loki + buffer + reconcile)
Closed
#53 capture #49d: POST /capture REST adapter + OAuth2 + I1 gate (server-derived origin)
Closed
#52 capture #49c: Gitea IssueTracker client (new outbound dependency)
Closed
#51 capture #49b: CaptureService use-case + BrainStore extraction + ports/entities
Closed
#50 capture #49a: classification taxonomy + per-wing/repo tagging (I1 prerequisite)
Closed
#45 feat: brain_update — supersede-by-slug write verb (+ read-after-write: brain_get, brain_write handle)
Closed
#37 feat: brain_pending + brain_promote tools — close the raw→wiki curation loop
Closed
#44 [handover] Brain-MCP intent↔interface study — agent column + merge scaffold ready for review
Closed
#30 chore(security): rotate brain_app postgres password + migrate BRAIN_PG_DSN from SOPS to 1Password via ESO
Closed
#20 chore(security): rotate brain_app postgres password — leaked in pre-fix pod logs
Closed
#27 Track E.1 — Claude Code session ingestion watcher
Closed
#28 Track E.2 — brain_context MCP tool
Closed
#26 plan-7: write + execute supervisor MCP retirement (skill surface lives in routing now)
Closed
#23 feat(brain): re-embed on file edit (Sync should respect mtime)
Closed
#21 ops(brain): register brain MCP as a custom integration in claude.ai
Closed
#17 fix: project_create — make GitHub mirror opt-in (mirror_to_github, default false)
Closed
#19 bug(brain): first embed-sync tick reports errors=1 — find which file failed
Closed
#18 chore(brain): backfill pgvector from current wiki/
Closed
#8 feat(brain): hybrid BM25+vector search via Qdrant + nomic-embed-text
Closed
#7 feat(brain): add Qwen3-Reranker to brain_answer for improved RAG quality
Closed
#5 feat(ingestion): add OAuth 2.0 client credentials flow to brain MCP server
Closed
#16 feat(brain): cross-wing tunnels — bidirectional wikilinks between notes in different Wings
Closed
#9 brain MCP: accept static Bearer without OAuth challenge for LAN/Tailscale CLI clients
Closed
#1 feat: structured brain — Hall taxonomy, Obsidian-compatible layout, and filtered query
Closed
#2 feat: brain tunnels — cross-wing concept links and embedding-based retrieval
Closed
#15 flake: TestRoutingPodEndToEnd port-wait deadline exceeded under load
Closed
#14 fix: project_create infra branch vs main + GITEA_MCP_TOKEN missing from SOPS secrets
Closed
#12 fix: set GITHUB_PAT in routing pod k8s secret to enable GitHub repo creation in project_create
Closed
#13 fix: routing pod cannot authenticate against gitea-mcp (401 on project_create)
Closed
#11 test: project_create e2e findings + improvements needed for claude.ai project initiation
Closed
#10 feat: project-webhook — HTTP endpoint to trigger new-project from claude.ai
Closed
#6 feat: JWT auth middleware + /.well-known/oauth-protected-resource for supervisor and brain MCP servers (Dex OIDC)
140 Issues created by 1 user
Opened
#1 feat: structured brain — Hall taxonomy, Obsidian-compatible layout, and filtered query
Opened
#2 feat: brain tunnels — cross-wing concept links and embedding-based retrieval
Opened
#5 feat(ingestion): add OAuth 2.0 client credentials flow to brain MCP server
Opened
#6 feat: JWT auth middleware + /.well-known/oauth-protected-resource for supervisor and brain MCP servers (Dex OIDC)
Opened
#7 feat(brain): add Qwen3-Reranker to brain_answer for improved RAG quality
Opened
#8 feat(brain): hybrid BM25+vector search via Qdrant + nomic-embed-text
Opened
#9 brain MCP: accept static Bearer without OAuth challenge for LAN/Tailscale CLI clients
Opened
#10 feat: project-webhook — HTTP endpoint to trigger new-project from claude.ai
Opened
#11 test: project_create e2e findings + improvements needed for claude.ai project initiation
Opened
#12 fix: set GITHUB_PAT in routing pod k8s secret to enable GitHub repo creation in project_create
Opened
#13 fix: routing pod cannot authenticate against gitea-mcp (401 on project_create)
Opened
#14 fix: project_create infra branch vs main + GITEA_MCP_TOKEN missing from SOPS secrets
Opened
#15 flake: TestRoutingPodEndToEnd port-wait deadline exceeded under load
Opened
#16 feat(brain): cross-wing tunnels — bidirectional wikilinks between notes in different Wings
Opened
#17 fix: project_create — make GitHub mirror opt-in (mirror_to_github, default false)
Opened
#18 chore(brain): backfill pgvector from current wiki/
Opened
#19 bug(brain): first embed-sync tick reports errors=1 — find which file failed
Opened
#20 chore(security): rotate brain_app postgres password — leaked in pre-fix pod logs
Opened
#21 ops(brain): register brain MCP as a custom integration in claude.ai
Opened
#22 chore(brain): migrate legacy notes into wing/hall layout
Opened
#23 feat(brain): re-embed on file edit (Sync should respect mtime)
Opened
#24 chore: reduce context burn from skill listing — adopt lazy skill-index pattern
Opened
#25 skills(platform): major overhaul — succinct + brain-backed + lazy + reconsider MCP-vs-CLI
Opened
#26 plan-7: write + execute supervisor MCP retirement (skill surface lives in routing now)
Opened
#27 Track E.1 — Claude Code session ingestion watcher
Opened
#28 Track E.2 — brain_context MCP tool
Opened
#29 Track E.3 — skill-from-session generator (BLOCKED on E.1)
Opened
#30 chore(security): rotate brain_app postgres password + migrate BRAIN_PG_DSN from SOPS to 1Password via ESO
Opened
#31 fix: connect routing-mcp to claude.ai as custom MCP connector (project_create gap)
Opened
#32 chore: verify brain injection wired in all four routing skill handlers
Opened
#33 chore: track crush.json in dotfiles repo
Opened
#34 chore: gate #25 and #29 on routing bootstrap + fast-model validation (30-day hold)
Opened
#35 Validate the core hypothesis: MVP pass-rate dataset + fast-model kill-date
Opened
#36 adr: define stable agent platform interface contract (execute / getEvents / emitEvent / wake / provision)
Opened
#37 feat: brain_pending + brain_promote tools — close the raw→wiki curation loop
Opened
#38 feat: brain_pending and brain_promote — close the curation loop for raw → wiki promotion
Opened
#39 chore: add brain tunnel between gitea-mcp/failures and hyperguild/decisions notes
Opened
#40 langgen: generate LANGUAGE.md from brain glossary at session start (Phase 2 — GATED)
Opened
#41 Caveman declarations in ntfy approval messages for HIGH/CRITICAL ops (Phase 3 — GATED)
Opened
#42 chore: move Go module path from github.com/mathiasbq/supervisor → git.d-ma.be/mathias/hyperguild
Opened
#43 Brain interface: intent↔interface mismatch analysis (problem statement, evidence-backed)
Opened
#44 [handover] Brain-MCP intent↔interface study — agent column + merge scaffold ready for review
Opened
#45 feat: brain_update — supersede-by-slug write verb (+ read-after-write: brain_get, brain_write handle)
Opened
#47 follow-up: synchronous semantic read-after-write for brain_update — DEFERRED (retro skill uses option b)
Opened
#49 feat: uniform capture capability — REST+OAuth2 spine for session insight/ticket capture across all harnesses
Opened
#50 capture #49a: classification taxonomy + per-wing/repo tagging (I1 prerequisite)
Opened
#51 capture #49b: CaptureService use-case + BrainStore extraction + ports/entities
Opened
#52 capture #49c: Gitea IssueTracker client (new outbound dependency)
Opened
#53 capture #49d: POST /capture REST adapter + OAuth2 + I1 gate (server-derived origin)
Opened
#54 capture #49e: I5 audit path + classification-aware degradation (loki + buffer + reconcile)
Opened
#55 capture #49f: central relay + I2 security-baseline ledger entry (non-library harnesses)
Opened
#62 capture follow-up: close-session SKILL veneer over the capture tool
Opened
#63 capture follow-up: OAuth2 token provisioning for Crush / Pi / LLM Council
Opened
#64 capture follow-up: harvest adapters (transcript-parse / chat-reconstruct / agent-runlog)
Opened
#65 chore: prune merged feature branches (hyperguild + infra)
Opened
#66 bug: capture relay has no SummaryWriter wired — summary silently fails (ai-sessions path)
Opened
#67 capture: populate classification.yaml at brain root (untagged repos fail-safe to confidential, block claude.ai capture)
Opened
#71 feat(brain-mcp): read-only enumeration surface over HTTP (list/get/graph) — unblocks brain-audit's real read backend
Opened
#72 Routing pod: HYPERGUILD_CLAUDE_MODEL is a dead env key — thinking tier runs on default (offline iguana/gemma4-26b)
Opened
#73 P0: routing pod pass-rate instrumentation is broken 3 ways — #35 data gate is unsatisfiable as-coded
Opened
#74 CD broken since gitea.d-ma.be→git.d-ma.be rename: ingestion build fails go mod download on mcp-chassis module path
Opened
#75 Consolidate to single harness: pin regressions, icebox cmd/routing, confirm hyperguild-alone is sufficient
Opened
#77 mcp-chassis: validate a LIST of trusted issuers (accept k8s SA tokens) — ADR-0011
Opened
#78 chore(brain): de-surface brain_index from the model-facing MCP toolset (ADR-0012 rule 4)
Opened
#79 chore(brain): deprecate + remove brain_write legacy params (domain/type/knowledge-path) (ADR-0012)
Opened
#80 design(brain): remember + recall consolidations under ADR-0009/0012 (blocked on 0009 design)
Opened
#81 Add brain_reject: brain/raw/ pending notes can only be promoted, never discarded
Opened
#82 Surface aging brain/raw/ pending notes instead of relying on someone remembering to check
Opened
#83 ingestion: retry OIDC discovery instead of exiting on cold-boot 502
Opened
#84 Consolidate brain-ingest-ntfy + brain-weekly-ingest into hyperguild/ingestion
Opened
#85 Extraction pipeline drops source/author/published frontmatter (46/46 wiki/sources notes affected)
Opened
#86 writeHallNote stacks a second frontmatter block instead of merging (75 wiki notes affected)
Opened
#87 CanonicalizeLinks silently leaves wing:/wiki/-prefixed wikilinks broken instead of repairing them
Opened
#88 Extraction/canonicalization mass-attaches spurious [[mission]] link to unrelated tunnel-candidates notes
Opened
#89 Sprint 1: unblock deploy + stop ingestion data corruption
Opened
#90 wiki notes with unquoted colon in title: produce invalid YAML frontmatter (8 files found)
Opened
#91 brain-mcp: capture with a tickets array fails; decide whether it graduates to its own repo (from infra#265)
Opened
#93 wiki/index.md contains a truncated UTF-8 sequence — the index writer cuts mid-character
Opened
#94 brain-mcp is unfindable by name — fix the repo description and README (from #91 part 2)
Opened
#97 brain_edit_root: alert and audit a governance-file rewrite, don't just slog it
Opened
#100 The audit ntfy notifier is dark in production — BRAIN_NTFY_URL is unset on ingestion
Opened
#101 cd.yml fails on a duplicate run: "nothing to commit" is treated as an error
Opened
#104 Contradiction flagging at ingest — reuse brain-gardener's Judge, do not build a second one
Opened
#105 Source drift: hash the ingested body, skip an unchanged re-ingest, flag a changed one
Opened
#106 Compile-on-ingest, second half: let the extraction see the page it is revising
Opened
#107 Say so at startup when a security-relevant alert is unconfigured, instead of skipping silently
Opened
#111 brain_update bypasses claim-envelope validation — a note can be superseded into a bad envelope
Opened
#112 close-session: teach it the claim envelope, and refresh its stale classification hint list
Opened
#113 Semantic vs lexical retrieval — the gap ADR-0009 structured but did not close
Opened
#114 brain_answer is not trusted as a terminal answer — the fourth #43 cluster, still open
Opened
#115 brain_edit always fails with "old_str is empty" even when old_str is non-empty
Opened
#116 config/models.yaml is not read by the deployed service, and names two models that no longer exist
Opened
#117 ~385 auto-written See-also edges point at one-word TELOS entries — the graph's top two nodes are artifacts
Opened
#118 CD runs twice per push and the second run fails on "nothing to commit" — a red CI signal with nothing wrong
Opened
#120 Procfile, Taskfile and smoke-routing.sh still invoke cmd/supervisor and cmd/routing, neither of which exists
Opened
#122 Brain search requires Postgres, so there is no offline or portable path — decide whether that matters
Opened
#123 Audit remaining write paths that reach disk without claim-envelope validation (brain_edit, ingestion pipeline)
Opened
#125 UpdateNote: supersede_reason settable via caller's own frontmatter fragment, bypassing the Reason option
Opened
#128 api/frontmatter.go's parseFrontmatter misparses an indented list item containing a colon as a top-level key
Opened
#134 Live-triage the real brain/raw/ backlog with brain_reject (deferred from #81)
Opened
#138 Consolidate the three independent frontmatter-fence parsers
Opened
#141 internal/wiki/merge.go:184 is a fourth hand-rolled frontmatter-fence parser, not folded into frontmatter.Split
Opened
#142 claudewatcher scrubber misses https://user:secret@host — the git credential-store shape passes every rule
Opened
#143 url-userinfo-credential: two residual shapes still pass — secret containing "/" and the scheme-less form
Opened
#144 brain-mcp: one shared bearer for every client, no per-caller read scoping (OWASP MCP07/MCP10)
Opened
#145 brain_write is an ungated persistent prompt-injection path into every future session (OWASP MCP06)
Opened
#146 brain-mcp: per-client bearer tokens instead of one shared token (split from #144)
Opened
#148 Provenance: first-party writers (claudewatcher, pipeline) stamp origin: unknown — add an internal origin
Opened
#149 SECURITY: ingestion REST routes have no in-process auth; brain_ingest/ingest-path read any server file
Opened
#150 Provenance residuals: brain_tunnel edits without re-stamping; generated aggregates carry none
Opened
#151 provenance follow-ups: decode written_by on read; promote leaves empty dir on refusal; partial multi-page ingest
Opened
#153 brain/raw/ readers follow symlinks (pending, promote); raw/ is writable via Syncthing
Opened
#154 Test that /mcp authenticates through the production router; close the re-wrap gap in main.go
Opened
#155 ingestion pins mcp-chassis v0.2.0: auth rejections aren't logged; REST metrics collapse to path="/"
Opened
#157 SECURITY: symlinks anywhere in the Syncthing-shared brain dir are followed by search, vectorstore, context and graph readers
Opened
#158 Writes under brain/raw/ follow symlinks: processed/, rejected/, .processed markers, tunnel-candidates
Opened
#162 test(ingestion): raw swap-race tests do not join the swapper goroutine; TempDir cleanup flakes CI
Opened
#163 ntfy notifier hard-codes the title "brain-capture audit degraded" for every alert
Opened
#164 symlinkguard: a hung ntfy delays symlink removal (alert flush runs in the scan goroutine)
Opened
#167 brainfs: fd-relative walk to close the directory-swap race (accepted residual from #157)
Opened
#169 brain_tunnel: path traversal lets an MCP token holder rewrite any file the pod can write
Opened
#171 #157 slices 1–3: per-caller tests with in-brain symlink targets (search, hydrate, vectorstore, context excerpt, ReadNote)
Opened
#173 Writes follow a static intermediate in-brain directory symlink (brain_update, brain_tunnel, session_log)
Opened
#174 DetectTunnels blocks on a FIFO under wiki/, hanging brain_update and brain_write
Opened
#177 brainfstest: swap-race asserts can pass vacuously (no read/iteration floor, swallowed Query errors)
Opened
#178 brain_write loses the learning when any subdirectory under knowledge/ or wiki/ is unreadable
Opened
#179 symlinkguard ignores FIFOs and other special files: a planted FIFO classification.yaml crash-loops the pod
Opened
#182 ingestion main.go: symlink tripwire wiring, buildMux arguments and ListenAndServe line remain untested (split from #154)
Opened
#184 ingestion: cmd/server has no signal handling; symlinkguard.Watch gets context.Background() so its shutdown flush never runs
Opened
#185 ingestion metrics: an authenticated request to an unregistered path is labelled with the raw URL path (unbounded series)
Opened
#188 brain_write follows a symlinked wing directory, including one that points outside the brain
Opened
#192 brain_edit path I/O: snapshot read hangs on a FIFO, lock file and rollback write by path
Opened
#193 symlinkguard: Watch alert-queue tests flake under -race and CPU load
Opened
#196 brain_edit: snapshot taken outside the lock and rollback after unlock can overwrite a concurrent edit
Opened
#197 Only notes.Edit takes the per-note edit lock; other writers of the same notes do not
Opened
#199 watcher: a marker write that fails for a reason other than ErrNotRegular is only logged, so the note is retried every round
Opened
#198 watcher: archive copy reads the whole note into memory (io.ReadAll), with no size cap
Opened
#200 chore(context): restore the root rules in AGENTS.md and system-prompt.txt (project-only since 10-08)
Opened
#202 brain_answer synthesises from ~300-char excerpts only, so it cannot answer from any long note
Opened
#203 brain_query's "BM25" is raw substring counting: no IDF, no length normalisation, one-letter terms count every letter