@starlein/paperclip-plugin-company-wizard 0.3.24 → 0.4.1

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.
Files changed (65) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +15 -11
  3. package/dist/manifest.js +1 -6
  4. package/dist/manifest.js.map +2 -2
  5. package/dist/ui/index.css +3 -0
  6. package/dist/ui/index.css.map +2 -2
  7. package/dist/ui/index.js +59 -30
  8. package/dist/ui/index.js.map +3 -3
  9. package/dist/worker.js +263 -81
  10. package/dist/worker.js.map +3 -3
  11. package/package.json +1 -1
  12. package/templates/ai-wizard/config-format.md +4 -4
  13. package/templates/ai-wizard/interview-system.md +3 -3
  14. package/templates/ai-wizard/single-shot-system.md +3 -3
  15. package/templates/bootstrap-instructions.md +3 -3
  16. package/templates/modules/architecture-plan/agents/ui-designer/skills/design-system.md +1 -1
  17. package/templates/modules/auto-assign/agents/ceo/heartbeat-section.md +2 -8
  18. package/templates/modules/auto-assign/agents/product-owner/heartbeat-section.md +2 -9
  19. package/templates/modules/auto-assign/module.meta.json +1 -1
  20. package/templates/modules/auto-assign/skills/auto-assign.md +18 -15
  21. package/templates/modules/backlog/agents/ceo/heartbeat-section.md +2 -9
  22. package/templates/modules/backlog/agents/product-owner/heartbeat-section.md +2 -14
  23. package/templates/modules/backlog/module.meta.json +1 -1
  24. package/templates/modules/backlog/skills/backlog-health.md +20 -21
  25. package/templates/modules/codebase-onboarding/skills/codebase-audit.md +29 -30
  26. package/templates/modules/github-repo/agents/engineer/skills/git-workflow.md +11 -7
  27. package/templates/modules/github-repo/docs/git-workflow.md +10 -6
  28. package/templates/modules/hiring-review/skills/hiring-review.md +40 -16
  29. package/templates/modules/market-analysis/agents/ux-researcher/skills/market-analysis.md +1 -1
  30. package/templates/modules/pr-review/README.md +13 -13
  31. package/templates/modules/pr-review/agents/devops/skills/infra-review.md +1 -1
  32. package/templates/modules/pr-review/agents/engineer/skills/pr-workflow.md +17 -11
  33. package/templates/modules/pr-review/agents/product-owner/skills/product-review.md +1 -1
  34. package/templates/modules/pr-review/agents/qa/skills/qa-review.md +1 -1
  35. package/templates/modules/pr-review/agents/security-engineer/skills/pr-security-review.md +1 -1
  36. package/templates/modules/pr-review/agents/ui-designer/skills/design-review.md +1 -1
  37. package/templates/modules/pr-review/agents/ux-researcher/skills/ux-review.md +1 -1
  38. package/templates/modules/pr-review/docs/pr-conventions.md +11 -8
  39. package/templates/modules/stall-detection/README.md +8 -8
  40. package/templates/modules/stall-detection/agents/ceo/heartbeat-section.md +2 -11
  41. package/templates/modules/stall-detection/agents/ceo/skills/stall-detection.md +22 -13
  42. package/templates/modules/stall-detection/module.meta.json +1 -1
  43. package/templates/modules/triage/skills/issue-triage.md +20 -33
  44. package/templates/roles/audio-designer/HEARTBEAT.md +37 -21
  45. package/templates/roles/ceo/HEARTBEAT.md +34 -56
  46. package/templates/roles/cmo/HEARTBEAT.md +37 -21
  47. package/templates/roles/code-reviewer/HEARTBEAT.md +39 -19
  48. package/templates/roles/cto/HEARTBEAT.md +33 -25
  49. package/templates/roles/customer-success/HEARTBEAT.md +39 -19
  50. package/templates/roles/devops/HEARTBEAT.md +36 -25
  51. package/templates/roles/engineer/AGENTS.md +27 -9
  52. package/templates/roles/engineer/HEARTBEAT.md +35 -21
  53. package/templates/roles/game-artist/HEARTBEAT.md +37 -21
  54. package/templates/roles/game-designer/HEARTBEAT.md +37 -21
  55. package/templates/roles/level-designer/HEARTBEAT.md +37 -21
  56. package/templates/roles/product-owner/AGENTS.md +24 -8
  57. package/templates/roles/product-owner/HEARTBEAT.md +37 -19
  58. package/templates/roles/qa/AGENTS.md +26 -11
  59. package/templates/roles/qa/HEARTBEAT.md +37 -21
  60. package/templates/roles/security-engineer/AGENTS.md +21 -23
  61. package/templates/roles/security-engineer/HEARTBEAT.md +39 -19
  62. package/templates/roles/technical-writer/HEARTBEAT.md +39 -18
  63. package/templates/roles/ui-designer/AGENTS.md +26 -9
  64. package/templates/roles/ui-designer/HEARTBEAT.md +37 -21
  65. package/templates/roles/ux-researcher/HEARTBEAT.md +37 -21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@starlein/paperclip-plugin-company-wizard",
3
- "version": "0.3.24",
3
+ "version": "0.4.1",
4
4
  "type": "module",
5
5
  "description": "AI-powered wizard to bootstrap paperclip agent companies from composable templates (for latest paperclip version)",
6
6
  "repository": "https://github.com/starlein/paperclip-plugin-company-wizard",
@@ -7,7 +7,7 @@ Respond with ONLY a JSON object (no markdown fences):
7
7
  { "title": "Additional business/product/technical goal if needed", "description": "Concrete success criteria. Do not omit user-specific goals just because a preset/module also has template goals." }
8
8
  ],
9
9
  "projects": [
10
- { "name": "Project name", "description": "Concrete project description — what is being built and key technical details.", "goals": ["Goal titles linked to this project"], "workspace": { "sourceType": "local_path", "defaultRef": "main", "setupCommand": "git init -b main", "isPrimary": true }, "executionWorkspacePolicy": { "defaultMode": "isolated_workspace", "workspaceStrategy": { "type": "git_worktree", "baseRef": "main" } } }
10
+ { "name": "Project name", "description": "Concrete project description — what is being built and key technical details.", "goals": ["Goal titles linked to this project"], "workspace": { "sourceType": "local_path", "defaultRef": "main", "setupCommand": "git init -b main", "isPrimary": true } }
11
11
  ],
12
12
  "preset": "preset-name",
13
13
  "modules": ["all-modules-to-activate-including-preset-ones"],
@@ -17,10 +17,10 @@ Respond with ONLY a JSON object (no markdown fences):
17
17
 
18
18
  Rules:
19
19
  - modules should list ALL modules to activate (including preset ones).
20
- - goals should list the user's concrete objectives. Preset/module template goals are added later by the wizard; do not replace the user's goal with a generic preset goal such as "Build a REST API" unless that is truly the whole objective.
20
+ - goals should list the user's concrete objectives. The first goal must be outcome-first/product-first: title the primary deliverable or operating outcome, not a supporting constraint. Preserve constraints in the description under "Constraints / quality bars" unless the constraint is explicitly the main project. When the brief lists secondary facts as sub-goals, keep their weight lower unless they are true independent workstreams. Preset/module template goals are added later by the wizard; do not replace the user's goal with a generic preset goal unless that is truly the whole objective.
21
21
  - projects should link to the relevant goal titles in `goals`. Include enough project detail for agents to start work. The primary project MUST say whether Paperclip should create a fresh local Git repository or use an external repo:
22
- - Fresh/new repo: use `workspace.sourceType: "local_path"`, `workspace.defaultRef: "main"`, `workspace.setupCommand: "git init -b main"`, and `workspace.isPrimary: true`.
23
- - Existing external repo (GitHub/GitLab/etc.): use `workspace.sourceType: "git_repo"`, include `repoUrl`, `repoRef`/`defaultRef` when known (default `origin/main`), and prefer isolated git worktrees via `executionWorkspacePolicy`.
22
+ - Fresh/new repo: use `workspace.sourceType: "local_path"`, `workspace.defaultRef: "main"` unless another initial branch was requested, `workspace.setupCommand: "git init -b <defaultRef>"`, and `workspace.isPrimary: true`. Do not include `executionWorkspacePolicy`.
23
+ - Existing external repo (GitHub/GitLab/etc.): use `workspace.sourceType: "git_repo"`, include `repoUrl`, and include `repoRef`/`defaultRef` exactly when the user or repository context provides one. Do not force a branch name or remote prefix. Do not include `executionWorkspacePolicy`; isolated worktrees are applied later only when Paperclip's experimental isolated-workspaces setting is enabled.
24
24
  - Do not put credentials or tokens in repository URLs or project text.
25
25
  - roles should list ALL non-base roles the company needs (including preset ones). Engineer is NOT a base role — include it if the project involves code.
26
26
  - Be pragmatic — don't over-engineer. Match the config to the actual needs described.
@@ -48,9 +48,9 @@ Don't ask about things already clear from the initial description. Skip to what'
48
48
  The user's interview answers are the primary source of context for the company. When generating the configuration:
49
49
 
50
50
  - **`companyDescription`**: Write a comprehensive 2-4 paragraph description that captures EVERYTHING learned during the interview — what the company does, what it's building, who it's for, key technical decisions, constraints, priorities, and any special context. This is the company's permanent record and the only thing that survives from the interview. Be thorough. Include specifics the user mentioned (tech stack, target market, compliance needs, design approach, etc.). Do NOT summarize into a single vague sentence.
51
- - **`goal`**: A clear, actionable goal title (what the team should accomplish first).
52
- - **`goalDescription`**: A detailed paragraph explaining the goal — scope, success criteria, constraints. Reference specifics from the interview.
53
- - **`project`** and **`projectDescription`**: Name the main project and describe it concretely. The project must explicitly state repository setup. If the user chose an external repo, use `workspace.sourceType: "git_repo"` with `repoUrl`, `repoRef`/`defaultRef`, and isolated git worktrees. If no external repo was provided, use a fresh local Git repository with `workspace.sourceType: "local_path"`, `workspace.defaultRef: "main"`, `workspace.setupCommand: "git init -b main"`, and `workspace.isPrimary: true`.
51
+ - **`goal`**: A clear, actionable, outcome-first goal title (what the team should accomplish first). Lead with the primary deliverable or operating outcome, not a supporting constraint.
52
+ - **`goalDescription`**: A detailed paragraph explaining the goal — scope, success criteria, constraints. Reference specifics from the interview. Put compliance/security/accessibility/performance constraints under "Constraints / quality bars" unless the user explicitly made one of them the primary project. If the brief mixes a main outcome with side facts, make the main outcome the top-level goal and keep side facts as acceptance criteria, risks, or true independent sub-goals.
53
+ - **`project`** and **`projectDescription`**: Name the main project and describe it concretely. The project must explicitly state repository setup. If the user chose an external repo, use `workspace.sourceType: "git_repo"` with `repoUrl`, plus `repoRef`/`defaultRef` exactly when the user or repository context provides one; do not force a branch name or remote prefix. If no external repo was provided, use a fresh local Git repository with `workspace.sourceType: "local_path"`, `workspace.defaultRef: "main"` unless another initial branch was requested, `workspace.setupCommand: "git init -b <defaultRef>"`, and `workspace.isPrimary: true`. Do not include `executionWorkspacePolicy`; the assembler applies isolated worktrees only when Paperclip's experimental isolated-workspaces setting is enabled and a usable project base ref exists.
54
54
 
55
55
  RECOMMENDATION (plain text, before the JSON):
56
56
  - One paragraph explaining your reasoning: why this preset, why these modules, why these roles.
@@ -33,11 +33,11 @@ Given a natural language description of what the user wants to build, you select
33
33
  4. List ALL non-base roles the company needs. This includes roles from the preset. If the project involves software, include `engineer`.
34
34
  5. Suggest a company name (PascalCase-friendly, short, memorable) if not obvious from the description.
35
35
  6. Write a thorough company description (2-4 paragraphs) capturing everything the user described — product, audience, tech stack, constraints, priorities, stage, and special context. This is the company's permanent record.
36
- 7. Write a clear, actionable goal title and a detailed goal description with scope and success criteria.
36
+ 7. Write a clear, actionable, outcome-first goal title and a detailed goal description with scope and success criteria. The title/opening must name the primary deliverable or operating outcome, not a supporting constraint. Keep compliance/security/accessibility/performance constraints in the description under "Constraints / quality bars" unless the user explicitly made that constraint the main project. If the brief mixes a main outcome with side facts, make the main outcome the top-level goal and keep side facts as acceptance criteria, risks, or true independent sub-goals.
37
37
  8. Name and describe the main project concretely.
38
38
  9. Always decide the repository setup for the primary project:
