@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.
- package/CHANGELOG.md +24 -0
- package/README.md +15 -11
- package/dist/manifest.js +1 -6
- package/dist/manifest.js.map +2 -2
- package/dist/ui/index.css +3 -0
- package/dist/ui/index.css.map +2 -2
- package/dist/ui/index.js +59 -30
- package/dist/ui/index.js.map +3 -3
- package/dist/worker.js +263 -81
- package/dist/worker.js.map +3 -3
- package/package.json +1 -1
- package/templates/ai-wizard/config-format.md +4 -4
- package/templates/ai-wizard/interview-system.md +3 -3
- package/templates/ai-wizard/single-shot-system.md +3 -3
- package/templates/bootstrap-instructions.md +3 -3
- package/templates/modules/architecture-plan/agents/ui-designer/skills/design-system.md +1 -1
- package/templates/modules/auto-assign/agents/ceo/heartbeat-section.md +2 -8
- package/templates/modules/auto-assign/agents/product-owner/heartbeat-section.md +2 -9
- package/templates/modules/auto-assign/module.meta.json +1 -1
- package/templates/modules/auto-assign/skills/auto-assign.md +18 -15
- package/templates/modules/backlog/agents/ceo/heartbeat-section.md +2 -9
- package/templates/modules/backlog/agents/product-owner/heartbeat-section.md +2 -14
- package/templates/modules/backlog/module.meta.json +1 -1
- package/templates/modules/backlog/skills/backlog-health.md +20 -21
- package/templates/modules/codebase-onboarding/skills/codebase-audit.md +29 -30
- package/templates/modules/github-repo/agents/engineer/skills/git-workflow.md +11 -7
- package/templates/modules/github-repo/docs/git-workflow.md +10 -6
- package/templates/modules/hiring-review/skills/hiring-review.md +40 -16
- package/templates/modules/market-analysis/agents/ux-researcher/skills/market-analysis.md +1 -1
- package/templates/modules/pr-review/README.md +13 -13
- package/templates/modules/pr-review/agents/devops/skills/infra-review.md +1 -1
- package/templates/modules/pr-review/agents/engineer/skills/pr-workflow.md +17 -11
- package/templates/modules/pr-review/agents/product-owner/skills/product-review.md +1 -1
- package/templates/modules/pr-review/agents/qa/skills/qa-review.md +1 -1
- package/templates/modules/pr-review/agents/security-engineer/skills/pr-security-review.md +1 -1
- package/templates/modules/pr-review/agents/ui-designer/skills/design-review.md +1 -1
- package/templates/modules/pr-review/agents/ux-researcher/skills/ux-review.md +1 -1
- package/templates/modules/pr-review/docs/pr-conventions.md +11 -8
- package/templates/modules/stall-detection/README.md +8 -8
- package/templates/modules/stall-detection/agents/ceo/heartbeat-section.md +2 -11
- package/templates/modules/stall-detection/agents/ceo/skills/stall-detection.md +22 -13
- package/templates/modules/stall-detection/module.meta.json +1 -1
- package/templates/modules/triage/skills/issue-triage.md +20 -33
- package/templates/roles/audio-designer/HEARTBEAT.md +37 -21
- package/templates/roles/ceo/HEARTBEAT.md +34 -56
- package/templates/roles/cmo/HEARTBEAT.md +37 -21
- package/templates/roles/code-reviewer/HEARTBEAT.md +39 -19
- package/templates/roles/cto/HEARTBEAT.md +33 -25
- package/templates/roles/customer-success/HEARTBEAT.md +39 -19
- package/templates/roles/devops/HEARTBEAT.md +36 -25
- package/templates/roles/engineer/AGENTS.md +27 -9
- package/templates/roles/engineer/HEARTBEAT.md +35 -21
- package/templates/roles/game-artist/HEARTBEAT.md +37 -21
- package/templates/roles/game-designer/HEARTBEAT.md +37 -21
- package/templates/roles/level-designer/HEARTBEAT.md +37 -21
- package/templates/roles/product-owner/AGENTS.md +24 -8
- package/templates/roles/product-owner/HEARTBEAT.md +37 -19
- package/templates/roles/qa/AGENTS.md +26 -11
- package/templates/roles/qa/HEARTBEAT.md +37 -21
- package/templates/roles/security-engineer/AGENTS.md +21 -23
- package/templates/roles/security-engineer/HEARTBEAT.md +39 -19
- package/templates/roles/technical-writer/HEARTBEAT.md +39 -18
- package/templates/roles/ui-designer/AGENTS.md +26 -9
- package/templates/roles/ui-designer/HEARTBEAT.md +37 -21
- 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
|
+
"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 }
|
|
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
|
|
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"
|
|
23
|
-
- Existing external repo (GitHub/GitLab/etc.): use `workspace.sourceType: "git_repo"`, include `repoUrl`, `repoRef`/`defaultRef` when
|
|
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
|
|
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
|
|
40
|
-
- If no external repository is given, assume Paperclip should create a fresh local Git repository. Set `workspace.sourceType: "local_path"`, `workspace.defaultRef: "main"
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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
|
-
##
|
|
1
|
+
## Auto-Assign Routine Fallback
|
|
2
2
|
|
|
3
|
-
|
|
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
|
-
##
|
|
1
|
+
## Auto-Assign Routine
|
|
2
2
|
|
|
3
|
-
|
|
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": "
|
|
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
|
|
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
|
-
##
|
|
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
|
-
|
|
9
|
+
## Assignment Check
|
|
8
10
|
|
|
9
|
-
1.
|
|
10
|
-
2. Query
|
|
11
|
-
3.
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
- Respect
|
|
23
|
-
-
|
|
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
|
|
1
|
+
## Backlog Health Routine Fallback
|
|
2
2
|
|
|
3
|
-
|
|
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
|
|
1
|
+
## Backlog Health Routine
|
|
2
2
|
|
|
3
|
-
|
|
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": "
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
-
-
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
-
|
|
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,
|
|
47
|
-
-
|
|
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
|
|
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 —
|
|
12
|
-
4. Assess test coverage —
|
|
13
|
-
5. Identify tech debt — dead code, unused exports,
|
|
14
|
-
6. Check for code quality issues — long files, deep nesting,
|
|
15
|
-
7. Document
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
8. Create follow-up issues for
|
|
22
|
-
|
|
23
|
-
##
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
1.
|
|
28
|
-
2. Look for
|
|
29
|
-
3.
|
|
30
|
-
4. Execute small cleanup tasks
|
|
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.
|
|
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.
|
|
42
|
-
-
|
|
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
|
|
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.
|
|
8
|
-
2.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
|
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.
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
|
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.
|
|
8
|
-
2.
|
|
9
|
-
3.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
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
|
|
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**:
|
|
8
|
-
- **Extended roles** *(when present)*:
|
|
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
|
|
20
|
-
2. Engineer
|
|
21
|
-
3. Engineer
|
|
22
|
-
4.
|
|
23
|
-
5.
|
|
24
|
-
6.
|
|
25
|
-
7.
|
|
26
|
-
8.
|
|
27
|
-
9. DevOps reviews
|
|
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`
|
|
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
|
|
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*.
|