#000070: fold bench results into ticket as dav1d-ready handoff
Updates the spatial-anchor ticket so the pre-review empirical bench (landed in55b651f) reads as a self-contained dav1d review packet: - Status line: notes bench shipped in55b651f- §7a Pre-review empirical evidence: expanded with reproducibility notes (RNG seed 0xa8c90e551fd34427, wall ~2s, stdlib-only), the five bench purposes mapped to open questions, full headline-results table, and per-headline "what each one buys dav1d" prose for Q1 through Q9. - §3 Land sequence: step 1 marked done in55b651fwith explicit pre-review-bench scope; step 2 annotates that 5 of 10 open questions now resolve by measurement. - docs/TICKETS.md index row: leading status cell now opens with the bench headline + per-section numbers so the index reads as the dav1d handoff summary, not just "open · awaiting review". No new code, no new commits to the bundle itself --55b651fremains the bench's shipping commit. Pure documentation refresh.
This commit is contained in:
parent
55b651f624
commit
2eea5b5655
2 changed files with 88 additions and 35 deletions
|
|
@ -111,7 +111,7 @@ Newest first. Update on every open/close.
|
|||
|
||||
| ID | Title | Status | Opened | Directive |
|
||||
|----------|------------------------------------------------|-----------------------|------------|-----------|
|
||||
| #000070 | Spatial-anchor π*_w_object (Joseph 6-dim determination kernel) | **open · awaiting dav1d review + fox go/no-go** (2026-05-31; surfaced when fox brought in Joseph @TrudoJo's procedural-spatial framework — "hashes do not encode the world, hashes determine the world" — and asked whether it fits arborist's substrate model. It does, cleanly. Implements the first verifier kernel under the #000013 v7-W reserved namespace (`arborist/world/__init__.py` `STATUS = "namespace_reserved"` → `kernel_in_progress` on land): a single committed 32-byte SHA-256 hash deterministically expands into six named 32-byte regions `H₁..H₆` via the HMAC-SHA-512 KDF already shipped in `arborist/substrate/anchor_prg.py` (#000035), and each region drives one quantized object dimension under a fixed canonical mapper — `H₁→octree position`, `H₂→scale level`, `H₃→quantized SO(3) rotation`, `H₄→material palette`, `H₅→raw links (reserved for π*_w_relation sibling ticket)`, `H₆→behavior code`. Domain separation from #000035 by dedicated `spatial_anchor_seed` (manifest-published) — keeps #000035's KAT freeze + dav1d 2026-05-11 final review intact. Hard constraints: stays inside A1–A3, no continuous tensors in proof path, no new `audit_mode` token (substrate commitments are not warrants — the four-rung ladder is unchanged), no SQL schema change at Phase 1, `canonicalization_version` absorbs the new `spatial-anchor-object@v1` registry slot. Phase 1 deliverable ~150 LoC + 10 KATs + tests in one PR: `arborist/substrate/spatial_anchor.py` (segmentation), `arborist/world/pi_star/object.py` (six mappers), registry entry, KAT vectors at `bench/fixtures/spatial-anchor/known-answer-tests.jsonl` matching #000035 KAT discipline, `tests/test_spatial_anchor.py` + `tests/test_world_pi_star_object.py`, substrate-paper amendment citing Joseph (@TrudoJo) in `docs/_source/merkle-agi-v7w-spatial-temporal.rst`. Position mapper at Phase 1 = octree (substrate paper §2.1 + §A worked example); H3/S2/Hilbert/Morton siblings deferred — Morton's value is purely as the relation-kernel `pair(A,B)` cheap bit-interleave and surfaces in the sibling ticket. **Ten open questions for dav1d** in §8: seed-source choice, segmentation method, position mapper, scope split (object alone vs object+relation per CLAUDE.md memory `feedback_ticket_proliferation`), privacy-class fail-closed default, `audit_mode` discipline confirmation, manifest-validator timing, endianness reconfirmation, KAT count + adversarial vectors, paper-amendment wording. Five-step §7 deletions captured: dropped the prior `/tmp/arborist-spatial-ontology-plan.md`'s geographic-search backend (encoding-route confusion), `Document.extra` lat/lon hooks (different ticket if at all), `audit_mode=HYBRID` for spatial hits (convention-illegal), geohash (subsumed by Morton), quadtree as separate (octree at z-level-0), Hilbert at Phase 1 (deferred), tier-1/2/3 hash-suite framing (conflated hard vs soft hashes), and `arborist/spatial/` namespace (violates topic-naming rule). Full spec in `docs/tickets/ticket-000070-spatial-anchor-pi-w-object.md`. | 2026-05-31 | — |
|
||||
| #000070 | Spatial-anchor π*_w_object (Joseph 6-dim determination kernel) | **open · awaiting dav1d review + fox go/no-go · pre-review bench shipped `55b651f`** — pure-stdlib empirical-validation script (`bench/spatial_anchor_validation.py`, `make bench-spatial-anchor`, ~2 s, RNG-seed-pinned) measures: §1 avalanche mean 767.85 bits vs PRF null 768 (z = -0.49) · §2 octree chi² uniformity \|z\| < 1 at L=2,3,4 · §3 collision birthday-bound ratio 0.989 / 1.038 at L=4,6 · §4 cross-region Pearson r in [-0.018, +0.012] across all 15 pairs of H₁..H₆ (none flag at 4σ) · §5 domain separation Arm A 767.91 bits independent / Arm B **0.00 bits exact collision** confirming the dedicated-`spatial_anchor_seed` discipline. Five of ten open questions (Q1 seed source · Q2 segmentation · Q3 octree mapper · Q8 endianness · Q9 KAT adversarial vectors) now resolve by measurement; Q4/Q5/Q6/Q7/Q10 remain non-empirical design decisions for dav1d. Full empirical detail in ticket §7a. Originally surfaced 2026-05-31 when fox brought in Joseph @TrudoJo's procedural-spatial framework — "hashes do not encode the world, hashes determine the world" — and asked whether it fits arborist's substrate model. It does, cleanly. Implements the first verifier kernel under the #000013 v7-W reserved namespace (`arborist/world/__init__.py` `STATUS = "namespace_reserved"` → `kernel_in_progress` on land): a single committed 32-byte SHA-256 hash deterministically expands into six named 32-byte regions `H₁..H₆` via the HMAC-SHA-512 KDF already shipped in `arborist/substrate/anchor_prg.py` (#000035), and each region drives one quantized object dimension under a fixed canonical mapper — `H₁→octree position`, `H₂→scale level`, `H₃→quantized SO(3) rotation`, `H₄→material palette`, `H₅→raw links (reserved for π*_w_relation sibling ticket)`, `H₆→behavior code`. Domain separation from #000035 by dedicated `spatial_anchor_seed` (manifest-published) — keeps #000035's KAT freeze + dav1d 2026-05-11 final review intact. Hard constraints: stays inside A1–A3, no continuous tensors in proof path, no new `audit_mode` token (substrate commitments are not warrants — the four-rung ladder is unchanged), no SQL schema change at Phase 1, `canonicalization_version` absorbs the new `spatial-anchor-object@v1` registry slot. Phase 1 deliverable ~150 LoC + 10 KATs + tests in one PR: `arborist/substrate/spatial_anchor.py` (segmentation), `arborist/world/pi_star/object.py` (six mappers), registry entry, KAT vectors at `bench/fixtures/spatial-anchor/known-answer-tests.jsonl` matching #000035 KAT discipline, `tests/test_spatial_anchor.py` + `tests/test_world_pi_star_object.py`, substrate-paper amendment citing Joseph (@TrudoJo) in `docs/_source/merkle-agi-v7w-spatial-temporal.rst`. Position mapper at Phase 1 = octree (substrate paper §2.1 + §A worked example); H3/S2/Hilbert/Morton siblings deferred — Morton's value is purely as the relation-kernel `pair(A,B)` cheap bit-interleave and surfaces in the sibling ticket. **Ten open questions for dav1d** in §8: seed-source choice, segmentation method, position mapper, scope split (object alone vs object+relation per CLAUDE.md memory `feedback_ticket_proliferation`), privacy-class fail-closed default, `audit_mode` discipline confirmation, manifest-validator timing, endianness reconfirmation, KAT count + adversarial vectors, paper-amendment wording. Five-step §7 deletions captured: dropped the prior `/tmp/arborist-spatial-ontology-plan.md`'s geographic-search backend (encoding-route confusion), `Document.extra` lat/lon hooks (different ticket if at all), `audit_mode=HYBRID` for spatial hits (convention-illegal), geohash (subsumed by Morton), quadtree as separate (octree at z-level-0), Hilbert at Phase 1 (deferred), tier-1/2/3 hash-suite framing (conflated hard vs soft hashes), and `arborist/spatial/` namespace (violates topic-naming rule). Full spec in `docs/tickets/ticket-000070-spatial-anchor-pi-w-object.md`. | 2026-05-31 | — |
|
||||
| #000069 | Arborist VIZ / Merkle Command Center (Pyramid + six.js + SSE browser dashboard) | **open · awaiting go/no-go · doc-only scaffold** (2026-05-27; filed from `/home/fox/Downloads/TICKET_0000VIZ_*`, stack corrected same day per fox). Configurable browser dashboard for inspecting arborist's content-addressed state: Merkle root explorer, proof verifier, claim warrant + graveyard, audit timeline, run-DAG replay, cache-key explainer, root diff, 3D Merkle lattice, optional circuit/activation traces. Read-only consumer; arborist proper stays source-of-truth, dashboard projects state. **Stack pinned to unturf-native** (fox 2026-05-27, supersedes proposal §3): **Pyramid + Jinja2 + SQLAlchemy** (matches `remarkbox` / `make_post_sell` / `unhomeschool.com` idiom), **SSE** (`text/event-stream` via Pyramid streaming response) for live audit/claim/falsifier patches, **vanilla JS + six.js** (fox's patched three.js fork at `git.unturf.com/gumyum/six.js` — three.js r175 + CWE-407 patches incl. ObjectBVH O(N)→O(log N); bundles vendored from `~/git/cupPCB/cdn/six/`; third-instance MOAD-0001 dogfood alongside `java-topology` + gumyum-engine) for 3D widgets and large-graph rendering, SQLite for dashboard metadata (no PostgreSQL/ClickHouse/Redis/NATS by default — promote on measured need), no React / no Next.js / no Node build step. Server-rendered SVG (or Graphviz `.dot` per existing `docs/diagrams/*.dot` pattern) replaces React Flow for run-DAG widgets. Browser-side proof verification dropped from v1 (server-side Pyramid view returns PASS/FAIL + receipt; reinstate phase-N only if third-party-verification use case surfaces). **Three filing-note gates before phase 0** (in ticket body): **F-1** sibling-repo home — implementation lives in a new `~/git/arborist-viz` (Pyramid Python, matches existing unturf apps), not in-tree; arborist's contribution is the read-API spec + view package + arborist library import via `arborist.embed`. **F-2** scope split — proposal carries 8 phases (§17 phases 0–8); recommended cut keeps phases 0–3 (schema + shell + proof/root widgets + claim/audit/run widgets) inside #000069, and spawns sibling tickets for SSE streaming (4), 3D six.js (5), massive-graph (6, only if measured need surfaces), circuit-tracing (7, gated on #000062), embeddable widgets (8) — Dav1d-audience rule. **F-3** upstream prereqs — phase 7 (circuit/activation) consumes **#000062 Mechanistic Witness**'s `MechanisticWitnessRoot`; phase 3's claim-graveyard widget projects **#000059**'s bounded-ingestion graveyard. Hard constraints: arborist soft-vs-hard discipline applies verbatim (attribution weights renderable but never `audit_mode`, never causal without intervention/ablation evidence); private-leaf default-deny (commitments + hashes + redacted maps only without explicit auth); every widget exposes its data query + source roots. Reserved scope: NOT a replacement for `arborist controller-events` / `arborist analyze` / `arborist inspect` CLI — those stay canonical inspector surfaces; VIZ is the projection layer. | 2026-05-27 | — |
|
||||
| #000068 | Verifier-blind missed-answer falsification guard | **in progress · Phase 1+2+3 landed 2026-05-27 · Phase 4 default flip NO-GO** (Phase 2 bench 2026-05-27 76q × n=3 claim_lattice Hermes-3-8B: 2/228 sidecar fires, both STRONG confidence, both the Ballestrini regression fixture, 100% precision, 0/226 false positives across non-Ballestrini runs. Phase 3 demote flag opt-in via `--demote-on-missed-answer` on `query`/`ask` — wires `EVIDENCE-WARRANTED → EVIDENCE-MISSED-PARTIAL` for strong/medium confidence on lattice modes; lower rungs + non-lattice modes get `· missed-answer` tail tag. `answerability_demote_enabled` added to `_VERIFIER_POLICY_FIELDS` so flipping the flag partitions cache via verifier_policy_hash. Default OFF per Dav1d Phase 4 NO-GO — 100% precision at n=2 fires is too few samples to claim precision floor empirically; default flip blocks on wider bench + human spot-check. 47 tests (36 Phase 1 + 11 Phase 3) all passing. End-to-end verified live: 4/4 Hermes runs on Ballestrini with --demote-on-missed-answer rendered EVIDENCE-MISSED-PARTIAL.) Original opening 2026-05-27 (Dav1d de-novo review GO for Phase 1 with seven hardenings folded into spec — subject-token cue-stripping, answer-type alignment, confidence_class, candidate cap=10, precise offset_start/end/basis, cache-hit recompute-on-read, Phase 1 out of verifier_policy_hash). Original opening 2026-05-27; sibling to the user-payload-layout work shipped 2026-05-26, split out per the Dav1d-audience rule — `feedback_ticket_proliferation`). Surfaced by the Ballestrini case: evidence E2 literally contained the song names, Hermes-3-8B under `user_payload_layout=tail` said *"specific songs by her are not mentioned in the provided evidence blocks"*, verifier marked the run `EVIDENCE-WARRANTED` 2/2 because nothing positive was unsupported. **Verifier-blind false-negative class** — existing layered verifier (quote/span/entity/paraphrase + Rule 8 + Rule 9 + claim ceiling) guards unsupported *presence*, has no hook for unsupported *absence*. Layout fixes attention placement on the specific instance (n=3 bench 2026-05-27 confirms bookend/per_chunk recover Ballestrini); layout alone can't close the class — adversarial phrasing or bigger prompt resurfaces it under any layout. Proposed deterministic sidecar in `arborist/qa/inspect.py:diagnose_missed_answer`: three-clause conjunction — **(A)** answer matches denial pattern ("not mentioned", "not provided", "the evidence does not say", …, closed list versioned via `denial_patterns_version`); **(B)** question is extraction shape (reuse `arborist.qa.quantifier` classifier — `ALL`/`COMPREHENSIVE`/`OPEN_REQUEST` intensities, OR surface cues "songs by"/"works by"/"who wrote"/"list"/"name all"); **(C)** evidence contains candidate spans near subject tokens (reuse `entity_proximity_n`/`entity_proximity_window` from verify.py — quoted strings, title-case spans, comma-separated title lists within W chars of stemmed subject content tokens). All three must fire. Output: `result["answerability"]` with `missed_answer_candidate_spans` list (evidence_id + offset + text). **Hash discipline:** sidecar fields (`denial_patterns_version`, `extraction_cues_version`, `answerability_threshold`) fold into `governance_policy_hash` only; an optional `answerability_demote_enabled` flag (default OFF) wires `EVIDENCE-WARRANTED → EVIDENCE-MISSED-PARTIAL` in `_render_audit_label`, and IF on folds into BOTH `governance_policy_hash` AND `verifier_policy_hash` (changes rendered audit_mode, so verifier hash must move — the deliberate opt-in moves the verifier hash, sidecar-only stays out). No LLM-as-judge. Never writes `providence_cache`/`audit_events`. Never promotes claims. Pattern verbatim from `arborist.qa.inspect.diagnose_*` (deflection, coherence, title-relevance). Phases: 1 sidecar read-only, 2 bench + threshold tuning, 3 demote opt-in, 4 default decision (bench-gated). 5F-Falsification fixture: Ballestrini case already in `bench/qa_questions.txt` under "entity list". Full spec in `docs/tickets/ticket-000068-verifier-blind-missed-answer-guard.md`. | 2026-05-27 | D2 |
|
||||
| #000067 | M-aware cold-pack hydration (route incoming docs by content hash into M target shards) | **open · scaffold · prereq for #46 genesis test** (2026-05-26; surfaced while preparing the 3090 SPV-wallet validation). Today's `hydrate_from_metadata_pack` takes a single `conn` and writes every incoming row into one shard. With the corpus now in M=4 hash-routed topology (#000065), a fresh peer needs to land each document on `shard_for_document(document_root, M)` — same routing function as the producer. Without this, a fresh peer's `~/.arborist/shards/` is just one big single-shard DB and the M=4 ATTACH-and-route assumption #000065 was sized for doesn't hold consumer-side. Two coherent shapes: **(α) two-step kludge** — hydrate into single shard, then `arborist corpus reshard --to M` on the consumer. Works today (proven by the 2026-05-26 reshard executor) but doubles the wall time and treats packed shards as if they came from an arbitrary topology. **(β) direct M-aware hydrate** — extend `hydrate_from_metadata_pack` to accept `targets: list[sqlite3.Connection]` + `M: int` and route per-row at restore time (reusing `arborist.document.shard_for_document` + the table-routing rules in `arborist/migrate.py`). Manifest carries `corpus_shard_count` so the unpacker knows M from the pack itself. β is the right answer — α exists only as a fallback if 20-min-window pressure forces it. Sequence: (1) add `corpus_shard_count` to pack manifest (read from source meta during `dump_shard_metadata`); (2) `restore_shard_metadata_routed(targets, M, table_dir)` in `cold_pack_metadata.py` mirroring `_route_per_doc_table` from migrate.py; (3) `hydrate_from_metadata_pack` gains a `targets`/`shards_dir` param; (4) `arborist cold unpack --shards-dir DIR` initialises M target shards from the manifest's `corpus_shard_count` and routes; (5) regression test: pack 2 shards → hydrate into fresh 4 shards → assert every doc on its hash-routed target. Refactor opportunity: the routing rules (ROUTED_BY_DOCUMENT_ROOT, CONSOLIDATED_TABLES) currently live in migrate.py; this ticket can either duplicate them in cold_pack_metadata.py (fast) or factor into a shared `arborist/multi_shard.py` module (cleaner). The shared-module path is more honest given graft mode (#000066) wants the same primitives. Out of scope: graft / overlay mode (that's #000066 — overlays onto populated, this is hydrate-into-empty). | 2026-05-26 | — |
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
# Ticket #000070 — Spatial-anchor π*_w_object (Joseph 6-dim determination kernel)
|
||||
|
||||
**Status:** open · awaiting dav1d review + fox go/no-go
|
||||
**Status:** open · awaiting dav1d review + fox go/no-go ·
|
||||
pre-review empirical bench shipped in `55b651f` (see §7a)
|
||||
**Opened:** 2026-05-31
|
||||
**Scope:** Pin the operational spec for **π*_w_object** — the first
|
||||
verifier kernel of v7-W. Implements **Joseph (@TrudoJo)**'s 6-dimension
|
||||
|
|
@ -658,48 +659,97 @@ exact byte-level behavior under review.)
|
|||
5. **Automate.** `arborist/pi_star/registry.py` already automates
|
||||
`name@version` lookup; this ticket adds a row, not a mechanism.
|
||||
|
||||
## 7a. Pre-review empirical evidence
|
||||
## 7a. Pre-review empirical evidence (shipped in `55b651f`)
|
||||
|
||||
To shrink dav1d's review surface, ticket #000070 ships a pure-stdlib
|
||||
empirical-validation bench **before** any kernel code lands. It runs
|
||||
against `arborist.substrate.anchor_prg._expand` directly (no new module
|
||||
required) and prototypes `split_anchor` + `map_position_octree` inline.
|
||||
|
||||
Run: `make bench-spatial-anchor` (~2 s, RNG-seed-pinned, byte-identical
|
||||
across re-runs).
|
||||
**Reproducing the bench (one command):**
|
||||
|
||||
Source: `bench/spatial_anchor_validation.py`
|
||||
Report: `bench/spatial_anchor_validation_results.md`
|
||||
```
|
||||
make bench-spatial-anchor [SPATIAL_N=10000]
|
||||
```
|
||||
|
||||
Bench results from the first run (2026-05-31, N=10000):
|
||||
- **Wall time:** ~2 s on a workstation (10000 samples through 5 benches).
|
||||
- **Determinism:** RNG seed pinned at `0xa8c90e551fd34427` — same input
|
||||
produces byte-identical numbers; if `bench/spatial_anchor_validation_results.md`
|
||||
changes hash after a re-run, something is wrong with the construction.
|
||||
- **Dependencies:** Python stdlib only. No numpy, no scipy. The chi²
|
||||
p-value is reported as a Normal(df, 2·df) z-score under the
|
||||
approximation that's tight to ±0.05 for df ≥ 30.
|
||||
|
||||
| Bench | Headline number | Verdict | Answers |
|
||||
**Files committed in `55b651f`:**
|
||||
|
||||
- `bench/spatial_anchor_validation.py` — 423 lines, the bench script.
|
||||
- `bench/spatial_anchor_validation_results.md` — the report from the
|
||||
first canonical run (2026-05-31T14:05:04Z), committed alongside the
|
||||
script so dav1d can diff against any later re-run.
|
||||
- `Makefile` target `bench-spatial-anchor` (+ PHONY entry).
|
||||
|
||||
**What the bench measures and why each one matters for review:**
|
||||
|
||||
| § | Bench | Purpose | What it answers |
|
||||
|---|---|---|---|
|
||||
| §1 Avalanche (single-bit flip) | mean = 767.85 bits, z = -0.49 vs PRF null 768 | PASS | Q2 |
|
||||
| §2 Cell-distribution uniformity (octree L=2,3,4) | \|z\| < 1.0 at every level | PASS | Q3 |
|
||||
| §3 Collision vs birthday-bound (L=4,6,8,10) | obs/exp ratio = 0.989 / 1.038 at populated L | PASS | Q3, Q9 |
|
||||
| §4 Cross-region independence (Pearson on all 15 pairs of H₁..H₆) | every pair < 2σ, none flag at 4σ | PASS | Q2 (§2.2 option A safe) |
|
||||
| §5 Domain separation (Arm A distinct seeds vs Arm B shared seed) | Arm A: 767.91 bits independent · Arm B: **0.00 bits — collision class confirmed** | PASS | Q1 (§2.1 option A required) |
|
||||
| 1 | Avalanche (single-bit hash flip → Hamming distance over 192-byte output) | Confirms the PRF-output independence property the §2.2 fixed-offset slicing relies on | Q2 |
|
||||
| 2 | Octree cell-distribution chi² at L=2,3,4 | Confirms the position mapper's modulo-`8^L` operator is uniform — not biased toward low-numbered cells under the LE uint64 conversion | Q3 |
|
||||
| 3 | Collision rate at L=4,6,8,10 vs birthday-bound `N(N-1)/(2·8^L)` | Confirms collisions follow PRF expectation, not structural skew; surfaces the adversarial-vector class for KATs | Q3, Q9 |
|
||||
| 4 | Pairwise Pearson correlation on byte 0 across all 15 pairs of H₁..H₆ | The directly-measured argument that fixed-offset slicing inherits counter-mode block independence — IF any pair fired above 4σ, §2.2 option B (per-region nested HMAC) would become the recommendation | Q2 |
|
||||
| 5 | Two-arm Hamming distance — Arm A distinct seeds vs Arm B shared seed | Empirically demonstrates the collision class the dedicated-`spatial_anchor_seed` discipline protects against | Q1 |
|
||||
|
||||
Numerical headlines:
|
||||
- **Q1** (seed source): Arm B's exact-zero Hamming distance is the
|
||||
measurable footgun the §2.1 option A discipline protects against.
|
||||
- **Q2** (segmentation method): cross-region Pearson r in
|
||||
[-0.018, +0.012] across 15 pairs, all sub-2σ — counter-mode block
|
||||
independence holds empirically; fixed-offset slicing is safe.
|
||||
- **Q3** (octree position mapper): uniform under chi² at L=2,3,4;
|
||||
birthday-bound holds at L=4,6,8,10.
|
||||
- **Q8** (endianness): inherited from #000035 by byte-identical reuse
|
||||
of `_expand`; no separate test needed.
|
||||
- **Q9** (adversarial KAT vectors): §3 surfaces the structural
|
||||
importance of including `0x00 * 32`, `0xFF * 32`, and at least one
|
||||
low-entropy hash engineered to map to cell 0 at the deployment's L
|
||||
in the KAT set.
|
||||
**Headline results from `55b651f`** (N=10000, RNG seed
|
||||
`0xa8c90e551fd34427`, wall 2.02 s):
|
||||
|
||||
Remaining open questions (Q4 scope split, Q5 privacy default, Q6
|
||||
audit_mode discipline, Q7 manifest validator timing, Q10 paper-amendment
|
||||
wording) are non-empirical — design decisions that stay with dav1d's
|
||||
review.
|
||||
| § | Bench | Headline | Verdict | Answers |
|
||||
|---|---|---|---|---|
|
||||
| 1 | Avalanche | mean 767.85 bits flipped (PRF null = 768) · z = -0.49 · range [700, 844] | PASS | Q2 |
|
||||
| 2 | Cell-distribution | \|z\| < 1.0 at L=2 (z=0.87) / L=3 (z=0.05) / L=4 (z=-0.33) | PASS | Q3 |
|
||||
| 3 | Collisions | L=4 ratio 0.989 (12 071 / 12 205.81) · L=6 ratio 1.038 (198 / 190.72) · L=8 + L=10 zero, both below 1 expected | PASS | Q3, Q9 |
|
||||
| 4 | Cross-region independence | all 15 pairs \|r\| < 2σ · range [-0.018, +0.012] · max \|r\|/stderr = 1.80 | PASS | Q2 |
|
||||
| 5 | Domain separation | Arm A mean 767.91 bits independent (range [688, 850]) · Arm B mean **0.00 bits exact, range [0, 0]** — collision class confirmed | PASS | Q1 |
|
||||
|
||||
**What each headline buys dav1d:**
|
||||
|
||||
- **Q1 (§2.1 — seed source).** Arm B's exact-zero Hamming distance is
|
||||
the *measurable* footgun the dedicated-`spatial_anchor_seed`
|
||||
discipline protects against. Sharing one seed across two PRG
|
||||
domains makes `split_anchor` byte-identical to the v7 anchor map.
|
||||
This is the empirical case for §2.1 option A; option B (domain-tag
|
||||
bump) would also close the gap but at the cost of a `PHI_PRG_VERSION`
|
||||
bump that invalidates #000035's KAT freeze.
|
||||
- **Q2 (§2.2 — segmentation method).** Cross-region Pearson r values
|
||||
fall in [-0.018, +0.012] across all 15 pairs, every one sub-2σ.
|
||||
Counter-mode HMAC-SHA-512 block independence holds empirically;
|
||||
fixed-offset slicing inherits the PRF property cleanly. §2.2 option
|
||||
B (per-region nested HMAC) would add 3× the HMAC calls for zero
|
||||
measurable gain.
|
||||
- **Q3 (§2.3 — octree position mapper).** Chi² uniformity holds at
|
||||
every tested level (|z| < 1 at L=2,3,4). Birthday-bound holds at
|
||||
every populated level (obs/exp 0.989 / 1.038 at L=4,6). Mapper is
|
||||
sound; no measurable bias from the LE uint64 modulo `8^L` operator.
|
||||
- **Q8 (§2.8 — endianness).** Inherited from #000035 by byte-identical
|
||||
reuse of `_expand`. The bench would catch a silent endianness flip
|
||||
in `anchor_prg.py` because cross-region correlation would fire, but
|
||||
the test is implicit, not separate.
|
||||
- **Q9 (§3 / open-Q row 9 — adversarial KAT vectors).** §3 of the
|
||||
bench surfaces the structural importance of including `0x00 * 32`,
|
||||
`0xFF * 32`, and at least one low-entropy hash engineered to map to
|
||||
cell 0 at the deployment's chosen L. Future regressions to the
|
||||
mapper would skip past random KATs but trip on these.
|
||||
|
||||
**What the bench does NOT cover** (stays with dav1d's design review):
|
||||
|
||||
- **Q4** scope split (object alone vs object+relation) — non-empirical;
|
||||
it's a ticket-proliferation discipline call.
|
||||
- **Q5** privacy-class default — policy decision, not measurable.
|
||||
- **Q6** `audit_mode` discipline confirmation — paper-side architectural
|
||||
decision (commitments ≠ warrants).
|
||||
- **Q7** manifest-validator timing — sequencing decision.
|
||||
- **Q10** substrate-paper amendment wording — editorial.
|
||||
|
||||
5 of 10 open questions resolve with measurements. The other 5 are
|
||||
exactly the kind dav1d's review *should* spend time on.
|
||||
|
||||
## 8. Open questions for dav1d
|
||||
|
||||
|
|
@ -750,10 +800,13 @@ review.
|
|||
|
||||
**Land sequence on go:**
|
||||
|
||||
1. Land this ticket file + `Next ID` bump + index row (this commit).
|
||||
2. dav1d review pass.
|
||||
1. ✓ Land this ticket file + `Next ID` bump + index row + pre-review
|
||||
bench + Makefile target — **landed in `55b651f`** (2026-05-31).
|
||||
2. dav1d review pass — 5 of 10 open questions answered by bench in
|
||||
`55b651f` (Q1, Q2, Q3, Q8, Q9); 5 remain (Q4, Q5, Q6, Q7, Q10).
|
||||
3. fox go.
|
||||
4. Implementation PR per §3.
|
||||
4. Implementation PR per §3 (`arborist/substrate/spatial_anchor.py` +
|
||||
`arborist/world/pi_star/object.py` + KATs + tests).
|
||||
5. Substrate-paper amendment in the same PR.
|
||||
6. Memory update: flip `joseph_trudojo_6dim_spatial_ontology.md`
|
||||
from "reference (cite when used)" to "reference (used in #000070,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue