Skip to content

Commit b37fbbc

Browse files
committed
feat(contract): POC default — ClassView::value_schema Bootstrap->Full (decision a)
Operator decision (a): every unconfigured class (incl. the default classid 0x0000_0000) materialises the FULL value slab so downstream consumers (tesseract-rs / woa-rs / medcare-rs / q2) can transcode against a fully-populated NodeRow POC. Specialisation is opt-IN: a consumer that needs to save memory mints a class overriding to a smaller preset; one that needs denser data mints a separate class. Layout-preserving (Full carves within the reserved 480 B — no NODE_ROW_STRIDE / ENVELOPE_LAYOUT_VERSION change). The TYPE-level ValueSchema::default() stays Bootstrap, so the substrate zero-fallback is intact; only the class->schema resolution default flipped. ZERO invention (honours the anti-skew guardrail): Full activates the already-existing, already-tested 9 ValueTenants (helix-48 is the existing HelixResidue tenant, not a new property). Guard test value_schema_default_is_full_temporary_poc added. 613 lib tests green. Tracked as TD-VALUESCHEMA-FULL-POC-DEFAULT (revert-before-merge obligation); AGENT_LOG prepended. https://claude.ai/code/session_01D2WSmezQBNC3bUdHuGfGmo
1 parent d53f3cc commit b37fbbc

3 files changed

Lines changed: 56 additions & 7 deletions

File tree

.claude/board/AGENT_LOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
## 2026-06-15 — ValueSchema POC default: `ClassView::value_schema` flipped Bootstrap→Full (operator decision (a))
2+
3+
**Main thread (Opus 4.8 1M).** Operator: *"(a) flip the blanket default to Full (all unconfigured classes → Full) / any consumer that needs to save memory can create [its] smaller settings / any consumer that needs more data and more efficiency can afford a separate class"* + *"prevent any agents telling us to invent additional skewed properties in the SoA when we already have a lot of good and well tested ideas"* + consumers *woa-rs / medcare-rs / q2 / tesseract-rs (favourite) — transcode that creates a testable POC*.
4+
5+
**Shipped (contract, 1-line behavior flip + guard test):** `ClassView::value_schema` (class_view.rs:233) `Bootstrap → Full`. Layout-preserving (no stride / `ENVELOPE_LAYOUT_VERSION` change). TYPE-level `ValueSchema::default()` stays `Bootstrap` (substrate zero-fallback intact) — only the class→schema *resolution* default flipped, so specialisation is opt-IN (mint a class to go smaller/denser). **Zero invention** (honours the anti-skew guardrail): `Full` activates the already-existing, already-tested 9 `ValueTenant`s (helix-48 = `HelixResidue` tenant already in Full+Compressed — NOT added). Guard test `value_schema_default_is_full_temporary_poc` added (asserts the POC default + that the type default + edge-codec axis are untouched). `cargo test -p lance-graph-contract`**613 lib green**. Tracked as **TD-VALUESCHEMA-FULL-POC-DEFAULT** (revert-before-merge obligation).
6+
7+
**Next:** fold the 3-hardener findings + a §0 ANTI-INVENTION GUARDRAIL into the plan; scope the tesseract-rs transcode POC (first consumer, against the now-Full slab); #496 carries it all.
8+
19
## 2026-06-15 — integrated-cognitive-planner-v1: 5-savant EXPANSION pass folded (3 doc errors corrected + §2.1/§3.1/§4.1/§8 added)
210

311
**Main thread (Opus 4.8 1M) + 5 Opus expansion savants** (convergence-architect / bus-compiler / truth-architect / scenario-world / trajectory-cartographer), all pinned to `integrated-cognitive-planner-v1.md` by `file:line` (per "always have reference documentation that the agents can target, otherwise they will hallucinate"). Each returned a brief; main thread folded them into the doc (no agent edited the doc — collision-free).

.claude/board/TECH_DEBT.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,14 @@
1515

1616
## Open Debt
1717

