-
0.3.0 Stable
released this
2026-07-24 17:39:38 +00:00 | 480 commits to main since this release- Make
changelog-armedreject fragment shape drift on the PR that introduces it. - A directive hold now has a written ending, not just a beginning: BUILDER.md's shape 5 says the hold ends where it began — on the labels — with the hold owner's most recent queue-label event governing over any stale prose, the timeline read (
gh api .../issues/{n}/timeline) named as the move before standing down or up on a hold, a claim against stale prose required to cite the events it read, and a refused claim given its two exits. TRIAGE.md now requires re-reading label events before asserting label-borne state in prose, and makes correcting a lifted hold's stale body header triage's move in the same tick. On 2026-07-24 the unranked signals split two builders reading one board (#149, #151); both acted defensibly — the doctrine, not the builders, lacked the rule (#154). - Doctrine names the second
Closes #Nexception: a same-repo PR whose
authorizing issue marks an acceptance criterion post-merge usesRefs #N,
and triage closes the issue by hand on the evidence — merging #143
auto-closed #137 with exactly such a criterion unmet, and no role had been
told otherwise. TRIAGE.md now requires a post-merge criterion to carry its
own mechanism (post-merge, triage closes,Refs #N), REVIEWER.md lists
Refs #NbesideCloses #NandPart of <owner>/<repo>#Nand stops
treating the reference-only PR as a defect, and CONTRIBUTING.md points at
BUILDER.md as the rule's one home (#151). - FLEET.md — the Reviewers wake describes the deployed sweep, not the
gh searchtrigger the bench replaced: the pulls-APIrequested_reviewerssweep across the org plus the named bot forks is source 1, therepos.txt/search poll an adds-only backstop, and the two are merged and deduplicated by (repo, PR) before acting. Only the notifier'sneeds-rulingqueue remains on paper;repos.txtis the registry only on the triage box; and the Status block now stamps the crew ref the file was last reconciled against (#149). - REVIEWER.md now carries the review mechanics every box had been re-deriving from an incident: the queue comes from the API and not the search index, every write is one-shot per (reviewer, PR, head), heads are reviewed in throwaway checkouts, a pinned consumer's config is verified at its pin, and a verdict names the checks its box could not run (#145).
- The
docs/CONSUMERS.mdlabels-caller stub lists the sameissues:types
as ceremony's own caller —editedandreopenedincluded — so a consumer
adopting the stub wakes when an issue body'sBlocked by #Ndeclaration is
edited, and when a closed issue re-enters the queue wearing labels derived
at close. The two lists drifted apart inside PR #32; a parity test now pins
them together, red if either file drops a type or the lists diverge.
Adopting the widened list is a stub edit riding the pin bump to the first
tag carrying this change (#144). labels-reconcile— a queue-cancelled duplicate check is discarded when its context holds a real verdict, so a sibling PR's eviction no longer reds a green PR; an all-cancelled context still blocks (#139).blocker:unrequestednow clears the moment the panel is asked: the labels
caller (and thedocs/CONSUMERS.mdstub) listens onreview_requestedand
review_request_removed, so the one event that falsifies the label — or
makes it true again — wakes the reconcile sweep instead of waiting for an
unrelated push or the advisory cron. Thescopejob skips both events:
they change no paths, and running the labeler on them widens the #130
clobber window. Adopting the new triggers is a stub edit riding the pin
bump to the first tag carrying this change (#137).drills/README.mdno longer tells the builder to delete the scratch repo —
a step no fleet identity can perform, becausedelete_repois deliberately
absent from bot tokens. The builder's end state is archive
(archived: true, inside thereposcope); the delete is the operator's,
and cleanup gates nothing — not ready-for-review, not the panel, not the
merge. The drill record now names the scratch repo byowner/nameand
states the disposal its author actually observed, never one that has not
happened: both 0.2.0 drills hit the missing-scope wall independently, one
stalling a release draft on an impossible 403, the other shipping a record
asserting a delete that never ran (#135).lib/facts.sh— a repository's first push tomain(a root commit with no first parent) now readsbase_ver=(none)and lets decide's table govern, instead of dying at exit 128 before establishing a fact; the no-base path skips the base fetch andgit show, and an unresolvable head still fails loudly (#134).- The changelog rule now explains why release PRs write no fragment and how entry-worthy changes land instead (#131).
actions/labels-scopereplacesactions/labeler@v5in the labels workflow's scope job: labeler wrote the whole label set (PUT) even undersync-labels: false, silently removing any label applied while it ran — #128 lost itsreleasethat way — so the scope job now derives from the same.github/labeler.ymlmapping (thechanged-files/any-glob-to-any-fileshape, block or flow; anything else refuses loudly) and its only write is an additivePOST. The reconcile sweep also warns — never sets — when a non-draft PR is release-shaped (bare version differing from its base) but carries noreleaselabel (#130).
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
7 downloads
- Make