Skip to content

ci: zero checks is not zero failures, on the path that merges - #3314

Merged
gHashTag merged 2 commits into
masterfrom
w117c-zero-is-not-clean
Sep 6, 2026
Merged

ci: zero checks is not zero failures, on the path that merges#3314
gHashTag merged 2 commits into
masterfrom
w117c-zero-is-not-clean

Conversation

@gHashTag

@gHashTag gHashTag commented Sep 5, 2026

Copy link
Copy Markdown
Owner

Fixes both readers in #3248.

auto-merge-ready-prs.yml — a PR nothing had run on was "Ready to merge"

FAILING was computed over the status rollup and 0 was treated as clean. Measured
with the workflow's own jq:

rollup posted failing verdict
absent (null) 0 0 was "Ready to merge" → now skipped
present but empty 0 0 was "Ready to merge" → now skipped
one check running 1 1 skipped (unchanged, correct)
one check green 1 0 ready (unchanged, correct)

The running case was already right and deliberately so — null != "SUCCESS" is
true in jq. Only the empty set was wrong.

Its merge loop ended || echo "Failed to merge PR #$pr", so the step exited 0
whether every merge succeeded or every one failed: a batch that merged nothing
reported green. It now counts both and exits 1 if any failed.

pr-dashboard.yml — the columns did not partition

READY was all(SUCCESS or SKIPPED or null). all over an empty array is true,
so a PR with no checks was READY; the null arm put still-running PRs
there too — and the same PR was then counted in READY and PENDING, while the
three columns were printed as a breakdown of TOTAL.

READY NO CHECKS YET PENDING
zero checks 0 1 0
one running 0 0 1
one green 1 0 0

Each PR now lands in exactly one column, "no checks yet" has its own, and the
table prints a warning when the four stop summing to TOTAL rather than leaving a
reader to add them up.

Census

The three added steps moved named a path but not quiet 128 → 131 and are
blessed in the second commit, naming the number. The gate asked for it in the
same commit; it got the next one, because the first was already pushed and this
repository does not force-push.

Refs #3248

  named a path but not quiet   128 -> 131

The three are the ones added in the previous commit: the empty-rollup refusal
and the merge-failure count in auto-merge-ready-prs.yml, and the no-checks-yet
column in pr-dashboard.yml. Each names a path it reads, and none is quiet --
they are in the census's good class, and the count moving is the census
noticing them arrive.

The gate asked for this in the same commit and I gave it the next one, because
the first was already pushed and this repository does not force-push.

Refs #3248

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-09-05 17:56:56 UTC

Summary

Status Count
Total Open PRs 11
PRs with Failing Checks 10
PRs with All Checks Green 1
READY 0
FAILING 10
PENDING 0
NO CHECKS YET 0

