@productbrain/cli 0.1.0-beta.8818 → 0.1.0-beta.8827
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/__tests__/capture-receipt-coaching.test.js +20 -0
- package/dist/__tests__/capture-receipt-coaching.test.js.map +1 -1
- package/dist/formatters/coaching.d.ts.map +1 -1
- package/dist/formatters/coaching.js +5 -0
- package/dist/formatters/coaching.js.map +1 -1
- package/dist/lib/checklist.d.ts +30 -0
- package/dist/lib/checklist.d.ts.map +1 -0
- package/dist/lib/checklist.js +52 -0
- package/dist/lib/checklist.js.map +1 -0
- package/dist/lib/errors.d.ts +2 -2
- package/dist/lib/errors.js +2 -2
- package/package.json +1 -1
|
@@ -56,6 +56,26 @@ describe('formatCaptureReceipt — coaching section (WP-475 E1)', () => {
|
|
|
56
56
|
expect(out).toContain('Semantic quality: all 2 rubric criteria pass for decision (assertive tier).');
|
|
57
57
|
expect(out).not.toContain('Coaching hint:');
|
|
58
58
|
});
|
|
59
|
+
it('TASK-590 (DEC-1910): a strategy receipt prints the kernel checklist, still judging until the AI verdict lands', () => {
|
|
60
|
+
const out = formatCaptureReceipt({
|
|
61
|
+
...base,
|
|
62
|
+
coaching: {
|
|
63
|
+
source: 'heuristic',
|
|
64
|
+
verdict: {
|
|
65
|
+
...failingCoaching.verdict, canonicalKey: 'strategy',
|
|
66
|
+
criteria: [
|
|
67
|
+
{ id: 'coherent_narrative', passed: true, weight: 3, hint: 'h', questionTemplate: 'q' },
|
|
68
|
+
{ id: 'decisiveness', passed: false, weight: 3, hint: 'h', questionTemplate: 'q', failedBy: 'check' },
|
|
69
|
+
{ id: 'time_bounded', passed: true, weight: 2, hint: 'h', questionTemplate: 'q' },
|
|
70
|
+
],
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
expect(out).toContain('Quality checklist for strategy:');
|
|
75
|
+
expect(out).toContain('[~] Connect the diagnosis, the policy and the first actions (40+ words) (still judging)');
|
|
76
|
+
expect(out).toContain('[ ] Say what you will not do');
|
|
77
|
+
expect(out).not.toContain('Coaching hint');
|
|
78
|
+
});
|
|
59
79
|
it('renders nothing for a passive-tier verdict (zero-noise floor, mirrors MCP)', () => {
|
|
60
80
|
const out = formatCaptureReceipt({
|
|
61
81
|
...base,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capture-receipt-coaching.test.js","sourceRoot":"","sources":["../../src/__tests__/capture-receipt-coaching.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"capture-receipt-coaching.test.js","sourceRoot":"","sources":["../../src/__tests__/capture-receipt-coaching.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coaching.d.ts","sourceRoot":"","sources":["../../src/formatters/coaching.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"coaching.d.ts","sourceRoot":"","sources":["../../src/formatters/coaching.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,yFAAyF;IACzF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC7B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,OAAO,EAAE;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,gBAAgB,EAAE,MAAM,CAAC;QACzB,iFAAiF;QACjF,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;QAC7B,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B,GAAG,IAAI,CAAC;IACT,UAAU,EAAE,OAAO,CAAC;IACpB,+EAA+E;IAC/E,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wFAAwF;AACxF,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,eAAe,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,EAAE,CA2B3F"}
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
* convex/intelligence/qualityCoaching.ts); the Roger Martin probe exists only
|
|
15
15
|
* on LLM-evaluated results, which never reach this formatter.
|
|
16
16
|
*/
|
|
17
|
+
import { renderChecklist } from '../lib/checklist.js';
|
|
17
18
|
/**
|
|
18
19
|
* Render the coaching verdict as receipt lines (two-space indented, no trailing
|
|
19
20
|
* newline). Mirrors the CONTENT of mcp-server's formatRubricCoaching: passive
|
|
@@ -24,6 +25,10 @@ export function formatCoachingSection(coaching) {
|
|
|
24
25
|
if (!verdict || verdict.tier === 'passive' || verdict.criteria.length === 0)
|
|
25
26
|
return [];
|
|
26
27
|
const lines = [''];
|
|
28
|
+
// TASK-590 / DEC-1910: a gated type prints the kernel checklist (kernel/quality/checklist.ts).
|
|
29
|
+
const checklist = renderChecklist(verdict.canonicalKey, verdict.criteria, coaching.source !== 'llm');
|
|
30
|
+
if (checklist)
|
|
31
|
+
return [...lines, ` Quality checklist for ${verdict.canonicalKey}:`, ...checklist.map((l) => ` ${l}`)];
|
|
27
32
|
const total = verdict.criteria.length;
|
|
28
33
|
const passedCount = verdict.criteria.filter((c) => c.passed).length;
|
|
29
34
|
if (verdict.passed) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coaching.js","sourceRoot":"","sources":["../../src/formatters/coaching.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"coaching.js","sourceRoot":"","sources":["../../src/formatters/coaching.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAgDtD;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAA2C;IAC/E,MAAM,OAAO,GAAG,QAAQ,EAAE,OAAO,CAAC;IAClC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvF,MAAM,KAAK,GAAa,CAAC,EAAE,CAAC,CAAC;IAC7B,+FAA+F;IAC/F,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAS,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;IACtG,IAAI,SAAS;QAAE,OAAO,CAAC,GAAG,KAAK,EAAE,2BAA2B,OAAO,CAAC,YAAY,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1H,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IACtC,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IAEpE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,2BAA2B,KAAK,6BAA6B,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC,IAAI,SAAS,CAAC,CAAC;IAC1H,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,uBAAuB,WAAW,IAAI,KAAK,sBAAsB,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC,IAAI,QAAQ,CAAC,CAAC;QAC3H,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YACtC,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,sBAAsB,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The quality checklist — one renderer for every surface (TASK-590, DEC-1910, DEC-1913).
|
|
3
|
+
*
|
|
4
|
+
* A blocked or pending accept shows every criterion of the entry's rubric as one short
|
|
5
|
+
* instruction with one of three states: met, not yet, or still judging (the AI verdict has
|
|
6
|
+
* not landed, so a criterion the structural check passed may still fail). The line is the
|
|
7
|
+
* repair; an unmet line adds what the AI judge named as missing. The judge's free-text
|
|
8
|
+
* explanation is never shown, so it can never contradict a tick.
|
|
9
|
+
*
|
|
10
|
+
* Lines exist only for the gated rubrics, strategy and vision (DEC-1913); for any other
|
|
11
|
+
* type `renderChecklist` returns null. No Chain ids in any line: these strings reach users.
|
|
12
|
+
*
|
|
13
|
+
* Dependency-free on purpose: scripts/generate-mcp-embedded-copies.mjs ships this exact
|
|
14
|
+
* source to the CLI and the MCP server, and the accept gate (convex/lib/gates/evaluate.ts)
|
|
15
|
+
* calls it for the Rail, so every surface prints the same lines.
|
|
16
|
+
*/
|
|
17
|
+
/** One instruction per criterion id, per gated rubric. A kernel test pins it to the rubrics. */
|
|
18
|
+
export declare const CHECKLIST_LINES: Readonly<Record<string, Readonly<Record<string, string>>>>;
|
|
19
|
+
export interface ChecklistCriterion {
|
|
20
|
+
id: string;
|
|
21
|
+
passed: boolean;
|
|
22
|
+
/** What the AI judge named as concretely absent, on a fail. */
|
|
23
|
+
missing?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* The checklist lines for an entry's verdict, or null when its type has no checklist.
|
|
27
|
+
* `judging` is true while the AI verdict has not settled.
|
|
28
|
+
*/
|
|
29
|
+
export declare function renderChecklist(canonicalKey: string, criteria: readonly ChecklistCriterion[], judging: boolean): string[] | null;
|
|
30
|
+
//# sourceMappingURL=checklist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checklist.d.ts","sourceRoot":"","sources":["../../src/lib/checklist.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,gGAAgG;AAChG,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAYtF,CAAC;AAEF,MAAM,WAAW,kBAAkB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAC9B,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,SAAS,kBAAkB,EAAE,EACvC,OAAO,EAAE,OAAO,GACd,MAAM,EAAE,GAAG,IAAI,CAWjB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// GENERATED by scripts/generate-mcp-embedded-copies.mjs from kernel/quality/checklist.ts.
|
|
2
|
+
// DO NOT EDIT. Run `npm run mcp:embedded-copies` to regenerate.
|
|
3
|
+
// Local runtime copy for the isolated connector build.
|
|
4
|
+
/**
|
|
5
|
+
* The quality checklist — one renderer for every surface (TASK-590, DEC-1910, DEC-1913).
|
|
6
|
+
*
|
|
7
|
+
* A blocked or pending accept shows every criterion of the entry's rubric as one short
|
|
8
|
+
* instruction with one of three states: met, not yet, or still judging (the AI verdict has
|
|
9
|
+
* not landed, so a criterion the structural check passed may still fail). The line is the
|
|
10
|
+
* repair; an unmet line adds what the AI judge named as missing. The judge's free-text
|
|
11
|
+
* explanation is never shown, so it can never contradict a tick.
|
|
12
|
+
*
|
|
13
|
+
* Lines exist only for the gated rubrics, strategy and vision (DEC-1913); for any other
|
|
14
|
+
* type `renderChecklist` returns null. No Chain ids in any line: these strings reach users.
|
|
15
|
+
*
|
|
16
|
+
* Dependency-free on purpose: scripts/generate-mcp-embedded-copies.mjs ships this exact
|
|
17
|
+
* source to the CLI and the MCP server, and the accept gate (convex/lib/gates/evaluate.ts)
|
|
18
|
+
* calls it for the Rail, so every surface prints the same lines.
|
|
19
|
+
*/
|
|
20
|
+
/** One instruction per criterion id, per gated rubric. A kernel test pins it to the rubrics. */
|
|
21
|
+
export const CHECKLIST_LINES = {
|
|
22
|
+
strategy: {
|
|
23
|
+
coherent_narrative: 'Connect the diagnosis, the policy and the first actions (40+ words)',
|
|
24
|
+
decisiveness: 'Say what you will not do',
|
|
25
|
+
time_bounded: 'Name a horizon: a date, a duration or a milestone',
|
|
26
|
+
},
|
|
27
|
+
vision: {
|
|
28
|
+
specificity: 'Say what will be different, in words only this product could use (15+ words)',
|
|
29
|
+
beneficiary: 'Name who benefits: a role, a persona or a segment',
|
|
30
|
+
falsifiability: 'Choose a direction a reasonable rival would reject',
|
|
31
|
+
stranger_test: 'Explain it so a stranger knows what you build (20+ words)',
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
const MARK = { met: '[x]', not_yet: '[ ]', judging: '[~]' };
|
|
35
|
+
/**
|
|
36
|
+
* The checklist lines for an entry's verdict, or null when its type has no checklist.
|
|
37
|
+
* `judging` is true while the AI verdict has not settled.
|
|
38
|
+
*/
|
|
39
|
+
export function renderChecklist(canonicalKey, criteria, judging) {
|
|
40
|
+
const lines = CHECKLIST_LINES[canonicalKey];
|
|
41
|
+
if (!lines)
|
|
42
|
+
return null;
|
|
43
|
+
return criteria
|
|
44
|
+
.filter((c) => lines[c.id] !== undefined)
|
|
45
|
+
.map((c) => {
|
|
46
|
+
const state = !c.passed ? 'not_yet' : judging ? 'judging' : 'met';
|
|
47
|
+
const still = state === 'judging' ? ' (still judging)' : '';
|
|
48
|
+
const missing = state === 'not_yet' && c.missing ? ` — missing: ${c.missing}` : '';
|
|
49
|
+
return `${MARK[state]} ${lines[c.id]}${still}${missing}`;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=checklist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checklist.js","sourceRoot":"","sources":["../../src/lib/checklist.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,gEAAgE;AAChE,uDAAuD;AAEvD;;;;;;;;;;;;;;;GAeG;AAEH,gGAAgG;AAChG,MAAM,CAAC,MAAM,eAAe,GAA+D;IAC1F,QAAQ,EAAE;QACT,kBAAkB,EAAE,qEAAqE;QACzF,YAAY,EAAE,0BAA0B;QACxC,YAAY,EAAE,mDAAmD;KACjE;IACD,MAAM,EAAE;QACP,WAAW,EAAE,8EAA8E;QAC3F,WAAW,EAAE,mDAAmD;QAChE,cAAc,EAAE,oDAAoD;QACpE,aAAa,EAAE,2DAA2D;KAC1E;CACD,CAAC;AASF,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAW,CAAC;AAErE;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC9B,YAAoB,EACpB,QAAuC,EACvC,OAAgB;IAEhB,MAAM,KAAK,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,QAAQ;SACb,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC;SACxC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACV,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;QAClE,MAAM,KAAK,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,MAAM,OAAO,GAAG,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,OAAO,EAAE,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/lib/errors.d.ts
CHANGED
|
@@ -33,8 +33,8 @@ export declare const ErrorCode: {
|
|
|
33
33
|
readonly GROUNDING_GATE_BLOCKED: "GROUNDING_GATE_BLOCKED";
|
|
34
34
|
/**
|
|
35
35
|
* Semantic quality gate refused a draft→active promotion on a gated
|
|
36
|
-
* collection (WP-475 E4 / DEC-1345): fix
|
|
37
|
-
* (
|
|
36
|
+
* collection (WP-475 E4 / DEC-1345): fix each unchecked line of the returned checklist
|
|
37
|
+
* (TASK-590) — or, when the verdict was missing/stale,
|
|
38
38
|
* retry once the scheduled fresh judgment lands. No override route.
|
|
39
39
|
*/
|
|
40
40
|
readonly SEMANTIC_QUALITY_GATE_BLOCKED: "SEMANTIC_QUALITY_GATE_BLOCKED";
|
package/dist/lib/errors.js
CHANGED
|
@@ -36,8 +36,8 @@ export const ErrorCode = {
|
|
|
36
36
|
GROUNDING_GATE_BLOCKED: 'GROUNDING_GATE_BLOCKED',
|
|
37
37
|
/**
|
|
38
38
|
* Semantic quality gate refused a draft→active promotion on a gated
|
|
39
|
-
* collection (WP-475 E4 / DEC-1345): fix
|
|
40
|
-
* (
|
|
39
|
+
* collection (WP-475 E4 / DEC-1345): fix each unchecked line of the returned checklist
|
|
40
|
+
* (TASK-590) — or, when the verdict was missing/stale,
|
|
41
41
|
* retry once the scheduled fresh judgment lands. No override route.
|
|
42
42
|
*/
|
|
43
43
|
SEMANTIC_QUALITY_GATE_BLOCKED: 'SEMANTIC_QUALITY_GATE_BLOCKED',
|