@cluesmith/codev 3.0.5 → 3.0.7
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/dashboard-dist/assets/index-0yEACH2F.css +32 -0
- package/dashboard-dist/assets/{index-Dn9zmcKp.js → index-DUQ8fmjX.js} +29 -29
- package/dashboard-dist/assets/index-DUQ8fmjX.js.map +1 -0
- package/dashboard-dist/index.html +2 -2
- package/dist/agent-farm/cli.js +1 -1
- package/dist/agent-farm/cli.js.map +1 -1
- package/dist/agent-farm/commands/cleanup.js +13 -0
- package/dist/agent-farm/commands/cleanup.js.map +1 -1
- package/dist/agent-farm/commands/dev.d.ts.map +1 -1
- package/dist/agent-farm/commands/dev.js +10 -3
- package/dist/agent-farm/commands/dev.js.map +1 -1
- package/dist/agent-farm/commands/spawn-worktree.d.ts +12 -3
- package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn-worktree.js +17 -6
- package/dist/agent-farm/commands/spawn-worktree.js.map +1 -1
- package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn.js +52 -21
- package/dist/agent-farm/commands/spawn.js.map +1 -1
- package/dist/agent-farm/db/index.d.ts.map +1 -1
- package/dist/agent-farm/db/index.js +34 -0
- package/dist/agent-farm/db/index.js.map +1 -1
- package/dist/agent-farm/db/schema.d.ts +1 -1
- package/dist/agent-farm/db/schema.d.ts.map +1 -1
- package/dist/agent-farm/db/schema.js +1 -1
- package/dist/agent-farm/servers/analytics.d.ts.map +1 -1
- package/dist/agent-farm/servers/analytics.js +1 -0
- package/dist/agent-farm/servers/analytics.js.map +1 -1
- package/dist/agent-farm/servers/overview.d.ts +25 -3
- package/dist/agent-farm/servers/overview.d.ts.map +1 -1
- package/dist/agent-farm/servers/overview.js +72 -10
- package/dist/agent-farm/servers/overview.js.map +1 -1
- package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-routes.js +54 -14
- package/dist/agent-farm/servers/tower-routes.js.map +1 -1
- package/dist/agent-farm/types.d.ts +1 -1
- package/dist/agent-farm/types.d.ts.map +1 -1
- package/dist/agent-farm/utils/agent-names.d.ts.map +1 -1
- package/dist/agent-farm/utils/agent-names.js +3 -0
- package/dist/agent-farm/utils/agent-names.js.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/porch/artifacts.d.ts +23 -1
- package/dist/commands/porch/artifacts.d.ts.map +1 -1
- package/dist/commands/porch/artifacts.js +51 -62
- package/dist/commands/porch/artifacts.js.map +1 -1
- package/dist/commands/porch/index.d.ts +23 -2
- package/dist/commands/porch/index.d.ts.map +1 -1
- package/dist/commands/porch/index.js +83 -4
- package/dist/commands/porch/index.js.map +1 -1
- package/dist/commands/porch/notify.d.ts +27 -5
- package/dist/commands/porch/notify.d.ts.map +1 -1
- package/dist/commands/porch/notify.js +23 -12
- package/dist/commands/porch/notify.js.map +1 -1
- package/dist/commands/porch/state.d.ts +1 -1
- package/dist/commands/porch/state.d.ts.map +1 -1
- package/dist/commands/porch/state.js +8 -6
- package/dist/commands/porch/state.js.map +1 -1
- package/dist/lib/github.d.ts +9 -1
- package/dist/lib/github.d.ts.map +1 -1
- package/dist/lib/github.js +34 -3
- package/dist/lib/github.js.map +1 -1
- package/dist/lib/team-github.d.ts +4 -0
- package/dist/lib/team-github.d.ts.map +1 -1
- package/dist/lib/team-github.js +14 -3
- package/dist/lib/team-github.js.map +1 -1
- package/package.json +4 -4
- package/scripts/forge/gitea/issue-list.sh +24 -1
- package/scripts/forge/gitea/pr-list.sh +21 -1
- package/scripts/forge/gitea/recently-closed.sh +19 -1
- package/scripts/forge/gitea/recently-merged.sh +25 -1
- package/skeleton/protocols/pir/builder-prompt.md +92 -0
- package/skeleton/protocols/pir/consult-types/impl-review.md +78 -0
- package/skeleton/protocols/pir/consult-types/pr-review.md +65 -0
- package/skeleton/protocols/pir/prompts/implement.md +156 -0
- package/skeleton/protocols/pir/prompts/plan.md +133 -0
- package/skeleton/protocols/pir/prompts/review.md +261 -0
- package/skeleton/protocols/pir/protocol.json +125 -0
- package/skeleton/protocols/pir/protocol.md +204 -0
- package/skeleton/templates/AGENTS.md +24 -0
- package/skeleton/templates/CLAUDE.md +24 -0
- package/dashboard-dist/assets/index-BWYZtvwm.css +0 -32
- package/dashboard-dist/assets/index-Dn9zmcKp.js.map +0 -1
|
@@ -1,3 +1,27 @@
|
|
|
1
1
|
#!/bin/sh
|
|
2
2
|
# Forge concept: recently-merged (Gitea via tea CLI)
|
|
3
|
-
|
|
3
|
+
#
|
|
4
|
+
# `tea pulls list --state closed` returns both merged PRs and closed-without-
|
|
5
|
+
# merge PRs. Filter to merged only via `.merged == true` (the same predicate
|
|
6
|
+
# scripts/forge/gitea/pr-exists.sh already relies on), then map to the
|
|
7
|
+
# GitHub-compatible shape:
|
|
8
|
+
# index -> number (int)
|
|
9
|
+
# created -> createdAt
|
|
10
|
+
# updated -> mergedAt (tea exposes no merged_at field via --fields;
|
|
11
|
+
# close-then-edit overestimates merged time
|
|
12
|
+
# but is acceptable for the 24h overview window)
|
|
13
|
+
# head.ref -> headRefName
|
|
14
|
+
# description -> body
|
|
15
|
+
exec tea pulls list --state closed --limit 1000 \
|
|
16
|
+
--fields index,title,state,author,url,created,updated,head,description,merged \
|
|
17
|
+
--output json \
|
|
18
|
+
| jq '[.[] | select(.merged == true) | {
|
|
19
|
+
number: (.index | tonumber),
|
|
20
|
+
title,
|
|
21
|
+
state,
|
|
22
|
+
url,
|
|
23
|
+
body: (.description // ""),
|
|
24
|
+
createdAt: .created,
|
|
25
|
+
mergedAt: .updated,
|
|
26
|
+
headRefName: (.head.ref // "")
|
|
27
|
+
}]'
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# {{protocol_name}} Builder ({{mode}} mode)
|
|
2
|
+
|
|
3
|
+
You are implementing a fix or feature driven by a GitHub issue, using the PIR protocol.
|
|
4
|
+
|
|
5
|
+
{{#if mode_soft}}
|
|
6
|
+
## Mode: SOFT
|
|
7
|
+
You are running in SOFT mode. This means:
|
|
8
|
+
- You follow the PIR protocol document yourself (no porch orchestration)
|
|
9
|
+
- The architect monitors your work and verifies you're adhering to the protocol
|
|
10
|
+
- Run consultations manually when the protocol calls for them
|
|
11
|
+
- You have flexibility in execution, but must stay compliant with the protocol
|
|
12
|
+
{{/if}}
|
|
13
|
+
|
|
14
|
+
{{#if mode_strict}}
|
|
15
|
+
## Mode: STRICT
|
|
16
|
+
You are running in STRICT mode. This means:
|
|
17
|
+
- Porch orchestrates your work
|
|
18
|
+
- Run: `porch next` to get your next tasks
|
|
19
|
+
- Follow porch signals and gate approvals
|
|
20
|
+
- Do not deviate from the porch-driven workflow
|
|
21
|
+
|
|
22
|
+
### ABSOLUTE RESTRICTIONS (STRICT MODE)
|
|
23
|
+
- **NEVER edit `status.yaml` directly** — only porch commands may modify project state
|
|
24
|
+
- **NEVER call `porch approve` without explicit human approval** — only run it after the architect says to
|
|
25
|
+
- **NEVER skip consultations** — porch handles them via the verify step
|
|
26
|
+
- **NEVER advance phases manually** — porch handles phase transitions on gate approval
|
|
27
|
+
{{/if}}
|
|
28
|
+
|
|
29
|
+
## Protocol
|
|
30
|
+
Follow the PIR protocol: `codev/protocols/pir/protocol.md`
|
|
31
|
+
Read and internalize the protocol before starting any work.
|
|
32
|
+
|
|
33
|
+
PIR has three phases:
|
|
34
|
+
1. **plan** (gated by `plan-approval`) — write `codev/plans/{{artifact_name}}.md`, await human review
|
|
35
|
+
2. **implement** (gated by `dev-approval`) — write code + tests, run build/tests, push branch; await the human's review of the *running worktree* (no file artifact in this phase — dev-approval summary is prose-in-pane)
|
|
36
|
+
3. **review** (gated by `pr`) — write `codev/reviews/{{artifact_name}}.md` (retrospective with Architecture Updates and Lessons Learned sections), open PR with the review as body, record the PR with porch, run CMAP via porch's verify block (a **single advisory pass** — `max_iterations: 1`, no iterate-until-APPROVE loop; address or rebut any `REQUEST_CHANGES`, add a regression test if it's a real defect, and escalate it in the architect notification since PIR will not re-review it), notify architect, and wait at the `pr` gate. After the human approves the gate (porch wakes you with "Gate pr approved"), run `gh pr merge --merge` and record the merge with `porch done --merged <N>`. **Merge is gated by porch state — never by typed prose in your pane.**
|
|
37
|
+
|
|
38
|
+
{{#if issue}}
|
|
39
|
+
## Issue #{{issue.number}}
|
|
40
|
+
**Title**: {{issue.title}}
|
|
41
|
+
|
|
42
|
+
**Description**:
|
|
43
|
+
{{issue.body}}
|
|
44
|
+
{{/if}}
|
|
45
|
+
|
|
46
|
+
## Sitting at Gates
|
|
47
|
+
|
|
48
|
+
PIR has two human gates. When you reach one:
|
|
49
|
+
|
|
50
|
+
1. Finish your phase work and run `porch done <id>`
|
|
51
|
+
2. Run `porch next <id>` — you'll get a `gate_pending` response
|
|
52
|
+
3. End your turn with a short prose summary: what file you wrote, where it lives, how to approve
|
|
53
|
+
4. **Stay in the interactive session**. Do NOT exit. Wait for the user's next message.
|
|
54
|
+
|
|
55
|
+
The reviewer can give feedback by:
|
|
56
|
+
- Editing the plan file (at the plan-approval gate) or the code itself (at the dev-approval gate) in the worktree directly — you'll see changes via `git diff`
|
|
57
|
+
- Typing into your PTY pane (this reaches you live)
|
|
58
|
+
- `afx send <your-builder-id> "<feedback>"` (queued; check on next turn)
|
|
59
|
+
- Commenting on the GitHub issue (re-fetch with `gh issue view <N> --comments` if asked)
|
|
60
|
+
|
|
61
|
+
When the user provides feedback, revise the artifact, recommit, and ask if there's more to address. The gate remains pending until the user runs `porch approve` — do NOT call `porch approve` yourself.
|
|
62
|
+
|
|
63
|
+
## Notifications
|
|
64
|
+
Use `afx send architect "..."` at key moments:
|
|
65
|
+
- **PR ready**: `afx send architect "PR #<M> ready for review (PIR #{{issue.number}})"`
|
|
66
|
+
- **PR merged**: `afx send architect "PR #<M> merged for PIR #{{issue.number}}. Ready for cleanup."`
|
|
67
|
+
- **Blocked**: `afx send architect "Blocked on PIR #{{issue.number}}: [reason]"`
|
|
68
|
+
|
|
69
|
+
**Gates are not architect-notified.** When porch transitions a gate to `pending`, the gate-reached message (including the `porch approve <id> <gate> --a-human-explicitly-approved-this` invocation) appears in YOUR pane as part of your normal output. That's the universal notification surface — visible whether the user is in VSCode, tmux, plain Terminal, or any other host. The user reads it directly from your pane (or runs `porch pending` from a shell) and approves themselves; the architect can't approve gates, so notifying it would be informational noise.
|
|
70
|
+
|
|
71
|
+
## Handling Flaky Tests
|
|
72
|
+
|
|
73
|
+
If you encounter **pre-existing flaky tests** (intermittent failures unrelated to your changes):
|
|
74
|
+
1. **DO NOT** edit `status.yaml` to bypass checks
|
|
75
|
+
2. **DO NOT** skip porch checks or use any workaround to avoid the failure
|
|
76
|
+
3. **DO** mark the test as skipped with a clear annotation (e.g., `it.skip('...') // FLAKY: skipped pending investigation`)
|
|
77
|
+
4. **DO** document each skipped flaky test in the review file under a `## Flaky Tests` section
|
|
78
|
+
5. Commit the skip and continue with your work
|
|
79
|
+
|
|
80
|
+
## Resumption After Crash
|
|
81
|
+
|
|
82
|
+
If your Claude session crashes mid-flow, Tower's `while true` loop will relaunch you with the same prompt. On startup:
|
|
83
|
+
|
|
84
|
+
1. Run `porch next {{project_id}}` to learn what phase you're in
|
|
85
|
+
2. If `gate_pending`: read the latest plan file (plan-approval) or `git diff main` (dev-approval) plus any new GitHub issue comments; check `afx send` queue. Decide whether to revise or just announce you're back.
|
|
86
|
+
3. Otherwise: pick up where you left off
|
|
87
|
+
|
|
88
|
+
## Getting Started
|
|
89
|
+
|
|
90
|
+
1. Read the PIR protocol document (`codev/protocols/pir/protocol.md`)
|
|
91
|
+
2. Run `porch next {{project_id}}` to see what to do next
|
|
92
|
+
3. Begin work
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Implementation Review Prompt (PIR)
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
You are reviewing the implementation of a PIR protocol project before it reaches the `dev-approval` human gate. A builder has implemented the approved plan and written a dev-approval summary. Your job is to verify the implementation matches the plan and is ready for human review.
|
|
6
|
+
|
|
7
|
+
## CRITICAL: Verify Before Flagging
|
|
8
|
+
|
|
9
|
+
Before requesting changes for missing configuration, incorrect patterns, or framework issues:
|
|
10
|
+
1. **Check `package.json`** for actual dependency versions — framework conventions change between major versions
|
|
11
|
+
2. **Read the actual config files** (or confirm their deliberate absence) before flagging missing configs
|
|
12
|
+
3. **Do not assume** your training data reflects the version in use — verify against project files
|
|
13
|
+
4. If "Previous Iteration Context" is provided, read it carefully before re-raising concerns that were already disputed
|
|
14
|
+
|
|
15
|
+
## Focus Areas
|
|
16
|
+
|
|
17
|
+
1. **Plan Adherence**
|
|
18
|
+
- Does the implementation fulfill the approved plan?
|
|
19
|
+
- Are all "Files to Change" actually changed?
|
|
20
|
+
- Are the changes scoped to what the plan described, or has scope crept?
|
|
21
|
+
|
|
22
|
+
2. **Code Quality**
|
|
23
|
+
- Is the code readable and maintainable?
|
|
24
|
+
- Are there obvious bugs?
|
|
25
|
+
- Are error cases handled appropriately?
|
|
26
|
+
- Is the change minimal — no unnecessary refactoring or unrelated tidy-ups?
|
|
27
|
+
|
|
28
|
+
3. **Test Coverage**
|
|
29
|
+
- Are the tests adequate for the changes?
|
|
30
|
+
- Do tests cover both the main path and the edge cases the plan called out?
|
|
31
|
+
- For a bug fix: is there a regression test that would fail without the fix?
|
|
32
|
+
|
|
33
|
+
4. **Review File Quality**
|
|
34
|
+
- Does `codev/reviews/<id>-<slug>.md` exist and follow the template?
|
|
35
|
+
- Does it accurately describe what changed?
|
|
36
|
+
- Is "Things to Look At" honest about tricky spots?
|
|
37
|
+
- Is "How to Test Locally" specific enough that the human reviewer can act on it?
|
|
38
|
+
|
|
39
|
+
5. **PIR-Specific Concerns**
|
|
40
|
+
- For UI / mobile / cross-platform changes: does the review file explain platform-specific behavior the human should verify?
|
|
41
|
+
- For changes with external integrations: are the integration points documented?
|
|
42
|
+
|
|
43
|
+
## Verdict Format
|
|
44
|
+
|
|
45
|
+
After your review, provide your verdict in exactly this format:
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
---
|
|
49
|
+
VERDICT: [APPROVE | REQUEST_CHANGES | COMMENT]
|
|
50
|
+
SUMMARY: [One-line summary of your assessment]
|
|
51
|
+
CONFIDENCE: [HIGH | MEDIUM | LOW]
|
|
52
|
+
---
|
|
53
|
+
KEY_ISSUES:
|
|
54
|
+
- [Issue 1 or "None"]
|
|
55
|
+
- [Issue 2]
|
|
56
|
+
...
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Verdict meanings:**
|
|
60
|
+
- `APPROVE`: Ready for human at the `dev-approval` gate
|
|
61
|
+
- `REQUEST_CHANGES`: Issues that must be fixed before reaching the human
|
|
62
|
+
- `COMMENT`: Minor suggestions, can proceed but note feedback
|
|
63
|
+
|
|
64
|
+
## Scope
|
|
65
|
+
|
|
66
|
+
- **DO** review the implementation against the approved plan
|
|
67
|
+
- **DO** flag missing regression tests for bug fixes
|
|
68
|
+
- **DO** flag obvious bugs, code smells, security issues
|
|
69
|
+
- **DO NOT** redesign the approach — that was settled at `plan-approval`
|
|
70
|
+
- **DO NOT** demand changes outside the plan's scope
|
|
71
|
+
- **DO NOT** request architecture-level refactors unless the change introduces a clear new problem
|
|
72
|
+
|
|
73
|
+
## Notes
|
|
74
|
+
|
|
75
|
+
- This is a pre-gate review; the human is the final authority
|
|
76
|
+
- Focus on "is this ready for someone else to test in a browser / simulator"
|
|
77
|
+
- If referencing line numbers, use `file:line` format
|
|
78
|
+
- The builder needs actionable feedback to iterate
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# PR Review Prompt (PIR)
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
You are performing the CMAP-2 review of a PIR protocol PR. The builder has implemented an approved plan, the human has approved the `dev-approval` gate (meaning a human has run the code locally and tested it), and the PR has been opened. This is a single advisory pass (`max_iterations: 1`) — your verdict is surfaced to the human at the `pr` gate, who is the sole remaining reviewer; it is not auto-re-reviewed.
|
|
6
|
+
|
|
7
|
+
## Focus Areas
|
|
8
|
+
|
|
9
|
+
1. **Completeness**
|
|
10
|
+
- Is the PR body the review file content + `Fixes #<N>`?
|
|
11
|
+
- Are all commits properly formatted (`[PIR #<N>] ...`)?
|
|
12
|
+
- Does the diff match what the review file describes?
|
|
13
|
+
|
|
14
|
+
2. **Test Status**
|
|
15
|
+
- Do all tests pass on the branch?
|
|
16
|
+
- Is test coverage adequate for the change?
|
|
17
|
+
- Are there skipped or flaky tests documented?
|
|
18
|
+
|
|
19
|
+
3. **Code Quality**
|
|
20
|
+
- Any debug code left in?
|
|
21
|
+
- Any TODO comments that should be resolved?
|
|
22
|
+
- Any `// REVIEW:` markers that weren't addressed?
|
|
23
|
+
|
|
24
|
+
4. **Branch Hygiene**
|
|
25
|
+
- Is the branch up to date with main? (If not, suggest a rebase.)
|
|
26
|
+
- Are commits atomic and well-described?
|
|
27
|
+
- Is the change diff a reasonable size for the issue scope?
|
|
28
|
+
|
|
29
|
+
5. **Issue Linkage**
|
|
30
|
+
- Does the PR body contain `Fixes #<N>` (or `Refs #<N>` for partial fixes)?
|
|
31
|
+
- Without this, GitHub won't auto-close the issue on merge
|
|
32
|
+
|
|
33
|
+
## Verdict Format
|
|
34
|
+
|
|
35
|
+
After your review, provide your verdict in exactly this format:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
---
|
|
39
|
+
VERDICT: [APPROVE | REQUEST_CHANGES | COMMENT]
|
|
40
|
+
SUMMARY: [One-line summary of your assessment]
|
|
41
|
+
CONFIDENCE: [HIGH | MEDIUM | LOW]
|
|
42
|
+
---
|
|
43
|
+
KEY_ISSUES:
|
|
44
|
+
- [Issue 1 or "None"]
|
|
45
|
+
- [Issue 2]
|
|
46
|
+
...
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**Verdict meanings:**
|
|
50
|
+
- `APPROVE`: Ready to merge
|
|
51
|
+
- `REQUEST_CHANGES`: Issues to fix before merging
|
|
52
|
+
- `COMMENT`: Minor items, can merge but note feedback
|
|
53
|
+
|
|
54
|
+
## Scope
|
|
55
|
+
|
|
56
|
+
- **DO** flag missing `Fixes #<N>` lines
|
|
57
|
+
- **DO** flag obvious problems the human reviewer at the gate might have missed
|
|
58
|
+
- **DO NOT** redesign the approach — that was settled at `plan-approval` and validated at `dev-approval`
|
|
59
|
+
- **DO NOT** demand changes the human reviewer already accepted at the `dev-approval` gate (the human ran the code and approved it; you didn't)
|
|
60
|
+
|
|
61
|
+
## Notes
|
|
62
|
+
|
|
63
|
+
- The human at the `dev-approval` gate is the primary reviewer for behavior; you are the secondary reviewer for hygiene and edge cases
|
|
64
|
+
- Focus on "what would an integration reviewer catch that the gate reviewer missed"
|
|
65
|
+
- If referencing line numbers, use `file:line` format
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# IMPLEMENT Phase Prompt
|
|
2
|
+
|
|
3
|
+
You are executing the **IMPLEMENT** phase of the PIR protocol.
|
|
4
|
+
|
|
5
|
+
## Your Goal
|
|
6
|
+
|
|
7
|
+
Implement the approved plan, write tests, and pause at the `dev-approval` gate so the human can verify behavior by running the worktree locally. No file artifact is produced in this phase — the retrospective (review file) is written in the next phase, after the human has approved the running code.
|
|
8
|
+
|
|
9
|
+
## Context
|
|
10
|
+
|
|
11
|
+
- **Project ID**: {{project_id}}
|
|
12
|
+
- **Issue Number**: #{{issue.number}}
|
|
13
|
+
- **Issue Title**: {{issue.title}}
|
|
14
|
+
- **Plan File**: `codev/plans/{{artifact_name}}.md` (already approved)
|
|
15
|
+
|
|
16
|
+
## Resumption Check (do this FIRST)
|
|
17
|
+
|
|
18
|
+
Run `porch next {{project_id}}`. If the response is `gate_pending` on `dev-approval`, the code is already written and you're awaiting review. In that case:
|
|
19
|
+
|
|
20
|
+
1. Check for feedback:
|
|
21
|
+
- `git diff main` — has the reviewer made any direct edits to your code?
|
|
22
|
+
- `gh issue view {{issue.number}} --comments`
|
|
23
|
+
- `afx send` queue messages
|
|
24
|
+
2. If feedback requires code changes: make them, re-run build + tests, recommit.
|
|
25
|
+
3. If feedback is a discussion question: respond and stay in the session.
|
|
26
|
+
|
|
27
|
+
Otherwise (`tasks` response — first run), continue below.
|
|
28
|
+
|
|
29
|
+
## Process
|
|
30
|
+
|
|
31
|
+
### 1. Re-Read the Plan
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
cat codev/plans/{{artifact_name}}.md
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
The plan is your authoritative scope. Stick to it. If you discover the plan is wrong while implementing, stop and signal `BLOCKED` rather than silently deviating.
|
|
38
|
+
|
|
39
|
+
### 2. Implement the Code
|
|
40
|
+
|
|
41
|
+
Follow the plan's "Files to Change" section. Apply the changes.
|
|
42
|
+
|
|
43
|
+
**Code quality standards:**
|
|
44
|
+
- Self-documenting code (clear names, obvious structure)
|
|
45
|
+
- No commented-out code
|
|
46
|
+
- No debug prints
|
|
47
|
+
- Explicit error handling
|
|
48
|
+
- Follow project style guide
|
|
49
|
+
|
|
50
|
+
**Commit cadence:** commit each logical unit separately. Use the format:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
[PIR #{{issue.number}}] <Concise description of this commit's change>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Never use `git add .` or `git add -A`.** Stage files explicitly:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
git add path/to/changed-file.ts
|
|
60
|
+
git commit -m "[PIR #{{issue.number}}] ..."
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 3. Write Tests
|
|
64
|
+
|
|
65
|
+
The plan's "Test Plan" section lists what to verify. Write the corresponding tests:
|
|
66
|
+
|
|
67
|
+
- Unit tests for new functions
|
|
68
|
+
- Integration tests for cross-component flows
|
|
69
|
+
- Regression tests for any bug fixes
|
|
70
|
+
|
|
71
|
+
**Test quality:**
|
|
72
|
+
- Test behavior, not implementation
|
|
73
|
+
- Avoid overmocking — only mock external dependencies (APIs, databases, file systems)
|
|
74
|
+
- Use real implementations for internal module boundaries
|
|
75
|
+
|
|
76
|
+
### 4. Verify Everything Works
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npm run build # or project equivalent
|
|
80
|
+
npm test # or project equivalent
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Both MUST pass before signaling phase complete. If a test is flaky (intermittent failure unrelated to your changes), skip it with annotation — you'll document each skipped test in the review file in the next phase.
|
|
84
|
+
|
|
85
|
+
**Flaky ≠ pre-existing unrelated failure.** If the suite surfaces a *deterministic* failure your diff did not cause (e.g., a stale test broken by another team's earlier refactor, or a type error in an unrelated package), that is **out of scope** — do not fix it, skip it, or quarantine it to force a green. Note it for the review file's Lessons Learned and proceed. Porch's gate `checks` are narrow structural assertions, not a full-suite proof; making an unrelated red go green is scope creep, not diligence.
|
|
86
|
+
|
|
87
|
+
### 5. Push Your Branch
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
git push -u origin "$(git branch --show-current)"
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
So the reviewer can pull / inspect from elsewhere if they want.
|
|
94
|
+
|
|
95
|
+
### 6. Signal Phase Complete
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
porch done {{project_id}}
|
|
99
|
+
porch next {{project_id}}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
PIR's `implement` phase has no AI consult — the `dev-approval` gate becomes pending immediately, and the human is the sole reviewer of the running code. (CMAP-2 runs later, in the `review` phase, after the human approves the gate and the PR is opened.)
|
|
103
|
+
|
|
104
|
+
### 7. End Your Turn With a Code-Review Summary (Prose, Not a File)
|
|
105
|
+
|
|
106
|
+
When the gate goes pending, output a short prose summary in the pane to orient the human reviewer. This is **not** a committed file — it's a transient message to help them inspect the change. Structure:
|
|
107
|
+
|
|
108
|
+
> **What changed**: 2–3 sentence summary.
|
|
109
|
+
>
|
|
110
|
+
> **Files**: `git diff --stat main` style list — paths and +/-.
|
|
111
|
+
>
|
|
112
|
+
> **Test results**: `npm run build` ✓, `npm test` ✓ (X tests, Y new).
|
|
113
|
+
>
|
|
114
|
+
> **Things to look at**: tricky spots, platform-specific behavior, anything you want the reviewer to focus on.
|
|
115
|
+
>
|
|
116
|
+
> **How to test locally**: VSCode → right-click builder → **Run Dev Server**, or `afx dev pir-{{project_id}}`. View diff via VSCode → **View Diff** (auto-detects the repo's default branch).
|
|
117
|
+
>
|
|
118
|
+
> Ready for review — type feedback here, or approve with `porch approve {{project_id}} dev-approval --a-human-explicitly-approved-this` (Cmd+K G in VSCode).
|
|
119
|
+
|
|
120
|
+
Then **stay in the interactive session**. Do not exit. Wait for the user's next message.
|
|
121
|
+
|
|
122
|
+
(Optional: if your team prefers an issue-thread record, you can also post a one-line comment on the GitHub issue pointing reviewers at the worktree branch. The summary itself stays in the pane — don't duplicate it as a committed file. That's the next phase's job, and that file will be a proper retrospective with arch + lessons updates, not a transient dev-approval note.)
|
|
123
|
+
|
|
124
|
+
## Signals
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
<signal>PHASE_COMPLETE</signal> # Implementation + tests done; dev-approval gate becomes pending
|
|
128
|
+
<signal>BLOCKED:reason</signal> # Cannot proceed
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## What NOT to Do
|
|
132
|
+
|
|
133
|
+
- **Don't write `codev/reviews/<id>-<slug>.md` in this phase** — it's the next phase's artifact, with a different shape (retrospective with arch + lessons updates)
|
|
134
|
+
- Don't add features not in the plan — scope creep is a `BLOCKED` signal, not a free expansion
|
|
135
|
+
- Don't run `porch approve` yourself
|
|
136
|
+
- Don't push to main — only to your builder branch
|
|
137
|
+
- Don't squash commits — let the merge commit preserve history
|
|
138
|
+
- Don't use `git add .` or `git add -A`
|
|
139
|
+
- Don't open the PR yet — that's the `review` phase
|
|
140
|
+
- Don't exit the interactive session at the gate
|
|
141
|
+
|
|
142
|
+
## Handling Feedback at the Gate
|
|
143
|
+
|
|
144
|
+
The reviewer will run your code via `afx dev` and test it. They may:
|
|
145
|
+
|
|
146
|
+
- Approve immediately → porch advances to the `review` phase
|
|
147
|
+
- Type feedback in the pane / send via `afx send` / edit code in the worktree / comment on the issue
|
|
148
|
+
- Ask clarifying questions about specific files or behaviors
|
|
149
|
+
|
|
150
|
+
When they provide feedback:
|
|
151
|
+
|
|
152
|
+
1. If it's code feedback: make the change, run build + tests, recommit
|
|
153
|
+
2. If it's a discussion question: answer it in the pane
|
|
154
|
+
3. Don't re-run `porch done` unless porch's `verify` block needs to re-validate — porch will tell you
|
|
155
|
+
|
|
156
|
+
The gate stays pending until the human approves.
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# PLAN Phase Prompt
|
|
2
|
+
|
|
3
|
+
You are executing the **PLAN** phase of the PIR protocol.
|
|
4
|
+
|
|
5
|
+
## Your Goal
|
|
6
|
+
|
|
7
|
+
Read the GitHub issue, investigate the codebase, and write a plan to `codev/plans/{{artifact_name}}.md`. The plan is reviewed by a human at the `plan-approval` gate before any code is written.
|
|
8
|
+
|
|
9
|
+
## Context
|
|
10
|
+
|
|
11
|
+
- **Project ID**: {{project_id}}
|
|
12
|
+
- **Issue Number**: #{{issue.number}}
|
|
13
|
+
- **Issue Title**: {{issue.title}}
|
|
14
|
+
- **Artifact**: `codev/plans/{{artifact_name}}.md`
|
|
15
|
+
|
|
16
|
+
## Resumption Check (do this FIRST)
|
|
17
|
+
|
|
18
|
+
Run `porch next {{project_id}}`. If the response is `gate_pending`, you have already drafted the plan and are awaiting review. In that case:
|
|
19
|
+
|
|
20
|
+
1. Read your current plan file: `cat codev/plans/{{artifact_name}}.md`
|
|
21
|
+
2. Check for new feedback that may have arrived while you were idle:
|
|
22
|
+
- `git diff HEAD~1 codev/plans/{{artifact_name}}.md` — the reviewer may have edited the file directly
|
|
23
|
+
- `gh issue view {{issue.number}} --comments` — check for new comments
|
|
24
|
+
- Read any `afx send` queue messages
|
|
25
|
+
3. If feedback exists, revise the plan and recommit. If not, end the turn with a short "still awaiting review" message and stay in the interactive session.
|
|
26
|
+
|
|
27
|
+
Otherwise (`tasks` response — this is your first run), continue with the steps below.
|
|
28
|
+
|
|
29
|
+
## Process
|
|
30
|
+
|
|
31
|
+
### 1. Read the Issue
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
gh issue view {{issue.number}}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Understand what's being asked. For a bug, identify the symptom. For a feature, identify the desired outcome.
|
|
38
|
+
|
|
39
|
+
### 2. Investigate the Codebase
|
|
40
|
+
|
|
41
|
+
- Use Glob / Grep / Read to find the relevant code
|
|
42
|
+
- For a bug: trace the failure path, identify the root cause
|
|
43
|
+
- For a feature: find the existing patterns and integration points
|
|
44
|
+
- Note any existing utilities, components, or conventions you should reuse
|
|
45
|
+
|
|
46
|
+
### 3. Write the Plan
|
|
47
|
+
|
|
48
|
+
Create `codev/plans/{{artifact_name}}.md` where `<slug>` is a short kebab-case description of the change. Use this structure:
|
|
49
|
+
|
|
50
|
+
```markdown
|
|
51
|
+
# PIR Plan: <Short Title>
|
|
52
|
+
|
|
53
|
+
## Understanding
|
|
54
|
+
|
|
55
|
+
What the issue is asking for, in your own words. For a bug, include the root cause you identified — back it up with file:line references.
|
|
56
|
+
|
|
57
|
+
## Proposed Change
|
|
58
|
+
|
|
59
|
+
The approach you intend to take. Be specific. If there are multiple valid approaches, pick one and explain why.
|
|
60
|
+
|
|
61
|
+
## Files to Change
|
|
62
|
+
|
|
63
|
+
Concrete file paths. Use `file:line` format for specific edits where possible.
|
|
64
|
+
|
|
65
|
+
- `path/to/file.ts:42-55` — what changes
|
|
66
|
+
- `path/to/new-file.ts` — new file, what it does
|
|
67
|
+
|
|
68
|
+
## Risks & Alternatives Considered
|
|
69
|
+
|
|
70
|
+
- Risk: what could go wrong; mitigation
|
|
71
|
+
- Alternative: <other approach>; why rejected
|
|
72
|
+
|
|
73
|
+
## Test Plan
|
|
74
|
+
|
|
75
|
+
How to verify this works once implemented. The reviewer will use this at the `dev-approval` gate to test the running worktree.
|
|
76
|
+
|
|
77
|
+
- Unit test: <what to test>
|
|
78
|
+
- Manual: <what to click / observe>
|
|
79
|
+
- Cross-platform: <if applicable — what to verify on iOS / Android / web>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 4. Commit and Push
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
git add codev/plans/{{artifact_name}}.md
|
|
86
|
+
git commit -m "[PIR #{{issue.number}}] Plan draft"
|
|
87
|
+
git push -u origin "$(git branch --show-current)"
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**Never use `git add .` or `git add -A`.**
|
|
91
|
+
|
|
92
|
+
### 5. Signal Phase Complete
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
porch done {{project_id}}
|
|
96
|
+
porch next {{project_id}}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
`porch next` will respond with `gate_pending` on the `plan-approval` gate. Porch automatically notifies the architect.
|
|
100
|
+
|
|
101
|
+
### 6. End Your Turn With a Prose Summary
|
|
102
|
+
|
|
103
|
+
Output something like:
|
|
104
|
+
|
|
105
|
+
> Plan written to `codev/plans/{{artifact_name}}.md` and committed. Ready for review — type any feedback here, edit the plan file directly in VSCode, or approve with `porch approve {{project_id}} plan-approval --a-human-explicitly-approved-this` (Cmd+K G in VSCode).
|
|
106
|
+
|
|
107
|
+
Then **stay in the interactive session**. Do not exit. Wait for the user's next message.
|
|
108
|
+
|
|
109
|
+
## Signals
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
<signal>PHASE_COMPLETE</signal> # Plan drafted (informational; the real signal is porch done)
|
|
113
|
+
<signal>BLOCKED:reason</signal> # Cannot proceed
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## What NOT to Do
|
|
117
|
+
|
|
118
|
+
- Don't write code — that's the implement phase
|
|
119
|
+
- Don't run `porch approve` yourself — only the human can approve the gate
|
|
120
|
+
- Don't post the plan content as a GitHub issue comment — the plan lives in the file, not the issue thread. A one-line pointer comment on the issue is fine if you think it helps the discussion.
|
|
121
|
+
- Don't use `git add .` or `git add -A`
|
|
122
|
+
- Don't exit the interactive session at the gate
|
|
123
|
+
|
|
124
|
+
## Handling Feedback
|
|
125
|
+
|
|
126
|
+
When the reviewer provides feedback (typed in pane, file-edit, `afx send`, or issue comment):
|
|
127
|
+
|
|
128
|
+
1. Re-read the plan file (the user may have edited it)
|
|
129
|
+
2. Apply the requested changes to your plan
|
|
130
|
+
3. Recommit: `git add codev/plans/{{artifact_name}}.md && git commit -m "[PIR #{{issue.number}}] Plan revised"`
|
|
131
|
+
4. Push
|
|
132
|
+
5. Output a short "Revised — see commit X" message
|
|
133
|
+
6. Wait for next input — the gate remains pending until the human approves
|