fix(spike): the first flight must opt out of hold admission, not inherit it - #351
Merged
Merged
Conversation
…rit it The non-sweep first flight cannot succeed with shipped defaults. Program.cs composes Nexo:Autonomy with Enabled, UseSandboxSessions, SessionImage and the rest, but never sets HoldAdmission, so the fail-closed default (true) applies: the loop correctly returns CertifiedButHeld, and the flight then fails the run at Program.cs:244 for not being AdmittedAndSwapped. outcome : CertifiedButHeld (2.2s) explanation: certified; the operator holds admission (loop is in hold mode) certificate: signed=True escape_rate=0 FIRST FLIGHT: FAILED - expected AdmittedAndSwapped The product is right and the spike is wrong. The flight asserts the swap and then proves the swapped generation serves, so a swap is its whole purpose; it was left behind when the default became fail-closed. SweepMode already sets the flag explicitly (to true -- a campaign certifies without admitting), which is why the campaign path kept working and this one rotted unnoticed. Found by UAT tier 3. It matters because samples/autonomy-objectives/README.md calls this script "the shortest working path", so a tester arriving from TesterQuickstart section 6 runs it and sees FAILED printed under a certificate that is signed with escape_rate=0 -- the loop behaving exactly as documented. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Contributor
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
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 freeto 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.
Found by UAT tier 3, running the autonomy lane the way a tester reaches it:
TesterQuickstartsection 6 →samples/autonomy-objectives/README.md→ the first-flight script it calls "the shortest working path".The defect
The non-sweep first flight cannot succeed with shipped defaults:
Program.cscomposesNexo:AutonomywithEnabled,UseSandboxSessions,SessionImage,CadenceFloorSecondsandWatchMinInvocations— but neverHoldAdmission. The fail-closed default (true, NexoAutonomyOptions.cs:64) therefore applies, the loop correctly returnsCertifiedButHeld, and Program.cs:244 fails the run for not beingAdmittedAndSwapped.The product is right; the spike is wrong. The flight asserts the swap and then goes on to prove the swapped generation serves, so flying the whole loop is its entire purpose. It was left behind when the default became fail-closed.
SweepMode.cs:55sets the flag explicitly — totrue, since a campaign certifies without admitting — which is why the campaign path kept working and this one rotted unnoticed.The fix
Set
HoldAdmission=falseexplicitly in the flight's own configuration, with a comment saying what the shipped default is and why this one place is allowed to differ. The alternative — softening the assertion to acceptCertifiedButHeld— would leave the flight unable to reach the swap-and-serve half of what it exists to demonstrate.Verification
Same script, same
-Drymode, only the flag changed.Before (commit
f6459d72, reproduced twice):After:
Not changed
The shipped default stays
HoldAdmission=true. Nothing about the fail-closed posture moves; this is a spike opting out in the open, on a sample objective, inside a container. Tier 3 separately confirmed the surrounding claims hold:ProposalRequesthas no field capable of carrying acceptance criteria to a proposer, and the autonomy types carry[Experimental].🤖 Generated with Claude Code