forked from heavy-duty/ceremony
Round fixes on #200. codex-1 (blocking): the issues narrowing dropped `edited`/`reopened`, but both carry a queue-state change an event uniquely carries — `edited` a body rewrite of the `Blocked by #N` declaration the sweep parses (issueflow-reconcile.sh:179), `reopened` a closed issue re-entering the queue. Dropping them tripped #199's must-fail. Narrow to `[opened, closed, edited, reopened]`, dropping only the churn/validation actions labeled/unlabeled/assigned/unassigned. Trigger tests now pin edited/reopened present and the four dropped; labels.test.sh exact-list updated. kimi (blocking): the "supersedes unreleased #144" prose was false — #144's edited/reopened shipped in 0.3.0. Dissolved: we now keep them. CONSUMERS prose rewritten to the real version history (0.2.0 #32 / 0.3.0 #144 / #199 narrows), and the #137 review-request line corrected from "unreleased" to shipped-in-0.3.0. kimi (non-blocking): reusable labels.yml comment no longer cites */15. codex-2 (AC1 after-measurement / closing) escalated to triage on #199 — held, not guessed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
47 lines
2.8 KiB
YAML
47 lines
2.8 KiB
YAML
name: labels
|
|
# Ceremony's own caller for the labels automation — the dogfood of issue
|
|
# #11, wearing the same local-`uses:` deviation as self-release.yml and the
|
|
# same warning: consumers must NEVER copy the local form (it rides main,
|
|
# unpinned — correct only for the repo that IS the source). Consumers write:
|
|
# uses: heavy-duty/ceremony/.github/workflows/labels.yml@<pinned-tag>
|
|
on:
|
|
# Hourly, not */15 (#199): the cron is a BACKSTOP, not the wake. Events below
|
|
# carry every real state change in seconds; the cron only catches a FORGOTTEN
|
|
# handoff, so a quiet repo loses at most the forgotten case, and only by ≤1h —
|
|
# while */15 fired a full-board sweep four times an hour at GitHub's 1-minute
|
|
# billing floor, 52% of one private consumer's runs for near-zero real work.
|
|
schedule: [{cron: "0 * * * *"}]
|
|
workflow_dispatch: # bootstraps missing labels on a fresh repo
|
|
# Narrowed (#199) to the actions that carry a queue-state change the hourly
|
|
# cron cannot wait one cadence for — dropping only labeled/unlabeled/assigned/
|
|
# unassigned, which feed validation and the 48h claim clock (caught within one
|
|
# cadence) and were the dominant issues-churn source. Kept: `opened` (the
|
|
# mint→needs-triage check, issueflow's opened-only path), `closed` (the
|
|
# blocker-closes→ready self-heal, crew#96/#98), `edited` (a body rewrite of the
|
|
# `Blocked by #N` declaration the sweep parses — issueflow-reconcile.sh:179),
|
|
# `reopened` (a closed issue re-entering the queue wearing labels derived when
|
|
# it closed). The must-fail in #199 is exactly "a queue-state transition waits
|
|
# on the schedule when an event could have carried it", so edited/reopened stay
|
|
# on events. The PR handoff wake is pull_request_target:labeled, NOT issues, so
|
|
# this does not touch the handoff.
|
|
issues:
|
|
types: [opened, closed, edited, reopened]
|
|
pull_request_target:
|
|
# Every PR arrives from a fork, so these carry the head/draft/review facts
|
|
# the sweep derives state:* from. labeled/unlabeled are the handoff wake —
|
|
# the author's optimistic state:needs-human write, confirmed or corrected
|
|
# here in seconds (#11); synchronize re-derives on every push;
|
|
# review_requested/review_request_removed wake the sweep that clears (or
|
|
# restores) blocker:unrequested — without them the one event that makes
|
|
# the label false could not clear it, and a quiet repo wore the red flag
|
|
# until the advisory cron (#137).
|
|
types: [opened, reopened, ready_for_review, converted_to_draft, synchronize, labeled, unlabeled, review_requested, review_request_removed]
|
|
permissions:
|
|
contents: read
|
|
checks: read # mergeability/check-rollup read for PR state
|
|
statuses: read # commit-status rollup read for PR state
|
|
issues: write
|
|
pull-requests: write
|
|
jobs:
|
|
labels:
|
|
uses: ./.github/workflows/labels.yml
|