ridgeline 0.1.6 → 0.1.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/README.md CHANGED
@@ -15,8 +15,9 @@ execution when things go wrong.
15
15
  files, each with its own scope and acceptance criteria.
16
16
  3. **Build** -- for each phase the builder agent implements the spec inside your
17
17
  repo, then creates a git checkpoint.
18
- 4. **Review** -- the reviewer agent checks the output against the acceptance
19
- criteria and returns a structured verdict.
18
+ 4. **Review** -- the reviewer agent (read-only) checks the output against the
19
+ acceptance criteria and returns a structured verdict. On failure, the harness
20
+ generates a feedback file from the verdict for the builder's next attempt.
20
21
  5. **Retry or advance** -- failed phases are retried up to a configurable limit;
21
22
  passing phases hand off context to the next one.
22
23
 
@@ -104,6 +105,7 @@ same flags as `run`.
104
105
  ├── taste.md # Optional coding style preferences
105
106
  ├── phases/
106
107
  │ ├── 01-scaffold.md
108
+ │ ├── 01-scaffold.feedback.md # Generated by harness on review failure
107
109
  │ ├── 02-core.md
108
110
  │ └── ...
109
111
  ├── state.json # Phase statuses, retries, timestamps, git tags
@@ -6,6 +6,8 @@ model: opus
6
6
 
7
7
  You are a reviewer. You review a builder's work against a phase spec and produce a pass/fail verdict. You are a building inspector, not a mentor. Your job is to find what's wrong, not to validate what looks right.
8
8
 
9
+ You are **read-only**. You do not modify project files. You inspect, verify, and produce a structured verdict. The harness handles everything else.
10
+
9
11
  ## Your inputs
10
12
 
11
13
  These are injected into your context before you start:
@@ -15,7 +17,6 @@ These are injected into your context before you start:
15
17
  3. **Full changed files** — complete contents, not just diff hunks.
16
18
  4. **constraints.md** — technical guardrails the builder was required to follow.
17
19
  5. **Check command output** (if available) — results from the harness running the check command before invoking you.
18
- 6. **Feedback path** — where to write feedback if the phase fails (e.g., `phases/02-core-api.feedback.md`).
19
20
 
20
21
  ## Your process
21
22
 
@@ -54,13 +55,13 @@ Read constraints.md. Verify:
54
55
 
55
56
  A constraint violation is a failure, even if all acceptance criteria pass.
56
57
 
57
- ### 6. Create test files when appropriate
58
+ ### 6. Clean up
58
59
 
59
- You may write test files that verify acceptance criteria. Place them in the project's existing test directory structure. These persist and become part of the project. This is optional — do it when a test would provide stronger evidence than manual verification.
60
+ Kill every background process you started. Check with `ps` or `lsof` if uncertain. Leave the environment as you found it.
60
61
 
61
62
  ### 7. Produce the verdict
62
63
 
63
- Output a structured JSON block:
64
+ **The JSON verdict must be the very last thing you output.** After all analysis, verification, and cleanup, output a single structured JSON block. Nothing after it.
64
65
 
65
66
  ```json
66
67
  {
@@ -70,41 +71,31 @@ Output a structured JSON block:
70
71
  { "criterion": 1, "passed": true, "notes": "Evidence for verdict" },
71
72
  { "criterion": 2, "passed": false, "notes": "Evidence for verdict" }
72
73
  ],
73
- "issues": ["Blocking issue 1", "Blocking issue 2"],
74
- "suggestions": ["Non-blocking improvement 1"]
74
+ "issues": [
75
+ {
76
+ "criterion": 2,
77
+ "description": "GET /api/users returns empty array — seed script never invoked during test setup",
78
+ "file": "src/test/setup.ts",
79
+ "severity": "blocking",
80
+ "requiredState": "Test setup must invoke seed script so GET /api/users returns seeded data"
81
+ }
82
+ ],
83
+ "suggestions": [
84
+ {
85
+ "description": "Consider adding index on users.email for faster lookups",
86
+ "file": "src/db/schema.ts",
87
+ "severity": "suggestion"
88
+ }
89
+ ]
75
90
  }
76
91
  ```
77
92
 
78
- Every `notes` field must contain specific evidence. File paths. Line numbers. Command output. HTTP response bodies. Never "looks good." Never "seems correct."
79
-
80
- ### 8. Write feedback on failure
81
-
82
- If the phase fails, write a feedback file at the path specified in your context. This file is what the builder sees on retry. Its quality determines whether the retry succeeds.
83
-
84
- ```markdown
85
- # Reviewer Feedback: Phase <N>
86
-
87
- ## Failed Criteria
88
-
89
- ### Criterion <X>: <description>
90
- **Status:** FAIL
91
- **Evidence:** <what you found — exact output, file paths, line numbers>
92
- **Required state:** <what the fixed version must do — describe the outcome, not the implementation>
93
-
94
- ## Issues
93
+ **Field rules:**
95
94
 
96
- <List specific problems. File paths. Line numbers. What's wrong and why it matters.>
97
-
98
- ## What Passed
99
-
100
- <Brief summary of what doesn't need to be redone. Prevent the builder from breaking working code on retry.>
101
- ```
102
-
103
- Write feedback that a builder can act on without guessing. "Fix the tests" is useless. "Criterion 3 fails because GET /api/users returns an empty array — the seed script at src/db/seed.ts is never invoked during test setup in src/test/setup.ts" produces a targeted fix.
104
-
105
- ### 9. Clean up
106
-
107
- Kill every background process you started. Check with `ps` or `lsof` if uncertain. Leave the environment as you found it.
95
+ - `criteriaResults`: One entry per acceptance criterion. `notes` must contain specific evidence — file paths, line numbers, command output. Never "looks good." Never "seems correct."
96
+ - `issues`: Blocking problems that cause failure. Each must include `description` (what's wrong with evidence), `severity: "blocking"`, and `requiredState` (what the fix must achieve — describe the outcome, not the implementation). `criterion` and `file` are optional but preferred.
97
+ - `suggestions`: Non-blocking improvements. Same shape as issues but with `severity: "suggestion"`. No `requiredState` needed.
98
+ - `passed`: `true` only if every criterion passes and no blocking issues exist.
108
99
 
109
100
  ## Calibration
110
101
 
@@ -134,13 +125,10 @@ Do not pass phases out of sympathy. Do not pass phases because "it's close." Do
134
125
 
135
126
  **Scope your review.** You check acceptance criteria, constraint adherence, check command results, and regressions. You do not check code style, library choices, or implementation approach — unless constraints.md explicitly governs them.
136
127
 
137
- **Write precise feedback.** The feedback file is a mini-spec for the builder's retry. Vague feedback produces vague fixes. Include the exact failure, the exact evidence, and the exact required outcome.
138
-
139
128
  ## Output style
140
129
 
141
130
  You are running in a terminal. Plain text and JSON only.
142
131
 
143
132
  - `[review:<phase-id>] Starting review` at the beginning
144
133
  - Brief status lines as you verify each criterion
145
- - The JSON verdict block
146
- - `[review:<phase-id>] PASSED` or `[review:<phase-id>] FAILED: <count> criteria failed` at the end
134
+ - The JSON verdict block as the **final output** — nothing after it
@@ -1,6 +1,40 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.runPhase = void 0;
37
+ const fs = __importStar(require("node:fs"));
4
38
  const node_child_process_1 = require("node:child_process");
5
39
  const git_1 = require("../git");
6
40
  const budget_1 = require("../state/budget");
@@ -113,11 +147,13 @@ const runPhase = async (phase, config, state) => {
113
147
  (0, logging_1.logTrajectory)(config.buildDir, (0, logging_1.makeTrajectoryEntry)("phase_advance", phase.id, "Phase passed"));
114
148
  return "passed";
115
149
  }
116
- // Failed
150
+ // Failed — write feedback for builder retry
117
151
  (0, logging_1.logPhase)(phase.id, `FAILED: ${verdict.summary}`);
118
152
  for (const issue of verdict.issues) {
119
- (0, logging_1.logPhase)(phase.id, ` - ${issue}`);
153
+ (0, logging_1.logPhase)(phase.id, ` - ${(0, reviewerInvoker_1.formatIssue)(issue)}`);
120
154
  }
155
+ const feedbackFilePath = phase.filepath.replace(/\.md$/, ".feedback.md");
156
+ fs.writeFileSync(feedbackFilePath, (0, reviewerInvoker_1.generateFeedback)(phase.id, verdict), "utf-8");
121
157
  attempt++;
122
158
  if (attempt < maxAttempts) {
123
159
  (0, logging_1.logPhase)(phase.id, `Retrying (${attempt}/${config.maxRetries})...`);
@@ -1 +1 @@
1
- {"version":3,"file":"phaseRunner.js","sourceRoot":"","sources":["../../src/runner/phaseRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"phaseRunner.js","sourceRoot":"","sources":["../../src/runner/phaseRunner.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
- import { RidgelineConfig, PhaseInfo, ClaudeResult, ReviewVerdict } from "../types";
1
+ import { RidgelineConfig, PhaseInfo, ClaudeResult, ReviewVerdict, ReviewIssue } from "../types";
2
2
  export declare const parseVerdict: (text: string) => ReviewVerdict;
3
+ export declare const formatIssue: (issue: ReviewIssue) => string;
4
+ export declare const generateFeedback: (phaseId: string, verdict: ReviewVerdict) => string;
3
5
  export declare const invokeReviewer: (config: RidgelineConfig, phase: PhaseInfo, checkpointTag: string, checkOutput: {
4
6
  command: string;
5
7
  output: string;
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.invokeReviewer = exports.parseVerdict = void 0;
36
+ exports.invokeReviewer = exports.generateFeedback = exports.formatIssue = exports.parseVerdict = void 0;
37
37
  const fs = __importStar(require("node:fs"));
38
38
  const path = __importStar(require("node:path"));
39
39
  const claudeInvoker_1 = require("./claudeInvoker");
@@ -48,38 +48,180 @@ const resolveAgentPrompt = (filename) => {
48
48
  const rootPath = path.join(__dirname, "..", "..", "src", "agents", filename);
49
49
  return fs.readFileSync(rootPath, "utf-8");
50
50
  };
51
+ // Normalize an issue entry — accept both string and object forms
52
+ const normalizeIssue = (item, severity) => {
53
+ if (typeof item === "string") {
54
+ return { description: item, severity };
55
+ }
56
+ if (typeof item === "object" && item !== null) {
57
+ const obj = item;
58
+ return {
59
+ criterion: typeof obj.criterion === "number" ? obj.criterion : undefined,
60
+ description: typeof obj.description === "string" ? obj.description : String(obj.description ?? ""),
61
+ file: typeof obj.file === "string" ? obj.file : undefined,
62
+ severity,
63
+ requiredState: typeof obj.requiredState === "string" ? obj.requiredState : undefined,
64
+ };
65
+ }
66
+ return { description: String(item), severity };
67
+ };
68
+ // Try to parse a raw object as a ReviewVerdict
69
+ const tryParseVerdict = (raw) => {
70
+ if (typeof raw !== "object" || raw === null)
71
+ return null;
72
+ const obj = raw;
73
+ if (typeof obj.passed !== "boolean")
74
+ return null;
75
+ return {
76
+ passed: obj.passed,
77
+ summary: typeof obj.summary === "string" ? obj.summary : "",
78
+ criteriaResults: Array.isArray(obj.criteriaResults)
79
+ ? obj.criteriaResults.map((cr) => ({
80
+ criterion: typeof cr.criterion === "number" ? cr.criterion : 0,
81
+ passed: typeof cr.passed === "boolean" ? cr.passed : false,
82
+ notes: typeof cr.notes === "string" ? cr.notes : "",
83
+ }))
84
+ : [],
85
+ issues: Array.isArray(obj.issues)
86
+ ? obj.issues.map((i) => normalizeIssue(i, "blocking"))
87
+ : [],
88
+ suggestions: Array.isArray(obj.suggestions)
89
+ ? obj.suggestions.map((s) => normalizeIssue(s, "suggestion"))
90
+ : [],
91
+ };
92
+ };
51
93
  // Extract the JSON verdict block from reviewer's text output
52
94
  const parseVerdict = (text) => {
53
- // Look for a JSON block that contains "passed"
54
- const jsonMatch = text.match(/\{[\s\S]*?"passed"\s*:[\s\S]*?\n\}/);
55
- if (jsonMatch) {
95
+ // Try extracting from fenced code block first
96
+ const fencedMatch = text.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/);
97
+ if (fencedMatch) {
56
98
  try {
57
- return JSON.parse(jsonMatch[0]);
99
+ const result = tryParseVerdict(JSON.parse(fencedMatch[1]));
100
+ if (result)
101
+ return result;
58
102
  }
59
103
  catch {
60
- // Fall through to fenced block search
104
+ // Fall through
61
105
  }
62
106
  }
63
- // Try extracting from fenced code block
64
- const fencedMatch = text.match(/```(?:json)?\s*\n(\{[\s\S]*?\})\s*\n```/);
65
- if (fencedMatch) {
107
+ // Brute-force: scan every { and try JSON.parse from that position.
108
+ // For each {, first try the full slice, then try to find the matching }
109
+ // by scanning for } from the end of the string backwards.
110
+ for (let i = text.indexOf("{"); i !== -1; i = text.indexOf("{", i + 1)) {
111
+ const slice = text.slice(i);
66
112
  try {
67
- return JSON.parse(fencedMatch[1]);
113
+ const result = tryParseVerdict(JSON.parse(slice));
114
+ if (result)
115
+ return result;
68
116
  }
69
117
  catch {
70
- // Fall through
118
+ // Full slice failed (likely trailing text) — try to find balanced closing brace
119
+ let depth = 0;
120
+ let inString = false;
121
+ let escape = false;
122
+ for (let j = 0; j < slice.length; j++) {
123
+ const ch = slice[j];
124
+ if (escape) {
125
+ escape = false;
126
+ continue;
127
+ }
128
+ if (ch === "\\") {
129
+ escape = true;
130
+ continue;
131
+ }
132
+ if (ch === '"') {
133
+ inString = !inString;
134
+ continue;
135
+ }
136
+ if (inString)
137
+ continue;
138
+ if (ch === "{")
139
+ depth++;
140
+ if (ch === "}") {
141
+ depth--;
142
+ if (depth === 0) {
143
+ try {
144
+ const result = tryParseVerdict(JSON.parse(slice.slice(0, j + 1)));
145
+ if (result)
146
+ return result;
147
+ }
148
+ catch {
149
+ // Not valid JSON at this brace pair
150
+ }
151
+ break;
152
+ }
153
+ }
154
+ }
71
155
  }
72
156
  }
73
- // Default: assume failure if we can't parse
157
+ // Default: unparseable
74
158
  return {
75
159
  passed: false,
76
160
  summary: "Could not parse reviewer verdict from output",
77
161
  criteriaResults: [],
78
- issues: ["Reviewer output did not contain a valid JSON verdict"],
162
+ issues: [{ description: "Reviewer output did not contain a valid JSON verdict", severity: "blocking" }],
79
163
  suggestions: [],
80
164
  };
81
165
  };
82
166
  exports.parseVerdict = parseVerdict;
167
+ // Format a ReviewIssue for display
168
+ const formatIssue = (issue) => {
169
+ const parts = [];
170
+ if (issue.file)
171
+ parts.push(issue.file);
172
+ parts.push(issue.description);
173
+ return parts.join(": ");
174
+ };
175
+ exports.formatIssue = formatIssue;
176
+ // Generate feedback markdown from a structured verdict
177
+ const generateFeedback = (phaseId, verdict) => {
178
+ const lines = [];
179
+ lines.push(`# Reviewer Feedback: Phase ${phaseId}`);
180
+ lines.push("");
181
+ // Failed criteria
182
+ const failed = verdict.criteriaResults.filter((cr) => !cr.passed);
183
+ if (failed.length > 0) {
184
+ lines.push("## Failed Criteria");
185
+ lines.push("");
186
+ for (const cr of failed) {
187
+ lines.push(`### Criterion ${cr.criterion}`);
188
+ lines.push(`**Status:** FAIL`);
189
+ lines.push(`**Evidence:** ${cr.notes}`);
190
+ // Find matching issue with requiredState
191
+ const matchingIssue = verdict.issues.find((i) => i.criterion === cr.criterion);
192
+ if (matchingIssue?.requiredState) {
193
+ lines.push(`**Required state:** ${matchingIssue.requiredState}`);
194
+ }
195
+ lines.push("");
196
+ }
197
+ }
198
+ // Blocking issues
199
+ const blocking = verdict.issues.filter((i) => i.severity === "blocking");
200
+ if (blocking.length > 0) {
201
+ lines.push("## Issues");
202
+ lines.push("");
203
+ for (const issue of blocking) {
204
+ const filePart = issue.file ? ` (${issue.file})` : "";
205
+ lines.push(`- ${issue.description}${filePart}`);
206
+ if (issue.requiredState) {
207
+ lines.push(` - **Required:** ${issue.requiredState}`);
208
+ }
209
+ }
210
+ lines.push("");
211
+ }
212
+ // What passed
213
+ const passed = verdict.criteriaResults.filter((cr) => cr.passed);
214
+ if (passed.length > 0) {
215
+ lines.push("## What Passed");
216
+ lines.push("");
217
+ for (const cr of passed) {
218
+ lines.push(`- Criterion ${cr.criterion}: ${cr.notes}`);
219
+ }
220
+ lines.push("");
221
+ }
222
+ return lines.join("\n");
223
+ };
224
+ exports.generateFeedback = generateFeedback;
83
225
  const assembleUserPrompt = (config, phase, checkpointTag, checkOutput) => {
84
226
  const sections = [];
85
227
  sections.push("## Phase Spec\n");
@@ -119,10 +261,6 @@ const assembleUserPrompt = (config, phase, checkpointTag, checkOutput) => {
119
261
  sections.push("```");
120
262
  sections.push("");
121
263
  }
122
- const feedbackPath = phase.filepath.replace(/\.md$/, ".feedback.md");
123
- sections.push("## Feedback Path\n");
124
- sections.push(`If this phase fails, write your feedback to: ${feedbackPath}`);
125
- sections.push("");
126
264
  return sections.join("\n");
127
265
  };
128
266
  const invokeReviewer = async (config, phase, checkpointTag, checkOutput) => {
@@ -132,7 +270,7 @@ const invokeReviewer = async (config, phase, checkpointTag, checkOutput) => {
132
270
  systemPrompt,
133
271
  userPrompt,
134
272
  model: config.model,
135
- allowedTools: ["Read", "Write", "Bash", "Glob", "Grep"],
273
+ allowedTools: ["Read", "Bash", "Glob", "Grep"],
136
274
  cwd: process.cwd(),
137
275
  verbose: config.verbose,
138
276
  timeoutMs: config.timeoutMinutes * 60 * 1000,
@@ -1 +1 @@
1
- {"version":3,"file":"reviewerInvoker.js","sourceRoot":"","sources":["../../src/runner/reviewerInvoker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reviewerInvoker.js","sourceRoot":"","sources":["../../src/runner/reviewerInvoker.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -48,6 +48,13 @@ export type ClaudeResult = {
48
48
  };
49
49
  sessionId: string;
50
50
  };
51
+ export type ReviewIssue = {
52
+ criterion?: number;
53
+ description: string;
54
+ file?: string;
55
+ severity: "blocking" | "suggestion";
56
+ requiredState?: string;
57
+ };
51
58
  export type ReviewVerdict = {
52
59
  passed: boolean;
53
60
  summary: string;
@@ -56,8 +63,8 @@ export type ReviewVerdict = {
56
63
  passed: boolean;
57
64
  notes: string;
58
65
  }[];
59
- issues: string[];
60
- suggestions: string[];
66
+ issues: ReviewIssue[];
67
+ suggestions: ReviewIssue[];
61
68
  };
62
69
  export type BudgetEntry = {
63
70
  phase: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ridgeline",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "description": "Build harness for long-horizon software execution",
5
5
  "license": "MIT",
6
6
  "bin": {