@phamvuhoang/otto-core 0.20.0 → 0.22.0
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/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/loop.d.ts.map +1 -1
- package/dist/loop.js +212 -19
- package/dist/loop.js.map +1 -1
- package/dist/model-tier.d.ts +5 -0
- package/dist/model-tier.d.ts.map +1 -1
- package/dist/model-tier.js +13 -0
- package/dist/model-tier.js.map +1 -1
- package/dist/panel.d.ts +37 -3
- package/dist/panel.d.ts.map +1 -1
- package/dist/panel.js +126 -39
- package/dist/panel.js.map +1 -1
- package/dist/plan-artifacts.d.ts +10 -0
- package/dist/plan-artifacts.d.ts.map +1 -0
- package/dist/plan-artifacts.js +63 -0
- package/dist/plan-artifacts.js.map +1 -0
- package/dist/plan-gate.d.ts +10 -1
- package/dist/plan-gate.d.ts.map +1 -1
- package/dist/plan-gate.js +22 -4
- package/dist/plan-gate.js.map +1 -1
- package/dist/plan-report-cli.d.ts +2 -1
- package/dist/plan-report-cli.d.ts.map +1 -1
- package/dist/plan-report-cli.js +9 -32
- package/dist/plan-report-cli.js.map +1 -1
- package/dist/plan-rubric.d.ts +24 -0
- package/dist/plan-rubric.d.ts.map +1 -1
- package/dist/plan-rubric.js +122 -0
- package/dist/plan-rubric.js.map +1 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +3 -1
- package/dist/render.js.map +1 -1
- package/dist/report-finalize.d.ts +26 -0
- package/dist/report-finalize.d.ts.map +1 -0
- package/dist/report-finalize.js +222 -0
- package/dist/report-finalize.js.map +1 -0
- package/dist/report-rubric.d.ts +1 -1
- package/dist/report-rubric.d.ts.map +1 -1
- package/dist/report-rubric.js +3 -3
- package/dist/report-rubric.js.map +1 -1
- package/dist/review-severity.d.ts +41 -0
- package/dist/review-severity.d.ts.map +1 -0
- package/dist/review-severity.js +101 -0
- package/dist/review-severity.js.map +1 -0
- package/dist/risk.d.ts +3 -2
- package/dist/risk.d.ts.map +1 -1
- package/dist/risk.js +8 -7
- package/dist/risk.js.map +1 -1
- package/dist/run-report.d.ts +8 -0
- package/dist/run-report.d.ts.map +1 -1
- package/dist/run-report.js.map +1 -1
- package/dist/runner.d.ts +2 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +1 -1
- package/dist/runner.js.map +1 -1
- package/dist/stage-exec.d.ts.map +1 -1
- package/dist/stage-exec.js +3 -2
- package/dist/stage-exec.js.map +1 -1
- package/package.json +1 -1
- package/templates/lens-guidance/correctness.md +1 -0
- package/templates/lens-guidance/security.md +1 -0
- package/templates/lens-guidance/structural.md +25 -0
- package/templates/lens-guidance/task-fit.md +1 -0
- package/templates/lens-guidance/tests.md +1 -0
- package/templates/plan.md +36 -4
- package/templates/quality-report.md +18 -9
- package/templates/report-rewrite.md +25 -0
- package/templates/review-lens.md +16 -1
- package/templates/review-synth.md +18 -2
- package/templates/review-verify.md +11 -6
package/dist/plan-report-cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { join, resolve } from "node:path";
|
|
1
|
+
import { resolve } from "node:path";
|
|
3
2
|
import { assessPlanGate, formatPlanGate } from "./plan-gate.js";
|
|
4
|
-
import {
|
|
3
|
+
import { readTaskPlanDocuments } from "./plan-artifacts.js";
|
|
4
|
+
import { formatPlanDepthRubric, formatPlanRubric, scorePlanDepth, scorePlanQuality, } from "./plan-rubric.js";
|
|
5
5
|
const defaultDeps = {
|
|
6
6
|
env: process.env,
|
|
7
7
|
cwd: process.cwd(),
|
|
@@ -16,7 +16,7 @@ const defaultDeps = {
|
|
|
16
16
|
export function formatPlanReport(tasks) {
|
|
17
17
|
const lines = ["Plan report"];
|
|
18
18
|
for (const t of tasks) {
|
|
19
|
-
lines.push("", `Task ${t.taskKey}`, formatPlanRubric(t.score), formatPlanGate(assessPlanGate(t.score)));
|
|
19
|
+
lines.push("", `Task ${t.taskKey}`, formatPlanRubric(t.score), formatPlanDepthRubric(t.depth), formatPlanGate(assessPlanGate(t.score, { depth: t.depth })));
|
|
20
20
|
}
|
|
21
21
|
return lines.join("\n");
|
|
22
22
|
}
|
|
@@ -27,34 +27,11 @@ export function formatPlanReport(tasks) {
|
|
|
27
27
|
* {@link formatPlanReport} stays pure. Absent/unreadable dir → `[]`.
|
|
28
28
|
*/
|
|
29
29
|
export function readTaskPlans(workspaceDir) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
.map((e) => e.name)
|
|
36
|
-
.sort();
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
return [];
|
|
40
|
-
}
|
|
41
|
-
const scored = [];
|
|
42
|
-
for (const taskKey of entries) {
|
|
43
|
-
const doc = ["spec.md", "plan.md"]
|
|
44
|
-
.map((f) => {
|
|
45
|
-
try {
|
|
46
|
-
return readFileSync(join(tasksDir, taskKey, f), "utf8");
|
|
47
|
-
}
|
|
48
|
-
catch {
|
|
49
|
-
return "";
|
|
50
|
-
}
|
|
51
|
-
})
|
|
52
|
-
.join("\n");
|
|
53
|
-
if (doc.trim() === "")
|
|
54
|
-
continue;
|
|
55
|
-
scored.push({ taskKey, score: scorePlanQuality(doc) });
|
|
56
|
-
}
|
|
57
|
-
return scored;
|
|
30
|
+
return readTaskPlanDocuments(workspaceDir).map((task) => ({
|
|
31
|
+
taskKey: task.taskKey,
|
|
32
|
+
score: scorePlanQuality(task.doc),
|
|
33
|
+
depth: scorePlanDepth(task.doc),
|
|
34
|
+
}));
|
|
58
35
|
}
|
|
59
36
|
/**
|
|
60
37
|
* Drive `--plan-report`: score every authored task plan under `.otto/tasks/` and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-report-cli.js","sourceRoot":"","sources":["../src/plan-report-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"plan-report-cli.js","sourceRoot":"","sources":["../src/plan-report-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,GAGjB,MAAM,kBAAkB,CAAC;AAoB1B,MAAM,WAAW,GAAmB;IAClC,GAAG,EAAE,OAAO,CAAC,GAAG;IAChB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;IAClB,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;IAC1C,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;CAC3C,CAAC;AASF;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAsB;IACrD,MAAM,KAAK,GAAa,CAAC,aAAa,CAAC,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CACR,EAAE,EACF,QAAQ,CAAC,CAAC,OAAO,EAAE,EACnB,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,EACzB,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,EAC9B,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAC5D,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,YAAoB;IAChD,OAAO,qBAAqB,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACxD,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC;QACjC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;KAChC,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAuB,WAAW;IAElC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;IAC1C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,CACN,6BAA6B,YAAY,iBAAiB;YACxD,iEAAiE,CACpE,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,CAAC;AACX,CAAC"}
|
package/dist/plan-rubric.d.ts
CHANGED
|
@@ -51,6 +51,30 @@ export type PlanRubricScore = {
|
|
|
51
51
|
/** Labels of unmet criteria — the "what to improve" surface. */
|
|
52
52
|
missing: string[];
|
|
53
53
|
};
|
|
54
|
+
export type PlanDepthCriterion = "realFileMap" | "taskTestAndVerify" | "testableSuccessCriteria";
|
|
55
|
+
export type PlanDepthCriterionResult = {
|
|
56
|
+
criterion: PlanDepthCriterion;
|
|
57
|
+
label: string;
|
|
58
|
+
met: boolean;
|
|
59
|
+
detail: string;
|
|
60
|
+
};
|
|
61
|
+
export type PlanDepthScore = {
|
|
62
|
+
results: PlanDepthCriterionResult[];
|
|
63
|
+
metCount: number;
|
|
64
|
+
maxScore: number;
|
|
65
|
+
ratio: number;
|
|
66
|
+
missing: string[];
|
|
67
|
+
fileMap: string[];
|
|
68
|
+
};
|
|
69
|
+
export declare function extractPlanFileMap(doc: string): string[];
|
|
70
|
+
export declare function scorePlanDepth(doc: string): PlanDepthScore;
|
|
71
|
+
export declare function formatPlanDepthRubric(score: PlanDepthScore): string;
|
|
72
|
+
export type ScopeDriftResult = {
|
|
73
|
+
plannedFiles: string[];
|
|
74
|
+
touchedFiles: string[];
|
|
75
|
+
outOfScope: string[];
|
|
76
|
+
};
|
|
77
|
+
export declare function detectScopeDrift(planDoc: string, touchedFiles: string[]): ScopeDriftResult;
|
|
54
78
|
/**
|
|
55
79
|
* Score a spec/plan markdown document against {@link PLAN_CRITERIA}. Pure and
|
|
56
80
|
* deterministic — pass the spec text, the plan text, or both concatenated. Each
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-rubric.d.ts","sourceRoot":"","sources":["../src/plan-rubric.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,WAAW,GACX,YAAY,GACZ,SAAS,GACT,eAAe,GACf,WAAW,GACX,gBAAgB,GAChB,iBAAiB,CAAC;AAEtB,KAAK,YAAY,GAAG;IAClB,SAAS,EAAE,aAAa,CAAC;IACzB,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CAClC,CAAC;AAeF;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,YAAY,CA6DrD,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,aAAa,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,uDAAuD;IACvD,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,oBAAoB;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAe7D;AAID;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"plan-rubric.d.ts","sourceRoot":"","sources":["../src/plan-rubric.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,WAAW,GACX,YAAY,GACZ,SAAS,GACT,eAAe,GACf,WAAW,GACX,gBAAgB,GAChB,iBAAiB,CAAC;AAEtB,KAAK,YAAY,GAAG;IAClB,SAAS,EAAE,aAAa,CAAC;IACzB,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CAClC,CAAC;AAeF;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,YAAY,CA6DrD,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,aAAa,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,uDAAuD;IACvD,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,oBAAoB;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC1B,aAAa,GACb,mBAAmB,GACnB,yBAAyB,CAAC;AAE9B,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,kBAAkB,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,wBAAwB,EAAE,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAWF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAQxD;AAoCD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAkD1D;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAUnE;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAQF,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EAAE,GACrB,gBAAgB,CAmBlB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAe7D;AAID;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAQ/D"}
|
package/dist/plan-rubric.js
CHANGED
|
@@ -81,6 +81,128 @@ export const PLAN_CRITERIA = [
|
|
|
81
81
|
detect: (d) => /\b(?:success (?:criteria|metric)|acceptance (?:criteria|checklist|test)|done when|testing notes|testable)\b/i.test(d),
|
|
82
82
|
},
|
|
83
83
|
];
|
|
84
|
+
const REAL_PATH_RE = /`([^`\n]*(?:\/[^`\n]*|\.(?:ts|tsx|js|jsx|mjs|cjs|md|json|py|go|rs|java|rb|sh))[^\n`]*)`/gi;
|
|
85
|
+
const TEST_FILE_RE = /\b(?:__tests__\/\S+|\S+\.(?:test|spec)\.(?:ts|tsx|js|jsx|mjs|cjs)|\S+_test\.(?:go|py)|tests?\/\S+)\b/i;
|
|
86
|
+
const VERIFY_CMD_RE = /\bverify:\s*`?[^`\n]*(?:pnpm|npm run|vitest|tsc|node --test|node --|pytest|go test|cargo test|make)[^`\n]*`?/i;
|
|
87
|
+
const FAILING_TEST_RE = /\b(?:failing test|test[- ]first|tdd|red[- ]green|write (?:a |the )?(?:failing )?test|tests? (?:first|before)|pinned by)\b/i;
|
|
88
|
+
export function extractPlanFileMap(doc) {
|
|
89
|
+
const paths = new Set();
|
|
90
|
+
for (const match of doc.matchAll(REAL_PATH_RE)) {
|
|
91
|
+
const p = match[1].trim();
|
|
92
|
+
if (!p || /^https?:\/\//i.test(p))
|
|
93
|
+
continue;
|
|
94
|
+
paths.add(p.replace(/^\.\//, ""));
|
|
95
|
+
}
|
|
96
|
+
return [...paths].sort();
|
|
97
|
+
}
|
|
98
|
+
function taskBlocks(doc) {
|
|
99
|
+
const lines = doc.split("\n");
|
|
100
|
+
const blocks = [];
|
|
101
|
+
let cur = [];
|
|
102
|
+
const startsTask = (line) => /^\s*[-*]\s*\[[ xX]\]\s+\S/.test(line) || /^\s*\d+\.\s+\S/.test(line);
|
|
103
|
+
const flush = () => {
|
|
104
|
+
if (cur.length > 0)
|
|
105
|
+
blocks.push(cur.join("\n"));
|
|
106
|
+
cur = [];
|
|
107
|
+
};
|
|
108
|
+
for (const line of lines) {
|
|
109
|
+
if (startsTask(line)) {
|
|
110
|
+
flush();
|
|
111
|
+
cur.push(line);
|
|
112
|
+
}
|
|
113
|
+
else if (cur.length > 0) {
|
|
114
|
+
if (/^\S/.test(line) && line.trim() !== "")
|
|
115
|
+
flush();
|
|
116
|
+
else
|
|
117
|
+
cur.push(line);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
flush();
|
|
121
|
+
return blocks;
|
|
122
|
+
}
|
|
123
|
+
function successSection(doc) {
|
|
124
|
+
const m = /(?:^|\n)#{1,6}\s+[^\n]*(?:success criteria|acceptance criteria|testing notes)[^\n]*\n/i.exec(doc);
|
|
125
|
+
if (!m)
|
|
126
|
+
return "";
|
|
127
|
+
const rest = doc.slice(m.index + m[0].length);
|
|
128
|
+
const next = /(?:^|\n)#{1,6}\s+/.exec(rest);
|
|
129
|
+
return next ? rest.slice(0, next.index) : rest;
|
|
130
|
+
}
|
|
131
|
+
export function scorePlanDepth(doc) {
|
|
132
|
+
const fileMap = extractPlanFileMap(doc);
|
|
133
|
+
const tasks = taskBlocks(doc);
|
|
134
|
+
const badTasks = tasks.filter((t) => !FAILING_TEST_RE.test(t) ||
|
|
135
|
+
!TEST_FILE_RE.test(t) ||
|
|
136
|
+
!VERIFY_CMD_RE.test(t));
|
|
137
|
+
const success = successSection(doc);
|
|
138
|
+
const results = [
|
|
139
|
+
{
|
|
140
|
+
criterion: "realFileMap",
|
|
141
|
+
label: "File map names at least two real paths",
|
|
142
|
+
met: fileMap.length >= 2,
|
|
143
|
+
detail: `${fileMap.length} path(s) found`,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
criterion: "taskTestAndVerify",
|
|
147
|
+
label: "Each task names a failing test and verify command",
|
|
148
|
+
met: tasks.length > 0 && badTasks.length === 0,
|
|
149
|
+
detail: tasks.length === 0
|
|
150
|
+
? "no task blocks found"
|
|
151
|
+
: `${tasks.length - badTasks.length}/${tasks.length} task(s) deep enough`,
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
criterion: "testableSuccessCriteria",
|
|
155
|
+
label: "Success criteria are concretely testable",
|
|
156
|
+
met: success.trim().length > 0 &&
|
|
157
|
+
/\b(?:done when|pass(?:es)?|fails?|asserts?|verif(?:y|ied)|observable|expected result|acceptance)\b/i.test(success) &&
|
|
158
|
+
/\b(?:test|command|step|case|assert|expect|check)\b/i.test(success),
|
|
159
|
+
detail: success.trim()
|
|
160
|
+
? "success criteria section is concrete"
|
|
161
|
+
: "missing success criteria section",
|
|
162
|
+
},
|
|
163
|
+
];
|
|
164
|
+
const metCount = results.reduce((n, r) => n + (r.met ? 1 : 0), 0);
|
|
165
|
+
const maxScore = results.length;
|
|
166
|
+
return {
|
|
167
|
+
results,
|
|
168
|
+
metCount,
|
|
169
|
+
maxScore,
|
|
170
|
+
ratio: maxScore > 0 ? metCount / maxScore : 0,
|
|
171
|
+
missing: results.filter((r) => !r.met).map((r) => r.label),
|
|
172
|
+
fileMap,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
export function formatPlanDepthRubric(score) {
|
|
176
|
+
const header = `plan depth: ${score.metCount}/${score.maxScore} ` +
|
|
177
|
+
`(${pct.format(score.ratio * 100)}%)`;
|
|
178
|
+
const lines = score.results.map((r) => ` [${r.met ? "x" : " "}] ${r.label} — ${r.detail}`);
|
|
179
|
+
const tail = score.missing.length > 0 ? [` missing: ${score.missing.join(", ")}`] : [];
|
|
180
|
+
return [header, ...lines, ...tail].join("\n");
|
|
181
|
+
}
|
|
182
|
+
function withinScope(path, planned) {
|
|
183
|
+
if (path === planned)
|
|
184
|
+
return true;
|
|
185
|
+
const p = planned.replace(/\/+$/, "");
|
|
186
|
+
return path.startsWith(`${p}/`);
|
|
187
|
+
}
|
|
188
|
+
export function detectScopeDrift(planDoc, touchedFiles) {
|
|
189
|
+
const plannedFiles = extractPlanFileMap(planDoc);
|
|
190
|
+
const normalizedTouched = [
|
|
191
|
+
...new Set(touchedFiles.map((p) => p.replace(/^\.\//, ""))),
|
|
192
|
+
].sort();
|
|
193
|
+
if (plannedFiles.length === 0) {
|
|
194
|
+
return {
|
|
195
|
+
plannedFiles,
|
|
196
|
+
touchedFiles: normalizedTouched,
|
|
197
|
+
outOfScope: normalizedTouched,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
plannedFiles,
|
|
202
|
+
touchedFiles: normalizedTouched,
|
|
203
|
+
outOfScope: normalizedTouched.filter((t) => !plannedFiles.some((p) => withinScope(t, p))),
|
|
204
|
+
};
|
|
205
|
+
}
|
|
84
206
|
/**
|
|
85
207
|
* Score a spec/plan markdown document against {@link PLAN_CRITERIA}. Pure and
|
|
86
208
|
* deterministic — pass the spec text, the plan text, or both concatenated. Each
|
package/dist/plan-rubric.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-rubric.js","sourceRoot":"","sources":["../src/plan-rubric.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAoBH,uEAAuE;AACvE,SAAS,KAAK,CAAC,GAAW,EAAE,EAAU;IACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;AACtC,CAAC;AAED,6EAA6E;AAC7E,2EAA2E;AAC3E,MAAM,aAAa,GACjB,kFAAkF,CAAC;AACrF,qEAAqE;AACrE,MAAM,WAAW,GAAG,8BAA8B,CAAC;AACnD,MAAM,eAAe,GAAG,wBAAwB,CAAC;AAEjD;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAgC;IACxD;QACE,SAAS,EAAE,SAAS;QACpB,KAAK,EAAE,mBAAmB;QAC1B,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,qCAAqC,CAAC,IAAI,CAAC,CAAC,CAAC;KAC7D;IACD;QACE,SAAS,EAAE,WAAW;QACtB,KAAK,EAAE,yBAAyB;QAChC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,4CAA4C,CAAC,IAAI,CAAC,CAAC,CAAC;KACpE;IACD;QACE,SAAS,EAAE,YAAY;QACvB,KAAK,EAAE,yBAAyB;QAChC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CACZ,4FAA4F,CAAC,IAAI,CAC/F,CAAC,CACF;KACJ;IACD;QACE,SAAS,EAAE,SAAS;QACpB,KAAK,EAAE,sBAAsB;QAC7B,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CACZ,4EAA4E,CAAC,IAAI,CAC/E,CAAC,CACF,IAAI,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC;KACpC;IACD;QACE,SAAS,EAAE,eAAe;QAC1B,KAAK,EAAE,gBAAgB;QACvB,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CACZ,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC;YAC1B,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC;YAC9B,KAAK,CAAC,CAAC,EAAE,2BAA2B,CAAC,IAAI,CAAC;KAC7C;IACD;QACE,SAAS,EAAE,WAAW;QACtB,KAAK,EAAE,0BAA0B;QACjC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CACZ,4HAA4H,CAAC,IAAI,CAC/H,CAAC,CACF;KACJ;IACD;QACE,SAAS,EAAE,gBAAgB;QAC3B,KAAK,EAAE,0BAA0B;QACjC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CACZ,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;YACpB,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC,CAAC;gBACpC,qFAAqF,CAAC,IAAI,CACxF,CAAC,CACF,CAAC;KACP;IACD;QACE,SAAS,EAAE,iBAAiB;QAC5B,KAAK,EAAE,2BAA2B;QAClC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CACZ,8GAA8G,CAAC,IAAI,CACjH,CAAC,CACF;KACJ;CACF,CAAC;
|
|
1
|
+
{"version":3,"file":"plan-rubric.js","sourceRoot":"","sources":["../src/plan-rubric.ts"],"names":[],"mappings":"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"}
|
package/dist/render.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAuB5B,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEhD,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,YAAY,CAAC,EAAE,MAAM,CAAC;IAMtB,MAAM,CAAC,EAAE,YAAY,CAAC;IAItB,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,IAAI,CAAC;CAC1D,CAAC;AAEF,wBAAgB,YAAY,IAAI,MAAM,CAUrC;AAED,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,UAAU,EAChB,IAAI,GAAE,aAAkB,GACvB,MAAM,
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAuB5B,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEhD,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,YAAY,CAAC,EAAE,MAAM,CAAC;IAMtB,MAAM,CAAC,EAAE,YAAY,CAAC;IAItB,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,IAAI,CAAC;CAC1D,CAAC;AAEF,wBAAgB,YAAY,IAAI,MAAM,CAUrC;AAED,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,UAAU,EAChB,IAAI,GAAE,aAAkB,GACvB,MAAM,CAuIR"}
|
package/dist/render.js
CHANGED
|
@@ -53,9 +53,11 @@ export function renderTemplate(templatePath, vars, opts = {}) {
|
|
|
53
53
|
};
|
|
54
54
|
// Expand @include directives recursively until no directives remain.
|
|
55
55
|
// Each pass resolves relative paths against the including file's directory.
|
|
56
|
+
// vars are substituted into the path so @include:lens-guidance/{{ LENS }}.md works.
|
|
56
57
|
function expandIncludes(text, fromDir) {
|
|
57
58
|
const expanded = text.replace(INCLUDE_TAG, (_match, rel) => {
|
|
58
|
-
const
|
|
59
|
+
const resolvedRel = rel.replace(/\{\{\s*([A-Z0-9_]+)\s*\}\}/g, (m, k) => Object.prototype.hasOwnProperty.call(vars, k) ? vars[k] : m);
|
|
60
|
+
const target = isAbsolute(resolvedRel) ? resolvedRel : resolve(fromDir, resolvedRel);
|
|
59
61
|
const content = readFileSync(target, "utf8").replace(/\r?\n$/, "");
|
|
60
62
|
// Recurse so includes within included files are resolved relative to
|
|
61
63
|
// the included file's own directory.
|
package/dist/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE/D,OAAO,EACL,YAAY,EACZ,cAAc,GAGf,MAAM,oBAAoB,CAAC;AAE5B,iFAAiF;AACjF,mFAAmF;AACnF,wFAAwF;AACxF,sFAAsF;AACtF,wFAAwF;AACxF,2FAA2F;AAE3F,qFAAqF;AACrF,MAAM,aAAa,GAAG,eAAe,CAAC;AACtC,MAAM,SAAS,GAAG,aAAa,CAAC;AAChC,MAAM,WAAW,GAAG,sBAAsB,CAAC;AAC3C,wFAAwF;AACxF,kFAAkF;AAClF,gFAAgF;AAChF,MAAM,SAAS,GAAG,kCAAkC,CAAC;AACrD,MAAM,WAAW,GAAG,6BAA6B,CAAC;AAClD,MAAM,OAAO,GAAG,KAAK,CAAC;AACtB,gFAAgF;AAChF,kFAAkF;AAClF,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAsB1C,MAAM,UAAU,YAAY;IAC1B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,WAAW,CAAC;IACrD,mFAAmF;IACnF,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACzC,IAAI,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IAC9C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,YAAoB,EACpB,IAAgB,EAChB,OAAsB,EAAE;IAExB,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAE7B,+EAA+E;IAC/E,8EAA8E;IAC9E,4EAA4E;IAC5E,4EAA4E;IAC5E,6DAA6D;IAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,cAAc,CAAC;IAC7C,MAAM,eAAe,GAAG,CAAC,OAAe,EAAW,EAAE;QACnD,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjD,KAAK,MAAM,CAAC,IAAI,UAAU;YAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC;QACxD,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,qEAAqE;IACrE,4EAA4E;IAC5E,SAAS,cAAc,CAAC,IAAY,EAAE,OAAe;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,GAAW,EAAE,EAAE;YACjE,MAAM,MAAM,GAAG,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type RunManifest, type StageRecord } from "./run-report.js";
|
|
2
|
+
export type ReviewSeveritySummary = {
|
|
3
|
+
blocker: number;
|
|
4
|
+
major: number;
|
|
5
|
+
minor: number;
|
|
6
|
+
nit: number;
|
|
7
|
+
suppressed: number;
|
|
8
|
+
};
|
|
9
|
+
export type ScopeDriftSummary = {
|
|
10
|
+
plannedFiles: string[];
|
|
11
|
+
touchedFiles: string[];
|
|
12
|
+
outOfScope: string[];
|
|
13
|
+
};
|
|
14
|
+
export type FinalizeReportContext = {
|
|
15
|
+
manifest: RunManifest;
|
|
16
|
+
stages: StageRecord[];
|
|
17
|
+
headSha?: string | null;
|
|
18
|
+
changedFiles?: string[];
|
|
19
|
+
scopeDrift?: ScopeDriftSummary | null;
|
|
20
|
+
};
|
|
21
|
+
export declare const DEFAULT_REPORT_LEGIBILITY_THRESHOLD = 1;
|
|
22
|
+
export declare function extractRunReport(stageResult: string): string | null;
|
|
23
|
+
export declare function summarizeReviewSeverity(stages: StageRecord[]): ReviewSeveritySummary | null;
|
|
24
|
+
export declare function buildFallbackRunReport(ctx: FinalizeReportContext): string;
|
|
25
|
+
export declare function finalizeReportText(reportText: string | null, ctx: FinalizeReportContext): string;
|
|
26
|
+
//# sourceMappingURL=report-finalize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-finalize.d.ts","sourceRoot":"","sources":["../src/report-finalize.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;AAKzB,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,WAAW,CAAC;IACtB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACvC,CAAC;AAEF,eAAO,MAAM,mCAAmC,IAAI,CAAC;AAErD,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAInE;AAWD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,WAAW,EAAE,GACpB,qBAAqB,GAAG,IAAI,CAmB9B;AAmJD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,qBAAqB,GAAG,MAAM,CAkEzE;AAED,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,GAAG,EAAE,qBAAqB,GACzB,MAAM,CAUR"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { formatReportRubric, scoreReportLegibility } from "./report-rubric.js";
|
|
2
|
+
import { REPORT_MARKER, } from "./run-report.js";
|
|
3
|
+
const SENTINEL_RE = /\n?<promise>NO MORE TASKS<\/promise>\s*/g;
|
|
4
|
+
const H2_RE = /^##\s+/m;
|
|
5
|
+
export const DEFAULT_REPORT_LEGIBILITY_THRESHOLD = 1;
|
|
6
|
+
export function extractRunReport(stageResult) {
|
|
7
|
+
const start = stageResult.indexOf(REPORT_MARKER);
|
|
8
|
+
if (start < 0)
|
|
9
|
+
return null;
|
|
10
|
+
return stageResult.slice(start).replace(SENTINEL_RE, "").trimEnd() + "\n";
|
|
11
|
+
}
|
|
12
|
+
function stageLogRefs(stages) {
|
|
13
|
+
return stages
|
|
14
|
+
.filter((s) => s.logPath)
|
|
15
|
+
.map((s) => `- Stage log: \`${s.logPath}:1\` (${s.stage}, iteration ${s.iteration})`);
|
|
16
|
+
}
|
|
17
|
+
export function summarizeReviewSeverity(stages) {
|
|
18
|
+
const summary = {
|
|
19
|
+
blocker: 0,
|
|
20
|
+
major: 0,
|
|
21
|
+
minor: 0,
|
|
22
|
+
nit: 0,
|
|
23
|
+
suppressed: 0,
|
|
24
|
+
};
|
|
25
|
+
let seen = false;
|
|
26
|
+
for (const stage of stages) {
|
|
27
|
+
if (!stage.reviewSeverity)
|
|
28
|
+
continue;
|
|
29
|
+
seen = true;
|
|
30
|
+
summary.blocker += stage.reviewSeverity.blocker;
|
|
31
|
+
summary.major += stage.reviewSeverity.major;
|
|
32
|
+
summary.minor += stage.reviewSeverity.minor;
|
|
33
|
+
summary.nit += stage.reviewSeverity.nit;
|
|
34
|
+
summary.suppressed += stage.reviewSeverity.suppressed;
|
|
35
|
+
}
|
|
36
|
+
return seen ? summary : null;
|
|
37
|
+
}
|
|
38
|
+
function severitySentence(summary) {
|
|
39
|
+
if (!summary) {
|
|
40
|
+
return "No review-panel severity data was recorded for this run.";
|
|
41
|
+
}
|
|
42
|
+
const high = summary.blocker + summary.major;
|
|
43
|
+
if (high > 0) {
|
|
44
|
+
return `Automated review recorded ${summary.blocker} blocker and ${summary.major} major finding(s); review the engineer evidence before accepting.`;
|
|
45
|
+
}
|
|
46
|
+
if (summary.minor + summary.nit > 0) {
|
|
47
|
+
return `Automated review recorded no blockers or major findings; ${summary.minor} minor and ${summary.nit} nit finding(s) were tracked.`;
|
|
48
|
+
}
|
|
49
|
+
return "Automated review recorded no blocker, major, minor, or nit findings.";
|
|
50
|
+
}
|
|
51
|
+
function scopeSentence(scopeDrift) {
|
|
52
|
+
if (!scopeDrift)
|
|
53
|
+
return "";
|
|
54
|
+
if (scopeDrift.outOfScope.length === 0) {
|
|
55
|
+
return "Touched files stayed inside the authored plan file map.";
|
|
56
|
+
}
|
|
57
|
+
return `Scope drift flagged: ${scopeDrift.outOfScope.length} touched file(s) were outside the authored plan file map.`;
|
|
58
|
+
}
|
|
59
|
+
function insertSectionAfter(report, anchorHeading, section) {
|
|
60
|
+
const anchor = new RegExp(`^${anchorHeading.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\s*$`, "m");
|
|
61
|
+
const match = anchor.exec(report);
|
|
62
|
+
if (!match)
|
|
63
|
+
return `${report.trimEnd()}\n\n${section.trimEnd()}\n`;
|
|
64
|
+
const afterAnchor = match.index + match[0].length;
|
|
65
|
+
const rest = report.slice(afterAnchor);
|
|
66
|
+
const next = H2_RE.exec(rest);
|
|
67
|
+
const insertAt = next ? afterAnchor + next.index : report.length;
|
|
68
|
+
return `${report.slice(0, insertAt).trimEnd()}\n\n${section.trimEnd()}\n\n${report.slice(insertAt).trimStart()}`;
|
|
69
|
+
}
|
|
70
|
+
function ensureOutcomeSection(report, manifest) {
|
|
71
|
+
if (/^##\s+What You Can Now Do\s*$/m.test(report))
|
|
72
|
+
return report;
|
|
73
|
+
const task = manifest.inputs || `${manifest.bin} ${manifest.mode}`;
|
|
74
|
+
const section = [
|
|
75
|
+
"## What You Can Now Do",
|
|
76
|
+
"",
|
|
77
|
+
`Use this handoff to decide whether the requested work (${task}) is ready to accept. The emitted report did not include an outcome-first section, so verify the evidence below before accepting it.`,
|
|
78
|
+
].join("\n");
|
|
79
|
+
return insertSectionAfter(report, "## Verdict", section);
|
|
80
|
+
}
|
|
81
|
+
function insertRiskNotes(report, severity, scopeDrift) {
|
|
82
|
+
const scope = scopeSentence(scopeDrift);
|
|
83
|
+
const watchNote = `Automated risk note: ${[severitySentence(severity), scope]
|
|
84
|
+
.filter(Boolean)
|
|
85
|
+
.join(" ")}`;
|
|
86
|
+
let out = insertSectionAfter(report, "## What To Watch", ["", watchNote].join("\n"));
|
|
87
|
+
if (scopeDrift && scopeDrift.outOfScope.length > 0) {
|
|
88
|
+
out = insertSectionAfter(out, "## What I Was Unsure About", [
|
|
89
|
+
"",
|
|
90
|
+
`Automated uncertainty: ${scopeDrift.outOfScope.length} file(s) were touched outside the plan file map; confirm that scope expansion was intentional.`,
|
|
91
|
+
].join("\n"));
|
|
92
|
+
}
|
|
93
|
+
return out;
|
|
94
|
+
}
|
|
95
|
+
function automaticEvidenceLines(ctx) {
|
|
96
|
+
const lines = [];
|
|
97
|
+
if (ctx.headSha)
|
|
98
|
+
lines.push(`- Final HEAD: \`${ctx.headSha}\``);
|
|
99
|
+
const changed = ctx.changedFiles ?? [];
|
|
100
|
+
if (changed.length > 0) {
|
|
101
|
+
lines.push(`- Changed files from run start: ${changed.map((f) => `\`${f}\``).join(", ")}`);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
lines.push("- Changed files from run start: none recorded.");
|
|
105
|
+
}
|
|
106
|
+
lines.push(...stageLogRefs(ctx.stages));
|
|
107
|
+
const severity = summarizeReviewSeverity(ctx.stages);
|
|
108
|
+
if (severity) {
|
|
109
|
+
lines.push(`- Review severity counts: blocker ${severity.blocker}, major ${severity.major}, minor ${severity.minor}, nit ${severity.nit}, suppressed ${severity.suppressed}.`);
|
|
110
|
+
}
|
|
111
|
+
if (ctx.scopeDrift) {
|
|
112
|
+
if (ctx.scopeDrift.outOfScope.length === 0) {
|
|
113
|
+
lines.push("- Scope drift: none detected against the latest plan file map.");
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
lines.push(`- Scope drift: out-of-plan files ${ctx.scopeDrift.outOfScope
|
|
117
|
+
.map((f) => `\`${f}\``)
|
|
118
|
+
.join(", ")}.`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return lines;
|
|
122
|
+
}
|
|
123
|
+
function appendAutomatedEvidence(report, ctx) {
|
|
124
|
+
const section = [
|
|
125
|
+
"## Automated Evidence",
|
|
126
|
+
"",
|
|
127
|
+
...automaticEvidenceLines(ctx),
|
|
128
|
+
].join("\n");
|
|
129
|
+
return `${report.trimEnd()}\n\n${section}\n`;
|
|
130
|
+
}
|
|
131
|
+
function appendLegibilityGate(report) {
|
|
132
|
+
const score = scoreReportLegibility(report);
|
|
133
|
+
const passed = score.ratio >= DEFAULT_REPORT_LEGIBILITY_THRESHOLD;
|
|
134
|
+
const lines = [
|
|
135
|
+
"## Emit-Time Report Rubric",
|
|
136
|
+
"",
|
|
137
|
+
`Gate: **${passed ? "PASS" : "FAIL"}**`,
|
|
138
|
+
"",
|
|
139
|
+
"```text",
|
|
140
|
+
formatReportRubric(score),
|
|
141
|
+
"```",
|
|
142
|
+
];
|
|
143
|
+
if (!passed) {
|
|
144
|
+
lines.push("", `Rewrite request: revise the report before handoff by adding ${score.missing.join(", ")}.`);
|
|
145
|
+
}
|
|
146
|
+
return `${report.trimEnd()}\n\n${lines.join("\n")}\n`;
|
|
147
|
+
}
|
|
148
|
+
export function buildFallbackRunReport(ctx) {
|
|
149
|
+
const severity = summarizeReviewSeverity(ctx.stages);
|
|
150
|
+
const task = ctx.manifest.inputs || "(no explicit input)";
|
|
151
|
+
return [
|
|
152
|
+
REPORT_MARKER,
|
|
153
|
+
"",
|
|
154
|
+
"## Verdict",
|
|
155
|
+
"",
|
|
156
|
+
"**Needs human review** — Otto did not emit a model-authored quality report, so this harness-generated handoff is evidence-first.",
|
|
157
|
+
"",
|
|
158
|
+
"## What You Can Now Do",
|
|
159
|
+
"",
|
|
160
|
+
`Review whether the requested work (${task}) is ready to accept using the run facts and automated evidence below.`,
|
|
161
|
+
"",
|
|
162
|
+
"## Why",
|
|
163
|
+
"",
|
|
164
|
+
"Every run should leave a readable handoff, even when the agent finishes without writing one.",
|
|
165
|
+
"",
|
|
166
|
+
"## How To Verify",
|
|
167
|
+
"",
|
|
168
|
+
"1. Open the evidence bundle path listed under Automated Evidence.",
|
|
169
|
+
"2. Check the final commit and stage logs listed there; accept only if they match the requested outcome.",
|
|
170
|
+
"",
|
|
171
|
+
"## What To Watch",
|
|
172
|
+
"",
|
|
173
|
+
severitySentence(severity),
|
|
174
|
+
scopeSentence(ctx.scopeDrift) ||
|
|
175
|
+
"No scope-drift check was available for this run.",
|
|
176
|
+
"",
|
|
177
|
+
"## What I Was Unsure About",
|
|
178
|
+
"",
|
|
179
|
+
"The agent did not provide its own plain-language summary, so the user-facing outcome still needs human confirmation.",
|
|
180
|
+
"",
|
|
181
|
+
"---",
|
|
182
|
+
"",
|
|
183
|
+
"_Engineer detail below — a non-engineer can stop reading here._",
|
|
184
|
+
"",
|
|
185
|
+
"## Task Source",
|
|
186
|
+
"",
|
|
187
|
+
`- Mode: ${ctx.manifest.mode}`,
|
|
188
|
+
`- Source: ${ctx.manifest.inputs || "(no inputs)"}`,
|
|
189
|
+
`- Issue or plan: ${ctx.manifest.inputs || "(none)"}`,
|
|
190
|
+
"",
|
|
191
|
+
"## What Changed",
|
|
192
|
+
"",
|
|
193
|
+
"The harness can identify the final commit and changed files, but no model-authored change summary was emitted.",
|
|
194
|
+
"",
|
|
195
|
+
"## Evidence",
|
|
196
|
+
"",
|
|
197
|
+
...automaticEvidenceLines(ctx),
|
|
198
|
+
"",
|
|
199
|
+
"## Human Acceptance Checklist",
|
|
200
|
+
"",
|
|
201
|
+
"- [ ] Solves the stated problem.",
|
|
202
|
+
"- [ ] Behavior is observable or explained.",
|
|
203
|
+
"- [ ] Scope is appropriate.",
|
|
204
|
+
"- [ ] Docs/examples are updated when needed.",
|
|
205
|
+
"- [ ] Risks and assumptions are clear.",
|
|
206
|
+
"",
|
|
207
|
+
"## Gaps And Follow-Ups",
|
|
208
|
+
"",
|
|
209
|
+
"- Gap: model-authored report was missing.",
|
|
210
|
+
"- Deferred: none recorded by the harness.",
|
|
211
|
+
"- Recommended next action: review the evidence bundle before accepting the run.",
|
|
212
|
+
"",
|
|
213
|
+
].join("\n");
|
|
214
|
+
}
|
|
215
|
+
export function finalizeReportText(reportText, ctx) {
|
|
216
|
+
const base = reportText ? reportText : buildFallbackRunReport(ctx);
|
|
217
|
+
const withOutcome = ensureOutcomeSection(base, ctx.manifest);
|
|
218
|
+
const withRisk = insertRiskNotes(withOutcome, summarizeReviewSeverity(ctx.stages), ctx.scopeDrift);
|
|
219
|
+
const withEvidence = appendAutomatedEvidence(withRisk, ctx);
|
|
220
|
+
return appendLegibilityGate(withEvidence);
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=report-finalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-finalize.js","sourceRoot":"","sources":["../src/report-finalize.ts"],"names":[],"mappings":"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"}
|
package/dist/report-rubric.d.ts
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* the *semantic* quality a human judges at review. Heuristic and labelled as
|
|
20
20
|
* such, mirroring plan-rubric.ts's discipline.
|
|
21
21
|
*/
|
|
22
|
-
export type ReportCriterion = "verdict" | "
|
|
22
|
+
export type ReportCriterion = "verdict" | "whatYouCanNowDo" | "why" | "howToVerify" | "whatToWatch" | "uncertainty" | "engineerDivider";
|
|
23
23
|
type CriterionDef = {
|
|
24
24
|
criterion: ReportCriterion;
|
|
25
25
|
/** Human-readable label for the scorecard. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report-rubric.d.ts","sourceRoot":"","sources":["../src/report-rubric.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,
|
|
1
|
+
{"version":3,"file":"report-rubric.d.ts","sourceRoot":"","sources":["../src/report-rubric.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,iBAAiB,GACjB,KAAK,GACL,aAAa,GACb,aAAa,GACb,aAAa,GACb,iBAAiB,CAAC;AAEtB,KAAK,YAAY,GAAG;IAClB,SAAS,EAAE,eAAe,CAAC;IAC3B,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CAClC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC,YAAY,CA0CvD,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,eAAe,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,uDAAuD;IACvD,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,oBAAoB;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAepE;AAID;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAQnE"}
|
package/dist/report-rubric.js
CHANGED
|
@@ -32,9 +32,9 @@ export const REPORT_CRITERIA = [
|
|
|
32
32
|
detect: (d) => /(?:^|\n)#{1,6}\s+Verdict\b/i.test(d),
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
|
-
criterion: "
|
|
36
|
-
label: "What
|
|
37
|
-
detect: (d) => /(?:^|\n)#{1,6}\s+What
|
|
35
|
+
criterion: "whatYouCanNowDo",
|
|
36
|
+
label: "What You Can Now Do section",
|
|
37
|
+
detect: (d) => /(?:^|\n)#{1,6}\s+What You Can Now Do\b/i.test(d),
|
|
38
38
|
},
|
|
39
39
|
{
|
|
40
40
|
criterion: "why",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report-rubric.js","sourceRoot":"","sources":["../src/report-rubric.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAmBH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAgC;IAC1D;QACE,SAAS,EAAE,SAAS;QACpB,KAAK,EAAE,iBAAiB;QACxB,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC,CAAC;KACrD;IACD;QACE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"report-rubric.js","sourceRoot":"","sources":["../src/report-rubric.ts"],"names":[],"mappings":"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"}
|