18+
### TD-VALUESCHEMA-FULL-POC-DEFAULT — `ClassView::value_schema` blanket default flipped Bootstrap→Full for the consumer-POC phase (2026-06-15)
19+
20+
**Surfaced by** operator decision (a): *"flip the blanket default to Full (all unconfigured classes → Full) / any consumer that needs to save memory can create [its] smaller settings / any consumer that needs more data and more efficiency can afford a separate class."* Enables the downstream consumers (tesseract-rs / woa-rs / medcare-rs / q2) to transcode against a fully-materialised `NodeRow` while the POC is built.
21+
22+
**The debt:** `ClassView::value_schema` (`class_view.rs:233`) returns `ValueSchema::Full` instead of the canon zero-fallback `ValueSchema::Bootstrap`. This INVERTS the zero-fallback ladder for the value-slab *resolution* (specialisation is now opt-IN: mint a class to go smaller/denser). It is layout-preserving (no `NODE_ROW_STRIDE` / `ENVELOPE_LAYOUT_VERSION` change — Full carves within the reserved 480 B) and a one-line revert. The TYPE-level `ValueSchema::default()` stays `Bootstrap`, so the substrate zero-fallback semantics are intact — only the class→schema resolution default flipped. **No invention** (honours the operator's anti-skew guardrail): `Full` activates the already-existing, already-tested 9 `ValueTenant`s; it adds no new property.
23+
24+
**Pay it by:** reverting `class_view.rs:233` to `ValueSchema::Bootstrap` once the consumer POCs settle on their real per-class presets, AND flipping the guard test `value_schema_default_is_full_temporary_poc` (`class_view.rs`) back to assert Bootstrap. The edge-codec axis (`edge_codec_flavor``CoarseOnly`) is a separate knob, untouched; flip it to a residue/PQ flavor only if a consumer POC needs full edge fidelity too. Tests: 613 lib green.
25+
1826
### TD-NDARRAY-SIMD-POPCNT-NATIVE — `extract_rules` SIGILLs under `-C target-cpu=native` on larger RowMasks (2026-06-14)
1927

2028
**Surfaced by** the `invariance_witness_probe` (lance-graph-arm-discovery, `--features ndarray-simd`).

crates/lance-graph-contract/src/class_view.rs

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -222,16 +222,29 @@ pub trait ClassView {
222222
/// Which value-slab schema preset this class materialises in
223223
/// [`NodeRow::value`](crate::canonical_node::NodeRow::value).
224224
///
225-
/// Default is
226-
/// [`ValueSchema::Bootstrap`](crate::canonical_node::ValueSchema::Bootstrap)
227-
/// — the canon zero-fallback (value all zero; only key + edges meaningful). An
228-
/// implementor overrides this to declare a denser preset (`Cognitive` /
229-
/// `Compressed` / `Full`). Selection only: every preset carves within the
225+
/// **TEMPORARY (POC default, 2026-06-15):** returns
226+
/// [`ValueSchema::Full`](crate::canonical_node::ValueSchema::Full) — every
227+
/// *unconfigured* class (incl. the default `classid 0x0000_0000`) materialises
228+
/// the whole value slab so downstream consumers (tesseract-rs / woa-rs /
229+
/// medcare-rs / q2) can transcode against a fully-populated `NodeRow` POC.
230+
/// Specialisation is **opt-IN, not opt-out**: a consumer that needs to save
231+
/// memory mints a class that overrides this to a smaller preset (`Cognitive` /
232+
/// `Compressed` / `Bootstrap`); a consumer that needs denser/specialised data
233+
/// mints a *separate* class. Selection only: every preset carves within the
230234
/// reserved 480-byte value slab, so the choice never changes `NODE_ROW_STRIDE`
231-
/// (canon "registry-resolved via `classid → ClassView`", never a stride change).
235+
/// (canon "registry-resolved via `classid → ClassView`", never a stride change)
236+
/// — flipping the default is layout-preserving and a one-line revert to
237+
/// `Bootstrap` (the canon zero-fallback) before merge. The type-level
238+
/// [`ValueSchema::default()`](crate::canonical_node::ValueSchema) stays
239+
/// `Bootstrap`, so the substrate zero-fallback semantics are untouched; only
240+
/// the class→schema *resolution* default is Full.
232241
#[inline]
233242
fn value_schema(&self, _class: ClassId) -> crate::canonical_node::ValueSchema {
234-
crate::canonical_node::ValueSchema::Bootstrap
243+
// TEMPORARY POC default — see doc above. Revert to `ValueSchema::Bootstrap`
244+
// (canon zero-fallback) before merge. No invention: `Full` activates the
245+
// already-existing, already-tested 9 ValueTenants (helix-48 / turbovec /
246+
// signed / fingerprint / …), it adds no new property.
247+
crate::canonical_node::ValueSchema::Full
235248
}
236249
}
237250

@@ -430,4 +443,24 @@ mod tests {
430443
vec!["Total", "Tax", "Partner"]
431444
);
432445
}
446+
447+
#[test]
448+
fn value_schema_default_is_full_temporary_poc() {
449+
// TEMPORARY (2026-06-15 POC): the blanket ClassView default materialises the
450+
// FULL value slab so consumers (tesseract-rs / woa-rs / medcare-rs / q2)
451+
// transcode against a populated NodeRow. Specialisation is opt-IN (override
452+
// to a smaller preset). When the POC phase ends, revert the default to
453+
// `ValueSchema::Bootstrap` AND this test together.
454+
use crate::canonical_node::{EdgeCodecFlavor, ValueSchema};
455+
let classes = FakeClasses::new();
456+
// The default class (classid 0x0000_0000) and any unconfigured class both
457+
// resolve to Full while the POC default is active.
458+
assert_eq!(classes.value_schema(0), ValueSchema::Full);
459+
assert_eq!(classes.value_schema(7), ValueSchema::Full);
460+
// The edge-codec axis is SEPARATE and untouched (still the CoarseOnly
461+
// zero-fallback) — only the value slab flipped to Full.
462+
assert_eq!(classes.edge_codec_flavor(0), EdgeCodecFlavor::CoarseOnly);
463+
// The TYPE-level default is unchanged: substrate zero-fallback stays Bootstrap.
464+
assert_eq!(ValueSchema::default(), ValueSchema::Bootstrap);
465+
}
433466
}

0 commit comments

Comments
 (0)