Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
918 commits
Select commit Hold shift + click to select a range
9dbdd4f
feat(benchmarks): pin large-repository matrix inputs
ahundt Jul 16, 2026
b90268e
fix(benchmarks): preserve candidate rank refresh defaults
ahundt Jul 16, 2026
2b3a641
fix(reports): separate stale derived views from core graph
ahundt Jul 16, 2026
63ddfbb
fix(benchmarks): observe candidate derived refresh defaults
ahundt Jul 16, 2026
d1b0969
fix(reports): expose pair lifecycle graph witnesses
ahundt Jul 17, 2026
7563a1a
fix(benchmarks): rehash retained attempt artifacts
ahundt Jul 17, 2026
2f57e60
fix(reports): label disabled pair capabilities explicitly
ahundt Jul 17, 2026
b9013b7
feat(benchmarks): score Git and HTTP graph capabilities
ahundt Jul 17, 2026
4ed31e1
fix(mcp): bind first context to queried project
ahundt Jul 18, 2026
f3363cd
fix(mcp): inject context into BM25 JSON responses
ahundt Jul 18, 2026
0ff9d05
fix(mcp): return fresh watcher and wildcard query results
ahundt Jul 18, 2026
7b31168
test(pipeline): verify incremental parity across 13 languages
ahundt Jul 18, 2026
3d46959
test(typescript): preserve calls through barrel re-exports
ahundt Jul 18, 2026
4a3e96b
test(pipeline): cover Python-Rust and Rust-TS-JS indexing
ahundt Jul 18, 2026
eb47aa9
fix(reports): scope Pareto dominance to matched workloads
ahundt Jul 18, 2026
b1d9a0c
fix(mcp): skip unfiltered rows for semantic-only JSON
ahundt Jul 18, 2026
4c77fb6
fix(config): document auto_index as enabled by default
ahundt Jul 18, 2026
7d1599c
fix(cypher): reject unconsumed query tokens
ahundt Jul 18, 2026
3e0ada5
fix(cypher): defer unbound relationship predicates
ahundt Jul 18, 2026
d9f013c
refactor(store): structured relationship facts and declared property-…
ahundt Jul 19, 2026
c3fcc00
feat(config): add default_response_format (toon/json) canonical enum …
ahundt Jul 19, 2026
b2c4c4e
feat(mcp): self-healing query_graph hints, one notification authority…
ahundt Jul 19, 2026
dec771d
fix(cypher): execute post-WITH stages without truncating fan-out
ahundt Jul 19, 2026
cbb753c
fix(cypher): preserve qualified names across aggregate WITH
ahundt Jul 19, 2026
695efb5
test(mcp): pin dynamic query schema freshness
ahundt Jul 19, 2026
0fcb7e1
test(tool): remove username from prefix collision context
ahundt Jul 19, 2026
040a789
merge(upstream): retain streamlined APIs with indexed impact analysis
ahundt Jul 19, 2026
2602cb5
fix(benchmarks): isolate PageRank autotune campaigns
ahundt Jul 19, 2026
5bce67d
test(mcp): measure capability contracts and cleanup
ahundt Jul 19, 2026
7f06ca2
fix(benchmarks): read persisted derived-view freshness
ahundt Jul 19, 2026
9e2e36a
fix(benchmarks): reject unapplied disabled capabilities
ahundt Jul 19, 2026
9face0b
fix(benchmarks): separate one-shot and repeated query latency
ahundt Jul 19, 2026
2690579
perf(store): skip active overlay CTE on clean graphs
ahundt Jul 19, 2026
aefbec0
fix(cypher): apply row caps after exact selection
ahundt Jul 19, 2026
45fbe05
fix(benchmarks): reject live caches and surface invalid runs
ahundt Jul 19, 2026
8da0a33
feat(benchmark): automate versioned resumable campaigns
ahundt Jul 19, 2026
bd40c44
fix(pipeline): retain ObjectScript macros during incremental extraction
ahundt Jul 19, 2026
b713d03
fix(pipeline): reextract ObjectScript consumers after include changes
ahundt Jul 19, 2026
52b7634
fix(smoke): correlate MCP responses across notifications
ahundt Jul 19, 2026
408194d
test(cli): assert exact query row-cap contract
ahundt Jul 19, 2026
bcb28b6
fix(cypher): preserve null and entity identity in aggregates
ahundt Jul 20, 2026
37712e6
fix(mcp): reject undeclared tool arguments
ahundt Jul 20, 2026
fcf2a31
perf(cypher): hash aggregate group lookups
ahundt Jul 20, 2026
c2e2b7b
fix(mcp): reopen query stores after external publication
ahundt Jul 20, 2026
830da0f
fix(mcp): report blocked automatic indexing by active tool mode
ahundt Jul 20, 2026
9819463
fix(mcp): refresh inline schema after external publication
ahundt Jul 20, 2026
a9f9cdb
test(mcp): align fixtures with advertised tool arguments
ahundt Jul 20, 2026
9db5d6c
fix(benchmarks): prefer exact graph equality over stale metadata
ahundt Jul 20, 2026
0f00abf
fix(install): migrate owned Claude and Codex state
ahundt Jul 20, 2026
7db50be
fix(install): restore Hermes delegation context guidance
ahundt Jul 20, 2026
0262a3a
fix(cli): restore preset dispatch and semantic smoke checks
ahundt Jul 20, 2026
7e6e867
fix(install): load Hermes hooks and Codex agent roles
ahundt Jul 21, 2026
32e5026
fix(install): pass installed binary path to Codex profile uninstall
ahundt Jul 21, 2026
15a039e
fix(install): recognize legacy enabled-true JSON MCP entries
ahundt Jul 21, 2026
8a0df63
fix(cross-repo): honor name override, report missing projects, join f…
ahundt Jul 21, 2026
13a4679
fix(install): remove YAML lock sidecars at uninstall
ahundt Jul 21, 2026
9185b98
scripts: rename benchmark entry point to run-benchmark-experiments.py
ahundt Jul 22, 2026
fff8ea2
fix(depindex): select most-imported packages when auto_dep_limit trun…
ahundt Jul 22, 2026
e3f3546
fix(mcp): run dependency auto-index on path-based auto-index branch
ahundt Jul 22, 2026
d71201d
refactor(mcp): share auto-index dependency and rank refresh
ahundt Jul 22, 2026
a2116a5
fix(cli): derive lifecycle guidance from effective config
ahundt Jul 22, 2026
839a6c9
fix(cli): derive mode guidance from active automation
ahundt Jul 22, 2026
adffb72
refactor(config): derive limits with shared stringify macro
ahundt Jul 22, 2026
5374324
feat(benchmark): emit versioned experiment fact tables
ahundt Jul 22, 2026
d942bd9
config: Set automatic dependency-source indexing disabled by default
ahundt Jul 22, 2026
f9ec660
benchmark: Pin dependency-source indexing profiles and isolated envir…
ahundt Jul 22, 2026
c376393
fix(benchmark): reject boolean numeric experiment fields
ahundt Jul 22, 2026
c691ca3
fix(depindex): bound invalid automatic dependency limits
ahundt Jul 22, 2026
fbd71a9
fix(mcp): reject integer arguments outside int range
ahundt Jul 22, 2026
6244bcd
feat(indexing): select correctness-first reindex policies
ahundt Jul 23, 2026
bbb28c0
fix(benchmarks): isolate config spelling probes
ahundt Jul 23, 2026
dc264db
feat(benchmarks): bind v2 facts to terminology registry
ahundt Jul 23, 2026
de0c86e
feat(benchmarks): derive contract-bound comparison facts
ahundt Jul 24, 2026
1141bd5
refactor(benchmarks): consolidate canonical assets under benchmarks
ahundt Jul 24, 2026
a730cc6
fix(benchmarks): restore upstream scripts and resolve retained plans
ahundt Jul 24, 2026
aafc94a
fix(depindex): bound unlimited discovery allocations
ahundt Jul 24, 2026
8562969
refactor(benchmarks): hoist report helpers and harden process cleanup
ahundt Jul 24, 2026
d98c0da
fix(pipeline): preserve fresh re-export metadata in exact deltas
ahundt Jul 24, 2026
0a1c3d6
fix(cli): list check_index_coverage in main help
ahundt Jul 24, 2026
6c61de4
fix(cli): normalize retained dependency limits in hook guidance
ahundt Jul 24, 2026
250877b
fix(benchmarks): omit duplicate minimal-indexing experiment cells
ahundt Jul 24, 2026
c8d16e7
fix(docs): name the active minimal-indexing benchmark profile
ahundt Jul 24, 2026
18ded1b
style(benchmarks): format report test entry-point paths
ahundt Jul 24, 2026
3d13b00
fix(depindex): enforce and report automatic dependency bounds
ahundt Jul 24, 2026
92e3490
docs: remove stale Go wrapper and MCP tool count
ahundt Jul 24, 2026
524b6b6
fix(pipeline): reject weak calls to data symbols
ahundt Jul 24, 2026
ad9b173
style(mcp): restore hidden-tool schema block indentation
ahundt Jul 24, 2026
be89d49
test(pipeline): reject data-target subscript call evidence
ahundt Jul 24, 2026
9de81dd
feat(merge): combine daemon runtime with graph coverage
ahundt Jul 25, 2026
0321107
fix(tests): terminate Windows subprocess skip macro
ahundt Jul 25, 2026
3fb199a
fix(subprocess): classify zombie-only groups after force reap
ahundt Jul 25, 2026
5a1e97c
fix(depindex): define manifest table once
ahundt Jul 25, 2026
b224a29
fix(build): analyze tests with gated API seams
ahundt Jul 25, 2026
1f830ea
fix(tests): skip fork latency canary under TSan
ahundt Jul 25, 2026
8928fc1
fix(build): scope Guard Malloc to owning suites
ahundt Jul 25, 2026
3ba391b
test(pipeline): preserve graph on unreadable coverage
ahundt Jul 25, 2026
ef9f1a8
fix(metadata): persist complete dirty-file observations
ahundt Jul 25, 2026
4c371b0
refactor(git): execute repository queries with literal argv
ahundt Jul 25, 2026
c9c7d6e
test(c-lsp): resolve xxhash fixture from runner image
ahundt Jul 25, 2026
151e473
test(py-lsp): measure scale guard with process CPU time
ahundt Jul 25, 2026
dce2b83
fix(platform): reject truncated environment values
ahundt Jul 25, 2026
e03c8b4
fix(mcp): use configured auto-index admission helper
ahundt Jul 25, 2026
f9df3b4
fix(build): give analyzer the test harness include path
ahundt Jul 25, 2026
faf4a7d
fix(build): propagate Clang analyzer failures
ahundt Jul 25, 2026
d990565
build(test-syntax): reuse the real C test flags
ahundt Jul 25, 2026
10596fa
test(mcp): keep environ declaration POSIX-only
ahundt Jul 25, 2026
40cabf9
fix(build): preserve leak command status under /bin/sh
ahundt Jul 25, 2026
9329652
refactor(json): share exact escaped-length accounting
ahundt Jul 25, 2026
99ed46e
refactor(config): share query output byte definitions
ahundt Jul 25, 2026
271a922
fix(cypher): separate output caps from working budgets
ahundt Jul 26, 2026
0c7a920
fix(depindex): rank from every project import
ahundt Jul 26, 2026
2f80ea0
fix(depindex): stream every project import edge
ahundt Jul 26, 2026
a293a60
fix(depindex): stream every dependency module
ahundt Jul 26, 2026
bb62d82
fix(mcp): list every indexed dependency
ahundt Jul 26, 2026
181277e
fix(store): rank every fallback package before preview
ahundt Jul 26, 2026
1b18094
fix(cli): state query budget exhaustion as an MCP error
ahundt Jul 26, 2026
d2ea729
fix(store): select route preview after filtering
ahundt Jul 26, 2026
12d2ab0
fix(store): classify layers from exact boundaries
ahundt Jul 26, 2026
e9b4d73
fix(store): retain every file-tree directory
ahundt Jul 26, 2026
bfb13ba
fix(store): omit prefix clusters beyond node budget
ahundt Jul 26, 2026
a3c2909
fix(cypher): bind variables beyond inline storage
ahundt Jul 26, 2026
7ec5893
fix(pipeline): scan complete cross-repo edge streams
ahundt Jul 26, 2026
b25b323
refactor(config): share search preview defaults
ahundt Jul 26, 2026
c8b9297
fix(pipeline): match complete Kubernetes selector sets
ahundt Jul 26, 2026
65d4bee
fix(extraction): resolve channel constants past 256 bindings
ahundt Jul 26, 2026
131f51d
fix(watcher): persist dirty paths past 4096 entries
ahundt Jul 26, 2026
433c891
test(main): select env-filtered suites from canonical registry
ahundt Jul 26, 2026
d457d25
fix(extraction): report every detected parse-error region
ahundt Jul 26, 2026
08d4d31
fix(semantic): reject incomplete corpus batches
ahundt Jul 26, 2026
d869568
fix(semantic): tokenize complete function metadata
ahundt Jul 26, 2026
887e603
fix(minhash): hash complete function syntax
ahundt Jul 26, 2026
1e3b114
fix(semantic): report bounded candidate omissions
ahundt Jul 26, 2026
c1e1e50
fix(semantic): rank bounded LSH candidates by band evidence
ahundt Jul 26, 2026
d93bdc2
fix(similarity): report bounded LSH query omissions
ahundt Jul 26, 2026
f32543b
fix(fqn): retain path components past inline storage
ahundt Jul 26, 2026
20a9f11
fix(githistory): retain all temporal file paths
ahundt Jul 26, 2026
e63af9d
fix(githistory): rank bounded coupling edges deterministically
ahundt Jul 26, 2026
723b1e9
fix(githistory): retain exact coupling paths
ahundt Jul 26, 2026
7bdbedd
feat(githistory): configure coupling output budget
ahundt Jul 26, 2026
4b6042c
fix(extraction): retain infra bindings past eight entries
ahundt Jul 26, 2026
b95c230
fix(extraction): retain every Go result type
ahundt Jul 26, 2026
ec96ccf
fix(cypher): execute literal UNWIND bindings
ahundt Jul 26, 2026
791b8ad
fix(extraction): retain base classes beyond 15
ahundt Jul 26, 2026
6ab4a57
fix(extraction): retain scopes beyond 64
ahundt Jul 26, 2026
c210209
fix(extraction): retain complexity beyond 4095 branches
ahundt Jul 26, 2026
5e74c27
fix(extraction): retain imports after 16 script blocks
ahundt Jul 26, 2026
75270b9
fix(ast-profile): remove 2048-frame traversal cap
ahundt Jul 26, 2026
95e11fe
fix(extraction): resolve Nickel calls past 8 wrappers
ahundt Jul 26, 2026
1c3addf
test(pipeline): preserve dirty ledger after capped fallback failure
ahundt Jul 26, 2026
ea4bc07
fix(pipeline): cancel index requests waiting on global lock
ahundt Jul 26, 2026
74e8803
test(mcp): assert sync autoindex leaves rank views complete
ahundt Jul 26, 2026
283fd38
fix(pipeline): export artifacts after graph publication
ahundt Jul 26, 2026
fa78d0a
fix(cli): migrate retired config spellings transactionally
ahundt Jul 26, 2026
c1cea70
fix(benchmarks): parse tool payload after MCP update notice
ahundt Jul 26, 2026
0225574
fix(benchmarks): read worker metrics from daemon log
ahundt Jul 26, 2026
643e4f6
fix(semantic): scan escaped JSON metadata to closing delimiters
ahundt Jul 27, 2026
adc6778
fix(search): aggregate summary facets across every filtered node
ahundt Jul 27, 2026
5b55216
fix(mcp): attach project status to the first tool response
ahundt Jul 27, 2026
f43e5e2
fix(extract,mcp): retain pointer returns and exact signature status
ahundt Jul 27, 2026
6e20027
fix(cli): distinguish activation refusal states
ahundt Jul 27, 2026
2bb45a8
fix(extract,mcp): retain cfg predicates and report rank state
ahundt Jul 27, 2026
46c9683
fix(mcp): retain auto-index recovery in project errors
ahundt Jul 27, 2026
e0cc345
fix(mcp): expose stale architecture status in TOON
ahundt Jul 27, 2026
e365e22
fix(mcp): omit stale ranks from architecture resources
ahundt Jul 27, 2026
15d1c55
fix(mcp): resolve session store for first inventory context
ahundt Jul 27, 2026
610f810
fix(mcp): let parent own supervised index context
ahundt Jul 27, 2026
c442721
fix(mcp): name visible source tool in initialize
ahundt Jul 27, 2026
d85104e
fix(rust): exclude macro and ambiguous member CALLS edges
ahundt Jul 27, 2026
2bdf324
fix(mcp): bind first index context to published project
ahundt Jul 27, 2026
776ae51
fix(mcp): return recovery metadata for missing indexes
ahundt Jul 27, 2026
891b524
fix(benchmarks): clean invalidated candidate objects
ahundt Jul 27, 2026
6dc7173
fix(benchmarks): record Makefile compiler identity
ahundt Jul 27, 2026
a977315
fix(benchmarks): record self-dogfood comparison manifests
ahundt Jul 27, 2026
ab0b604
fix(cli): stop advertising deprecated inline JSON
ahundt Jul 27, 2026
cab85eb
fix(config): use live daemon settings and shared architecture defaults
ahundt Jul 27, 2026
26b54dc
src/mcp/mcp.c: preserve UTF-8 in search_code output
ahundt Jul 27, 2026
87910b7
fix(mcp): parse current search_graph JSON in smoke harness
ahundt Jul 27, 2026
03fd53d
fix(smoke): bind fault baselines to worker argv
ahundt Jul 27, 2026
ff7d284
fix(benchmarks): select CLI transport for active-daemon matrices
ahundt Jul 27, 2026
a1536b9
feat(benchmarks): materialize ref candidates and explicit CBM environ…
ahundt Jul 27, 2026
e4d45ce
feat(benchmarks): isolate exact-build matrices in named Docker volumes
ahundt Jul 27, 2026
fc55c08
fix(sqlite_writer): initialize metadata page roots for GCC
ahundt Jul 27, 2026
6ee2405
fix(benchmarks): retain container manifests and failed build logs
ahundt Jul 27, 2026
225c3e9
fix(benchmarks): copy manifests below the results-volume root
ahundt Jul 27, 2026
fffe7ed
fix(benchmarks): isolate named histories by measurement cohort
ahundt Jul 27, 2026
bf933fb
feat(benchmarks): record shared C and C++ build settings
ahundt Jul 27, 2026
ff7cab5
fix(benchmarks): key Docker resumes by Git refs
ahundt Jul 27, 2026
f31583b
feat(benchmarks): search moved candidate worktree roots
ahundt Jul 27, 2026
daa4858
feat(benchmarks): default Docker cohorts to Clang 18
ahundt Jul 27, 2026
951cd2e
perf(index): batch Git context and bound descriptor-close work
ahundt Jul 28, 2026
9f9ce30
pipeline.c, test_pipeline.c: run Git scan concurrently with graph pos…
ahundt Jul 28, 2026
47e883a
run_benchmark.py: select the primary DB beside dependency indexes
ahundt Jul 28, 2026
16f501a
run_container_experiment.py: derive build jobs from Docker CPU budget
ahundt Jul 28, 2026
12d3871
sha256: process complete input blocks without per-byte copies
ahundt Jul 28, 2026
89c1889
perf(daemon): cache unchanged exact build fingerprints
ahundt Jul 28, 2026
1469a49
fix(mcp): copy normalized coverage scope strings
ahundt Jul 28, 2026
78d8dcc
fix(mcp): expose advanced startup catalog to Codex
ahundt Jul 28, 2026
5b2a087
fix(store): resolve active suffixes and bounded neighbors
ahundt Jul 28, 2026
09e6b44
fix(mcp): read snippets from active overlay spans
ahundt Jul 28, 2026
904ef63
fix(mcp): return retry state while startup indexing runs
ahundt Jul 28, 2026
60d0b5f
fix(mcp): scope freshness and name search count units
ahundt Jul 28, 2026
aca1749
fix(benchmarks): run measured Docker cohort under init
ahundt Jul 28, 2026
0c80798
perf(daemon): remove repeated image hashes and 500 ms watcher waits
ahundt Jul 28, 2026
65aa47b
fix(cli): admit daemon tool calls without global transition
ahundt Jul 28, 2026
e0e692f
fix(mcp): carry list-change notices through daemon frontend
ahundt Jul 28, 2026
2c2de76
fix(daemon): honor auto_index default at session start
ahundt Jul 28, 2026
a4e67ea
fix(mcp): report zero returned rows in truncated query_graph replies
ahundt Jul 29, 2026
b42801f
cli.c: advertise the daemon subcommand in top-level --help
ahundt Jul 29, 2026
d0f00de
merge(upstream): combine main 560ad40d with API consolidation
ahundt Jul 29, 2026
7ddf580
src/main.c: initialize memory only in supervised CLI workers
ahundt Jul 29, 2026
1b1b527
fix(smoke): parse TOON tables and reap the Phase 15 FIFO
ahundt Jul 29, 2026
51e044d
fix(mcp): separate TOON errors from response context
ahundt Jul 29, 2026
02678af
fix(mcp): serialize context warnings without a leading comma
ahundt Jul 29, 2026
29a0842
test(windows): verify watcher uses the shared git.exe resolver
ahundt Jul 29, 2026
662720c
fix(runtime): validate fingerprint cache epochs and retain exact paths
ahundt Jul 29, 2026
4af1590
fix(runtime): admit cross-volume fingerprint caches
ahundt Jul 29, 2026
2614fcc
fix(tests): exclude POSIX MCP helpers from MinGW
ahundt Jul 29, 2026
45495cc
fix(cli): reject wrong-arch macOS Homebrew paths
ahundt Jul 29, 2026
814abae
fix(cli): honor explicit macOS install directories
ahundt Jul 29, 2026
923fac1
merge(cli): carry macOS PATH migration into consolidated API
ahundt Jul 29, 2026
9bcb51e
fix(mcp): suppress release notices for dev builds
ahundt Jul 29, 2026
857b51e
fix(daemon): initialize active image fingerprint before comparison
ahundt Jul 29, 2026
f948e3e
fix(lint): satisfy cppcheck 2.20 and LLVM 20 formatting
ahundt Jul 29, 2026
4a1041c
fix(ci): remove stale suppressions and unsafe copies
ahundt Jul 29, 2026
41fd25c
merge(upstream): integrate f0c65fb2 release hardening
ahundt Jul 30, 2026
352d7f1
fix(benchmarks): emit clang-format-stable terminology header
ahundt Jul 30, 2026
24aa8a4
fix(ci): close MCP stores and publish Windows files atomically
ahundt Jul 31, 2026
dd0db63
.gitignore: adopt upstream's root-anchored /soak*/ and /memlab-* patt…
ahundt Jul 31, 2026
5db8c06
chore(upstream): merge main through 08f6d1d0
ahundt Jul 31, 2026
f6ef175
fix(cypher): enforce relationship-unique path matching
ahundt Jul 31, 2026
fd8dfe5
perf(daemon): reuse application worker per connection
ahundt Jul 31, 2026
bd25726
perf(mcp): reuse validated SQLite handle for query
ahundt Jul 31, 2026
38bf470
fix(benchmarks): emit indexed probes in self-dogfood runs
ahundt Jul 31, 2026
1ff9f31
test(mcp): isolate request-end allocator collection
ahundt Jul 31, 2026
ec6420f
benchmarks: retain request memory census for indexed probes
ahundt Jul 31, 2026
08b0c55
test(mcp): isolate request-scoped SQLite teardown
ahundt Jul 31, 2026
201d060
benchmarks: retain failed index worker logs
ahundt Jul 31, 2026
d9f1e76
fix(store): identify atomic publication failure stages
ahundt Jul 31, 2026
4b4cc0e
fix(benchmarks): index archived worker-log facts
ahundt Jul 31, 2026
c1a6da7
benchmarks: attribute indexed MCP server spans
ahundt Jul 31, 2026
f35af9d
benchmarks: split indexed request ownership costs
ahundt Jul 31, 2026
f27d80a
benchmarks: attribute index_status query phases
ahundt Jul 31, 2026
1402190
perf(store): materialize exact project graph statistics
ahundt Jul 31, 2026
70eaa3e
test(cli): use UTF-8 filesystem observers
ahundt Aug 1, 2026
a0f4380
feat(core): merge upstream with exact Cypher and atomic PageRank
ahundt Aug 2, 2026
6607f63
fix(store): return empty semantic results without vector tables
ahundt Aug 2, 2026
e21cf5d
fix(merge): preserve UTF-8 paths and query response formats
ahundt Aug 2, 2026
df2f940
fix(platform): isolate Linux group scans from proc churn
ahundt Aug 2, 2026
d306133
fix(platform): avoid daemon probe peers and Windows temp overflow
ahundt Aug 2, 2026
7433fee
fix(path-alias): read CRLF configs and create long fixtures
ahundt Aug 2, 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
40 changes: 28 additions & 12 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 @@ -51,11 +66,23 @@ graph-ui/dist/

# 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 @@ -66,14 +93,3 @@ graph-ui/.npm-cache-local/
# Python bytecode from tests/windows/ harness
__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-*
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"]
}
}
}
59 changes: 59 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# codebase-memory-mcp — Developer Notes for Claude

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