Skip to content

Construction-not-validation: dissolve the cache-key model<->realizer fork into single authority (realized key DERIVED from declared inputs_considered, so declare-without-keying is unwritable) — replaces the spec-only validating lens from #5423; triage roadmap lens items into make-impossible-by-const - #5425

Merged
briansrls merged 5 commits into
mainfrom
session/deep-ferret-853
Jun 21, 2026

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Jun 21, 2026 •

Copy link
Copy Markdown
Contributor

Construction-not-validation: dissolve the cache-key model↔realizer fork

The resolved-graph cache key had two hand-authored authorities — the .dag model row's
inputs_considered and the Rust realizer's digest — that could diverge. PR #5423 added a
spec-only lens over the model row and false-greened: a worker satisfied the declaration
while the realizer still keyed wrong. Per the governing principle (correctness by
construction
, not validation), this makes the divergence unwritable rather than caught.

Model side — the class-kill

CatalogKeyDerivationFacts's classification + inputs_considered pair → one
CatalogKeyInputs sum:

  • ContentAddressed (OUR caches) — no inputs field; inputs are DERIVED from
    invalidation_triggers (content_addressed_inputs: [UpsertSubject] + ToolchainSpec iff
    it invalidates on toolchain). Declaring-without-keying / keying-without-declaring is
    unwritable for all 5 content-addressed rows (resolved_graph, buildbuddy,
    parse_table_memo, hermetic_fixture×2), present and future.
  • NativeInternal / HandAuthored (EXTERNAL vendor caches: cargo/rustup/sccache/gha) —
    inputs are a CITED observation of a system we don't control (§3). This is the
    genuinely-unstructurable residue: key_completeness now validates that citation only
    (ToolchainChange ⟹ a cited toolchain axis), firing on NativeInternal rows alone.

Realizer side

subject_digest_for_closure folds a total materializer over a closed KeyInputAxis set
(resolved_graph_cache.rs): keyed axes ≡ the enum's variants, so they cannot drift.

std cleanup

std KeyDerivationFacts drops classification + inputs_considered — both unconsumed and
anonymous-literal-authorable (a divergence one layer down). The agnostic key-input list now
exists only as the derived projection of the extdeps sum. std KeyDerivationFacts has no
literal-authoring path; its sole constructor is cache_interface_facts_from_catalog, and the
only consumed field (vendor_only_key_inputs_omitted) is preserved.

