Repository navigation
Commit 36e5d17
committed
D-SPG-6 re-scoped: the sealed batch is SoA-owned; a consumer that opens a Dataset has already lost
Operator, 2026-09-07: "that's not a convenience you're violating lance-graph
879 batchwriter SOA owned" — then "879 909..912 1049 1198". Read against the
merged code, and the finding is worse than the framing I gave it.
LanceCycleWriter (graph::cycle_sink, #911 -> #912 Phase A) is the SOLE
application writer and the topology is enforced by the type: non-Clone,
commit_cycle(&mut self), one long-lived owned Dataset handle. SoA owners are
fire-and-forget producers that cast; they are never Lance writers. The
consumer-side seal_alpha_cycle I had written violated four properties at once:
a second unowned writer reopening per call; a consumer as Lance writer; an
unconditional write (#911's empty-cycle versioning was REMOVED, I reintroduced
it); and a read-version-then-append TOCTOU whose "refuse, not renumber" guard
cannot work, because Append rebases even single-attempt and the compensating
delete #911 added was itself removed by #912.
sealed_version = base_version + 1 is a VERIFIED IDENTITY inside that sink, not
caller arithmetic. Re-deriving it from outside the component that proves it is
the transferable tell: the question is not whether the arithmetic is right but
who is entitled to say it.
- STATUS_BOARD + spec F6/D-SPG-6: re-scoped. The alpha cycle CASTS a descriptor
(mailbox, dirty row-range, cycle), never owned rows; read-back is
temporal::QueryReference::at + deinterlace. Blocked upstream, not queued in
MedCare: LanceShardSink does not exist (#879 honesty ledger) and the read
side is unwired (#1198). Gates re-registered as NoChange / Reconciled /
HashConflict.
- SpogTenants::merged_rows doc: the sentence calling it "the row form the
sealed batch per cycle is built from" pointed a future session at exactly
this violation. Corrected in place, with the zero-copy sink ruling named
(the cast payload is a descriptor, deltas stay in the SoA store and the sink
reads them via NodeRowPacket::as_le_bytes at flush). Method unchanged; it is
a reading, not a write payload.
- EPIPHANIES E-A-CONSUMER-THAT-OPENS-A-DATASET-HAS-ALREADY-LOST-1, including
why the DataFusion weight was the symptom: bypassing the owned writer is what
reaches for the umbrella crate. "datafusion does joins, we do masking Ops, no
joins ever" (operator) — a join materialises the rejected world; the
crosswalk only looks like one and is a chain of masked equality sweeps.
Gates: fmt 0, clippy --no-deps -D warnings 0, contract spog_tenants 8/8,
append-only OK, no new citation decay, supersession index regenerated last.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KCGhDYoQBXs3poaR7sFuqp1 parent 48e29a1 commit 36e5d17
4 files changed
Lines changed: 102 additions & 6 deletions
File tree
- .claude
- board
- plans
- crates/lance-graph-contract/src
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
1 | 74 | | |
2 | 75 | | |
3 | 76 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
13 | | - | |
| 13 | + | |
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| |||
0 commit comments