From d6308bd3ef1674f66007c03f47375e763ea8a89a Mon Sep 17 00:00:00 2001 From: Dotta Date: Mon, 13 Apr 2026 10:35:41 -0500 Subject: [PATCH] Clarify Paperclip status guidance Co-Authored-By: Paperclip --- server/src/onboarding-assets/ceo/HEARTBEAT.md | 9 +++++++++ skills/paperclip/SKILL.md | 19 ++++++++++++++++++- skills/paperclip/references/api-reference.md | 8 ++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/server/src/onboarding-assets/ceo/HEARTBEAT.md b/server/src/onboarding-assets/ceo/HEARTBEAT.md index 7d297594d17..26e36a04ef7 100644 --- a/server/src/onboarding-assets/ceo/HEARTBEAT.md +++ b/server/src/onboarding-assets/ceo/HEARTBEAT.md @@ -36,6 +36,15 @@ If `PAPERCLIP_APPROVAL_ID` is set: - Never retry a 409 -- that task belongs to someone else. - Do the work. Update status and comment when done. +Status quick guide: + +- `todo`: ready to execute, but not yet checked out. +- `in_progress`: actively owned work. Agents should reach this by checkout, not by manually flipping status. +- `in_review`: waiting on review or approval, usually after handing work back to a board user or reviewer. +- `blocked`: cannot move until something specific changes. Say what is blocked and use `blockedByIssueIds` if another issue is the blocker. +- `done`: finished. +- `cancelled`: intentionally dropped. + ## 6. Delegation - Create subtasks with `POST /api/companies/{companyId}/issues`. Always set `parentId` and `goalId`. For non-child follow-ups that must stay on the same checkout/worktree, set `inheritExecutionWorkspaceFromIssueId` to the source issue. diff --git a/skills/paperclip/SKILL.md b/skills/paperclip/SKILL.md index 120d851be9e..7b4a1461b93 100644 --- a/skills/paperclip/SKILL.md +++ b/skills/paperclip/SKILL.md @@ -131,7 +131,24 @@ Done MD ``` -Status values: `backlog`, `todo`, `in_progress`, `in_review`, `done`, `blocked`, `cancelled`. Priority values: `critical`, `high`, `medium`, `low`. Other updatable fields: `title`, `description`, `priority`, `assigneeAgentId`, `projectId`, `goalId`, `parentId`, `billingCode`, `blockedByIssueIds`. +Status values: `backlog`, `todo`, `in_progress`, `in_review`, `done`, `blocked`, `cancelled`. Use the quick guide below when choosing one. Priority values: `critical`, `high`, `medium`, `low`. Other updatable fields: `title`, `description`, `priority`, `assigneeAgentId`, `projectId`, `goalId`, `parentId`, `billingCode`, `blockedByIssueIds`. + +### Status Quick Guide + +- `backlog` — not ready to execute yet. Use for parked or unscheduled work, not for something you are about to start this heartbeat. +- `todo` — ready and actionable, but not actively checked out yet. Use for newly assigned work or work that is ready to resume once someone picks it up. +- `in_progress` — actively owned work. For agents this means live execution-backed work; enter it by checkout, not by manually PATCHing the status. +- `in_review` — execution is paused pending reviewer, approver, or board/user feedback. Use this when handing work off for review, not as a generic synonym for done. +- `blocked` — cannot proceed until something specific changes. Always say what the blocker is, who must act, and use `blockedByIssueIds` when another issue is the blocker. +- `done` — the requested work is complete and no follow-up action remains on this issue. +- `cancelled` — the work is intentionally abandoned and should not be resumed. + +Practical rules: + +- For agent-assigned work, prefer `todo` until you actually checkout. Do not PATCH an issue into `in_progress` just to signal intent. +- If you are waiting on another ticket, use `blocked`, not `in_progress`, and set `blockedByIssueIds` instead of relying on `parentId` or a free-text comment alone. +- If a human asks to review or take the task back, usually reassign to that user and set `in_review`. +- `parentId` is structural only. It does not mean the parent or child is blocked unless `blockedByIssueIds` says so explicitly. **Step 9 — Delegate if needed.** Create subtasks with `POST /api/companies/{companyId}/issues`. Always set `parentId` and `goalId`. When a follow-up issue needs to stay on the same code change but is not a true child task, set `inheritExecutionWorkspaceFromIssueId` to the source issue. Set `billingCode` for cross-team work. diff --git a/skills/paperclip/references/api-reference.md b/skills/paperclip/references/api-reference.md index 02e1761c91d..225ff3ec4ab 100644 --- a/skills/paperclip/references/api-reference.md +++ b/skills/paperclip/references/api-reference.md @@ -665,10 +665,18 @@ backlog -> todo -> in_progress -> in_review -> done Terminal states: `done`, `cancelled` +- `backlog` = not ready to execute yet. +- `todo` = ready to execute, but not actively checked out yet. +- `in_progress` = actively owned work. For agents, this should correspond to a live execution path and should be entered via checkout. +- `in_review` = waiting on review or approval action, not active execution. +- `blocked` = cannot proceed until a specific blocker changes; use `blockedByIssueIds` when another issue is the blocker. +- `done` = completed. +- `cancelled` = intentionally abandoned. - `in_progress` requires an assignee (use checkout). - `started_at` is auto-set on `in_progress`. - `completed_at` is auto-set on `done`. - One assignee per task at a time. +- `parentId` is structural and does not create a blocker relationship by itself. ---