39
- - If the user gives an existing GitHub/GitLab/remote Git repo, set `workspace.sourceType: "git_repo"`, include `repoUrl`, set `repoRef`/`defaultRef` when known (default to `origin/main`), and use `executionWorkspacePolicy.defaultMode: "isolated_workspace"` with a `git_worktree` strategy.
40
- - If no external repository is given, assume Paperclip should create a fresh local Git repository. Set `workspace.sourceType: "local_path"`, `workspace.defaultRef: "main"`, `workspace.setupCommand: "git init -b main"`, and `workspace.isPrimary: true`.
39
+ - If the user gives an existing GitHub/GitLab/remote Git repo, set `workspace.sourceType: "git_repo"`, include `repoUrl`, and set `repoRef`/`defaultRef` exactly when the user or repository context provides one. Do not force a branch name or remote prefix; Paperclip's project/worktree settings decide the worktree base ref.
40
+ - If no external repository is given, assume Paperclip should create a fresh local Git repository. Set `workspace.sourceType: "local_path"`, `workspace.defaultRef: "main"` unless the user requested another initial branch, `workspace.setupCommand: "git init -b <defaultRef>"`, and `workspace.isPrimary: true`. Do not include `executionWorkspacePolicy`; the assembler applies isolated worktrees only when Paperclip's experimental isolated-workspaces setting is enabled and a usable project base ref exists.
41
41
  - Never include credentials or tokens in repository URLs or project text.
42
42
 
43
43
  First write one paragraph explaining your reasoning: why this preset, why these modules, why these roles.
@@ -16,7 +16,7 @@ Each section (Goals, Projects, Labels, Agents, Issues, Routines) contains object
16
16
  **Creation order** (respects dependencies):
17
17
 
18
18
  1. **Goals** — create with `POST /api/companies/{companyId}/goals` using `{ title, description, level, parentId? }`. Top-level first, then sub-goals: sub-goals have `parentId: → "Parent Title"`, so create the parent first and use its ID. Valid `level`: `company`, `team`, `agent`, `task`. Valid `status` (optional, defaults to `planned`): `planned`, `active`, `achieved`, `cancelled`.
19
- 2. **Projects** — create with `POST /api/companies/{companyId}/projects` using `{ name, description, goalIds, workspace, executionWorkspacePolicy? }`. Reference goals via `goalIds`; create after all goals exist. Valid project `status` (optional, defaults to `backlog`): `backlog`, `planned`, `in_progress`, `completed`, `cancelled` — **`active` is a goal status, NOT a project status; do not set it on a project.** Create the project workspace as an object, not a raw string. Fresh/new repositories use a local project workspace such as `workspace: { sourceType: "local_path", cwd: "...", defaultRef: "main", setupCommand: "git init -b main", isPrimary: true }` and must initialize Git before work starts; do not attach an `executionWorkspacePolicy` to a fresh local repo (the repo has no base ref yet). Existing repository-backed projects use `workspace: { sourceType: "git_repo", repoUrl: "...", repoRef: "origin/main", defaultRef: "origin/main", isPrimary: true }` and may include `executionWorkspacePolicy` for isolated worktrees. Never inline credentials in repo URLs.
19
+ 2. **Projects** — create with `POST /api/companies/{companyId}/projects` using `{ name, description, goalIds, workspace, executionWorkspacePolicy? }`. Reference goals via `goalIds`; create after all goals exist. Valid project `status` (optional, defaults to `backlog`): `backlog`, `planned`, `in_progress`, `completed`, `cancelled` — **`active` is a goal status, NOT a project status; do not set it on a project.** Create the project workspace as an object, not a raw string. Fresh/new repositories use a local project workspace such as `workspace: { sourceType: "local_path", cwd: "...", defaultRef: "main", setupCommand: "git init -b main", isPrimary: true }` and must initialize Git before work starts; do not attach an `executionWorkspacePolicy` to a fresh local repo (the repo has no base ref yet). Existing repository-backed projects use the workspace refs shown in this bootstrap exactly as rendered; do not rewrite them to `main`, `master`, or add/remove `origin/`. When this bootstrap includes `executionWorkspacePolicy`, send it exactly as rendered; it was included only because Paperclip's experimental isolated-workspaces setting is enabled, and its `workspaceStrategy.baseRef` comes from project/worktree settings. Never inline credentials in repo URLs.
20
20
  3. **Labels** — if the bootstrap includes an Issues section, create issue labels first (`POST /api/companies/{companyId}/labels` with `{ name, color }`). Colors must be 6-digit hex strings with a leading `#`.
21
21
  4. **Agents** — hire via governance (`POST /api/companies/{companyId}/agent-hires`) using the listed `adapterType`, nested `adapterConfig`, `runtimeConfig`, `capabilities`, and `metadata`. The Company Wizard already created the CEO for this bootstrap issue; reuse/update any existing agent with the same `metadata.templateRole` instead of creating a duplicate.
22
22
  5. **Issues** — every issue must include `projectId`, including subtasks. Subtasks must also include `parentId`. Assign via `assigneeAgentId` or `assigneeUserId`, and attach labels via `labelIds`. If you use `POST /api/issues/{parentId}/children`, still pass `projectId` explicitly for clarity; if you use `POST /api/companies/{companyId}/issues`, passing both `parentId` and `projectId` is mandatory for this bootstrap.
@@ -27,11 +27,11 @@ Each section (Goals, Projects, Labels, Agents, Issues, Routines) contains object
27
27
  - Parent and subissue status are related by intent, not automatically coupled by tooling.
28
28
  - Do not auto-mark a parent `done` just because a child changed status.
29
29
  - Do not auto-reopen a `done` parent/subissue unless you have an explicit reason and record it in a comment.
30
- - Do not implicitly reuse a parent workspace for subissues; keep `projectId` explicit and use isolated checkouts/workspaces unless explicit instructions request shared workspace use.
30
+ - Do not implicitly reuse a parent workspace for subissues; keep `projectId` explicit and respect the project/issue execution workspace policy. Use isolated workspaces only when Paperclip created one for the issue.
31
31
 
32
32
  **Review workflow guardrail:**
33
33
 
34
- - Required PR reviews are tracked as explicit assigned child issues, not @-mentions. When an engineer opens a PR, set the implementation issue to `in_review` and create review child issues assigned to Code Reviewer and Product Owner, plus Security/QA/UI/DevOps child issues when that domain is materially affected. Reviewers close only their own child issue; the engineer owns merge and parent closure. Follow `docs/pr-conventions.md` when the PR review module is active.
34
+ - Required PR reviews use the issue's `executionPolicy` review/approval stages, not @-mentions and not separate child review issues. When an engineer opens a PR, set the implementation issue to `in_review` with the resolved execution policy: QA review when present, Security review only for security-relevant changes, Product Owner approval for scope/intent, and a final Engineer merge gate after verification is recorded. Each active participant records their decision through the normal issue update route (`approved` by PATCHing toward `done`, `changes_requested` by PATCHing back to `in_progress`), which is the issue-level reviewed/approved audit trail (`reviewed_by` / `approved_by` metadata where Paperclip exposes it). The Engineer merge gate must verify the PR base against the project/worktree base ref shown in `heartbeat-context`, merge before approving, close/archive any isolated worktree when one exists and close-readiness allows it, and only then record final approval. Follow `docs/pr-conventions.md` when the PR review module is active.
35
35
 
36
36
  **Secrets guardrail:**
37
37
 
@@ -14,7 +14,7 @@ You own the visual design system. Establish the foundational patterns that ensur
14
14
  - **Responsive breakpoints**: Mobile, tablet, desktop sizing approach
15
15
  3. Create implementation issues for the engineer:
16
16
  - `POST /api/companies/{companyId}/issues` for CSS/design token setup, component library scaffolding. Include the active `projectId` (and `goalId` / `parentId` when applicable).
17
- 4. @-mention the Engineer when the system is ready for implementation
17
+ 4. Assign or hand off implementation issues to the Engineer with a concrete next action; do not rely on generic @-mentions.
18
18
 
19
19
  ## Rules
20
20
 
@@ -1,9 +1,3 @@
1
- ## Assignment Check (Fallback)
1
+ ## Auto-Assign Routine Fallback
2
2
 
3
- Only if the Product Owner is absent or stalled:
4
-
5
- 1. Query idle agents: `GET /api/companies/{companyId}/agents`, then filter client-side for those where `status == "idle"`
6
- 2. If agents are idle with unassigned issues AND PO hasn't acted recently:
7
- - Assign the highest-priority unassigned issue to the most suitable idle agent.
8
- - Comment on the issue noting the assignment.
9
- 3. If the PO is active, skip this step.
3
+ Do not scan for unassigned work during a normal heartbeat. If you are assigned a routine-run issue titled like "Auto-assign unassigned issues" and no Product Owner is available, use `skills/auto-assign.md`, then summarize assignments on the routine issue and exit.
@@ -1,10 +1,3 @@
1
- ## Assignment Check
1
+ ## Auto-Assign Routine
2
2
 
3
- After handling your own assignments:
4
-
5
- 1. Query idle agents: `GET /api/companies/{companyId}/agents`, then filter client-side for those where `status == "idle"`
6
- 2. Query unassigned todo issues: `GET /api/companies/{companyId}/issues?status=todo&unassigned=true`
7
- 3. For each idle agent that matches the issue requirements:
8
- - Pick the highest-priority unassigned issue.
9
- - Assign it: `PATCH /api/issues/{id}` with `assigneeAgentId`.
10
- 4. Record assignments in daily notes.
3
+ Do not scan for unassigned work during a normal heartbeat. When you are assigned a routine-run issue titled like "Auto-assign unassigned issues", use `skills/auto-assign.md`, then summarize assignments on the routine issue and exit.
@@ -17,7 +17,7 @@
17
17
  "routines": [
18
18
  {
19
19
  "title": "Auto-assign unassigned issues",
20
- "description": "Find unassigned todo issues and assign to the best available agent based on role and workload.",
20
+ "description": "Routine-run checklist: review unassigned todo issues, assign each actionable item to the best available agent based on role/workload, record evidence and next actions on the routine issue, then exit.",
21
21
  "assignTo": "capability:auto-assign",
22
22
  "schedule": "0 */2 * * *",
23
23
  "priority": "medium",
@@ -1,23 +1,26 @@
1
1
  # Skill: Auto-Assign
2
2
 
3
- You own issue assignment. Match issues to the right agents based on skills and availability.
3
+ You own issue assignment when you are explicitly assigned an auto-assignment routine run. This is not an every-heartbeat background scan.
4
4
 
5
- ## Assignment Check
5
+ ## When To Use This Skill
6
+
7
+ Use this only when the current assigned issue/routine is titled like "Auto-assign unassigned issues" or explicitly asks you to rebalance assignments. Otherwise follow the normal Paperclip heartbeat rule: never look for unassigned work.
6
8
 
7
- Run this on every heartbeat, after handling your own assignments.
9
+ ## Assignment Check
8
10
 
9
- 1. Query idle agents: `GET /api/companies/{companyId}/agents`, then filter client-side for those where `status == "idle"`
10
- 2. Query unassigned todo issues: `GET /api/companies/{companyId}/issues?status=todo&unassigned=true`
11
- 3. For each idle agent that matches the issue requirements:
12
- - Pick the highest-priority unassigned issue
13
- - Assign it: `PATCH /api/issues/{id}` with `assigneeAgentId`
14
- - The agent will wake on the assignment trigger
15
- 4. Record assignments in your daily notes.
11
+ 1. Confirm this is the active routine-run issue and checkout it before mutating the board.
12
+ 2. Query available agents: `GET /api/companies/{companyId}/agents` and consider only active agents that are idle/available and within budget.
13
+ 3. Query candidate issues using the board's current issue API for unassigned `todo` work, scoped to the relevant project/goal when the routine has one.
14
+ 4. Skip issues that are blocked, awaiting approval/review, missing acceptance criteria, or already have active execution state.
15
+ 5. Match issue labels, required skills, project context, and priority to agent role/capabilities.
16
+ 6. Assign at most one issue per available agent: `PATCH /api/issues/{id}` with `assigneeAgentId` and an assignment comment explaining why.
17
+ 7. Leave a routine-run comment summarizing assigned issue ids, skipped issue ids, and gaps needing Product Owner/CEO attention.
18
+ 8. Mark the routine-run issue done when complete.
16
19
 
17
20
  ## Rules
18
21
 
19
- - Match issues to agents by role/capabilities. Don't assign code tasks to non-engineering agents.
20
- - Assign one issue at a time per agent. Don't overload.
21
- - If no suitable match exists, leave the issue unassigned and note it.
22
- - Respect agent budget. Don't assign to agents near their budget limit.
23
- - Prioritize unblocking over optimization a good-enough assignment now beats a perfect one later.
22
+ - Do not run this from normal heartbeats.
23
+ - Do not self-assign random unassigned work.
24
+ - Do not assign code tasks to non-engineering agents or security-sensitive work without security coverage.
25
+ - Respect budgets, pause/cancel states, approval gates, `blockedByIssueIds`, and executionPolicy.
26
+ - If no suitable match exists, leave the issue unassigned and state the reason in the routine-run comment.
@@ -1,10 +1,3 @@
1
- ## Backlog Health Check (Fallback)
1
+ ## Backlog Health Routine Fallback
2
2
 
3
- Only if the Product Owner is absent or stalled:
4
-
5
- 1. Query unassigned issues: `GET /api/companies/{companyId}/issues?status=todo&unassigned=true`
6
- 2. If fewer than 1 unassigned issue AND PO hasn't acted recently:
7
- - Create 1-2 high-priority issues from the roadmap to keep engineers unblocked.
8
- - Attach `labelIds` — fetch via `GET /api/companies/{companyId}/labels`. If none exist, create defaults first (see `backlog-health` skill).
9
- - Tag the PO to take over backlog grooming.
10
- 3. If the PO is active and backlog has 1+ issues, skip this step.
3
+ Do not groom the backlog during a normal heartbeat unless that is your assigned issue. If you are assigned a routine-run issue titled like "Backlog grooming" and no Product Owner is available, use `skills/backlog-health.md`, then summarize generated/updated issues on the routine issue and exit.
@@ -1,15 +1,3 @@
1
- ## Backlog Health Check
1
+ ## Backlog Health Routine
2
2
 
3
- After handling your own assignments:
4
-
5
- 1. Query unassigned issues: `GET /api/companies/{companyId}/issues?status=todo&unassigned=true`
6
- 2. If fewer than 3 unassigned issues remain:
7
- - Review the company goal and current progress.
8
- - Identify the next logical chunk of work from the roadmap.
9
- - Create 3-5 new issues via `POST /api/companies/{companyId}/issues`, making sure each payload includes the correct `projectId`.
10
- - Each issue needs: `title`, `description`, `priority`, `projectId`, `goalId`, `labelIds`.
11
- - Use the active roadmap project's `projectId`. Do not leave top-level backlog issues projectless.
12
- - Fetch labels once per session: `GET /api/companies/{companyId}/labels`. If none exist, create them first (see `backlog-health` skill).
13
- - Write clear acceptance criteria. Leave issues unassigned.
14
- - Only create subissues for independently deliverable slices. Do not split tightly coupled implementation across sibling subissues.
15
- 3. Record what you generated in daily notes.
3
+ Do not groom the backlog during a normal heartbeat unless that is your assigned issue. When you are assigned a routine-run issue titled like "Backlog grooming" or "Backlog health", use `skills/backlog-health.md`, then summarize generated/updated issues on the routine issue and exit.
@@ -22,7 +22,7 @@
22
22
  "routines": [
23
23
  {
24
24
  "title": "Backlog grooming",
25
- "description": "Ensure the backlog keeps at least 8 actionable unassigned issues ready. If running low, generate new issues from the roadmap so agents never idle waiting for work.",
25
+ "description": "Routine-run checklist: inspect roadmap/backlog health, ensure at least 8 actionable ready issues exist, create scoped issues only when capacity is low, link artifacts/goals/projects, summarize changes on the routine issue, then exit.",
26
26
  "assignTo": "capability:backlog-health",
27
27
  "schedule": "0 */4 * * *",
28
28
  "priority": "medium",
@@ -1,6 +1,10 @@
1
1
  # Skill: Backlog Health
2
2
 
3
- You own the product backlog pipeline.
3
+ You own the product backlog pipeline when you are explicitly assigned a backlog-grooming routine run or backlog-planning issue. This is not an every-heartbeat background scan.
4
+
5
+ ## When To Use This Skill
6
+
7
+ Use this only when the current assigned issue/routine is titled like "Backlog grooming", "Backlog health", "Create roadmap", or explicitly asks you to decompose product work. Otherwise follow your normal assigned work.
4
8
 
5
9
  ## Label Setup
6
10
 
@@ -21,27 +25,22 @@ Add additional labels if the roadmap calls for them (e.g., `docs`, `design`, `se
21
25
 
22
26
  ## Backlog Health Check
23
27
 
24
- Run this on every heartbeat, after handling your own assignments.
25
-
26
- 1. Query unassigned issues: `GET /api/companies/{companyId}/issues?status=todo&unassigned=true`
27
- 2. If fewer than 3 unassigned issues remain:
28
- - Review the company goal and current progress
29
- - Identify the next logical chunk of work from the roadmap
30
- - Create 3-5 new issues via `POST /api/companies/{companyId}/issues`, making sure each payload includes the correct `projectId`
31
- - Each issue must have: `title`, `description`, `priority`, `projectId`, `goalId`, `labelIds`
32
- - Use the current roadmap project's `projectId`; never create top-level backlog issues with `projectId: null`
33
- - Fetch label IDs once per session: `GET /api/companies/{companyId}/labels`
34
- - Write clear acceptance criteria in the description
35
- - Leave issues unassigned — assignment happens separately
36
- 3. Record what you generated in your daily notes.
28
+ 1. Checkout the assigned backlog/routine issue before mutating the board.
29
+ 2. Read the current company goals, roadmap/project context, existing issue documents, and recent decision log entries.
30
+ 3. Query existing issues for the relevant project/goal and avoid duplicates.
31
+ 4. If the backlog is thin or unclear, create 3-5 small actionable issues via `POST /api/companies/{companyId}/issues`.
32
+ 5. Each issue must include: `title`, acceptance-oriented `description`, `priority`, `projectId`, `goalId` when known, and `labelIds`.
33
+ 6. Use `blockedByIssueIds` for real dependencies instead of free-text blockers.
34
+ 7. Leave issues unassigned unless the routine explicitly includes assignment. Assignment happens through the auto-assign routine or manager handoff.
35
+ 8. Record generated issue ids and rationale in the routine issue comment; use issue documents for long plans.
36
+ 9. Mark the routine-run issue done when complete.
37
37
 
38
38
  ## Rules
39
39
 
40
- - Don't create duplicate issues. Check existing issues before creating new ones.
41
- - Keep issues small and actionable. Each should be completable in a single agent session.
42
- - Split into subissues only when each child can be completed, tested, and merged independently in its own isolated workspace.
43
- - Do not split tightly coupled implementation work across sibling subissues (same core code path/file cluster changed together). Keep coupled work in one issue, or sequence it explicitly so later work starts only after the prerequisite issue is done.
44
- - Set priority based on roadmap order and dependencies.
40
+ - Do not run this from normal heartbeats.
41
+ - Do not create top-level backlog issues with `projectId: null` when a project exists.
42
+ - Keep issues small and actionable. Each should be completable, tested, and reviewed independently.
43
+ - Split into subissues only when each child can be completed independently; avoid splitting tightly coupled implementation across sibling subissues.
45
44
  - Always attach at least one label to every issue you create.
46
- - If the goal is fully decomposed into issues, don't create more. Report to the CEO instead.
47
- - Coordinate with the CEO on strategic priorities when unclear.
45
+ - If the goal is fully decomposed into issues, do not create more. Report status and next review trigger to the CEO/Product Owner.
46
+ - Work products such as roadmap drafts or decomposition tables belong in issue documents/artifacts, not only comments.
@@ -1,6 +1,10 @@
1
1
  # Skill: Codebase Audit
2
2
 
3
- You are responsible for understanding the existing codebase and maintaining its health over time. This skill has two modes: initial audit (first run) and ongoing health checks (subsequent heartbeats).
3
+ You are responsible for understanding the existing codebase and maintaining its health over time. This skill has two modes: initial audit and assigned follow-up health checks.
4
+
5
+ ## When To Use This Skill
6
+
7
+ Use this when assigned a codebase-audit issue, codebase-health routine, or explicit cleanup/planning task. Do not refactor opportunistically during unrelated heartbeats.
4
8
 
5
9
  ## Initial Audit
6
10
 
@@ -8,38 +12,33 @@ Run this when `docs/CODEBASE-AUDIT.md` does not yet exist.
8
12
 
9
13
  1. Map the project structure — identify key directories, entry points, and architectural layers.
10
14
  2. Read configuration files (package.json, tsconfig, Dockerfile, CI configs) to understand the tech stack and build pipeline.
11
- 3. Identify the dependency graph — which modules depend on which, where are the coupling hotspots.
12
- 4. Assess test coverage — find untested code paths, missing test files, or weak assertions.
13
- 5. Identify tech debt — dead code, unused exports, overly complex functions, inconsistent patterns, duplicated logic.
14
- 6. Check for code quality issues — long files, deep nesting, functions with too many parameters, missing error handling at boundaries.
15
- 7. Document everything in `docs/CODEBASE-AUDIT.md`:
16
- - Architecture overview (layers, key components, data flow)
17
- - Tech stack summary
18
- - Tech debt inventory (ranked by severity: critical, major, minor)
19
- - Test coverage assessment
20
- - Recommended cleanup priorities
21
- 8. Create follow-up issues for the top cleanup opportunities (one issue per fix, small and actionable).
22
-
23
- ## Ongoing Health Checks
24
-
25
- Run this on every heartbeat when `docs/CODEBASE-AUDIT.md` already exists.
26
-
27
- 1. Check recent commits for newly introduced complexity or tech debt.
28
- 2. Look for refactoring opportunities in code you or other agents have touched.
29
- 3. When fewer than 3 open cleanup issues remain, identify the next batch from the audit.
30
- 4. Execute small cleanup tasks directly when the fix is obvious and low-risk:
31
- - Remove dead code and unused imports
32
- - Fix inconsistent naming or formatting
33
- - Simplify overly complex conditionals
34
- - Extract duplicated logic into shared utilities
15
+ 3. Identify the dependency graph — modules, coupling hotspots, and risky boundaries.
16
+ 4. Assess test coverage — untested paths, missing tests, weak assertions.
17
+ 5. Identify tech debt — dead code, unused exports, complex functions, inconsistent patterns, duplicated logic.
18
+ 6. Check for code quality issues — long files, deep nesting, too many parameters, missing boundary error handling.
19
+ 7. Document findings in `docs/CODEBASE-AUDIT.md` or an issue document/work product:
20
+ - architecture overview
21
+ - tech stack summary
22
+ - tech debt inventory ranked by severity
23
+ - test coverage assessment
24
+ - recommended cleanup priorities
25
+ 8. Create follow-up issues for top cleanup opportunities; keep each issue small, scoped, project-linked, and acceptance-driven.
26
+
27
+ ## Assigned Health Checks
28
+
29
+ When assigned an audit refresh/health-check issue:
30
+
31
+ 1. Read the existing audit document and recent relevant changes.
32
+ 2. Look for newly introduced complexity or tech debt in touched areas.
33
+ 3. Update the audit only when architecture or debt landscape changed materially.
34
+ 4. Execute small cleanup tasks only when the issue explicitly asks for implementation and the fix is low-risk.
35
35
  5. For larger refactors, create issues with clear scope and rationale instead of acting immediately.
36
- 6. Update `docs/CODEBASE-AUDIT.md` when the architecture or tech debt landscape changes significantly.
36
+ 6. Record verification and attach the updated audit as a work product/document when user-inspectable.
37
37
 
38
38
  ## Rules
39
39
 
40
40
  - Read before you write. Understand the intent of existing code before changing it.
41
- - Small, focused changes. Each cleanup PR should do one thing. Never combine unrelated fixes.
42
- - Don't refactor code that is actively being worked on by another agent check issue assignments first.
41
+ - Small, focused changes. Never combine unrelated cleanups.
42
+ - Do not refactor code actively owned by another agent; inspect assignments and execution state first.
43
43
  - Preserve behavior. Cleanup must not change functionality. Run tests after every change.
44
- - Prioritize by impact — fix things that slow down the team or cause bugs, not cosmetic issues.
45
- - If `docs/CODEBASE-AUDIT.md` exists, review it before starting. Don't duplicate findings.
44
+ - Prioritize by impact — fix things that slow the team or cause bugs, not cosmetic churn.
@@ -4,18 +4,22 @@ You work in a GitHub repository. Follow the conventions in `docs/git-workflow.md
4
4
 
5
5
  ## Direct-to-Main Flow
6
6
 
7
- 1. Pull latest: `git pull origin main`
8
- 2. Make your changes
9
- 3. Run available checks (lint, typecheck, tests)
10
- 4. Commit using Conventional Commits: `<type>: <description>`
11
- 5. Push to main: `git push origin main`
12
- 6. If CI fails, fix immediately
7
+ 1. Resolve the base ref from project workspace metadata or the issue's `heartbeat-context`. Use the configured `repoRef`, `defaultRef`, or `executionWorkspacePolicy.workspaceStrategy.baseRef` exactly as Paperclip provides it. Never guess from the current shell branch and never rewrite the configured ref to `main`, `master`, or `origin/*`.
8
+ 2. Pull/update latest from that base:
9
+ - external: `git fetch origin`, then integrate from the configured base ref
10
+ - local: update from the configured local branch
11
+ 3. Make your changes
12
+ 4. Run available checks (lint, typecheck, tests)
13
+ 5. Commit using Conventional Commits: `<type>: <description>`
14
+ 6. Push to the correct configured base branch
15
+ 7. If CI fails, fix immediately
13
16
 
14
17
  ## Rules
15
18
 
16
19
  - Always pull before starting work to avoid conflicts.
17
20
  - Keep commits focused — one concern per commit.
18
- - Never force push to main.
21
+ - Never force push to the base branch.
22
+ - Use the configured base ref. For external repos, branch and compare from the configured remote/ref and push/merge back to the matching remote branch.
19
23
  - If you encounter merge conflicts, resolve them carefully. When in doubt, escalate to the CEO.
20
24
  - Reference the issue ID in the commit body (e.g., `Closes YES-5`).
21
25
  - Never mark an issue as `done` unless at least one new commit was created for that issue's work and pushed.
@@ -35,12 +35,15 @@ directory inside the repository. This must never be committed.
35
35
 
36
36
  ## Direct-to-Main Workflow
37
37
 
38
- 1. Pull latest from main
39
- 2. Make changes
40
- 3. Run tests/linting locally if available
41
- 4. Commit with conventional commit message
42
- 5. Push to main
43
- 6. Verify CI passes (if configured)
38
+ 1. Resolve the configured base ref from project workspace metadata or the issue's `heartbeat-context` before touching Git. Do not infer it from the current shell branch and do not rewrite it to `main`, `master`, or `origin/*`.
39
+ - External repos: use the project/worktree `repoRef`, `defaultRef`, or `executionWorkspacePolicy.workspaceStrategy.baseRef` exactly as configured.
40
+ - Fresh/local repos: use the configured local branch.
41
+ 2. Pull/fetch latest from that base before editing.
42
+ 3. Make changes
43
+ 4. Run tests/linting locally if available
44
+ 5. Commit with conventional commit message
45
+ 6. Push to the matching configured base branch
46
+ 7. Verify CI passes (if configured)
44
47
 
45
48
  ## What Requires a Commit
46
49
 
@@ -55,6 +58,7 @@ directory inside the repository. This must never be committed.
55
58
 
56
59
  - Never mark an issue as `done` unless at least one new commit exists for that issue's work and has been pushed.
57
60
  - Before marking `done`, ensure the working tree is clean (`git status --short` shows no pending changes).
61
+ - If Paperclip created an isolated execution workspace for this issue, close/archive it after the commit/PR has landed and before marking `done`. If cleanup is blocked or fails, leave the issue open with the exact cleanup blocker. If the issue is in the shared project workspace, do not invent isolated-worktree cleanup.
58
62
  - If no repository change is required, do not silently close as `done`: add an issue comment explaining why no code change was needed and escalate to the CEO for explicit decision.
59
63
 
60
64
  ## CI
@@ -1,24 +1,48 @@
1
1
  # Skill: Hiring Review
2
2
 
3
- You own team composition analysis. Evaluate whether the current team can deliver on the company goal, and propose hires when gaps exist.
3
+ You own team composition analysis and governed hiring proposals. Use the current Paperclip `paperclip-create-agent` workflow; never create agents directly from this skill.
4
+
5
+ ## When To Use This Skill
6
+
7
+ Use this only when assigned a hiring-plan, capacity review, team-design, or board-request issue. Do not scan for hiring opportunities on every heartbeat.
4
8
 
5
9
  ## Hiring Review Process
6
10
 
7
- 1. Query current agents: `GET /api/companies/{companyId}/agents`
8
- 2. Review the company goal and project scope
9
- 3. For each identified gap:
10
- - Define the role (use Paperclip role enum: engineer, pm, qa, designer, researcher, devops, general)
11
- - Write a justification: what capability is missing and why it matters
12
- - Suggest adapter configuration (model, effort level)
13
- - Create a board approval request via `POST /api/companies/{companyId}/approvals` with:
14
- - `type: "hire"`
15
- - `title`: role name and purpose
16
- - `description`: justification and config suggestion
17
- 4. Document the team assessment in your daily notes
11
+ 1. Read the assigned issue and its linked documents, especially `hiring-plan` and `decision-log` if present.
12
+ 2. Query current agents: `GET /api/companies/{companyId}/agents`.
13
+ 3. Compare current roles/capabilities to the company goal, active roadmap, queued work, and stalled/blocked issues.
14
+ 4. For each potential gap, first ask whether an existing agent can own it with a skill/process update. Do not propose duplicate hires.
15
+ 5. If a new agent is justified, draft the hire using the `paperclip-create-agent` flow:
16
+ - Choose an exact template when available, adjacent template when close, otherwise generic.
17
+ - Build an `instructionsBundle` with `AGENTS.md` as entry file plus any supporting instruction files.
18
+ - Include `desiredSkills`, role/title, capabilities, metadata, adapterType/adapterConfig, permissions, and runtimeConfig.
19
+ - Keep `runtimeConfig.heartbeat.enabled` false by default unless the board explicitly wants an always-on manager.
20
+ - Link the originating issue with `sourceIssueId` or `sourceIssueIds`.
21
+ 6. Review the draft against the draft-review checklist before submitting:
22
+ - clear mission and reporting line
23
+ - concrete wake/heartbeat behavior
24
+ - task-management and work-product rules
25
+ - cross-agent escalation paths
26
+ - security/secrets constraints
27
+ - adapter/tool assumptions explicitly stated
28
+ 7. Submit through the governed endpoint: `POST /api/companies/{companyId}/agent-hires`.
29
+ 8. If the response includes an approval, comment on the source issue with the approval id and wait for board approval. Do not auto-approve from this skill.
30
+ 9. Record the decision and rationale in the decision log when one exists.
31
+
32
+ ## Output Format
33
+
34
+ Post a concise issue comment:
35
+
36
+ - `Assessment:` current coverage and gap.
37
+ - `Recommendation:` hire / no-hire / update existing agent.
38
+ - `Draft:` role, desiredSkills, sourceIssueId, template basis, adapter/runtime assumptions.
39
+ - `Checklist:` pass/fail notes from the draft-review checklist.
40
+ - `Next action:` who must approve or what work proceeds next.
18
41
 
19
42
  ## Rules
20
43
 
21
- - Don't propose hires for capabilities already covered by existing roles.
22
- - Consider whether an existing agent could take on additional responsibilities before hiring.
23
- - Prioritize roles that unblock the most work.
24
- - Each hire proposal must go through board approval never create agents directly.
44
+ - Each hire proposal must go through `/agent-hires` and board approval when the company requires it.
45
+ - Do not use the legacy approvals endpoint or legacy hire approval payload shape.
46
+ - Do not propose hires for capabilities already covered by existing roles unless load/capacity evidence justifies it.
47
+ - Prefer small, specific roles over vague generalists when the gap is durable and recurring.
48
+ - Work products such as candidate drafts, comparison matrices, or long hiring plans belong in issue documents/artifacts, not only comments.
@@ -13,7 +13,7 @@ You own market research with a focus on user needs and behavior. This is your co
13
13
  - **Risks**: Adoption barriers, user switching costs, behavioral resistance
14
14
  3. Create follow-up issues for deeper research if needed:
15
15
  - `POST /api/companies/{companyId}/issues` for user interview plans, usability benchmarks. Include the active `projectId` (and `goalId` / `parentId` when applicable).
16
- 4. Share findings with the team @-mention Product Owner and CEO on key insights
16
+ 4. Share findings by updating the assigned issue/document and assigning concrete follow-up actions to the Product Owner and CEO when needed; do not rely on generic @-mentions.
17
17
 
18
18
  ## Rules
19
19
 
@@ -4,8 +4,8 @@ Adds a PR-based review workflow with dedicated reviewer roles.
4
4
 
5
5
  ## What it adds
6
6
 
7
- - **Core roles**: Code Reviewer, Product Owner (required reviewers)
8
- - **Extended roles** *(when present)*: UI Designer (design review), UX Researcher (UX review), QA (quality review), DevOps (infra review)
7
+ - **Core roles**: Product Owner (approval) and Engineer (final merge gate)
8
+ - **Extended roles** *(when present)*: QA (substantive review), Security Engineer (security-relevant review), Code Reviewer/UI/UX/DevOps advisory or domain review when explicitly configured
9
9
  - **Shared docs**: `docs/pr-conventions.md` — PR format, review workflow, merge rules
10
10
  - **Engineer skill**: Feature-branch + PR workflow (overrides direct-to-main from `github-repo`)
11
11
  - **Reviewer skills**: Review checklists for each reviewer role
@@ -16,20 +16,20 @@ Adds a PR-based review workflow with dedicated reviewer roles.
16
16
 
17
17
  ## How it works
18
18
 
19
- 1. Engineer creates a feature branch (`<prefix>-<N>/<short-description>`)
20
- 2. Engineer opens a PR with Conventional Commits title and issue reference
21
- 3. Engineer sets the originating issue's `executionPolicy`: a `review` stage for the Code Reviewer, optional `review` stages for relevant domain reviewers, and a final `approval` stage for the Product Owner (roles resolved to agentIds); the PR link is added as an issue comment
22
- 4. Code Reviewer reviews for correctness, security, style, simplicity
23
- 5. Product Owner reviews for intent alignment, scope discipline, acceptance criteria
24
- 6. UI Designer reviews for visual consistency, brand compliance *(when present)*
25
- 7. UX Researcher reviews for usability and user flow integrity *(when present)*
26
- 8. QA reviews for test coverage, edge cases, regression risk *(when present)*
27
- 9. DevOps reviews for infrastructure impact, security, performance *(when present)*
28
- 10. Engineer merges when all stages are approved (no `changes_requested` outstanding)
19
+ 1. Engineer resolves the project/worktree base ref first from `heartbeat-context` / project workspace metadata and uses it exactly as configured
20
+ 2. Engineer creates a feature branch (`<prefix>-<N>/<short-description>`) from that base
21
+ 3. Engineer opens a PR with Conventional Commits title, issue reference, and the matching base branch
22
+ 4. Engineer sets the originating issue's `executionPolicy`: review stages for QA/domain reviewers as needed, an approval stage for the Product Owner, and a final Engineer merge-gate approval stage (roles resolved to agentIds); the PR link is added as an issue comment
23
+ 5. QA reviews with executed evidence when present
24
+ 6. Security Engineer reviews security-relevant changes when present
25
+ 7. Product Owner reviews for intent alignment, scope discipline, acceptance criteria
26
+ 8. Code Reviewer and domain reviewers may add advisory PR comments unless explicitly added as executionPolicy participants
27
+ 9. DevOps reviews infrastructure impact when explicitly added as a stage
28
+ 10. Engineer merges when all stages are approved (no `changes_requested` outstanding), confirms the PR landed on the correct base, closes/archives any isolated worktree that Paperclip created, and only then records the final approval / closes the issue
29
29
 
30
30
  ## Handover mechanism
31
31
 
32
- The issue's native `executionPolicy` (`review`/`approval` stages). Each reviewer is the active participant of a stage and records an `approved` / `changes_requested` verdict, optionally mirrored as a GitHub PR comment. If a reviewer doesn't wake, the CEO's stall-detection (if enabled) will catch it.
32
+ The issue's native `executionPolicy` (`review`/`approval` stages). Each reviewer is the active participant of a stage and records an `approved` / `changes_requested` decision through the normal issue update route; Paperclip stores the reviewer/approver audit trail on the issue (`reviewed_by` / `approved_by` metadata where exposed). The decision may be mirrored as a GitHub PR comment. Do not create separate review subissues. If a reviewer doesn't wake, the CEO's stall-detection (if enabled) will catch it.
33
33
 
34
34
  ## Best for
35
35
 
@@ -16,7 +16,7 @@ You review PRs for infrastructure impact, performance, security, and operational
16
16
 
17
17
  1. When you are the active participant of a review stage on an issue with a PR link, review the PR.
18
18
  2. Focus on infrastructure, deployment, runtime security, observability, and rollback risk.
19
- 3. Record your verdict on your review stage:
19
+ 3. Record your verdict through the normal issue update route for your review stage:
20
20
  - **approved** if operationally sound
21
21
  - **changes_requested** with specific concerns if not
22
22
  4. Optionally mirror the verdict as a GitHub PR comment — write it to a Markdown file (open with a heading like `## ✅ Approved` or `## 🔄 Changes requested`, then the details) and run `gh pr comment <number> --body-file <file>`. Never use inline `--body "..."`: a double-quoted shell string keeps `\n` literal, so the comment renders as `text\ntext`. See `docs/pr-conventions.md` → *Posting PR Bodies & Comments*.