tri gates unmeasured: workflows whose green is about frequency, not health - #2758
Merged
Conversation
…requency, not health
`tri gates dead` asks "ran a lot and never passed". This asks the opposite and
harder question: "never ran on the default branch, so nobody knows".
Three gates in this repository were in that state at once -- rings-rust,
secret-scan and cli-tri, all `paths:`-filtered on the root Cargo.toml, which
nothing had edited in months. Editing it for the release work woke all three:
seventeen ring crates had never compiled, 233 files carried a developer's home
directory, and `tri rtl check` had been dying on a submodule declared but never
registered. Every one had been reading as passing. Finding them took a
45-workflow sweep by hand; this is that sweep.
$ tri gates unmeasured
28 of 58 active workflow(s) have no default-branch run within 30 days.
LAST paths: dispatch WORKFLOW
2026-04-14 yes NO Build Paper
2026-06-14 yes yes Coq Proofs Validation
never - NO Check Now Freshness
...
`paths:` is reported because it is usually the reason. `dispatch: NO` is
reported because without `workflow_dispatch:` the missing reading cannot be
taken on purpose -- the gap cannot be closed even by someone who wants to.
THE FIRST VERSION OF THIS SAID 58 OF 58. The jq was written as a raw string with
its closing `""` trimmed off at runtime, producing invalid jq; every query then
failed, `unwrap_or_default()` turned each failure into an empty string, and the
command confidently reported that no workflow had ever run. A wrong answer
produced by exactly the mechanism this command exists to find. Now there is no
default on error: a query that did not run is counted separately and named, and
"could not ask" is never rendered as "did not run".
Verified row by row against the API: Build Paper 2026-04-14T13:49:40Z, Coq
Proofs Validation 2026-06-14T13:26:32Z -- both match. Two tests cover the
staleness rule without a network, including that an unparseable date is STALE,
not fresh.
Refs #2754
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ped each run .claude/workflows/loop-recon.js runs four recon dimensions -- weakest thing in the repository, why rustc accepts zero of 559 generated files, who else is in this field, and which tri command is missing -- and adversarially refutes every finding before it reaches a plan. The shape is written down in the README beside it, because the shape is the reusable part: pipeline rather than barrier so a fast dimension is not idled behind a slow one; structured output so the script never scrapes English; the prompt naming what is ALREADY known so a run does not rediscover the same top three and read like progress; and effort as part of each finding, since a true finding with a wrong cost still plans the next hour badly. It hard-coded one worktree's absolute path when it was first written. That is the same defect secret-scan rejects, so REPO now comes from args or the working directory -- a workflow is not exempt from a rule the repository applies to everything else. Refs #2754 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Refs #2754 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Contributor
PR DashboardGenerated at: 2026-08-28 17:01:04 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 Aug 28, 2026
gHashTag
added a commit
that referenced
this pull request
Aug 28, 2026
Brought up to date after #2758; the ruleset requires it, and a rebase would need a force-push.
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 #2754
tri gates deadasks "ran a lot and never passed". This asks the opposite and harder question: "never ran on the default branch, so nobody knows".Three gates in this repository were in that state at once —
rings-rust,secret-scanandcli-tri, allpaths:-filtered on the rootCargo.toml, which nothing had edited in months. Editing it for the release work woke all three: seventeen ring crates had never compiled, 233 files carried a developer's home directory, andtri rtl checkhad been dying on a submodule declared but never registered. Every one had been reading as passing. Finding them took a 45-workflow sweep by hand; this is that sweep.paths:is reported because it is usually the reason.dispatch: NOis reported because withoutworkflow_dispatch:the missing reading cannot be taken on purpose — the gap cannot be closed even by someone who wants to.The first version said 58 of 58
The jq was written as a raw string with its closing
""trimmed off at runtime, producing invalid jq. Every query failed,unwrap_or_default()turned each failure into an empty string, and the command confidently reported that no workflow had ever run — a wrong answer produced by exactly the mechanism it exists to find.There is no default on error now: a query that did not run is counted separately and named, and "could not ask" is never rendered as "did not run".
Verified row by row against the API — Build Paper
2026-04-14T13:49:40Z, Coq Proofs Validation2026-06-14T13:26:32Z, both match. Two tests cover the staleness rule without a network, including that an unparseable date is stale, not fresh.Also:
.claude/workflows/loop-recon.jsbecomes a reusable workflow instead of a script retyped each run, with its shape written down beside it — pipeline rather than barrier, structured output rather than scraped prose, prompts that name what is already known so a run does not rediscover the same top three and read like progress, and effort as part of each finding.It hard-coded one worktree's absolute path when first written. Same defect
secret-scanrejects, soREPOnow comes fromargsor the working directory.tri: 208 tests passing.🤖 Generated with Claude Code