These columns do not partition: 0 + 10 + 0 + 0 = 10, and there are 11 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=ffccfa1a71cf != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@gHashTag
gHashTag enabled auto-merge (squash) September 5, 2026 17:57
gHashTag pushed a commit that referenced this pull request Sep 5, 2026
Two sessions of this loop ran concurrently and picked the same three tasks from
the same list of recommendations, opening PRs for all of them (#3314, #3317).
Nothing in the flow says who is working on what.

`tri loop claim <name>` uses the one atomic operation git gives over a shared
remote: creating a ref that does not exist. Exit 0 it is yours, 1 someone has
it and the line names them, 2 the attempt could not be made -- which is not the
same as being refused.

THE OBVIOUS VERSION DOES NOT LOCK, and I measured it before writing this one.
Pushing `origin/master` to the claim tag succeeds for the SECOND claimant too:
git treats re-pushing the same value to an existing tag as a no-op and exits 0,
so both sessions believe they hold it. Two sessions of this loop sit on the same
`origin/master` almost by definition, so that lock would have been worse than
none -- it reports success.

The claim is therefore a commit no other claimant can produce: an empty tree
with a message naming host, pid and HEAD. Measured: ALPHA exit 0, BETA exit 1
with the holder named.

A refused push with NO holder exits 2, not 1. That is a broken push rather than
a lost race, and reporting it as HELD would send the next session away from work
nobody is doing.

Two mutants killed -- borrowing the claim value from an existing ref, and
reporting a broken push as held. The second test could not kill anything until
it was fixed: it sliced from the first `match holder` to end of file and
asserted `contains("exit(2)")`, which four unrelated exit-2 sites satisfy.

CENSUS. Three moved and they are not all mine:

  fetches  files read                 43 -> 44   MINE: cli/tri/src/loopclaim.rs
  quiet    named a path but not quiet 128 -> 127  already moved on master
  shell    run: steps                 235 -> 234  already moved on master

A clean `origin/master` worktree fails `census pin --gate` with the last two
before any change of mine, so the pre-commit hook has been failing for every
author since a workflow edit landed unblessed. This commit carries the bless it
inherited and says so rather than passing it on.

Getting there took four wrong turns worth recording: `census pin` WITHOUT
`--gate` exits 0 whatever moved, and I read that non-verdict as "nothing moved"
twice -- once as the control that supposedly cleared master.

Refs #3331

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
gHashTag added a commit that referenced this pull request Sep 6, 2026
Two sessions of this loop ran concurrently and picked the same three tasks from
the same list of recommendations, opening PRs for all of them (#3314, #3317).
Nothing in the flow says who is working on what.

`tri loop claim <name>` uses the one atomic operation git gives over a shared
remote: creating a ref that does not exist. Exit 0 it is yours, 1 someone has
it and the line names them, 2 the attempt could not be made -- which is not the
same as being refused.

THE OBVIOUS VERSION DOES NOT LOCK, and I measured it before writing this one.
Pushing `origin/master` to the claim tag succeeds for the SECOND claimant too:
git treats re-pushing the same value to an existing tag as a no-op and exits 0,
so both sessions believe they hold it. Two sessions of this loop sit on the same
`origin/master` almost by definition, so that lock would have been worse than
none -- it reports success.

The claim is therefore a commit no other claimant can produce: an empty tree
with a message naming host, pid and HEAD. Measured: ALPHA exit 0, BETA exit 1
with the holder named.

A refused push with NO holder exits 2, not 1. That is a broken push rather than
a lost race, and reporting it as HELD would send the next session away from work
nobody is doing.

Two mutants killed -- borrowing the claim value from an existing ref, and
reporting a broken push as held. The second test could not kill anything until
it was fixed: it sliced from the first `match holder` to end of file and
asserted `contains("exit(2)")`, which four unrelated exit-2 sites satisfy.

CENSUS. Three moved and they are not all mine:

  fetches  files read                 43 -> 44   MINE: cli/tri/src/loopclaim.rs
  quiet    named a path but not quiet 128 -> 127  already moved on master
  shell    run: steps                 235 -> 234  already moved on master

A clean `origin/master` worktree fails `census pin --gate` with the last two
before any change of mine, so the pre-commit hook has been failing for every
author since a workflow edit landed unblessed. This commit carries the bless it
inherited and says so rather than passing it on.

Getting there took four wrong turns worth recording: `census pin` WITHOUT
`--gate` exits 0 whatever moved, and I read that non-verdict as "nothing moved"
twice -- once as the control that supposedly cleared master.

Refs #3331

Co-authored-by: lab <lab@example.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@gHashTag
gHashTag merged commit c4851b3 into master Sep 6, 2026
27 of 28 checks passed
@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-09-06 04:46:08 UTC

Summary

Status Count
Total Open PRs 15
PRs with Failing Checks 10
PRs with All Checks Green 5
READY 0
FAILING 10
PENDING 0
NO CHECKS YET 0

These columns do not partition: 0 + 10 + 0 + 0 = 10, and there are 15 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=824bbbc7859f != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

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