Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
bc936a1
mason: v3 registry 2/2 base-reference schema and Windows free-space p…
ualtinok Oct 26, 2026
966e20d
mason: authenticated v3 base identity, referrers and two-sweep reclaim
ualtinok Oct 26, 2026
e0e7e85
mason: base build claim, live-base cap and v3 DiskBudget admission
ualtinok Oct 26, 2026
4147ece
mason: base builder from strict reads with v3 lexical materialization
ualtinok Oct 26, 2026
c10441f
mason: cross-process base-reference scenarios and base-path kill test
ualtinok Oct 26, 2026
e1373f6
mason: register the base-reference schema and Windows probe in the v3…
ualtinok Oct 26, 2026
6987f41
mason: clarify base-builder comments and drop a timing dependency fro…
ualtinok Oct 26, 2026
21d7daa
search-quality descriptor for views-c-base-references
ualtinok Oct 26, 2026
3cd88cf
mason: v3 storage route and v3 storage for the trigram, semantic and …
ualtinok Oct 26, 2026
bba57f2
mason: CheckoutDriver publishes base-referencing worker generations t…
ualtinok Oct 26, 2026
11f168e
mason: correct comments on v3 routing, the v3 live pin and in-memory …
ualtinok Oct 26, 2026
d84548f
search-quality descriptor for views-c2-v3-publication
ualtinok Oct 26, 2026
6b17d7e
mason: register the v3 import ledger and symbol plane formats; add th…
ualtinok Oct 26, 2026
97afe94
mason: stream legacy postings and vectors into v3 plane rows through …
ualtinok Oct 26, 2026
8e21784
mason: v3 import ledger per artifact, producer and plane, with crash-…
ualtinok Oct 26, 2026
880e140
mason: v3 symbol plane store and parse-free legacy symbol importer
ualtinok Oct 26, 2026
9e6df8d
mason: retained legacy inventory, live import sources kept by retenti…
ualtinok Oct 26, 2026
883c6f6
mason: gate unix-only kill-test helpers, and clarify the import ledge…
ualtinok Oct 26, 2026
c8900b4
mason: hold the ledger open lock across ledger copies so no descripto…
ualtinok Oct 26, 2026
d25885b
search-quality descriptor for views-e-legacy-imports
ualtinok Oct 26, 2026
3a3e6c4
mason: add read-only Git index reader and golden fixtures
ualtinok Oct 26, 2026
b8e6a3c
mason: correct check-attr stdin argument syntax
ualtinok Oct 26, 2026
229ed43
mason: audit watcher frontier coverage before cookie wiring
ualtinok Oct 26, 2026
9e2d31e
mason: deliver ordered watcher cookies and views overflow state
ualtinok Oct 26, 2026
1fbd899
mason: expose plane-independent verified bind snapshot hook
ualtinok Oct 26, 2026
2dec7c9
mason: reject unstable view reads and validate after publication waits
ualtinok Oct 26, 2026
c62a7cc
mason: arm inotify directories before initial enumeration
ualtinok Oct 26, 2026
b187098
mason: pair v3 stat evidence with generations and mint advisory view …
ualtinok Oct 26, 2026
e0e98ad
mason: bootstrap fresh verified-bind drivers through v3-only registra…
ualtinok Oct 26, 2026
b0908be
mason: align advisory token wire types and current registry floor
ualtinok Oct 26, 2026
3c93af3
mason: use the public trigram attachment type in v3 materialization
ualtinok Oct 26, 2026
77d383a
mason: keep stable-read stats distinct from persisted evidence rows
ualtinok Oct 26, 2026
638be1a
mason: recover overflow only after a strict walk of its exact epoch
ualtinok Oct 26, 2026
bf50a25
mason: close provenance gaps and guard steady refresh by subscription…
ualtinok Oct 26, 2026
61503e8
mason: cover view-token management dispatch without enabling views
ualtinok Oct 26, 2026
8d89b58
mason: preserve deterministic registration-walk test interception
ualtinok Oct 26, 2026
6ca230c
mason: return only validated advisory-token fields from bridge minting
ualtinok Oct 26, 2026
be2bbbe
mason: keep legacy and v3 inventory test helpers in their own modules
ualtinok Oct 26, 2026
3825bb0
mason: reclaim stat evidence through the protected generation sweep
ualtinok Oct 26, 2026
d0fdd01
mason: refuse initial coverage when the root disappears before regist…
ualtinok Oct 26, 2026
b05d949
mason: publish sweep fixtures through the prepared generation CAS
ualtinok Oct 26, 2026
3747fb0
mason: open writable handles for portable timestamp fixtures
ualtinok Oct 26, 2026
9d40040
mason: preserve canonical watcher gaps and require live steady subscr…
ualtinok Oct 26, 2026
4cb0779
mason: skip source admission probes for already reconciled deltas
ualtinok Oct 26, 2026
16716b7
mason: keep unsupported roots out of watcher-trusted steady refresh
ualtinok Oct 26, 2026
2fe4731
mason: fence v3 final validation and CAS with driver ownership
ualtinok Oct 26, 2026
2a2ffa2
mason: retain partial shared watchers with typed untrusted coverage
ualtinok Oct 26, 2026
960ac07
mason: refuse unowned fresh planes and complete source metadata guards
ualtinok Oct 26, 2026
908f485
mason: keep newer-registry refusal tests above the supported format
ualtinok Oct 26, 2026
32fa347
mason: make the source-probe control exercise a nonregular path
ualtinok Oct 26, 2026
9f9310e
mason: route opt-in lexical queries through checkout v3 views
ualtinok Oct 26, 2026
caf1270
mason: isolate lexical snapshot acquisition and exercise public route…
ualtinok Oct 26, 2026
b276dcd
mason: pin lexical reads and guard uncertain view snapshots
ualtinok Oct 26, 2026
f552c76
mason: fence admitted legacy cache publications at views cutover
ualtinok Oct 26, 2026
f994a2e
mason: bind public lexical routes through v3-only checkout drivers
ualtinok Oct 26, 2026
7aad809
mason: initialize the lexical acquisition spy and strengthen off-boun…
ualtinok Oct 26, 2026
71e5d79
mason: scope lexical request pinning to views and cover parent searches
ualtinok Oct 26, 2026
fc8a594
mason: read empty v3 lexical generations without requiring a plane da…
ualtinok Oct 26, 2026
8ad263e
Declare views step F's search descriptor as engine_unwired
ualtinok Oct 26, 2026
03cb871
mason: seal base call-graph donors and clone them only when sealed
ualtinok Oct 27, 2026
c68ae13
mason: bootstrap the call-graph plane through the base builder and cl…
ualtinok Oct 27, 2026
c61c080
mason: route views-on call-graph reads through the checkout's v3 view
ualtinok Oct 27, 2026
ea71f90
mason: port views-on call-graph tests to the checkout view route
ualtinok Oct 27, 2026
b05a4f7
mason: port linked-worktree and restart call-graph tests to the check…
ualtinok Oct 27, 2026
0c14ef1
Search-quality descriptor for views step G
ualtinok Oct 27, 2026
16238c0
mason: register tree-keyed base identity and tree proof format
ualtinok Oct 26, 2026
05104a9
mason: compute full index trees and Git blob object IDs
ualtinok Oct 27, 2026
6eb2f04
mason: tree-keyed base identity, proof file and receipt fast path (wi…
ualtinok Oct 27, 2026
546f187
mason: name tree proof refusals and keep published proofs unchanged
ualtinok Oct 27, 2026
1889d04
mason: report why a tree-keyed bootstrap is unavailable
ualtinok Oct 27, 2026
f7c36c7
mason: create the tree base member directory before writing its proof
ualtinok Oct 27, 2026
35dbea2
mason: clarify which resolver the tree-base test exercises
ualtinok Oct 27, 2026
60233df
mason: check only the unchanged member's readiness after an edit
ualtinok Oct 27, 2026
7bf4075
Search-quality descriptor for the tree-proven views bases
ualtinok Oct 27, 2026
00298b5
Search-quality descriptor for views steps C to G
ualtinok Oct 27, 2026
03c02ea
Format the view-token bridge files and sort bridge exports (Biome)
ualtinok Oct 27, 2026
1cd4c17
mason: sync view staging files through a write-capable handle on Windows
ualtinok Oct 27, 2026
3892a58
mason: move each git stat setting off its current value in the policy…
ualtinok Oct 27, 2026
48f4792
mason: spell long view-store SQLite paths in \\?\ form on Windows
ualtinok Oct 27, 2026
ec69614
mason: sync sealed and cloned donors through a write-capable handle o…
ualtinok Oct 27, 2026
0c3d300
mason: join lexical-view member paths with native separators on Windows
ualtinok Oct 27, 2026
70e61d4
mason: clarify which IdentityConnection paths get the long-path spelling
ualtinok Oct 27, 2026
751f1d0
Stage the non-UTF-8 index path through git's index input so the test …
ualtinok Oct 27, 2026
1d90f09
Format the non-UTF-8 index test
ualtinok Oct 27, 2026
03b92ca
mason: serve strict lexical binds without a steady watcher subscription
ualtinok Oct 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"targeted_mechanism": "none",
"kind": "harness",
"slice_class": "non_ranking",
"fixtures": [
"harness-goldens"
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"targeted_mechanism": "none",
"kind": "harness",
"slice_class": "non_ranking",
"fixtures": [
"harness-goldens"
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"targeted_mechanism": "none",
"kind": "harness",
"slice_class": "non_ranking",
"fixtures": [
"harness-goldens"
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"slice_class": "engine_unwired",
"targeted_mechanism": "none",
"kind": "harness",
"fixtures": [
"crates/aft/tests/integration/tool_call_parity_test.rs",
"crates/aft/src/search_index.rs",
"crates/aft/src/commands/semantic_search/mod.rs",
"crates/aft/src/commands/semantic_search/exact_lane.rs"
],
"slices": [
"views-f-lexical-routing"
],
"note": "Views-on lexical acquisition projects verified v3 payloads into the existing read-only query engine. Views are default-off, so the benchmark runs the views-off path, whose acquisition, scoring, fusion, admission and paging are unchanged; ranked rows must remain byte-identical to the committed reference."
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"slice_class": "engine_unwired",
"targeted_mechanism": "none",
"kind": "harness",
"fixtures": [
"crates/aft/tests/integration/tool_call_parity_test.rs",
"crates/aft/src/search_index.rs",
"crates/aft/src/commands/semantic_search/mod.rs",
"crates/aft/src/commands/semantic_search/exact_lane.rs"
],
"slices": [
"views-g-donors-callgraph"
],
"note": "Views-on call-graph reads route through the checkout's v3 view with sealed base donors. Step G touches no ranking-fence file; the fence files in this diff come from step F below it in the stack. Views are default-off, so the benchmark runs the views-off path and ranked rows must remain byte-identical to the committed reference."
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"slice_class": "engine_unwired",
"targeted_mechanism": "none",
"kind": "harness",
"fixtures": [
"crates/aft/tests/integration/tool_call_parity_test.rs",
"crates/aft/src/search_index.rs",
"crates/aft/src/commands/semantic_search/mod.rs",
"crates/aft/src/commands/semantic_search/exact_lane.rs"
],
"slices": [
"views-steps-c-to-g"
],
"note": "Views cutover steps C, C part 2, E, D, F, tree-proven bases and G landed as one PR (each reviewed and gated on its own stacked PR, #997-#1026). Fence hits come from step F (lexical routing through views) and G (call-graph routing); with views off every route is unchanged, so ranked rows must stay byte-identical to the committed reference. The views-on parity tests compare grep, glob and search answers against the legacy index."
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"targeted_mechanism": "none",
"kind": "harness",
"slice_class": "non_ranking",
"fixtures": [
"harness-goldens"
]
}
46 changes: 45 additions & 1 deletion crates/aft/src/blob_store/v2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ pub const STORE_SCHEMA_VERSION: i64 = 1;
/// Payload encoding version of trigram blobs. Bumping it must also change the
/// trigram policy fingerprint, because that fingerprint is part of every key.
pub const TRIGRAM_PAYLOAD_SCHEMA: u32 = 1;
/// Layout of a v3 symbol-plane payload (`views::symbol_store`). The symbol
/// plane exists only in v3; no v2 store is ever opened for it.
pub const SYMBOL_PAYLOAD_SCHEMA: u32 = 1;

const STORE_SCHEMA: &str = r#"
CREATE TABLE IF NOT EXISTS store_meta (
Expand Down Expand Up @@ -84,24 +87,37 @@ pub enum FamilyPlane {
Trigram,
Semantic,
Callgraph,
/// Parsed symbols of one file, keyed by content, language and the
/// extraction schema. A v3-only plane: it has no manifest readiness and
/// no v2 store, so it is deliberately absent from [`Self::ALL`], which
/// the manifest, v2 GC, eviction and per-entry code iterate. The v3
/// plane-row sweep covers it through [`Self::V3_STORES`].
Symbol,
}

impl FamilyPlane {
/// The planes a manifest entry, a v2 family store and the v2 GC know.
/// Never add [`Self::Symbol`] here: `EntryPlanes::get_mut` has no field
/// for it and panics.
pub const ALL: [Self; 3] = [Self::Trigram, Self::Semantic, Self::Callgraph];
/// Every plane that can have a store under `blobs/v3/<family>/`.
pub const V3_STORES: [Self; 4] = [Self::Trigram, Self::Semantic, Self::Callgraph, Self::Symbol];

pub const fn as_str(self) -> &'static str {
match self {
Self::Trigram => "trigram",
Self::Semantic => "semantic",
Self::Callgraph => "callgraph",
Self::Symbol => "symbol",
}
}

const fn payload_schema(self) -> u32 {
pub(crate) const fn payload_schema(self) -> u32 {
match self {
Self::Trigram => TRIGRAM_PAYLOAD_SCHEMA,
Self::Semantic => crate::blob_store::SEMANTIC_PAYLOAD_SCHEMA,
Self::Callgraph => crate::blob_store::CALLGRAPH_PAYLOAD_SCHEMA,
Self::Symbol => SYMBOL_PAYLOAD_SCHEMA,
}
}
}
Expand Down Expand Up @@ -347,6 +363,7 @@ pub type StoreResult<T> = Result<T, StoreError>;
pub struct StoreWriteAccess {
storage: PathBuf,
family: String,
legacy_allowed: bool,
}

impl StoreWriteAccess {
Expand All @@ -355,12 +372,20 @@ impl StoreWriteAccess {
Self {
storage: storage.to_path_buf(),
family: family.to_owned(),
legacy_allowed: true,
}
}

pub fn storage(&self) -> &Path {
&self.storage
}
pub(crate) fn v3_only(storage: &Path, family: &str) -> Self {
Self {
storage: storage.to_path_buf(),
family: family.to_owned(),
legacy_allowed: false,
}
}

pub fn family(&self) -> &str {
&self.family
Expand Down Expand Up @@ -426,6 +451,11 @@ pub struct FamilyStoreReader {
impl FamilyStore {
/// Opens (creating when absent) `<storage>/blobs/v2/<family>/<plane>.sqlite`.
pub fn open(access: &StoreWriteAccess, plane: FamilyPlane) -> StoreResult<Self> {
if !access.legacy_allowed {
return Err(StoreError::InvalidFamily(
"v3-only registration cannot open a v2 writer".into(),
));
}
let path = plane_path(&access.storage, &access.family, plane)?;
if let Some(parent) = path.parent() {
crate::private_storage::open_dir(&access.storage, parent)?;
Expand Down Expand Up @@ -1892,6 +1922,20 @@ mod tests {
.family_key()
}

#[test]
fn symbol_is_not_a_manifest_plane() {
// `EntryPlanes::get_mut` panics for Symbol because a manifest entry
// has no symbol state. That panic is unreachable only while every
// list the manifest, v2 store, GC, eviction and per-entry code
// iterates (`FamilyPlane::ALL`) excludes the v3-only symbol plane.
assert!(!FamilyPlane::ALL.contains(&FamilyPlane::Symbol));
assert!(FamilyPlane::V3_STORES.contains(&FamilyPlane::Symbol));
for plane in FamilyPlane::ALL {
assert!(FamilyPlane::V3_STORES.contains(&plane));
}
assert_eq!(FamilyPlane::Symbol.as_str(), "symbol");
}

#[test]
fn a_conflicting_payload_for_one_key_is_rejected_and_the_stored_payload_is_kept() {
let dir = tempfile::tempdir().unwrap();
Expand Down
Loading
Loading