Skip to content

Never let absence be the success signal - #514

Merged
samoylenkodmitry merged 1 commit into
mainfrom
docs/absence-signal
Aug 28, 2026
Merged

Never let absence be the success signal#514
samoylenkodmitry merged 1 commit into
mainfrom
docs/absence-signal

Conversation

@samoylenkodmitry

Copy link
Copy Markdown
Owner

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 from origin/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 merge entry. 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-branch is 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 --jq arity failures were loud on every call and silent only because 2>/dev/null discarded the line naming them.

Swapped the runtime-override citation to debug.cranpose.a11y_sync now 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

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@samoylenkodmitry
samoylenkodmitry merged commit 79135ec into main Aug 28, 2026
6 of 7 checks passed
@samoylenkodmitry
samoylenkodmitry deleted the docs/absence-signal branch August 28, 2026 06:40
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant