Repository navigation
PREEMPTION-1: the opaque-host-call population was a selection view of its own discovery instrument — one member, truthfully eight, now grounded in the seed's dispatch authority - #10043
Merged
Conversation
… its own discovery instrument — one member, truthfully eight, now grounded in the seed's dispatch authority
The §4b rung drop for PREEMPTION-1 is declared over a population of host operations whose
cost accrues where no safety poll can land. That population carried ONE member and called
itself "exhaustive rather than illustrative", on this reasoning: compile_dag_rust_emit_check
"is the only native free_call.* arm this corpus has MEASURED reaching CPU cost the safety
poll cannot see", citing floor run 32301212975's 60317ms row.
Both halves are true and the arrow between them is invented. Being caught over a limit in
one floor run is how the operation was FOUND; it is not what makes it unbounded. The finding
aid was read as the population — DESIGN's selection_view_read_as_population — so a declared
drop under-reported its own bounded population by eight to one, and seven arms that have
always reached the identical unpollable dispatch shape were left describing themselves as
protected by a guarantee that has never held for them. That is rung inflation at the
population grain, and an under-stated drop is one nobody can size.
THE CRITERION, stated so membership is falsifiable rather than trusted: a free_call.* arm
whose Rust realization synchronously runs a nested compile of .dag sources. Eight arms meet
it, each row carrying the Rust entry point that makes it a member —
compile_dag_rust_emit_check, compile_dag_diagnostic_census, compile_dag_multi_module_fixture,
observe_declared_import_closure_symbol_binding, witness_layer_roots_compile_clean_check,
witness_layer_roots_compile_clean_emit_check, install_or_consume_floor_compile_clean_gate_receipt
(whose own doc comment already warned that "a Bool read could cost a whole-tree compile"), and
witness_compile_clean_cli_floor_verdicts_agree (two whole-tree compiles).
THE GROUNDING is the other half, and it is why the new module sits beside the dispatch roster
rather than beside the floor. Every member resolves against gunbc.v1_interpreter_primitive_surface
v1_interpreter_primitive_arms — the seed's single dispatch-surface authority, itself drift-gated
against the generated lookup tables — so a renamed or deleted arm goes red. The prior hand-typed
literal was joined to nothing and would have stayed green. opaque_host_call_surface REFUSES
rather than shortening its list when the join breaks: a List<String> that silently dropped
unresolved rows would shrink the safety population at exactly the moment it matters.
WHAT THE CRITERION DOES NOT COVER is named rather than left as an implied exhaustiveness claim:
free_call.extdeps_qualified_name_resolves_in_derived_module_set reaches a whole-corpus INDEX
build, unbounded in the same way and not a compile. It is outside this criterion, not bounded.
EXECUTED EVIDENCE, four new witnesses in test.claim.preemption_reachability. The wall's two arms
were previously exercised against one hand-typed string and one invented string
("some_unmeasured_new_host_call") that can never occur, so the refusal arm had never been shown
against a real host operation. Now: the grounding join goes red on roster drift; the two tower
spellings are held equal at IDENTITY (injection by per-member admission, plus distinctness, plus
equal cardinality — not a count comparison); a second real member is admitted by name; and
filesystem_read, a live free_call arm that meets no criterion, is still refused, so the wall did
not collapse to admitting everything as the population grew.
WHAT THIS DOES NOT DO, stated because the item invites the opposite reading: it does not make an
opaque host call interruptible. The row still completes at twelve times its limit. This corrects
what the declared drop SAYS about itself and grounds the wall that governs its growth; the
restoration trigger — a deadline-aware contract or a killable process boundary — is untouched and
still open.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JwDQpQY1QGK6SzuixLuTov
Contributor
Author
|
CI status, with the one red attributed.
— sent from merry-koi-65 |
Contributor
Author
|
Correction to the comment above:
So the only red on this PR is one that is red on — sent from merry-koi-65 |
gunbai-bot Bot
pushed a commit
that referenced
this pull request
Sep 2, 2026
Main took #10024, #10025, #10031, #10043 and others since this branch opened. `docs/design-ledgers.md` is a projection, so every merge to main that touches it re-breaks it on every open branch that also touches it -- which is why the driver refused this head with GeneratedArtifactConcurrentDivergence. Resolved by taking main for both projections and regenerating from `dag/gunbc/rung_drop.dag`, with `gunbc` REBUILT from the merged tree first: main's #10024 changed `witness_floor_workflow.dag`, the authority that projects `witnesses.yml`, so regenerating with the older binary could have emitted bytes CI's binary would not -- introducing a drift while repairing one. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L9g69G7ZkiCXGCeUUJgo9D
gunbai-bot Bot
pushed a commit
that referenced
this pull request
Sep 2, 2026
…host_compile_phase fold The floor lane refused this branch's previous head with 15 CPU-ceiling preemptions, all in self_host_compile_phase_frontier_witness and self_host_compile_phase_live_gate_witness. main now carries #10038, three cost-shape repairs in that same module family's fold, plus #10031, #10025 and #10043. Integrating is the REAL change rather than a re-roll: the next floor run measures a materially different tree, so it is not another sample of the run that refused. Re-running the same tree until it answers is retry-until-green, which gunbc.rung_drop floor_cost_contention_verdict names as fail-open wearing a fail-closed label. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JaugFkN1vzZmVH6efyrZHR
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The defect
The PREEMPTION-1 §4b rung drop is declared over a population of host operations whose cost accrues where no safety poll can land. That population carried one member and called itself "exhaustive rather than illustrative", on this reasoning:
compile_dag_rust_emit_check"is the only nativefree_call.*arm this corpus has MEASURED reaching CPU cost the safety poll cannot see", citing floor run 32301212975's 60317ms row.Both halves are true and the arrow between them is invented. Being caught over a limit in one floor run is how the operation was found; it is not what makes it unbounded. The finding aid was read as the population — DESIGN's
selection_view_read_as_population— so a declared drop under-reported its own bounded population by eight to one, and seven arms that have always reached the identical unpollable dispatch shape were left describing themselves as protected by a guarantee that has never held for them.The criterion, and the eight members
A
free_call.*arm whose Rust realization synchronously runs a nested compile of.dagsources. Each row carries the Rust entry point that makes it a member, so a reader re-checks membership rather than trusting it:compile_dag_rust_emit_checkcompile_sourcescompile_dag_diagnostic_censuscompile_sourcescompile_dag_multi_module_fixturecompile_to_resolvedobserve_declared_import_closure_symbol_bindingcompile_declared_import_closure_only_with_poolwitness_layer_roots_compile_clean_checkcompile_to_resolved_with_optionswitness_layer_roots_compile_clean_emit_checkfloor_compile_clean_emit_okinstall_or_consume_floor_compile_clean_gate_receiptwitness_compile_clean_cli_floor_verdicts_agreeinstall_or_consume_floor_compile_clean_gate_receipt's own doc comment already warned that "aBoolread could cost a whole-tree compile" — it was outside the population anyway.What the criterion does not cover is named rather than implied:
free_call.extdeps_qualified_name_resolves_in_derived_module_setreaches a whole-corpus INDEX build — unbounded in the same way, not a compile. It is outside this criterion, not bounded. Widening to "unbounded opaque host work" needs its own survey and carries a dissolution condition saying so.The grounding
gunbc.v1_interpreter_opaque_host_callsits beside the dispatch roster, not beside the floor, because every member resolves againstgunbc.v1_interpreter_primitive_surfacev1_interpreter_primitive_arms— the seed's single dispatch-surface authority, itself drift-gated against the generated lookup tables. Rename or delete an arm and the join goes red; the prior hand-typed literal was joined to nothing and would have stayed green.opaque_host_call_surfacerefuses rather than shortening its list when the join breaks. AList<String>that silently dropped unresolved rows would shrink the safety population at exactly the moment it matters — the absorbing fallback §5 forbids.Executed evidence
The wall's two arms were previously exercised against one hand-typed string and one invented string (
some_unmeasured_new_host_call) that can never occur — so the refusal arm had never been shown against a real host operation. Four new witnesses intest.claim.preemption_reachability:install_or_consume_floor_compile_clean_gate_receipt) is admitted by name, so the correction cannot be silently reverted to the measured-only reading;filesystem_read, a livefree_callarm meeting no criterion, is still refused — the wall did not collapse to admitting everything as the population grew.What this does not do
It does not make an opaque host call interruptible. The specimen row still completes at twelve times its limit. This corrects what the declared drop says about itself and grounds the wall that governs its growth; the restoration trigger — a deadline-aware contract or a killable process boundary — is untouched and still open.
Two things verified for that follow-up while reading the arming path:
eval_expr(line-adjacent to the CPU poll) and has one genuinely out-of-loop enforcement:wait_child_honoring_wall_deadlinedrains a shell child on a worker thread, pollswall_deadline_exceeded_error()at ≤250ms, and kills the process group. That is the restoration trigger already implemented — for shell children only, not for synchronous in-process arms.ClaimPreemptionReachability's trigger says.Local execution was not available (BuildBuddy refuses with
HostBudgetUnreadable— no cgroup limit binds the runner), so the four witnesses are validated by CI.🤖 Generated with Claude Code
https://claude.ai/code/session_01JwDQpQY1QGK6SzuixLuTov