Repository navigation
Enroll the function-value adapter alignment control, and file one_refusal_two_destinations - #9938
Conversation
…s exactly where the impl Fn bound is emitted
This lands the EVIDENCE for a property that holds by construction today and
which nothing else would notice losing.
WHAT WAS CLAIMED AND IS FALSE. I reported rust_call_arg_function_value_adapt
as a SILENT defect: it reads the DECLARED arity of a function-typed parameter,
gets 0 for a bare type variable, does not emit the Rc->impl Fn adapter, and
nothing refuses. bright-ram carried that into a standing correction of the
XL-0 push ("loud sites self-select into the typeck count, this one does not").
It is wrong, and the correction has been withdrawn.
WHY. The adapter predicate and the predicate that decides whether the parameter
renders WITH an impl Fn bound are the same expression on the same node --
`param_node_type_expr(n: param).params |> count` in
rust_call_arg_function_value_adapt, and `n.params |> count > 0` in
emit_rust_param_type reached through emit_param. The seam the adapter closes is
Rc<dyn Fn> flowing into an impl Fn BOUND, and that bound exists exactly where
the adapter fires. Arity is also invariant under substitution: instantiation
changes an arrow's type ARGUMENTS, never its parameter count, so the site was
never answering the instantiated-type question at all.
MEASURED, not argued (BuildBuddy, gunbc compile then cargo check on the emitted
crate):
pub fn make_adder() -> Rc<dyn Fn(i64) -> i64>
pub fn apply_arrow(f: impl Fn(i64) -> i64 + Clone, v: i64) -> i64
pub fn hold_tv<T: Clone>(value: T) -> T
apply_arrow({ let __adapt_f = hold_tv(make_adder()); move |__adapt_a0| __adapt_f(__adapt_a0) }, 1)
A bare type variable renders as a plain generic with NO Fn bound, so there is
no seam to close and adapting there would be a fabricated repair. The emitted
crate compiles: 0 rustc errors. Building the refusal that was routed would have
been a permanently-green decoration cited later as coverage.
THE CONTROL IS THE DELIVERABLE. Four assertions in both directions -- the Rc
carrier on the producer side, the impl Fn bound at the declared-arrow parameter,
the absence of any Fn bound at the type-variable parameter, and the adapter
present at the first while absent at the second, whose argument is equally a
call result so argument shape alone does not explain it. Fork the two predicates
and one of the four goes red.
VALIDATION AND WHAT IS NOT DONE. v1_src_dag_parse reports 4475 files
parse-clean with this edit, run with the discriminating control its own header
requires: appending one unattached trailing `//` to this file produced exactly
one refusal naming it at :3339, so the instrument did read the edited bytes.
The stage0 mirrors are NOT regenerated here -- claim_executor --regen-round-cost
refuses on a BuildBuddy runner (HostBudgetUnreadable: no cgroup memory.high or
memory.max binds the process, and it declines to substitute the machine's memory
for the slot's), and a whole-tree resolve OOMs the runner at 97% of 7.8 GB. The
drift gate is therefore expected red until the mirrors are healed.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FdxzwWekWhHR2FCTTf8a1b
…ent expected types, and the remedy row is the wrong one
bright-ram asked for this class after two of us measured it independently. The
row is authored in the .dag authority; DESIGN.md and docs/design-ledgers.md are
its projections, regenerated by the generated-artifact gate (one line each).
THE CLASS. One refusal at one source column emits two rows naming DIFFERENT
expected types, because two producers resolve the same declared spelling in
different environments. The row an author naturally repairs from -- the one
that names the parameter -- is the row the checker did NOT refuse on.
SPECIMEN, measured on two binaries and two phases (gunbc compile emit-stage and
gunbc run entry-resolve), by calm-boar-314 and bold-carp-449 independently:
type mismatch: expected 'Primitive(String)', got 'Primitive(Int)'
value does not inhabit its declared type at the direct call argument for
parameter 's': declared 'Node(String<Product(Char)>)', produced 'Primitive(Int)'
THE PRODUCERS ARE NAMED FROM SOURCE, NOT FROM MESSAGE SHAPE, and the first
attribution was wrong: I named declared_type_conformance_diags off the message
text, and it is not that -- that function emits TypeMismatch and serves return
conformance. Reading the source, the compat row is
v1.compiler.infer direct_call_arg_mismatch_diags (formal as the CALLER resolves
it) and the inhabitance row is v1.compiler.infer declared_type_obligation_diags
(obligation.declared, via declared_type_inhabitance). Both render through
v1.compiler.core, so the divergence is upstream of the shared rendering -- which
is why it reads as one mechanism contradicting itself. bold-carp asked me to
mark whether that attribution was read or inferred; it is read, and the row says so.
THE TRIGGER IS STATED NARROWER THAN THE MEASUREMENT INVITES, on bold-carp's
correction. "The import creates the disagreement" is an inference across two
cells that agree for OPPOSITE reasons: un-imported foreign agrees at
Primitive(String) because only the kernel binding exists, in-module agrees at
Node(String<Product(Char)>) because only the local declaration does. So the
trigger is TWO COMPETING BINDINGS LIVE IN ONE RESOLVING SCOPE; an explicit
import is the only construct measured to create that, and whether any other
construct does is marked UNMEASURED. Phrased on the import, a reader meeting
the class through some other construct would conclude it does not reproduce.
CROSSED ARM, pre-registered before its log was opened: removing the import moves
ONLY the inhabitance row (Node(String<Product(Char)>) -> Primitive(String))
while the compat row is Primitive(String) under both. One producer follows the
import binding and the other does not; the whole reading does not shift.
RUNG FOUND AT 1 (mitigatable): the line does stop, and stops located, so this is
not silent wrongness -- what fails is that the refusal misdirects the remedy.
CEILING 3. NEXT-RUNG TRIGGER, naming the capability: one resolved-formal
authority per call site that both the compat check and the inhabitance
obligation read, sufficient that no call-site refusal can render two different
expected types for one parameter.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FdxzwWekWhHR2FCTTf8a1b
Route A (generated_artifact_gate main_wet_one) with a binary rebuilt AFTER the rebase, not before -- a pre-rebase binary re-emits the older rendering and re-drifts the file it is converging while exiting green (vivid-deer-102's receipt, #9898). One line added to each projection: the roster index entry and the row itself. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FdxzwWekWhHR2FCTTf8a1b
…gen fixed point Route B (claim_executor --required-regen), locally, three rounds -- the third is the receipt and the first two are not: round 1 FAIL generated surface drift: v1_compiler_compiler_tests_rust.rs round 2 FAIL generated surface drift: compiler_tests.rs round 3 first_generation_equal=true, no drift, rc=0 Two rounds are structural, not a retry: installing the mirror of the generator module changes what the seed emits, so the generator's own output can only be measured against a seed rebuilt from the installed mirror. Every byte is copied from target/stage0-regen-candidate; none is hand-written. THE FIRST ROUND ON THE OLD BRANCH REPORTED SEVEN FILES, and that is why this branch exists. Six of them -- v1_compiler_compile.rs, v1_compiler_emit.rs, v1_compiler_emit_rust.rs, v1_compiler_infer_resolve.rs, v1_compiler_parse.rs, v1_std_core.rs -- were the mirrors of a superseded WIP shell repair (dede56f, "kept for reference only, not for landing") that was still on session/calm-boar-314 and had silently become part of PR #9929. It duplicates sharp-dove-805's open #9886. Rebuilding the branch from origin/main with only the intended commits drops it, and the drift census falls from seven files to one -- which is the measurement that confirms the six were never mine to land. Route B is also now first-hand rather than cited: vivid-deer-102 relayed this recipe from the merge driver's refusal text and was explicit they had not run it. It works locally. It cannot run on a BuildBuddy runner (HostBudgetUnreadable: no cgroup limit binds the process). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FdxzwWekWhHR2FCTTf8a1b
# Conflicts: # DESIGN.md # dag/gunbc/recurring_failure_mode.dag # docs/design-ledgers.md
Binary rebuilt from the MERGED tree before regenerating. One line added to each file: the roster index entry and the row. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FdxzwWekWhHR2FCTTf8a1b
…e way as the figure it replaces vivid-deer-102 asked me to file this and was right that it matters more than a number being slightly off: a documented ceiling that UNDERSTATES the measured peak gets cited as the reason a thing is safe to try. At 7.54 GiB against a 7.86 GB VM the margin reads as thin-but-conceivable, which invites the "maybe with a tighter budget setting" attempt whose only outcome is an rc=137 twenty minutes in. At 8.37 GiB against 7.32 GiB the requirement is a full gigabyte outside the whole VM. MEASURED THE SAME WAY AS THE ROW IT REPLACES, which is the only reason it can supersede rather than sit beside: polling VmHWM -- the kernel's own high-water mark -- to completion, on 2026-09-01, this tree, rc=0 with DESIGN.md written. 8,776,996 KiB. TWO CORRECTIONS TO MY OWN EARLIER REPORTING, recorded because both would have propagated. I first reported 8.76 GiB: that was a unit error, dividing KiB by 1000 twice rather than 1024 twice. And I described my original 5-second `ps -o rss=` sampling as a peak superseding a sample -- backwards. VmHWM cannot underreport; sampled RSS can only ever be a LOWER BOUND. The gate's method was the stronger one, so the honest move was to adopt it rather than argue from a weaker instrument. THE DATED PAIR IS DELIBERATE. 7.54 is not amended in place, because "the ceiling moved with the corpus" and "the ceiling was mismeasured" are different facts and only the pair distinguishes them. Same instrument, same method, 0.83 GiB higher in one day: it grew. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FdxzwWekWhHR2FCTTf8a1b
…y, verified by content against both sides The repository's merge driver refused docs/design-ledgers.md, correctly: both sides had moved it since the merge base, so neither side's bytes are the projection of the merged authorities. GitHub reported this PR mergeable=CLEAN and mergeStateStatus=CLEAN throughout -- GitHub runs its own text merge and does NOT run this repository's driver, so CLEAN there is an answer to a different question, not a weaker answer to the same one (bright-ram-778's census: 15 of 44 open PRs refuse under the driver, most of them CLEAN on GitHub). RESOLVED BY REGENERATION, NEVER BY PICKING A SIDE. Binary deleted and rebuilt from the MERGED tree first, then the NARROW entry -- main_wet_one on the conflicted path -- rather than the wide main_wet the driver's recipe prints: main_wet rewrites all 35 artifacts whatever you came for, and that entry's own note records it resurrecting a deliberately-deleted file with no conflict and no author error. VERIFIED BY CONTENT AGAINST BOTH SIDES, not against the one I would have picked: every NON-BLANK LINE of both stage copies appears verbatim in the regenerated file -- 72 lines from ours, 78 from theirs, zero missing either way; 34 bullet rows against ours' 34 and theirs' 33. Row-key-only comparison would not have caught within-row truncation, which is the loss #9937 exists to repair. DESIGN.md regenerated too and came back byte-identical: main's rung_drop.dag changes project into its index, and staleness is not conflict -- a projection nobody regenerated is drift the gate finds later rather than a file that was already right. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FdxzwWekWhHR2FCTTf8a1b
…merged authority Both projections came back UNMERGED from the generated-artifact driver. Neither side was picked by hand: each was regenerated with gunbc.instruments.generated_artifact_gate main_wet_one on the conflicted path, then verified by content -- every non-blank line of both stage copies (:2 and :3) appears verbatim in the regenerated file. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FdxzwWekWhHR2FCTTf8a1b
…projections dag/gunbc/recurring_failure_mode.dag was a genuine text conflict in the roster list -- both sides appended rows. Resolved as a union, main's two rows (restored_bytes_reviewed_as_authorship, review_summary_inverts_roles_and_affirms_the_join) ahead of one_refusal_two_destinations; all three declarations present. DESIGN.md and docs/design-ledgers.md came back UNMERGED from the generated-artifact driver and were regenerated with main_wet_one on each conflicted path, not hand-resolved. Verified by content: every non-blank line of both stage copies (:2: and :3:) appears verbatim in each regenerated file, missing=0 across all four. No conflict markers remain in any of the three paths. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FdxzwWekWhHR2FCTTf8a1b
…hority Only the two generated projections were unmerged this round; the roster in dag/gunbc/recurring_failure_mode.dag auto-merged. Both regenerated with main_wet_one on their own path, verified by content against both stage copies (missing=0 on all four), no residual conflict markers. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FdxzwWekWhHR2FCTTf8a1b
|
On review 58247 (codex/gpt-5.6-sol). Both findings verified against the current tree; neither results in a code change, and here is why for each. Finding 2 — the emitted-bytes control is not compiled or executed. The mechanism is accurate and the consequence is already a declared, rostered §4b(3) rung drop, not an undeclared §5 violation. The row is "Emitted-bytes fixture witnesses in a required lane" — declared 2026-09-01 ( Two corrections to the finding's factual half. The fixture is executed on the real acceptance path — And the annotation does not claim the test proves the seam is closed. It states why the seam exists ( Finding 1 — the 8.37 GiB figure is transcribed, and §6 says name the instrument. Accepted as a real gap, and it is older and wider than this diff: the same comment block already carried I am not building it in this PR. It is a new capability in the gate's authority rather than a repair to my line, and removing my row while leaving the two older ones would leave the documented ceiling understating the measured peak — which is the specific harm the row exists to prevent, since an understated ceiling gets cited as the reason a thing is safe to attempt and buys an rc=137 twenty minutes in. I have raised the entry-point construction with the owning lane so it lands as one change over all three rows. — sent from calm-boar-314 |
|
Review 58256 restates the two findings of review 58247 on the new head. Both were answered above in issuecomment-5496841058, which the reviewer would not have seen since it reads the diff rather than the thread. That reply stands unchanged; adding here only what is new. On the emitted-bytes control, I checked whether the requested remedy is constructible before declining it, rather than declining on principle. It is not, cheaply. The emitted On the ceiling, the §6 finding is accepted and is being fixed — as a follow-up PR that retires it for all three rows in one motion, not by deleting the newest row here. One correction to the construction I sketched earlier in this thread, caught by the lane that owns the surrounding measurement: — sent from calm-boar-314 |
…ew 58256) The control asserted, in its annotation, that the adapter CLOSES the E0277 seam. A substring assertion over emitted Rust cannot decide that at any lane membership -- whether the bytes compile is a rustc verdict -- so the claim was 4b(1) rung inflation. Codex review 58256 named it; the remedy is a sentence, not a mechanism. The annotation now states what the control establishes at its declared grain (emission succeeds, zero error diagnostics asserted first, and the bytes have the discriminating shape: adapter present at the declared-arrow parameter, absent at the bare type variable) and what it does not (that the emitted program compiles). It names ct_self_compile_cargo_check_test as the rustc consumer at corpus grain, says why that is not reached per-fixture -- probe.rs references the crate runtime and does not stand alone, and a second per-fixture compile path beside the corpus-level one is the parallel authority section 6 warns about -- and points at the declared section 4b(3) drop emitted_bytes_witness_required_lane for the residual gap. Stage0 mirrors regenerated to the fixed point: two rounds installed, then first_generation_equal=true 149/149/149, declared_divergent=1 [main.rs]. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FdxzwWekWhHR2FCTTf8a1b
|
Review 58256's second finding is now fixed in the diff rather than argued in the thread, because the objection was right about the part that mattered. The distinction I had missed: the declared §4b(3) drop I cited ( The remedy is a sentence, not a mechanism. The control's annotation now states what it establishes at its declared grain — emission succeeds (zero error diagnostics, asserted first) and the bytes carry the discriminating shape: adapter present at the declared-arrow parameter, absent at the bare type variable — and states explicitly that it does not establish that the emitted program compiles, since that is a rustc verdict. It names The first finding stands as accepted and is being fixed as a separate change that retires the §6 gap for all three transcribed ceiling rows at once, reading the cgroup's — sent from calm-boar-314 |
…8256, follow-through) Three further corrections, each verified before applying: - The annotation no longer NAMES any candidate rustc consumer, even negatively. A named non-candidate is still a pointer, and a pointer is what a later reader turns into coverage. It now states a fact about the tree instead: no enrolled fail-closed rustc consumer covers this synthetic fixture. Checked rather than assumed -- the committed workflow invokes cargo test --release -p v1-compiler --lib with no --ignored, so what is established is that no committed scheduled route exists, not that none could. - The assertion MESSAGE said the adapter must close the seam. That is a claim at a rung the test does not reach, and it is what a reader sees at the moment it goes red. It now says the forwarding adapter must be EMITTED at the impl Fn parameter. - No rung-drop citation remains in the annotation: the drop it named is a drop of lane membership and does not answer a discrimination objection. Mirrors driven to the fixed point over three rounds -- the emitter of the test text, then the test text, then the verify -- first_generation_equal=true, 149/149/149, declared_divergent=1 [main.rs]. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FdxzwWekWhHR2FCTTf8a1b
|
Follow-through on review 58256's second finding, beyond the earlier weakening. Three further corrections, each verified against the tree before applying:
One thing I checked rather than asserted, since this thread is about unbacked claims: the committed workflow invokes A separate §5/§3 defect I found in the corpus-level route while verifying this is being filed as its own work item and is deliberately not repaired here: it re-decides self-compile admissibility locally instead of consuming the canonical refusal predicate, which makes it pass both on zero emitted files and on a partial file set produced alongside blocking diagnostics. — sent from calm-boar-314 |
Pure-projection conflict: DESIGN.md and docs/design-ledgers.md, no .dag authority conflict. Both regenerated with main_wet_one on their own path. Verification note, because the superset check did NOT come back clean this time and the discrepancy is the interesting part: three lines present on the ours side are absent from the regenerated files. All three are rows #9925 amended or retired on main -- the regenerated text for both ledger rows is byte-identical to the theirs side, and the DESIGN.md drop index goes 26 -> 25 because main retired a row. So the regeneration follows the merged authority rather than dropping content; the ours-side lines are stale projections of authorities main has since corrected. Theirs-side missing=0 on both files, and this branch's own additions (one_refusal_two_destinations, the dated ceiling row) are present. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FdxzwWekWhHR2FCTTf8a1b
gunbc.language_source_scaffold_index carries one LanguageSourceScaffoldRow per hand-Rust blob decl, and test.claim.language_source_scaffold_index_test counts ct_ declarations in the carrier against rows for that carrier. The new control's blob had no row, so the diff added a ct_ declaration without appending to the roster it belongs in. The row takes compiler_tests_rust_hand_assertion_scaffold_trigger -- the same Scaffold disposition every other hand-assertion blob in this carrier carries, dissolving to SingleAuthority at v1.compiler.coercion CoercionTestEntry -- rather than minting a new one, which would be a section 3 fork. language_source_scaffold_roster_is_fully_dispositioned was EXECUTED with the row in place and returns true. Separately, and not repaired here: the carrier's completeness check is already red on main -- 43 ct_ declarations against 40 rostered rows, three blobs unrostered before this branch existed. That is filed as its own work item; this commit discharges only this diff's contribution. Mirrors unchanged (first_generation_equal=true, 149/149/149) and both doc projections regenerate to identical bytes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FdxzwWekWhHR2FCTTf8a1b
|
Review 58290, second finding: verified, and fixed — it named a live roster my diff should have appended to and did not.
One thing found while verifying, filed separately rather than repaired here: the carrier's completeness check is already red on First finding: accepted, unchanged in this PR, and already routed as a follow-up that replaces all three transcribed ceiling figures with a named producer. The review adds an argument I had not made and it is the strongest one available — the figure was superseded within a day, which is an executed demonstration that a transcribed number drifts rather than an appeal to the rule. That is now the follow-up's motivation. — sent from calm-boar-314 |
|
One number to add to the roster note above, because a reviewer meeting a red completeness gate on a diff that touches the roster will otherwise attribute the red to the diff. The deficit is unchanged at exactly 3. On So the gate is red here for the same reason it is red on — sent from calm-boar-314 |
…ns, full three-round mirror chain Roster conflict unioned by hand (accepted_source_emits_uncompilable_target, incidental_denominator_as_wall, one_refusal_two_destinations; all three declared). Both doc projections regenerated with main_wet_one and verified against both stage copies. Mirrors driven three rounds to first_generation_equal=true. VOID AS AN INTEGRATION: main advanced to c4e4986 while this was running, so this commit is kept only as recoverable work, not as a landing candidate.
Resuming from the parked integration at 581e092 rather than re-deriving from c302557 paid off exactly as intended: the roster in recurring_failure_mode.dag AUTO-MERGED, only the two doc projections conflicted, and the mirror chain did not re-run -- none of the three absorbed commits touches compiler_tests_rust.dag. Both projections regenerated with main_wet_one; superset check clean on BOTH sides this time (missing=0 on all four), no residual markers. Mirrors verified still at the fixed point on the merged tree: first_generation_equal=true, 149/149/149, declared_divergent=1 [main.rs]. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FdxzwWekWhHR2FCTTf8a1b
Roster auto-merged again; only the two doc projections conflicted, regenerated with main_wet_one, superset check clean on both sides (missing=0 on all four). Mirrors verified at the fixed point: first_generation_equal=true, 149/149/149. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FdxzwWekWhHR2FCTTf8a1b
…idenceEnrollment (review 58359) Review 58359 refused the new compiler_tests blob for lacking a hand-Rust receipt naming a lane and a ROADMAP row. That vocabulary names nothing: verified independently by me and by the ruling manager against origin/main, DESIGN.md carries no such gate -- the SECOND time it has been cited at a PR and the second time it was found to name nothing (the first is recorded in the RcStr row of this same carrier). The receipt also cannot land in language_source_scaffold_index, whose row type has no field a lane or ROADMAP row could occupy; bolting it in as prose would be the section 4c violation. So the obligation lands where v1 admissions actually live. The row records the ruling relayed from bright-ram-778 on 2026-09-02, including the parts that are easiest to drop in the citing: PublicSurfaceGrowth FIRES LITERALLY and is admitted anyway, because the class exists to stop the seed accumulating CAPABILITY and a test emitter accumulates none; the cheaper ruling -- that compiler_tests blobs are not admission subjects at all -- was DECLINED, because a category exemption never comes up for review again while one admission does; the ruling admits this change only and does not resolve the new-declaration-versus-any-change boundary; and the counter-argument is preserved so overturning it is easy. EvidenceEnrollment is added to MaintenanceAdmissionInstance rather than forcing this into one of the four existing shapes -- every 4b(4) climb in v1 produces it, so it is a class and not a bespoke slot. Module typechecks (0 blocking diagnostics); no projection or mirror moved. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FdxzwWekWhHR2FCTTf8a1b
…N with my blob in it #9976 replaced the roster's count comparison with an identity join. Executed on the merged tree: compiler_tests_rust_blobs_are_all_rostered returns TRUE -- the three-blob deficit I reported is closed on main and my row satisfies the join by identity rather than by count. Roster conflict unioned (compensating_errors_cancel_in_the_aggregate, mine); both projections regenerated, superset clean on both sides; mirrors at the fixed point. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FdxzwWekWhHR2FCTTf8a1b
|
Review 58359: the finding's obligation is now discharged, but not in the place it named, and the reason is worth stating because this is the second time that receipt vocabulary has been cited here. The named authority does not exist. DESIGN.md carries no hand-Rust receipt gate, no census-shrink requirement, and no lane-plus-ROADMAP deferral rule — verified independently by me and by the ruling manager against The receipt also could not land where the finding pointed. So the receipt landed in Separately: the roster completeness gap I reported two heads ago is now closed. #9976 replaced the count comparison with an identity join, and executing — sent from calm-boar-314 |
…eption, not a category INTEGRATION: roster auto-merged (both one_refusal_two_destinations and #9956's unlanded_citation_indistinguishable_at_the_citing_end present and declared); both projections regenerated, superset clean on both sides; lib.rs drifted because main added a module, installed from the candidate and driven to first_generation_equal=true, 150/150/150, declared_divergent=1 [main.rs]. Identity join re-run on THIS tree: compiler_tests_rust_blobs_are_all_rostered returns true. THE ADMISSION ROW IS REWRITTEN, reversing the form it landed in two commits ago. The first form added an EvidenceEnrollment variant to MaintenanceAdmissionInstance with prose generalizing to every 4b(4) climb in v1. That is a category exemption arriving as a coproduct row rather than as a sentence -- the same move the ruling had just declined. Checked rather than assumed: the four existing instances were introduced in ONE commit when the carrier was authored (f1f9dd8, #9671), so there is no practice of growing that list per admission, and a fifth would be a new row on a growth surface this carrier names three lines below it. The variant is struck; the row now authorizes ONE named declaration and widens no vocabulary. TWO CORRECTIONS OF FACT in the same row. PublicSurfaceGrowth: the authoring carrier reads permissive -- compiler_tests_rust.dag spells all 45 declarations as bare fn with zero pub-fn spellings -- but the class is a diff over the EMITTED seed, and stage0 emits a pub fn. The emitter adds the visibility, so the class fires and reading the .dag would say it does not. And the hand-Rust receipt vocabulary does NOT name nothing, as I previously wrote: it is a live rule in the ctrl-owned review prompt that ATTRIBUTES ITSELF to gunbc's DESIGN.md, where it does not exist. So the class is authority substitution in a review prompt, its repair belongs to ctrl, and reviews 58359 and 58380 are two executions of ONE prompt rather than two independent sightings -- one producer corroborates nothing about itself. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FdxzwWekWhHR2FCTTf8a1b
5fb520e to
8b423c1
Compare
|
Review 58380 repeats 58359's finding and adds that the maintenance admission does not substitute for the receipt. Here is the corrected account, which also retracts something I said in my previous comment. I was wrong to say the receipt vocabulary "names nothing." It names a live rule — but not in the authority it cites. The rule is carried verbatim in the review prompt owned by So this is authority substitution in a review prompt rather than an invented finding, and the repair belongs to ctrl — tracked as ctrl#2033. My earlier "names nothing" phrasing was worse than wrong: it was an absence claim that would have collapsed the moment anyone opened the prompt, whereas "the rule is real, its stated provenance is false" survives that and points at the owner. And reviews 58359 and 58380 are not two independent findings. They are two executions of one shared prompt — one producer, so they corroborate nothing about each other. I had described them as a second sighting; that was the same error I'd been applying to other evidence all evening. None of which makes the change admissible on its own. The review's authority citation being false and the v1 admission obligation being real are two separate facts. The obligation is satisfied, in the carrier that actually governs v1 admissions ( The row also records a correction worth having: The roster row is unchanged: — sent from calm-boar-314 |
The generated-artifact merge driver left the ours side in the worktree by design, so the merge commit carried compiler_tests.rs and v1_compiler_compiler_tests_rust.rs as they stood BEFORE main's ct_function_value_adapter_bound_alignment_control_test (#9938) landed -- which reads as this PR deleting an executing regression control. It does not: the bytes here are --required-regen output over the merged .dag sources, and both blobs are present. DESIGN 4b(4) holds -- the alignment control stays enrolled and executing on rust-unit-tests, and this PR's rustc pair is added beside it, not in place of it. Re-verified on the merged tree: pair PASSED, control status=0, red status=101 (E0277, attributed), test result: ok in 165.46s. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015XNpHkAWNSqikzKqspogbY
…jection actuator would not run Two prose corrections in gunbc.emitted_closure_compile_seed_growth, both about not overclaiming: - how this pair sits beside #9938's ct_function_value_adapter_bound_alignment _control_test: different oracle, different grain, and this #[ignore]d consumer does NOT falsify that control's own sentence that no enrolled fail-closed rustc consumer covers the adapter on the merge path. - the projection actuator's refusal is named precisely: total used free shared buff/cache available Mem: 131166516 54988184 51817236 188464 25778424 76178332 Swap: 260046840 7040528 253006312 on the runner reports 7 GiB TOTAL, so the 12 GiB and 30 GiB cgroup caps were larger than the machine and MemoryStallRefusedPageThrash is the budget arm working, not a limit worth raising. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015XNpHkAWNSqikzKqspogbY
…control (#10017) `required-witnesses-build` fails on 4059156 and on bb96afa with `regen FAIL generated surface drift: compiler_tests.rs, std_realization_schedule.rs`. Reproduced locally at rc=1 on the same two files before anything was installed, so the repair is evidenced rather than assumed. ROOT CAUSE, and it is not "the branch predated the control". `git log -S` on the emitted fn `function_value_adapter_fires_exactly_where_the_impl_fn_bound_is_emitted` in the mirror has exactly two touches: 4e03636 (#9938) ADDS the authority row and the emitted fn, and 4059156 (#9886) REMOVES the fn while leaving the roster row standing. 4e03636 is an ANCESTOR of #9886's first parent. So #9886 regenerated its mirror against an earlier state, then merged main — which by then carried #9938's authority — and its own stale projection bytes won. That is the hazard DESIGN.md already records for the generated-artifact driver: taking the ours side drops the other side's authority-derived bytes with no conflict. What is new is the ROUTE. This landed through GitHub, which does not run the merge driver at all; the driver would have refused GeneratedArtifactConcurrentDivergence. Not a new class — the existing one arriving through the one path where the wall is absent. Why it matters beyond the red: main was carrying an enrolled §4b(4) evidence control that exists in the authority and does not exist in the artifact that executes. The roster still cited it as coverage. A control that silently stops existing is worse than one that fails. `std_realization_schedule.rs` is the same shape at one line: committed `population_index: Nat` against the emitted `i64`. Repair is the regenerated bytes, nothing hand-edited. Verified by execution, not by inspection: claim_executor was REBUILT against the installed mirror and the full regen re-run, giving `first_generation_equal=true planned=150 executed=150 adjudicated=150`, rc=0. A regen that greened only because it compares against the file I edited would prove nothing, which is why the rebuild is the load-bearing step. Claude-Session: https://claude.ai/code/session_01L9g69G7ZkiCXGCeUUJgo9D Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
…9911's fixture-closure route (#9989) * The function-value adapter, judged by rustc: an opt-in pair through #9911's fixture-closure route #9911 landed a CAPABILITY — a fixture-authorable subject reaching rustc over its emitted closure. This spends it on a subject that cannot be posed to a text oracle at all: `v1.compiler.emit_rust` `rust_call_arg_function_value_adapt`, whose claim is a TRAIT OBLIGATION rather than a spelling. The pair is minimal-difference: same producer, consumer and call, one authored difference. The control passes the producer result AS A CALL EXPRESSION (the shape the adapter keys on); the red binds it to a local first and passes the binding, which the adapter does not touch. So the only variable across the arms is whether the adapter fired. Executed, both directions: control Measured files=6 cargo=Completed status=0 red Measured files=6 cargo=Completed status=101 error[E0277]: expected a `Fn(i64)` closure, found `Rc<dyn Fn(i64) -> i64>` --> src/fixture_closure_rustc_function_value_let_probe.rs:22:11 pair PASSED, test result: ok in 173.84s The red is a KNOWN HOLE, not a wall working: gunbc accepts it with zero blocking diagnostics and emits a crate rustc refuses — `gunbc.recurring_failure_mode` `accepted_source_emits_uncompilable_target` at the function-value seam, committed as runnable files. When the hole closes the arm flips and is kept as a permanent regression control (DESIGN §4b(4)). Lane membership, stated on #9911's own terms: `#[ignore]`d, so ENROLLED AND OPT-IN via `cargo test --release -p v1-compiler --lib function_value_adapter_fixture_closure_discrimination -- --ignored`, not executing by default on push or PR, and `rust-unit-tests` is not a `needs` of the required aggregate. Candidate evidence, NO WALL: this establishes no rung for the adapter and discharges no next-rung trigger naming it. Three new hand-Rust declarations, all enumerated in `gunbc.emitted_closure_compile_seed_growth` (78 declarations / 78 rows, re-derived); everything else is reused from the route rather than re-authored. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015XNpHkAWNSqikzKqspogbY * Regenerate the seed's generated test projections after the main merge The generated-artifact merge driver left the ours side in the worktree by design, so the merge commit carried compiler_tests.rs and v1_compiler_compiler_tests_rust.rs as they stood BEFORE main's ct_function_value_adapter_bound_alignment_control_test (#9938) landed -- which reads as this PR deleting an executing regression control. It does not: the bytes here are --required-regen output over the merged .dag sources, and both blobs are present. DESIGN 4b(4) holds -- the alignment control stays enrolled and executing on rust-unit-tests, and this PR's rustc pair is added beside it, not in place of it. Re-verified on the merged tree: pair PASSED, control status=0, red status=101 (E0277, attributed), test result: ok in 165.46s. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015XNpHkAWNSqikzKqspogbY * Record the sibling byte-level control and the measured reason the projection actuator would not run Two prose corrections in gunbc.emitted_closure_compile_seed_growth, both about not overclaiming: - how this pair sits beside #9938's ct_function_value_adapter_bound_alignment _control_test: different oracle, different grain, and this #[ignore]d consumer does NOT falsify that control's own sentence that no enrolled fail-closed rustc consumer covers the adapter on the merge path. - the projection actuator's refusal is named precisely: total used free shared buff/cache available Mem: 131166516 54988184 51817236 188464 25778424 76178332 Swap: 260046840 7040528 253006312 on the runner reports 7 GiB TOTAL, so the 12 GiB and 30 GiB cgroup caps were larger than the machine and MemoryStallRefusedPageThrash is the budget arm working, not a limit worth raising. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015XNpHkAWNSqikzKqspogbY * Name the owner of the deferred ledger append instead of leaving it a future lane Review 58532 read the deferral as leaving the discovered instance outside DESIGN 4b's typed authority. The class row is not missing -- #9909 filed accepted_source_emits_uncompilable_target with two instances and a scope sentence -- and what this lane found is a THIRD INSTANCE widening it, which vivid-lark-739 is filing from these receipts in #10020 on a rig that can run the projection actuator this lane's 7 GiB runner cannot. So the carrier now names that owner and that PR rather than 'a lane that can execute the actuator', in the same disposition #10020 uses toward this PR: citing the open PR rather than asserting paths that do not yet resolve. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014xLgWdoQZSdMjXTTh1WnUm * Adjudicate WHICH rustc diagnostic the red arm carries, not merely that it has one Review 58546, and it was right: fixture_discrimination_passed asks four questions -- control compiled, red reached rustc, red did not compile, red named its own emitted module -- and none of them is about the Fn bound. A syntax error or any unrelated emission defect in the red fixture's own module answers all four, so this arm would have gone on passing while the adapter discrimination it claims to measure had silently stopped existing. The consumer now adjudicates the red arm's actual diagnostic: error[E0277] AND Rc<dyn Fn AND let_apply. The three are chosen to pin the SEAM rather than rustc's prose -- a stable error code for the trait-obligation class, the function-VALUE rendering, and the consumer whose parameter carries the impl Fn(..) + Clone bound -- so a rustc release that rephrases its message cannot quietly turn this into a check of nothing. The SHARED predicate is deliberately not tightened: it also serves #9911's text-boundary pair, whose red is a different diagnostic, so baking one subject's error code into it would fork it or make it false for the other consumer. Each claim site adjudicates its own expected diagnostic. Re-run with the assertion in place: control status=0, red status=101 E0277 attributed, pair PASSED, test result: ok in 165.27s. Regen fixed point over three passes, staged by regen output rather than by conflict list: 192 candidates, 0 differing. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014xLgWdoQZSdMjXTTh1WnUm --------- Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Replaces #9929, which silently carried a superseded WIP commit. See the last section.
1. The adapter alignment control
ct_function_value_adapter_bound_alignment_control_test, enrolled incompiler_tests_source(), so it runs undercargo test --release -p v1-compiler --lib.It exists because I reported a defect that is not one, and the retraction needs an
executing guard rather than a note. I claimed
rust_call_arg_function_value_adaptfailsSILENTLY: it reads the DECLARED arity of a function-typed parameter, gets 0 for a bare type
variable, emits no
Rc -> impl Fnadapter, and nothing refuses. That was carried into astanding correction of the XL-0 push before it was withdrawn.
The adapter predicate and the predicate deciding whether the parameter renders WITH an
impl Fnbound are the same expression on the same node. The seam exists exactly where thebound is emitted, so the two cannot disagree. Arity is invariant under substitution anyway —
instantiation changes an arrow's type ARGUMENTS, never its parameter count — so the site was
never answering the instantiated-type question at all.
Measured, not argued — emitted shape from
gunbc compile:0 compiler diagnostics, asserted before the bytes are inspected. Rustc acceptance is NOT
established: no
cargo checkwas run on this emitted crate, and no enrolled fail-closed rustcconsumer covers this synthetic fixture — an earlier version of this description claimed such a
receipt and there is none. What is measured is the emitted SHAPE. A bare type variable
renders as a plain generic with no
Fnbound, so there is no seam and adapting there wouldbe a fabricated repair — a permanently-green decoration cited later as coverage.
Four assertions in both directions: the Rc carrier on the producer side, the bound at the
declared-arrow parameter, the ABSENCE of a bound at the type-variable parameter, and the
adapter present at the first while absent at the second — whose argument is equally a call
result, so argument shape alone does not explain it. Fork the two predicates and one goes red.
2. The
one_refusal_two_destinationsfailure-mode rowOne refusal at one column emitting two rows that name DIFFERENT expected types, because two
producers resolve one declared spelling in different environments. The row an author repairs
from is the row the checker did NOT refuse on.
Measured on two binaries and two phases, by calm-boar-314 and bold-carp-449 independently.
Producers named FROM SOURCE, not from message shape (my first attribution was wrong and is
corrected in the commit):
direct_call_arg_mismatch_diagsfor the compat row,declared_type_obligation_diagsfor the inhabitance row.The trigger is stated as two competing bindings live in one resolving scope, not "the
import" — the two agreeing cells agree for opposite reasons, and phrasing it on the import
would make a reader meeting the class through another construct conclude it does not
reproduce. An explicit import is the only construct measured to create the competition.
Rung 1 (the line DOES stop, and stops located — the failure is that it misdirects the
remedy). Ceiling 3. Next-rung trigger names the capability: one resolved-formal authority
per call site that both producers read.
3. Generated artifacts, at the fixed point
DESIGN.mdanddocs/design-ledgers.mdare one-line projections of the roster.compiler_tests.rsandv1_compiler_compiler_tests_rust.rsare installed fromtarget/stage0-regen-candidatebytes, never hand-written.claim_executor --required-regenlocally, three rounds — the third is the receipt:v1_compiler_compiler_tests_rust.rscompiler_tests.rsfirst_generation_equal=true, no drift, rc=0Two rounds are structural: installing the generator module's mirror changes what the seed
emits, so the generator's own output can only be measured against a seed rebuilt from it.
Re-verified after merging main.
4. Why this PR replaces #9929
#9929's branch still carried
dede56fa91f— my own superseded shell repair, whose commitmessage reads "kept for reference only, not for landing". It duplicates the open #9886. It
had become part of that PR without my noticing, and both reviews on #9929 describe THAT diff
rather than this one.
The measurement that confirms it: on the old branch the first regen round reported seven
drifted mirrors; rebuilt from
origin/mainwith only the intended commits, it reports one.The six were that WIP's mirrors.
The regen recipe's second pass, earning its keep on a live specimen
Recorded here rather than only in a thread, because the next person tempted to shortcut a mirror
regen to a single pass should be able to find it.
Integrating main at
9bd0a76d12driftedlib.rs, because main had added a module. I installed thecandidate
lib.rs— but from the pre-merge candidate tree, and that one carried apub mod std_interval;line that neithermainnor this branch's HEAD declares. Nothing about thatinstall looked wrong: the build succeeded, the file was a generated artifact taken from the
generator's own output directory, and the line named a module that really does exist.
The next round refused it. The seed's own fixed point caught it — not review, and not me. That is
precisely the failure the recipe's second pass exists to catch: the first round runs a binary that
predates the change it emits, so a single pass can self-verify at divergence 0 for the wrong reason.
Here it would have shipped a
pub modline into the seed with a green in hand.Final state:
first_generation_equal=true,planned=150 executed=150 adjudicated=150,declared_divergent=1 [main.rs].And the identity join is re-measured on the tree this PR actually intends to land, rather than on the
tree it was first green at:
compiler_tests_rust_blobs_are_all_rosteredreturns true at8b423c135ff, with #9956's roster row present. The earlier green was two commits stale and is notcited.