Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
393 commits
Select commit Hold shift + click to select a range
f1a20d7
Merge pull request #158 from flupkede/docs/security-changelog-update
flupkede Jul 23, 2026
9ae09e9
fix(mcp): recommend find_impact first; stop deflecting to find kind=u…
Jul 26, 2026
244b222
docs(mcp): align find_impact rustdoc with the reframe
Jul 27, 2026
a68b022
fix(release): macOS cp EIO — stage binary, cargo clean, retry cp/tar …
Jul 27, 2026
d0500e3
Merge branch 'fix/release-macos-cp-eio' into develop
Jul 27, 2026
80d1d33
docs(agents): consolidate open items into single actionable TODO list
Jul 27, 2026
32bd9ae
[worker] stage 1/6: SCIP protobuf parsing for TypeScript
Jul 27, 2026
eed206d
[worker] stage 2/6: TypeScriptSymbolIndexer + registry wiring
Jul 27, 2026
fa41757
[worker] stage 4/6: find_impact auto-detect TypeScript extensions
Jul 27, 2026
24758a8
docs(agents): add last-updated date stamp
Jul 27, 2026
b48c471
[worker] stage 5/6: file-watcher TypeScript tracking
Jul 27, 2026
6569395
[worker] stage 1/3: T1 - remove dead wait_until_indexed()
Jul 27, 2026
f890df4
[worker] stage 2/3: T2 - extract shared build_remote_search_body()
Jul 27, 2026
590da90
[worker] stage 3/3: T3 - wire up remote_project_cache persistence
Jul 27, 2026
c257049
[worker] stage 6/6: TypeScript SCIP tests + fixture
Jul 27, 2026
3a7ba69
[worker] stage 3/3: fix review remarks - wire run_remote_list too
Jul 27, 2026
507c517
[worker] fix: correct npx invocation for scip-typescript on Windows
Jul 27, 2026
4a80f5c
[worker] docs: track SCIP adapter dedup as follow-up TODO (T5)
Jul 27, 2026
b0e185c
🐛 fix: de-flake watch/repos git tests under push-time load
Jul 27, 2026
652ef31
Merge pull request #163 from flupkede/fix/find-impact-tool-routing
flupkede Jul 27, 2026
dcd6f56
docs(agents): clarify T4 - TUI i/d/f was a stale title, no code bug
Jul 27, 2026
7562638
fix(release): D1 - apply cp-retry pattern to Linux with-csharp step
Jul 27, 2026
42eda08
Merge remote-tracking branch 'origin/develop' into develop
Jul 27, 2026
7e30a99
Merge pull request #164 from flupkede/chore/todo-t1-t2-t3-cleanup
flupkede Jul 27, 2026
1b9b16b
Merge pull request #166 from flupkede/chore/d1-linux-cp-retry-consist…
flupkede Jul 27, 2026
9a0cab5
Merge remote-tracking branch 'origin/develop' into chore/t4-status-tu…
Jul 27, 2026
f519a6b
Merge pull request #165 from flupkede/chore/t4-status-tui-docs-cleanup
flupkede Jul 27, 2026
9d20d2b
[worker] stage 6/8: add real-project gated smoke test for TS SCIP pip…
Jul 28, 2026
4c35667
[worker] stage 7/8: show TS symbol-index indicator alongside C# in TUI
Jul 28, 2026
4252a61
Merge remote-tracking branch 'origin/develop' into feature/typescript…
Jul 28, 2026
df1e504
fix(index): stamp model in metadata.json on serve/git-hook index path
Jul 28, 2026
98a1979
Merge pull request #167 from flupkede/feature/typescript-scip-indexing
flupkede Jul 28, 2026
50c9397
refactor(embed): centralize metadata model-stamp in ModelType::write_…
Jul 28, 2026
5b43781
refactor(mcp): route auto-create-DB model stamp through write_metadat…
Jul 28, 2026
2171e2a
📝 docs: update before push
Jul 28, 2026
09b451a
Merge pull request #168 from flupkede/fix/worktree-index-model-unknown
flupkede Jul 28, 2026
3d43993
🐛 fix(watcher): show "Indexing" in TUI during text-batch refresh
Jul 28, 2026
2dbafa3
🐛 fix(watcher): show C# indicator "Indexing" during watcher rebuild
Jul 28, 2026
928273d
🐛 fix(watcher): rebuild symbols on branch switch (find_impact staleness)
Jul 28, 2026
a5f66c8
♻️ refactor(watcher): extract run_full_rebuild_logged (DRY full rebui…
Jul 28, 2026
cffd272
📝 docs: worklog + CHANGELOG for watcher reindex/TUI visibility fixes
Jul 28, 2026
78c9310
♻️ refactor(watcher): route .ts debounce rebuild through run_full_reb…
Jul 28, 2026
5ab5aa7
📝 docs: mark watcher reindex/TUI worklog complete (final review PASS)
Jul 28, 2026
a3f4ec6
🔒️ fix: grep-guard blocks grep unless codesearch serve is down
Jul 28, 2026
b40441f
♻️ refactor: drop now-unused pattern extraction in grep-guard
Jul 28, 2026
f5a1e3d
📝 docs: changelog entry for grep-guard liveness-probe fix
Jul 28, 2026
8848cc5
ci: auto bump patch version on PR-merge to develop
Jul 29, 2026
130a8a4
Merge pull request #169 from flupkede/fix/watcher-reindex-tui-visibility
flupkede Jul 29, 2026
a259b38
Merge pull request #172 from flupkede/fix/grep-guard-liveness-probe
flupkede Jul 29, 2026
44adeec
Merge pull request #171 from flupkede/ci/bump-develop-version
flupkede Jul 29, 2026
c5ee85b
ci: pin checkout ref in release.yml (workflow_dispatch builds tagged …
Jul 29, 2026
fd46c51
docs(releasing): correct merge style + reflect auto patch-bump scheme
Jul 29, 2026
748372b
docs(agents): fix stale version/auto-bump claim + bump date
Jul 29, 2026
03259df
Merge pull request #173 from flupkede/docs/release-process-accuracy
flupkede Jul 29, 2026
602f488
chore: bump version to 1.1.32 (auto, PR #173 merged to develop)
github-actions[bot] Jul 29, 2026
ea5b768
docs(agents): reconcile Open TODOs - close find_impact/TS-SCIP, mark …
Jul 29, 2026
af5eafd
docs(agents): close T4 (0-chunk status bug) as can't-reproduce
Jul 29, 2026
be61891
feat: add Protobuf language support (tree-sitter, Niveau 1)
Jul 29, 2026
7049716
docs: document protobuf Niveau 1 (CHANGELOG + AGENTS.md implemented-f…
Jul 30, 2026
d693de7
Merge pull request #174 from flupkede/docs/agents-open-todos-reconcile
flupkede Jul 30, 2026
2ebb930
chore: bump version to 1.1.33 (auto, PR #174 merged to develop)
github-actions[bot] Jul 30, 2026
64ec734
Merge remote-tracking branch 'origin/develop' into feat/protobuf-lang…
Jul 30, 2026
19ee3cb
Merge pull request #175 from flupkede/feat/protobuf-language-support
flupkede Jul 30, 2026
c76e487
chore: bump version to 1.1.34 (auto, PR #175 merged to develop)
github-actions[bot] Jul 30, 2026
bbc705b
feat(serve): per-repo read_only flag (Optie B) - serve opens DOCS rea…
Jul 30, 2026
d6f925c
fix(cloud): prune ghost vendors in index-job (unregister + remove orp…
Jul 30, 2026
cfa39de
fix(cloud): mark DOCS repos read-only in index-job snapshot (repo_rea…
Jul 30, 2026
d7567d7
docs: cloud read-only-DOCS flag + ghost-vendor prune (AGENTS.md + clo…
Jul 30, 2026
c82e8af
fix(cloud): best-effort prune dead/empty vendor instead of aborting t…
Jul 30, 2026
c91b74e
fix(cloud): quiesce serve before snapshot + tolerate tar file-changed…
Jul 30, 2026
0033417
fix(cloud): disable DOCS read-only marking (read-only search returns …
Jul 30, 2026
9cc1b31
fix(cloud): actively strip repo_read_only flags (they persist across …
Jul 30, 2026
c80b415
fix(cloud): clear repo_read_only BEFORE job warmup so HNSW graphs get…
Jul 30, 2026
aed4f14
fix(cloud): wait for real warmup completion, then re-enable read-only…
Jul 30, 2026
9adc820
fix(cloud): verify the HNSW graph before publishing, not a proxy for it
Jul 30, 2026
03e85b6
docs: add worklog for the cloud DOCS-bake / serve-OOM branch
Jul 30, 2026
f2f8398
[worker] stage 6/6: fail closed when repo readiness is unknown
Jul 30, 2026
e2b32d8
[worker] docs: record commit SHAs in worklog step 6
Jul 30, 2026
9116d4d
[worker] stage 6/6: close the fail-open half of the readiness guard
Jul 30, 2026
e6bfea1
[worker] stage 6/6: derive the read-only set from repos.json, not the…
Jul 30, 2026
32b4952
[worker] final review: enforce read-only, gate the prune, kill dangli…
Jul 30, 2026
c7ab43e
[worker] docs: record step 7 (full-branch review) in the worklog
Jul 30, 2026
8dfaf0f
[worker] docs: close the review loop (iteration 7 PASS) in the worklog
Jul 30, 2026
ef51a84
[worker] docs: record proposed close/quiesce follow-up and why it is …
Jul 30, 2026
19d6f92
fix(vectordb): commit the read txn in open_readonly so DB handles sta…
Jul 30, 2026
a37e729
docs(worklog): record v2.16 deploy result and the read-only search ro…
Jul 30, 2026
923f09e
fix(mcp): surface fan-out search failures instead of returning an emp…
Jul 30, 2026
e20b5ed
docs: record the LMDB txn/handle and search-error rules in AGENTS.md
Jul 30, 2026
76ca272
fix(mcp): report fan-out failures to the caller, and stop hard-failin…
Jul 30, 2026
6c264af
docs(worklog): record step 8b, the three review rounds on failure rep…
Jul 30, 2026
b7d58d9
[worker] stage 3/3: fix review remarks (round 3) - surface store fail…
Jul 30, 2026
921dbed
docs(worklog): record review round 3 and the fixes applied for it
Jul 30, 2026
330ae00
docs(worklog): record step 9 - v2.19 deployed and verified in the cloud
Jul 30, 2026
c20684e
[worker] final review: close the fourth store-failure blind spot, str…
Jul 30, 2026
2c563ab
docs: widen the search-error rule from a site to a class
Jul 30, 2026
90958d1
[worker] final review: close the dead warning channels and the fifth …
Jul 30, 2026
5737ea5
docs(worklog): record round 5 - the fixes that looked like fixes
Jul 30, 2026
22f223b
[worker] final review: make the mangled-literal class a build failure
Jul 30, 2026
ea5338d
docs(worklog): record round 6 - the literal guard and the reachabilit…
Jul 30, 2026
574aef7
[worker] final review: close the class at the exit, and fix the guard…
Jul 30, 2026
47fba54
[worker] stage 8/8: close site nine — get_chunk carries its warnings …
Jul 31, 2026
bc1d583
[worker] stage 8/8: fix review remarks — a test that could not see it…
Jul 31, 2026
17e11b9
[worker] final review: correct an overclaim about respond_with_object
Jul 31, 2026
d1ed70e
[worker] docs: keep the cloud worklog out of this public repo
Jul 31, 2026
141f470
[worker] recover uncommitted work: MCP proxy idle-disconnect for scal…
Jul 31, 2026
21bb85a
docs(cli): document the MCP proxy idle-disconnect in `mcp --help`
Jul 31, 2026
019d9c2
[worker] fix follow-up 16: status(kind="index"/"projects") can now re…
Jul 31, 2026
a49ee86
docs(AGENTS.md): close the dangling counter-then-teardown cross-refer…
Jul 31, 2026
de84b28
feat(tui): show the index's on-disk path in the 'i' info overlay
Jul 31, 2026
75c5247
[worker] stage 1/5: fix index-cancellation no-op (BUG1)
Jul 31, 2026
a79d6a5
[worker] stage 2/5: honest DB-delete reporting (BUG2)
Jul 31, 2026
7d573d9
[worker] stage 3/5: redirect test cache into a tempdir (BUG3)
Jul 31, 2026
90fe4ca
[worker] stage 4/5: BUG4 test-tempdir sweep audit + fix one offender
Jul 31, 2026
677a91a
[worker] stage 5/5: add cancellation/DB-report/cache-isolation regres…
Jul 31, 2026
a8fd74f
fix(mcp): short-circuit await_peer on connect refusal; carry list_pro…
Jul 31, 2026
918d52d
Merge pull request #177 from flupkede/fix/cloud-bake-docs-delta-prune…
flupkede Jul 31, 2026
584b9f0
chore: bump version to 1.1.35 (auto, PR #177 merged to develop)
github-actions[bot] Jul 31, 2026
b240d1b
Merge pull request #178 from flupkede/fix/index-cancel-and-test-tempdirs
flupkede Jul 31, 2026
55f5e6d
chore: bump version to 1.1.36 (auto, PR #178 merged to develop)
github-actions[bot] Jul 31, 2026
1168a45
[worker] stage 1/2: self-clean orphaned DB dir when an in-build index…
Jul 31, 2026
698de53
[worker] stage 2/2: regression tests for self-cleanup backstop
Jul 31, 2026
824fa8c
[worker] phase 4: extend self-cleanup to FSW-refresh and incremental-…
Aug 1, 2026
caa88e0
Merge pull request #179 from flupkede/fix/index-cancel-build-phase
flupkede Aug 1, 2026
fe4008d
chore: bump version to 1.1.37 (auto, PR #179 merged to develop)
github-actions[bot] Aug 1, 2026
1995be1
[chore/test-suite-reorg] stage 1/4: extract #[cfg(test)] mod tests bl…
Aug 2, 2026
0f4c6cb
[chore/test-suite-reorg] stage 2/4: collapse predicate grids into tab…
Aug 2, 2026
0ab0a9b
[chore/test-suite-reorg] stage 3/4: centralize serve test scaffolding…
Aug 2, 2026
51f2c82
[chore/test-suite-reorg] stage 4/4: fill three coverage gaps with new…
Aug 2, 2026
7226c66
[fix/tui-remote-discovery] TUI: poll federated peers hourly + event-d…
Aug 3, 2026
ec0b10c
feat(tui): authenticate standalone remote TUI against api-key-require…
Aug 3, 2026
bfce72d
docs: drop [Unreleased] changelog staging, use pending version directly
Aug 3, 2026
69d0d15
docs: changelog + AGENTS.md entry for test-suite reorg
Aug 3, 2026
ade8412
docs: changelog + AGENTS.md entry for TUI federated polling fix
Aug 3, 2026
dd20a02
docs: changelog + AGENTS.md entry for remote TUI auth support
Aug 3, 2026
f8a12f3
merge: merge develop into chore/test-suite-reorg, resolve CHANGELOG.m…
Aug 3, 2026
e68a0a2
Merge pull request #180 from flupkede/chore/test-suite-reorg
flupkede Aug 3, 2026
2f4adf6
chore: bump version to 1.1.38 (auto, PR #180 merged to develop)
github-actions[bot] Aug 3, 2026
13f1ea4
merge: merge develop (incl. #180 test-suite reorg) into fix/tui-remot…
Aug 3, 2026
d1e3c9f
Merge pull request #181 from flupkede/fix/tui-remote-discovery-scale-…
flupkede Aug 3, 2026
b6952cc
chore: bump version to 1.1.39 (auto, PR #181 merged to develop)
github-actions[bot] Aug 3, 2026
b1bddff
merge: merge develop (incl. #180 test-suite reorg + #181 scale-to-zer…
Aug 3, 2026
334e794
Merge pull request #182 from flupkede/feat/remote-tui-auth
flupkede Aug 3, 2026
d0a35a9
chore: bump version to 1.1.40 (auto, PR #182 merged to develop)
github-actions[bot] Aug 3, 2026
8c14d54
fix(vectordb): retry atomic_write_json rename on transient Windows ac…
Aug 3, 2026
e0a0565
Merge remote-tracking branch 'origin/develop' into fix/flaky-force-re…
Aug 3, 2026
81e011a
docs: changelog + AGENTS.md entry for flaky force-reindex test rename…
Aug 3, 2026
1ab9afe
Merge pull request #183 from flupkede/fix/flaky-force-reindex-test
flupkede Aug 3, 2026
3395da1
chore: bump version to 1.1.41 (auto, PR #183 merged to develop)
github-actions[bot] Aug 3, 2026
b9149a4
fix(tui): defer federated /status poll on startup to avoid spurious s…
Aug 3, 2026
98558b6
Merge pull request #184 from flupkede/fix/tui-defer-federated-poll-on…
flupkede Aug 3, 2026
8f47601
chore: bump version to 1.1.42 (auto, PR #184 merged to develop)
github-actions[bot] Aug 3, 2026
54e16ae
chore(release): prepare v1.2.0
Aug 3, 2026
6508a46
docs: fix release merge-base guidance to use -s ours (strategy) not -…
Aug 3, 2026
6ea687b
Merge pull request #187 from flupkede/docs/release-merge-strategy
flupkede Aug 3, 2026
4824b92
chore: bump version to 1.2.1 (auto, PR #187 merged to develop)
github-actions[bot] Aug 3, 2026
752606f
docs(agents): close #162 (protobuf language awareness) — Niveau 1 shi…
Jul 30, 2026
0636f01
Merge pull request #176 from flupkede/docs/close-162-issue
flupkede Aug 3, 2026
3d5b0e1
chore: bump version to 1.2.2 (auto, PR #176 merged to develop)
github-actions[bot] Aug 3, 2026
48c38a5
fix(build): self-heal core.bare=false before cargo
Aug 3, 2026
0624cd8
Merge pull request #188 from flupkede/fix/build-ps1-bare-selfheal
flupkede Aug 3, 2026
377c9ed
chore: bump version to 1.2.3 (auto, PR #188 merged to develop)
github-actions[bot] Aug 3, 2026
7a58e78
[worker] stage 1/3: raise LMDB mapsize cap 8GB→32GB + env override (#…
Aug 4, 2026
89244a1
[worker] stage 2/3: add MDB_MAP_FULL auto-resize to PersistentEmbeddi…
Aug 4, 2026
e58e225
[worker] stage 3/3: tests for PersistentEmbeddingCache MDB_MAP_FULL a…
Aug 4, 2026
116176c
[worker] post-stage: lower MAX_LMDB_MAP_SIZE_MB default 32GB→16GB
Aug 5, 2026
4c9fc4b
Merge pull request #190 from flupkede/fix/mdb-map-full-189
flupkede Aug 5, 2026
fd6c4ce
chore: bump version to 1.2.4 (auto, PR #190 merged to develop)
github-actions[bot] Aug 5, 2026
6b48355
🐛 fix: hint CODESEARCH_MAX_LMDB_MAP_SIZE_MB in MDB_MAP_FULL cap-reach…
Aug 5, 2026
cfd14e1
📝 docs: changelog + README entry for #189 LMDB mapsize fix
Aug 5, 2026
971d609
🔧 chore: optimize CI — drop unused release build, cover master push, …
Aug 5, 2026
475e8ca
🔒️ fix: block direct pushes to master in the pre-push hook
Aug 5, 2026
c803c60
🔧 chore: cut redundant CI overhead — concurrency cancel + csharp-test…
Aug 5, 2026
55fa36b
🐛 fix: log keep-warm pings + warn when target isn't self
Aug 5, 2026
6f1d1c5
🐛 fix: never poll a federated peer on a timer (scale-to-zero regression)
Aug 5, 2026
12edcf2
🐛 fix: keep-warm no longer self-warms a replica that served no query
Aug 5, 2026
3bcf153
📝 docs: correct the federated keep-warm diagnosis + doc cleanup
Aug 5, 2026
08276de
📝 docs: work log for the federated silent-poll fix
Aug 5, 2026
4add0d1
👷 ci: run CI on `fix/**` branches — they had no CI at all
Aug 5, 2026
b6cb48f
Merge PR #192: federated peer no longer woken without a query
flupkede Aug 5, 2026
8d7261e
chore: bump version to 1.2.5 (auto, PR #192 merged to develop)
github-actions[bot] Aug 5, 2026
8fd1815
🔧 chore: unify git hooks in .githooks/ — one location, no hand-copied…
Aug 5, 2026
e24436f
Merge PR #193: unify git hooks in .githooks/
flupkede Aug 5, 2026
e8dfaa9
chore: bump version to 1.2.6 (auto, PR #193 merged to develop)
github-actions[bot] Aug 5, 2026
561137a
📝 docs: worklog — record merge, deploy and production verification
Aug 5, 2026
db3d3cf
Merge PR #194: worklog — merge, deploy and production verification
flupkede Aug 5, 2026
cdca17b
chore: bump version to 1.2.7 (auto, PR #194 merged to develop)
github-actions[bot] Aug 5, 2026
eaaefb5
🐛 fix: retry a conflicted repo instead of replaying the cached failur…
Aug 8, 2026
af40482
Merge pull request #195 from flupkede/fix/serve-conflicted-repo-never…
flupkede Aug 9, 2026
05f8892
chore: bump version to 1.2.8 (auto, PR #195 merged to develop)
github-actions[bot] Aug 9, 2026
00980c6
[worker] stage 1/1: translate MSYS POSIX paths at the path boundary
Aug 11, 2026
2ffda09
[worker] stage 2/2: route remaining 5 fallback sites through normaliz…
Aug 12, 2026
726d147
[worker] stage 3/3: fix twin normalize_for_cmp closure in try_delegat…
Aug 12, 2026
5d1822d
Merge pull request #196 from flupkede/fix/msys-path-translation
flupkede Aug 12, 2026
a7f4992
chore: bump version to 1.2.9 (auto, PR #196 merged to develop)
github-actions[bot] Aug 12, 2026
7fd0958
fix(tests): pre-canonicalize MSYS test fixtures for 8.3 short-name ru…
Aug 12, 2026
83442ab
Merge pull request #197 from flupkede/fix/msys-test-windows-ci
flupkede Aug 12, 2026
eb4ab83
chore: bump version to 1.2.10 (auto, PR #197 merged to develop)
github-actions[bot] Aug 12, 2026
9044d73
docs: record custom-kb chunk_id drift bug in Open TODOs
Aug 14, 2026
53c7b2a
[worker] fix: codesearch index rm reorders file-delete before repos.j…
flupkede Aug 14, 2026
9403626
[worker] harden repos.json save() + fix serve log cleanup never running
flupkede Aug 14, 2026
1069e9b
Merge pull request #200 from flupkede/fix/index-rm-repos-json-rollback
flupkede Aug 14, 2026
d7a1a6b
chore: bump version to 1.2.11 (auto, PR #200 merged to develop)
github-actions[bot] Aug 14, 2026
6bf69fe
Merge branch 'develop' into fix/custom-kb-chunk-id-drift
flupkede Aug 14, 2026
eb4834b
fix: stop fabricating chunk_id 0 for literal-mode search hits
flupkede Aug 14, 2026
d952de7
test: unit-repro the cross-generation chunk-id drift mechanism + upda…
flupkede Aug 14, 2026
6409311
fix: stop flattening store Err into missing hits on 6 MCP resolution …
flupkede Aug 15, 2026
2010f7a
fix: never reuse chunk ids across reopens — persistent id high-water …
flupkede Aug 15, 2026
f3957b7
Merge pull request #201 from flupkede/fix/fts-chunk-err-swallow
flupkede Aug 15, 2026
b8e48f9
chore: bump version to 1.2.12 (auto, PR #201 merged to develop)
github-actions[bot] Aug 15, 2026
4903e84
merge: custom-kb chunk-id fixes (primary chunk_id:0 + drift repro) on…
flupkede Aug 15, 2026
6aa9018
Merge pull request #202 from flupkede/merge/custom-kb-chunk-id-drift
flupkede Aug 15, 2026
49b1a51
chore: bump version to 1.2.13 (auto, PR #202 merged to develop)
github-actions[bot] Aug 15, 2026
a73c485
feat: /indexing freshness endpoint + grep-guard wait-and-retry (#54/#55)
flupkede Aug 15, 2026
9bd77da
Merge pull request #203 from flupkede/codesearch-wait-and-retry-when-…
flupkede Aug 15, 2026
8249ea8
chore: bump version to 1.2.14 (auto, PR #203 merged to develop)
github-actions[bot] Aug 15, 2026
eea7367
fix: retry transient 502/503/504 from federated peers, report cold st…
flupkede Aug 15, 2026
1168bec
fix: restore \ continuations on two caller-facing literals (detector …
flupkede Aug 15, 2026
72d501e
Merge pull request #204 from flupkede/fix/remote-peer-503-retry
flupkede Aug 15, 2026
e198360
chore: bump version to 1.2.15 (auto, PR #204 merged to develop)
github-actions[bot] Aug 15, 2026
c47b221
test: pin the index-rm serve-delegation end-to-end (todo #48 L2 accep…
flupkede Aug 15, 2026
1ce4e86
Merge pull request #205 from flupkede/fix/index-rm-unload-via-serve
flupkede Aug 15, 2026
56077db
chore: bump version to 1.2.16 (auto, PR #205 merged to develop)
github-actions[bot] Aug 15, 2026
c12a795
docs: drop C1/C2 cloud TODOs (decided against), keep OOM history
flupkede Aug 15, 2026
2c34927
Merge pull request #206 from flupkede/docs/remove-c1-c2-todos
flupkede Aug 15, 2026
e52e595
chore: bump version to 1.2.17 (auto, PR #206 merged to develop)
github-actions[bot] Aug 15, 2026
1511b16
Release v1.3.0 — monotone chunk-ids + store-Err surfacing + /indexing…
flupkede Aug 15, 2026
f72bd98
merge: record master as parent (-s ours) to advance regressed merge-b…
flupkede Aug 15, 2026
8b926f7
merge: release/v1.3.0 back into develop (changelog finalization + v1.…
flupkede Aug 15, 2026
ed3718a
Merge pull request #208 from flupkede/chore/release-v1.3.0-backmerge
flupkede Aug 15, 2026
e590ad9
chore: bump version to 1.3.1 (auto, PR #208 merged to develop)
github-actions[bot] Aug 15, 2026
59ae0d5
fix(tests): canonicalize indexing-route fixture for 8.3 short-name CI…
flupkede Aug 16, 2026
461bb04
Merge pull request #209 from flupkede/fix/ci-windows-853-indexing-route
flupkede Aug 16, 2026
ebe6fc1
chore: bump version to 1.3.2 (auto, PR #209 merged to develop)
github-actions[bot] Aug 16, 2026
645c07b
[worker] fix: delegated index rm carries serve's locked-DB outcome ho…
flupkede Aug 16, 2026
1086e91
[oc-runner] WIP (opencode rc=124): File-delete slaagt zonder serve-stop.
flupkede Aug 16, 2026
9e49f8a
[oc-runner] WIP (opencode rc=124): Fix `grep-guard.sh` coverage/inter…
flupkede Aug 17, 2026
5c6d3db
[worker] stage 1/4: serve waits on LMDB registry before retrying lock…
flupkede Aug 17, 2026
f2fb371
[worker] stage 2/4: delegated index rm DELETE outlives serve's slow r…
flupkede Aug 17, 2026
f779d60
[worker] stage 1-2/4: fix review remarks (cargo fmt, BASE_ENV_FLAGS i…
flupkede Aug 17, 2026
b12aa76
[worker] stage 3/4: e2e — index rm deletes DB while serve holds a rea…
flupkede Aug 17, 2026
638c5eb
[worker] stage 3/4: fix review remarks — extract shared delegation-te…
flupkede Aug 17, 2026
6f029a1
[worker] stage 4/4: changelog entry for layer-2 index rm fix + issue …
flupkede Aug 17, 2026
42ec86b
[chore] root-md cleanup: dissolve stray root mds and docs/ into local…
flupkede Aug 18, 2026
a313881
[chore] pre-commit root-md allowlist guard
flupkede Aug 18, 2026
107d93f
[worker] final review: bash 3.2 compatibility for root-md guard
flupkede Aug 18, 2026
9cbc95a
Merge origin/develop into chore/root-md-cleanup (resolve conflicts: f…
flupkede Aug 18, 2026
90dd8f6
Merge pull request #210 from flupkede/chore/root-md-cleanup
flupkede Aug 18, 2026
3a554a3
chore: bump version to 1.3.3 (auto, PR #210 merged to develop)
github-actions[bot] Aug 18, 2026
c1efed2
Merge origin/master into release/v1.3.3 (advance merge-base only; tre…
flupkede Aug 18, 2026
b10e763
chore: finalize CHANGELOG [1.3.3] for release (was misnamed [1.3.2] v…
flupkede Aug 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 19 additions & 1 deletion .githooks/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,30 @@ never seems to fire, check that setting first.

| Hook | What it does |
|---|---|
| `pre-commit` | Runs `cargo fmt` and stages the result, so CI's fmt check can't fail. |
| `pre-commit` | Runs `cargo fmt` and stages the result, so CI's fmt check can't fail. Then rejects any commit that introduces a root-level `*.md` outside the allowlist (see below). |
| `pre-push` | Blocks direct pushes to `master`; runs the QC gate (skipped when the branch changes no Rust); scans tracked files for customer references. |
| `post-checkout` | Creates `AGENTS.md` from `AGENTS.develop.md` on branch switch, if absent. |

Any hook can be bypassed with `git push --no-verify` / `git commit --no-verify`.

## Root-md allowlist guard (`pre-commit`)

Agents love dropping `*.md` files (diagnoses, plans, worklogs, test scenarios)
at the repo root. The `pre-commit` hook rejects any commit that **introduces**
(added/copied/renamed) a root-level `*.md` outside this allowlist:

- `AGENTS.md`, `AGENTS.develop.md` — agent instructions
- `CLAUDE.md` — one-line pointer to `AGENTS.md`
- `README.md`, `README_CSharp.md` — user-facing docs
- `CHANGELOG.md`, `RELEASING.md` — release infrastructure

Everything else belongs in **`.docs/`** (gitignored, local-only) — see
AGENTS.md, section *Root file hygiene (markdown)*. Only introductions are
checked: modifying an already-tracked stray is only possible after a
deliberate `--no-verify` bypass, where the file itself — not the commit — is
the violation. Dot-folders (`.githooks/`, `.github/`, `.claude/`, …) are out
of scope: a root-level file cannot be inside one.

## `customer-patterns.local`

The `pre-push` leak scan reads its patterns from `.githooks/customer-patterns.local`
Expand Down
47 changes: 45 additions & 2 deletions .githooks/pre-commit
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
#!/bin/bash
# pre-commit hook: format Rust code only.
# pre-commit hook: format Rust code + root-md allowlist guard.
#
# Runs `cargo fmt` and stages any reformatting so CI's fmt-check can't fail.
# 1. Runs `cargo fmt` and stages any reformatting so CI's fmt-check can't fail.
# 2. Rejects commits that introduce a root-level *.md outside the allowlist.
#
# Installed via `git config core.hooksPath .githooks` — see .githooks/README.md.
#
Expand All @@ -27,4 +28,46 @@ if [ -n "$FMT_CHANGED" ]; then
echo "pre-commit: staged rustfmt changes ($FMT_CHANGED)"
fi

# --- root-md allowlist guard -------------------------------------------------
# The repo root keeps only its sanctioned markdown files (AGENTS.md, section
# "Root file hygiene (markdown)"). Anything else — diagnoses, plans, test
# scenarios, worklogs — belongs in .docs/ (gitignored, local-only). Blocking
# here is cheaper than a follow-up cleanup commit after a stray lands on
# develop.
#
# Only introductions are checked (added/copied/renamed). Modifying an already
# tracked stray is only possible after a deliberate --no-verify bypass — the
# file itself is the violation then, and review catches it. Dot-folders
# (.githooks/, .github/, .claude/, ...) are out of scope by construction: a
# root-level file cannot be inside one.
ALLOWED_ROOT_MD="AGENTS.md AGENTS.develop.md CLAUDE.md README.md README_CSharp.md CHANGELOG.md RELEASING.md"

while IFS= read -r staged; do
# root level = no slash anywhere in the staged (post-rename) path
case "$staged" in
*/*) continue ;;
esac
# tr, not ${var,,}: the parameter-expansion lowercase needs bash >= 4 and
# stock macOS still ships bash 3.2, where it is a fatal "bad substitution"
# that would block EVERY commit containing a root-level file.
case "$(printf '%s' "$staged" | tr 'A-Z' 'a-z')" in
*.md) ;;
*) continue ;;
esac
for allowed in $ALLOWED_ROOT_MD; do
[ "$staged" = "$allowed" ] && continue 2
done
echo ""
echo "pre-commit: BLOCKED — root-level '$staged' is not on the md allowlist."
echo " Root markdown is limited to: $ALLOWED_ROOT_MD"
echo " Diagnoses, plans, worklogs and test scenarios belong in .docs/ (gitignored)."
echo " See AGENTS.md, section \"Root file hygiene (markdown)\"."
echo " Deliberate? Use: git commit --no-verify"
echo ""
exit 1
# core.quotePath=false: with the default (true), git C-quotes non-ASCII paths
# (DIAGNOSE_ü.md -> "DIAGNOSE_\303\274.md"), and the quoted trailing `"` makes
# the *.md pattern miss — a stray with a non-ASCII name would sail through.
done < <(git -c core.quotePath=false diff --cached --name-only --diff-filter=ACR)

exit 0
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,12 @@ criterion/
# Testing
/test-repos/

# Local-only markdown (diagnoses, plans, worklogs, test scenarios).
# The repo root keeps only its allowlisted .md files — see AGENTS.md
# "Root file hygiene (markdown)". Also covered by the `.*/` rule above;
# listed explicitly so the intent survives a future edit of that rule.
.docs/

# codesearch database (local index, binary files)
.codesearch.db/
test_tools.jsonl
Expand Down
6 changes: 6 additions & 0 deletions AGENTS.develop.md
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,12 @@ Single-file native binaries, no runtime dependencies. macOS build is manual-trig
- **Never write separate `AGENTS_xxx.md` sibling files** unless explicitly requested.
OpenCode reads `AGENTS.md` only. Out-of-repo planning goes to
`C:\WorkArea\AI\codesearch\instructions\`.
- **Root file hygiene (markdown)**: the repo root keeps only `AGENTS.md`,
`AGENTS.develop.md`, `CLAUDE.md`, `README.md`, `README_CSharp.md`,
`CHANGELOG.md`, `RELEASING.md`. Any other markdown (diagnoses, plans,
test scenarios, worklogs) goes into `.docs/` (gitignored, local-only),
never committed, and never in a recreated tracked `docs/` folder.
Enforced by the `pre-commit` hook root-md allowlist guard.
- **Path normalization**: all path comparisons must go through a single normalize utility.
Windows UNC prefixes (`\\?\C:\`), backslash/forward-slash mismatches, and worktree
`.git` file resolution have each caused subtle bugs in the past.
Expand Down
15 changes: 14 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ Release narratives live in `CHANGELOG.md`; this list keeps only the load-bearing
- **Language coverage** — 17 tree-sitter grammars (table in README). `find_impact` has SCIP symbol precision for **C#** (bundled `scip-csharp`) and **TypeScript** (`npx scip-typescript`, host-resolved). Protobuf is Niveau 1 (text-aware chunking on `message`/`enum`/`service`/`rpc`) only — no `scip-protobuf` emitter exists today.
- **Scale-to-zero-safe federation: a federated peer is NEVER polled on a timer** — ⚠️ **design constraint, do not "improve" this.** Background polling of *local* repos is fine; a *federated* peer must never be contacted on any cadence. The embedded TUI's discovery tick is **config-only** (`REMOTE_ROW_REFRESH_SECS` = 5s, zero HTTP): it rebuilds mounted-remote rows from the `remote_mounts` allowlist so mount/unmount edits and `l` reloads surface, and contacts nobody. A peer is contacted only by (a) an **activity poke** — a real federated tool call just hit it, detected via `remote_peer_activity` in `ServeState`, refreshing that one peer, never a fan-out — or (b) the explicit `i` info-overlay keypress. Idle mounts therefore render activity as `-`, which is the correct steady state, not a fault. **Rejected reasoning (was shipped twice, PR #181/#184, and reverted):** "polling no faster than the host's idle-suspend term is harmless." It is not — each poll *woke* the peer's scale-to-zero replica, which then self-warmed for its own full idle window (~1h), giving ~50% duty cycle on a peer nobody queried (measured: wakes 120/121/120 min apart, zero searches). Not keeping a peer awake past its suspend term is strictly weaker than not waking it, and the two windows are unrelated values anyway (local host vs. remote peer).
- **Standalone remote TUI auth** — `codesearch serve tui --url ...` resolves the API key from `repos.json` (`remotes.*.url` match) or a `--api-key` override and threads the authenticated client through every TUI action, with distinct errors for "no key configured" vs. "key rejected (401)".
- **Keep-warm ping observability + spurious-wake fix** *(branch `fix/federated-silent-poll-diagnosis`)* — the `keep_warm_url` self-ping loop logs every ping (`debug!` on success, `warn!` on failure) instead of discarding both outcomes, and warns at startup when the target host isn't this server's own bind host — **except on a wildcard bind** (`0.0.0.0` / `::`), where our externally-visible host is unknown so the comparison proves nothing; without that carve-out the warning fired on every cold start of the *only* deployment where keep-warm is correct (Azure binds `0.0.0.0`, target is the ingress FQDN), which just trains operators to ignore it. Rule lives in the testable `keep_warm_foreign_target` helper. Keep-warm also **requires a real recorded tool call**: the old `most_recent_tool_call().unwrap_or(start)` fallback meant any wake that wasn't a tool call (`/status` and `/healthz` don't call `record_tool_call`) made the replica self-warm for its whole idle window — reachable *only* when the wake wasn't real work, so its sole practical effect was rewarding spurious wakes (~11× amplification). Full diagnosis, with Azure Log Analytics ground truth: `DIAGNOSE_FEDERATED_KEEP_WARM.md`.
- **Keep-warm ping observability + spurious-wake fix** *(branch `fix/federated-silent-poll-diagnosis`)* — the `keep_warm_url` self-ping loop logs every ping (`debug!` on success, `warn!` on failure) instead of discarding both outcomes, and warns at startup when the target host isn't this server's own bind host — **except on a wildcard bind** (`0.0.0.0` / `::`), where our externally-visible host is unknown so the comparison proves nothing; without that carve-out the warning fired on every cold start of the *only* deployment where keep-warm is correct (Azure binds `0.0.0.0`, target is the ingress FQDN), which just trains operators to ignore it. Rule lives in the testable `keep_warm_foreign_target` helper. Keep-warm also **requires a real recorded tool call**: the old `most_recent_tool_call().unwrap_or(start)` fallback meant any wake that wasn't a tool call (`/status` and `/healthz` don't call `record_tool_call`) made the replica self-warm for its whole idle window — reachable *only* when the wake wasn't real work, so its sole practical effect was rewarding spurious wakes (~11× amplification). Full diagnosis, with Azure Log Analytics ground truth: `.docs/DIAGNOSE_FEDERATED_KEEP_WARM.md`.
- **CLI aliases** — `ls` for `list` (`index`/`groups`/`remote`), `rm` for `remove`. `index rm <alias>` resolves a registered alias before falling back to path interpretation.

> ℹ️ **Remote write verbs** (`add`, `reindex --force`) require a read-write peer; the cloud peer rejects them (`--force` → HTTP 500 "could only be opened read-only; cannot force-reindex"). An **incremental** `reindex` (no `--force`) of an already-registered repo *does* succeed on the cloud peer — that is the custom-kb auto-refresh path. `list` is always safe. `rm` is not durable — the next cold start re-registers from the restored snapshot.
Expand Down Expand Up @@ -65,6 +65,19 @@ Common mistake: a subagent runs `/git pr create` with no explicit `--base`, the
>
> Why the strategy and not the option: against the regressed merge-base, `-X ours` still runs a real three-way merge that treats both sides' content as additions and drags master's stale lines in — a Frankenstein diff (`src/mcp/mod.rs` gained +333 stale lines this way on the v1.2.0 attempt). `-s ours` ignores master's tree entirely and keeps develop's content exactly, which is the desired result here (in this scenario develop's tree already equals master's content); the merge commit only exists to record master as a parent so the merge-base advances. Confirmed empirically on the v1.2.0 release: the `develop → master` PR #185 came back `CONFLICTING`; the throwaway `release/v1.2.0` branch built with `git merge -s ours origin/master` produced an empty content diff and merged clean (#186).

## Root file hygiene (markdown)

Agents love dropping `*.md` files (diagnoses, plans, worklogs, test scenarios) at the repo root. Don't. The repo root keeps **only** these markdown files:

- `AGENTS.md`, `AGENTS.develop.md` — agent instructions (and its develop source)
- `CLAUDE.md` — one-line pointer to `AGENTS.md`, nothing else
- `README.md`, `README_CSharp.md` — user-facing docs
- `CHANGELOG.md`, `RELEASING.md` — release infrastructure

Any other markdown — diagnosis write-ups, implementation plans, test scenarios, worklogs — goes into **`.docs/`** (gitignored, local-only). Never commit it, and never recreate a tracked `docs/` folder; the old `docs/` was dissolved into `.docs/` for this reason.

Enforced by the `pre-commit` hook (root-md allowlist guard — see `.githooks/README.md`): a commit that adds a root-level `*.md` outside the allowlist is rejected. Dot-folders (`.githooks/`, `.github/`, `.claude/`, …) are exempt — this rule polices only loose files at the root.

## Notes for OpenCode / agents

- **Validation:** `cargo check` and `cargo clippy` for iteration. No `--release` builds — always dev/debug until the very end.
Expand Down
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,20 @@ more PRs land; when the release is actually tagged, the same section is
finalized in place with a date — no renaming/migration step needed.
-->

## [1.3.3] - 2026-08-18

### Added

- **`pre-commit` hook now enforces the root-md allowlist** (`.githooks/`): a commit that introduces (adds/copies/renames) a root-level `*.md` outside `AGENTS.md`, `AGENTS.develop.md`, `CLAUDE.md`, `README.md`, `README_CSharp.md`, `CHANGELOG.md`, `RELEASING.md` is rejected with a pointer to `.docs/`. Shipped together with the cleanup itself: the stray root mds (`DIAGNOSE_*`, `PLAN_*`, `TEST-SCENARIO-*`) and the tracked `docs/` folder were dissolved into the gitignored `.docs/` folder, and the rule is documented in AGENTS.md, section *Root file hygiene (markdown)*. Requires `git config core.hooksPath .githooks` (already set in existing clones; fresh clones see `.githooks/README.md`).

### Fixed

- **`grep-guard.sh` now resolves Grep coverage from the search target and serve-hub registration instead of the hook's cwd and `.codesearch.db` presence (issue #199).** Two defects fixed together in the POSIX bash hook. (1) The #54 "resolve the repo from the grep target" rewrite never actually worked for POSIX absolute paths: its absolute-detection pattern (`[A-Za-z]:[\\/]*|/[a-zA-Z]/*|//*`) only matched Windows-style roots (drive letters, MSYS `/c/`, UNC `//server`), so a target like `/home/u/projects/my-repo/src` fell into the *relative* branch and resolved against the hook's cwd — with a session cwd that is not itself a git repo (a parent directory holding several repos, the #199 repro) the target resolved to nothing, looked external, and the guard silently allowed every Grep while appearing fully healthy. `/*` now covers every absolute path. (2) Coverage is decided by **registration**: the target's git root must equal one of the repos in the hub's `~/.codesearch/repos.json` (honoring the `CODESEARCH_REPOS_CONFIG` override, mirroring `config_path()`; comparison normalizes `\\?\` prefixes and slash direction, case-insensitive for Windows drive paths — same semantics as the hub's own `/indexing` resolver). A `.codesearch.db` directory at the git root is no longer a signal: it was wrong in both directions (a stale db from a since-unregistered repo denied Grep although the hub could not answer for it — unknown alias — and a registered repo whose db directory was gone slipped through uncovered). Matching the git root rather than a path prefix gives the #199 nested-repo carve-out structurally: an unregistered clone nested inside a registered repo resolves to its own git root, equals no registration, and is correctly treated as uncovered. The resolver fails open (missing/unreadable/malformed `repos.json`, missing `jq` → allow, never deny), and the `CODESEARCH_SERVER` opt-in for pure remote-serve setups is unchanged (its misuse as a coverage signal is tracked separately in #199). The PowerShell twin (`grep-guard.ps1`) keeps the older cwd-tolerant `.codesearch.db` coverage signal for now; porting it is the remaining #199 follow-up.

- **`index rm` against a running serve now actually completes the file delete without stopping serve (todo #48, Layer 2).** Two remaining defects in the delegated removal path are fixed together. (1) **The CLI's DELETE client shared the 3s health-probe timeout**, but serve's `remove_repo` legitimately needs up to `DB_DELETE_RETRY_BUDGET_SECS` (60s) + 2× `BG_TASK_COOPERATIVE_TIMEOUT_SECS` (5s) to drain background tasks and out-wait a locked DB — so the CLI could time out mid-removal, fall through to the local file-delete path, and fail there on files serve was still holding. The DELETE now gets its own client whose timeout is derived from those same constants plus `RM_DELEGATE_DELETE_MARGIN_SECS` (80s total); the health probe keeps its fast 3s classifier. (2) **Serve's lock-class delete retry backed off blindly**, sleeping through the very moment an in-process `Arc<SharedStores>` holder released the env. The retry loop now consults the LMDB registry (`open_holders_under`): when the remaining holder is *in-process*, it awaits registry drain (`await_lmdb_release`, polling at `DB_DELETE_ENV_RELEASE_POLL_MS`) and retries immediately on release instead of sleeping the full backoff; only *external* holders keep the original exponential backoff. New tests pin both sides: a CLI test against a deliberately slow (4s) stand-in serve (mutation-verified — restoring the shared 3s client fails it), registry/`await_lmdb_release` unit tests including the component-boundary case, and an end-to-end test where a **real LMDB env** held open inside a spawned serve is released by the genuine `remove_repo` flow — DB dir gone, repos map evicted, repos.json clean, follow-up removal answers "Unknown alias" — with the env-holding precondition runtime-proven via `open_holders_under`. The acceptance "file-delete succeeds without stopping serve" is now covered by an integration test instead of only an empty-dir stand-in.

- **`index rm` against a running serve no longer claims "DB deleted" when serve could not delete the files (todo #48).** The delegation path (`remove_from_index` → `DELETE /repos/:alias`) checked only the HTTP status: serve's handler deliberately answers 200 with `db_deleted: false` (`removed_db_locked`) when the repo is functionally removed but a transient `Arc<SharedStores>` holder outlasted the lock-class retry delete — the exact honest-reporting contract BUG2 established on the serve side. The CLI flattened that to plain success and printed "DB deleted." for files that were still on disk. `try_delegate_rm_to_serve` now parses the response payload and returns a `ServeRemoval` (alias, path, `db_deleted`, `db_delete_error`); on the locked outcome the CLI prints a warning naming the leftover directory and the reason plus the recovery (re-run the same command — with the alias gone from repos.json the next run skips delegation and finishes via the local file-delete path) instead of a false success line. The outcome stays `Ok` deliberately: serve has already unregistered the alias, so the Layer-1 "repos.json was NOT modified" error text would be false here. Regression test pins the IPC boundary: a 200/`removed_db_locked` mock serve must surface `db_deleted == false` plus the carried reason (mutation-verified). The `remove_order_tests` helper now also pins `CODESEARCH_SERVE_HOST` to loopback — the delegation resolves its probe host from that var, so a stray value could send a test's DELETE somewhere other than the listener it bound.

## [1.3.0] - 2026-08-15

### Added
Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "codesearch"
version = "1.3.0"
version = "1.3.3"
edition = "2021"
authors = ["codesearch contributors"]
license = "Apache-2.0"
Expand Down
Loading