Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 13 additions & 7 deletions .agents/skills/unattended-handoff/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,9 +160,12 @@ does not qualify, since skipping one costs nothing and a guess costs a revert an

## The Picker

1. **Check the promotion first** under `main` or `release`. Where an open `decision` issue names
the open develop -> main pull request, return `STOP` before picking anything, since every worker
this run dispatched would meet that same decision after merging its own work to develop.
1. **Check the promotion first** under `main` or `release`. Where an open `decision` issue states,
in its body or in a comment on it, that it blocks the open develop -> main pull request, as
"Parking" step 2 has it state, return `STOP` before picking anything, since every worker
this run dispatched would meet that same decision after merging its own work to develop. Read
them with `gh issue list --repo "<owner>/<repo>" --label decision --state open --limit 100
--json number,body,comments` under step 2's full-page check.
2. **Read the open handoffs** with labels and update times, `gh issue list --repo "<owner>/<repo>"
--label handoff --state open --limit 100 --json number,title,labels,updatedAt`, since `handoff.py
tracks` prints neither. Where it returns as many rows as the limit, the list may be truncated, so
Expand Down Expand Up @@ -194,8 +197,10 @@ does not qualify, since skipping one costs nothing and a guess costs a revert an
read its comments with `gh issue view "<n>" --repo "<owner>/<repo>" --comments`, since `resume`
prints only the body and a parked lane's state is in its parking comment. A lane handed back by
an attended session has a closed predecessor holding that comment, so read the predecessor's
comments too. Where either names a decision issue, read the answer recorded there and follow it,
since it is what unblocked the lane. Re-derive live state rather than trusting any of them, per
comments too. Where the parking comment names the decision issue the lane waits on, read the
answer recorded there and follow it, since it is what unblocked the lane. A lesson issue the
comment also names, per step 6, is its own work rather than this lane's, so the worker neither
follows it nor parks on it. Re-derive live state rather than trusting any of them, per
`session-handoff` "Resuming".
2. **Isolate** in a worktree of its own, per `repo-worktree`, on the branch the handoff names or on
`feature/<track>`.
Expand Down Expand Up @@ -245,8 +250,9 @@ interruption part way leaves the work findable rather than lost.
answered.
3. **Comment the state on the handoff**, filing any lesson first per worker step 6 so the comment
can name it: what is done, the branch and pull request, whether the worktree was left standing,
what remains, and the decision issue it now waits on. This comment is what the next session on
the lane resumes from, so it is complete enough to continue with no other context.
what remains, and the decision issue it now waits on, named as that apart from any lesson issue
the comment also names. This comment is what the next session on the lane resumes from, so it
is complete enough to continue with no other context.
4. **Label the handoff `blocked`**, per `GOVERNANCE.md` "Durable Knowledge and Self-Improvement".
The picker skips it from then on, and the attended session takes it first.

Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1a69a9029eef4d65
0429cd90c8d7ea9a
20 changes: 13 additions & 7 deletions .claude-plugin/fleet-skills/skills/unattended-handoff/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,9 +160,12 @@ does not qualify, since skipping one costs nothing and a guess costs a revert an

## The Picker

