Conversation
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.
Summary
Two harness verifiers were reporting results nobody computed: Layer 3's verdict had no reader since
596d3e1, and the gate check compared each spec against a decision the harness itself had written moments earlier. Both now answer from the evidence they hold, which turned 282 silently-wrong results into real verdicts.Related Issues
Refs
.audit/60-synthesis/REMEDIATION.mdphase 6Changes Made
gate:is optional, and the fabricated gate decision is goneTesting
make test-all: passesBreaking Changes
FdrVerdictfields areDecision.passedandcompleteare gone, useoutcome()FdrConfig.expect_failureis gone. Use.with_expect(Expect::Violation(layer))gate:at a site that takes no gate now fails. Remove the declarationProcessis#[non_exhaustive]. Construct throughProcess::builderScenarioResultfields are private. Usetrace(),verdict(),passed()Note
Medium Risk
Changes core test verdict semantics and breaks callers that relied on implicit
gate: Okor old FDR/ScenarioResult APIs; incorrect specs may now fail where they previously passed silently.Overview
Gate expectations are no longer fabricated or mandatory. The scenario harness stops writing
TransitStatus::Okinto every consumed trace, andtb_assert_spec!treatsgate:as optional—omitting it means the spec requires no gate decision. Specs that still declaregate: Okare checked against the trace’s real decision; a gateless run now fails Layer 1 assertion verification instead of passing because the harness lied.Trace semantics align with “no gate taken.”
ConsumedTrace::execution_mode()treats missing gate decisions as Accept, not Error, and FDR trace helpers treat no decision as valid/terminal where appropriate instead of requiring a gate for every run.Mechanical fallout:
AssertSpecBuilder::gate_decisionbecomesexpected_gate(Option<TransitStatus>), macro plumbing passesOption::NoneorSome(status)from optionalgate:blocks, and hundreds of tests/fuzz specs drop redundantgate: Ok. Newtests/gatescenarios lock in gateless acceptance vs.gate: Okrejection.Reviewed by Cursor Bugbot for commit 4382258. Bugbot is set up for automated code reviews on this repo. Configure here.