Compare commits
base: mathias/hyperguild:v0.21.1
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/notes-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 | |
|---|---|---|---|---|
|
|
02cecb25b1 |
fix(brainfs): bound the read in ReadRegularMax; honest test names (#157)
Review round 1 on PR #165: - ReadRegularMax checked the size on the opened handle, then read with an unbounded io.ReadAll, so a file growing after the check returned past the limit. The read now goes through io.LimitReader(max+1). A test seam grows the file between the check and the read and counts bytes consumed. - New: ReadScoped returns ErrTooLarge for a note over maxNoteBytes; red if readContained drops the limit. - notes.Target carries the brain root instead of deriving it by TrimSuffix. - Rule 9: reader tests renamed to <Reader>RefusesSymlinksAndSurvivesSwapRaces; ReadNote test has a positive control; brainfstest comment states what the harness observes and what it does not. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
b6f7dac46e |
fix(brain): context, brain_get and brain_read read through brainfs (#157, slice 2)
Option 1 of #157, slice 2. readExcerpt (brain_context), api.ReadNote (brain_get / read-after-write) and notes.ReadScoped (brain_read) read the Syncthing-shared brain by path. Under a symlink swap race each leaked an outside file hundreds of thousands of times in 1.5s, including brain_read, whose Lstat check was raced by the reopen-by-name; a FIFO blocked os.ReadFile. - All three read through brainfs (os.Root, regular files only, non-blocking open, type check on the handle). - brainfs.ReadRegularMax checks a size limit on the opened handle; notes keeps its ErrTooLarge. - New internal/brainfs/brainfstest: the shared swap-race harness (symlink and held-writer FIFO swappers, awaited before TempDir cleanup; AssertNoLeak / AssertNoHang) for this and later slices. Tests red first: each reader under a symlink-swap race and a held-writer FIFO race, plus static checks. Flipped: readExcerpt back to os.ReadFile is red. Refs #157 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |