Repository navigation
Coercion fork fixture follows #12227: Bool->Int is now refused by both algebras - #12352
Conversation
…domain Deletes the Bool->Int admission row from dag_cast_rules (operator coercion ruling, DESIGN section 4, 2026-09-26). The explicit-cast domain was derived from the same rows, and validate_cast abstains outside the domain, so the domain is now declared (dag_cast_domain_types) with Bool kept in it: `true as Int` refuses rather than going unchecked. Per-target CastSyntax realization rows are untouched. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…regen candidate) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Stage0 mirror — sent from silent-swift-419 |
…iew 71551) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Addressed review 71551 in 4a9523e. Both findings were confirmed against the tree.
— sent from silent-swift-419 |
…419-bool-int # Conflicts: # dag/gunbc/recurring_failure_mode/the_checker_admits_a_cast_the_evaluator_refuses.dag # dag/std/coercion.dag # src/v1/stage0/src/std_coercion.rs # src/v1/stage0/src/v1_interpreter.rs
…ame-keyed roster Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
briansrls
left a comment
There was a problem hiding this comment.
HOLD at f9d82dc875633efc1ff106e850693db8769f3b4b.
The mechanical change is right: main's dag_cast_rules now carries Bool -> Bool and no Bool -> Int, the fixture correctly changes bool_to_int.expected_name_keyed to CrossingRefused, all four matrix cells remain inhabited, and the differing-row count is now 3/7.
Two truth-maintenance gaps remain:
-
dag/gunbc/plans/dag_v2_defork_audit.dag§2B still publishes the current executed result as Admitted name-only:Int→Float,Bool→Int,Int→Nat, and its generated projectiondocs/plans/dag-v2-defork-audit.mdrepeats it. This PR updates the fixture, the representation-boundary row and the RFM specimen, but leaves the plan authority and projection contradicting them. Update both—ideally preserving the #12055 historical reading while stating that #12227 withdrew the Bool→Int cell. -
src/v2/test/claim/coercion/two_algebra_fork_test.dagstill says a row can report “BOTH AGREE AND BOTH ARE WRONG.” The updatedcoercions_boundarycorrectly says the opposite: each expected column restates its own authority, so without an independent semantic oracle the agree-and-both-semantically-wrong arm is unreportable. Rewrite the fixture header to distinguish “both implementations deviate from their own declared contracts” from “both authorities agree but the shared semantic answer is wrong.”
Required floor, clippy, compiler and the aggregate witnesses job are green at this head; emit-build was still running when reviewed. These findings are about the PR's stated truth-only completeness, not runtime behavior.
…arm (GitHub review 5327152632) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Addressed GitHub review 5327152632 in 43c5fc7. Both points were confirmed.
— sent from silent-swift-419 |
briansrls
left a comment
There was a problem hiding this comment.
APPROVE at exact head 43c5fc7a4d67c4656b15ce6e7588b2d07a810daa.
Both findings from review 5327152632 are resolved:
gunbc.plans.dag_v2_defork_auditand its generated Markdown projection now preserve the historical #12055 reading while recording that #12227 withdrewBool→Int; they also correctly boundString→Stringto the raw helper roster rather than claiming a production identity refusal.v2.test.claim.coercion.two_algebra_forkno longer claims it can report “both agree and both are semantically wrong.” It now states the exact limit: each expected column is transcribed from its own authority, so the fixture can catch deviation from those contracts but has no independent semantic oracle.
The remaining fixture update is coherent: Bool→Int stays enrolled as a permanent withdrawal control, both algebras now expect refusal, all four matrix cells remain inhabited, and the differing population is correctly 3/7. Compiler, clippy and emit-build are green at this head; floor was still running when this approval was submitted.
Repurposed. This PR originally deleted the Bool→Int cast row itself. #12227 landed the same cut first (a
Bool → Boolidentity row keeps Bool in the explicit-cast domain, sovalidate_castrefusesb as Intinstead of abstaining). The merge of main therefore takes main's version ofstd.coercion, the stage0 mirror, the interpreter comment and the failure-mode row in full. My declared-domain variant is dropped, and nothing of it remains in the diff.What remains is the fallout #12227 left behind:
v2.test.claim.coercion.two_algebra_forkstill expecteddag_can_cast(Bool, Int)to be admitted, soname_keyed_coercion_matches_the_declared_cast_rosters_holdsasserted a row that no longer exists.bool_to_intnow expectsCrossingRefusedon both sides. It stays in the fixture as the control that the withdrawal holds. The population comment and the three-of-seven count are updated to match.coercions_boundaryevidence and thetwo_admission_authorities_keyed_on_different_relationsspecimen (both from Coercion ledgers: truth-only repair after #12055; DESIGN §4 records the coercion ruling #12332 / Two cheap witnesses: the coercion two-algebra fork is a shared-no-key fork, and the bindings selection fold is a negative #12055) listed Bool→Int as admitted name-only. They now record it as withdrawn by Int->Nat refinement PR1: subtraction leaves Nat, count/length return Nat, Bool as Int refused by the checker #12227.No behaviour change.
🤖 Generated with Claude Code