Repository navigation
compile-clean force-check (2(ii), §1 floor-coverage): DESIGN + MEASURE — registry-leak diagnosis, (A) tree-scoped-builtin design, blast radius 10/102 - #5451
Conversation
…m adhoc-6169238c-5e2) Execution-proven diagnosis (gunbc built from src/v1/stage0): the compile-clean gate fail-open is NOT 'unreached fn bodies escape typecheck' (bodies are always visited). The leak is (1) the global builtin_function_registry (a marked BRIDGE scaffold) resolving v1-seed-only names like utf8_decode_bytes inside the dsl substrate compile, and (2) unenforced declared return types (ROADMAP §0 line 31). Captures the construction-correct direction (tree-scoped builtin availability = the registry's own stated dissolution trigger) and three bounded options with a recommendation. No code change; awaiting parent design direction before the load-bearing inference slice. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…0 names / 102 sites (execution-proven) Parent quick-ant-298 confirmed scope = (A) tree-scoped builtin availability, DESIGN-FIRST + MEASURE-FIRST, land nothing enforcing (the enforce flip is operator-gated). Adds the (A) partition design (availability-tagged registry rows, SeedOnly admitted only when entry root = v1 seed; advances the registry's own marked dissolve-on) and the MEASURE-FIRST blast radius. Blast radius (empty-registry rebuild + real dsl/+v2 gate compile, throwaway worktree, uncommitted): 102 'function not found in scope' diagnostics, 10 distinct names, all in dsl/, none in src/v2. 8 are general primitives (96 sites), 1 is the filesystem_read lens-reflection fork (5), exactly 1 is the genuine domain leak utf8_decode_bytes (1, gcp) already owned by 2(i). Grep over-counted ~50 (method-form calls resolve via the structural method path, not the free-call registry). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
CI red investigated — not caused by this PR, and not actionable here. Failing check: This PR's diff is docs-only — a single new file No fix pushed (a docs-only PR has nothing to fix here, and a no-op push would only stale the standing approval). Holding frozen at merge-ready pending the inherited red clearing on main + a 2nd review. — sent from snappy-gull-450 |
|
CI red investigated — inherited from main, not this PR. Failing witnesses: This is a different red from the earlier #5445 one — it appeared after the auto-merge of Evidence it's inherited: this PR's diff vs main is docs-only — a single file No fix pushed: a docs-only PR cannot change an extdeps-tree witness, and the fix belongs to #5452's owner (re-green main's anchor lens). Holding frozen; #5451 goes mergeable once main is green again. — sent from snappy-gull-450 |
|
Correction to my prior comment's attribution (the conclusion is unchanged — still an inherited main red, this docs-only PR can't cause or fix it): The anchor-lens red is #5429 ( — sent from snappy-gull-450 |
Work-item
adhoc-6169238c-5e2(2(ii) compile-clean force-check). Scope confirmed by parentquick-ant-298: DESIGN-FIRST + MEASURE-FIRST, land nothing enforcing. This PR ships onlydocs/plans/compile-clean-forcecheck.md(no code).What it establishes (execution-proven,
gunbcbuilt fromsrc/v1/stage0)The compile-clean gate fail-open is NOT "unreached fn bodies escape typecheck" (bodies are always visited). The real mechanism:
utf8_decode_byteswitness). It's referenced atdsl/extdeps/cloud/gcp/secret_manager.dag:71but defined nowhere indsl//src/v2; it resolves because it's a hardcoded row in the globalbuiltin_function_registry()(src/v1/04_method.dag:93), an explicitly-marked BRIDGE scaffold. The registry is global, not scoped to the compiled tree → v1-seed intrinsics leak into the substrate compile.(A) direction — tree-scoped builtin availability
Tag each registry row
SubstrateAvailablevsSeedOnly; admitSeedOnlyonly when the entry root is the v1 seed. A substrate compile then fails closed on a seed-only name (the existing "function not found in scope" path). This advances the registry's own marked dissolve-on (04_method.dag:55-62). The enforcing flip is load-bearing (inference scope) + changes what compiles → operator-gated; this doc + the measured number is the sign-off input.Blast radius (MEASURE-FIRST)
Empty-registry rebuild + real
gunbc compile --source-root dsl --source-root src/v2 ... --target rust(throwaway worktree, uncommitted): 102 "function not found in scope" diagnostics, 10 distinct names, all indsl/, none insrc/v2. 8 general primitives (96 sites),filesystem_read(5, known lens-reflection fork), exactly 1 genuine domain leak —utf8_decode_bytes(gcp), already owned by 2(i). So (A)'s rollout is small/tractable, not a flag day. Full table in the doc.Adjacent: 2(i) (
adhoc-8e5771e1-14a) groundsutf8_decode_bytesas a real std fn + deletes its registry row; (A) is what makes that grounding required by construction so the leak can't recur.🤖 Generated with Claude Code