Proven by EXECUTION (the #5423 lesson)

  • CAV derivation: content_addressed_inputs([ToolchainChange]) keys the toolchain vs
    ([ManualPurge]) does not; live resolved_graph row derives [UpsertSubject, ToolchainSpec];
    RED verified by dropping ToolchainChange from the live row.
  • Realizer axis-sensitivity falsifiers (Rust): perturb transform/closure axis ⟹ key changes;
    determinism holds. RED verified by dropping TransformContent from the fold (teeth on
    the realizer, not just the spec).
  • Whole-tree dsl_compile_clean gate → ExitSuccess; cargo fmt --check + clippy -D warnings clean; cache test modules green.

Residual (named, not papered — v2-gated)

The Rust realizer's axis set and the .dag model's derived set are two implementations of one
rule. Full R←M single authority needs v2/realize (realizer = .dag subgraph,
content(T) = content_hash(subgraph)); the v1 seed can't have the realizer read the model row
at key-compute time without re-entering this cache. Absorbed by the self-host lane.

Secondary

ROADMAP: the construct-vs-cite triage criterion + root-cause before lens documented.

🤖 Generated with Claude Code

briansrls and others added 4 commits June 21, 2026 03:15
…rk into single authority

The cache key had TWO hand-authored authorities — the .dag model row's inputs_considered
and the Rust realizer's digest — which could diverge. PR #5423 shipped a SPEC-ONLY lens
over the model row; it false-greened (a worker satisfied the declaration while the realizer
keyed wrong). This collapses the fork by construction instead of validating it post-hoc.

Model side (the class-kill): CatalogKeyDerivationFacts's classification+inputs_considered
pair becomes a single CatalogKeyInputs sum. ContentAddressed (OUR caches) has NO inputs
field — inputs are DERIVED from invalidation_triggers (content_addressed_inputs), so a
content-addressed cache cannot declare-without-keying or key-without-declaring; it is
unwritable for all 5 CAV rows present and future. NativeInternal/HandAuthored (external
vendor caches) carry CITED inputs — observations of a system we don't control (§3); that is
the genuinely-unstructurable residue the key_completeness lens now guards (cited rows only;
CAV exempt=construction, HandAuthored exempt=authored).

Realizer side: subject_digest_for_closure now folds a TOTAL materializer over a closed
KeyInputAxis set (resolved_graph_cache.rs) — keyed axes = the enum's variants, cannot drift.

std KeyDerivationFacts drops classification+inputs_considered: both were unconsumed and
anonymous-literal-authorable (a divergence one layer down); the agnostic key-input list now
exists only as the derived projection of the extdeps sum. Sole std consumer
(vendor_only_key_inputs_omitted) preserved.

Proven by EXECUTION (the #5423 lesson):
- CAV derivation: content_addressed_inputs perturbed by triggers; live resolved_graph row
  derives [UpsertSubject, ToolchainSpec]; RED when the live row drops ToolchainChange.
- realizer axis-sensitivity falsifiers (Rust): perturb transform/closure axis ⟹ key changes;
  RED proven by dropping TransformContent from the fold (teeth on the realizer).
- whole-tree dsl_compile_clean gate ExitSuccess; fmt+clippy clean.

Residual (named, v2-gated): the Rust axis set and the .dag derived set are two impls of one
rule; full R←M single authority needs v2/realize (realizer = .dag subgraph,
content(T)=content_hash(subgraph)). Absorbed by the self-host lane, not papered with a lens.

ROADMAP: construct-vs-cite triage criterion + root-cause-before-lens documented.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review June 21, 2026 03:45
briansrls added a commit that referenced this pull request Jun 21, 2026
…ize kernel

The §5 caching-via-realization principle made executable: a content-keyed
realization promises output = f(declared key inputs); an input read at realize
time but absent from the content-key makes a WARM hit serve a stale result a
fresh COLD recompute would no longer produce. The cache IS the purity falsifier.

- extdeps/realization/cache_purity.dag — CachePurityVerdict carrier (Pure |
  Impure{located violation naming the read-but-unkeyed axis}); the durable
  artifact v2 inherits. Discovery witness in dsl/test/claim.
- cache_purity_oracle.rs — v1 proving handler: audit_warm_equals_cold holds the
  content-key fixed, perturbs candidate hidden inputs, and raises a located,
  typed, LOUD CachePurityViolation on divergence (fail-closed). Probes that move
  the key are declared axes (a miss, not a stale hit) and are skipped.
- cache_purity_oracle_test.rs — discriminating witnesses (DESIGN §5
  spec-without-execution): REAL kernel warm==cold byte-identical round-trip +
  real realization PURE under non-keyed probes (green by execution) PLUS an
  injected hidden non-keyed input that goes RED with the loud located error.

ROADMAP §2 P1. Consumes subject_digest_for_closure (no re-fork of #5425's key).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@briansrls
briansrls merged commit 9105cd2 into main Jun 21, 2026
1 check passed
@briansrls
briansrls deleted the session/deep-ferret-853 branch June 21, 2026 05:50
briansrls added a commit that referenced this pull request Jun 21, 2026
)

#5428 (smart-crane) grounded Nat construction-side — Zero→Int(0),
Succ{prev:Int(k)}→Int(k+1) — so native form == modeled form.
Deferred doc update explicitly to lane manager post-#5425.

DESIGN.md §5 open-thread (b): mark numeric tower GROUNDED; note that
eval_binop CrossRepresentationEquality guard is dead-in-corpus for
numerics but kept as fail-closed backstop until Value::Null split
(guard removal bundled with that work, fenced out of this window).

docs/plans/model-realization-fork.md §3.1: numeric row landed→grounded;
records the exact realization, discriminating witness, and why the guard
stays (bundled removal, not a regression). §3.2 (Value::Null split)
unchanged — still the deeper root, its own runway.

Co-authored-by: Brian Searls <briansrls@gunb.ai>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Jun 21, 2026
Flip [ ]→[x] for unambiguously-merged work (PR-ref'd for traceability):
- §0 numeric-tower grounding (#5428 — == straddle guard dead-in-corpus)
- §0 inert-lens hygiene executable backstop (#5433)
- §2 F2/F3 resolved_graph key derived from inputs_considered (#5425)
- §3 cost-lens symbolic_max zero-absorption fix (#5437)
- §4 gate existing generated testgen output (#5434)
- §4 affected-set completeness (#5430)

Partial/compound items left for their lane managers to flip in the PR that completes them.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Jun 21, 2026
…gestion⁻¹ past syntax (#5442)

* WIP: dsl -> v2 scoping

* WIP: ROADMAP planning

* WIP: ROADMAP planning

* WIP: ROADMAP planning

* ROADMAP: scannable dependency-ordered checklist; consolidate caching plan (de-fork zesty-deer-479 owner, absorb quick-ant-298 spine)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* WIP: ROADMAP planning

* self-host: add bootstrap purity (no stage0 hand-edits / regen-lockstep keystone) + precise v1 cutover

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* ROADMAP §0 fail-closed lock-down (blocks expansion) + audit doc; §4 website demo

Audit: cache lossy-digest flake (resolved_graph_cache.rs:146, verified), ~inert analytical
lenses (complexity/cost/etc), regen --verify unwired (#5325). Lock-down checklist gates expansion.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* ROADMAP: flesh §2 idea->idea compiler (medium/language axes); §0 → lock-down LANE (audits→fixes→meta), name model<->realization fork as suspected root

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* WIP: ROADMAP planning

* lock-down: add CI-coverage-completeness audit (rust gate runs 3 of 60 v1 suites) + axiom/syllogism lens (DESIGN open thread #1 — lock down the reasoning)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* WIP: ROADMAP planning

* roadmap §0/§7 + lockdown: lead with correctness-by-construction, demote lenses to residue

Folds in the operator principle (relayed via quick-ant-298): a lens is validation
— it concedes the bad thing is writable. Root-cause to make it unwritable (single
authority / realization derived from model); reserve lenses for the genuinely-
unstructurable (complexity/necessity). #5423's spec-only key lens shipped a
false-green as the live proof.

- ROADMAP §0: add the principle; split Fixes into tier-1 construction (dissolve
  model↔realization fork; cache-key derived-from-declared-inputs; self-host purity
  by construction) and tier-2 lens (complexity/cost; cache-redundancy; purity
  oracle; promote-inert). Meta-invariant → construction-justification rule.
- ROADMAP §7: P1 cache-key reframed from 'realizer-key lens' to key derived from
  declared inputs_considered (construction).
- fail-closed-lockdown.md: construction principle in the thesis; §4 checklist
  re-ordered construction-first / lens-residue; meta = construction-justification.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* roadmap §0: add Disposition carrier + 'confront skipped modeling decisions'

Captures the lens/coproduct disposition decision (operator). One typed carrier
(Terminal{reason} | Scaffold{dissolves_to}) for BOTH lens-lifecycle tags AND
coproduct dissolve-markers — today freeform 🟡 comments, unreadable by lens since
comments aren't Nodes.

Decision: middle path (construction-capable carrier + selectively-enforcing lens
that ratchets coverage) now, #1 (substrate can't-define-untagged) as the named
end-state. The lens is itself a Scaffold{dissolves_to: substrate-mandatory-tag} —
self-dissolving when coverage = whole tree. Rejected jumping to #1 on sequencing
(load-bearing §4 substrate change → escalate; flag-day migration; derived
coproducts need disposition derived not authored), not on principle.

Enforceability split: presence = construction (non-optional field, no meta-lens);
redundancy (scaffold + successor both present) = hard gate; Terminal-vs-Scaffold
correctness = retro/judgment (synthesis-feasibility limit).

- docs/plans/disposition-carrier.md (new)
- ROADMAP §0 tier-1 + meta 'confront skipped decisions' standing practice

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* WIP: ROADMAP planning

* DESIGN §5/§6: promote construction-over-validation; roadmap: scope-partition §0, testgen §1, shelve dashboard

Addresses the review's four flags + sequencing nuance.

- DESIGN.md §5: 'correctness by construction, not validation' is now an axiom
  (a check re-stating a model constraint is a 2nd representation §2/§3; prefer
  realization derived from a single authority; reserve checks for the unstructurable
  residue). §6 'enforce with lenses' reconciled: construction first, lens = residue
  mechanism, AND the executable inert-lens backstop is NOT superseded by the
  authoring-time construction-justification judgment. (flag 4 home + flag 3)
- ROADMAP §0 partitioned: In-scope this window (numeric-tower grounding; cache
  trustworthy + warm==cold oracle shipped NOW as detective; widen rust gate;
  promote inert lenses) vs Fenced-OUT fan-out (Value::Null 131-site split;
  self-host purity gate; cross-tree import activation; Disposition carrier).
  Honest framing: window reduces fail-open surface, does NOT 'lock' the class —
  Null split stays open. (flags 1, 2, sequencing nuance)
- ROADMAP §0 meta: restored executable inert-lens hygiene backstop, construction-
  justification layered on top (not 'supersedes'). (flag 3)
- De-dup: principle no longer restated in ROADMAP/lockdown §0; both point to
  DESIGN §5. cache-key construction homed in §7, §0 references it. (flag 4)
- ROADMAP §1 = testgen as bug-class oracle (+ affected-set completeness half +
  parked anemia lens); dashboard shelved to §8.
- docs/plans/testgen-oracle.md (new), fail-closed-lockdown.md realigned.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* WIP: ROADMAP planning

* DESIGN §5/§6/§7: wall-vs-ratchet decidability, displaced-pain denominator, open language design

Folds in the operator's product thesis + the two bounds that keep it honest.

- §5: construction makes a class unwritable only when membership is DECIDABLE —
  trichotomy (wall now / wall after grounding / ratchet forever); 'never' is the
  trap (lets an undecidable ratchet masquerade as a wall — optimality by Rice).
- §6: denominate the benefit — the deliverable is a displaced cost (§1 time / a
  paid-for pain), the lens/substrate is the moat not the product; priced in
  elegance the work is unbounded (the economic twin of 'never').
- §7: the recursion's payoff — language design itself opens up. It's locked by
  cost (a check = a compiler fork; a language = an adoption problem); both
  dissolve here (a wall is a row §2, applied over a medium-agnostic substrate §4),
  so (compiler-fork × language) → (row + medium). Sound where ingest is Lossless,
  fail-closed where not (DecodeFidelity §4).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* WIP: ROADMAP planning

* ROADMAP: fix doc-graph violations from bright-eagle-46 review of #5424

Apply the apex axiom/syllogism lens (single authority / no orphan / no
cycle) to the roadmap itself — manual acyclicity pass:

- orphan: testgen-oracle.md backlinked §1 → repoint §4 (its own lane)
- single authority: §0 cache-key now a pure pointer (= §2 F2/F3/P1);
  §0 numeric-tower marked the authoritative home (§5 de-fork / fork plan
  point here, no second checkbox)
- §0↔§5 cycle: self-host purity reframed as a §5 deliverable §0's
  expansion-gate depends on (edge §5 → §0-gate → products), not §0-owned
- undeclared edge: §7 react/html declares its dependency on §6 media
- backlink sweep: the reorg had broken every numeric backlink across 7
  plan docs; re-point all and anchor each to the stable section TITLE so
  a future renumber can't silently break them again

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* ROADMAP §3 + plan: algorithmic-cost reduction by construction (rewrite, not budget)

Reframe §3 from per-fn complexity budgets to the actual intent: rewrite
common suboptimal patterns (O(n²)→O(n), O(2ⁿ)→O(n), O(n)→O(log n)) to the
cheaper equivalent — construction on the cost axis, not a warning.

New plan doc docs/plans/algebraic-rewrite-optimization.md captures the
up-front design: the decidability split (modeled EffectShape makes the
preconditions structural; equivalence stays undecidable so no optimality
oracle), rewrite-rule-as-row + once-proven soundness, the common-case
catalog tiered by precondition, D1 canonical-form-is-truth / D2 two seed
rules / D4 constant-factor deferred, the four-witness DONE bar (incl. the
non-firing control half-done versions skip), and a corpus hit-rate
acceptance gate. complexity.dag is the cost oracle; synthesis.dag stays
the advisory undecidable residue.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* ROADMAP §2: Phase-0 measurement instrument done (#5431 peak-RSS) — remaining is the Phase-1 consumer

Per quick-ant-298: the measurement keystone was nearly complete — model
side already floor-enrolled, step timing already emitted; the only gap was
peak-RSS, closed by #5431. P4's Phase-0 dependency is satisfied; remaining
is the Phase-1 measured->plan feedback + width-fold (also unblocks §1-C).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* plan/§3: detection-vs-enforcement containment (E⊆D′⊆D) + explicit seed-rule I/O up front

Grounded in cost.dag U2 + complexity.dag (investigated, not theorized):
- detection is TOTAL by construction (kernel-level cost fold; arbitrary fns
  detectable); boundary is precision (ClassUnknown), not coverage
- enforced rewrites are a strict subset structurally guaranteed by the
  class-drop witness: E ⊆ D′(precise) ⊆ D(all)
- n√n excluded for a MODEL reason (PolynomialDegree is integer-only, n^1.5
  unrepresentable); ternary search excluded (log base is not a class)
- today's small gate roster = subject-production limit (fn-body reflection),
  NOT a detection limit
- new §3a fully specifies the two seed rules up front: input→output→
  precondition→non-firing control→discriminating equivalence input, so the
  worker builds to spec and the project can actually finish

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* ROADMAP §0/§1: rust-gate is cadence-decoupling, not run-all (per fierce-hawk #5427)

The 3-filter allowlist was COST selection, not arbitrary gatekeeping — the
v1 SEED compiler costs ~tens of CPU-sec per trivial test, so run-all-per-PR
is CPU-hours (off the table). True shape: per-PR cost-bounded subset +
measured #[ignore="expensive: Ns"] + completeness lens (#5427); nightly
--ignored lane as the destination for expensive + the 58 currently-ignored
tests (owned by §1/quick-ant, after #5431, escalate for load-bearing
CI-gen). Completeness = every test runs on >=1 cadence (fail-closed).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* plan §2a: generalize by structural-redundancy keying (O(n^x)->O(n^(x-1)) free); flag n-log-n as substitution

Per operator: catalog must generalize polynomial-degree reduction without
edge cases. Resolution: rules key on the structural redundancy, never on
degree — degree is not evidence of redundancy (would fire on genuine O(n^x)).
A structurally-keyed nested-membership->set peels one level wherever it
matches; fold-to-fixpoint gives O(n^3)->O(n^2)->O(n). Cost model supports
arbitrary integer degree, so witness (b) holds at every peel.

Flagged OPEN (operator input invited): O(n^x)->O(n log n) is algorithmic
SUBSTITUTION (different algorithms, same I/O) not redundancy elimination —
verges on undecidable equivalence; tractable form is per-idiom rules
(sort-based dedup, repeated-min->heap), not a parameterized rule. Seed Rule 1
now authored structurally + carries a depth-2 generalization witness.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* plan §1b: Unknown is an anemic atom — dissolve over time (reuse Disposition), never a false pass

Per operator: classifying Unknown isn't a fixed up-front split — it's the
standing anemic-leaf dissolution practice (DESIGN §2 decompress->map->reduce)
applied to the cost lens. UnknownCost{diagnostic} already carries its reason;
the anemia is the free-form reason. Each decomposition resolves an Unknown to
construction (now-precise class -> new D′) or a grounded Terminal (genuinely
undecidable, positively recognized -> advisory comment). DFS-first: this IS
the Disposition carrier (resolves to construction-or-justified-Terminal), so
reuse it, don't fork an unknown-reason enum. Supersedes the static
Undecidable|Undetermined split. Two invariants fixed up front: never a false
pass (Unknown=>Violates, already holds); every Unknown on the dissolution
frontier. cost.dag enrichment + un-parking Disposition are operator-gated.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* ROADMAP: §3 reverts to budget-gate validation (stability); rewrite-engine relocated to §5 (post-stability)

Operator decision 2026-06-21: budget-gate validation is fine for the
stability window; the algorithmic-cost REWRITE construction design is
expansion, homed with self-hosting (§5) — IR-rewrite/canonicalization is
most natural once .dag is the self-hosted truth.

- §3 = complexity budget gate (validation): cost-lens symbolic_max fix
  (#5437) + per-fn subject + budget-gates-whole-codebase (gated on fn-body
  reflection) + synthesis advisory. #5437 foundation stays in-window.
- §5 gains an 'adjacent expansion lane' = the rewrite engine, pointing at
  the preserved plan doc; marked post-stability.
- plan doc status -> POST-STABILITY EXPANSION, relocated to §5.

Nothing deleted — the rewrite design is preserved, just fenced out of the
stability window (same as Disposition / Value::Null-split).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* WIP: ROADMAP planning

* #5442 review fix (warm-lark-306): grep-as-authority for the sidecar roster (10 not 9)

The §0-guard impl PR (#5445) grepped current main and found 10 importers of
extdeps.languages.bash.program, not 9 — the 10th (dsl/gunbc/ci_spec.dag) landed via #5432 after
the original pre-merge grep. Rather than bump the frozen count, make the live grep the authority
(the roster shrinks to 0 as the bash-sidecar arc migrates consumers, so any frozen number rots —
the single-authority point). Also note the two *_test importers are intentionally not walled
(guard scans consumer-source roots only).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* ROADMAP: check off 6 merged items (catch-up sweep)

Flip [ ]→[x] for unambiguously-merged work (PR-ref'd for traceability):
- §0 numeric-tower grounding (#5428 — == straddle guard dead-in-corpus)
- §0 inert-lens hygiene executable backstop (#5433)
- §2 F2/F3 resolved_graph key derived from inputs_considered (#5425)
- §3 cost-lens symbolic_max zero-absorption fix (#5437)
- §4 gate existing generated testgen output (#5434)
- §4 affected-set completeness (#5430)

Partial/compound items left for their lane managers to flip in the PR that completes them.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* ROADMAP §1: add compile-clean-gate force-checks-every-fn-body box (2(ii) fail-open)

New floor-coverage item: the compile-clean gate is fail-open — unreached fn bodies escape
typecheck, so undefined symbols in dead code pass green (execution-proven on utf8_decode_bytes).
Construction fix = typecheck total over every declared body. Owned by §1 (quick-ant); measure-first,
operator-gated enforce-flip.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* ROADMAP §0: correct the 2(ii) box — registry-leak mechanism, not unreached-bodies

snappy-gull's deeper diagnosis: the fail-open is NOT unreached bodies (bodies ARE visited).
utf8_decode_bytes resolves because it's a global builtin_function_registry entry (04_method.dag,
a marked bridge scaffold) not scoped to the compiled tree. Reframe the box to tree-scoped builtin
availability / registry partition; instance fix = real std fn + remove the registry bridge entry.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* WIP: ROADMAP planning

* plan doc: enforcement roster is a FROZEN grandfather set, not derived (warm-lark correction)

Deriving the realization-vocab exception roster from a live grep would make the guard vacuous
(leak = non-edge importer AND NOT-in-roster; derived roster ⇒ every importer always in it ⇒
leak_count always 0 ⇒ never fires). Distinguish the informational prose count (rots, re-grep)
from the lens's enforcement roster (frozen, so a new unrostered importer goes RED = the teeth).
Add the 11th importer (extdeps_external_authority_transport, the #5418→#5445 race, fixed by #5453)
and the roster-completeness assertion as the steady-state race-hardening.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* WIP: ROADMAP planning

* ROADMAP refresh: §1 nightly→Pop-B (opt-level won), §2 resolve-cache GO + P2 de-fork-dependent, §0 census regression + gate-hygiene

Reflects decisions/findings that landed 2026-06-21:
- §1: the "expensive" tests were debug-build amplification, not intrinsic
  seed cost (proud-deer cause-table); opt-level=3 (#5456) restores Pop-A to
  per-PR; nightly lane reduced to Pop-B wet-captures only. Mirror corrected in §0.
- §2: resolve-cache enable = GO (~18% floor-wall, purity-proven, #5429-gated);
  P2 ParseTable dissolution reclassified as a downstream consumer of the dsl→v2
  de-fork (keen-otter: v2-local rewire is cosmetic); #5446 realize kernel green.
- §0: stage0 clone-census ratchet went inert + the seed regressed 1138 over
  budget (rust-side coverage-by-illusion + thesis regression; #5427 surfaced it);
  gate-hygiene rule (floor-enrolled gate must be green-on-main at merge) +
  roster-completeness assertion promoted to should-land (the #5445 floor-skew).
- §1: registry-partition instance fix = #5452 (verified sound).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Brian Searls <briansrls@gunb.ai>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Jun 21, 2026
* WIP: warm==cold cache purity detective (§2 P1->P3)

* warm==cold cache purity detective: executable §5 oracle over the realize kernel

The §5 caching-via-realization principle made executable: a content-keyed
realization promises output = f(declared key inputs); an input read at realize
time but absent from the content-key makes a WARM hit serve a stale result a
fresh COLD recompute would no longer produce. The cache IS the purity falsifier.

- extdeps/realization/cache_purity.dag — CachePurityVerdict carrier (Pure |
  Impure{located violation naming the read-but-unkeyed axis}); the durable
  artifact v2 inherits. Discovery witness in dsl/test/claim.
- cache_purity_oracle.rs — v1 proving handler: audit_warm_equals_cold holds the
  content-key fixed, perturbs candidate hidden inputs, and raises a located,
  typed, LOUD CachePurityViolation on divergence (fail-closed). Probes that move
  the key are declared axes (a miss, not a stale hit) and are skipped.
- cache_purity_oracle_test.rs — discriminating witnesses (DESIGN §5
  spec-without-execution): REAL kernel warm==cold byte-identical round-trip +
  real realization PURE under non-keyed probes (green by execution) PLUS an
  injected hidden non-keyed input that goes RED with the loud located error.

ROADMAP §2 P1. Consumes subject_digest_for_closure (no re-fork of #5425's key).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* cache purity: address review — dissolve is_pure predicate; add §7 Rust-shrinkage receipt

Review (claude-opus-4-7, APPROVE) soft concerns:
- predicate-dissolution: cache_purity_is_pure was a Bool restating the
  CachePurityVerdict coproduct. Deleted it; consumers (and the witness) match the
  verdict directly so the located violation stays in hand on the Impure arm.
- §7 hand-Rust receipt: added an explicit SCAFFOLD dissolve-on trigger to the
  oracle module header (net-new capability bound to the v2 realize-fold fixed
  point, ROADMAP §2 P5), matching the codebase's named-dissolution convention.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* cache purity test: make pure-under-probes test hermetic (isolate cache dir)

Review (claude-opus-4-7) valid non-blocking finding:
real_resolved_graph_realization_is_pure_under_nonkeyed_probes took
CACHE_ENV_MUTEX but never isolated GUNBC_RESOLVED_GRAPH_CACHE_DIR, so a host
with that var set could leak into the test. Replaced the bare mutex lock with
CacheEnvGuard::set(temp) — which both isolates the cache dir and serializes the
env-var probe — matching tests 1 and 3.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Brian Searls <briansrls@gunb.ai>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Brian Searls <11205878+briansrls@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant