Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
432 commits
Select commit Hold shift + click to select a range
c18cc08
mason: parent-folder data-layer test checks the fixture, not today's …
ualtinok Nov 5, 2026
a75ab64
mason: drop two views-store semantic lane tests
ualtinok Nov 5, 2026
45b6b82
Watcher rescans and self-ignoring ignore files reach the data layer; …
ualtinok Nov 5, 2026
e74766b
mason: data-layer gates exercise the engine the way production starts it
ualtinok Nov 5, 2026
6bd749e
Slow-discovery parent test waits for every child to answer
ualtinok Nov 5, 2026
969242f
mason: data layer keeps macro template calls as macro_body_call refs
ualtinok Nov 5, 2026
51a1c51
mason: data layer stores and serves names inside unparseable Rust macros
ualtinok Nov 5, 2026
3ffe45b
mason: data layer links self calls between functions a macro template…
ualtinok Nov 5, 2026
c089cb4
mason: data layer resolves obj["name"]() as a call of name, as today'…
ualtinok Nov 5, 2026
b54dd11
mason: data layer type-matches C++ member calls on declared locals
ualtinok Nov 5, 2026
f328b43
mason: say which store the dispatch comments compare with
ualtinok Nov 5, 2026
f2fdcea
mason: drop the surfaces test for the data layer switched off
ualtinok Nov 5, 2026
a0e950a
mason: drop health tests pinned to the legacy search index's build-de…
ualtinok Nov 5, 2026
613a9be
mason: subc health tests answer from the data layer
ualtinok Nov 5, 2026
33cb4af
mason: exact memo test runs on the data layer; rescan defect test
ualtinok Nov 5, 2026
00875fa
mason: idle checkout release test runs on the data layer
ualtinok Nov 5, 2026
f04bb48
mason: subc bridge health and call-graph tests answer from the data l…
ualtinok Nov 5, 2026
d7f72b6
mason: ignore overflow_control until a watcher rescan reaches the dat…
ualtinok Nov 5, 2026
bfd1e08
mason: ignore the idle-root retention test until a dropped checkout s…
ualtinok Nov 5, 2026
098482e
mason: zoom's shared consumer fixtures run against the data layer
ualtinok Nov 5, 2026
b181dd4
mason: rollback safety covers the data layer's index store
ualtinok Nov 5, 2026
dfcb735
mason: keep the contended health read test for a switched-off call graph
ualtinok Nov 5, 2026
c12854e
mason: idle checkout test greps the published view
ualtinok Nov 5, 2026
957d155
mason: data-layer runtime_drain tests wait for both planes
ualtinok Nov 5, 2026
bba926c
mason: rustfmt the rollback safety test
ualtinok Nov 5, 2026
9cc9dad
mason: name the indexes plainly in the ported tests' comments
ualtinok Nov 5, 2026
17171ed
mason: the watcher rescan reproduction runs again
ualtinok Nov 5, 2026
a5f5b2b
mason: overflow_control runs again now that a watcher rescan reaches …
ualtinok Nov 5, 2026
052d221
mason: drop the unused per-thread data-layer off switch
ualtinok Nov 5, 2026
b28987f
mason: the rescan reproduction waits for the checkout's background co…
ualtinok Nov 5, 2026
a145623
mason: the idle-root retention test runs again
ualtinok Nov 5, 2026
50e98b3
mason: trace_to and impact measurement harness over a data-layer chec…
ualtinok Nov 5, 2026
0de06c5
mason: trace_to and impact follow callers to real roots and label eac…
ualtinok Nov 5, 2026
70ab122
mason: fix trace path order lifetimes and an unused binding
ualtinok Nov 5, 2026
a3f6255
mason: root-kind tests per language, impact summary and order
ualtinok Nov 5, 2026
b8e1144
mason: port trace_to and impact goldens and renderers to root kinds
ualtinok Nov 5, 2026
76f51f3
mason: store-diet goldens stop pinning impact and trace_to; measureme…
ualtinok Nov 5, 2026
d13b218
mason: resolve gate compares nodes without entry facts and skips impa…
ualtinok Nov 5, 2026
823df95
mason: biome format for the callgraph renderer
ualtinok Nov 5, 2026
7aeaa95
mason: clarify comments on entry facts in gates and measurement
ualtinok Nov 5, 2026
869691d
mason: Go func init() is a program start, labelled main
ualtinok Nov 6, 2026
a7a2bd5
mason: trace_to tool description names the root kinds (agent-visible …
ualtinok Nov 6, 2026
5c4932c
mason: refuse index-store files a newer build wrote by name
ualtinok Nov 5, 2026
da6df62
mason: drop a duplicated DataError variant
ualtinok Nov 5, 2026
6e092ce
mason: refuse a checkout state whose payload layout is newer
ualtinok Nov 6, 2026
0d5f2fe
mason: the segment format version moves with the required sections
ualtinok Nov 6, 2026
3715927
data layer: a Cargo.toml edit reaches only readers of the crates it c…
ualtinok Nov 6, 2026
55ded23
views cold-fallback test expects impact's root labels
ualtinok Nov 6, 2026
c763bbd
data layer: an update reports why files were bound again
ualtinok Nov 6, 2026
b7cd37f
data layer: test that a Cargo.toml added elsewhere rebinds only its f…
ualtinok Nov 6, 2026
9c2829e
data layer: the Cargo.toml test imports through crate:: in a workspace
ualtinok Nov 6, 2026
06e8172
data layer: the Cargo.toml test also holds a TypeScript package
ualtinok Nov 6, 2026
5d0a565
mason: health fixtures list only their own roots' process-wide work
ualtinok Nov 6, 2026
287e48b
mason: the injected breaker read failure belongs to the test that arm…
ualtinok Nov 6, 2026
7e1685a
data layer: a config file added or removed reaches only the files it …
ualtinok Nov 6, 2026
0b07af1
mason: aft_search's semantic lane reads the data layer's meaning plan…
ualtinok Nov 5, 2026
2a6ef41
mason: tests for the data layer's semantic lane: a partial fill repor…
ualtinok Nov 5, 2026
e8a4467
mason: the semantic lane parity gate counts answers that differ only …
ualtinok Nov 5, 2026
08c92c9
mason: one fill at a time embeds for a repository, so no chunk is pai…
ualtinok Nov 5, 2026
161f9cd
mason: a standalone AFT binds its data-layer checkout when its config…
ualtinok Nov 5, 2026
9c11410
mason: follow each standalone configure tail once, after it drains, r…
ualtinok Nov 5, 2026
b9c16cb
mason: a standalone AFT binds its data-layer checkout once per config…
ualtinok Nov 5, 2026
8519e27
mason: the data-layer single-flight tests ask a reopened session agai…
ualtinok Nov 5, 2026
d0dce6f
mason: data-layer parity harness: semantic lane on the real query lis…
ualtinok Nov 5, 2026
407558b
mason: real-model options for the semantic lane gates
ualtinok Nov 5, 2026
0ba1309
mason: parity harness counts view and meaning-plane reads by request …
ualtinok Nov 6, 2026
ffaf95b
mason: the semantic lane's search-quality descriptor names the tool-c…
ualtinok Nov 6, 2026
d7f6a2b
mason: parity harness: the status line a watcher gap adds is process …
ualtinok Nov 6, 2026
04cb297
mason: parity harness counts a row as running the semantic lane only …
ualtinok Nov 6, 2026
a5d544c
mason: register the data-layer split search's semantic cut with aft_s…
ualtinok Nov 6, 2026
bed091e
data layer: bench resolving one file of a checkout, for profiling
ualtinok Nov 6, 2026
3f0e7e4
data layer: name the join error type in the one-file bench
ualtinok Nov 6, 2026
698e2a7
Call graph: keep one file's crate-root, module and use answers while …
ualtinok Nov 6, 2026
b8a6ede
mason: register glob_from_view's walk fields with glob's list envelope
ualtinok Nov 6, 2026
21f9681
mason: memory census measures the data layer; health carries the mean…
ualtinok Nov 6, 2026
afd38f2
mason: the meaning fill dates itself in health (since_ms, last_progre…
ualtinok Nov 6, 2026
99aa8b8
Call graph: the dispatch pass keeps its file's use answers too
ualtinok Nov 6, 2026
ac01957
store-diet harness: replay main's recorded corpus answers through the…
ualtinok Nov 6, 2026
be39ebb
store-diet: the data layer must give main's recorded corpus answers, …
ualtinok Nov 6, 2026
dd6d5b3
Explain why the per-file resolver index can keep its answers
ualtinok Nov 6, 2026
02caf2a
mason: checkout gate memory: samples, allocator relief, and a product…
ualtinok Nov 6, 2026
bfad642
Memory probe: the engine's memory part by part, and a small-run limit
ualtinok Nov 6, 2026
2894d73
Gate and memory probe read the checkout's memory through the census API
ualtinok Nov 6, 2026
c5ff84b
Call-graph engine: share refreshed resolutions, drop the engine at pu…
ualtinok Nov 6, 2026
4fd1df0
Data layer: measure what a cold build holds at each stage
ualtinok Nov 6, 2026
178c7c8
Data layer: measure the bound files, method-call inputs and write bui…
ualtinok Nov 6, 2026
b8eb4b1
Cold build: encode content records before resolving, drop bound surfa…
ualtinok Nov 6, 2026
291496d
Cold build: stream resolutions into the segment instead of holding th…
ualtinok Nov 6, 2026
d42b33e
Cold build: the resolution sink runs inside the resolver pool, so it …
ualtinok Nov 6, 2026
3c431ce
Cold build: keep parses encoded and decode them per stage
ualtinok Nov 6, 2026
712fe07
Data layer: bind in batches, release the engine's decoded data, build…
ualtinok Nov 6, 2026
9b6b71f
Data layer: resolutions carry no bound file surface
ualtinok Nov 6, 2026
117a7f4
Cold build: time each stage when measuring
ualtinok Nov 6, 2026
d0940f9
Inspect gate: today's run turns the data layer off, and each process …
ualtinok Nov 6, 2026
d6df192
Data layer: a test's damaged fragment reaches the resolver's threads;…
ualtinok Nov 6, 2026
3b0a4b5
Cold build: pass 4 reads each file's parse key without decoding its p…
ualtinok Nov 6, 2026
dd5e293
Cold build: pass 4 runs once, fragments are built in parallel batches
ualtinok Nov 6, 2026
ba278c4
call_tree and trace_to_symbol follow calls written inside a macro_rul…
ualtinok Nov 6, 2026
2bddd47
Cold build: pass 4 goes back to batches, keeping the parallel fragments
ualtinok Nov 6, 2026
41a42ef
mason: WIP meaning fill failures worded as today's build words them; …
ualtinok Nov 6, 2026
dc0922a
mason: port the unreachable-backend cold-build disclosure test to the…
ualtinok Nov 6, 2026
b438c78
mason: delete two configure tests that pin the views lanes' load and …
ualtinok Nov 6, 2026
96e068f
mason: aft warmup waits for the data layer's meaning fill, and aft in…
ualtinok Nov 6, 2026
ea16624
mason: a parent folder's aft_search answers from each child's data-la…
ualtinok Nov 6, 2026
f6b1889
mason: the parent meaning test turns views on, as a parent folder ses…
ualtinok Nov 6, 2026
44d5574
mason: aft_search with a path at another repository answers from that…
ualtinok Nov 6, 2026
d4464bd
mason: aft_search's regex route reads the data layer's text plane whe…
ualtinok Nov 6, 2026
75c8447
mason: the views cold parent-search test runs on today's route; the i…
ualtinok Nov 6, 2026
7276ff6
mason: cargo fmt
ualtinok Nov 6, 2026
18d7823
mason: the semantic lane's search-quality descriptor names this round…
ualtinok Nov 6, 2026
840dd6f
mason: comments name the stores and indexes they mean
ualtinok Nov 6, 2026
b96842a
Inspect gate: record each process's memory after every request and pr…
ualtinok Nov 6, 2026
76429aa
Store-diet corpus: the reviewed macro-template answers now carry the …
ualtinok Nov 6, 2026
92fd5f8
Cold build: resolutions reach the sink 128 at a time
ualtinok Nov 6, 2026
4e8331a
The data layer is always on; configure builds none of today's indexes
ualtinok Nov 6, 2026
2b9ea02
Today's call-graph store is never opened, and views.enabled reaches n…
ualtinok Nov 6, 2026
e2a0a09
wip: legacy text index removed from the context
ualtinok Nov 6, 2026
db5e1af
aft warmup and the binary read the text index from the index store
ualtinok Nov 6, 2026
b956f25
Tests no longer set up the old text index
ualtinok Nov 6, 2026
d121fe3
Remove product code left unused by the old text index, and its tests
ualtinok Nov 6, 2026
55dca3f
Fold the views switch and routing checks out of product code
ualtinok Nov 6, 2026
b540262
Remove tests of views projection and views meaning-search coordination
ualtinok Nov 6, 2026
eb46625
Views-facing context methods answer that no view is installed
ualtinok Nov 6, 2026
59865db
wip: remove unused items (round 4)
ualtinok Nov 6, 2026
3c70e17
Idle eviction no longer stops at the removed view publication cache
ualtinok Nov 6, 2026
1cefa7c
A segment may hold a large repository's first build
ualtinok Nov 6, 2026
56cb90b
Index-store background work runs in pools, never on executor workers
ualtinok Nov 6, 2026
e5559e7
A workspace package lookup records the name's key, not the member walk
ualtinok Nov 6, 2026
c1b5cf9
A finished index-store build hands its freed pages back
ualtinok Nov 6, 2026
ab0500e
Worktrees share stored entries; an edited checkout keeps little decoded
ualtinok Nov 6, 2026
20ddc73
Minified bundles are searched but not parsed or embedded; broad refre…
ualtinok Nov 6, 2026
1fa43e4
WIP C7: remove views, blob store, pins, retention and other old-store…
ualtinok Nov 6, 2026
f3daae1
C7: delete views, blob store, pins, retention and old-store modules; …
ualtinok Nov 6, 2026
250d2d8
wip: remove unused items (round 1)
ualtinok Nov 6, 2026
26b4fd8
wip: test cleanup after old-store deletion
ualtinok Nov 6, 2026
f2da790
C7: test build compiles after old-store deletion; restore test-only i…
ualtinok Nov 6, 2026
a3bbe4b
wip: remove unused items (round 4)
ualtinok Nov 6, 2026
22e1c13
Index store: an out-of-date publication serves text and rebuilds its …
ualtinok Nov 6, 2026
4c9db15
Index store: reuse a checkout's memory figure until it changes
ualtinok Nov 6, 2026
826b604
data layer: port the remaining old-store test failures
ualtinok Nov 6, 2026
cca2118
data layer: a refresh skips stale method-call answers of files it rem…
ualtinok Nov 6, 2026
e152e20
remove the old call-graph exit flush and two old-store examples
ualtinok Nov 6, 2026
b58e36c
remove the old meaning-index chunk export example
ualtinok Nov 6, 2026
55d7931
remove two Linux-only tests of views trust and the old meaning cold b…
ualtinok Nov 6, 2026
993eaae
index store: allocator relief after a build only where AFT has it (Li…
ualtinok Nov 6, 2026
15c8009
remove a Linux-only profile of the old text index
ualtinok Nov 6, 2026
f47f366
probe: time call-graph commands on a fresh checkout and measure the f…
ualtinok Nov 6, 2026
3edb908
index store: decoded call-graph files share one bounded cache
ualtinok Nov 6, 2026
2516066
probe: break decoded call-graph memory down by part
ualtinok Nov 6, 2026
c565b99
mason: refuse config names retired in 0.62 or earlier (Rust, WIP)
ualtinok Nov 6, 2026
3d2c91a
mason: refuse retired config names in the TypeScript loaders (WIP)
ualtinok Nov 6, 2026
8745709
mason: update plugin tests for refused retired config names (WIP)
ualtinok Nov 6, 2026
458cf2e
mason: recapture config parity fixtures for refused retired names
ualtinok Nov 6, 2026
1aaa7ec
mason: document refused retired config names, drop experimental.bash …
ualtinok Nov 6, 2026
d3973b3
mason: test that every refused retired name is refused and translated…
ualtinok Nov 6, 2026
946a6f2
mason: meaning fills reuse vectors of the old meaning index
ualtinok Nov 6, 2026
694e50f
mason: example comparing a fill from the old meaning index with one f…
ualtinok Nov 6, 2026
4500407
mason: format the old-index import and say what stored_vector is for
ualtinok Nov 6, 2026
6688630
mason: add aft cache prune-legacy to delete the pre-0.64 index folders
ualtinok Nov 7, 2026
1358b4f
mason: port or delete tests that pinned the retired index stores (wip)
ualtinok Nov 7, 2026
0834bd4
mason: port dead-code, sample and broad-root tests onto the index sto…
ualtinok Nov 7, 2026
a72dce7
mason: split the HOME-root callers check and mark two index-store wir…
ualtinok Nov 7, 2026
8b5c277
mason: mark two meaning-plane status defects ignored (wip)
ualtinok Nov 7, 2026
b141f63
mason: shorten the index store's quiet period for the corpus-refresh …
ualtinok Nov 7, 2026
ddc62c0
mason: delete test-only helpers that only the deleted tests used (wip)
ualtinok Nov 7, 2026
61dae4e
mason: format
ualtinok Nov 7, 2026
f983597
mason: read the missing-facts test's call graph from the index-store …
ualtinok Nov 7, 2026
cf7bd34
Index store: the retired call-graph store queues nothing and reports …
ualtinok Nov 7, 2026
8ea2549
Drop the old-store dead-code CPU probe
ualtinok Nov 7, 2026
bb63686
Meaning search: refreshing edited files after a finished fill is read…
ualtinok Nov 7, 2026
049135f
Refreshing watcher test: shorten the index store's quiet period to a …
ualtinok Nov 7, 2026
145b2a5
Refreshing watcher test: a mid-refresh reply is partial
ualtinok Nov 7, 2026
ba00b3a
Refreshing watcher test: the mid-refresh semantic status is refreshing
ualtinok Nov 7, 2026
d0962b0
mason: compact call-graph slices stored as records, with a gate again…
ualtinok Nov 7, 2026
d231678
mason: keep full names only where a lookup reads them, store span len…
ualtinok Nov 7, 2026
61697eb
mason: front-code full names and signatures in their own table
ualtinok Nov 7, 2026
b3d202b
mason: count the front-coded table in the slice probe's string bytes
ualtinok Nov 7, 2026
184857c
mason: delete the string-row slices and their comparison gate
ualtinok Nov 7, 2026
491c238
Gate script: run only the index store's own gates
ualtinok Nov 7, 2026
f4c84fa
mason: configure bash fixtures with current keys; delete retired-stor…
ualtinok Nov 7, 2026
aa4746a
mason: wait for the published call graph before tests read dead code
ualtinok Nov 7, 2026
ae97d6f
mason: run the in-flight dedup test on Duplicates, which has no call-…
ualtinok Nov 7, 2026
60f42eb
Call-graph queries on a home root name the home root, not the off switch
ualtinok Nov 7, 2026
bb8d8ec
Block cache: shard by block and serve hits under a read lock
ualtinok Nov 7, 2026
c584cb9
Checkout memory probe: report each edit's record-and-refresh time
ualtinok Nov 7, 2026
f554e98
Index store: open each segment file once per process
ualtinok Nov 7, 2026
f06d8fe
Native secret-bash tests find aft where Cargo's build-dir puts it
ualtinok Nov 7, 2026
f6f3de2
Inspect lists its files from the index-store checkout instead of walking
ualtinok Nov 7, 2026
1a12a2b
Checkout memory probe: report the call graph's held memory per line
ualtinok Nov 7, 2026
88c2fbe
mason: answer Thalamus runner heads' background bash launches at once
ualtinok Nov 7, 2026
1c0bde7
Deletion branch: take the runner-head background change from main ins…
ualtinok Nov 7, 2026
1d8f82f
mason: dead code and unused exports on the index store's integer graph
ualtinok Nov 7, 2026
c9da492
mason: files a patched dead-code rollup only calls into are read as a…
ualtinok Nov 7, 2026
ca69b62
mason: Rust dead-code fact extraction is linear in a file's top-level…
ualtinok Nov 7, 2026
8cee86b
mason: stored-facts dead-code scans keep file freshness; data-layer s…
ualtinok Nov 7, 2026
5eb1ab6
mason: kept dead-code graphs are verified; damaged inputs are tested;…
ualtinok Nov 7, 2026
80a6ce3
Inspect: automatic dead code and unused exports follow their own sche…
ualtinok Nov 7, 2026
130e4f4
Merge remote-tracking branch 'origin/main' into data-layer/c7-main
ualtinok Nov 7, 2026
95821a9
Inspect test: feed the watcher event for a file written outside AFT
ualtinok Nov 7, 2026
2f0da5d
Index store: semantic search alone binds the root
ualtinok Nov 7, 2026
170fb55
Configure test: semantic-only bind uses an OpenCode session, which ad…
ualtinok Nov 7, 2026
24eb4a6
Config: a long-retired name refuses only the user config
ualtinok Nov 7, 2026
ed031d3
Plugins: a project config with a long-retired name loads with a notice
ualtinok Nov 7, 2026
6266ccd
Config: project files skip only the long-retired-name refusal
ualtinok Nov 7, 2026
dea136e
mason: assert retired project aliases load within trust limits
ualtinok Nov 7, 2026
c247509
mason: refresh retired-project parity and catalog goldens
ualtinok Nov 7, 2026
90118ba
mason: cover retired experimental project config translation in both …
ualtinok Nov 7, 2026
01c15fb
mason: account for legacy harness feature defaults in config test
ualtinok Nov 7, 2026
f3c3f04
mason: keep re-resolved call-graph files encoded between publications
ualtinok Nov 7, 2026
37ddcfd
mason: an edit no longer copies the checkout's whole state
ualtinok Nov 7, 2026
a529f40
mason: keep changed files' content records encoded until publication
ualtinok Nov 7, 2026
b674440
Index store: dead code reads refreshed files in their encoded form
ualtinok Nov 7, 2026
56ab631
Deletion branch: drop dead bindings, imports and branches left by the…
ualtinok Nov 7, 2026
35dc4eb
mason: delete production-library index retirement remnants
ualtinok Nov 7, 2026
7958387
mason: remove retired SQLite callgraph backend
ualtinok Nov 7, 2026
1afcd53
mason: every call-graph engine resolves on one shared thread pool
ualtinok Nov 7, 2026
cad43f0
mason: method-call site inputs keep reference keys, not formatted ids
ualtinok Nov 7, 2026
f1c7b10
mason: an edit is parsed by the call-graph refresh, not when it is re…
ualtinok Nov 7, 2026
ee50e94
mason: remove obsolete index fixtures and dead test support
ualtinok Nov 7, 2026
bec3f90
Merge remote-tracking branch 'origin/main' into data-layer/c7-main
ualtinok Nov 7, 2026
8bf7424
Merge commit 'ee50e948a0' into data-layer/c7-merge
ualtinok Nov 7, 2026
a368d9f
Index store: drop the last retired-store leftovers
ualtinok Nov 7, 2026
38ea74c
aft_search: caller annotations from the index store; test fixes after…
ualtinok Nov 7, 2026
05af6b1
Tests after the deletion: status, drain, reap and shutdown fixtures f…
ualtinok Nov 7, 2026
ea9d59e
Test: process-group members keep their pid for the never-reaped reason
ualtinok Nov 7, 2026
28a601b
cargo fmt
ualtinok Nov 7, 2026
069c42e
Search-quality descriptor for the index-store release
ualtinok Nov 7, 2026
ff6d38d
Release descriptor: declare the five pattern-lane candidate-count cha…
ualtinok Nov 8, 2026
ea25fb7
mason: admit data-layer handoffs without an executor worker
ualtinok Nov 8, 2026
175f998
Merge remote-tracking branch 'origin/main' into data-layer/c7-merge
ualtinok Nov 8, 2026
e1ca43e
Merge fix: tilde expansion moved to git_root_resolution with the old …
ualtinok Nov 8, 2026
0cf5bfd
Restore two Linux-only test helpers the unused-code pass removed
ualtinok Nov 8, 2026
1ab1109
Index store: dead-code verdicts for test-code receivers and Python do…
ualtinok Nov 8, 2026
d1dd614
mason: a publication of changes retires segments no checkout reads an…
ualtinok Nov 7, 2026
4bb63b7
mason: a process holds at most 1,024 segment files open
ualtinok Nov 7, 2026
17da153
mason: builds and publications share without pinning, and a checkout …
ualtinok Nov 7, 2026
514c93d
mason: release note for the bounded index store and the open-file cap
ualtinok Nov 8, 2026
c33b813
mason: name the repository the sharing figure came from in plain words
ualtinok Nov 8, 2026
c62fe4b
mason: a new worktree starts from its closest sibling's publication
ualtinok Nov 8, 2026
54480ce
mason: a probe measuring a new worktree's first build
ualtinok Nov 8, 2026
883dd85
mason: say what the probe's store is
ualtinok Nov 8, 2026
1e7f351
mason: the checkout gate makes new worktrees from A and compares thei…
ualtinok Nov 8, 2026
91bb80b
mason: release note for new worktrees starting from a sibling
ualtinok Nov 8, 2026
8668e90
Test: fake-Synapse search tests hold the model-free fill guard
ualtinok Nov 8, 2026
22b5e49
Maps: describe the index store instead of the old trigram, SQLite cal…
ualtinok Nov 8, 2026
859813d
Merge remote-tracking branch 'origin/main' into data-layer/c7-merge
ualtinok Nov 8, 2026
e6a2f2d
Release CI fixes: canonical test roots on macOS, probe builds on Wind…
ualtinok Nov 8, 2026
24ac8c8
Windows: dead code finds its checkout under either root spelling; pru…
ualtinok Nov 8, 2026
2fa3bf6
Windows tests: use the product's root spelling in dead-code and prune…
ualtinok Nov 8, 2026
da21c65
Format two files the Windows test fixes touched
ualtinok Nov 8, 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
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .alfonso/release-notes/next/callgraph-edit-memory.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- After a broad edit, AFT's index store keeps the call-graph files it re-resolved encoded until the changes are published, so a busy worktree's call graph holds about a tenth of the memory it did (on AFT's own repository, typically about 120 MB instead of 1 GB).
1 change: 1 addition & 0 deletions .alfonso/release-notes/next/import-old-embeddings.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- Meaning search's first fill after upgrading reuses the vectors the previous meaning index already computed for unchanged files with the same embedding model, instead of embedding them again.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- The index store no longer piles up files while worktrees keep editing, and AFT holds at most 1,024 index files open, so busy daemons stay well below macOS's open-file limit.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- AFT's index store resolves every edited worktree's call graph on one shared set of threads instead of a set per worktree (a daemon with dozens of edited worktrees ran hundreds of resolver threads), and write, edit and apply_patch no longer parse the edited file before returning: search sees the edit at once, and the call graph parses it when it next refreshes.
1 change: 1 addition & 0 deletions .alfonso/release-notes/next/index-store-worktree-start.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- A new worktree of a repository AFT already indexes is ready in seconds instead of re-reading and re-indexing every file, which removes the CPU spikes when agents open worktrees.
1 change: 1 addition & 0 deletions .alfonso/release-notes/next/prune-legacy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- `npx @cortexkit/aft cache prune-legacy` lists the index folders AFT used before 0.64 and their sizes; add `--yes` to delete them and free the disk space. AFT does not delete them on its own in this release.
1 change: 1 addition & 0 deletions .alfonso/release-notes/next/refuse-old-config-names.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- AFT now refuses configuration names retired in 0.62 or earlier, with `removed_config_key`: `tool_surface`, `hoist_builtin_tools`, top-level `enabled`, `search_index`, `semantic_search`, `callgraph_store`, `github.enabled`, `gh_read`, `gh_shim.enabled`, `sandbox.enabled`, `idle.lsp_ttl_minutes`, `inspect.tier2_soft_deadline_ms`, `inspect.max_drill_down_items`, the flat `experimental_*` keys, the `experimental.bash` block, and `aft_`-prefixed names in `disabled_tools`. Run `npx @cortexkit/aft doctor --fix` to rewrite them; AFT still rewrites your user config automatically when it can.
12 changes: 7 additions & 5 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -177,10 +177,10 @@ jobs:
# fallback silently masks the version-mismatch bug (we try to publish
# vN, it already exists, we say success even though we wanted vN+1).
#
# `agent-file-tools` depends on `aft-tokenizer` and `aft-secret-rules`
# by path; cargo refuses to publish a crate whose path-only dep has no
# `agent-file-tools` depends on `aft-tokenizer`, `aft-secret-rules` and
# `aft-store` by path; cargo refuses to publish a crate whose path-only dep has no
# `version =` or isn't on crates.io. All three crates therefore declare
# versions (synced by version-sync.mjs) and we publish the two leaf
# versions (synced by version-sync.mjs) and we publish the leaf
# crates first so `agent-file-tools` can resolve them on crates.io.
# scripts/lib/test_native_release_workflow.py fails when a new path
# dependency is added without a publish line here. The `--no-verify` flag on the
Expand All @@ -204,6 +204,8 @@ jobs:
|| { ec=$?; cargo publish --package aft-tokenizer --dry-run 2>&1 | grep -q "already exists" && true || exit $ec; }
cargo publish --package aft-secret-rules \
|| { ec=$?; cargo publish --package aft-secret-rules --dry-run 2>&1 | grep -q "already exists" && true || exit $ec; }
cargo publish --package aft-store \
|| { ec=$?; cargo publish --package aft-store --dry-run 2>&1 | grep -q "already exists" && true || exit $ec; }
# Wait briefly for the new leaf crate versions to become visible on
# crates.io's sparse index before publishing `agent-file-tools` —
# otherwise the verify step in the second publish can race against
Expand Down Expand Up @@ -821,7 +823,7 @@ jobs:
# Cargo's local registry overlay, without needing unpublished siblings on
# crates.io. Stable Cargo >=1.90 supports this selection mode.
- name: Rehearse crates.io publishing
run: cargo publish --dry-run --locked --allow-dirty -p aft-tokenizer -p aft-secret-rules -p agent-file-tools
run: cargo publish --dry-run --locked --allow-dirty -p aft-tokenizer -p aft-secret-rules -p aft-store -p agent-file-tools

# Mirrors the inline 10 MiB check in scripts/release.sh (crates.io package
# sizes). A publish dry run does not enforce the registry's upload limit.
Expand All @@ -839,7 +841,7 @@ jobs:
# Multi-package publish stages archives in tmp-crate and tmp-registry;
# single-package packaging leaves them directly in the package folder.
crates = sorted(crate_dir.rglob("*.crate"))
expected = {"aft-tokenizer", "aft-secret-rules", "agent-file-tools"}
expected = {"aft-tokenizer", "aft-secret-rules", "aft-store", "agent-file-tools"}
filenames = {crate.name for crate in crates}
found = {
package["name"] for package in metadata["packages"]
Expand Down
81 changes: 43 additions & 38 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,38 +95,43 @@ boundaries. Process-wide heavy builds share slots through
`cold_build_limiter.rs`, and `build_breaker.rs` suspends a build domain that
keeps crashing.

**Indexes.** Three background indexes, each on by default (`indexes.*` in
config):
- *Trigram* (`search_index.rs`): a disk-backed postings file read with
positioned reads, serving indexed `grep`/`glob` and the lexical lane of
`aft_search`. `grep_executor.rs` falls back to a bounded walk while the index
is building or unavailable.
- *Semantic* (`semantic_index.rs`): dense embeddings from fastembed (local
ONNX), an OpenAI-compatible endpoint, Ollama, or Synapse over subc
(`synapse_embed.rs`). `aft_search` blends lexical and semantic lanes
(`commands/semantic_search/`, `search_b2/`) and degrades to lexical when a
query embedding times out.
- *Callgraph store* (`callgraph_store/`): a persisted SQLite graph of call
edges behind `aft_callgraph` and zoom enrichment. Each build writes a new
generation file and swaps a `.current` pointer, so readers never see a
half-built graph. `callgraph.rs` keeps the lighter per-file call data.

Artifacts live in root-keyed cache directories under the storage root. The
first checkout of a repository to claim `owner.json` (`artifact_owner.rs`)
becomes the writer; `root_cache.rs` adds per-domain writer leases, reader
markers, and publish epochs so a superseded worker cannot publish stale data.
Another live checkout of the same repository, typically a linked worktree,
runs **borrow-only**: it opens the owner's search and semantic indexes through
read-only openers (`readonly_artifacts.rs`) and the callgraph through
`ReadonlyCallGraphStore`, and never builds or repairs them. With
`worktree.ram_overlay` (on by default), a borrow-only checkout first compares
the borrowed search index with its own files, then layers its own edits into
private in-RAM search deltas. Path-listing answers (glob, `aft_search`) also
drop any returned path that is missing on disk and report the count, as a guard
against a stale index. Content-addressed views (`views/`, `blob_store/`,
`pins/`, `gc/`, `refresh/`; `views.enabled`, off by default) instead assemble
each checkout's semantic and callgraph artifacts from per-file blobs behind an
atomic manifest. User-configured standing roots (`index.roots`,
**Index store.** Text search, the call graph and meaning search live in one
index store per repository (`indexes.trigram`, `indexes.callgraph`,
`indexes.semantic`; each on by default). `crates/aft-store` owns the formats:
immutable segment files of checksummed sections, read with positioned reads
through one process-wide block cache, with at most 1,024 segment files open at
once. A segment can hold text units with trigram postings, content records
(each file's parsed symbols, references and outline, keyed by content,
language and extractor version), call-graph fragments, and vectors (int8 rows
scanned, f32 rows for rescoring). Worktrees and clones of one repository share
a store under `storage/data/<family>`, keyed by the repository's root commits;
each checkout keeps its own state file naming its paths and their units. A
manifest is the commit record of each publication, readers lease the
generation they read, and cleanup never removes a file a live lease or the
newest manifest names.

`data_layer/` is AFT's side. A checkout binds to its published state and
rescans against disk before serving. A new worktree starts from the sibling
checkout whose state differs least and processes only the files that differ;
farther than a quarter of its paths, it builds cold, still reusing stored
records. Builds, refreshes and meaning-search fill run in small process-wide
pools (`data_layer/runtime.rs`); under the daemon the root's executor admits
each job, so an unbound root starts nothing. A first build publishes text
before the call graph, so `grep` is ready in about a second. Edits update text
at once; the call graph refreshes after two quiet minutes, or at once when a
call-graph reader asks (it waits up to 30 s, then reports building). The
incremental engine (`data_layer/incremental.rs`) re-resolves only files whose
recorded inputs changed, and changes are published as small segments once
enough accumulate. The resolver itself (`callgraph_store/`: extraction,
binding, dispatch) is shared with the gates that compare incremental results
with cold builds. `aft_search` blends lexical and meaning lanes
(`commands/semantic_search/`, `search_b2/`); embeddings come from fastembed
(local ONNX), an OpenAI-compatible endpoint, Ollama, or Synapse over subc
(`synapse_embed.rs`, chunking in `semantic_index.rs`). A plane that is still
building says so: `grep` and `glob` walk the folder until text is ready, and
call-graph tools answer "building" rather than from an old graph.
Parent-folder sessions (`views/parent.rs`) answer from each child
repository's checkout. User-configured standing roots (`index.roots`,
`standing_roots.rs`, `scoped_key.rs`) are indexed by the subc standing actor
independent of sessions.

Expand Down Expand Up @@ -272,11 +277,12 @@ ledger, access grants, standing roots, GitHub cache, breaker rows) lives in
| Command handlers | `crates/aft/src/commands/` |
| Executor | `crates/aft/src/executor/`, `cold_build_limiter.rs`, `build_breaker.rs` |
| Runtime state | `context.rs` (`AppContext`) |
| Trigram search | `search_index.rs`, `grep_executor.rs` |
| Semantic search | `semantic_index.rs`, `synapse_embed.rs`, `commands/semantic_search/`, `search_b2/` |
| Callgraph | `callgraph_store/`, `callgraph.rs`, `calls.rs` |
| Artifact ownership and borrowing | `artifact_owner.rs`, `root_cache.rs`, `readonly_artifacts.rs`, `legacy_partitions.rs` |
| Index views | `views/`, `blob_store/`, `pins/`, `gc/`, `refresh/`, `path_status/`, `alias/`, `migration/` |
| Index store formats | `crates/aft-store/` |
| Index store in AFT | `data_layer/` (checkout, runtime, incremental, meaning, `tools/` adapters) |
| Text search | `grep_executor.rs`, `data_layer/tools/grep.rs` |
| Semantic search | `commands/semantic_search/`, `search_b2/`, `synapse_embed.rs`, `semantic_index.rs`, `data_layer/vectors.rs` |
| Call graph | `callgraph_store/` (resolver), `data_layer/callgraph.rs`, `callgraph.rs`, `calls.rs` |
| Parent-folder sessions | `views/parent.rs`, `data_layer/parent.rs` |
| Standing roots | `standing_roots.rs`, `scoped_key.rs`, `subc/standing.rs`, `db/standing_roots.rs` |
| Parsing and symbols | `parser.rs`, `symbols.rs`, `symbol_cache_disk.rs`, `language.rs`, `imports/` |
| Edit, patch, hashline | `edit.rs`, `format.rs`, `patch/`, `hashline/`, `fuzzy_match.rs` |
Expand Down Expand Up @@ -355,7 +361,6 @@ The canonical field list is the `Response` doc comment in
- [docs/gh-shim.md](docs/gh-shim.md): `gh` shim routing and refusals
- [docs/health-digest.md](docs/health-digest.md): the `health.digest` operation
- [docs/memory-census.md](docs/memory-census.md): memory attribution
- [docs/design/content-addressed-index-views.md](docs/design/content-addressed-index-views.md): index views
- [docs/design/subc-readiness-warmup.md](docs/design/subc-readiness-warmup.md): subc readiness and warmup
- [docs/design/opencode-v2-plugin-playbook.md](docs/design/opencode-v2-plugin-playbook.md): OpenCode V2 plugin
- [docs/investigations/watcher-backends-reference.md](docs/investigations/watcher-backends-reference.md): watcher backends
Expand Down
18 changes: 18 additions & 0 deletions Cargo.lock

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

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
resolver = "2"
members = [
"crates/aft",
"crates/aft-store",
"crates/aft-tokenizer",
"crates/aft-fake-lsp",
"crates/secret-rules",
Expand Down
17 changes: 7 additions & 10 deletions STRUCTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ it stays current and this document does not list them.

```text
crates/aft/ Rust engine: the `aft` binary, command handlers, indexes, integration tests
crates/aft-store/ Index store formats: segments, family lifecycle, text, content records, call graph, vectors
crates/aft-tokenizer/ Standalone Claude token-counting library
crates/secret-rules/ Secret placeholder grammar, key location rules, response scrubbing
crates/aft-fake-lsp/ Fake language server used by LSP tests
Expand All @@ -27,45 +28,39 @@ assets/ Repository images
## `crates/aft/src/`

Top-level `.rs` files are shared engine modules (parser, edit, config,
context, search and semantic indexes, and so on). A folder with the same name
context, search and semantic search, and so on). A folder with the same name
as a top-level file holds that module's submodules (`edit/`, `backup/`,
`run_tool_call/`, `sandbox_spawn/`, `subc_translate/`, ...). The other folders:

```text
agent_data/ Session undo and checkpoint data carried through engram's session door
alias/ Git blob-id aliases and byte-exact manifest path identities
bash_background/ Background, PTY and remote task registry, watchdog, pattern watches, persistence
bash_db_hints/ Schema hints when a database CLI fails on an unknown table or column
bash_permissions/ Permission scan of parsed bash commands
bash_rewrite/ Rewrites simple bash commands into AFT tool calls
bin/ Auxiliary binaries (hashline schema artifact generator)
blob_store/ Content-addressed per-plane blob storage for index views
callgraph_store/ Persisted SQLite callgraph: build, refresh, queries, dead-code projection
callgraph_store/ Call-graph resolver: extraction, binding, dispatch, facts, query contract, dead-code projection
cli/ Native `aft` subcommands (setup, index, warmup, profile, fix-config, backups, cache cleanup, sandbox launch)
commands/ One handler per protocol command; `tool_call.rs` is the agent tool entry
compress/ Bash output compressors, TOML filter engine, builtin filters, filter trust
data_layer/ AFT's side of the index store: checkouts, runtime pools, incremental call graph, meaning fill, tool adapters
db/ aft.db stores (backups, bash tasks and watches, call ledger, access grants, GitHub cache, ...)
exec_remote/ Client for the daemon's remote execution capability (`runon`)
executor/ Per-root actor scheduler, lanes, job classes, cancellation
gc/ Mark-and-sweep for view blob stores
gh_shim_relay/ Daemon-side relay for governed `gh` bot writes
gh_shim_speech/ Launch-bound bot-write authority
github_read/ `issue://` and `pr://` fetch, normalize, render, fallback cache
hashline/ Hashline edit engine: scan, snapshot, syntax, apply, transaction, recovery, oracle
imports/ Per-language import engines for `aft_import`
inspect/ `aft_inspect` categories, scanners, Oxc liveness engine, tier-2 scheduler
lsp/ Language-server client, registry, roots, diagnostics, child processes
migration/ One-way import of legacy semantic snapshots into views
page_collect/ Page and referenced-file snapshots for sealed HTML page bundles
patch/ `apply_patch` parser, matcher, applier
path_status/ Pending or failed path annotations for view generations
pins/ Generation pins held while a view is assembled or read
refresh/ Plane-worker refresh coordination for views
search_b2/ `aft_search` query router, lane plans, token variants, readiness
secret/ Secret vault seam and its consent adapter
secret_proxy/ Command-private proxy that releases resolved secrets to one command
subc/ Subc daemon edge: binds, trust, tool-provider role, scopes, code mode, consent, push, drain, health
views/ Per-checkout view manifests and generation publication
views/ Manifest path types and parent-folder sessions
watcher/ Project file watcher
watcher_backend/ Native watcher backends (FSEvents, inotify, Windows)
```
Expand Down Expand Up @@ -121,6 +116,8 @@ tests are `*.test.ts`.
- **List truncation surface:** `crates/aft/src/list_surfaces/[surface].rs`, registered in `list_surfaces.rs`.
- **Build breaker domain:** `crates/aft/src/build_breaker.rs`.
- **Semantic embedding backend:** `crates/aft/src/semantic_index.rs`, `synapse_embed.rs`, and the backend config in `config.rs`.
- **Index store format (a section, record or lifecycle rule):** `crates/aft-store/src/`. How AFT builds, refreshes or reads it: `crates/aft/src/data_layer/`; a tool's read path: `data_layer/tools/`.
- **Call-graph resolution rule:** `crates/aft/src/callgraph_store/` (dispatch, bindings, facts); bump `EXTRACTOR_VERSION` in `data_layer/content.rs` when stored records change.
- **Standing root keys:** `scoped_key.rs` and `db/standing_roots.rs`.
- **Windows path normalization:** `crates/aft/src/windows_path.rs`.
- **Bridge export:** `packages/aft-bridge/src/[module].ts`, re-exported from `src/index.ts`.
Expand Down
Loading
Loading