Skip to content

docs(delivery),chore(skills): plain-language rule and triage fixes from the first live triage - #140

Merged
V3RON merged 6 commits into
mainfrom
delivery/triage-skill-v2
Sep 10, 2026
Merged

V3RON merged 6 commits into
mainfrom
delivery/triage-skill-v2

Conversation

@V3RON

@V3RON V3RON commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes from the first live triage (#79), and a writing rule for everything agents post.

Rule 12, new. Everything an agent writes on an issue or PR is short and plain: conclusion first, short sentences, common words, evidence in code blocks, nothing that does not change the reader's next decision. Word budgets: triage report 300, handoff 150, PR body 200 plus checklist, "Spec updated" comment one line.

Rule 8, amended. The test title is the claim the test proves, not the claim the bug makes. Root cause says defect or gap first. Side findings become bug:new issues listed in a sixth section.

triage-bug. What the #79 run showed the skill was missing:

  • title narrowed to what the process can observe; OS behaviour is evidence, not title
  • assert the whole claim: every fixture case in the expectation
  • read-only host inspection is allowed and disclosed
  • defect / gap / decision: a gap's expectation is a proposal, and a gap bigger than one PR is a feature
  • side findings get their own bug:new issue
  • report budget and shape

deliver, spec-session. Point at rule 12 for handoffs, PR bodies, and spec text.

Added after review of the first run:

  • Rule 12 also: confirm or correct what the body says instead of restating it; every comment, issue body, and PR body ends with *Written by an agent.*, since agents post under a maintainer's account.
  • Rule 13, new: assume every agent is in a worktree. Branch from origin/*, never switch to a branch another checkout may hold. deliver and triage-bug carry the commands, including the temporary-name push when the local name is taken.
  • Rule 8 caps: alternatives at most three one-liners, risk at most three bullets.
  • issue-state.yml: the needs-info job ignores comments ending with the agent footer, so an agent's comment on a bug the maintainer reported cannot flip bug:needs-info to bug:triage.
  • deliver: before the PR, search docs/ and user-facing strings for claims the change makes false and fix them in the same PR.
  • All three skills: when a person is present, show the report, handoff, PR body, or new spec body and wait for a yes before posting; unattended runs post directly.
  • Rule 8 and DELIVERY.md: on a gap, bug:ready accepts the shape the report proposes; to reject the shape but keep the reproduction, reply and re-add bug:triage.
  • bug:triaged, new label: a posted report moves the bug out of bug:triage so no triage agent picks it up again and the maintainer sees it is waiting on them. Back to bug:triage by re-adding the label. Created live and applied to iOS on-demand runtime downloads never actually free disk space (mobileassetd cache outlives simctl runtime delete) #79.
  • triage-bug: a replacement report starts with "Supersedes the report above."
  • issue-state.yml: dropped trim(), which is not an Actions expression function and made the file invalid; the footer is matched with contains and tolerates _ or *.

…om the first live triage (#79)

Rule 12: everything an agent writes on an issue or PR is short and plain,
with word budgets. Rule 8: the title is the claim the test proves, the
root cause says defect or gap, side findings become bug:new issues.

triage-bug: title narrowed to what the test observes, assert the whole
claim, read-only host inspection allowed and disclosed, defect/gap/decision
triage, side-findings step, report budget. deliver and spec-session point
at rule 12 for handoffs, PR bodies, and spec text.
…rect, worktree rule, report caps

Rule 12: agent text confirms or corrects the body instead of restating it,
and every comment, issue body, and PR body ends with '*Written by an
agent.*'. Rule 13: assume every agent is in a worktree; branch from
origin/*, never switch to a branch another checkout may hold. Rule 8:
alternatives at most three one-liners, risk at most three bullets.

The needs-info job ignores comments carrying the footer, so an agent's
own comment on a bug the maintainer reported cannot flip the label.
…eeds-info job ignores agent comments; worktree-safe branching in deliver
…fore posting, bug:ready on a gap accepts the proposed shape
@V3RON
V3RON merged commit 228da82 into main Sep 10, 2026
11 checks passed
V3RON added a commit that referenced this pull request Sep 10, 2026
…, request close, claim release (#142)

## Summary

Closes the state-machine holes found after two live triage runs.
Verification stays part of delivery: no verify state, no verify skill.

**Blocked has a state.** `bug:blocked`, `feature:blocked`,
`task:blocked`. An agent sets it when its handoff names a blocker; the
maintainer clears it by re-adding the label it came from. Without this a
blocked handoff left the issue `*:ready`, so the next agent claimed it
and hit the same wall. Sending it to `task:draft` would not have worked
either, because the approval box is still ticked and the automation
promotes it straight back.

**Verification is part of delivery.** Rule 9, DELIVERY.md, and `deliver`
now say: every task PR walks its Done when, and the PR that closes the
last open sub-issue also walks the parent's Completion conditions. The
completion note on the feature tells the maintainer to close it.

**`issue-state.yml`**, three new jobs and three amended:

| Job | Change |
|---|---|
| `task-ready` | also demotes `task:ready` → `task:draft` when the
approval, the spec, or a closed dependency goes away; runs on `reopened`
too; a claimed task is left alone |
| `needs-info-reply` | reopens the issue if the stale job had closed it,
so the stale comment's promise is true |
| `feature-complete` | renamed from `feature-verify`; the note says
"close it once the completion conditions hold" |
| `request-close` (new) | a feature closed as completed closes the
`request:new` issue on its `Request:` line, with a pointer |
| `pr-closed-unmerged` (new) | a PR closed without merging releases the
claim on every issue its body closes, with a comment; label untouched |
| `stale-claims` (new) | daily: a `*:ready` issue with an assignee and
no comment, label change, or commit on `<kind>/<n>` for three days is
unassigned, with a comment |

**Manifest.** Restores `bug:triaged`, which #140 lost to a reformat (the
live label exists), and adds the three blocked labels.

## Not done, on purpose

Review-feedback state, an unlabelled-issue nudge, and
`feature:specified` were left out as low value for now.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant