@rallycry/conveyor-skills 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rallycry/conveyor-skills",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "Shared Claude Code skills for Conveyor consumer repos, linked into .claude/skills via the conveyor-skills CLI",
5
5
  "keywords": [
6
6
  "claude",
@@ -122,7 +122,10 @@ parked and the chat marker IS the claim.
122
122
 
123
123
  Post to chat at real milestones only — claim, a blocking discovery, gates
124
124
  green, PR — never play-by-play. Your turn output is not visible to the team;
125
- chat is.
125
+ chat is. Post a blocking discovery with `milestone: "blocked"` only if you are
126
+ actually parked and cannot continue until a human acts — it is a quiet parking
127
+ note that pages nobody. When you need an answer, ask with AskUserQuestion; that
128
+ is what pages a person.
126
129
 
127
130
  **Saving the plan and card fields:** `mcp__conveyor__update_task` handles
128
131
  title, description, plan, status, and `githubBranch` on both surfaces. Story
@@ -233,13 +236,14 @@ the merged base.
233
236
 
234
237
  The card is in ReviewPR. What happens next depends on who is driving:
235
238
 
236
- > **Environment — a pod is woken; a standalone local run is not.** In a **pod**
237
- > you stay wake-able: the system wakes you on CI results and review comments,
238
- > so go idle rather than polling. In a **standalone local run** there is no
239
- > wake mechanism report the card and PR state to the user and STOP. No
240
- > pacing, no loop, no babysitting; a follow-up CI fix is a fresh ask. Under
241
- > `conveyor-local-loop` the loop's own Babysit tier owns aftercare instead, and
242
- > its pacing rules govern.
239
+ > **Environment — a pod is woken; a standalone local run is not.** In a
240
+ > **pod** you stay wake-able: the system wakes you on CI results and review
241
+ > comments, so go idle rather than polling. That holds only once the PR exists
242
+ > — mid-pack, nothing wakes either environment (see the pack path's pacing
243
+ > rule). In a **standalone local run** there is no wake mechanism report the
244
+ > card and PR state to the user and STOP. No pacing, no loop, no babysitting;
245
+ > a follow-up CI fix is a fresh ask. Under `conveyor-local-loop` the loop's
246
+ > own Babysit tier owns aftercare instead, and its pacing rules govern.
243
247
 
244
248
  When you are the one handling it:
245
249
 
@@ -82,23 +82,44 @@ session memory for pack state.
82
82
 
83
83
  Work children **one at a time**. Interleaving them thrashes branch state.
84
84
 
85
- ## Pacing — a pack is many turns, not one
86
-
87
- A pack of any size will not fit in a single turn, and there is no partial
88
- credit for a tree left mid-child. Treat **one iteration = one step** (implement
89
- one child, or merge one, or the finale) and end the turn on a committed,
90
- pushed state.
91
-
92
- - Driven by `/loop` (locally) or woken by events (in a pod): do one step, then
93
- end the turn. Under `/loop` with no interval, arm the next wake before
94
- ending — short (60–90s) while there is a child ready to work, long
95
- (1200–1800s) while waiting on something external, and **stop the loop** once
96
- the finale PR is open and quiet.
97
- - Invoked bare with no loop: do one step, report where the pack stands and what
98
- the next step is, and stop. Do not self-schedule.
85
+ ## Pacing — a pack is many steps, not many turns
86
+
87
+ A child boundary is not a turn boundary. Keep driving the pack in the same
88
+ turn: merge, implement the next child, merge, cross-reference, finale. Nothing
89
+ wakes a pack session between children not locally, and not in a pod, where
90
+ children have no PRs, no builds, and no CI to generate an event. A turn that
91
+ ends with a child still ready is a stalled pack, not a paused one: locally it
92
+ sits until a human re-runs the skill; in a pod it idles out, sleeps, and waits
93
+ on the pack watchdog roughly an hour lost per occurrence.
94
+
95
+ End a turn with children remaining ONLY when a wake is guaranteed:
96
+
97
+ - **A background gate is in flight.** Its completion notification re-invokes
98
+ you. (Launch it with the harness's `run_in_background`; hand-rolled
99
+ backgrounding wakes nothing.)
100
+ - **You are blocked on a human** — the parked protocol below. The user's chat
101
+ reply is the wake.
102
+ - **The finale PR is open and quiet** — the Babysit tier. Green and quiet is
103
+ the end.
104
+
105
+ Any other end-of-turn must arm `ScheduleWakeup` first: 60–90s, prompt
106
+ restating which child comes next. That is the pod-sanctioned mechanism (the
107
+ pod prompt allows `ScheduleWakeup` exactly when nothing else will notify you),
108
+ and it is a rare exception, not the cadence. Never end a turn "to report
109
+ progress" — chat is where progress goes, and posting there does not end the
110
+ pack.
111
+
112
+ **Pre-exit invariant.** Before ending ANY turn, re-run
113
+ `mcp__conveyor__list_subtasks`. A child that is `Open` with its dependencies
114
+ met, or `InProgress` under your claim, plus no background job in flight and no
115
+ parked question outstanding, means you are not done: continue, or arm the
116
+ wake. Ending a turn in that state without a wake is the bug this section
117
+ exists to prevent.
99
118
 
100
119
  `conveyor-local-loop` supplies its own pacing table and its own claim-marker
101
- prefix; when running under it, those govern.
120
+ prefix; when running under it, those govern. Under `/loop` the invariant above
121
+ still holds — the loop's re-invocation is a fallback for a dropped wake, never
122
+ a reason to stop after one child.
102
123
 
103
124
  ## Implement a child
104
125
 
@@ -134,8 +134,11 @@ touching Conveyor, unless they asked you to just ship it.
134
134
  > create a NEW card, which is the local/MCP shape; `mcp__conveyor__create_task`
135
135
  > does not exist in a pod. In a pod, the card exists and you are on it: save
136
136
  > the plan with `mcp__conveyor__update_task` (`plan`, and `description` if it
137
- > needs sharpening), post the same recommendation message to chat, and stop —
138
- > a pod does not promote its own card to Open. If the pod also has to leave
137
+ > needs sharpening), post the same recommendation message to chat with
138
+ > `milestone: "plan_ready"`, and stop — a pod does not promote its own card to
139
+ > Open. A parked plan is never `blocked`: that milestone means you cannot
140
+ > continue until a human acts, and it pages nobody. To page a person, ask them
141
+ > with AskUserQuestion. If the pod also has to leave
139
142
  > plan mode, note that `update_task` carries no story points or risk; those go
140
143
  > through `mcp__conveyor__update_task_properties`. Everything in Phases 1-3 is
141
144
  > identical in both environments. To break a large pod card into a pack, use