Compare commits
base: mathias/hyperguild:v0.23.0
mathias/hyperguild:main
mathias/hyperguild:fix/pipeline-writes-158
mathias/hyperguild:fix/edit-path-io-192
mathias/hyperguild:fix/create-regular-188
mathias/hyperguild:fix/guard-special-179
mathias/hyperguild:fix/linkcheck-keeps-write-178
mathias/hyperguild:fix/write-dir-redirect-173
mathias/hyperguild:fix/tunnel-detect-174
mathias/hyperguild:fix/pipeline-root-157
mathias/hyperguild:w3/154-mcp-auth-wiring
mathias/hyperguild:fix/tunnel-traversal
mathias/hyperguild:test/in-brain-targets-171
mathias/hyperguild:fix/brain-scan-root-157
mathias/hyperguild:fix/graph-wiki-root-157
mathias/hyperguild:fix/vectorstore-root-157
mathias/hyperguild:fix/notes-root-157
mathias/hyperguild:fix/search-root-157
mathias/hyperguild:fix/brainwide-root-157
mathias/hyperguild:fix/raw-symlinks-153
mathias/hyperguild:feat/symlink-tripwire-157
mathias/hyperguild:fix/rest-auth-149
mathias/hyperguild:fix/123-brain-edit-envelope-check
mathias/hyperguild:feat/106-page-aware-extraction
mathias/hyperguild:fix/105-source-drift-on-main
mathias/hyperguild:fix/104-surface-merge-conflicts-on-main
mathias/hyperguild:agent/b1-compile-on-ingest
mathias/hyperguild:agent/104-surface-merge-conflicts
mathias/hyperguild:agent/105-source-drift
mathias/hyperguild:agent/107-loud-unconfigured-alerting
mathias/hyperguild:feat/brain-read-edit
mathias/hyperguild:fix/capture-i1-refusal-names-target
mathias/hyperguild:renovate/configure
mathias/hyperguild:feat/consolidate-single-harness
mathias/hyperguild:icebox/cmd-routing
mathias/hyperguild:feat/brain-pending-promote
mathias/hyperguild:fix/close-session-classification-refresh
mathias/hyperguild:fix/capture-summarywriter
mathias/hyperguild:v0.24.0
mathias/hyperguild:v0.23.1
mathias/hyperguild:v0.23.0
mathias/hyperguild:v0.22.0
mathias/hyperguild:v0.21.1
mathias/hyperguild:v0.21.0
mathias/hyperguild:v0.20.1
mathias/hyperguild:v0.20.0
mathias/hyperguild:v0.19.1
mathias/hyperguild:v0.19.0
mathias/hyperguild:v0.18.4
mathias/hyperguild:v0.18.3
mathias/hyperguild:v0.18.2
mathias/hyperguild:v0.18.1
mathias/hyperguild:v0.18.0
mathias/hyperguild:v0.17.0
mathias/hyperguild:v0.16.1
mathias/hyperguild:v0.16.0
mathias/hyperguild:v0.15.0
mathias/hyperguild:v0.14.0
mathias/hyperguild:v0.13.2
mathias/hyperguild:v0.13.1
mathias/hyperguild:v0.13.0
mathias/hyperguild:v0.12.1
mathias/hyperguild:v0.12.0
mathias/hyperguild:v0.11.2
mathias/hyperguild:icebox/cmd-routing-2026-07-01
mathias/hyperguild:v0.11.1
mathias/hyperguild:v0.11.0
mathias/hyperguild:v0.10.0
mathias/hyperguild:v0.9.0
mathias/hyperguild:v0.8.0
mathias/hyperguild:v0.7.0
mathias/hyperguild:v0.6.0
mathias/hyperguild:v0.5.0
mathias/hyperguild:v0.4.1
mathias/hyperguild:v0.4.0
mathias/hyperguild:v0.3.0
mathias/hyperguild:v0.2.0
mathias/hyperguild:v0.1.0
..
compare: mathias/hyperguild:fix/graph-wiki-root-157
mathias/hyperguild:main
mathias/hyperguild:fix/pipeline-writes-158
mathias/hyperguild:fix/edit-path-io-192
mathias/hyperguild:fix/create-regular-188
mathias/hyperguild:fix/guard-special-179
mathias/hyperguild:fix/linkcheck-keeps-write-178
mathias/hyperguild:fix/write-dir-redirect-173
mathias/hyperguild:fix/tunnel-detect-174
mathias/hyperguild:fix/pipeline-root-157
mathias/hyperguild:w3/154-mcp-auth-wiring
mathias/hyperguild:fix/tunnel-traversal
mathias/hyperguild:test/in-brain-targets-171
mathias/hyperguild:fix/brain-scan-root-157
mathias/hyperguild:fix/graph-wiki-root-157
mathias/hyperguild:fix/vectorstore-root-157
mathias/hyperguild:fix/notes-root-157
mathias/hyperguild:fix/search-root-157
mathias/hyperguild:fix/brainwide-root-157
mathias/hyperguild:fix/raw-symlinks-153
mathias/hyperguild:feat/symlink-tripwire-157
mathias/hyperguild:fix/rest-auth-149
mathias/hyperguild:fix/123-brain-edit-envelope-check
mathias/hyperguild:feat/106-page-aware-extraction
mathias/hyperguild:fix/105-source-drift-on-main
mathias/hyperguild:fix/104-surface-merge-conflicts-on-main
mathias/hyperguild:agent/b1-compile-on-ingest
mathias/hyperguild:agent/104-surface-merge-conflicts
mathias/hyperguild:agent/105-source-drift
mathias/hyperguild:agent/107-loud-unconfigured-alerting
mathias/hyperguild:feat/brain-read-edit
mathias/hyperguild:fix/capture-i1-refusal-names-target
mathias/hyperguild:renovate/configure
mathias/hyperguild:feat/consolidate-single-harness
mathias/hyperguild:icebox/cmd-routing
mathias/hyperguild:feat/brain-pending-promote
mathias/hyperguild:fix/close-session-classification-refresh
mathias/hyperguild:fix/capture-summarywriter
mathias/hyperguild:v0.24.0
mathias/hyperguild:v0.23.1
mathias/hyperguild:v0.23.0
mathias/hyperguild:v0.22.0
mathias/hyperguild:v0.21.1
mathias/hyperguild:v0.21.0
mathias/hyperguild:v0.20.1
mathias/hyperguild:v0.20.0
mathias/hyperguild:v0.19.1
mathias/hyperguild:v0.19.0
mathias/hyperguild:v0.18.4
mathias/hyperguild:v0.18.3
mathias/hyperguild:v0.18.2
mathias/hyperguild:v0.18.1
mathias/hyperguild:v0.18.0
mathias/hyperguild:v0.17.0
mathias/hyperguild:v0.16.1
mathias/hyperguild:v0.16.0
mathias/hyperguild:v0.15.0
mathias/hyperguild:v0.14.0
mathias/hyperguild:v0.13.2
mathias/hyperguild:v0.13.1
mathias/hyperguild:v0.13.0
mathias/hyperguild:v0.12.1
mathias/hyperguild:v0.12.0
mathias/hyperguild:v0.11.2
mathias/hyperguild:icebox/cmd-routing-2026-07-01
mathias/hyperguild:v0.11.1
mathias/hyperguild:v0.11.0
mathias/hyperguild:v0.10.0
mathias/hyperguild:v0.9.0
mathias/hyperguild:v0.8.0
mathias/hyperguild:v0.7.0
mathias/hyperguild:v0.6.0
mathias/hyperguild:v0.5.0
mathias/hyperguild:v0.4.1
mathias/hyperguild:v0.4.0
mathias/hyperguild:v0.3.0
mathias/hyperguild:v0.2.0
mathias/hyperguild:v0.1.0
2
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
d90ce66fb2 |
fix(brainfs): refuse an in-brain file swapped in behind a symlink; in-brain test targets (#157)
Review round 1 on PR #168: - ReadRegular/ReadRegularMax Lstat the path, then open it again by path; os.Root follows an in-root final symlink even with O_NOFOLLOW, so a symlink to another brain file swapped in between was read (8k-109k raw/ leaks in RebuildIndex, LoadInventory, IndexDoc). The opened handle must now be the same file as the Lstat (os.SameFile). This covers every ReadRegular caller, slices 1-3 included. - Every symlink test pointed outside the brain, which os.Root refuses on its own. Each now has an in-brain case too: a static in-brain link per reader, AssertNoLeakFrom with an in-brain target, and brainfs unit tests for ReadDirRegular and the in-brain swap. - brainfstest: swap links are relative (os.Root refuses every absolute link, so an absolute in-brain target tested nothing), and each swapper has its own temp name (two swappers on one path deadlocked on each other's FIFO). - IndexDoc indexes only a clean wiki/ or knowledge/ path (callers pass caller-supplied paths). - Rule 9: TestLoadInventoryReturnsErrNotRegularForASymlinkedTypeDir now asserts the error; the backfill test says it aborts on a symlinked root. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
c7a6429bae |
fix(graph,wiki): read the brain through brainfs (#157, slice 4)
graphsync.IndexDoc/BackfillFromBrainDir and wiki.LoadInventory/ RebuildIndex read notes by path (os.ReadFile, os.Open, os.ReadDir + open). A symlinked note put the target's title, aliases and wikilinks into the knowledge graph, the wiki inventory (and the LLM prompts built from it) and wiki/index.md; a FIFO hung each read. - graphsync: IndexDoc and the backfill read through brainfs; the backfill walks with WalkRegular, skips a missing root and aborts on any other walk error, including a symlinked root. - wiki: LoadInventory lists type dirs with the new brainfs.ReadDirRegular (every component a real dir, regular files only) and reads frontmatter through the root; a symlinked type dir is an error. RebuildIndex reads first sentences through the root. - brainfstest's outside file now carries the sentinel in frontmatter title and aliases, a heading and a wikilink, so extractors that ignore the body are tested too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |