Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
980 commits
Select commit Hold shift + click to select a range
c32123e
refactor(config): derive limits with shared stringify macro
ahundt Jul 22, 2026
4950cc7
feat(benchmark): emit versioned experiment fact tables
ahundt Jul 22, 2026
79ae943
config: Set automatic dependency-source indexing disabled by default
ahundt Jul 22, 2026
8d415b9
benchmark: Pin dependency-source indexing profiles and isolated envir…
ahundt Jul 22, 2026
d08ecbe
fix(benchmark): reject boolean numeric experiment fields
ahundt Jul 22, 2026
8d0816d
fix(depindex): bound invalid automatic dependency limits
ahundt Jul 22, 2026
d030c8f
fix(mcp): reject integer arguments outside int range
ahundt Jul 22, 2026
1c68799
feat(indexing): select correctness-first reindex policies
ahundt Jul 23, 2026
b2fa24a
fix(benchmarks): isolate config spelling probes
ahundt Jul 23, 2026
6eb10de
feat(benchmarks): bind v2 facts to terminology registry
ahundt Jul 23, 2026
c1e2ba1
feat(benchmarks): derive contract-bound comparison facts
ahundt Jul 24, 2026
603e516
refactor(benchmarks): consolidate canonical assets under benchmarks
ahundt Jul 24, 2026
486a363
fix(benchmarks): restore upstream scripts and resolve retained plans
ahundt Jul 24, 2026
9eb20b3
fix(depindex): bound unlimited discovery allocations
ahundt Jul 24, 2026
dc31d0f
refactor(benchmarks): hoist report helpers and harden process cleanup
ahundt Jul 24, 2026
19a4dec
fix(pipeline): preserve fresh re-export metadata in exact deltas
ahundt Jul 24, 2026
f29c105
fix(cli): list check_index_coverage in main help
ahundt Jul 24, 2026
138d287
fix(cli): normalize retained dependency limits in hook guidance
ahundt Jul 24, 2026
36698e5
fix(benchmarks): omit duplicate minimal-indexing experiment cells
ahundt Jul 24, 2026
e8398d5
fix(docs): name the active minimal-indexing benchmark profile
ahundt Jul 24, 2026
ea422a5
style(benchmarks): format report test entry-point paths
ahundt Jul 24, 2026
e837baa
fix(depindex): enforce and report automatic dependency bounds
ahundt Jul 24, 2026
8ab7120
docs: remove stale Go wrapper and MCP tool count
ahundt Jul 24, 2026
fdce258
fix(pipeline): reject weak calls to data symbols
ahundt Jul 24, 2026
0d8d60c
style(mcp): restore hidden-tool schema block indentation
ahundt Jul 24, 2026
7e10bae
test(pipeline): reject data-target subscript call evidence
ahundt Jul 24, 2026
a15031e
feat(merge): combine daemon runtime with graph coverage
ahundt Jul 25, 2026
2f4b28a
fix(tests): terminate Windows subprocess skip macro
ahundt Jul 25, 2026
d5637d9
fix(subprocess): classify zombie-only groups after force reap
ahundt Jul 25, 2026
6a5ba5c
fix(depindex): define manifest table once
ahundt Jul 25, 2026
36533ba
fix(build): analyze tests with gated API seams
ahundt Jul 25, 2026
132db9c
fix(tests): skip fork latency canary under TSan
ahundt Jul 25, 2026
8144bd3
fix(build): scope Guard Malloc to owning suites
ahundt Jul 25, 2026
cd812d0
test(pipeline): preserve graph on unreadable coverage
ahundt Jul 25, 2026
afd2d2c
fix(metadata): persist complete dirty-file observations
ahundt Jul 25, 2026
d04e493
refactor(git): execute repository queries with literal argv
ahundt Jul 25, 2026
9c0e2b1
test(c-lsp): resolve xxhash fixture from runner image
ahundt Jul 25, 2026
1287e37
test(py-lsp): measure scale guard with process CPU time
ahundt Jul 25, 2026
e59b923
fix(platform): reject truncated environment values
ahundt Jul 25, 2026
7067f57
fix(mcp): use configured auto-index admission helper
ahundt Jul 25, 2026
0d8aede
fix(build): give analyzer the test harness include path
ahundt Jul 25, 2026
369ac89
fix(build): propagate Clang analyzer failures
ahundt Jul 25, 2026
d1c7795
build(test-syntax): reuse the real C test flags
ahundt Jul 25, 2026
e06d2a2
test(mcp): keep environ declaration POSIX-only
ahundt Jul 25, 2026
fecde17
fix(build): preserve leak command status under /bin/sh
ahundt Jul 25, 2026
3a0aa48
refactor(json): share exact escaped-length accounting
ahundt Jul 25, 2026
fcab139
refactor(config): share query output byte definitions
ahundt Jul 25, 2026
8cad620
fix(cypher): separate output caps from working budgets
ahundt Jul 26, 2026
41d60e9
fix(depindex): rank from every project import
ahundt Jul 26, 2026
7107418
fix(depindex): stream every project import edge
ahundt Jul 26, 2026
95b7866
fix(depindex): stream every dependency module
ahundt Jul 26, 2026
668a7d0
fix(mcp): list every indexed dependency
ahundt Jul 26, 2026
2f4403b
fix(store): rank every fallback package before preview
ahundt Jul 26, 2026
8bae19e
fix(cli): state query budget exhaustion as an MCP error
ahundt Jul 26, 2026
89fa0b9
fix(store): select route preview after filtering
ahundt Jul 26, 2026
879a53c
fix(store): classify layers from exact boundaries
ahundt Jul 26, 2026
c0fd3fa
fix(store): retain every file-tree directory
ahundt Jul 26, 2026
a752956
fix(store): omit prefix clusters beyond node budget
ahundt Jul 26, 2026
3851cfe
fix(cypher): bind variables beyond inline storage
ahundt Jul 26, 2026
319fb7a
fix(pipeline): scan complete cross-repo edge streams
ahundt Jul 26, 2026
0c41e7a
refactor(config): share search preview defaults
ahundt Jul 26, 2026
f8b413b
fix(pipeline): match complete Kubernetes selector sets
ahundt Jul 26, 2026
eccd11b
fix(extraction): resolve channel constants past 256 bindings
ahundt Jul 26, 2026
707c0ed
fix(watcher): persist dirty paths past 4096 entries
ahundt Jul 26, 2026
838626f
test(main): select env-filtered suites from canonical registry
ahundt Jul 26, 2026
046baa4
fix(extraction): report every detected parse-error region
ahundt Jul 26, 2026
11c90a3
fix(semantic): reject incomplete corpus batches
ahundt Jul 26, 2026
bf58de7
fix(semantic): tokenize complete function metadata
ahundt Jul 26, 2026
619d3d3
fix(minhash): hash complete function syntax
ahundt Jul 26, 2026
d990e8a
fix(semantic): report bounded candidate omissions
ahundt Jul 26, 2026
43ce3a9
fix(semantic): rank bounded LSH candidates by band evidence
ahundt Jul 26, 2026
2d0808f
fix(similarity): report bounded LSH query omissions
ahundt Jul 26, 2026
3cb7d92
fix(fqn): retain path components past inline storage
ahundt Jul 26, 2026
927fcfb
fix(githistory): retain all temporal file paths
ahundt Jul 26, 2026
f340698
fix(githistory): rank bounded coupling edges deterministically
ahundt Jul 26, 2026
c10470a
fix(githistory): retain exact coupling paths
ahundt Jul 26, 2026
493e104
feat(githistory): configure coupling output budget
ahundt Jul 26, 2026
1cd3466
fix(extraction): retain infra bindings past eight entries
ahundt Jul 26, 2026
41ec1b6
fix(extraction): retain every Go result type
ahundt Jul 26, 2026
e242aca
fix(cypher): execute literal UNWIND bindings
ahundt Jul 26, 2026
b97256d
fix(extraction): retain base classes beyond 15
ahundt Jul 26, 2026
d5f6ecf
fix(extraction): retain scopes beyond 64
ahundt Jul 26, 2026
817708d
fix(extraction): retain complexity beyond 4095 branches
ahundt Jul 26, 2026
98297ec
fix(extraction): retain imports after 16 script blocks
ahundt Jul 26, 2026
e85a91c
fix(ast-profile): remove 2048-frame traversal cap
ahundt Jul 26, 2026
4ec3d34
fix(extraction): resolve Nickel calls past 8 wrappers
ahundt Jul 26, 2026
e36dcde
test(pipeline): preserve dirty ledger after capped fallback failure
ahundt Jul 26, 2026
3e011a0
fix(pipeline): cancel index requests waiting on global lock
ahundt Jul 26, 2026
2346459
test(mcp): assert sync autoindex leaves rank views complete
ahundt Jul 26, 2026
8d1f3e0
fix(pipeline): export artifacts after graph publication
ahundt Jul 26, 2026
d9345ab
fix(cli): migrate retired config spellings transactionally
ahundt Jul 26, 2026
82269dd
fix(benchmarks): parse tool payload after MCP update notice
ahundt Jul 26, 2026
89ea077
fix(benchmarks): read worker metrics from daemon log
ahundt Jul 26, 2026
01167d7
fix(semantic): scan escaped JSON metadata to closing delimiters
ahundt Jul 27, 2026
fbc3208
fix(search): aggregate summary facets across every filtered node
ahundt Jul 27, 2026
111d426
fix(mcp): attach project status to the first tool response
ahundt Jul 27, 2026
c51e5cb
fix(extract,mcp): retain pointer returns and exact signature status
ahundt Jul 27, 2026
b3fd2f3
fix(cli): distinguish activation refusal states
ahundt Jul 27, 2026
a28133a
fix(extract,mcp): retain cfg predicates and report rank state
ahundt Jul 27, 2026
e332a1c
fix(mcp): retain auto-index recovery in project errors
ahundt Jul 27, 2026
bad6493
fix(mcp): expose stale architecture status in TOON
ahundt Jul 27, 2026
c3b5b05
fix(mcp): omit stale ranks from architecture resources
ahundt Jul 27, 2026
8f679a2
fix(mcp): resolve session store for first inventory context
ahundt Jul 27, 2026
e11a127
fix(mcp): let parent own supervised index context
ahundt Jul 27, 2026
f24ef08
fix(mcp): name visible source tool in initialize
ahundt Jul 27, 2026
e4f8328
fix(rust): exclude macro and ambiguous member CALLS edges
ahundt Jul 27, 2026
87c8fdd
fix(mcp): bind first index context to published project
ahundt Jul 27, 2026
917ed85
fix(mcp): return recovery metadata for missing indexes
ahundt Jul 27, 2026
c6e4b6f
fix(benchmarks): clean invalidated candidate objects
ahundt Jul 27, 2026
7dac25f
fix(benchmarks): record Makefile compiler identity
ahundt Jul 27, 2026
34a4740
fix(benchmarks): record self-dogfood comparison manifests
ahundt Jul 27, 2026
f847c98
fix(cli): stop advertising deprecated inline JSON
ahundt Jul 27, 2026
17eba00
fix(config): use live daemon settings and shared architecture defaults
ahundt Jul 27, 2026
a4676e4
src/mcp/mcp.c: preserve UTF-8 in search_code output
ahundt Jul 27, 2026
5d3ac0c
fix(mcp): parse current search_graph JSON in smoke harness
ahundt Jul 27, 2026
5c94d53
fix(smoke): bind fault baselines to worker argv
ahundt Jul 27, 2026
638186b
fix(benchmarks): select CLI transport for active-daemon matrices
ahundt Jul 27, 2026
c018539
feat(benchmarks): materialize ref candidates and explicit CBM environ…
ahundt Jul 27, 2026
ae6e12f
feat(benchmarks): isolate exact-build matrices in named Docker volumes
ahundt Jul 27, 2026
f688d04
fix(sqlite_writer): initialize metadata page roots for GCC
ahundt Jul 27, 2026
937bb79
fix(benchmarks): retain container manifests and failed build logs
ahundt Jul 27, 2026
c72bfb1
fix(benchmarks): copy manifests below the results-volume root
ahundt Jul 27, 2026
4b515bb
fix(benchmarks): isolate named histories by measurement cohort
ahundt Jul 27, 2026
e3e1bf9
feat(benchmarks): record shared C and C++ build settings
ahundt Jul 27, 2026
f1428a9
fix(benchmarks): key Docker resumes by Git refs
ahundt Jul 27, 2026
20ad7e8
feat(benchmarks): search moved candidate worktree roots
ahundt Jul 27, 2026
0590236
feat(benchmarks): default Docker cohorts to Clang 18
ahundt Jul 27, 2026
e2ff67f
perf(index): batch Git context and bound descriptor-close work
ahundt Jul 28, 2026
ef1be2a
pipeline.c, test_pipeline.c: run Git scan concurrently with graph pos…
ahundt Jul 28, 2026
e99fd0c
run_benchmark.py: select the primary DB beside dependency indexes
ahundt Jul 28, 2026
3c00500
run_container_experiment.py: derive build jobs from Docker CPU budget
ahundt Jul 28, 2026
56f2636
sha256: process complete input blocks without per-byte copies
ahundt Jul 28, 2026
842cfd7
perf(daemon): cache unchanged exact build fingerprints
ahundt Jul 28, 2026
b9c43ab
fix(mcp): copy normalized coverage scope strings
ahundt Jul 28, 2026
eb5e822
fix(mcp): expose advanced startup catalog to Codex
ahundt Jul 28, 2026
10ee27c
fix(store): resolve active suffixes and bounded neighbors
ahundt Jul 28, 2026
1482958
fix(mcp): read snippets from active overlay spans
ahundt Jul 28, 2026
46029c8
fix(mcp): return retry state while startup indexing runs
ahundt Jul 28, 2026
172c9d7
fix(mcp): scope freshness and name search count units
ahundt Jul 28, 2026
03b31e0
fix(benchmarks): run measured Docker cohort under init
ahundt Jul 28, 2026
b4873e9
perf(daemon): remove repeated image hashes and 500 ms watcher waits
ahundt Jul 28, 2026
6e94770
fix(cli): admit daemon tool calls without global transition
ahundt Jul 28, 2026
eab75cb
fix(mcp): carry list-change notices through daemon frontend
ahundt Jul 28, 2026
6d689bd
fix(daemon): honor auto_index default at session start
ahundt Jul 28, 2026
e881a2c
fix(mcp): report zero returned rows in truncated query_graph replies
ahundt Jul 29, 2026
4d3fa48
cli.c: advertise the daemon subcommand in top-level --help
ahundt Jul 29, 2026
dc1371a
merge(upstream): combine main 560ad40d with API consolidation
ahundt Jul 29, 2026
e755ec0
src/main.c: initialize memory only in supervised CLI workers
ahundt Jul 29, 2026
454d5be
fix(smoke): parse TOON tables and reap the Phase 15 FIFO
ahundt Jul 29, 2026
86bbb78
fix(mcp): separate TOON errors from response context
ahundt Jul 29, 2026
a9a7190
fix(mcp): serialize context warnings without a leading comma
ahundt Jul 29, 2026
71614b3
test(windows): verify watcher uses the shared git.exe resolver
ahundt Jul 29, 2026
c051d1e
fix(runtime): validate fingerprint cache epochs and retain exact paths
ahundt Jul 29, 2026
af8fc69
fix(runtime): admit cross-volume fingerprint caches
ahundt Jul 29, 2026
09f310d
fix(tests): exclude POSIX MCP helpers from MinGW
ahundt Jul 29, 2026
6903a72
fix(cli): reject wrong-arch macOS Homebrew paths
ahundt Jul 29, 2026
a789887
fix(cli): honor explicit macOS install directories
ahundt Jul 29, 2026
514ae6f
merge(cli): carry macOS PATH migration into consolidated API
ahundt Jul 29, 2026
1c87709
fix(mcp): suppress release notices for dev builds
ahundt Jul 29, 2026
25e45a6
fix(daemon): initialize active image fingerprint before comparison
ahundt Jul 29, 2026
b7a0b7a
fix(lint): satisfy cppcheck 2.20 and LLVM 20 formatting
ahundt Jul 29, 2026
459351f
fix(ci): remove stale suppressions and unsafe copies
ahundt Jul 29, 2026
1c1d3ca
merge(upstream): integrate f0c65fb2 release hardening
ahundt Jul 30, 2026
77bcddd
fix(benchmarks): emit clang-format-stable terminology header
ahundt Jul 30, 2026
f4ef3a0
fix(ci): close MCP stores and publish Windows files atomically
ahundt Jul 31, 2026
0a0aa69
.gitignore: adopt upstream's root-anchored /soak*/ and /memlab-* patt…
ahundt Jul 31, 2026
1acb3bb
chore(upstream): merge main through 08f6d1d0
ahundt Jul 31, 2026
4b8b078
fix(cypher): enforce relationship-unique path matching
ahundt Jul 31, 2026
cd7bd48
perf(daemon): reuse application worker per connection
ahundt Jul 31, 2026
6808941
perf(mcp): reuse validated SQLite handle for query
ahundt Jul 31, 2026
96b1d21
fix(benchmarks): emit indexed probes in self-dogfood runs
ahundt Jul 31, 2026
9de6ab5
test(mcp): isolate request-end allocator collection
ahundt Jul 31, 2026
23f0cb9
benchmarks: retain request memory census for indexed probes
ahundt Jul 31, 2026
9d105cd
test(mcp): isolate request-scoped SQLite teardown
ahundt Jul 31, 2026
98db152
benchmarks: retain failed index worker logs
ahundt Jul 31, 2026
953f298
fix(store): identify atomic publication failure stages
ahundt Jul 31, 2026
24b8897
fix(benchmarks): index archived worker-log facts
ahundt Jul 31, 2026
91fb439
benchmarks: attribute indexed MCP server spans
ahundt Jul 31, 2026
142cd9b
benchmarks: split indexed request ownership costs
ahundt Jul 31, 2026
e032157
benchmarks: attribute index_status query phases
ahundt Jul 31, 2026
cfb1b10
perf(store): materialize exact project graph statistics
ahundt Jul 31, 2026
b465147
test(cli): use UTF-8 filesystem observers
ahundt Aug 1, 2026
4dc4d98
feat(core): merge upstream with exact Cypher and atomic PageRank
ahundt Aug 2, 2026
a1053d0
fix(store): return empty semantic results without vector tables
ahundt Aug 2, 2026
0049c75
fix(merge): preserve UTF-8 paths and query response formats
ahundt Aug 2, 2026
bdd2b95
fix(platform): isolate Linux group scans from proc churn
ahundt Aug 2, 2026
d1e76ed
fix(platform): avoid daemon probe peers and Windows temp overflow
ahundt Aug 2, 2026
03d37bb
fix(path-alias): read CRLF configs and create long fixtures
ahundt Aug 2, 2026
49cb260
benchmarks: rank-quality campaign harness with container-staged corpora
ahundt Aug 3, 2026
b21ca9c
benchmarks: refuse to clone over an existing repository; isolate the …
ahundt Aug 3, 2026
a3d4d2c
rank probes: rename utility_contamination to leaf_hub_rate; H5 is not…
ahundt Aug 3, 2026
6e26f40
rank probes: add the public-API label so H1/H5 have a fan-in-independ…
ahundt Aug 3, 2026
371f9aa
public-API label: read package re-exports, not just the underscore rule
ahundt Aug 3, 2026
ba603e8
benchmarks(rank): measure scorer quality and runtime configuration ev…
ahundt Aug 3, 2026
86b5692
benchmarks(campaign_specs.py): expose nine-cell Docker matrix
ahundt Aug 3, 2026
ee441a0
docs(notes): record resumed search_graph transport failure
ahundt Aug 3, 2026
8898478
fix(run_container_experiment.py): key runsets by runtime image
ahundt Aug 3, 2026
f570ae7
feat(benchmarks): route Docker through run_experiments --container
ahundt Aug 3, 2026
a8a9480
fix(benchmarks): route rank receipts through run_experiments
ahundt Aug 3, 2026
088b3de
fix(benchmarks): hash attempt receipts in report inputs
ahundt Aug 3, 2026
ab8e097
feat(benchmarks): lead reports with measured config evidence
ahundt Aug 3, 2026
fdf7afd
docs(mcp): record stale spans and restart recovery
ahundt Aug 3, 2026
a4e3812
fix(benchmarks): discard verified Docker work scratch
ahundt Aug 4, 2026
cbc9331
docs(mcp): record stale Python get_code spans
ahundt Aug 4, 2026
238dd74
fix(mcp): exclude sentinel-path builtins from key_functions default
ahundt Aug 4, 2026
e4ef79c
fix(pagerank): keep synthetic builtin stubs out of every rank view
ahundt Aug 4, 2026
081c528
fix(mcp): withhold stale canonical snippet spans instead of wrong code
ahundt Aug 4, 2026
41fccac
docs(notes): record D-001 stale get_code span fix in dogfood regressi…
ahundt Aug 4, 2026
55dc5ec
docs(CLAUDE.md): state DCO sign-off requirement and check-dco.sh enfo…
ahundt Aug 4, 2026
8455786
feat(api): combine exact publication, LSP, and workspace contracts
ahundt Aug 8, 2026
cd412fa
feat(cli): ship SHA-256-pinned integration templates beside binaries
ahundt Aug 8, 2026
7d3f0cf
merge(main): externalize UI assets without dropping dep-index or roll…
ahundt Aug 9, 2026
779717e
Makefile.cbm: link UI asset parser into nosan test runner
ahundt Aug 9, 2026
7486ba1
internal/cbm/extract_unified.c: stop YAML scans during JSON walks
ahundt Aug 9, 2026
9d8b81a
notes/2026-08-09: record 10cb0e03 merge and 41-run bounds
ahundt Aug 9, 2026
502ad63
source-safety: catch macOS grep gaps and bound JVM import restore
ahundt Aug 9, 2026
96ebddf
tests/test_cypher.c: declare POSIX waitpid APIs
ahundt Aug 9, 2026
13ce57f
pipeline.c,test_cli.c: retain prepared userconfig and run portable Wi…
ahundt Aug 9, 2026
9dfd68f
tests/test_cli.c: align activation-order waits with 30-second child b…
ahundt Aug 9, 2026
e245da8
runtime.c,test_daemon_runtime.c: retain accepted cold-start clients
ahundt Aug 9, 2026
5445379
merge-assessment.md: record 8,649 tests and c810bf4d install
ahundt Aug 9, 2026
05ad1eb
test_makefile_logged_command.sh: retry BSD mktemp setup
ahundt Aug 9, 2026
022da4b
test_daemon_stability.py: print cold-storm daemon log tail
ahundt Aug 9, 2026
05609e8
tests/test_cli.c: bypass binary staging in asset lease race
ahundt Aug 9, 2026
c4ff23e
test_worker_error_response.sh: print daemon log on startup failure
ahundt Aug 9, 2026
3562111
test_cli.c,run-tests-parallel.sh: bind uninstall fixtures and print s…
ahundt Aug 9, 2026
9953c32
test_framework.h,test_incremental.c: detect MemorySanitizer builds
ahundt Aug 9, 2026
32bc953
feat(release): embed UI/templates and retain dependency indexing
ahundt Aug 10, 2026
3957880
fix(ui): binary-search assets and reject daemon port prefixes
ahundt Aug 10, 2026
8df9f9d
perf(extraction): make Python class filtering linear
ahundt Aug 10, 2026
5504dcf
src/cli/cli.c: retain released streamlined SessionStart hook
ahundt Aug 10, 2026
8208add
notes/2026-08-09: record 4ed8d384 merge gates and bounds
ahundt Aug 10, 2026
1f8ccb7
notes/2026-08-09: record installed binary 30ed57ee
ahundt Aug 10, 2026
29c7a2f
merge: integrate upstream ad010b16 smoke composition
ahundt Aug 10, 2026
90a25f5
notes/2026-08-09: record ad010b16 workflow refresh
ahundt Aug 10, 2026
a2e019f
src/{main,pipeline,ui}: satisfy clang-format checks
ahundt Aug 10, 2026
8778050
Merge upstream aa6d740a: report OS-truth diagnostics RSS
ahundt Aug 10, 2026
941ced9
notes/merge assessment: record aa6d740a parent matrix
ahundt Aug 10, 2026
1a64a1f
scripts/smoke-test.sh: match --standard rejection text
ahundt Aug 10, 2026
be24566
scripts/run-test-wave.py: enumerate dead-leader children natively
ahundt Aug 10, 2026
f0627b1
application.c,mcp.c: construct daemon sessions without temporary SQLi…
ahundt Aug 10, 2026
a60199a
tests/test_cli.c: exercise streamlined hook migration on Windows
ahundt Aug 10, 2026
96cf097
notes/2026-08-09: record f062 daemon bounds and parent benchmarks
ahundt Aug 10, 2026
add6e20
src/main.c: defer empty runtime-parent handling to bootstrap
ahundt Aug 10, 2026
8b6d321
notes/2026-08-09: record add6e20 Windows and install gates
ahundt Aug 10, 2026
caf8128
tests/test_py_lsp_bench.c: retain counters with upstream 30 s livenes…
ahundt Aug 10, 2026
9dd18e5
notes/2026-08-09: record caf81288 exact-parent benchmark matrix
ahundt Aug 10, 2026
2eb6f73
tests/test_daemon_open_readiness*.py: resolve Windows .exe sibling
ahundt Aug 10, 2026
f7f9d96
tests/test_daemon_open_readiness.py: await Windows daemon process exit
ahundt Aug 10, 2026
8fa5df2
daemon.c,runtime.c: retain accepted slow-HELLO clients
ahundt Aug 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
36 changes: 36 additions & 0 deletions .clangd
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# clangd configuration for codebase-memory-mcp
#
# Mirrors the include paths and defines from Makefile.cbm CFLAGS_COMMON so
# clangd can resolve all headers without needing compile_commands.json.
# Paths are relative to the project root (where this file lives).
#
# Works with both clang (macOS/Linux) and gcc — clangd uses these flags
# directly regardless of which compiler is selected for the build.

CompileFlags:
Add:
- -std=c11
- -D_DEFAULT_SOURCE
# Project source headers
- -Isrc
# Vendored libraries: yyjson, xxhash, sqlite3 wrappers
- -Ivendored
- -Ivendored/sqlite3
- -Ivendored/mimalloc/include
# Internal cbm extraction layer and tree-sitter runtime
- -Iinternal/cbm
- -Iinternal/cbm/vendored/ts_runtime/include
# Remove flags clangd cannot handle (sanitizer, link flags)
Remove:
- -fsanitize=*
- -fno-omit-frame-pointer
- -lstdc++
- -lpthread
- -lm
- -lz

Diagnostics:
# Suppress false-positive "implicit declaration" warnings caused by
# clangd analysing files in isolation without the full TU context.
Suppress:
- pp_file_not_found
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ body:
attributes:
label: Logs
description: |
Relevant log output (stderr of the binary; for the UI variant also
Relevant log output (stderr of the binary; for UI issues also
`GET /api/logs`). Will be auto-formatted as code — no backticks needed.
Please check for private paths/strings before pasting.
render: text
Expand Down
12 changes: 12 additions & 0 deletions .github/workflows/_lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,18 @@ jobs:
- name: No-skips policy (tests pass or fail)
run: bash scripts/check-no-test-skips.sh

# Runs before the C toolchain setup so a harness regression fails in seconds
# rather than after the cppcheck build. Pure stdlib: no binary, no network,
# synthetic SQLite fixtures and the checked-in manifests only.
- name: Benchmark harness tests
run: python3 benchmarks/test_rank_quality.py

# The allowlist is generated from CBM_CONFIG_REGISTRY and the cbm_config_get_*
# call sites, so a config change that does not regenerate it is caught here
# instead of silently letting a stale key through benchmark validation.
- name: Benchmark config-key allowlist is current
run: python3 benchmarks/generate_config_keys.py --check

- name: Install build deps
run: sudo apt-get update && sudo apt-get install -y zlib1g-dev cmake

Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -534,7 +534,7 @@ jobs:
run: repo/scripts/ci/verify-shard-union.sh manifests

# Windows product-surface regression guards. Distinct from test-windows above
# (the sanitizer C suite): these drive a real product binary + external UI pack
# (the sanitizer C suite): these drive a real product binary with embedded UI
# over stdio / CLI / HTTP and fail if a Windows bug already fixed on main comes
# back -- non-ASCII repo paths dropping definitions (#636/#357, fixed by #700),
# the PreToolUse hook augmenter no-op on drive-letter cwd (#618, fixed by #619),
Expand Down Expand Up @@ -571,9 +571,9 @@ jobs:
ccache-guards-${{ github.ref }}-
ccache-guards-

- name: Build product binary with external UI assets and guard seams
- name: Build product binary with embedded UI assets and guard seams
shell: msys2 {0}
# --with-ui builds the frontend and its content-addressed asset pack, so
# --with-ui builds and embeds the frontend, so
# the drive-picker guard's HTTP UI is available. Functional gate only
# (no sanitizers).
run: scripts/build.sh --with-ui CC=clang CXX=clang++ TEST_SEAMS=1
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/dry-run.yml
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ jobs:
path: ${{ runner.temp }}/release-archives

# Same extraction the release verify job performs. VirusTotal receives
# only extracted files and unpacked UI assets, never .tar.gz/.zip containers.
# only extracted release objects, never .tar.gz/.zip containers.
- name: Extract archive artifacts
run: |
scripts/ci/extract-release-archives.sh "$RUNNER_TEMP/release-archives" binaries \
Expand Down
51 changes: 40 additions & 11 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,10 @@ bin/
# Test artifacts
*.test
*.out
*.log
coverage.txt
# Clang static analyzer (make -f Makefile.cbm test-analyze) per-file reports
*.plist

# Test fixture temp dirs (created by C test suite in CWD instead of /tmp/)
cbm_*/
Expand All @@ -26,6 +29,16 @@ cli-*/
.DS_Store
Thumbs.db

# Git worktrees (created by Claude Code subagents)
.worktrees/

# Runtime/session artifacts
session_project
project
project|params.project
conductor/
with

# Database files (local cache)
*.db
*.db-wal
Expand All @@ -40,9 +53,11 @@ Thumbs.db
# Local project memory (Claude Code auto-memory)
memory/
reference/
.claude/

# Local-only scratch / session notes (never pushed)
private/
notes/

# Build artifacts
build/
Expand All @@ -54,11 +69,23 @@ src/ui/embedded_assets.c

# Generated reports
BENCHMARK_REPORT.md
benchmark-results/
*.facts/
TEST_PLAN.md
scripts/autotune_results.json
CHANGELOG.md

# Soak test output
# Local memory/soak outputs (uploaded as CI artifacts, never committed)
memlab-*.jsonl
soak-results/
soak-results-query-leak/
# ...and ANY ad-hoc run directory at the repo root. The two exact names above did
# not match hand-named runs, so 13 soak directories and 4 memlab files (78 files
# of logs and CSVs) were committed to main by accident in 7808eee. Root-anchored
# so nothing under scripts/ or tests/ is affected — scripts/soak-legs.sh and
# scripts/soak-test.sh stay tracked.
/soak*/
/memlab-*

# LSP originality-check reference cache (scripts/check-lsp-originality.sh)
.lsp-refs/
Expand All @@ -70,13 +97,15 @@ graph-ui/.npm-cache-local/
__pycache__/
*.pyc

# Local soak-leg outputs (uploaded as CI artifacts, never committed)
soak-results/
soak-results-query-leak/
# ...and ANY ad-hoc run directory at the repo root. The two exact names above did
# not match hand-named runs, so 13 soak directories and 4 memlab files (78 files
# of logs and CSVs) were committed to main by accident in 7808eee. Root-anchored
# so nothing under scripts/ or tests/ is affected — scripts/soak-legs.sh and
# scripts/soak-test.sh stay tracked.
/soak*/
/memlab-*
# Benchmark data derived from a corpus, never authored. Test labels are generated by
# benchmarks/generate_test_labels.py from whichever checkout was measured, so a copy in
# the repository is both large and able to drift from the tree actually indexed; the
# harness derives them at run time instead. Campaign specs and rollups are likewise
# regenerated from benchmarks/campaign_specs.py and benchmarks/rank_report.py.
# NOT ignored, deliberately: benchmarks/config-keys-v1.json and
# benchmarks/config-spellings-v1.json, which are generated but checked in as allowlists
# and guarded by `generate_config_keys.py --check` in CI.
benchmarks/labels/
benchmarks/campaign-specs/
benchmarks/rollup*.json
benchmarks/rollup*.md
8 changes: 8 additions & 0 deletions .mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"mcpServers": {
"codebase-memory-mcp": {
"command": "sh",
"args": ["-c", "exec $HOME/.local/bin/codebase-memory-mcp"]
}
}
}
61 changes: 61 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# codebase-memory-mcp — Developer Notes for Claude

Every commit needs a DCO sign-off: commit with `git commit -s`; CI enforces it via `scripts/check-dco.sh` (see CONTRIBUTING.md).

Before changing capabilities or architecture, map the existing design first: look for
equivalent tools, config, helpers, metadata, algorithms, and conventions. Prefer extending
the established path over adding a parallel one. New abstractions should close a named gap
and fit the repo's ownership, allocation, threading, logging, portability, protocol I/O,
and naming patterns.

Adding a new node/edge JSON property key in `src/pipeline/*.c` or `src/git/*.c`? Add it to
the declared registry in `src/store/store.c`/`store.h` (`schema_declared_node_property_keys`/
`schema_declared_edge_property_keys`) or `tests/test_schema_declared_property_keys.c` will fail.

## Build & Test (C server)

All C targets use `Makefile.cbm`:

```bash
make -f Makefile.cbm test # build + run full test suite (ASan/UBSan)
make -f Makefile.cbm test-leak # heap leak check (see below)
make -f Makefile.cbm test-analyze # Clang static analyzer (requires clang, not gcc)
```

## Memory Leak Testing

**macOS** — uses Apple's `leaks --atExit` on a separate ASan-free binary:
```bash
make -f Makefile.cbm test-leak
# Report saved to build/c/leak-report.txt
# Target line: "Process NNNNN: 0 leaks for 0 total leaked bytes."
```

**Linux** — uses LSan via ASan env var on the regular test runner:
```bash
make -f Makefile.cbm test-leak
# Report saved to build/c/leak-report.txt
# Exit 0 = no leaks.
```

Why a separate binary on macOS: `leaks` cannot inspect processes that use a custom malloc (ASan replaces it). The `test-runner-nosan` target rebuilds without `-fsanitize` flags specifically for this purpose.

## Memory-Corruption Debugging (macOS)

For non-deterministic corruption (uninit reads, use-after-free, overruns) that ASan/TSan miss — used to investigate the custom-writer B1 bug. Both run the nosan binary (ASan replaces malloc, which defeats these libmalloc knobs); set `CBM_ONLY_SUITE=<suite>` to target a slow suite.

```bash
make -f Makefile.cbm test-memory # MallocScribble=1 + MallocPreScribble=1
# uninit reads -> 0xAA, use-after-free -> 0x55 (deterministic)
make -f Makefile.cbm test-gmalloc # Guard Malloc (libgmalloc): guard page per allocation
# allocation-owning suites; exact overrun/UAF stack
# Report saved to build/c/mem-report.txt
```

`test-memory` is the macOS MSan-equivalent for uninit reads (scribble makes them deterministic). `test-gmalloc` is the strictest — it crashes at the exact bad write, pinpointing the line. Its default suite list stays on allocation-owning in-process surfaces because macOS propagates `DYLD_INSERT_LIBRARIES` into external helpers such as `git`; use `CBM_ONLY_SUITE`/`CBM_ONLY_TEST` for a narrower probe. (No valgrind/MSan on macOS; on Linux use `-fsanitize=memory`.)

## Project Structure (C server)

Sources live under `src/`; tests under `tests/`; vendored C libs under `vendored/`.
Tree-sitter extraction and its vendored language grammars live under `internal/cbm/`.
See `CONTRIBUTING.md` for the complete source layout and contribution workflow.
88 changes: 85 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,19 +26,101 @@ The binary is output to `build/c/codebase-memory-mcp`.
scripts/test.sh
```

This builds with ASan + UBSan and runs the full C test suite. Key test files:
This is the local maintainer gate used by the project scripts. It cleans the C build, runs the
full ASan + UBSan C test suite, builds the production binary, and then runs the parent-watchdog
and security-string regression scripts. The exact test count changes as suites are added; use the
runner summary as the source of truth. Key test files:
- `tests/test_pipeline.c` — pipeline integration tests
- `tests/test_httplink.c` — HTTP route extraction and linking
- `tests/test_mcp.c` — MCP protocol and tool handler tests
- `tests/test_store_*.c` — SQLite graph store tests

Useful script options and environment:

```bash
scripts/test.sh --arch arm64 # macOS: force target architecture
scripts/test.sh CC=clang CXX=clang++ # override compiler
CBM_RUN_HANG_TEST=1 scripts/test.sh # include the slower C++ index-hang guard
```

## Run C Server Tests

The MCP server core is written in C and has its own test suite under `tests/`:

```bash
make -f Makefile.cbm test # full suite with ASan + UBSan
make -f Makefile.cbm test-tsan # thread-sensitive suites with ThreadSanitizer
make -f Makefile.cbm test-leak # heap leak check (see below)
make -f Makefile.cbm test-memory # macOS MallocScribble/PreScribble nosan run
make -f Makefile.cbm test-gmalloc # macOS Guard Malloc nosan run
make -f Makefile.cbm test-analyze # Clang static analyzer (requires clang, not gcc)
```

Focused runs are opt-in. Leave these unset for the complete suite:

```bash
CBM_ONLY_SUITE=pipeline make -f Makefile.cbm test
CBM_ONLY_SUITE=pipeline CBM_ONLY_TEST=exact build/c/test-runner
```

By default, tests isolate `CBM_CACHE_DIR` in a temporary directory so local indexes are not
polluted. Set `CBM_TEST_NO_ISOLATE=1` only when intentionally testing the user's configured cache.

### Build profiles

Use `scripts/build.sh` for a clean local release build. It is the same entry point used by the
release workflow and produces the default installable binary with `-O2`. For a faster incremental
release rebuild, use `make -f Makefile.cbm cbm`; `make -f Makefile.cbm install` installs that same
optimized artifact.

Use `scripts/test.sh` for normal development validation. Its C test binary uses `-g -O1` with
ASan and UBSan, then it builds the production binary for the parent/worker watchdog checks. Use
the dedicated `test-tsan`, `test-leak`, `test-memory`, and `test-gmalloc` targets above when
diagnosing concurrency or allocator lifetime behavior. These diagnostic binaries are not valid
performance-benchmark inputs.

For performance changes, use the canonical fact tables and comparison rules in
[`docs/BENCHMARK_EXPERIMENTS.md`](docs/BENCHMARK_EXPERIMENTS.md). Field, step,
concurrency, and lifecycle meanings come from the generated
[`docs/BENCHMARK_TERMINOLOGY.md`](docs/BENCHMARK_TERMINOLOGY.md), whose source of
truth is `benchmarks/terminology.json`.

Additional build flags follow the Makefile conventions:

```bash
make -f Makefile.cbm test SANITIZE= # disable ASan/UBSan, mainly for unsupported toolchains
make -f Makefile.cbm cbm CFLAGS_EXTRA=-DCBM_VERSION=dev
make -f Makefile.cbm cbm STATIC=1 # static link where supported
```

**Memory leak detection:**

On **macOS**, `test-leak` builds a sanitizer-free binary (`test-runner-nosan`) and runs Apple's
`leaks --atExit` on allocation-owning store, pipeline, ranker, and parallel-worker
suites. ASan replaces malloc, so the standard `test-runner` cannot be inspected by `leaks` — the
separate nosan build is required. Deliberate crash tests are excluded because Apple's debugger
stops their child processes before the parent can reap them; this includes the subprocess,
stack-overflow, MCP crash-quarantine, and HTTP socket-inheritance suites.

On **Linux**, `test-leak` runs the regular `test-runner` with `ASAN_OPTIONS=detect_leaks=1` to
activate LSan.

In both cases the full report is written to `build/c/leak-report.txt`. A clean run ends with:
```
Process NNNNN: 0 leaks for 0 total leaked bytes.
```

## Run Linter

```bash
scripts/lint.sh
make -f Makefile.cbm lint-source-safety
```

Runs clang-tidy, cppcheck, and clang-format. All must pass before committing (also enforced by pre-commit hook).
Runs clang-tidy, cppcheck, and clang-format. `lint-source-safety` runs the source guard and its
self-tests; it blocks new MCP stdout writes, insecure string APIs, raw env/filesystem calls in
reviewed paths, and other regressions that should use existing CBM helpers instead. All must pass
before committing (also enforced by pre-commit hook).

## Run Security Audit

Expand All @@ -55,7 +137,7 @@ src/
foundation/ Arena allocator, hash table, string utils, platform compat
store/ SQLite graph storage (WAL mode, FTS5)
cypher/ Cypher query → SQL translation
mcp/ MCP server (JSON-RPC 2.0 over stdio, 14 tools)
mcp/ MCP server and tools (JSON-RPC 2.0 over stdio)
pipeline/ Multi-pass indexing pipeline
pass_*.c Individual pipeline passes (definitions, calls, usages, etc.)
httplink.c HTTP route extraction (Go/Express/Laravel/Ktor/Python)
Expand Down
Loading
Loading