@productbrain/cli 0.1.0-beta.3384 → 0.1.0-beta.3399
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/commands/__tests__/quality.test.d.ts +2 -0
- package/dist/commands/__tests__/quality.test.d.ts.map +1 -0
- package/dist/commands/__tests__/quality.test.js +156 -0
- package/dist/commands/__tests__/quality.test.js.map +1 -0
- package/dist/commands/conflicts.d.ts +30 -1
- package/dist/commands/conflicts.d.ts.map +1 -1
- package/dist/commands/conflicts.js +130 -7
- package/dist/commands/conflicts.js.map +1 -1
- package/dist/commands/conflicts.test.js +111 -9
- package/dist/commands/conflicts.test.js.map +1 -1
- package/dist/commands/quality.d.ts +16 -0
- package/dist/commands/quality.d.ts.map +1 -0
- package/dist/commands/quality.js +29 -0
- package/dist/commands/quality.js.map +1 -0
- package/dist/formatters/conflicts.d.ts +26 -1
- package/dist/formatters/conflicts.d.ts.map +1 -1
- package/dist/formatters/conflicts.js +46 -8
- package/dist/formatters/conflicts.js.map +1 -1
- package/dist/formatters/conflicts.test.js +62 -9
- package/dist/formatters/conflicts.test.js.map +1 -1
- package/dist/formatters/scoreboard.d.ts.map +1 -1
- package/dist/formatters/scoreboard.js +39 -0
- package/dist/formatters/scoreboard.js.map +1 -1
- package/dist/formatters/scoreboard.test.js +118 -0
- package/dist/formatters/scoreboard.test.js.map +1 -1
- package/dist/formatters/spineCheck.d.ts +59 -0
- package/dist/formatters/spineCheck.d.ts.map +1 -0
- package/dist/formatters/spineCheck.js +89 -0
- package/dist/formatters/spineCheck.js.map +1 -0
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -22
- package/dist/index.js.map +1 -1
- package/dist/scoreboard/diagnose.d.ts +23 -7
- package/dist/scoreboard/diagnose.d.ts.map +1 -1
- package/dist/scoreboard/diagnose.js.map +1 -1
- package/dist/scoreboard/diagnose.test.js +6 -0
- package/dist/scoreboard/diagnose.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb quality spine-check [--story] — A2, WP-581/FEAT-1402.
|
|
3
|
+
*
|
|
4
|
+
* Deterministic core (structural completeness + duplicate-singleton finding +
|
|
5
|
+
* per-strategy refusal heuristic + Roger Martin probe) ALWAYS runs. The
|
|
6
|
+
* one-story LLM pass (vision_serves_purpose/strategy_serves_vision/
|
|
7
|
+
* strategy_refuses) runs ONLY with --story — never scheduled, on-demand only.
|
|
8
|
+
*
|
|
9
|
+
* Renders from an INDEPENDENT read-back (quality.getLatestSpineVerdict), not
|
|
10
|
+
* the write action's own return value — the store-then-read-back proof
|
|
11
|
+
* discipline this codebase applies everywhere a verdict is claimed stored.
|
|
12
|
+
*/
|
|
13
|
+
export declare function runQualitySpineCheck(options: {
|
|
14
|
+
story?: boolean;
|
|
15
|
+
}): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=quality.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality.d.ts","sourceRoot":"","sources":["../../src/commands/quality.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAWtF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb quality spine-check [--story] — A2, WP-581/FEAT-1402.
|
|
3
|
+
*
|
|
4
|
+
* Deterministic core (structural completeness + duplicate-singleton finding +
|
|
5
|
+
* per-strategy refusal heuristic + Roger Martin probe) ALWAYS runs. The
|
|
6
|
+
* one-story LLM pass (vision_serves_purpose/strategy_serves_vision/
|
|
7
|
+
* strategy_refuses) runs ONLY with --story — never scheduled, on-demand only.
|
|
8
|
+
*
|
|
9
|
+
* Renders from an INDEPENDENT read-back (quality.getLatestSpineVerdict), not
|
|
10
|
+
* the write action's own return value — the store-then-read-back proof
|
|
11
|
+
* discipline this codebase applies everywhere a verdict is claimed stored.
|
|
12
|
+
*/
|
|
13
|
+
import { getConfigOrGuide } from '../lib/config.js';
|
|
14
|
+
import { kernelCall } from '../lib/client.js';
|
|
15
|
+
import { runCliCommand } from '../lib/runner.js';
|
|
16
|
+
import { formatSpineVerdict } from '../formatters/spineCheck.js';
|
|
17
|
+
export async function runQualitySpineCheck(options) {
|
|
18
|
+
const config = await getConfigOrGuide(() => runQualitySpineCheck(options));
|
|
19
|
+
if (!config)
|
|
20
|
+
return;
|
|
21
|
+
await runCliCommand({
|
|
22
|
+
fn: async () => {
|
|
23
|
+
await kernelCall('quality.spineCheck', { includeStory: Boolean(options.story) });
|
|
24
|
+
return await kernelCall('quality.getLatestSpineVerdict', {});
|
|
25
|
+
},
|
|
26
|
+
formatPretty: (row) => formatSpineVerdict(row),
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=quality.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality.js","sourceRoot":"","sources":["../../src/commands/quality.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAwB,MAAM,6BAA6B,CAAC;AAEvF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAA4B;IACrE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3E,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,aAAa,CAAyB;QAC1C,EAAE,EAAE,KAAK,IAAI,EAAE;YACb,MAAM,UAAU,CAAC,oBAAoB,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjF,OAAO,MAAM,UAAU,CAAyB,+BAA+B,EAAE,EAAE,CAAC,CAAC;QACvF,CAAC;QACD,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC;KAC/C,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -20,13 +20,34 @@ export interface ConflictListItem {
|
|
|
20
20
|
explanation: string;
|
|
21
21
|
createdAt: number;
|
|
22
22
|
dangling: boolean;
|
|
23
|
+
/** C2 (WP-468): review fix (PR #528 P2) — the API has returned these since C2 shipped;
|
|
24
|
+
* the pretty renderer never rendered them. `null` = unverdicted / not currently snoozed. */
|
|
25
|
+
humanVerdict?: 'real' | 'false_alarm' | null;
|
|
26
|
+
snoozedUntil?: number | null;
|
|
27
|
+
/** Present only in `--all` mode — per-row debt guidance for a verdicted/snoozed row. */
|
|
28
|
+
guidance?: string | null;
|
|
29
|
+
/** Review fix (PR #528 round 2, P2): stamped on every row in `--all` mode — true when the
|
|
30
|
+
* server's 200-row debt-pile scan was capped, so lower-confidence rows beyond it are hidden.
|
|
31
|
+
* Was previously undisclosed: the header rendered an exact-looking "Open conflicts (200)"
|
|
32
|
+
* with no way for an operator to know more debt existed past the cap. */
|
|
33
|
+
listTruncated?: boolean;
|
|
23
34
|
}
|
|
35
|
+
/** Which server-side view produced the list — threads through to the empty-state message and
|
|
36
|
+
* per-row guidance rendering (review fix, PR #528 P2). */
|
|
37
|
+
export type ConflictListMode = 'actionable' | 'all';
|
|
24
38
|
/** Age is derived at render time from the existing createdAt field — never a stored field. */
|
|
25
39
|
export declare function formatConflictAge(createdAt: number, now?: number): string;
|
|
26
40
|
export declare function formatConflictItem(item: ConflictListItem, now?: number): string;
|
|
27
|
-
export declare function formatConflictsList(items: ConflictListItem[],
|
|
41
|
+
export declare function formatConflictsList(items: ConflictListItem[], options?: {
|
|
42
|
+
mode?: ConflictListMode;
|
|
43
|
+
now?: number;
|
|
44
|
+
}): string;
|
|
28
45
|
export type ConflictVerdict = 'real' | 'false_alarm';
|
|
29
46
|
export declare function formatConflictResolve(value: unknown, verdict: ConflictVerdict): string;
|
|
47
|
+
/** `pb conflicts snooze` render — bounded, logged debt (Q6: never phrased as a dismissal). */
|
|
48
|
+
export declare function formatConflictSnooze(value: unknown): string;
|
|
49
|
+
/** `pb conflicts reverdict` render — a logged amendment, names the prior value (point 3). */
|
|
50
|
+
export declare function formatConflictReverdict(value: unknown, verdict: ConflictVerdict): string;
|
|
30
51
|
export interface HumanBar {
|
|
31
52
|
meets: boolean;
|
|
32
53
|
lowerBound: number | null;
|
|
@@ -38,6 +59,10 @@ export interface ConflictsSummary {
|
|
|
38
59
|
real: number;
|
|
39
60
|
falseAlarm: number;
|
|
40
61
|
humanBar: HumanBar;
|
|
62
|
+
/** Review fix (PR #528 round 3, P2): true when the resolved/open-verdicted scan truncated —
|
|
63
|
+
* reviewed/real/falseAlarm/humanBar then describe a SAMPLE, not the full population, the same
|
|
64
|
+
* honesty rule already applied to the scoreboard panel and getContradictionEnforcementStatus. */
|
|
65
|
+
truncated?: boolean;
|
|
41
66
|
[key: string]: unknown;
|
|
42
67
|
}
|
|
43
68
|
export declare function formatConflictsSummary(value: ConflictsSummary): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conflicts.d.ts","sourceRoot":"","sources":["../../src/formatters/conflicts.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"conflicts.d.ts","sourceRoot":"","sources":["../../src/formatters/conflicts.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB;iGAC6F;IAC7F,YAAY,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAAC;IAC7C,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;8EAG0E;IAC1E,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;2DAC2D;AAC3D,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,KAAK,CAAC;AAMpD,8FAA8F;AAC9F,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,CAUrF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ/E;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,gBAAgB,EAAE,EACzB,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,gBAAgB,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GACtD,MAAM,CAiBR;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,aAAa,CAAC;AAErD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM,CAOtF;AAED,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAM3D;AAED,6FAA6F;AAC7F,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM,CAMxF;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,iGAAiG;AACjG,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB;;sGAEkG;IAClG,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAStE"}
|
|
@@ -19,16 +19,53 @@ export function formatConflictAge(createdAt, now = Date.now()) {
|
|
|
19
19
|
}
|
|
20
20
|
export function formatConflictItem(item, now) {
|
|
21
21
|
const dangle = item.dangling ? ' [dangling]' : '';
|
|
22
|
-
|
|
22
|
+
const base = `[${item.confidence.toFixed(2)}] ${singleLine(item.id)} · ${singleLine(item.entryAName)} ↔ ${singleLine(item.entryBName)} · ${singleLine(item.conflictType)} · ${formatConflictAge(item.createdAt, now)}${dangle}`;
|
|
23
|
+
// Review fix (PR #528 P2): the API has returned guidance/humanVerdict/snoozedUntil since C2
|
|
24
|
+
// shipped — render them so a verdicted-real or snoozed debt row reads as debt, not as a
|
|
25
|
+
// plain unreviewed advisory (the `--all` guidance text was computed server-side and dropped).
|
|
26
|
+
if (item.guidance)
|
|
27
|
+
return `${base}\n ↳ ${singleLine(item.guidance)}`;
|
|
28
|
+
return base;
|
|
23
29
|
}
|
|
24
|
-
export function formatConflictsList(items,
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
:
|
|
30
|
+
export function formatConflictsList(items, options = {}) {
|
|
31
|
+
const { mode = 'actionable', now } = options;
|
|
32
|
+
if (items.length === 0) {
|
|
33
|
+
// Review fix (PR #528 P2): an empty ACTIONABLE result must never claim "no open conflicts"
|
|
34
|
+
// when snoozed/verdicted debt rows still exist — only the 'all' read means the workspace is
|
|
35
|
+
// genuinely clean of every open row.
|
|
36
|
+
return mode === 'all'
|
|
37
|
+
? 'No open conflicts.'
|
|
38
|
+
: 'No actionable conflicts (open, unverdicted, unsnoozed). Run `pb conflicts list --all` to see verdicted/snoozed debt.';
|
|
39
|
+
}
|
|
40
|
+
// Review fix (PR #528 round 2, P2): every row carries the SAME listTruncated stamp in --all
|
|
41
|
+
// mode (checking [0] is sufficient, never re-derived per-row).
|
|
42
|
+
const truncated = mode === 'all' && items[0]?.listTruncated === true;
|
|
43
|
+
const header = mode === 'all'
|
|
44
|
+
? `Open conflicts (${items.length}${truncated ? '+' : ''})`
|
|
45
|
+
: `Actionable conflicts (${items.length})`;
|
|
46
|
+
return [header, '', ...items.map((item) => formatConflictItem(item, now))].join('\n');
|
|
28
47
|
}
|
|
29
48
|
export function formatConflictResolve(value, verdict) {
|
|
30
49
|
if (value && typeof value === 'object' && 'ok' in value && value.ok === true) {
|
|
31
|
-
return
|
|
50
|
+
return verdict === 'real'
|
|
51
|
+
? 'Verdict recorded: real — the row stays open (visible until the content changes).'
|
|
52
|
+
: 'Verdict recorded: noise — the row is resolved.';
|
|
53
|
+
}
|
|
54
|
+
return JSON.stringify(value, null, 2);
|
|
55
|
+
}
|
|
56
|
+
/** `pb conflicts snooze` render — bounded, logged debt (Q6: never phrased as a dismissal). */
|
|
57
|
+
export function formatConflictSnooze(value) {
|
|
58
|
+
if (value && typeof value === 'object' && 'snoozedUntil' in value) {
|
|
59
|
+
const v = value;
|
|
60
|
+
return `Snoozed until ${new Date(v.snoozedUntil).toISOString()} (snooze #${v.snoozeCount}) — this is logged debt, not a verdict.`;
|
|
61
|
+
}
|
|
62
|
+
return JSON.stringify(value, null, 2);
|
|
63
|
+
}
|
|
64
|
+
/** `pb conflicts reverdict` render — a logged amendment, names the prior value (point 3). */
|
|
65
|
+
export function formatConflictReverdict(value, verdict) {
|
|
66
|
+
if (value && typeof value === 'object' && 'priorVerdict' in value) {
|
|
67
|
+
const v = value;
|
|
68
|
+
return `Reverdicted: ${v.priorVerdict} → ${verdict} (logged amendment).`;
|
|
32
69
|
}
|
|
33
70
|
return JSON.stringify(value, null, 2);
|
|
34
71
|
}
|
|
@@ -36,9 +73,10 @@ export function formatConflictsSummary(value) {
|
|
|
36
73
|
const lowerBoundText = value.humanBar.lowerBound === null
|
|
37
74
|
? 'null (no reviewed rows yet)'
|
|
38
75
|
: value.humanBar.lowerBound.toFixed(3);
|
|
76
|
+
const sampledSuffix = value.truncated ? ' (sampled — scan cap reached)' : '';
|
|
39
77
|
return [
|
|
40
|
-
`Verdict summary: reviewed ${value.reviewed}, real ${value.real}, falseAlarm ${value.falseAlarm}`,
|
|
41
|
-
`Wilson bar (human cohort): lowerBound ${lowerBoundText}, meets ${value.humanBar.meets}`,
|
|
78
|
+
`Verdict summary: reviewed ${value.reviewed}, real ${value.real}, falseAlarm ${value.falseAlarm}${sampledSuffix}`,
|
|
79
|
+
`Wilson bar (human cohort): lowerBound ${lowerBoundText}, meets ${value.humanBar.meets}${sampledSuffix}`,
|
|
42
80
|
].join('\n');
|
|
43
81
|
}
|
|
44
82
|
//# sourceMappingURL=conflicts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conflicts.js","sourceRoot":"","sources":["../../src/formatters/conflicts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"conflicts.js","sourceRoot":"","sources":["../../src/formatters/conflicts.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,34 +17,53 @@ function item(overrides = {}) {
|
|
|
17
17
|
};
|
|
18
18
|
}
|
|
19
19
|
describe('conflicts formatters', () => {
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
// Review fix (PR #528 P2): the empty-state message is now MODE-AWARE — an empty ACTIONABLE
|
|
21
|
+
// result must never claim "no open conflicts" when verdicted/snoozed debt rows still exist.
|
|
22
|
+
it('renders an honest empty state for the actionable (default) mode — never "no open conflicts" when debt may still exist', () => {
|
|
23
|
+
expect(formatConflictsList([], { now: NOW })).toContain('No actionable conflicts');
|
|
24
|
+
expect(formatConflictsList([], { now: NOW })).not.toBe('No open conflicts.');
|
|
25
|
+
});
|
|
26
|
+
it('renders "No open conflicts." only for the all-mode empty state (the workspace is genuinely clean)', () => {
|
|
27
|
+
expect(formatConflictsList([], { mode: 'all', now: NOW })).toBe('No open conflicts.');
|
|
22
28
|
});
|
|
23
29
|
it('renders workspace rows with entry names, confidence, and relative age', () => {
|
|
24
|
-
const output = formatConflictsList([item()], NOW);
|
|
25
|
-
expect(output).toContain('
|
|
30
|
+
const output = formatConflictsList([item()], { now: NOW });
|
|
31
|
+
expect(output).toContain('Actionable conflicts (1)');
|
|
26
32
|
expect(output).toContain('DEC-1');
|
|
27
33
|
expect(output).toContain('DEC-2');
|
|
28
34
|
expect(output).toContain('0.85');
|
|
29
35
|
expect(output).toContain('3d ago');
|
|
30
36
|
});
|
|
31
37
|
it('marks dangling rows (a partner entry was deleted)', () => {
|
|
32
|
-
const output = formatConflictsList([item({ dangling: true })], NOW);
|
|
38
|
+
const output = formatConflictsList([item({ dangling: true })], { now: NOW });
|
|
33
39
|
expect(output).toContain('[dangling]');
|
|
34
40
|
});
|
|
35
41
|
it('renders the non-underscore id — the field that survives the CLI JSON envelope\'s stripConvexInternals (TEN-340)', () => {
|
|
36
|
-
const output = formatConflictsList([item({ id: 'issue-target-1' })], NOW);
|
|
42
|
+
const output = formatConflictsList([item({ id: 'issue-target-1' })], { now: NOW });
|
|
37
43
|
expect(output).toContain('issue-target-1');
|
|
38
44
|
});
|
|
45
|
+
// C2 (WP-468) review fix (PR #528 P2): the server-computed per-row guidance for a
|
|
46
|
+
// verdicted/snoozed debt row must actually render in the `--all` pretty output.
|
|
47
|
+
it('renders per-row guidance text for a verdicted/snoozed debt row in --all mode', () => {
|
|
48
|
+
const output = formatConflictsList([item({ humanVerdict: 'real', guidance: 'confirmed contradiction (real) — supersede or archive one side' })], { mode: 'all', now: NOW });
|
|
49
|
+
expect(output).toContain('Open conflicts (1)');
|
|
50
|
+
expect(output).toContain('confirmed contradiction (real)');
|
|
51
|
+
});
|
|
52
|
+
it('renders a plain row (no guidance line) for an actionable row with no guidance field', () => {
|
|
53
|
+
const output = formatConflictsList([item()], { now: NOW });
|
|
54
|
+
expect(output).not.toContain('↳');
|
|
55
|
+
});
|
|
39
56
|
it('derives age purely from createdAt at render time — sub-minute, sub-hour, sub-day tiers', () => {
|
|
40
57
|
expect(formatConflictAge(NOW - 30_000, NOW)).toBe('30s ago');
|
|
41
58
|
expect(formatConflictAge(NOW - 5 * 60_000, NOW)).toBe('5m ago');
|
|
42
59
|
expect(formatConflictAge(NOW - 2 * 60 * 60_000, NOW)).toBe('2h ago');
|
|
43
60
|
expect(formatConflictAge(NOW - 4 * 24 * 60 * 60_000, NOW)).toBe('4d ago');
|
|
44
61
|
});
|
|
45
|
-
it('renders a resolve receipt naming the recorded CLI-vocabulary verdict', () => {
|
|
46
|
-
expect(formatConflictResolve({ ok: true }, 'real')).
|
|
47
|
-
expect(formatConflictResolve({ ok: true }, '
|
|
62
|
+
it('renders a resolve receipt naming the recorded CLI-vocabulary verdict — real stays open, noise resolves (C2)', () => {
|
|
63
|
+
expect(formatConflictResolve({ ok: true }, 'real')).toContain('real');
|
|
64
|
+
expect(formatConflictResolve({ ok: true }, 'real')).toContain('stays open');
|
|
65
|
+
expect(formatConflictResolve({ ok: true }, 'false_alarm')).toContain('noise');
|
|
66
|
+
expect(formatConflictResolve({ ok: true }, 'false_alarm')).toContain('resolved');
|
|
48
67
|
});
|
|
49
68
|
it('renders the summary with raw counts and the humanBar Wilson-bound fields exactly as returned', () => {
|
|
50
69
|
const output = formatConflictsSummary({
|
|
@@ -79,5 +98,39 @@ describe('conflicts formatters', () => {
|
|
|
79
98
|
expect(output).toContain('null');
|
|
80
99
|
expect(output).not.toContain('lowerBound 0,');
|
|
81
100
|
});
|
|
101
|
+
// Review fix (PR #528 round 3, P2): when the verdict scan truncated, reviewed/real/falseAlarm
|
|
102
|
+
// and the Wilson bar describe only the SAMPLED cohort — must render a qualifier, matching the
|
|
103
|
+
// scoreboard panel's existing verdictsSuffix pattern.
|
|
104
|
+
it('renders a truncation qualifier on both lines when the verdict scan truncated', () => {
|
|
105
|
+
const output = formatConflictsSummary({
|
|
106
|
+
reviewed: 1300,
|
|
107
|
+
real: 1200,
|
|
108
|
+
falseAlarm: 100,
|
|
109
|
+
open: 0,
|
|
110
|
+
resolvedWithoutVerdict: 0,
|
|
111
|
+
precision: 0.92,
|
|
112
|
+
truncated: true,
|
|
113
|
+
humanBar: { meets: true, lowerBound: 0.9, reviewed: 1300 },
|
|
114
|
+
escalatedCohort: { byModel: {}, crossTab: [] },
|
|
115
|
+
});
|
|
116
|
+
expect(output).toContain('sampled — scan cap reached');
|
|
117
|
+
const lines = output.split('\n');
|
|
118
|
+
expect(lines[0]).toContain('sampled — scan cap reached');
|
|
119
|
+
expect(lines[1]).toContain('sampled — scan cap reached');
|
|
120
|
+
});
|
|
121
|
+
it('renders NO truncation qualifier when the verdict scan did not truncate', () => {
|
|
122
|
+
const output = formatConflictsSummary({
|
|
123
|
+
reviewed: 2,
|
|
124
|
+
real: 1,
|
|
125
|
+
falseAlarm: 1,
|
|
126
|
+
open: 0,
|
|
127
|
+
resolvedWithoutVerdict: 0,
|
|
128
|
+
precision: 0.5,
|
|
129
|
+
truncated: false,
|
|
130
|
+
humanBar: { meets: false, lowerBound: 0.05, reviewed: 2 },
|
|
131
|
+
escalatedCohort: { byModel: {}, crossTab: [] },
|
|
132
|
+
});
|
|
133
|
+
expect(output).not.toContain('sampled');
|
|
134
|
+
});
|
|
82
135
|
});
|
|
83
136
|
//# sourceMappingURL=conflicts.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conflicts.test.js","sourceRoot":"","sources":["../../src/formatters/conflicts.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,GAEvB,MAAM,gBAAgB,CAAC;AAExB,MAAM,GAAG,GAAG,iBAAiB,CAAC;AAE9B,SAAS,IAAI,CAAC,YAAuC,EAAE;IACrD,OAAO;QACL,EAAE,EAAE,SAAS;QACb,QAAQ,EAAE,OAAO;QACjB,UAAU,EAAE,OAAO;QACnB,QAAQ,EAAE,OAAO;QACjB,UAAU,EAAE,OAAO;QACnB,YAAY,EAAE,eAAe;QAC7B,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,eAAe;QAC5B,SAAS,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;QACxC,QAAQ,EAAE,KAAK;QACf,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC
|
|
1
|
+
{"version":3,"file":"conflicts.test.js","sourceRoot":"","sources":["../../src/formatters/conflicts.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scoreboard.d.ts","sourceRoot":"","sources":["../../src/formatters/scoreboard.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"scoreboard.d.ts","sourceRoot":"","sources":["../../src/formatters/scoreboard.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAwHnE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAuBhE"}
|
|
@@ -58,6 +58,18 @@ function formatCoherence(c) {
|
|
|
58
58
|
? 'rate unavailable — too many events to sample reliably (scan cap reached)'
|
|
59
59
|
: 'no enforcement events yet';
|
|
60
60
|
const openConflictsSuffix = c.openConflictsTruncated ? '+' : '';
|
|
61
|
+
// Review fix (PR #528 P1): this is the OBSERVED precision (real/reviewed), a DIFFERENT
|
|
62
|
+
// number from humanBar.lowerBound (the Wilson confidence bound on the same ratio) — a
|
|
63
|
+
// 1-real/0-falseAlarm cohort reads precision 1.000 while lowerBound sits well below 1.
|
|
64
|
+
// `c.precision` is itself optional (an older deployment's payload predates the field).
|
|
65
|
+
// Review fix (PR #528 round 2, P2): when the verdict-cohort scan truncated, `precision` is
|
|
66
|
+
// only the ratio within the SAMPLED rows, not the full population — the same honesty rule
|
|
67
|
+
// already applied to the counts/humanBar lines above (verdictsSuffix) must also cover this.
|
|
68
|
+
const precisionText = c.precision === undefined
|
|
69
|
+
? 'n/a (older deployment)'
|
|
70
|
+
: c.precision === null
|
|
71
|
+
? 'n/a (N=0)'
|
|
72
|
+
: `${c.precision.toFixed(3)}${verdictsSuffix}`;
|
|
61
73
|
// PR #422 review (Codex): detectionCoverage was assembled server-side specifically for this
|
|
62
74
|
// panel but never rendered — an operator running the default pretty `pb scoreboard` never saw
|
|
63
75
|
// it at all.
|
|
@@ -71,11 +83,38 @@ function formatCoherence(c) {
|
|
|
71
83
|
return ` ${surface}: checked_clear=${counts.checked_clear} checked_conflicts=${counts.checked_conflicts} partial=${counts.partial} unavailable=${counts.unavailable}`;
|
|
72
84
|
}),
|
|
73
85
|
];
|
|
86
|
+
// Review fix (PR #528 P1): every C2 field on CoherencePayload is OPTIONAL — an older
|
|
87
|
+
// deployment's `coherence` object can be present (passing the `if (payload.coherence)`
|
|
88
|
+
// guard in formatScoreboard below) while lacking every field C2 added. Missing-field →
|
|
89
|
+
// undefined → wrong-branch is a documented trap in this repo; render "n/a", never
|
|
90
|
+
// dereference `c.dial.coherencyMode` unguarded (the exact crash the finding named).
|
|
91
|
+
const hasQueueFields = c.openUnverdicted !== undefined && c.verdictedOpenCount !== undefined && c.snoozedCount !== undefined;
|
|
92
|
+
const queueLine = hasQueueFields
|
|
93
|
+
? ` ${dim('queue:')} actionable ${c.openUnverdicted}${truncatedQualifier(!!c.openUnverdictedTruncated)}, `
|
|
94
|
+
+ `verdicted-open ${c.verdictedOpenCount}${truncatedQualifier(!!c.verdictedOpenTruncated)}, `
|
|
95
|
+
+ `snoozed ${c.snoozedCount}${truncatedQualifier(!!c.snoozedCountTruncated)}`
|
|
96
|
+
: ` ${dim('queue:')} n/a (older deployment)`;
|
|
97
|
+
// Review fix (PR #528 round 2, P2): totalOpen is countOpenConflictIssues' own 200-row-capped
|
|
98
|
+
// count — the adjacent legacy `open conflicts:` line above already qualifies with `+` via
|
|
99
|
+
// openConflictsSuffix; this line rendered an exact-looking number with no such signal.
|
|
100
|
+
const totalOpenLine = c.totalOpen === undefined
|
|
101
|
+
? ` ${dim('total open:')} n/a (older deployment)`
|
|
102
|
+
: ` ${dim('total open:')} ${c.totalOpen}${truncatedQualifier(!!c.totalOpenTruncated)}${c.totalOpenAlarm ? ' ⚠ ALARM — 150+ open rows' : ''}`;
|
|
103
|
+
const dialLine = c.dial === undefined
|
|
104
|
+
? ` ${dim('dial:')} n/a (older deployment)`
|
|
105
|
+
: ` ${dim('dial:')} mode=${c.dial.coherencyMode} br170Graduated=${c.dial.br170Graduated} br170GraduatedPinned=${c.dial.br170GraduatedPinned}`;
|
|
74
106
|
return [
|
|
75
107
|
`${bold('COHERENCE')} Contradiction advisories & verdicts`,
|
|
76
108
|
` ${dim('open conflicts:')} ${c.openConflictCount}${openConflictsSuffix}`,
|
|
77
109
|
` ${dim('verdicts:')} reviewed ${c.reviewed}, real ${c.real}, falseAlarm ${c.falseAlarm}${verdictsSuffix}`,
|
|
78
110
|
` ${dim('humanBar:')} lowerBound ${lowerBoundText}, meets ${c.humanBar.meets}${verdictsSuffix}`,
|
|
111
|
+
` ${dim('precision:')} ${precisionText}`,
|
|
112
|
+
// point 8: the actionable/verdicted-open/snoozed set — snoozing moves nothing out of
|
|
113
|
+
// open or verdictedOpen (Q6 enforced at the measurement layer).
|
|
114
|
+
queueLine,
|
|
115
|
+
totalOpenLine,
|
|
116
|
+
// point 8, scope-doc F10: the dial state — previously unreadable from any scoreboard surface.
|
|
117
|
+
dialLine,
|
|
79
118
|
...detectionLines,
|
|
80
119
|
` ${dim('contradiction override rate:')} ${overrideRateText}`,
|
|
81
120
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scoreboard.js","sourceRoot":"","sources":["../../src/formatters/scoreboard.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAItE,SAAS,WAAW,CAAC,MAAuB;IAC1C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,IAAI;YACP,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;QACtB,KAAK,UAAU;YACb,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC;QACzB,KAAK,UAAU;YACb,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC;QAC5B,KAAK,YAAY;YACf,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,CAAkB;IACpC,MAAM,IAAI,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;IAChF,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;IACtD,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,CAAC,UAAU;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;oGACoG;AACpG,SAAS,kBAAkB,CAAC,SAAkB;IAC5C,OAAO,SAAS,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1D,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,CAAmB;IAC1C,MAAM,cAAc,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAClG,sFAAsF;IACtF,0FAA0F;IAC1F,gFAAgF;IAChF,MAAM,cAAc,GAAG,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC/D,0FAA0F;IAC1F,4FAA4F;IAC5F,yFAAyF;IACzF,6FAA6F;IAC7F,uFAAuF;IACvF,8DAA8D;IAC9D,MAAM,gBAAgB,GAAG,CAAC,CAAC,yBAAyB,CAAC,IAAI,KAAK,IAAI;QAChE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,yBAAyB,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;QAC3D,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,SAAS;YACrC,CAAC,CAAC,0EAA0E;YAC5E,CAAC,CAAC,2BAA2B,CAAC;IAClC,MAAM,mBAAmB,GAAG,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"scoreboard.js","sourceRoot":"","sources":["../../src/formatters/scoreboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,6 +36,13 @@ function coherence(overrides = {}) {
|
|
|
36
36
|
falseAlarm: 0,
|
|
37
37
|
reviewedTruncated: false,
|
|
38
38
|
humanBar: { meets: false, lowerBound: null, reviewed: 0 },
|
|
39
|
+
precision: null,
|
|
40
|
+
openUnverdicted: 0,
|
|
41
|
+
verdictedOpenCount: 0,
|
|
42
|
+
snoozedCount: 0,
|
|
43
|
+
totalOpen: 0,
|
|
44
|
+
totalOpenAlarm: false,
|
|
45
|
+
dial: { br170Graduated: false, br170GraduatedPinned: false, coherencyMode: 'light' },
|
|
39
46
|
detectionCoverage: { bySurface: {}, scanned: 0, truncated: false },
|
|
40
47
|
contradictionOverrideRate: { overrides: 0, heldBlocks: 0, rate: null, truncated: false },
|
|
41
48
|
...overrides,
|
|
@@ -140,5 +147,116 @@ describe('formatScoreboard coherence section (TEN-2743, §2.5)', () => {
|
|
|
140
147
|
}).not.toThrow();
|
|
141
148
|
expect(output).not.toContain('COHERENCE');
|
|
142
149
|
});
|
|
150
|
+
// C2 (WP-468/FEAT-1407, point 8) — the new queue/precision/dial fields.
|
|
151
|
+
it('renders precision as an explicit "n/a (N=0)" when nothing has been verdicted, never a blank/misleading number', () => {
|
|
152
|
+
const output = formatScoreboard(view(coherence({ reviewed: 0, precision: null })));
|
|
153
|
+
const precisionLine = output.split('\n').find((l) => l.includes('precision:'));
|
|
154
|
+
expect(precisionLine).toContain('n/a (N=0)');
|
|
155
|
+
});
|
|
156
|
+
// Review fix (PR #528 P1): precision is the OBSERVED ratio (real/reviewed) — a DIFFERENT
|
|
157
|
+
// number from humanBar.lowerBound (the Wilson confidence bound on that same ratio). A
|
|
158
|
+
// 1-real/0-falseAlarm cohort must read precision 1.000 even though its lowerBound is well
|
|
159
|
+
// below 1 — conflating the two mislabels the statistic on every non-empty cohort.
|
|
160
|
+
it('renders the OBSERVED precision, distinct from the Wilson lowerBound, for a small all-real cohort', () => {
|
|
161
|
+
const output = formatScoreboard(view(coherence({
|
|
162
|
+
reviewed: 1, real: 1, falseAlarm: 0, precision: 1,
|
|
163
|
+
humanBar: { meets: false, lowerBound: 0.206, reviewed: 1 },
|
|
164
|
+
})));
|
|
165
|
+
const precisionLine = output.split('\n').find((l) => l.includes('precision:'));
|
|
166
|
+
const humanBarLine = output.split('\n').find((l) => l.includes('humanBar:'));
|
|
167
|
+
expect(precisionLine).toContain('1.000');
|
|
168
|
+
expect(humanBarLine).toContain('0.206');
|
|
169
|
+
expect(precisionLine).not.toContain('0.206');
|
|
170
|
+
});
|
|
171
|
+
// Review fix (PR #528 round 2, P2): when the verdict-cohort scan truncated, precision is
|
|
172
|
+
// only the ratio within the SAMPLED rows, not the full population — the same honesty rule
|
|
173
|
+
// already applied to the counts/humanBar lines (verdictsSuffix) must also cover this line.
|
|
174
|
+
it('renders precision with a truncation qualifier when reviewedTruncated is true', () => {
|
|
175
|
+
const output = formatScoreboard(view(coherence({
|
|
176
|
+
reviewed: 1300, real: 1300, falseAlarm: 0, precision: 1, reviewedTruncated: true,
|
|
177
|
+
humanBar: { meets: true, lowerBound: 0.99, reviewed: 1300 },
|
|
178
|
+
})));
|
|
179
|
+
const precisionLine = output.split('\n').find((l) => l.includes('precision:'));
|
|
180
|
+
expect(precisionLine).toContain('1.000');
|
|
181
|
+
expect(precisionLine).toContain('sampled — scan cap reached');
|
|
182
|
+
});
|
|
183
|
+
// Review fix (PR #528 P7 / older-deployment defaults): `payload.coherence` can be PRESENT
|
|
184
|
+
// (passing the outer `if (payload.coherence)` guard) while predating every C2 field —
|
|
185
|
+
// `c.dial.coherencyMode` must never throw unguarded.
|
|
186
|
+
it('renders "n/a (older deployment)" for precision/queue/total-open/dial when those C2 fields are entirely absent, never throws', () => {
|
|
187
|
+
const olderDeploymentCoherence = coherence();
|
|
188
|
+
delete olderDeploymentCoherence.precision;
|
|
189
|
+
delete olderDeploymentCoherence.openUnverdicted;
|
|
190
|
+
delete olderDeploymentCoherence.verdictedOpenCount;
|
|
191
|
+
delete olderDeploymentCoherence.snoozedCount;
|
|
192
|
+
delete olderDeploymentCoherence.totalOpen;
|
|
193
|
+
delete olderDeploymentCoherence.totalOpenAlarm;
|
|
194
|
+
delete olderDeploymentCoherence.dial;
|
|
195
|
+
let output = '';
|
|
196
|
+
expect(() => {
|
|
197
|
+
output = formatScoreboard(view(olderDeploymentCoherence));
|
|
198
|
+
}).not.toThrow();
|
|
199
|
+
expect(output.split('\n').find((l) => l.includes('precision:'))).toContain('n/a (older deployment)');
|
|
200
|
+
expect(output.split('\n').find((l) => l.includes('queue:'))).toContain('n/a (older deployment)');
|
|
201
|
+
expect(output.split('\n').find((l) => l.includes('total open:'))).toContain('n/a (older deployment)');
|
|
202
|
+
expect(output.split('\n').find((l) => l.includes('dial:'))).toContain('n/a (older deployment)');
|
|
203
|
+
});
|
|
204
|
+
it('renders the actionable/verdicted-open/snoozed queue counts', () => {
|
|
205
|
+
const output = formatScoreboard(view(coherence({
|
|
206
|
+
openUnverdicted: 3, verdictedOpenCount: 2, snoozedCount: 1,
|
|
207
|
+
})));
|
|
208
|
+
const queueLine = output.split('\n').find((l) => l.includes('queue:'));
|
|
209
|
+
expect(queueLine).toContain('actionable 3');
|
|
210
|
+
expect(queueLine).toContain('verdicted-open 2');
|
|
211
|
+
expect(queueLine).toContain('snoozed 1');
|
|
212
|
+
});
|
|
213
|
+
// Review fix (PR #528 P1): every one of these queue sub-counts is itself a capped-sample
|
|
214
|
+
// count — a truncation flag must render a qualifier, never present as an exact number.
|
|
215
|
+
it('renders a truncation qualifier on each queue sub-count independently', () => {
|
|
216
|
+
const output = formatScoreboard(view(coherence({
|
|
217
|
+
openUnverdicted: 200, openUnverdictedTruncated: true,
|
|
218
|
+
verdictedOpenCount: 5000, verdictedOpenTruncated: true,
|
|
219
|
+
snoozedCount: 200, snoozedCountTruncated: true,
|
|
220
|
+
})));
|
|
221
|
+
const queueLine = output.split('\n').find((l) => l.includes('queue:'));
|
|
222
|
+
expect(queueLine).toMatch(/actionable 200.*sampled/);
|
|
223
|
+
expect(queueLine).toMatch(/verdicted-open 5000.*sampled/);
|
|
224
|
+
expect(queueLine).toMatch(/snoozed 200.*sampled/);
|
|
225
|
+
});
|
|
226
|
+
it('renders totalOpen with a loud alarm suffix once totalOpenAlarm is true', () => {
|
|
227
|
+
// Note: /alarm/i alone would false-match the pre-existing "falseAlarm" verdict-count field
|
|
228
|
+
// name — assert on the specific "total open" LINE, not the whole payload.
|
|
229
|
+
const quiet = formatScoreboard(view(coherence({ totalOpen: 12, totalOpenAlarm: false })));
|
|
230
|
+
const quietLine = quiet.split('\n').find((l) => l.includes('total open:'));
|
|
231
|
+
expect(quietLine).toContain('total open: 12');
|
|
232
|
+
expect(quietLine).not.toMatch(/ALARM/);
|
|
233
|
+
const loud = formatScoreboard(view(coherence({ totalOpen: 151, totalOpenAlarm: true })));
|
|
234
|
+
const loudLine = loud.split('\n').find((l) => l.includes('total open:'));
|
|
235
|
+
expect(loudLine).toContain('total open: 151');
|
|
236
|
+
expect(loudLine).toMatch(/ALARM/);
|
|
237
|
+
});
|
|
238
|
+
// Review fix (PR #528 round 2, P2): totalOpen previously rendered an exact-looking number
|
|
239
|
+
// with no truncation signal, even though it is countOpenConflictIssues' own 200-row-capped
|
|
240
|
+
// count — the SAME honesty rule already applied to every other capped count in this panel.
|
|
241
|
+
it('renders totalOpen with a truncation qualifier when totalOpenTruncated is true', () => {
|
|
242
|
+
const output = formatScoreboard(view(coherence({ totalOpen: 200, totalOpenTruncated: true })));
|
|
243
|
+
const totalOpenLine = output.split('\n').find((l) => l.includes('total open:'));
|
|
244
|
+
expect(totalOpenLine).toContain('total open: 200');
|
|
245
|
+
expect(totalOpenLine).toContain('sampled — scan cap reached');
|
|
246
|
+
});
|
|
247
|
+
it('renders totalOpen with NO truncation qualifier when totalOpenTruncated is false', () => {
|
|
248
|
+
const output = formatScoreboard(view(coherence({ totalOpen: 12, totalOpenTruncated: false })));
|
|
249
|
+
const totalOpenLine = output.split('\n').find((l) => l.includes('total open:'));
|
|
250
|
+
expect(totalOpenLine).not.toContain('sampled');
|
|
251
|
+
});
|
|
252
|
+
it('renders the dial state — mode, br170Graduated, br170GraduatedPinned (scope-doc F10)', () => {
|
|
253
|
+
const output = formatScoreboard(view(coherence({
|
|
254
|
+
dial: { br170Graduated: true, br170GraduatedPinned: true, coherencyMode: 'strict' },
|
|
255
|
+
})));
|
|
256
|
+
const dialLine = output.split('\n').find((l) => l.includes('dial:'));
|
|
257
|
+
expect(dialLine).toContain('mode=strict');
|
|
258
|
+
expect(dialLine).toContain('br170Graduated=true');
|
|
259
|
+
expect(dialLine).toContain('br170GraduatedPinned=true');
|
|
260
|
+
});
|
|
143
261
|
});
|
|
144
262
|
//# sourceMappingURL=scoreboard.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scoreboard.test.js","sourceRoot":"","sources":["../../src/formatters/scoreboard.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scoreboard.test.js","sourceRoot":"","sources":["../../src/formatters/scoreboard.test.ts"],"names":[],"mappings":"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"}
|