@cluesmith/codev 2.0.0-rc.57 → 2.0.0-rc.59
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-CXloFYpB.css +32 -0
- package/dashboard/dist/assets/index-Ca2fjOJf.js +131 -0
- package/dashboard/dist/assets/index-Ca2fjOJf.js.map +1 -0
- package/dashboard/dist/index.html +2 -2
- package/dist/agent-farm/commands/attach.d.ts.map +1 -1
- package/dist/agent-farm/commands/attach.js +31 -8
- package/dist/agent-farm/commands/attach.js.map +1 -1
- package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn.js +38 -28
- package/dist/agent-farm/commands/spawn.js.map +1 -1
- package/dist/agent-farm/commands/start.d.ts.map +1 -1
- package/dist/agent-farm/commands/start.js +3 -226
- package/dist/agent-farm/commands/start.js.map +1 -1
- package/dist/agent-farm/commands/status.d.ts.map +1 -1
- package/dist/agent-farm/commands/status.js +5 -2
- package/dist/agent-farm/commands/status.js.map +1 -1
- package/dist/agent-farm/db/index.d.ts.map +1 -1
- package/dist/agent-farm/db/index.js +45 -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 +2 -2
- package/dist/agent-farm/hq-connector.d.ts +0 -4
- package/dist/agent-farm/hq-connector.d.ts.map +1 -1
- package/dist/agent-farm/hq-connector.js +0 -15
- package/dist/agent-farm/hq-connector.js.map +1 -1
- package/dist/agent-farm/servers/tower-server.js +82 -22
- package/dist/agent-farm/servers/tower-server.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/consult/index.d.ts +1 -0
- package/dist/commands/consult/index.d.ts.map +1 -1
- package/dist/commands/consult/index.js +23 -4
- package/dist/commands/consult/index.js.map +1 -1
- package/dist/commands/porch/checks.d.ts +3 -2
- package/dist/commands/porch/checks.d.ts.map +1 -1
- package/dist/commands/porch/checks.js +8 -2
- package/dist/commands/porch/checks.js.map +1 -1
- package/dist/commands/porch/index.d.ts.map +1 -1
- package/dist/commands/porch/index.js +21 -23
- package/dist/commands/porch/index.js.map +1 -1
- package/dist/commands/porch/next.d.ts +22 -0
- package/dist/commands/porch/next.d.ts.map +1 -0
- package/dist/commands/porch/next.js +475 -0
- package/dist/commands/porch/next.js.map +1 -0
- package/dist/commands/porch/protocol.d.ts +3 -3
- package/dist/commands/porch/protocol.d.ts.map +1 -1
- package/dist/commands/porch/protocol.js +40 -6
- package/dist/commands/porch/protocol.js.map +1 -1
- package/dist/commands/porch/types.d.ts +36 -1
- package/dist/commands/porch/types.d.ts.map +1 -1
- package/dist/commands/porch/verdict.d.ts +31 -0
- package/dist/commands/porch/verdict.d.ts.map +1 -0
- package/dist/commands/porch/verdict.js +59 -0
- package/dist/commands/porch/verdict.js.map +1 -0
- package/package.json +5 -7
- package/skeleton/porch/prompts/defend.md +1 -1
- package/skeleton/porch/prompts/evaluate.md +2 -2
- package/skeleton/porch/prompts/implement.md +1 -1
- package/skeleton/porch/prompts/plan.md +1 -1
- package/skeleton/porch/prompts/review.md +4 -4
- package/skeleton/porch/prompts/specify.md +1 -1
- package/skeleton/porch/prompts/understand.md +2 -2
- package/skeleton/protocol-schema.json +3 -3
- package/skeleton/protocols/bugfix/builder-prompt.md +1 -1
- package/skeleton/protocols/experiment/protocol.md +3 -3
- package/skeleton/protocols/experiment/templates/notes.md +1 -1
- package/skeleton/protocols/maintain/protocol.md +1 -1
- package/skeleton/protocols/protocol-schema.json +1 -1
- package/skeleton/protocols/{spider → spir}/builder-prompt.md +1 -1
- package/skeleton/protocols/{spider → spir}/prompts/implement.md +1 -1
- package/skeleton/protocols/{spider → spir}/prompts/plan.md +2 -2
- package/skeleton/protocols/{spider → spir}/prompts/review.md +2 -2
- package/skeleton/protocols/{spider → spir}/prompts/specify.md +1 -1
- package/skeleton/protocols/{spider → spir}/protocol.json +2 -2
- package/skeleton/protocols/{spider → spir}/protocol.md +6 -8
- package/skeleton/protocols/{spider → spir}/templates/review.md +1 -1
- package/skeleton/protocols/tick/builder-prompt.md +1 -1
- package/skeleton/protocols/tick/protocol.md +18 -18
- package/skeleton/protocols/tick/templates/review.md +1 -1
- package/skeleton/resources/commands/overview.md +1 -1
- package/skeleton/resources/workflow-reference.md +2 -2
- package/skeleton/roles/architect.md +2 -2
- package/skeleton/roles/builder.md +2 -2
- package/skeleton/templates/AGENTS.md +1 -1
- package/skeleton/templates/CLAUDE.md +1 -1
- package/skeleton/templates/cheatsheet.md +3 -3
- package/skeleton/templates/projectlist.md +1 -1
- package/templates/dashboard/js/main.js +1 -1
- package/templates/open.html +26 -0
- package/dashboard/dist/assets/index-BV7KQvFU.css +0 -32
- package/dashboard/dist/assets/index-bhDjF0Oa.js +0 -131
- package/dashboard/dist/assets/index-bhDjF0Oa.js.map +0 -1
- package/dist/commands/porch/claude.d.ts +0 -27
- package/dist/commands/porch/claude.d.ts.map +0 -1
- package/dist/commands/porch/claude.js +0 -107
- package/dist/commands/porch/claude.js.map +0 -1
- package/dist/commands/porch/run.d.ts +0 -40
- package/dist/commands/porch/run.d.ts.map +0 -1
- package/dist/commands/porch/run.js +0 -893
- package/dist/commands/porch/run.js.map +0 -1
- /package/skeleton/protocols/{spider → spir}/templates/plan.md +0 -0
- /package/skeleton/protocols/{spider → spir}/templates/spec.md +0 -0
|
@@ -41,6 +41,13 @@ export interface ProtocolPhase {
|
|
|
41
41
|
checks?: string[];
|
|
42
42
|
next?: string | null;
|
|
43
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Check definition with optional working directory
|
|
46
|
+
*/
|
|
47
|
+
export interface CheckDef {
|
|
48
|
+
command: string;
|
|
49
|
+
cwd?: string;
|
|
50
|
+
}
|
|
44
51
|
/**
|
|
45
52
|
* Protocol definition (loaded from protocol.json)
|
|
46
53
|
*/
|
|
@@ -49,7 +56,7 @@ export interface Protocol {
|
|
|
49
56
|
version?: string;
|
|
50
57
|
description?: string;
|
|
51
58
|
phases: ProtocolPhase[];
|
|
52
|
-
checks?: Record<string,
|
|
59
|
+
checks?: Record<string, CheckDef>;
|
|
53
60
|
phase_completion?: Record<string, string>;
|
|
54
61
|
}
|
|
55
62
|
/**
|
|
@@ -117,6 +124,34 @@ export interface ProjectState {
|
|
|
117
124
|
started_at: string;
|
|
118
125
|
updated_at: string;
|
|
119
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* Response from `porch next <id>`.
|
|
129
|
+
* Tells the builder what to do next.
|
|
130
|
+
*/
|
|
131
|
+
export interface PorchNextResponse {
|
|
132
|
+
status: 'tasks' | 'gate_pending' | 'complete' | 'error';
|
|
133
|
+
phase: string;
|
|
134
|
+
iteration: number;
|
|
135
|
+
plan_phase?: string;
|
|
136
|
+
/** Present when status === 'tasks' or 'gate_pending' (gate tasks are actionable) */
|
|
137
|
+
tasks?: PorchTask[];
|
|
138
|
+
/** Present when status === 'gate_pending' */
|
|
139
|
+
gate?: string;
|
|
140
|
+
/** Present when status === 'error' */
|
|
141
|
+
error?: string;
|
|
142
|
+
/** Present when status === 'complete' */
|
|
143
|
+
summary?: string;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* A task for the builder to execute.
|
|
147
|
+
* Claude Code creates these via TaskCreate.
|
|
148
|
+
*/
|
|
149
|
+
export interface PorchTask {
|
|
150
|
+
subject: string;
|
|
151
|
+
activeForm: string;
|
|
152
|
+
description: string;
|
|
153
|
+
sequential?: boolean;
|
|
154
|
+
}
|
|
120
155
|
/**
|
|
121
156
|
* Result of running a check
|
|
122
157
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,cAAc,CAAC;IAClD,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verdict parsing for porch consultation reviews.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from run.ts so it can be shared by next.ts.
|
|
5
|
+
*/
|
|
6
|
+
import type { Verdict, ReviewResult } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Parse verdict from consultation output.
|
|
9
|
+
*
|
|
10
|
+
* Looks for the verdict line in format:
|
|
11
|
+
* VERDICT: APPROVE
|
|
12
|
+
* VERDICT: REQUEST_CHANGES
|
|
13
|
+
* VERDICT: COMMENT
|
|
14
|
+
*
|
|
15
|
+
* Also handles markdown formatting like:
|
|
16
|
+
* **VERDICT: APPROVE**
|
|
17
|
+
* *VERDICT: APPROVE*
|
|
18
|
+
*
|
|
19
|
+
* Safety: If no explicit verdict found (empty output, crash, malformed),
|
|
20
|
+
* defaults to REQUEST_CHANGES to prevent proceeding with unverified code.
|
|
21
|
+
*/
|
|
22
|
+
export declare function parseVerdict(output: string): Verdict;
|
|
23
|
+
/**
|
|
24
|
+
* Check if all reviewers approved (unanimity required).
|
|
25
|
+
*
|
|
26
|
+
* Returns true only if ALL reviewers explicitly APPROVE.
|
|
27
|
+
* COMMENT counts as approve (non-blocking feedback).
|
|
28
|
+
* CONSULT_ERROR and REQUEST_CHANGES block approval.
|
|
29
|
+
*/
|
|
30
|
+
export declare function allApprove(reviews: ReviewResult[]): boolean;
|
|
31
|
+
//# sourceMappingURL=verdict.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verdict.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/verdict.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAExD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAwBpD;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAG3D"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verdict parsing for porch consultation reviews.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from run.ts so it can be shared by next.ts.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Parse verdict from consultation output.
|
|
8
|
+
*
|
|
9
|
+
* Looks for the verdict line in format:
|
|
10
|
+
* VERDICT: APPROVE
|
|
11
|
+
* VERDICT: REQUEST_CHANGES
|
|
12
|
+
* VERDICT: COMMENT
|
|
13
|
+
*
|
|
14
|
+
* Also handles markdown formatting like:
|
|
15
|
+
* **VERDICT: APPROVE**
|
|
16
|
+
* *VERDICT: APPROVE*
|
|
17
|
+
*
|
|
18
|
+
* Safety: If no explicit verdict found (empty output, crash, malformed),
|
|
19
|
+
* defaults to REQUEST_CHANGES to prevent proceeding with unverified code.
|
|
20
|
+
*/
|
|
21
|
+
export function parseVerdict(output) {
|
|
22
|
+
// Empty or very short output = something went wrong
|
|
23
|
+
if (!output || output.trim().length < 50) {
|
|
24
|
+
return 'REQUEST_CHANGES';
|
|
25
|
+
}
|
|
26
|
+
// Scan lines LAST→FIRST so the actual verdict (at the end) takes priority
|
|
27
|
+
// over template text echoed by codex CLI at the start of output.
|
|
28
|
+
// Skip template lines containing "[" (e.g., "VERDICT: [APPROVE | REQUEST_CHANGES | COMMENT]")
|
|
29
|
+
const lines = output.split('\n');
|
|
30
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
31
|
+
// Strip markdown formatting (**, *, __, _, `) and trim
|
|
32
|
+
const stripped = lines[i].trim().replace(/^[\*_`-]+|[\*_`-]+$/g, '').trim().toUpperCase();
|
|
33
|
+
// Match "VERDICT: <value>" but NOT template "VERDICT: [APPROVE | ...]"
|
|
34
|
+
if (stripped.startsWith('VERDICT:') && !stripped.includes('[')) {
|
|
35
|
+
const value = stripped.substring('VERDICT:'.length).trim();
|
|
36
|
+
if (value.startsWith('REQUEST_CHANGES'))
|
|
37
|
+
return 'REQUEST_CHANGES';
|
|
38
|
+
if (value.startsWith('APPROVE'))
|
|
39
|
+
return 'APPROVE';
|
|
40
|
+
if (value.startsWith('COMMENT'))
|
|
41
|
+
return 'COMMENT';
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// No valid VERDICT: line found — default to REQUEST_CHANGES for safety
|
|
45
|
+
return 'REQUEST_CHANGES';
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Check if all reviewers approved (unanimity required).
|
|
49
|
+
*
|
|
50
|
+
* Returns true only if ALL reviewers explicitly APPROVE.
|
|
51
|
+
* COMMENT counts as approve (non-blocking feedback).
|
|
52
|
+
* CONSULT_ERROR and REQUEST_CHANGES block approval.
|
|
53
|
+
*/
|
|
54
|
+
export function allApprove(reviews) {
|
|
55
|
+
if (reviews.length === 0)
|
|
56
|
+
return true; // No verification = auto-approve
|
|
57
|
+
return reviews.every(r => r.verdict === 'APPROVE' || r.verdict === 'COMMENT');
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=verdict.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verdict.js","sourceRoot":"","sources":["../../../src/commands/porch/verdict.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,oDAAoD;IACpD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACzC,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,0EAA0E;IAC1E,iEAAiE;IACjE,8FAA8F;IAC9F,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,uDAAuD;QACvD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC1F,uEAAuE;QACvE,IAAI,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/D,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3D,IAAI,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC;gBAAE,OAAO,iBAAiB,CAAC;YAClE,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;gBAAE,OAAO,SAAS,CAAC;YAClD,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;gBAAE,OAAO,SAAS,CAAC;QACpD,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,OAAuB;IAChD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,iCAAiC;IACxE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;AAChF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cluesmith/codev",
|
|
3
|
-
"version": "2.0.0-rc.
|
|
3
|
+
"version": "2.0.0-rc.59",
|
|
4
4
|
"description": "Codev CLI - AI-assisted software development framework",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -26,34 +26,32 @@
|
|
|
26
26
|
"dev": "tsx src/cli.ts",
|
|
27
27
|
"start": "node dist/cli.js",
|
|
28
28
|
"test": "vitest",
|
|
29
|
-
"test:e2e": "vitest run --config vitest.e2e.config.ts",
|
|
29
|
+
"test:e2e": "npm run build && vitest run --config vitest.e2e.config.ts",
|
|
30
30
|
"test:e2e:watch": "vitest --config vitest.e2e.config.ts",
|
|
31
|
+
"test:e2e:playwright": "npx playwright test",
|
|
32
|
+
"test:e2e:cli": "npm run build && vitest run --config vitest.cli.config.ts",
|
|
31
33
|
"postinstall": "node -e \"try{require('fs').chmodSync(require('path').join(require.resolve('node-pty'),'..','..','prebuilds',process.platform+'-'+process.arch,'spawn-helper'),0o755)}catch{}\"",
|
|
32
34
|
"prepublishOnly": "npm run build"
|
|
33
35
|
},
|
|
34
36
|
"dependencies": {
|
|
35
|
-
"@anthropic-ai/claude-agent-sdk": "^0.2.25",
|
|
36
37
|
"@google/genai": "^1.0.0",
|
|
37
38
|
"better-sqlite3": "^12.5.0",
|
|
38
39
|
"chalk": "^5.3.0",
|
|
39
40
|
"commander": "^12.1.0",
|
|
40
41
|
"glob": "^11.0.0",
|
|
41
|
-
"http-proxy": "^1.18.1",
|
|
42
42
|
"js-yaml": "^4.1.0",
|
|
43
43
|
"node-pty": "^1.1.0",
|
|
44
44
|
"open": "^10.1.0",
|
|
45
|
-
"qrcode-terminal": "^0.12.0",
|
|
46
45
|
"tree-kill": "^1.2.2",
|
|
47
46
|
"ws": "^8.18.0"
|
|
48
47
|
},
|
|
49
48
|
"devDependencies": {
|
|
50
49
|
"@playwright/test": "^1.58.0",
|
|
51
50
|
"@types/better-sqlite3": "^7.6.13",
|
|
52
|
-
"@types/http-proxy": "^1.17.17",
|
|
53
51
|
"@types/js-yaml": "^4.0.9",
|
|
54
52
|
"@types/node": "^22.10.1",
|
|
55
|
-
"@types/qrcode-terminal": "^0.12.2",
|
|
56
53
|
"@types/ws": "^8.18.1",
|
|
54
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
57
55
|
"playwright": "^1.58.0",
|
|
58
56
|
"tsx": "^4.19.2",
|
|
59
57
|
"typescript": "^5.7.2",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Evaluate Phase Prompt
|
|
2
2
|
|
|
3
|
-
You are the **Verifier** hat in a Ralph-
|
|
3
|
+
You are the **Verifier** hat in a Ralph-SPIR loop.
|
|
4
4
|
|
|
5
5
|
## Your Mission
|
|
6
6
|
|
|
@@ -66,7 +66,7 @@ Create or update evaluation notes in the status file:
|
|
|
66
66
|
```markdown
|
|
67
67
|
## Evaluation Report
|
|
68
68
|
|
|
69
|
-
**Evaluator**: Ralph-
|
|
69
|
+
**Evaluator**: Ralph-SPIR Verifier
|
|
70
70
|
**Date**: {date}
|
|
71
71
|
**Phase**: {phase-name}
|
|
72
72
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Review Phase Prompt
|
|
2
2
|
|
|
3
|
-
You are the **Reviewer** hat in a Ralph-
|
|
3
|
+
You are the **Reviewer** hat in a Ralph-SPIR loop.
|
|
4
4
|
|
|
5
5
|
## Your Mission
|
|
6
6
|
|
|
7
|
-
Create the final deliverables: PR and review document. This is the capstone of the
|
|
7
|
+
Create the final deliverables: PR and review document. This is the capstone of the SPIR protocol.
|
|
8
8
|
|
|
9
9
|
## Input Context
|
|
10
10
|
|
|
@@ -27,7 +27,7 @@ Create `codev/reviews/{project-id}-{name}.md` with:
|
|
|
27
27
|
- **ID**: {project-id}
|
|
28
28
|
- **Spec**: `codev/specs/{project-id}-{name}.md`
|
|
29
29
|
- **Plan**: `codev/plans/{project-id}-{name}.md`
|
|
30
|
-
- **Protocol**: ralph-
|
|
30
|
+
- **Protocol**: ralph-spir
|
|
31
31
|
- **Completed**: {date}
|
|
32
32
|
|
|
33
33
|
## Summary
|
|
@@ -78,7 +78,7 @@ One paragraph summarizing what was built and why.
|
|
|
78
78
|
2. Pattern that worked well
|
|
79
79
|
|
|
80
80
|
### Process Insights
|
|
81
|
-
1. What worked well in the
|
|
81
|
+
1. What worked well in the SPIR process
|
|
82
82
|
2. What could be improved
|
|
83
83
|
|
|
84
84
|
## Recommendations
|
|
@@ -30,7 +30,7 @@ TICK is appropriate when:
|
|
|
30
30
|
- [ ] Requirements are clear
|
|
31
31
|
- [ ] No architectural changes needed
|
|
32
32
|
|
|
33
|
-
If NOT appropriate, signal: `<signal>
|
|
33
|
+
If NOT appropriate, signal: `<signal>NEEDS_SPIR</signal>`
|
|
34
34
|
|
|
35
35
|
### 3. Document Understanding
|
|
36
36
|
|
|
@@ -58,4 +58,4 @@ When understanding is complete:
|
|
|
58
58
|
|
|
59
59
|
- DO NOT start implementing
|
|
60
60
|
- DO NOT create new spec files (amend existing)
|
|
61
|
-
- Keep scope small - if > 300 LOC, recommend
|
|
61
|
+
- Keep scope small - if > 300 LOC, recommend SPIR instead
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://codev.dev/protocol-schema.json",
|
|
4
4
|
"title": "Codev Protocol Definition",
|
|
5
|
-
"description": "Schema for porch protocol definitions (
|
|
5
|
+
"description": "Schema for porch protocol definitions (SPIR, TICK, BUGFIX, etc.)",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"required": ["name", "phases"],
|
|
8
8
|
"properties": {
|
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
},
|
|
13
13
|
"name": {
|
|
14
14
|
"type": "string",
|
|
15
|
-
"description": "Protocol name (e.g., '
|
|
15
|
+
"description": "Protocol name (e.g., 'spir', 'tick', 'bugfix')",
|
|
16
16
|
"pattern": "^[a-z][a-z0-9-]*$"
|
|
17
17
|
},
|
|
18
18
|
"alias": {
|
|
19
19
|
"type": "string",
|
|
20
|
-
"description": "Alternative name for the protocol (e.g., '
|
|
20
|
+
"description": "Alternative name for the protocol (e.g., 'spider' for spir)"
|
|
21
21
|
},
|
|
22
22
|
"version": {
|
|
23
23
|
"type": "string",
|
|
@@ -39,7 +39,7 @@ Follow the BUGFIX protocol: `codev/protocols/bugfix/protocol.md`
|
|
|
39
39
|
|
|
40
40
|
If the fix is too complex (> 300 LOC or architectural changes), notify the Architect via:
|
|
41
41
|
```bash
|
|
42
|
-
af send architect "Issue #{{issue.number}} is more complex than expected. [Reason]. Recommend escalating to
|
|
42
|
+
af send architect "Issue #{{issue.number}} is more complex than expected. [Reason]. Recommend escalating to SPIR/TICK."
|
|
43
43
|
```
|
|
44
44
|
{{/if}}
|
|
45
45
|
|
|
@@ -10,7 +10,7 @@ Disciplined experimentation: Each experiment gets its own directory with `notes.
|
|
|
10
10
|
|
|
11
11
|
**Use for**: Testing approaches, evaluating models, prototyping, proof-of-concept work, research spikes
|
|
12
12
|
|
|
13
|
-
**Skip for**: Production code (use
|
|
13
|
+
**Skip for**: Production code (use SPIR), simple one-off scripts, well-understood implementations (use TICK)
|
|
14
14
|
|
|
15
15
|
## Structure
|
|
16
16
|
|
|
@@ -141,7 +141,7 @@ What should be done based on findings?
|
|
|
141
141
|
|
|
142
142
|
## Integration with Other Protocols
|
|
143
143
|
|
|
144
|
-
### Experiment →
|
|
144
|
+
### Experiment → SPIR
|
|
145
145
|
When an experiment validates an approach for production use:
|
|
146
146
|
|
|
147
147
|
1. Create a specification referencing the experiment
|
|
@@ -225,5 +225,5 @@ Determine if Redis caching improves API response times for repeated queries.
|
|
|
225
225
|
- Memory usage: 50MB for 10k cached responses
|
|
226
226
|
|
|
227
227
|
## Next Steps
|
|
228
|
-
Create
|
|
228
|
+
Create SPIR spec for production caching implementation.
|
|
229
229
|
```
|
|
@@ -88,7 +88,7 @@ Based on these findings:
|
|
|
88
88
|
|
|
89
89
|
1. **Immediate**: What should happen right after this experiment?
|
|
90
90
|
2. **Follow-up experiments**: What new questions emerged?
|
|
91
|
-
3. **Production path**: If validated, what's needed for production? (
|
|
91
|
+
3. **Production path**: If validated, what's needed for production? (SPIR spec?)
|
|
92
92
|
|
|
93
93
|
## References
|
|
94
94
|
|
|
@@ -479,7 +479,7 @@ MAINTAIN is an **operational protocol**, not a feature development protocol:
|
|
|
479
479
|
| Review | No |
|
|
480
480
|
| 3-Way Consultation | **Yes** (before creating PR) |
|
|
481
481
|
|
|
482
|
-
**Exception**: If MAINTAIN reveals need for architectural changes, those should follow
|
|
482
|
+
**Exception**: If MAINTAIN reveals need for architectural changes, those should follow SPIR.
|
|
483
483
|
|
|
484
484
|
---
|
|
485
485
|
|
|
@@ -21,7 +21,7 @@ You are running in STRICT mode. This means:
|
|
|
21
21
|
{{/if}}
|
|
22
22
|
|
|
23
23
|
## Protocol
|
|
24
|
-
Follow the
|
|
24
|
+
Follow the SPIR protocol: `codev/protocols/spir/protocol.md`
|
|
25
25
|
Read and internalize the protocol before starting any work.
|
|
26
26
|
|
|
27
27
|
{{#if spec}}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# PLAN Phase Prompt
|
|
2
2
|
|
|
3
|
-
You are executing the **PLAN** phase of the
|
|
3
|
+
You are executing the **PLAN** phase of the SPIR protocol.
|
|
4
4
|
|
|
5
5
|
## Your Goal
|
|
6
6
|
|
|
@@ -76,7 +76,7 @@ After completing the plan draft, signal completion. Porch will run 3-way consult
|
|
|
76
76
|
|
|
77
77
|
Create the plan file at `codev/plans/{{project_id}}-{{title}}.md`.
|
|
78
78
|
|
|
79
|
-
Use the plan template from `codev/protocols/
|
|
79
|
+
Use the plan template from `codev/protocols/spir/templates/plan.md` if available.
|
|
80
80
|
|
|
81
81
|
### Plan Structure
|
|
82
82
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# REVIEW Phase Prompt
|
|
2
2
|
|
|
3
|
-
You are executing the **REVIEW** phase of the
|
|
3
|
+
You are executing the **REVIEW** phase of the SPIR protocol.
|
|
4
4
|
|
|
5
5
|
## Your Goal
|
|
6
6
|
|
|
@@ -88,7 +88,7 @@ Brief description of what was implemented.
|
|
|
88
88
|
- [Insight 2]
|
|
89
89
|
|
|
90
90
|
### Methodology Improvements
|
|
91
|
-
- [Suggested improvement to
|
|
91
|
+
- [Suggested improvement to SPIR protocol]
|
|
92
92
|
- [Suggested improvement to tooling]
|
|
93
93
|
|
|
94
94
|
## Technical Debt
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
# SPIR Protocol
|
|
1
|
+
# SPIR Protocol
|
|
2
2
|
|
|
3
|
-
> **Also known as**: SPIDER (legacy name)
|
|
4
|
-
>
|
|
5
3
|
> **SPIR** = **S**pecify → **P**lan → **I**mplement → **R**eview
|
|
6
4
|
>
|
|
7
5
|
> Each phase has one build-verify cycle with 3-way consultation.
|
|
@@ -20,17 +18,17 @@
|
|
|
20
18
|
### Multi-Agent Consultation (ENABLED BY DEFAULT)
|
|
21
19
|
|
|
22
20
|
**DEFAULT BEHAVIOR:**
|
|
23
|
-
Multi-agent consultation is **ENABLED BY DEFAULT** when using
|
|
21
|
+
Multi-agent consultation is **ENABLED BY DEFAULT** when using SPIR protocol.
|
|
24
22
|
|
|
25
23
|
**DEFAULT AGENTS:**
|
|
26
24
|
- **GPT-5 Codex**: Primary reviewer for architecture, feasibility, and code quality
|
|
27
25
|
- **Gemini Pro**: Secondary reviewer for completeness, edge cases, and alternative approaches
|
|
28
26
|
|
|
29
27
|
**DISABLING CONSULTATION:**
|
|
30
|
-
To run
|
|
28
|
+
To run SPIR without consultation, say "without consultation" when starting work.
|
|
31
29
|
|
|
32
30
|
**CUSTOM AGENTS:**
|
|
33
|
-
The user can specify different agents by saying: "use
|
|
31
|
+
The user can specify different agents by saying: "use SPIR with consultation from [agent1] and [agent2]"
|
|
34
32
|
|
|
35
33
|
**CONSULTATION BEHAVIOR:**
|
|
36
34
|
- DEFAULT: MANDATORY consultation with GPT-5 and Gemini Pro at EVERY checkpoint
|
|
@@ -596,12 +594,12 @@ Implements bcrypt-based password hashing with configurable rounds
|
|
|
596
594
|
|
|
597
595
|
### Branch Naming
|
|
598
596
|
```
|
|
599
|
-
|
|
597
|
+
spir/####-<spec-name>/<phase-name>
|
|
600
598
|
```
|
|
601
599
|
|
|
602
600
|
Example:
|
|
603
601
|
```
|
|
604
|
-
|
|
602
|
+
spir/0001-user-authentication/database-schema
|
|
605
603
|
```
|
|
606
604
|
|
|
607
605
|
|
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
|
|
107
107
|
## Methodology Feedback
|
|
108
108
|
|
|
109
|
-
###
|
|
109
|
+
### SPIR Protocol Effectiveness
|
|
110
110
|
- **Specification Phase**: [Was it thorough enough? Too detailed?]
|
|
111
111
|
- **Planning Phase**: [Were estimates accurate? Phases well-sized?]
|
|
112
112
|
- **Implementation Loop**: [Did IDE cycle work well?]
|
|
@@ -22,7 +22,7 @@ You are running in STRICT mode. This means:
|
|
|
22
22
|
## Protocol
|
|
23
23
|
Follow the TICK protocol: `codev/protocols/tick/protocol.md`
|
|
24
24
|
|
|
25
|
-
TICK is for amendments to existing
|
|
25
|
+
TICK is for amendments to existing SPIR specifications. You will:
|
|
26
26
|
1. Identify the target spec to amend
|
|
27
27
|
2. Update the spec with the amendment
|
|
28
28
|
3. Update the plan
|
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
|
|
4
4
|
## Overview
|
|
5
5
|
|
|
6
|
-
TICK is an **amendment workflow** for existing
|
|
6
|
+
TICK is an **amendment workflow** for existing SPIR specifications. Rather than creating new standalone specs, TICK modifies existing spec and plan documents in-place, tracking changes in an "Amendments" section.
|
|
7
7
|
|
|
8
|
-
**Core Principle**: TICK is for *refining* existing specs.
|
|
8
|
+
**Core Principle**: TICK is for *refining* existing specs. SPIR is for *creating* new specs.
|
|
9
9
|
|
|
10
|
-
**Key Insight**: TICKs are not small
|
|
10
|
+
**Key Insight**: TICKs are not small SPIRs - they're amendments to existing SPIRs. This eliminates the "TICK vs SPIR" decision problem and keeps related work together.
|
|
11
11
|
|
|
12
12
|
## When to Use TICK
|
|
13
13
|
|
|
14
14
|
### Use TICK when:
|
|
15
|
-
- Making **amendments to an existing
|
|
15
|
+
- Making **amendments to an existing SPIR spec** that is already `integrated`
|
|
16
16
|
- Small scope (< 300 lines of new/changed code)
|
|
17
17
|
- Requirements are clear and well-defined
|
|
18
18
|
- No fundamental architecture changes
|
|
@@ -23,7 +23,7 @@ TICK is an **amendment workflow** for existing SPIDER specifications. Rather tha
|
|
|
23
23
|
- Utility function additions to existing modules
|
|
24
24
|
- Refactoring within an existing feature
|
|
25
25
|
|
|
26
|
-
### Use
|
|
26
|
+
### Use SPIR instead when:
|
|
27
27
|
- Creating a **new feature from scratch** (no existing spec to amend)
|
|
28
28
|
- Major architecture changes (scope too large for amendment)
|
|
29
29
|
- Unclear requirements needing exploration
|
|
@@ -31,8 +31,8 @@ TICK is an **amendment workflow** for existing SPIDER specifications. Rather tha
|
|
|
31
31
|
- Multiple stakeholders need alignment
|
|
32
32
|
|
|
33
33
|
### Cannot Use TICK when:
|
|
34
|
-
- No relevant
|
|
35
|
-
- Target spec is not yet `integrated` (complete the
|
|
34
|
+
- No relevant SPIR spec exists (create a new SPIR spec instead)
|
|
35
|
+
- Target spec is not yet `integrated` (complete the SPIR cycle first)
|
|
36
36
|
|
|
37
37
|
## Amendment Workflow
|
|
38
38
|
|
|
@@ -162,9 +162,9 @@ The format `[TICK ####-NNN]` identifies:
|
|
|
162
162
|
- `####`: Parent spec number (e.g., 0002)
|
|
163
163
|
- `NNN`: TICK amendment number (e.g., 001, 002, 003)
|
|
164
164
|
|
|
165
|
-
## Key Differences from
|
|
165
|
+
## Key Differences from SPIR
|
|
166
166
|
|
|
167
|
-
| Aspect |
|
|
167
|
+
| Aspect | SPIR | TICK |
|
|
168
168
|
|--------|--------|------|
|
|
169
169
|
| Purpose | Create new features | Amend existing features |
|
|
170
170
|
| File creation | Creates new spec/plan/review | Modifies spec/plan, creates review |
|
|
@@ -178,16 +178,16 @@ The format `[TICK ####-NNN]` identifies:
|
|
|
178
178
|
|
|
179
179
|
```
|
|
180
180
|
Is there an existing spec to amend?
|
|
181
|
-
├── NO → Use
|
|
181
|
+
├── NO → Use SPIR (create new spec)
|
|
182
182
|
└── YES → Is it integrated?
|
|
183
|
-
├── NO → Complete
|
|
183
|
+
├── NO → Complete SPIR cycle first
|
|
184
184
|
└── YES → Is the change small (<300 LOC)?
|
|
185
185
|
├── YES → Use TICK (amend existing spec)
|
|
186
|
-
└── NO → Use
|
|
186
|
+
└── NO → Use SPIR (scope too large)
|
|
187
187
|
```
|
|
188
188
|
|
|
189
189
|
**Mental Model**:
|
|
190
|
-
-
|
|
190
|
+
- SPIR = Create new feature from scratch
|
|
191
191
|
- TICK = Refine/extend existing feature
|
|
192
192
|
|
|
193
193
|
## Example TICK Workflow
|
|
@@ -251,7 +251,7 @@ Existing standalone TICK projects (created before this protocol change) are gran
|
|
|
251
251
|
1. **Single source of truth**: Spec file shows complete feature evolution
|
|
252
252
|
2. **Clear history**: Amendments section documents all changes chronologically
|
|
253
253
|
3. **Reduced fragmentation**: Related work stays together
|
|
254
|
-
4. **Simpler mental model**: "New vs amendment" is clearer than "
|
|
254
|
+
4. **Simpler mental model**: "New vs amendment" is clearer than "SPIR vs TICK"
|
|
255
255
|
5. **Preserved context**: Looking at a spec shows all refinements
|
|
256
256
|
|
|
257
257
|
## Limitations
|
|
@@ -264,14 +264,14 @@ Existing standalone TICK projects (created before this protocol change) are gran
|
|
|
264
264
|
## Best Practices
|
|
265
265
|
|
|
266
266
|
1. **Verify spec is integrated**: Never TICK a spec that isn't complete
|
|
267
|
-
2. **Keep TICKs small**: If scope grows, consider new
|
|
267
|
+
2. **Keep TICKs small**: If scope grows, consider new SPIR spec
|
|
268
268
|
3. **Clear summaries**: Amendment entries should be self-explanatory
|
|
269
269
|
4. **Test before review**: Always test functionality before presenting
|
|
270
270
|
5. **Honest documentation**: Document all deviations in review
|
|
271
271
|
|
|
272
272
|
## Templates
|
|
273
273
|
|
|
274
|
-
TICK uses the standard
|
|
275
|
-
- Spec template: `codev/protocols/
|
|
276
|
-
- Plan template: `codev/protocols/
|
|
274
|
+
TICK uses the standard SPIR templates with amendments sections:
|
|
275
|
+
- Spec template: `codev/protocols/spir/templates/spec.md` (includes Amendments section)
|
|
276
|
+
- Plan template: `codev/protocols/spir/templates/plan.md` (includes Amendment History section)
|
|
277
277
|
- Review template: `codev/protocols/tick/templates/review.md` (TICK-specific)
|