fix(tri): a refused dispatch is not a missing one - #3356
Merged
Conversation
`gates unmeasured` printed `dispatch: NO` for every workflow without a `workflow_dispatch:`, beside a footnote saying to add one. It could not tell a workflow that is missing a dispatch from one that refused a dispatch on purpose. #3325 removed the dispatch from `release.yml` -- every job keys off the release tag, which is empty on a dispatch, so preflight refuses and nothing publishes -- and recorded the reason in a YAML comment this tool does not read. The tool went on advising the next reader to put that dispatch back, in front of `cargo publish` and `npm publish` against live registries. Measured on #3325's head before this change: `2026-08-28 NO - Release Pipeline`. `has_dispatch` now returns three states instead of a bool, because the domain has three. A workflow records a deliberate refusal with `# tri:no-dispatch`, which is where the tool looks; `release.yml` now carries it. A present dispatch still wins over the marker, so a stale comment cannot hide a real one. Two of the six tests ask the wiring rather than the reader: the defect lived in a print site and a footnote, not in the predicate. The footnote test failed first, on a footnote I had silently failed to patch -- the python replace was a no-op and I had asserted only that the anchor existed, not that anything moved. CENSUS: `fetches` moved, `gates.rs:3596 fn unmeasured` -> `gates.rs:3651`. The function did not change; the three-state enum and its doc comment were added above it. `quiet` and `shell` did not move. Re-blessed in this commit. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The NOW entry for the change in the previous commit. The pre-push gate refused the range without one, which is the gate paying for itself: that refusal cost a second here instead of a CI round. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Contributor
Contributor
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
This was referenced Sep 6, 2026
Contributor
PR DashboardGenerated at: 2026-09-06 05:24:19 UTC
Summary
Seal Status
|
Contributor
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
This was referenced Sep 6, 2026
Contributor
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
Contributor
PR DashboardGenerated at: 2026-09-06 05:50:35 UTC
Summary
Seal Status
|
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.
Refs #3355
The defect
tri gates unmeasuredprints adispatch:column and a footnote telling thereader to add
workflow_dispatch:wherever it saysNO. The column was abool, so it could not tell a workflow that is missing a dispatch from one
that refused one.
Measured on #3325's head, before this change:
#3325 had just removed that dispatch, deliberately: every job in
release.ymlkeys off
github.event.release.tag_name, which is empty on a dispatch, sopreflight refuses and every publishing job is skipped. The reason was written in
a YAML comment. This tool does not read YAML comments — so it went on advising
the next reader to put a dispatch back in front of
cargo publishandnpm publishagainst live registries, where a version is permanent.That is one cron pass instructing the next one to undo its work.
The change
has_dispatchreturns three states, because the domain has three. A workflowrecords a deliberate refusal with
# tri:no-dispatch <reason>— in the file,where the tool looks, not only in prose addressed to humans.
release.ymlcarries it now and reads
refused:A present
workflow_dispatch:still wins over the marker, so a stale commentcannot hide a real dispatch.
Tests
Six, and two of them ask the wiring rather than the reader — the defect
lived in a print site and a footnote, not in the predicate:
both_dispatch_columns_ask_the_three_state_reader— no column still prints a boolthe_advice_explains_a_refusal_wherever_a_column_prints_one— each table's footnote explainsrefusedThe second one failed first, on a footnote I had silently failed to patch: the
edit was a no-op and I had asserted only that the anchor existed, not that
anything moved. Without that test the table would have printed
refusedundera footnote that still said "add
workflow_dispatch:first".Census
fetchesmoved,gates.rs:3596 fn unmeasured→gates.rs:3651— the functionis unchanged, the enum and its doc comment were added above it.
quietandshelldid not move. Re-blessed in the same commit.