@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.
Files changed (82) hide show
  1. package/dashboard-dist/assets/index-0yEACH2F.css +32 -0
  2. package/dashboard-dist/assets/{index-Dn9zmcKp.js → index-DUQ8fmjX.js} +29 -29
  3. package/dashboard-dist/assets/index-DUQ8fmjX.js.map +1 -0
  4. package/dashboard-dist/index.html +2 -2
  5. package/dist/agent-farm/cli.js +1 -1
  6. package/dist/agent-farm/cli.js.map +1 -1
  7. package/dist/agent-farm/commands/cleanup.js +13 -0
  8. package/dist/agent-farm/commands/cleanup.js.map +1 -1
  9. package/dist/agent-farm/commands/dev.d.ts.map +1 -1
  10. package/dist/agent-farm/commands/dev.js +10 -3
  11. package/dist/agent-farm/commands/dev.js.map +1 -1
  12. package/dist/agent-farm/commands/spawn-worktree.d.ts +12 -3
  13. package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -1
  14. package/dist/agent-farm/commands/spawn-worktree.js +17 -6
  15. package/dist/agent-farm/commands/spawn-worktree.js.map +1 -1
  16. package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
  17. package/dist/agent-farm/commands/spawn.js +52 -21
  18. package/dist/agent-farm/commands/spawn.js.map +1 -1
  19. package/dist/agent-farm/db/index.d.ts.map +1 -1
  20. package/dist/agent-farm/db/index.js +34 -0
  21. package/dist/agent-farm/db/index.js.map +1 -1
  22. package/dist/agent-farm/db/schema.d.ts +1 -1
  23. package/dist/agent-farm/db/schema.d.ts.map +1 -1
  24. package/dist/agent-farm/db/schema.js +1 -1
  25. package/dist/agent-farm/servers/analytics.d.ts.map +1 -1
  26. package/dist/agent-farm/servers/analytics.js +1 -0
  27. package/dist/agent-farm/servers/analytics.js.map +1 -1
  28. package/dist/agent-farm/servers/overview.d.ts +25 -3
  29. package/dist/agent-farm/servers/overview.d.ts.map +1 -1
  30. package/dist/agent-farm/servers/overview.js +72 -10
  31. package/dist/agent-farm/servers/overview.js.map +1 -1
  32. package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
  33. package/dist/agent-farm/servers/tower-routes.js +54 -14
  34. package/dist/agent-farm/servers/tower-routes.js.map +1 -1
  35. package/dist/agent-farm/types.d.ts +1 -1
  36. package/dist/agent-farm/types.d.ts.map +1 -1
  37. package/dist/agent-farm/utils/agent-names.d.ts.map +1 -1
  38. package/dist/agent-farm/utils/agent-names.js +3 -0
  39. package/dist/agent-farm/utils/agent-names.js.map +1 -1
  40. package/dist/cli.js +1 -1
  41. package/dist/cli.js.map +1 -1
  42. package/dist/commands/porch/artifacts.d.ts +23 -1
  43. package/dist/commands/porch/artifacts.d.ts.map +1 -1
  44. package/dist/commands/porch/artifacts.js +51 -62
  45. package/dist/commands/porch/artifacts.js.map +1 -1
  46. package/dist/commands/porch/index.d.ts +23 -2
  47. package/dist/commands/porch/index.d.ts.map +1 -1
  48. package/dist/commands/porch/index.js +83 -4
  49. package/dist/commands/porch/index.js.map +1 -1
  50. package/dist/commands/porch/notify.d.ts +27 -5
  51. package/dist/commands/porch/notify.d.ts.map +1 -1
  52. package/dist/commands/porch/notify.js +23 -12
  53. package/dist/commands/porch/notify.js.map +1 -1
  54. package/dist/commands/porch/state.d.ts +1 -1
  55. package/dist/commands/porch/state.d.ts.map +1 -1
  56. package/dist/commands/porch/state.js +8 -6
  57. package/dist/commands/porch/state.js.map +1 -1
  58. package/dist/lib/github.d.ts +9 -1
  59. package/dist/lib/github.d.ts.map +1 -1
  60. package/dist/lib/github.js +34 -3
  61. package/dist/lib/github.js.map +1 -1
  62. package/dist/lib/team-github.d.ts +4 -0
  63. package/dist/lib/team-github.d.ts.map +1 -1
  64. package/dist/lib/team-github.js +14 -3
  65. package/dist/lib/team-github.js.map +1 -1
  66. package/package.json +4 -4
  67. package/scripts/forge/gitea/issue-list.sh +24 -1
  68. package/scripts/forge/gitea/pr-list.sh +21 -1
  69. package/scripts/forge/gitea/recently-closed.sh +19 -1
  70. package/scripts/forge/gitea/recently-merged.sh +25 -1
  71. package/skeleton/protocols/pir/builder-prompt.md +92 -0
  72. package/skeleton/protocols/pir/consult-types/impl-review.md +78 -0
  73. package/skeleton/protocols/pir/consult-types/pr-review.md +65 -0
  74. package/skeleton/protocols/pir/prompts/implement.md +156 -0
  75. package/skeleton/protocols/pir/prompts/plan.md +133 -0
  76. package/skeleton/protocols/pir/prompts/review.md +261 -0
  77. package/skeleton/protocols/pir/protocol.json +125 -0
  78. package/skeleton/protocols/pir/protocol.md +204 -0
  79. package/skeleton/templates/AGENTS.md +24 -0
  80. package/skeleton/templates/CLAUDE.md +24 -0
  81. package/dashboard-dist/assets/index-BWYZtvwm.css +0 -32
  82. 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
- exec tea pulls list --state closed --limit 1000 --output json
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