Skip to content

Commit 0fd213a

Browse files
committed
T1.12b fix 2: first approval at admission (H19); the Journey and check-in lists completed
Codex P2 (review of c92131a): the Journey row routed RS-6 and DT-7 to T1.33 for approval and a refusal to T1.36, against H19. It now reads, as the review gave it: RS-6, DT-7 and DT-4 are independently reviewed and approved in the change first admitting an affected case to acceptance; a new refusal of a reference-accepted input needs the owner before that admission; T1.33 reconciles and T1.36 reviews the go/no-go. DT-4 stays pending, not approved here. Subagent P3s and nits: - the still-awaiting list adds H15's fields (with E33) and H9's rule against the measured counts, which T1.11e measured as holding, and says the owner confirms E47's no-scrub presentation of an echoed credential; - the nineteen early orchestrator rows still to confirm (A1-A3, A5-A7, A9, B-D2, B-D3, B-D6-B-D8, Q1, Q3, C5-C9) are named for the Phase 1a check-in, in the tracker and the design, and the Contract v3 row's "remaining listed rows" says it did not cover them; - the design's Baseline cases check-in names register ORD-2; - T1.28a names E49's depth and recursion probe, the wide-object probe staying in T1.28b's matrix; - the T1.12b row's design.md size after this round, 188,950. Signed-off-by: Adi Wadaskar <awadaskar@nvidia.com>
1 parent c92131a commit 0fd213a

2 files changed

Lines changed: 6 additions & 6 deletions

File tree

‎docs/design/rust-core/phase-1/design.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,7 @@ Each readiness item (sections 1.1 to 1.14 of the planning input `A-readiness-aud
474474
| T1.25 | 1b | Time module on `jiff` | `Instant` and `Span` (F3) first; DT-7 value-by-value reading on SQL sources (ownership: whether a source's text times are read value by value is a capability the provider declares, filled by `sdm-data` for its SQL dialects; `sdm-engine::time` holds both readers and picks by that capability, never by a dialect), inference over the preview, offsets; the text-date shape reader as one module, `sdm-engine::time::text_shapes`, a port written only from `date-rules.md` with the T0.6 vectors; session zone from host facts. Amended at T1.21b (E51(e)): the scope is the refusal map's T1.25 entry (`contract/refusal-maps/base.adventureworks.json`: `text_time`, the seven AdventureWorks text columns of codes with digits that could be dates) plus what the 40-case inventory needs; a rule neither needs stays refused (P1B) | The T0.6 column cases and the inventory's time cases infer the reference's time columns; the range-end vectors pass in every vendored zone; any shape outside `date-rules.md` is a register entry, not code | |
475475
| T1.26 | 1b | Sampling | `sample_target` call order, default seed 42, SQL steps as batched data requests including `Neighbors`, RS-6 reservoir SQL (ownership: the sampler in `sdm-engine` emits typed `SampleEntities` and `Neighbors` requests; each dialect's sampling SQL, the reservoir clause and Databricks' percentage text included, is `sdm-data`'s, behind the request); the comparator's nondeterminism rules. Amended at T1.21b (E51(e)): the scope is the refusal map's T1.26 entries (`contract/refusal-maps/base.adventureworks.json`: `deeper_hop`, the order lines referring to customers as well as products, and `text_column`, a text feature normalized as the reference's sampler normalizes it) plus what the 40-case inventory needs; a rule neither needs stays refused (P1B) | `base.regression`'s fetch traces meet their effective approved expectation under H9's rule, each deviation approved in this change; L1 vectors for both `Neighbors` forms, `_by_fkey` and `_by_time`, on the DuckDB path (anchor equality, window starts and ends, sub-second gaps, ties, NULL time, negative times, several seeds reaching one neighbor, a `TIMESTAMPTZ` time column under `SET TimeZone='America/New_York'`) pass, recording the SQL sampler's policy (register ORD-2, F2); a provider not declaring `Neighbors` is refused by name. Amended at T1.10e (E52, the owner's answer on state lifetime): T1.26 is not blocked on the owner; the core stays stateless, `materialize` returns an opaque, versioned state value the host keeps on its materializer and hands back so the core skips the index read it has made (a contract change, H4), the once-per-process coverage warning's dedupe lives in `sdm-host`, and no language holds a flag; tests cover two calls, two materializers, a failure before and after the check, and H9's statement counts on the second call; the ledger's index-warning flag and `context_coverage` refusal leave with it. Amended at T1.21d (T1.21c's review, subagent P3-1, the owner caring about dialect leaks): the sampler's dialect-dependent behaviours become a per-dialect capability `sdm-data` declares, not DuckDB's defaults written into the core: the tie-break's `nulls_last: true` (`rust/crates/sdm-engine/src/sample.rs:211-235`, `tie_break`, which relies on DuckDB's default null order) and the index check `materialize` makes on every run whatever the provider (`missing_indexes`, called unconditionally at `rust/crates/sdm-core/src/materialize.rs:616`); and, before anything consumes an index over several columns, an index whose coverage the dialect's reader cannot resolve is represented as such, not guessed: DuckDB's reader splits an index's expressions on commas (`rust/crates/sdm-data/src/duckdb.rs:334`, Codex's P3 at T1.21c), which an expression holding a comma breaks. Named checks added at T1.12b (checkpoint 4, Codex P3 and subagent P3): an alternative null-order policy, so the sampler's hard-coded `nulls_last` (`rust/crates/sdm-engine/src/sample.rs:214-233`) comes from the provider, a test provider declaring the other order; a provider without meaningful index advice, for which the index check `materialize` runs on every call (`missing_indexes`, `rust/crates/sdm-core/src/materialize.rs:438`, called at `:616`) neither reads indexes nor warns; both policies supplied by `sdm-data`'s capabilities (`ProviderCapabilities`, `rust/crates/sdm-contract/src/data.rs:418`), never by a dialect match in domain code; no second warehouse is built in Phase 1 | |
476476
| T1.27 | 1b | Labels | Kernels in Rust over fetched Arrow, not compiled to SQL (E19), with float32 Kahan sums in row order, `DateOffset` rules on `jiff`. Amended at T1.21b (E51(e)): the refusal map has no T1.27 entry (the AdventureWorks labels, a 30-day `SUM` over an `int64` column, are taken: its last probe reaches `predict`'s result on both runners), so the scope is what the 40-case inventory needs; a rule it does not need stays refused (P1B) | Labels in `base.regression`'s payload meet their effective approved expectation, compared exactly; a tolerance rule goes to the owner only if exactness proves costly (E19); `DateOffset` window ends at month ends and leap days match the reference's `_by_time` seeds | |
477-
| T1.28a | 1b | Wire and payload rules | Split from T1.28 at T1.12b (checkpoint 4, subagent P3), with its own landing and stop-rule counter row: `sdm-wire` from the pinned OpenAPI file; the payload's layout in `sdm-request`, without the `json.dumps` size count or CPython sort emulation; the ledger's payload rules ("Host-held semantics": the context that answers the question taken out and the windowed rule choosing it, the regression statistic, the run mode and `num_context_samples`' bound, the entity count, the shape and the payload limits, the empty and reserved-name refusals, `materialize`'s notices by code). Amended at T1.21b (E51(e)): the scope is the refusal map's T1.28 entry and gap (`contract/refusal-maps/base.adventureworks.json`: `materialize`'s `inference_config`, carried by the contract and written into the call as E45(a) has it, the options `kumo-relational` reads; the map's owner `T1.28` reads as T1.28a) plus what the 40-case inventory needs; a rule neither needs stays refused (P1B) | `base.regression`'s parsed payload meets its effective approved expectation; an L1 check at the payload limit counts the bytes sent (PD-2). Amended at T1.11f (checkpoint 3): the ledger's payload rules move into `sdm-request`, and `python-core` and `rust-host` public outcomes match for context leakage and limits, the Rust host holding no parallel implementation of either; E49's depth and width probe runs on every JSON reader `sdm-wire` gains here (thousands of nested levels and a very wide object, each refused by name or read) | |
477+
| T1.28a | 1b | Wire and payload rules | Split from T1.28 at T1.12b (checkpoint 4, subagent P3), with its own landing and stop-rule counter row: `sdm-wire` from the pinned OpenAPI file; the payload's layout in `sdm-request`, without the `json.dumps` size count or CPython sort emulation; the ledger's payload rules ("Host-held semantics": the context that answers the question taken out and the windowed rule choosing it, the regression statistic, the run mode and `num_context_samples`' bound, the entity count, the shape and the payload limits, the empty and reserved-name refusals, `materialize`'s notices by code). Amended at T1.21b (E51(e)): the scope is the refusal map's T1.28 entry and gap (`contract/refusal-maps/base.adventureworks.json`: `materialize`'s `inference_config`, carried by the contract and written into the call as E45(a) has it, the options `kumo-relational` reads; the map's owner `T1.28` reads as T1.28a) plus what the 40-case inventory needs; a rule neither needs stays refused (P1B) | `base.regression`'s parsed payload meets its effective approved expectation; an L1 check at the payload limit counts the bytes sent (PD-2). Amended at T1.11f (checkpoint 3): the ledger's payload rules move into `sdm-request`, and `python-core` and `rust-host` public outcomes match for context leakage and limits, the Rust host holding no parallel implementation of either; E49's depth and recursion probe runs on every JSON reader `sdm-wire` gains here (thousands of nested levels, refused by name or read, never a crash or a `RecursionError`); the wide-object probe stays in T1.28b's boundary-vector matrix | |
478478
| T1.28b | 1b | Predict-side rules and the result | Split from T1.28 at T1.12b (checkpoint 4, subagent P3), with its own landing and stop-rule counter row: the response and the result's layout in `sdm-request`; the ledger's predict-side rules ("Host-held semantics": the adapter's `_preflight`, the call's model and output checks in `SDMClient._prepare`, the answer to a request with no rows, the parts merged into one result with the notice of an absent output); a rule the 40-case inventory does not need stays refused (P1B); the freeze's proposed sunset (E56(d)) falls at its landing | L1 layout vectors with distinct per-row answers and reordered responses pass. Amended at T1.11f (checkpoint 3): the predict-side rules move into `sdm-request`, and `python-core` and `rust-host` public outcomes match for empty and constant context and multi-part results, the Rust host holding no parallel implementation of any; before review, a bounded boundary-vector matrix, extending the shared vector files, is agreed and run on both hosts: deep and wide JSON, finite overflow and non-finite numbers, the endpoint's against a local error's provenance, and missing or retyped evidence | |
479479
| T1.29 | 1b | Baseline cases | The routes generalized past `base.regression`; reference observations for the cases admitted, committed under T1.13's rules and recorded on `python-ref` like every other case's (E31's orchestrator detail, owner to confirm); E27: an AdventureWorks-style relational dataset loaded into DuckDB joins them as a baseline case, in addition to the 40-case inventory (E31) | `base.regression`, `base.binary`, `base.multiclass` and the AdventureWorks-style relational case on DuckDB (E27) meet their effective approved expectations on all applicable runners and cells, each deviation approved in this change (H19), before any other case is worked on; the owner check-in report is sent. Amended at T1.11f: the AdventureWorks case is T1.21b's; amended at T1.21b: its refusal map maps the notebook's `demand_30d` question only, over columns its probes kept, so passing the case may need rules T1.21b's map could not show, which the fail-closed map names when they surface; `contract/pinned/base.regression.core.json` (29,171 lines) is retired once `compare.py`'s `core` rule gates the reached cases, if the seeded failures the pin catches are caught without it. Amended at T1.12b (checkpoint 4, Codex P2): T1.29 is joint acceptance, not first discovery: T1.21e adds the inventory's cases, `base.binary` and `base.multiclass` among them, with their reference observations and the family refusal maps, and every package from T1.23 to T1.28 reruns the unstripped AdventureWorks journey, the baseline cases and those maps (Process rules); the pin stays until here under T1.11f's condition above, re-recorded by T1.21d | The four cases, as acceptance |
480480
| T1.30 | 1b | DuckDB SQL goldens (L4 part) | Folded by the owner into the family packages (E53(c)): each of T1.32a to T1.32e adds the reviewed golden SQL for its own statements, executed on DuckDB in CI, as extensions of `sdm-data`'s `tests/duckdb_catalog.rs` text pins; no package of its own | The families' exits | |
@@ -499,8 +499,8 @@ Owner amendment, 2026-10-10: at the Journey check-in the executor sends the repo
499499
|---|---|---|
500500
| Contract v3 | T1.7b | E1 to E13 and E15; H3, H4's working-version reading, H7, H14, H16 to H27; F7; C2 to C4; Q2; register DT-8, DT-9 and HOST-2; the gate bootstrap and the narrowed checkpoint overlay (H2) |
501501
| Journey | T1.11e | H14 and H15's shapes, with E33(a), which amends the owner-approved H14's port signature; H9's rule against the measured counts; the value-only exclusion of `metadata.request_id` (E35), approved by the owner on 2026-10-10, before the report; T1.11 escalations; E20 to E26 and later rows awaiting confirmation (E32 and on, E33, E34 and E36 to E49 included); the owner's open design question of 2026-10-10, whether the core should have an "instantiate once" session object holding state across runs (E41(c)'s once-per-process coverage warning, E41(j)'s once-per-materializer index check), answered by the owner on 2026-10-10 (E52, state as a value; recorded at T1.10e), so T1.26 is not blocked; E49 approved by the owner the same day. Checkpoint 3's recommendations, for the owner to weigh, not adopted: Codex, a small shared materializer or session state with a host-owned lifetime and explicit invalidation, the once-per-process warning a separate lifetime decided apart, tested over two calls, two materializers, a failure before and after the check and concurrent calls; the subagent, per-object state returned by the core as an opaque, versioned value, as `RequestState` is, which the host stores and hands back, and the per-process warning dedupe in `sdm-host`, so every binding inherits it; the first live smoke's finding (E27; tracker, T1.11d); register DT-3's end-time question, moved out of its approved notes at T1.21b: with the in-memory route's marker kept, should it clear every end time as the SQL route does (an answer public only through the engine package's own API). Sent on 2026-10-10, after T1.11e; what still awaits the owner is listed in the tracker's Journey row (T1.12b) |
502-
| Phase 1a | T1.20 | Every open row; the held-out threshold (H11); the S0 differential's result |
503-
| Baseline cases | T1.29 | The approved deviations of the four baseline cases (E31); anything that changes how T1.32a to T1.32e proceed; E51 (T1.21b: the AdventureWorks fixture, the case format's three keys, the refusal map's reading and the scope rule it sets for T1.23 to T1.28); what T1.21b's map could not show (the columns its describe probes drop, and the notebook's other five questions: an `anchor_time`, a `FORECAST`, a ranking with `candidates`, `num_context_samples`, a classification), so T1.23 to T1.28's scope may grow here |
502+
| Phase 1a | T1.20 | Every open row, among them the early orchestrator rows still marked "owner to confirm" (A1 to A3, A5 to A7, A9, B-D2, B-D3, B-D6 to B-D8, Q1, Q3 and C5 to C9), on no earlier check-in's list; the held-out threshold (H11); the S0 differential's result |
503+
| Baseline cases | T1.29 | The approved deviations of the four baseline cases (E31); register ORD-2 (T1.26's vectors of the SQL sampler's policy; its settlement deferred to Phase 4 by F2); anything that changes how T1.32a to T1.32e proceed; E51 (T1.21b: the AdventureWorks fixture, the case format's three keys, the refusal map's reading and the scope rule it sets for T1.23 to T1.28); what T1.21b's map could not show (the columns its describe probes drop, and the notebook's other five questions: an `anchor_time`, a `FORECAST`, a ranking with `candidates`, `num_context_samples`, a classification), so T1.23 to T1.28's scope may grow here |
504504

505505
## Phase 1b go or no-go evidence pack
506506

0 commit comments

Comments
 (0)