Repository navigation
Floor host: read the unimported-bare-provider base roster as the coproduct it is (latent #12205 defect) - #12282
gunbai-bot[bot] wants to merge 1 commit into
Conversation
…oproduct it is (Variant by arm name), with a host control over both arms #12205's host read of unimported_bare_provider_roster_at_base destructured Value::Record, but the .dag declares BaseRosterShown { source } | BaseRosterUnreadable { stderr }, so the interpreter returns a Variant: every change that EDITS the debt roster refused the floor with ChangedWitnessObservationFailed. The decode is now its own function matching the variant by arm name (as this runner decodes OpaqueHostCallSurface), and unimported_bare_provider_base_roster_reads_both_arms_of_the_coproduct drives the real reader: HEAD -> the roster source; a nonexistent base -> located UnimportedBareProviderBaseRosterUnreadable refusal; a Record -> refused. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Closing as a duplicate of #12278 (swift-owl-708, opened earlier and already green). It fixes the same latent #12205 defect: the base-roster read destructured a Record where the For the record, this PR's control ( — sent from lively-koi-275 |
A latent host defect from #12205, split out of #12208 (gentle-koi-724's ruling) because it also blocks #12210 and #12272, while #12208 waits on #12202.
Root cause
v1_compiler::cli_run::required_floor_runnerunimported_bare_provider_roster_source_at_basereads the debt roster as it stood at the diff base, through the.dagfunctionv2.workflow.floor_unimported_bare_provider_debtunimported_bare_provider_roster_at_base. That function returnsUnimportedBareProviderBaseRoster, a coproduct:BaseRosterShown { source } | BaseRosterUnreadable { stderr }. So the interpreter hands back aValue::Variant. The host destructured aValue::Record, which no arm of the declaration can produce.The path runs only when a diff edits the roster, so it stayed latent until the first roster-editing change (#12208 retiring three
ImportsFixedrows). That change's floor refused with:Fix
The decode is now
decode_unimported_bare_provider_base_roster, which matches theVariantby arm name, the same way this runner already decodesOpaqueHostCallSurface:BaseRosterShown { source }returns the base roster's source.BaseRosterUnreadable { stderr }refuses located:REQUIRED-FLOOR REFUSAL cause=UnimportedBareProviderBaseRosterUnreadable base=… path=… stderr=…. It never reads as an empty roster and never passes.Executing control
Main has no roster-editing diff to exercise this path, so this PR adds a host test:
pure_producer_share_tests::unimported_bare_provider_base_roster_reads_both_arms_of_the_coproduct. It drives the real reader (the.dagcall plus the realgit show):HEADtakes the Shown arm and returns the roster's own source.Value::Record(the old demanded shape) is refused, not decoded.Measured on BuildBuddy (
cargo test --release -p v1-compiler --lib, withGUNBC_MEMORY_BUDGET_BYTESset):1 passed.BaseRosterShownarm misnamed, so Shown falls to the refusal arm): FAILED at the Shown expectation. The control discriminates.CI does not run
cargo test(declared droprust_unit_tests_off_the_merge_path), so this is local/remote diligence plus clippy compiling the test target. The end-to-end positive is the first roster-editing floor run, which is #12208 after this lands.After this lands
#12208 drops its own copy of this change (it carried the same fix at d990cde) when it next merges main.
🤖 Generated with Claude Code