1. **Check the promotion first** under `main` or `release`. Where an open `decision` issue names
the open develop -> main pull request, return `STOP` before picking anything, since every worker
this run dispatched would meet that same decision after merging its own work to develop.
1. **Check the promotion first** under `main` or `release`. Where an open `decision` issue states,
in its body or in a comment on it, that it blocks the open develop -> main pull request, as
"Parking" step 2 has it state, return `STOP` before picking anything, since every worker
this run dispatched would meet that same decision after merging its own work to develop. Read
them with `gh issue list --repo "<owner>/<repo>" --label decision --state open --limit 100
--json number,body,comments` under step 2's full-page check.
2. **Read the open handoffs** with labels and update times, `gh issue list --repo "<owner>/<repo>"
--label handoff --state open --limit 100 --json number,title,labels,updatedAt`, since `handoff.py
tracks` prints neither. Where it returns as many rows as the limit, the list may be truncated, so
Expand Down Expand Up @@ -194,8 +197,10 @@ does not qualify, since skipping one costs nothing and a guess costs a revert an
read its comments with `gh issue view "<n>" --repo "<owner>/<repo>" --comments`, since `resume`
prints only the body and a parked lane's state is in its parking comment. A lane handed back by
an attended session has a closed predecessor holding that comment, so read the predecessor's
comments too. Where either names a decision issue, read the answer recorded there and follow it,
since it is what unblocked the lane. Re-derive live state rather than trusting any of them, per
comments too. Where the parking comment names the decision issue the lane waits on, read the
answer recorded there and follow it, since it is what unblocked the lane. A lesson issue the
comment also names, per step 6, is its own work rather than this lane's, so the worker neither
follows it nor parks on it. Re-derive live state rather than trusting any of them, per
`session-handoff` "Resuming".
2. **Isolate** in a worktree of its own, per `repo-worktree`, on the branch the handoff names or on
`feature/<track>`.
Expand Down Expand Up @@ -245,8 +250,9 @@ interruption part way leaves the work findable rather than lost.
answered.
3. **Comment the state on the handoff**, filing any lesson first per worker step 6 so the comment
can name it: what is done, the branch and pull request, whether the worktree was left standing,
what remains, and the decision issue it now waits on. This comment is what the next session on
the lane resumes from, so it is complete enough to continue with no other context.
what remains, and the decision issue it now waits on, named as that apart from any lesson issue
the comment also names. This comment is what the next session on the lane resumes from, so it
is complete enough to continue with no other context.
4. **Label the handoff `blocked`**, per `GOVERNANCE.md` "Durable Knowledge and Self-Improvement".
The picker skips it from then on, and the attended session takes it first.

Expand Down
20 changes: 13 additions & 7 deletions .github/skills/unattended-handoff/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,9 +160,12 @@ does not qualify, since skipping one costs nothing and a guess costs a revert an

## The Picker

1. **Check the promotion first** under `main` or `release`. Where an open `decision` issue names
the open develop -> main pull request, return `STOP` before picking anything, since every worker
this run dispatched would meet that same decision after merging its own work to develop.
1. **Check the promotion first** under `main` or `release`. Where an open `decision` issue states,
in its body or in a comment on it, that it blocks the open develop -> main pull request, as
"Parking" step 2 has it state, return `STOP` before picking anything, since every worker
this run dispatched would meet that same decision after merging its own work to develop. Read
them with `gh issue list --repo "<owner>/<repo>" --label decision --state open --limit 100
--json number,body,comments` under step 2's full-page check.
2. **Read the open handoffs** with labels and update times, `gh issue list --repo "<owner>/<repo>"
--label handoff --state open --limit 100 --json number,title,labels,updatedAt`, since `handoff.py
tracks` prints neither. Where it returns as many rows as the limit, the list may be truncated, so
Expand Down Expand Up @@ -194,8 +197,10 @@ does not qualify, since skipping one costs nothing and a guess costs a revert an
read its comments with `gh issue view "<n>" --repo "<owner>/<repo>" --comments`, since `resume`
prints only the body and a parked lane's state is in its parking comment. A lane handed back by
an attended session has a closed predecessor holding that comment, so read the predecessor's
comments too. Where either names a decision issue, read the answer recorded there and follow it,
since it is what unblocked the lane. Re-derive live state rather than trusting any of them, per
comments too. Where the parking comment names the decision issue the lane waits on, read the
answer recorded there and follow it, since it is what unblocked the lane. A lesson issue the
comment also names, per step 6, is its own work rather than this lane's, so the worker neither
follows it nor parks on it. Re-derive live state rather than trusting any of them, per
`session-handoff` "Resuming".
2. **Isolate** in a worktree of its own, per `repo-worktree`, on the branch the handoff names or on
`feature/<track>`.
Expand Down Expand Up @@ -245,8 +250,9 @@ interruption part way leaves the work findable rather than lost.
answered.
3. **Comment the state on the handoff**, filing any lesson first per worker step 6 so the comment
can name it: what is done, the branch and pull request, whether the worktree was left standing,
what remains, and the decision issue it now waits on. This comment is what the next session on
the lane resumes from, so it is complete enough to continue with no other context.
what remains, and the decision issue it now waits on, named as that apart from any lesson issue
the comment also names. This comment is what the next session on the lane resumes from, so it
is complete enough to continue with no other context.
4. **Label the handoff `blocked`**, per `GOVERNANCE.md` "Durable Knowledge and Self-Improvement".
The picker skips it from then on, and the attended session takes it first.

Expand Down
Loading