From 54c59f3e1cd82ad826edd26b2e5b65e22fc23de8 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 26 Oct 2026 06:28:28 +0000 Subject: [PATCH 1/2] =?UTF-8?q?probe(D-DQM=20P1):=20chunk-touched=20predic?= =?UTF-8?q?tor=20vs=20H14c/H14d=20Lance=20bytes=20=E2=80=94=20FAIL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Offline, over committed data only (no Lance run, no runtime code). Regenerates all 136 masks from the probes' seeded generators (counts match; input-set disable runs fire 37/11/8/29) and compares non-zero 4,096-row groups / 16 with measured masked/unmasked bytes. Registered thresholds pass on all cells (8.8 % > 0.10, Spearman 0.988) only because 63 cells select nothing; the clustered 1 % control misses (0.44 predicted vs 0.24 / 0.19 measured) and the predictor over-predicts in 59 of 73 non-empty cells. The one registered follow-up (64 KiB merge) fails too. Verdict FAIL; no estimator proposed. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01X6y3drwKSE2zSgoexheLFX --- .../2026-10-26-dqm-p1-chunk-touched.md | 85 +++++ .claude/board/entries/README.md | 3 +- .claude/probes/p1-chunk-touched-v1/p1.py | 328 ++++++++++++++++++ .../probes/p1-chunk-touched-v1/results.csv | 137 ++++++++ 4 files changed, 552 insertions(+), 1 deletion(-) create mode 100644 .claude/board/entries/2026-10-26-dqm-p1-chunk-touched.md create mode 100644 .claude/probes/p1-chunk-touched-v1/p1.py create mode 100644 .claude/probes/p1-chunk-touched-v1/results.csv diff --git a/.claude/board/entries/2026-10-26-dqm-p1-chunk-touched.md b/.claude/board/entries/2026-10-26-dqm-p1-chunk-touched.md new file mode 100644 index 000000000..01a759886 --- /dev/null +++ b/.claude/board/entries/2026-10-26-dqm-p1-chunk-touched.md @@ -0,0 +1,85 @@ +# 2026-10-26 — D-DQM P1: chunk-touched predictor vs measured Lance 13 bytes — FAIL + +**Status:** MEASURED (offline, over committed data). Verdict **FAIL**. Authorises nothing. +Pre-registration: `.claude/plans/duckdb-dr-quack-machine-room-reuse-v1.md` § A.6 (P1), on PR #1788. +Code and per-cell output: `.claude/probes/p1-chunk-touched-v1/{p1.py,results.csv}`. +Run: `python3 -I .claude/probes/p1-chunk-touched-v1/p1.py .` (about 2 s, standard library only). + +**Question.** Does the fraction of 4,096-row groups a mask touches (non-zero 64-word groups / 16) predict +masked/unmasked Lance bytes? + +## Inputs (read, not modified; no Lance run) + +- H14c Lance CSV: `entries/2026-10-15-d-holo-h14c-thought-first.md` (last edit `da3f20672`). Generator: + `crates/holo-lance-masked-io-probe/src/main.rs` (last edit `a79050ac5`, before the entry). Lance 13.0.0. +- H14d rows `2-4`: `entries/2026-10-16-d-holo-h14d-logic-mask-read.md` (`175f43742`), measured commit `802db7df` + (= last edit of `crates/holo-h14d-probe/src/main.rs`). Lance 13.0.0. + +## Checks before computing + +- **Geometry and coordinates (from probe source).** Both probes write coordinates 0..65,535 in order, one batch, + one fragment (H14c `max_rows_per_file = 1 << 20`, H14d `= N`), without stable row ids. So `_rowid` = row + address = coordinate, and slot c of a regenerated mask is row offset c. Single version per dataset; the H14c + map is version-checked in the probe, and H14d reads the dataset it just wrote. +- **Mask reconstruction.** The generators were transcribed into Python. All 136 regenerated masks match the probes' + recorded counts (H14c `rows_emitted`; H14d `survivors` and `lance_rows_returned`). Disable runs that change the + generator's input set (H14d key bit 16, H14c uniform base bit 16, H14c clustered base, H14d uniform threshold + scale) produce 37, 11, 8 and 29 mismatches. Limit: the count check cannot see an XOR of low seed bits (it only + permutes positions inside the input range). That permutation keeps every row in its 4,096-row group, so it + cannot change a prediction either. Found because the first disable run (low-bit XOR) came back green. +- **Cells (fixed before computing).** H14c: `combined` vs `unmasked`, one cell per (pattern, density, k). Bytes + were asserted identical across the three materialization styles. `independent` is excluded because it reads + `coord` once per lane, a different projection from the baseline. H14d: one cell per (pattern, density, width, k), + form `and`. Total 136 cells (40 + 96), all included. + +## Results + +| test | cells | error > 0.10 | Spearman | outcome | +|---|---|---|---|---| +| baseline, registered population (all cells) | 136 | 12 (8.8 %) | 0.988 | thresholds pass | +| baseline, cells with a selection (sensitivity) | 73 | 12 (16.4 %) | 0.930 | error threshold fires | +| baseline, H14c only | 40 | 7 (17.5 %) | 0.948 | error threshold fires | +| baseline, H14d only | 96 | 5 (5.2 %) | 0.994 | pass | + +Controls (1 %, k = 1, full tile): + +| fixture | pattern | selected | groups touched | predicted | measured | | +|---|---|---|---|---|---|---| +| H14c | uniform | 692 | 16/16 | 1.000 | 1.000 | ok | +| H14d | uniform | 692 | 16/16 | 1.000 | 0.999 | ok | +| H14c | clustered | 704 | 7/16 | 0.438 | 0.242 | **miss** | +| H14d | clustered | 640 | 7/16 | 0.438 | 0.191 | **miss** | + +**Verdict: FAIL.** The A.6 thresholds pass on the registered population only because 63 of 136 cells select no +row and are trivially exact (predicted 0, measured 0 bytes). The A.6 can-fire control fails: clustered 1 % is +predicted at 0.44 against 0.24 and 0.19 measured, a miss of 0.20 and 0.25. The miss exceeds 0.19, so any control +tolerance below that gives the same answer. On cells with a selection the error threshold fires, and the +predictor over-predicts in 59 of 73. Largest misses: H14c clustered 50 % k = 4 (predicted 1.00, measured 0.30); +H14c clustered 50 % k = 2 (1.00 vs 0.70); uniform 0.1 % k = 1 (46 rows: 1.00 vs 0.77 in H14c, 0.65 in H14d). + +**Reading, not a tested claim.** Lance reads at a finer grain than 4,096 rows for these columns. A.3 already notes +mini-block chunks of at most 8 KiB, which holds about 512 values for H14c's 16-byte lanes and about 2,048 for +4-byte columns. Testing a smaller chunk would be a third tuning attempt, which A.6 forbids. + +**The one registered follow-up (64 KiB range merge, reported separately): FAIL.** 16/136 (11.8 %) cells over 0.10 +(21.9 % of cells with a selection), Spearman 0.988. The clustered controls get worse (0.56 and 0.63), because +merging only adds bytes and the baseline already over-predicts. Note: both probes wrote to a local temp +directory, where lance-io's merge block is `DEFAULT_LOCAL_BLOCK_SIZE` = 4 KiB, not the 64 KiB cloud default +(lance-io 13.0.0 `object_store.rs:87,98`). The hypothesis was tested as registered, not re-parameterised. + +**Can-stay-silent control (reported, not scored).** A.6 says shifting a clustered mask by 2,048 rows must raise +its prediction, because every run then crosses a chunk boundary. These runs are 64 rows at 64-row alignment, so a +2,048 shift moves no run across a 4,096 boundary. Result: raised in 6, equal in 21, lowered in 2 of 29. The +control's premise does not hold for these fixtures, and no measured shifted read exists. + +## Consequences + +- No estimator of this form is proposed for use before a sealed read; no runtime or production code changed. +- A.6 forbids tuning, so the correct grain remains open: no smaller chunk size or per-column width was fitted + here. A grain-correct predictor would need a new pre-registration, and would require reading Lance's actual + chunk layout rather than assuming one. +- Unchanged: S-INGRESS, the joint coordinate witness, ALLOW and BLOCK stay separate operator decisions; DR64, + `MailboxSoA`, `BatchWriter`, `CycleWriter`, the 512-byte node and MemWAL are untouched. + +OPEN: the actual mini-block chunk boundaries for the H14c/H14d columns (not read from the written files); whether +a grain-correct predictor is worth a pre-registration at all, since a uniform mask already reads every chunk. diff --git a/.claude/board/entries/README.md b/.claude/board/entries/README.md index 4c7a420f4..788082e4c 100644 --- a/.claude/board/entries/README.md +++ b/.claude/board/entries/README.md @@ -25,10 +25,11 @@ index row, (3) no duplicate entry id. Checks 1 and 2 are deliberately opposite directions; the stranding this convention prevents shows up in exactly one of them, never both. -476 entries, 2026-08-06 .. 2026-10-25. +477 entries, 2026-08-06 .. 2026-10-26. | date | entry id | finding | file | |---|---|---|---| +| 2026-10-26 | `D-DQM` | FAIL | [2026-10-26-dqm-p1-chunk-touched.md](2026-10-26-dqm-p1-chunk-touched.md) | | 2026-10-25 | `D-DRF-W8` | | [2026-10-25-drf-w8-budget.md](2026-10-25-drf-w8-budget.md) | | 2026-10-25 | `D-DRF-W4` | | [2026-10-25-drf-w4-handoff.md](2026-10-25-drf-w4-handoff.md) | | 2026-10-25 | `D-DRF-W3` | | [2026-10-25-drf-w3-ordered-apply.md](2026-10-25-drf-w3-ordered-apply.md) | diff --git a/.claude/probes/p1-chunk-touched-v1/p1.py b/.claude/probes/p1-chunk-touched-v1/p1.py new file mode 100644 index 000000000..be85ba273 --- /dev/null +++ b/.claude/probes/p1-chunk-touched-v1/p1.py @@ -0,0 +1,328 @@ +#!/usr/bin/env python3 +"""D-DQM P1: does a chunk-touched predictor explain the Lance 13 masked-read bytes +already measured in D-HOLO H14c and H14d? + +Pre-registration: `.claude/plans/duckdb-dr-quack-machine-room-reuse-v1.md` § A.6 (P1). +Offline only. Reads the committed board entries, regenerates each cell's mask from the +probes' own seeded generators, and compares. No Lance run, no runtime code. + +Inputs (read, never written): + H14c .claude/board/entries/2026-10-15-d-holo-h14c-thought-first.md (Lance CSV block) + generator: crates/holo-lance-masked-io-probe/src/main.rs (`mix`, `present`, main loop) + H14d .claude/board/entries/2026-10-16-d-holo-h14d-logic-mask-read.md (rows `2-4`) + generator: crates/holo-h14d-probe/src/main.rs (`mix`, `draw`, `clustered_threshold`, + `present`, `in_aperture`, `expr(Form::And, k)`) + +Decisions fixed before any number was computed (none may be changed to rescue a result): + * cell unit: H14c one per (pattern, density, k) for strategy `combined` vs `unmasked`, + after asserting `bytes_read` is identical across the three materialization styles + (the entry reports 0 of 120 cells differ; asserted here, not assumed). `independent` + is excluded: it reads `coord` once per lane, a different projection from the + baseline, so its ratio is not masked/unmasked of one read. + H14d one per (pattern, density, width, k), form `and` (the only form read from Lance). + * all cells count, including zero-survivor cells; a sensitivity line without them is + printed beside the primary result, never instead of it. + * baseline predictor: nonzero 64-word groups / total groups (4,096 rows per group, + 16 groups in a 65,536-row tile). + * kill (A.6): |predicted - measured| > 0.10 in more than 10 % of cells, or Spearman + rank correlation < 0.9. + * one follow-up only if the baseline fails: the pre-registered 64 KiB range-merge + hypothesis, per column, chunk bytes = 4,096 x the column's plain value width, + touched groups separated by at most floor(65536 / chunk_bytes) untouched groups are + read too (lance-io `is_close_together`, scheduler.rs:1172), columns weighted by plain + width. Reported separately; never relabelled as the baseline. + +Coordinate witness (checked from the probe source, not inferred from the CSV): both probes +write coordinates 0..65535 in order as ONE batch into ONE fragment (H14c +`max_rows_per_file = 1 << 20`, H14d `max_rows_per_file = N`), without stable row ids +(H14c `enable_stable_row_ids: false`; H14d default). So `_rowid` = row address = coordinate, +and slot c of a regenerated mask is row offset c. Each regenerated mask is also checked +against the probe's own recorded row count (H14c `rows_emitted`, H14d `survivors`). + +Run: python3 -I .claude/probes/p1-chunk-touched-v1/p1.py [repo_root] +""" +import csv +import math +import os +import sys + +M64 = (1 << 64) - 1 +N = 65_536 +W = N // 64 +GROUP = 4096 +GROUPS = N // GROUP +LANES = 8 + + +def mix(z): + z = (z + 0x9E3779B97F4A7C15) & M64 + z = ((z ^ (z >> 30)) * 0xBF58476D1CE4E5B9) & M64 + z = ((z ^ (z >> 27)) * 0x94D049BB133111EB) & M64 + return z ^ (z >> 31) + + +# ---------------------------------------------------------------- H14c generator + +def h14c_lane(pattern, d, l): + """Mask of coordinates where lane l is present, as W little-endian u64 words.""" + if d >= 1.0: + return [M64] * W + t = min(int(d * float(M64)), M64) # Rust `(d * u64::MAX as f64) as u64` (saturating) + words = [0] * W + if pattern == "uniform": + base = 0x1A9E ^ (l << 40) + for c in range(N): + if mix(base ^ c) < t: + words[c >> 6] |= 1 << (c & 63) + else: + base = 0xC1 ^ (l << 40) + for w in range(W): + if mix(base ^ w) < t: + words[w] = M64 + return words + + +# ---------------------------------------------------------------- H14d generator + +def h14d_draw(l, key): + return mix(((l << 40) ^ key ^ 0x5151) & M64) + + +def rust_round(x): + return math.floor(x + 0.5) if x >= 0 else math.ceil(x - 0.5) + + +def h14d_lane(pattern, d, l): + words = [0] * W + if pattern == "uniform": + two53 = float(1 << 53) + for i in range(N): + if (h14d_draw(l, i) >> 11) / two53 < d: + words[i >> 6] |= 1 << (i & 63) + return words + m = int(rust_round(d * W)) + if m == 0: + return words + h = sorted(h14d_draw(l, w) for w in range(W)) + t = h[m - 1] + for w in range(W): + if h14d_draw(l, w) <= t: + words[w] = M64 + return words + + +# ---------------------------------------------------------------- predictors + +def touched_groups(words): + """One flag per 64-word group (4,096 rows): does the group hold any selected row.""" + per = GROUP // 64 + return [any(words[g * per:(g + 1) * per]) for g in range(GROUPS)] + + +def merged(touched, max_gap): + """Touched groups plus every untouched gap of <= max_gap groups between two touched ones.""" + out = list(touched) + idx = [g for g, t in enumerate(touched) if t] + for a, b in zip(idx, idx[1:]): + if b - a - 1 <= max_gap: + for g in range(a + 1, b): + out[g] = True + return out + + +def merge_prediction(touched, widths): + total = sum(widths) + s = 0.0 + for wbytes in widths: + chunk = GROUP * wbytes + gap = 65536 // chunk + s += wbytes * sum(merged(touched, gap)) / GROUPS + return s / total + + +def popcount(words): + return sum(bin(w).count("1") for w in words) + + +def shifted(words, k): + """Mask moved k rows towards higher addresses; k is a multiple of 64 here.""" + assert k % 64 == 0 + s = k // 64 + return [0] * s + words[: W - s] + + +def spearman(xs, ys): + def ranks(v): + order = sorted(range(len(v)), key=lambda i: v[i]) + r = [0.0] * len(v) + i = 0 + while i < len(v): + j = i + while j + 1 < len(v) and v[order[j + 1]] == v[order[i]]: + j += 1 + avg = (i + j) / 2 + 1 + for k in range(i, j + 1): + r[order[k]] = avg + i = j + 1 + return r + + rx, ry = ranks(xs), ranks(ys) + mx, my = sum(rx) / len(rx), sum(ry) / len(ry) + cov = sum((a - mx) * (b - my) for a, b in zip(rx, ry)) + vx = math.sqrt(sum((a - mx) ** 2 for a in rx)) + vy = math.sqrt(sum((b - my) ** 2 for b in ry)) + return cov / (vx * vy) + + +# ---------------------------------------------------------------- inputs + +def rows(path): + with open(path) as f: + return [line.rstrip("\n").split(",") for line in f if line.startswith("csv,")] + + +def h14c_cells(root): + path = os.path.join(root, ".claude/board/entries/2026-10-15-d-holo-h14c-thought-first.md") + by = {} + for r in rows(path): + if len(r) != 13 or r[1] not in ("unmasked", "combined", "independent"): + continue + _, strat, pat, dens, k, style, emitted, nbytes = r[:8] + by.setdefault((pat, dens, int(k)), {}).setdefault(strat, []).append( + (style, int(emitted), int(nbytes))) + cells = [] + for (pat, dens, k), s in sorted(by.items()): + for strat in ("unmasked", "combined"): + assert len(s[strat]) == 3, (pat, dens, k, strat) + assert len({b for _, _, b in s[strat]}) == 1, ("style changed bytes", pat, dens, k, strat) + cells.append(dict(fixture="H14c", pattern=pat, density=float(dens), width=N, k=k, + rows=s["combined"][0][1], masked=s["combined"][0][2], + unmasked=s["unmasked"][0][2])) + return cells + + +def h14d_cells(root): + path = os.path.join(root, ".claude/board/entries/2026-10-16-d-holo-h14d-logic-mask-read.md") + by = {} + for r in rows(path): + if len(r) != 10 or r[1] != "2-4" or r[5] != "and": + continue + _, _, pat, dens, width, _, k, _, metric, val = r + by.setdefault((pat, dens, int(width), int(k)), {})[metric] = val + cells = [] + for (pat, dens, width, k), m in sorted(by.items()): + cells.append(dict(fixture="H14d", pattern=pat, density=float(dens), width=width, k=k, + rows=int(m["survivors"]), masked=int(m["lance_bytes_masked"]), + unmasked=int(m["lance_bytes_unmasked"]), + returned=int(m["lance_rows_returned"]))) + return cells + + +def main(): + root = sys.argv[1] if len(sys.argv) > 1 else os.getcwd() + out_dir = os.path.dirname(os.path.abspath(__file__)) + cells = h14c_cells(root) + h14d_cells(root) + + lane_cache = {} + + def lane(fix, pat, d, l): + key = (fix, pat, d, l) + if key not in lane_cache: + lane_cache[key] = (h14c_lane if fix == "H14c" else h14d_lane)(pat, d, l) + return lane_cache[key] + + for c in cells: + m = [M64] * W + for l in range(c["k"]): + m = [a & b for a, b in zip(m, lane(c["fixture"], c["pattern"], c["density"], l))] + if c["fixture"] == "H14d": + # aperture: i < width (widths 1024, 8192, 65536 are word multiples) + m = [x if w * 64 < c["width"] else 0 for w, x in enumerate(m)] + sel = popcount(m) + c["mask_ok"] = sel == c["rows"] and c.get("returned", sel) == sel + c["selected"] = sel + t = touched_groups(m) + c["touched"] = sum(t) + c["pred"] = sum(t) / GROUPS + c["meas"] = c["masked"] / c["unmasked"] + c["err"] = abs(c["pred"] - c["meas"]) + widths = [4] + ([16] * c["k"] if c["fixture"] == "H14c" else [4] * c["k"]) + c["pred_merge"] = merge_prediction(t, widths) + c["err_merge"] = abs(c["pred_merge"] - c["meas"]) + c["pred_shift2048"] = sum(touched_groups(shifted(m, 2048))) / GROUPS + + bad = [c for c in cells if not c["mask_ok"]] + with open(os.path.join(out_dir, "results.csv"), "w", newline="") as f: + w = csv.writer(f) + w.writerow(["fixture", "pattern", "density", "width", "k", "selected", "rows_recorded", + "mask_reconstructed", "touched_groups", "pred_ratio", "measured_ratio", + "abs_err", "masked_bytes", "unmasked_bytes", "pred_shift2048", + "pred_merge64k", "abs_err_merge64k"]) + for c in cells: + w.writerow([c["fixture"], c["pattern"], c["density"], c["width"], c["k"], c["selected"], + c["rows"], c["mask_ok"], c["touched"], f'{c["pred"]:.4f}', + f'{c["meas"]:.4f}', f'{c["err"]:.4f}', c["masked"], c["unmasked"], + f'{c["pred_shift2048"]:.4f}', f'{c["pred_merge"]:.4f}', + f'{c["err_merge"]:.4f}']) + + def verdict(label, cs, key_pred, key_err): + n = len(cs) + over = sum(1 for c in cs if c[key_err] > 0.10) + rho = spearman([c[key_pred] for c in cs], [c["meas"] for c in cs]) + fired = [] + if over / n > 0.10: + fired.append(f"error>0.10 in {over}/{n} = {100*over/n:.1f}% of cells (> 10%)") + if rho < 0.9: + fired.append(f"Spearman {rho:.3f} < 0.9") + print(f"{label}: cells={n} err>0.10={over} ({100*over/n:.1f}%) spearman={rho:.3f} " + f"-> {'FAIL: ' + '; '.join(fired) if fired else 'PASS'}") + return not fired + + print(f"cells: {len(cells)} (H14c {sum(c['fixture']=='H14c' for c in cells)}, " + f"H14d {sum(c['fixture']=='H14d' for c in cells)}); mask reconstruction mismatches: {len(bad)}") + if bad: + print("INCONCLUSIVE: regenerated masks disagree with recorded row counts:") + for c in bad: + print(" ", c["fixture"], c["pattern"], c["density"], c["width"], c["k"], c["selected"], c["rows"]) + return + thresholds_ok = verdict("baseline thresholds (all cells, the registered population)", cells, "pred", "err") + nz = [c for c in cells if c["selected"] > 0] + verdict("baseline thresholds (sensitivity: cells with a selection)", nz, "pred", "err") + for fx in ("H14c", "H14d"): + verdict(f"baseline thresholds ({fx} only)", [c for c in cells if c["fixture"] == fx], "pred", "err") + over = sum(1 for c in nz if c["pred"] > c["meas"]) + print(f" direction on cells with a selection: over-predicted {over} of {len(nz)}") + + # Can-fire controls (A.6): uniform 1 % ~ 1.00 and clustered 1 % ~ 0.2, k = 1, full + # tile. Each must sit within the kill tolerance (0.10) of its measured ratio. + print("controls (1 %, k = 1, full tile):") + controls_ok = True + for c in cells: + if c["density"] == 0.01 and c["k"] == 1 and c["width"] == N: + hit = c["err"] <= 0.10 + controls_ok &= hit + print(f" {c['fixture']} {c['pattern']}: selected={c['selected']} touched={c['touched']}/16 " + f"pred={c['pred']:.3f} measured={c['meas']:.3f} -> {'ok' if hit else 'MISS'}") + # Can-stay-silent control (A.6): +2048 rows must raise the clustered prediction. + # Its premise (every run crosses a chunk boundary) holds only for runs as long as a + # chunk; these runs are 64 rows at 64-row alignment, so it is reported, not scored. + clu = [c for c in cells if c["pattern"] == "clustered" and c["selected"] > 0] + raised = sum(1 for c in clu if c["pred_shift2048"] > c["pred"]) + same = sum(1 for c in clu if c["pred_shift2048"] == c["pred"]) + print(f" shift +2048 (not scored, premise false for 64-row runs): raised {raised}, " + f"equal {same}, lowered {len(clu) - raised - same} of {len(clu)} clustered cells") + + baseline_ok = thresholds_ok and controls_ok + print(f"BASELINE: {'PASS' if baseline_ok else 'FAIL'} " + f"(thresholds {'pass' if thresholds_ok else 'fire'}, controls {'pass' if controls_ok else 'miss'})") + if not baseline_ok: + print("one registered follow-up, reported separately:") + verdict(" 64 KiB merge hypothesis (all cells)", cells, "pred_merge", "err_merge") + verdict(" 64 KiB merge hypothesis (cells with a selection)", nz, "pred_merge", "err_merge") + for c in cells: + if c["density"] == 0.01 and c["k"] == 1 and c["width"] == N: + print(f" control {c['fixture']} {c['pattern']}: pred_merge={c['pred_merge']:.3f} " + f"measured={c['meas']:.3f}") + +if __name__ == "__main__": + main() diff --git a/.claude/probes/p1-chunk-touched-v1/results.csv b/.claude/probes/p1-chunk-touched-v1/results.csv new file mode 100644 index 000000000..f87640e66 --- /dev/null +++ b/.claude/probes/p1-chunk-touched-v1/results.csv @@ -0,0 +1,137 @@ +fixture,pattern,density,width,k,selected,rows_recorded,mask_reconstructed,touched_groups,pred_ratio,measured_ratio,abs_err,masked_bytes,unmasked_bytes,pred_shift2048,pred_merge64k,abs_err_merge64k +H14c,clustered,0.001,65536,1,64,64,True,1,0.0625,0.0235,0.0390,3000,127744,0.0625,0.0625,0.0390 +H14c,clustered,0.001,65536,2,0,0,True,0,0.0000,0.0000,0.0000,0,132552,0.0000,0.0000,0.0000 +H14c,clustered,0.001,65536,4,0,0,True,0,0.0000,0.0000,0.0000,0,143048,0.0000,0.0000,0.0000 +H14c,clustered,0.001,65536,8,0,0,True,0,0.0000,0.0000,0.0000,0,153648,0.0000,0.0000,0.0000 +H14c,clustered,0.01,65536,1,704,704,True,7,0.4375,0.2415,0.1960,31504,130448,0.4375,0.5625,0.3210 +H14c,clustered,0.01,65536,2,0,0,True,0,0.0000,0.0000,0.0000,0,135832,0.0000,0.0000,0.0000 +H14c,clustered,0.01,65536,4,0,0,True,0,0.0000,0.0000,0.0000,0,145968,0.0000,0.0000,0.0000 +H14c,clustered,0.01,65536,8,0,0,True,0,0.0000,0.0000,0.0000,0,169416,0.0000,0.0000,0.0000 +H14c,clustered,0.1,65536,1,6528,6528,True,16,1.0000,0.9613,0.0387,153736,159928,1.0000,1.0000,0.0387 +H14c,clustered,0.1,65536,2,832,832,True,7,0.4375,0.4140,0.0235,80512,194472,0.5000,0.5972,0.1832 +H14c,clustered,0.1,65536,4,0,0,True,0,0.0000,0.0000,0.0000,0,263544,0.0000,0.0000,0.0000 +H14c,clustered,0.1,65536,8,0,0,True,0,0.0000,0.0000,0.0000,0,406864,0.0000,0.0000,0.0000 +H14c,clustered,0.5,65536,1,32512,32512,True,16,1.0000,0.9197,0.0803,1086016,1180776,1.0000,1.0000,0.0803 +H14c,clustered,0.5,65536,2,15232,15232,True,16,1.0000,0.7042,0.2958,915328,1299824,1.0000,1.0000,0.2958 +H14c,clustered,0.5,65536,4,3328,3328,True,16,1.0000,0.2987,0.7013,739232,2474528,1.0000,1.0000,0.7013 +H14c,clustered,0.5,65536,8,192,192,True,3,0.1875,0.0138,0.1737,92312,6701944,0.1250,0.1970,0.1832 +H14c,clustered,1.0,65536,1,65536,65536,True,16,1.0000,1.0000,0.0000,1175680,1175680,1.0000,1.0000,0.0000 +H14c,clustered,1.0,65536,2,65536,65536,True,16,1.0000,1.0000,0.0000,2227328,2227328,1.0000,1.0000,0.0000 +H14c,clustered,1.0,65536,4,65536,65536,True,16,1.0000,1.0000,0.0000,4330624,4330624,1.0000,1.0000,0.0000 +H14c,clustered,1.0,65536,8,65536,65536,True,16,1.0000,1.0000,0.0000,8535168,8535168,1.0000,1.0000,0.0000 +H14c,uniform,0.001,65536,1,46,46,True,16,1.0000,0.7653,0.2347,97424,127296,1.0000,1.0000,0.2347 +H14c,uniform,0.001,65536,2,1,1,True,1,0.0625,0.0497,0.0128,6536,131560,0.0625,0.0625,0.0128 +H14c,uniform,0.001,65536,4,0,0,True,0,0.0000,0.0000,0.0000,0,140808,0.0000,0.0000,0.0000 +H14c,uniform,0.001,65536,8,0,0,True,0,0.0000,0.0000,0.0000,0,159736,0.0000,0.0000,0.0000 +H14c,uniform,0.01,65536,1,692,692,True,16,1.0000,1.0000,0.0000,136160,136160,1.0000,1.0000,0.0000 +H14c,uniform,0.01,65536,2,9,9,True,7,0.4375,0.2093,0.2282,30920,147720,0.3750,0.5000,0.2907 +H14c,uniform,0.01,65536,4,0,0,True,0,0.0000,0.0000,0.0000,0,170624,0.0000,0.0000,0.0000 +H14c,uniform,0.01,65536,8,0,0,True,0,0.0000,0.0000,0.0000,0,217040,0.0000,0.0000,0.0000 +H14c,uniform,0.1,65536,1,6606,6606,True,16,1.0000,1.0000,0.0000,195416,195416,1.0000,1.0000,0.0000 +H14c,uniform,0.1,65536,2,679,679,True,16,1.0000,1.0000,0.0000,266584,266584,1.0000,1.0000,0.0000 +H14c,uniform,0.1,65536,4,8,8,True,7,0.4375,0.3499,0.0876,143320,409560,0.3750,0.4596,0.1096 +H14c,uniform,0.1,65536,8,0,0,True,0,0.0000,0.0000,0.0000,0,692016,0.0000,0.0000,0.0000 +H14c,uniform,0.5,65536,1,33120,33120,True,16,1.0000,1.0000,0.0000,1208448,1208448,1.0000,1.0000,0.0000 +H14c,uniform,0.5,65536,2,16591,16591,True,16,1.0000,1.0000,0.0000,2292864,2292864,1.0000,1.0000,0.0000 +H14c,uniform,0.5,65536,4,4074,4074,True,16,1.0000,1.0000,0.0000,2541824,2541824,1.0000,1.0000,0.0000 +H14c,uniform,0.5,65536,8,247,247,True,16,1.0000,0.6445,0.3555,3195520,4958336,1.0000,1.0000,0.3555 +H14c,uniform,1.0,65536,1,65536,65536,True,16,1.0000,1.0000,0.0000,1175680,1175680,1.0000,1.0000,0.0000 +H14c,uniform,1.0,65536,2,65536,65536,True,16,1.0000,1.0000,0.0000,2227328,2227328,1.0000,1.0000,0.0000 +H14c,uniform,1.0,65536,4,65536,65536,True,16,1.0000,1.0000,0.0000,4330624,4330624,1.0000,1.0000,0.0000 +H14c,uniform,1.0,65536,8,65536,65536,True,16,1.0000,1.0000,0.0000,8535168,8535168,1.0000,1.0000,0.0000 +H14d,clustered,0.001,1024,1,0,0,True,0,0.0000,0.0000,0.0000,0,126402,0.0000,0.0000,0.0000 +H14d,clustered,0.001,1024,2,0,0,True,0,0.0000,0.0000,0.0000,0,132544,0.0000,0.0000,0.0000 +H14d,clustered,0.001,1024,4,0,0,True,0,0.0000,0.0000,0.0000,0,134976,0.0000,0.0000,0.0000 +H14d,clustered,0.001,1024,8,0,0,True,0,0.0000,0.0000,0.0000,0,148032,0.0000,0.0000,0.0000 +H14d,clustered,0.001,8192,1,0,0,True,0,0.0000,0.0000,0.0000,0,126402,0.0000,0.0000,0.0000 +H14d,clustered,0.001,8192,2,0,0,True,0,0.0000,0.0000,0.0000,0,132544,0.0000,0.0000,0.0000 +H14d,clustered,0.001,8192,4,0,0,True,0,0.0000,0.0000,0.0000,0,134976,0.0000,0.0000,0.0000 +H14d,clustered,0.001,8192,8,0,0,True,0,0.0000,0.0000,0.0000,0,148032,0.0000,0.0000,0.0000 +H14d,clustered,0.001,65536,1,64,64,True,1,0.0625,0.0187,0.0438,2368,126402,0.0625,0.0625,0.0438 +H14d,clustered,0.001,65536,2,0,0,True,0,0.0000,0.0000,0.0000,0,132544,0.0000,0.0000,0.0000 +H14d,clustered,0.001,65536,4,0,0,True,0,0.0000,0.0000,0.0000,0,134976,0.0000,0.0000,0.0000 +H14d,clustered,0.001,65536,8,0,0,True,0,0.0000,0.0000,0.0000,0,148032,0.0000,0.0000,0.0000 +H14d,clustered,0.01,1024,1,0,0,True,0,0.0000,0.0000,0.0000,0,129266,0.0000,0.0000,0.0000 +H14d,clustered,0.01,1024,2,0,0,True,0,0.0000,0.0000,0.0000,0,138304,0.0000,0.0000,0.0000 +H14d,clustered,0.01,1024,4,0,0,True,0,0.0000,0.0000,0.0000,0,144384,0.0000,0.0000,0.0000 +H14d,clustered,0.01,1024,8,0,0,True,0,0.0000,0.0000,0.0000,0,164736,0.0000,0.0000,0.0000 +H14d,clustered,0.01,8192,1,64,64,True,1,0.0625,0.0163,0.0462,2112,129266,0.0625,0.0625,0.0462 +H14d,clustered,0.01,8192,2,0,0,True,0,0.0000,0.0000,0.0000,0,138304,0.0000,0.0000,0.0000 +H14d,clustered,0.01,8192,4,0,0,True,0,0.0000,0.0000,0.0000,0,144384,0.0000,0.0000,0.0000 +H14d,clustered,0.01,8192,8,0,0,True,0,0.0000,0.0000,0.0000,0,164736,0.0000,0.0000,0.0000 +H14d,clustered,0.01,65536,1,640,640,True,7,0.4375,0.1907,0.2468,24656,129266,0.4375,0.6250,0.4343 +H14d,clustered,0.01,65536,2,0,0,True,0,0.0000,0.0000,0.0000,0,138304,0.0000,0.0000,0.0000 +H14d,clustered,0.01,65536,4,0,0,True,0,0.0000,0.0000,0.0000,0,144384,0.0000,0.0000,0.0000 +H14d,clustered,0.01,65536,8,0,0,True,0,0.0000,0.0000,0.0000,0,164736,0.0000,0.0000,0.0000 +H14d,clustered,0.1,1024,1,0,0,True,0,0.0000,0.0000,0.0000,0,158747,0.0000,0.0000,0.0000 +H14d,clustered,0.1,1024,2,0,0,True,0,0.0000,0.0000,0.0000,0,197296,0.0000,0.0000,0.0000 +H14d,clustered,0.1,1024,4,0,0,True,0,0.0000,0.0000,0.0000,0,262352,0.0000,0.0000,0.0000 +H14d,clustered,0.1,1024,8,0,0,True,0,0.0000,0.0000,0.0000,0,400792,0.0000,0.0000,0.0000 +H14d,clustered,0.1,8192,1,640,640,True,2,0.1250,0.0925,0.0325,14680,158747,0.1875,0.1250,0.0325 +H14d,clustered,0.1,8192,2,0,0,True,0,0.0000,0.0000,0.0000,0,197296,0.0000,0.0000,0.0000 +H14d,clustered,0.1,8192,4,0,0,True,0,0.0000,0.0000,0.0000,0,262352,0.0000,0.0000,0.0000 +H14d,clustered,0.1,8192,8,0,0,True,0,0.0000,0.0000,0.0000,0,400792,0.0000,0.0000,0.0000 +H14d,clustered,0.1,65536,1,6528,6528,True,16,1.0000,0.9906,0.0094,157256,158747,1.0000,1.0000,0.0094 +H14d,clustered,0.1,65536,2,704,704,True,5,0.3125,0.2990,0.0135,58992,197296,0.4375,0.6875,0.3885 +H14d,clustered,0.1,65536,4,0,0,True,0,0.0000,0.0000,0.0000,0,262352,0.0000,0.0000,0.0000 +H14d,clustered,0.1,65536,8,0,0,True,0,0.0000,0.0000,0.0000,0,400792,0.0000,0.0000,0.0000 +H14d,clustered,0.5,1024,1,576,576,True,1,0.0625,0.0223,0.0402,6472,290335,0.0625,0.0625,0.0402 +H14d,clustered,0.5,1024,2,256,256,True,1,0.0625,0.0239,0.0386,11024,460492,0.0625,0.0625,0.0386 +H14d,clustered,0.5,1024,4,64,64,True,1,0.0625,0.0247,0.0378,19472,788692,0.0625,0.0625,0.0378 +H14d,clustered,0.5,1024,8,0,0,True,0,0.0000,0.0000,0.0000,0,1453380,0.0000,0.0000,0.0000 +H14d,clustered,0.5,8192,1,3968,3968,True,2,0.1250,0.1124,0.0126,32640,290335,0.1875,0.1250,0.0126 +H14d,clustered,0.5,8192,2,1792,1792,True,2,0.1250,0.1098,0.0152,50544,460492,0.1875,0.1250,0.0152 +H14d,clustered,0.5,8192,4,576,576,True,2,0.1250,0.0907,0.0343,71560,788692,0.1875,0.1250,0.0343 +H14d,clustered,0.5,8192,8,64,64,True,1,0.0625,0.0319,0.0306,46408,1453380,0.0625,0.0625,0.0306 +H14d,clustered,0.5,65536,1,32768,32768,True,16,1.0000,0.9991,0.0009,290080,290335,1.0000,1.0000,0.0009 +H14d,clustered,0.5,65536,2,16064,16064,True,16,1.0000,0.9908,0.0092,456272,460492,1.0000,1.0000,0.0092 +H14d,clustered,0.5,65536,4,4032,4032,True,16,1.0000,0.8772,0.1228,691840,788692,1.0000,1.0000,0.1228 +H14d,clustered,0.5,65536,8,256,256,True,4,0.2500,0.1219,0.1281,177232,1453380,0.1875,0.5625,0.4406 +H14d,uniform,0.001,1024,1,1,1,True,1,0.0625,0.0113,0.0512,1424,126306,0.0625,0.0625,0.0512 +H14d,uniform,0.001,1024,2,0,0,True,0,0.0000,0.0000,0.0000,0,132552,0.0000,0.0000,0.0000 +H14d,uniform,0.001,1024,4,0,0,True,0,0.0000,0.0000,0.0000,0,135328,0.0000,0.0000,0.0000 +H14d,uniform,0.001,1024,8,0,0,True,0,0.0000,0.0000,0.0000,0,149216,0.0000,0.0000,0.0000 +H14d,uniform,0.001,8192,1,5,5,True,2,0.1250,0.0879,0.0371,11104,126306,0.1875,0.1250,0.0371 +H14d,uniform,0.001,8192,2,0,0,True,0,0.0000,0.0000,0.0000,0,132552,0.0000,0.0000,0.0000 +H14d,uniform,0.001,8192,4,0,0,True,0,0.0000,0.0000,0.0000,0,135328,0.0000,0.0000,0.0000 +H14d,uniform,0.001,8192,8,0,0,True,0,0.0000,0.0000,0.0000,0,149216,0.0000,0.0000,0.0000 +H14d,uniform,0.001,65536,1,46,46,True,16,1.0000,0.6491,0.3509,81984,126306,1.0000,1.0000,0.3509 +H14d,uniform,0.001,65536,2,1,1,True,1,0.0625,0.0333,0.0292,4408,132552,0.0625,0.0625,0.0292 +H14d,uniform,0.001,65536,4,0,0,True,0,0.0000,0.0000,0.0000,0,135328,0.0000,0.0000,0.0000 +H14d,uniform,0.001,65536,8,0,0,True,0,0.0000,0.0000,0.0000,0,149216,0.0000,0.0000,0.0000 +H14d,uniform,0.01,1024,1,13,13,True,1,0.0625,0.0142,0.0483,1872,131834,0.0625,0.0625,0.0483 +H14d,uniform,0.01,1024,2,0,0,True,0,0.0000,0.0000,0.0000,0,143056,0.0000,0.0000,0.0000 +H14d,uniform,0.01,1024,4,0,0,True,0,0.0000,0.0000,0.0000,0,153528,0.0000,0.0000,0.0000 +H14d,uniform,0.01,1024,8,0,0,True,0,0.0000,0.0000,0.0000,0,183104,0.0000,0.0000,0.0000 +H14d,uniform,0.01,8192,1,90,90,True,2,0.1250,0.1026,0.0224,13520,131834,0.1875,0.1250,0.0224 +H14d,uniform,0.01,8192,2,1,1,True,1,0.0625,0.0177,0.0448,2536,143056,0.0625,0.0625,0.0448 +H14d,uniform,0.01,8192,4,0,0,True,0,0.0000,0.0000,0.0000,0,153528,0.0000,0.0000,0.0000 +H14d,uniform,0.01,8192,8,0,0,True,0,0.0000,0.0000,0.0000,0,183104,0.0000,0.0000,0.0000 +H14d,uniform,0.01,65536,1,692,692,True,16,1.0000,0.9985,0.0015,131640,131834,1.0000,1.0000,0.0015 +H14d,uniform,0.01,65536,2,9,9,True,7,0.4375,0.1949,0.2426,27880,143056,0.4375,0.6875,0.4926 +H14d,uniform,0.01,65536,4,0,0,True,0,0.0000,0.0000,0.0000,0,153528,0.0000,0.0000,0.0000 +H14d,uniform,0.01,65536,8,0,0,True,0,0.0000,0.0000,0.0000,0,183104,0.0000,0.0000,0.0000 +H14d,uniform,0.1,1024,1,113,113,True,1,0.0625,0.0291,0.0334,5448,187411,0.0625,0.0625,0.0334 +H14d,uniform,0.1,1024,2,13,13,True,1,0.0625,0.0382,0.0243,9728,254496,0.0625,0.0625,0.0243 +H14d,uniform,0.1,1024,4,0,0,True,0,0.0000,0.0000,0.0000,0,377296,0.0000,0.0000,0.0000 +H14d,uniform,0.1,1024,8,0,0,True,0,0.0000,0.0000,0.0000,0,627432,0.0000,0.0000,0.0000 +H14d,uniform,0.1,8192,1,846,846,True,2,0.1250,0.1098,0.0152,20584,187411,0.1875,0.1250,0.0152 +H14d,uniform,0.1,8192,2,81,81,True,2,0.1250,0.1130,0.0120,28760,254496,0.1875,0.1250,0.0120 +H14d,uniform,0.1,8192,4,2,2,True,2,0.1250,0.0940,0.0310,35448,377296,0.1250,0.1250,0.0310 +H14d,uniform,0.1,8192,8,0,0,True,0,0.0000,0.0000,0.0000,0,627432,0.0000,0.0000,0.0000 +H14d,uniform,0.1,65536,1,6606,6606,True,16,1.0000,0.9990,0.0010,187216,187411,1.0000,1.0000,0.0010 +H14d,uniform,0.1,65536,2,679,679,True,16,1.0000,0.9837,0.0163,250336,254496,1.0000,1.0000,0.0163 +H14d,uniform,0.1,65536,4,8,8,True,7,0.4375,0.3720,0.0655,140352,377296,0.4375,0.6250,0.2530 +H14d,uniform,0.1,65536,8,0,0,True,0,0.0000,0.0000,0.0000,0,627432,0.0000,0.0000,0.0000 +H14d,uniform,0.5,1024,1,524,524,True,1,0.0625,0.0245,0.0380,9136,372244,0.0625,0.0625,0.0380 +H14d,uniform,0.5,1024,2,256,256,True,1,0.0625,0.0271,0.0354,16912,623288,0.0625,0.0625,0.0354 +H14d,uniform,0.5,1024,4,65,65,True,1,0.0625,0.0294,0.0331,32632,1111464,0.0625,0.0625,0.0331 +H14d,uniform,0.5,1024,8,3,3,True,1,0.0625,0.0304,0.0321,63752,2096496,0.0625,0.0625,0.0321 +H14d,uniform,0.5,8192,1,4190,4190,True,2,0.1250,0.1177,0.0073,43800,372244,0.1875,0.1250,0.0073 +H14d,uniform,0.5,8192,2,2004,2004,True,2,0.1250,0.1191,0.0059,74216,623288,0.1875,0.1250,0.0059 +H14d,uniform,0.5,8192,4,516,516,True,2,0.1250,0.1225,0.0025,136104,1111464,0.1875,0.1250,0.0025 +H14d,uniform,0.5,8192,8,30,30,True,2,0.1250,0.1236,0.0014,259152,2096496,0.1875,0.1250,0.0014 +H14d,uniform,0.5,65536,1,33120,33120,True,16,1.0000,0.9993,0.0007,371984,372244,1.0000,1.0000,0.0007 +H14d,uniform,0.5,65536,2,16591,16591,True,16,1.0000,0.9932,0.0068,619064,623288,1.0000,1.0000,0.0068 +H14d,uniform,0.5,65536,4,4074,4074,True,16,1.0000,0.9998,0.0002,1111208,1111464,1.0000,1.0000,0.0002 +H14d,uniform,0.5,65536,8,247,247,True,16,1.0000,0.9998,0.0002,2095984,2096496,1.0000,1.0000,0.0002 From 08a8bcb62c682bcd99122928483ac500f42c6abf Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 26 Oct 2026 17:59:15 +0000 Subject: [PATCH 2/2] docs(D-DQM P1): pin the A.6 pre-registration commit; separate registered from added criteria Addresses codex review on #1789. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01X6y3drwKSE2zSgoexheLFX --- .../2026-10-26-dqm-p1-chunk-touched.md | 22 ++++++++++++++++--- .claude/probes/p1-chunk-touched-v1/p1.py | 3 ++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/.claude/board/entries/2026-10-26-dqm-p1-chunk-touched.md b/.claude/board/entries/2026-10-26-dqm-p1-chunk-touched.md index 01a759886..5359afef3 100644 --- a/.claude/board/entries/2026-10-26-dqm-p1-chunk-touched.md +++ b/.claude/board/entries/2026-10-26-dqm-p1-chunk-touched.md @@ -1,7 +1,16 @@ # 2026-10-26 — D-DQM P1: chunk-touched predictor vs measured Lance 13 bytes — FAIL **Status:** MEASURED (offline, over committed data). Verdict **FAIL**. Authorises nothing. -Pre-registration: `.claude/plans/duckdb-dr-quack-machine-room-reuse-v1.md` § A.6 (P1), on PR #1788. +Pre-registration: `.claude/plans/duckdb-dr-quack-machine-room-reuse-v1.md` § A.6 (P1), pinned at commit +`62523c0e4` (2026-10-26 03:34 UTC, merged to `main` via #1788). This probe ran at 06:28 UTC the same day. The § A.6 +text is byte-identical from `62523c0e4` to `main` at #1788's merge. Audit it with +`git show 62523c0e4:.claude/plans/duckdb-dr-quack-machine-room-reuse-v1.md`. The P1 bullet, verbatim: + +> Measure the predicted ratio (non-zero 64-word groups / total groups, assuming 4,096-value chunks) against the +> measured masked/unmasked byte ratio per cell. Kill: |predicted − measured| > 0.10 in more than 10 % of cells, +> or rank correlation < 0.9; then test the 64 KiB-merge hypothesis once, no third tuning. Can fire: uniform 1 % +> ≈ 1.00, clustered 1 % ≈ 0.2. Can stay silent: masks offset by 2,048 rows (every run crosses a chunk boundary) +> must raise the clustered prediction. Code and per-cell output: `.claude/probes/p1-chunk-touched-v1/{p1.py,results.csv}`. Run: `python3 -I .claude/probes/p1-chunk-touched-v1/p1.py .` (about 2 s, standard library only). @@ -50,7 +59,13 @@ Controls (1 %, k = 1, full tile): | H14c | clustered | 704 | 7/16 | 0.438 | 0.242 | **miss** | | H14d | clustered | 640 | 7/16 | 0.438 | 0.191 | **miss** | -**Verdict: FAIL.** The A.6 thresholds pass on the registered population only because 63 of 136 cells select no +**What was registered and what was added.** Registered: the population (every cell), the two kill thresholds, +the can-fire expectations (uniform 1 % ≈ 1.00, clustered 1 % ≈ 0.2), the can-stay-silent shift, and one 64 KiB +follow-up. Added here, not registered: the "cells with a selection" and per-fixture rows of the results table +(sensitivity readings, not scored), and treating a missed can-fire expectation as failing. The registration lists +that expectation as a control, not as a kill condition. Without that step the registered kill thresholds pass. + +**Verdict: FAIL**, on the registered can-fire control, not on the thresholds. The A.6 thresholds pass on the registered population only because 63 of 136 cells select no row and are trivially exact (predicted 0, measured 0 bytes). The A.6 can-fire control fails: clustered 1 % is predicted at 0.44 against 0.24 and 0.19 measured, a miss of 0.20 and 0.25. The miss exceeds 0.19, so any control tolerance below that gives the same answer. On cells with a selection the error threshold fires, and the @@ -61,7 +76,8 @@ H14c clustered 50 % k = 2 (1.00 vs 0.70); uniform 0.1 % k = 1 (46 rows: 1.00 vs mini-block chunks of at most 8 KiB, which holds about 512 values for H14c's 16-byte lanes and about 2,048 for 4-byte columns. Testing a smaller chunk would be a third tuning attempt, which A.6 forbids. -**The one registered follow-up (64 KiB range merge, reported separately): FAIL.** 16/136 (11.8 %) cells over 0.10 +**The one registered follow-up (64 KiB range merge, reported separately): FAIL.** Registered as following a kill; +run here because the verdict is FAIL by the control, so it is reported, not used to decide. 16/136 (11.8 %) cells over 0.10 (21.9 % of cells with a selection), Spearman 0.988. The clustered controls get worse (0.56 and 0.63), because merging only adds bytes and the baseline already over-predicts. Note: both probes wrote to a local temp directory, where lance-io's merge block is `DEFAULT_LOCAL_BLOCK_SIZE` = 4 KiB, not the 64 KiB cloud default diff --git a/.claude/probes/p1-chunk-touched-v1/p1.py b/.claude/probes/p1-chunk-touched-v1/p1.py index be85ba273..e6041a7a0 100644 --- a/.claude/probes/p1-chunk-touched-v1/p1.py +++ b/.claude/probes/p1-chunk-touched-v1/p1.py @@ -2,7 +2,8 @@ """D-DQM P1: does a chunk-touched predictor explain the Lance 13 masked-read bytes already measured in D-HOLO H14c and H14d? -Pre-registration: `.claude/plans/duckdb-dr-quack-machine-room-reuse-v1.md` § A.6 (P1). +Pre-registration: `.claude/plans/duckdb-dr-quack-machine-room-reuse-v1.md` § A.6 (P1), +pinned at commit 62523c0e4 (registered before this probe ran; text unchanged on main). Offline only. Reads the committed board entries, regenerates each cell's mask from the probes' own seeded generators, and compares. No Lance run, no runtime code.