From 7a43ceb69995b7e25a795e05cfcdba0c640b0e79 Mon Sep 17 00:00:00 2001 From: "russell@unturf.com" Date: Wed, 20 May 2026 19:28:48 -0400 Subject: [PATCH] docs(#000059): bounded-ingestion hard constraint on the claim graveyard MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fox: a graveyard that keeps every wrong answer forever grows unbounded like cancer and is counter to constraint-optimization. Bake in the bound: - earn-to-enter (recurrence-gated) — a failure earns a tombstone only when its canonical claim-family re-fails; one-offs dropped. - fingerprints not transcripts (UTXO-set analogy) — store canonical_claim_family|falsifier_root|failure_class, prune bulk text. - decay/compact to steady-state — evicts like a surface, never a core. - off the hot path — dedicated graveyard shard, bloom-filter burden check only. Gossip-group falsifier admission inherits the same discipline: difficulty-adjusted stable-rate ingestion (BTC block-rate target) + per-window budget (#000036), enforced in #000012/mesh. BTC lesson is bounded self-regulating ingestion, not store-everything. If it cannot be bounded to a steady state, the graveyard is not built. --- docs/TICKETS.md | 2 +- ...on-discipline-graveyard-self-providence.md | 88 ++++++++++++++++++- 2 files changed, 88 insertions(+), 2 deletions(-) diff --git a/docs/TICKETS.md b/docs/TICKETS.md index 13ff6c0..d2a94a2 100644 --- a/docs/TICKETS.md +++ b/docs/TICKETS.md @@ -112,7 +112,7 @@ Newest first. Update on every open/close. | ID | Title | Status | Opened | Directive | |----------|------------------------------------------------|-----------------------|------------|-----------| | #000060 | H-ABCDEFG same-model substrate-delta harness (+ jaggedness tensor + curvature) | open · awaiting go/no-go (2026-05-20; from Dav1dPrometheus *Protocol-Layer AGI* working report §26/§50/§82-84). The report's "decisive proof": run the SAME base model substrate-OFF vs substrate-ON over long-horizon/adversarial/non-jagged batteries, report the delta. Two new metrics: jaggedness tensor `J_norm` (§73 — variance across nearby variants, normalized by difficulty) + discrete performance curvature `κ_t` (§5.2, with the honest no-global-convexity bound, Erratum 5). A-vs-C spine (B optional, D=mesh OUT → #000012/#000016). Curvature-aware ForkScore extension folds into **#000012** (NOT a new ticket — reserved `iota`/`kappa` weight slots already exist). Budget: control arms = Hermes/Qwen, never Opus without go; heavy passes on GPU box. Held-out/mechanism-agnostic variants required so ABCDEFG doesn't self-validate. | 2026-05-20 | — | -| #000059 | Admission discipline: claim-graveyard query + self-providence quarantine | open · awaiting go/no-go (2026-05-20; Dav1dPrometheus report §11 Priority 2 + §57 "admissible state transition" thesis). Two coupled write-path mechanisms. **(A) GraveyardCheck:** storage already exists (`falsification_state` failed/stale/quarantined records ARE the graveyard); the gap is burden-shifting — a re-asked claim family with a known `failed` history should require stronger evidence (§42.9/§62-63). **(B) Self-providence quarantine:** `make ingest-self-providence` (Makefile:769) deliberately promotes STRICT records into the corpus — the exact self-confirmation loop §70 warns of — and ships with NO guard; detect/lineage-tag self-providence-descended evidence + quarantine for high-impact claims. Both advisory-sidecar-first (run-DAG only, never `providence_cache`/`audit_events`); demote-hooks bench-gated + unwired pending net win (would fold `governance_policy_hash`). Soft signals never enter the hard proof path. | 2026-05-20 | — | +| #000059 | Admission discipline: claim-graveyard query + self-providence quarantine | open · awaiting go/no-go (2026-05-20; Dav1dPrometheus report §11 Priority 2 + §57 "admissible state transition" thesis). Two coupled write-path mechanisms. **(A) GraveyardCheck:** storage already exists (`falsification_state` failed/stale/quarantined records ARE the graveyard); the gap is burden-shifting — a re-asked claim family with a known `failed` history should require stronger evidence (§42.9/§62-63). **(B) Self-providence quarantine:** `make ingest-self-providence` (Makefile:769) deliberately promotes STRICT records into the corpus — the exact self-confirmation loop §70 warns of — and ships with NO guard; detect/lineage-tag self-providence-descended evidence + quarantine for high-impact claims. Both advisory-sidecar-first (run-DAG only, never `providence_cache`/`audit_events`); demote-hooks bench-gated + unwired pending net win (would fold `governance_policy_hash`). Soft signals never enter the hard proof path. **Bounded-ingestion hard constraint (fox 2026-05-20, §7):** the graveyard MUST reach a steady-state size ∝ the *recurring*-error surface, never queries-ever — earn-to-enter (recurrence-gated), fingerprints not transcripts (UTXO-set analogy), decay/compact (evicts like a surface), off the hot path. BTC's lesson is bounded self-regulating ingestion, not "store everything." Gossip-group falsifier admission inherits difficulty-adjusted stable-rate + per-window budget (#000036) → enforced in #000012/`mesh/`. If it can't be bounded, it isn't built. | 2026-05-20 | — | | #000058 | `cache_key_9` verifier-policy: mandatory-vs-legible decision + doc reconciliation | open · awaiting go/no-go (2026-05-20; Dav1dPrometheus report §2 Erratum 1 / §11 Priority 1 "mandatory cache_key_9"). **Five-step #1 correction:** the report's *correctness* premise is already false in arborist — verifier fields are a subset of the policy dict and so already fold into `governance_policy_hash` (`keys.py:269-275`); a verifier-rule change ALREADY changes the cache_key today. The explicit 9th `verifier_policy_hash` buys **audit legibility**, not correctness — so "mandatory" would stale every prior record for zero correctness gain. Decision: A leave-as-is (8-dim default, 9th optional) + doc reconcile [recommended] · B default-write 9-dim · C flag-staged bench-gated default-write — never a hard mandatory flip. Doc reconcile (CLAUDE.md/concepts "8-dim" → "8 + optional legible 9th") is the do-regardless. | 2026-05-20 | — | | #000057 | Witness-preserving vs ordinary recursive loop: minimal deterministic drift A/B | **open · awaiting go/no-go · doc-only scaffold** (2026-05-19; fox relaying a Hamming-framed GPT-5.5 de-novo review). The review's one ticket-worthy nugget: prove the whitepaper's headline claim — *untracked evidence loss → unbounded recursive drift; witness-preserving state bounds it (detectable+reversible)*. Everything else in the review (rename, corpus hierarchy, IQ, ToE/Riemann/identity) **deliberately NOT ticketed** — narrative, not arborist engineering; don't-proliferate. Hard discipline encoded from the 2026-05-18 precedent: **instrument before experiment** (deterministic, no-LLM-judge, ground-truth-carrying, noise-resolvable — the `recall_at_k` discipline), **one task not eight** (recursive stale-source-invalidation *or* contradiction-repair — the falsification-state-exercising ones), minimal A/B (witness-binding ON vs OFF, N iterations, deterministic surviving-unsupported-claim count), non-claims pinned (necessary substrate, NOT AGI). **Sharpened by fox 2026-05-19 (§4b/§5):** the review's strongest point — every measurement so far is *within* Arborist, no control arm. v1 (smallest proof) = single-shot **Hermes-solo vs Arborist** on a fabrication-bait fixture; headline = fabrication-vs-honest-abstention delta (NOT raw accuracy — common-knowledge would falsely show null via parametric memory). **Judge correction (fox):** "no LLM-as-judge" is a *proof-path* rule (LLM judge inside Arborist's verifier = the circularity it kills); the experiment's judge is **external science** outside *both* arms → use a **strong SOTA model**, blinded + reference-grounded + transcript-logged. That lifts the atomic-only limit (judge handles essay grounding too — #000049's exclusion was right for the proof path, wrong for external science); deterministic gold-key demoted to a cheap atomic cross-check. Recursive-drift loop = v2, gated on v1. Still open (fox calls): fixture population, **which SOTA judge** (API cost + Voyeur egress note), spend. Scaffold; no build past gate-1. One ticket, not ten. | 2026-05-19 | — | | #000056 | Operation Sandwich — cross-language grounding via query+display MT | **implemented & landed 2026-05-17 · default-OFF** (fox: "call it operation sandwich, create a new ticket and finish it"). Mechanism + bright line **verified live end-to-end** (real Hermes + real opus-mt: es query → English answer+verifier → es display; `answer_text` English, `display_answer` Spanish additive, `question_hash`/`verifier_policy_hash` invariant; 6 tests + full suite 2477 passed, 0 regressions). **Fan-out measured (§9, n=1, 75 q):** EN baseline 85% → es+sandwich 71% = **−14pp cost**; transitions PRESERVED 31 / DOWNGRADE 16 / LOST 17 / N/A 11. A deterministic round-trip predictor was tried and **refuted** (12/17 LOST round-tripped CLEAN; another instance of the codified CLAUDE.md bench-maxing lesson — not re-added). LOST taxonomy from the artifact: ≈7 entity-translate (`Boltzmann`→"perntzmann", `Tarsus`→"Tarso"), ≈3 broad-enum, ≈several n=1 noise. **Lever built+validated:** `arborist/qa/mt/entity_mask.py` mask/restore (real opus-mt: `who is Paul of Tarsus?` "Pablo de Tarso"→**"Paul of Tarsus"**); default-ON within the default-OFF sandwich. Caveat: bench is lowercased so cap-detector lift is a **lower bound** (corpus-title anchor = v2). Also: fan-out caught + fixed an 88%-engine-error concurrency defect (per-call model load → memoised singleton + lazy per-pair); French + Russian breads added (manifest, `crosslang_source_lang`). **Lift measured 2026-05-17 (comparator corrected, fox):** the true baseline is the pre-ticket ≈0% (raw es query → song-title noise, UNGROUNDED, 10.4s) — NOT native English. Against that: **the sandwich is a large net win (≈0% → 71% es grounded, proof core never corrupted); the −14pp vs English is the cost of a new capability, not a regression — calling it a "fail" was a comparator error.** Firmed 2026-05-18 (n=1, 0 engine-err): EN 85% · es-nomask 71% · fr-nomask **61%** (NOT 47% — that was the mask artifact; honest fr correction). The genuine negative is the **entity-mask lever**: net-negative in *both* languages (es 71→65 borderline, fr 61→47 = −14pp unambiguous; isolated Paul-of-Tarsus win didn't replicate — 3rd bench-maxing-lesson instance), now **default-OFF** (`crosslang_entity_mask=False`); no-mask sandwich is the keeper. Recommendation flipped: **worth continuing (minus the mask)**, not park. Remaining: n=3, fr no-mask, corpus-title anchoring (only untried lowercase-capable detector). CLAUDE.md updated with the durable cross-lang *convention* only. Tasks #14–#17. Phase 1 of the #000001 §7 family; new ticket clears don't-proliferate (fox-directed + distinct Dav1d audience + architectural inflection: a model dependency `[mt]` + a presentation-translation layer — anticipated by #000001 §7's "split the `[mt]` model-distribution work like `[nli]`/vecpack"). **Sandwich:** translate query es→en (retrieval-side, == `--retrieval-keywords`, binds into `retrieval_plan_hash`, NOT `question_hash`) → English answer through the **byte-for-byte untouched verifier** → translate the verified English `answer_text` en→es into a NEW `display_answer` field, banner-labelled, zero grounding (the `_render_audit_label` render-projection pattern). Engine: local `[mt]` extra, Helsinki-NLP `opus-mt-es-en`/`-en-es`, Apache-2.0, hash-pinned, off-repo `~/.arborist/models/mt/`, optional dep, graceful-degrade — mirrors `[nli]`/`ShadowNLI` (#000049) + vecpack (#000051) verbatim; never Hermes-3-8B; not an external API (reproducibility + zero egress + es↔en is the best-resourced pair). Default OFF (`crosslang_translate_enabled`, gated under Phase-0 `crosslang_guard_enabled`); `--crosslang-translate` / `XLANG_MT=1`. Hash invariants (corrected 2026-05-17 — `governance_policy_hash` is sha256 of the *whole* policy, keys.py:182): `question_hash` + `verifier_policy_hash` untouched (user question preserved, verifier byte-identical); `governance_policy_hash` moves like every policy flag → correct cache partitioning by config (not a leak); MT engine identity binds into `RetrievalPlan.mt_*` (run-DAG), not a policy hash. | 2026-05-17 | — | diff --git a/docs/tickets/ticket-000059-admission-discipline-graveyard-self-providence.md b/docs/tickets/ticket-000059-admission-discipline-graveyard-self-providence.md index 9ca6713..f17f16d 100644 --- a/docs/tickets/ticket-000059-admission-discipline-graveyard-self-providence.md +++ b/docs/tickets/ticket-000059-admission-discipline-graveyard-self-providence.md @@ -14,7 +14,10 @@ family. **Hard constraint:** verifier stays binary; these are admission / burden sidecars, not new verifier output fields. No write to `providence_cache` semantic columns beyond the existing -`falsification_state` machine. Cores never evict. +`falsification_state` machine. Cores never evict. **The graveyard +MUST be bounded — it reaches a steady-state size proportional to the +*recurring*-error surface, never to queries-ever (see §7). If it can't +be bounded, it doesn't get built.** --- @@ -119,3 +122,86 @@ lineage-tagged and a `SelfProvenanceRisk` sidecar flags self-confirming evidence; both behind read-only sidecars with bench-gated demote-hooks left unwired pending a measured net win. Tests + `make chain-check-shards` clean (0 per shard). + +--- + +## 7. Bounded ingestion — the graveyard must not grow like cancer (fox, 2026-05-20) + +**The deletion test first (five-step #2).** The report (§62) claims the +claim graveyard is *more valuable than the knowledge graph* and that "a +system without memory of its rejected beliefs is not fully learning." +Read literally that means store every wrong answer forever — unbounded +accumulation bolted onto a system whose entire premise is **constraint +optimization**. That is self-contradicting: the hot path is lean by +design; an ever-growing tombstone archive beside it is exactly the waste +fox flagged. So the constraint is binding: **the graveyard earns its +existence only if it stays bounded. If it cannot be bounded to a +steady state, it is not built.** + +**What the graveyard is actually for.** Preventing *recurring* error +cheaply — NOT archiving every error. A failure that never recurs costs +storage for zero benefit. Value ∝ recurrence, so ingestion must be +gated on recurrence. + +**BTC is the right model, but for the right reason.** BTC's lesson is +not "store everything" — it is **bounded, self-regulating ingestion**: +difficulty adjustment holds a stable block rate regardless of hashpower; +supply is capped; nodes validate against a compact UTXO set, not full +history. Port those three properties, not the ledger. + +### 7.1 Four bounding mechanisms + +1. **Earn-to-enter (recurrence-gated).** A failure earns a tombstone + only when the same canonical claim-family **re-fails** (or is + re-asked and re-fails). One-offs are dropped. Ingestion rate ∝ + recurrence rate — naturally small. This is BTC's "costs work to + enter the permanent record" property applied to epistemic state. +2. **Fingerprints, not transcripts (UTXO-set analogy).** Store a hash + of `canonical_claim_family | falsifier_root | failure_class` in a + compact set / Bloom filter — enough for GraveyardCheck's burden + shift (§3). Prune the bulk answer text; it is not load-bearing for + the burden check. +3. **Decay to steady-state.** `retest_after` + reputation decay (both + already named in the report). A tombstone whose retest window passes + without recurrence is evicted or compacted; failure families merge. + The graveyard **evicts like a surface, never like a core** — it is a + *cache of lessons*, and caches evict. Steady-state size tracks the + recurring-error surface, not total queries. +4. **Off the hot path.** A dedicated graveyard shard (report §9.1), + queried only as a Bloom-filter burden check — never inside hot + retrieval. Reads stay lean; the lessons-cache is consulted, not + traversed. + +### 7.2 Gossip-group inheritance (cross-link → #000012 / `mesh/`) + +fox: *"arborist gossip groups need something similar."* The shared +falsifier/claim-root admission in gossip groups inherits the same +discipline so shared state does not grow unbounded across peers: + +- **Difficulty-adjusted stable-rate admission** — the rate at which new + falsifier/claim roots enter shared group state is throttled by a + difficulty parameter that rises with spam / invalid-proof / + poison-survival and falls with replay-success (report §67's update + rule). Stable target rate regardless of peer count — BTC's ~10-min + block target, applied to epistemic admission. +- **Per-window admission budget** — ties into the existing + `docs/soft-hash-channel-t3-bound.md` per-window budget bound (#000036) + and its `t3_bound_calculator`. A group admits at most a bounded number + of new roots per window; the rest wait or are dropped. +- **Earn-to-enter at the mesh too** — a falsifier enters the *shared* + graveyard root only when replay-verified by independent peers (the + report's "reward accepted, replayed falsifiers"), not on first + assertion. This is the mesh analogue of §7.1(1). + +This subsection is the home for the principle; the consensus/Sybil +mechanics that enforce it live in **#000012** (v8 selection/consensus) +and the wire-level state machine in `arborist/mesh/`. Cross-linked, not +spawned as a separate ticket — it is a bounding *constraint* on existing +work, not a new audience. + +### 7.3 Acceptance addition + +The graveyard ships only if a steady-state-size demonstration exists: +under a synthetic recurring + non-recurring failure stream, the +graveyard footprint converges (bounded) rather than growing linearly +with query count. A linear-growth result kills the feature (§7 opening).