Compare commits
base: mathias/hyperguild:v0.22.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/vectorstore-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
3
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
31071bc9b1 |
fix(brainfs): check every component of the walk root (#157)
Review round 2 on PR #166: Lstat on the walk root checks only its last component, so search with Wing+Hall (root wiki/<wing>/<hall>) walked a symlinked <wing> whose target had a real <hall> directory. WalkRegular now Lstats every prefix of the root and requires each to be a real directory. New brainfs and search (Wing+Hall) tests; the Wing-only search test is renamed to say what it covers. The doc now records the accepted residual: a directory swapped for a symlink between listing and read is still followed; os.Root keeps the read inside the brain but not inside the walk root. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
66b6cf8a77 |
fix(brainfs): refuse a symlinked walk root (#157)
Review round 1 on PR #166: fs.WalkDir stats its root with a follow, and os.Root allows a symlink that stays inside the brain, so knowledge -> . aliased raw/, sessions/ and root files into the embeddings (and a wiki/<w> -> .. root into search results). On main, filepath.WalkDir Lstat'ed the root and did not descend. - WalkRegular Lstats its root and requires a real directory; anything else goes to onErr as ErrNotRegular and nothing is yielded. - Sync skips a missing scan root via bfs.Lstat before walking, and every other walk error, including a symlinked root, aborts before the delete pass. This removes the unpinned rel == sub special case. - Search warns and skips a symlinked root (new test). - Test renamed to TestSyncRefusesSymlinkedNotesAndSurvivesSwapRaces. - wrapAfterStat comment: brainfs tests must not use t.Parallel. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
74a9621ba6 |
fix(vectorstore): walk and read the brain through brainfs (#157, slice 3)
Sync walked wiki/ and knowledge/ with filepath.WalkDir and read each .md with os.ReadFile. A symlinked note (Syncthing syncs symlinks) had its target embedded into pgvector and served by semantic search; a FIFO stalled the sync. The walk and read now go through brainfs: regular files only, type checked on the opened handle. - Chunks already embedded from a symlinked note are deleted on the next sync, because the note is no longer seen. - A walk error still aborts Sync before the delete pass, so an unreadable subdir does not delete chunks of files that exist. A missing scan dir is skipped as before. - brainfs gains Lstat, used for the mtime staleness check. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |