test(scripts): release-rehearsal-clone's C2 green line is stable — the measured timing prints only on failure (#15400) - #15433
Merged
Conversation
The C2 case interpolated the measured wall-clock figure into its label, so the `✓` line carried a value that differs from run to run and the "green lines byte-identical" comparison could never pass unnormalised. The figure now prints through the failure sink `t()`/`report()` already carry, so a red run still names the timing while the green line is stable. Condition, threshold, roster, floor and registration are unchanged. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk
baozhoutao
marked this pull request as ready for review
September 4, 2026 15:39
baozhoutao
enabled auto-merge
September 4, 2026 15:39
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.
Fixes #15400
What changed
One line in
scripts/pm/release-rehearsal-clone.mjs. The C2 case interpolated themeasured wall-clock figure into its own label, so the
✓line carried a value thatdiffers from run to run:
The figure now goes through the failure sink
t()/report()already carry — thethird argument, printed only when the condition is false — and the label states the
threshold only:
Per the ruling on #15400 (option 1). The assertion condition (
healthyMs < 10_000)and the threshold are unchanged, C2 still registers exactly once through
t, and theroster (
'release-rehearsal-clone self-test': 30),SELF_TEST_BATTERY_FLOORand thetConditionalsplit from #15399 are untouched. No other case, condition, message orargument changes.
The proof the card asks for: two runs, twelve minutes apart
node scripts/pm/release-rehearsal-clone.mjs --self-testrun twice, 15:18:31Z and15:30:31Z, stdout and stderr captured separately and
cmpd.This branch — byte-identical:
Control, the same pair on the base pin
52d5a52d5(a second detached worktree atthe same commit) — differs, on exactly the C2 line and nothing else:
A red run still names the timing
Forced-slow ablation — the condition's threshold mutated to
healthyMs < -1, proven ondisk before the run (injected spelling present 1×, removed spelling 0×, blob hash moved
ef88cbc… -> ce605ec…), restored under anEXIT INT TERMtrap and the restore provenby hash equality plus an empty
git diff HEAD:The floor is untouched
Roster pin ablated
30 -> 9999, same mutation/restore discipline — C2 still registers,and the count the floor sees is still exactly 30:
node scripts/measure-self-test-floor.mjs --jsonbefore and after the edit isbyte-identical (170 rows,
ROSTER164 /NONE5 /COUNT1); this file stays{"file":"scripts/pm/release-rehearsal-clone.mjs","floor":"ROSTER","defs":["selfTest"]}.Gates
All at
023dcd71d, the final commit; exit codes captured before any pipe.node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack— 23 commands, every one run, all
EXIT=0. The heavy leg (13pnpm check:*, includingcheck:pm-dispatch-gatesat 403s) ran in the foreground underscripts/pm/os-verify-lock.sh:VERDICT command-exit 0.check-self-test-workflow-commands.mjsand its--self-test,check:declared-population-live,check-self-test-wired.mjs,check:ratchet-remedy-authority,check:nul-bytes,check:watch-hint-literal— allEXIT=0.--self-test, thelint.ymlstep:EXIT=0,✓ self-test passed.pnpm lint(eslint . --no-inline-config) under the verify lock:LINT_EXIT=0, no findings. Not a narrowed run.No changeset: this changes a repo-internal PM script and publishes nothing from any
package, so
skip-changesetapplies.🤖 Generated with Claude Code
https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk
Generated by Claude Code