forked from heavy-duty/ceremony
fix: a draft never reads state:needs-human — round 1, claude
The reorder let a draft with a live human request plus a standing block
or comment fall through to round_state, whose human-request precedence
sits above BLOCK/FEEDBACK — 224 of claude's 1500 fixture cases read
needs-human on a PR GitHub cannot merge. decide_state now disqualifies
needs-human unconditionally under DRAFT=true, landing on
state:addressing like the blocker/needs-ruling/blocked clauses. The two
new rows assert the criterion where it can actually fail: human
requested x {CHANGES_REQUESTED, COMMENTED}. Also grok's nit: the
bootstrap row for state:building now matches LABELS.md (draft is
evidence, not the definition), and the CONSUMERS.md reflow nits are in.
Refs #205
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
069faf481a
commit
44b1a3d23c
2 changed files with 23 additions and 4 deletions
|
|
@ -304,7 +304,8 @@ together at the same pin:
|
||||||
The consumer keeps its path mapping in `.github/labeler.yml` and its
|
The consumer keeps its path mapping in `.github/labeler.yml` and its
|
||||||
review panel plus scope taxonomy in `.github/labels.conf`.
|
review panel plus scope taxonomy in `.github/labels.conf`.
|
||||||
|
|
||||||
**Additive means additive** (available at `0.3.0` and later — #130): the scope job's only label
|
**Additive means additive** (available at `0.3.0` and later — #130): the
|
||||||
|
scope job's only label
|
||||||
write is `POST /issues/{n}/labels`, which adds the derived scopes and removes
|
write is `POST /issues/{n}/labels`, which adds the derived scopes and removes
|
||||||
nothing, so a label applied while the job runs survives it. Earlier tags used
|
nothing, so a label applied while the job runs survives it. Earlier tags used
|
||||||
`actions/labeler@v5`, which — even under `sync-labels: false` — replaces the
|
`actions/labeler@v5`, which — even under `sync-labels: false` — replaces the
|
||||||
|
|
@ -522,9 +523,8 @@ allowed to mint issues without the sweep applying `needs-triage`. Label rows use
|
||||||
`name|color|description`; blank lines are ignored and extra pipes are refused.
|
`name|color|description`; blank lines are ignored and extra pipes are refused.
|
||||||
There are no comment lines: every non-blank line must be the `panel=`
|
There are no comment lines: every non-blank line must be the `panel=`
|
||||||
setting, a `panel[<login>]=` row, the `triage-actors=` setting, or a label
|
setting, a `panel[<login>]=` row, the `triage-actors=` setting, or a label
|
||||||
row, so `#`-prefixed prose
|
row, so `#`-prefixed prose is a parse failure, not a comment (rig #13's
|
||||||
is a parse failure, not a comment (rig #13's conversion found this the hard
|
conversion found this the hard way — keep the file data only).
|
||||||
way — keep the file data only).
|
|
||||||
Core state, blocker, work-queue, and release labels come from ceremony. Scope
|
Core state, blocker, work-queue, and release labels come from ceremony. Scope
|
||||||
rows remain consumer-owned because paths and surfaces differ by repository.
|
rows remain consumer-owned because paths and surfaces differ by repository.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1027,6 +1027,25 @@ expect "a re-draft after a passed round is building again" \
|
||||||
REQUESTED="$HUMAN"
|
REQUESTED="$HUMAN"
|
||||||
expect "...even with the human requested — a draft never reads needs-human" \
|
expect "...even with the human requested — a draft never reads needs-human" \
|
||||||
state:building "$(decide_state)"
|
state:building "$(decide_state)"
|
||||||
|
# Round 1's 224-case hole (claude's differential): a draft with a LIVE HUMAN
|
||||||
|
# REQUEST plus a standing block or comment fell through to round_state,
|
||||||
|
# whose human-request precedence sits above BLOCK/FEEDBACK — and read
|
||||||
|
# needs-human on a PR GitHub cannot merge. These are the same inputs as the
|
||||||
|
# addressing rows above with REQUESTED="$HUMAN", which is where the
|
||||||
|
# criterion can actually fail.
|
||||||
|
REQUESTED="$HUMAN" REVIEWS_JSON="$(reviews \
|
||||||
|
"$(rev "$BOT1" CHANGES_REQUESTED head1 no t1)" \
|
||||||
|
"$(rev "$BOT2" APPROVED head1 ok t2)" \
|
||||||
|
"$(rev "$BOT3" APPROVED head1 ok t3)")"
|
||||||
|
expect "a draft with a human request and a standing block is addressing" \
|
||||||
|
state:addressing "$(decide_state)"
|
||||||
|
REVIEWS_JSON="$(reviews \
|
||||||
|
"$(rev "$BOT1" COMMENTED head1 thoughts t1)" \
|
||||||
|
"$(rev "$BOT2" APPROVED head1 ok t2)" \
|
||||||
|
"$(rev "$BOT3" APPROVED head1 ok t3)")"
|
||||||
|
expect "a draft with a human request and an owed reply is addressing" \
|
||||||
|
state:addressing "$(decide_state)"
|
||||||
|
|
||||||
# The must-not-paper-over combination: a live panel request on a draft is a
|
# The must-not-paper-over combination: a live panel request on a draft is a
|
||||||
# board defect (the bots ignore drafts by design) and stays VISIBLE as
|
# board defect (the bots ignore drafts by design) and stays VISIBLE as
|
||||||
# bots-reviewing rather than being absorbed into building.
|
# bots-reviewing rather than being absorbed into building.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue