Never let absence be the success signal - #514
Merged
Merged
Conversation
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
samoylenkodmitry
added a commit
that referenced
this pull request
Aug 28, 2026
#514 says not to write a check that reads a missing symptom as success. This is the other half: why you do not notice you wrote one. A guard that fails open agrees with a correct guard on every unremarkable run, so it banks a record of being right before it is ever wrong, and the run it is wrong on arrives carrying that record. Broken-and-loud is fixed on its first run; usually-right is not. Adds the environment input a remote-reading guard forgets: gh resolves the repo from cwd, so the CI gate answered "no rollup data" the first time it ran from a scratchpad. Fail-closed made that harmless; the natural spelling would have called a fully-queued PR green. Extends #514's merge entry in place rather than competing with it. Two observations it could not have had: #512 merged after a pre-merge mergeable/mergeStateStatus of UNKNOWN/UNKNOWN, and #515 returned exit 0 on a merge that genuinely failed for conflicts — the shape that makes a script trusting exit 0 report success. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
samoylenkodmitry
added a commit
that referenced
this pull request
Aug 28, 2026
#514 says not to write a check that reads a missing symptom as success. This is the other half: why you do not notice you wrote one. A guard that fails open agrees with a correct guard on every unremarkable run, so it banks a record of being right before it is ever wrong, and the run it is wrong on arrives carrying that record. Broken-and-loud is fixed on its first run; usually-right is not. Adds the environment input a remote-reading guard forgets: gh resolves the repo from cwd, so the CI gate answered "no rollup data" the first time it ran from a scratchpad. Fail-closed made that harmless; the natural spelling would have called a fully-queued PR green. Extends #514's merge entry in place rather than competing with it. Two observations it could not have had: #512 merged after a pre-merge mergeable/mergeStateStatus of UNKNOWN/UNKNOWN, and #515 returned exit 0 on a merge that genuinely failed for conflicts — the shape that makes a script trusting exit 0 report success. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
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.
One push, four changes, all verified against the tree.
New entry — never let absence be the success signal. Four failures in one day shared one shape: concluding something succeeded because an expected symptom was missing. A waiter read the absence of "pending" as completion; a rollup test accepted a partial list because none of the checks present were failing; a merge was reported done because nothing objected; and a command that never ran returned nothing, which was read as a measurement. The repair is to state the success condition positively — a literal
true, every expected check named, the commit reachable fromorigin/main, a non-empty parse with stderr visible. The synthesis is sharp-poincare's; three of the four instances are entries I wrote after making the mistakes.Strengthened the
gh pr mergeentry. Now four observations rather than one: exit 1 on merges that succeeded (#510, #511), exit 1 on a merge that genuinely failed (#499), exit 0 with empty output (#508). So the exit status carries no information in either direction, and--delete-branchis a no-op — both PRs needed a separate push to delete the branch. Verify by ancestry and content only.Added the stderr corollary to the accept-path entry: suppressing stderr converts a broken command into a plausible measurement. Both
--jqarity failures were loud on every call and silent only because2>/dev/nulldiscarded the line naming them.Swapped the runtime-override citation to
debug.cranpose.a11y_syncnow that #497 has landed — it exists precisely to flip a perf arm inside one binary, which is what that corollary asks for.Three further items (the two-glass-topologies qualification, the fix-merged-vs-fix-guarded divergence, and the fail-open observation) are deliberately not here: they belong to the people who observed them, and are being written by them rather than from my paraphrase. Queued behind this one so there is never a second writer on this file.
🤖 Generated with Claude Code