@principles/core 1.127.0 → 1.129.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.
Files changed (41) hide show
  1. package/dist/quality-scorecard/__tests__/quality-scorecard.test.d.ts +2 -0
  2. package/dist/quality-scorecard/__tests__/quality-scorecard.test.d.ts.map +1 -0
  3. package/dist/quality-scorecard/__tests__/quality-scorecard.test.js +271 -0
  4. package/dist/quality-scorecard/__tests__/quality-scorecard.test.js.map +1 -0
  5. package/dist/quality-scorecard/index.d.ts +11 -0
  6. package/dist/quality-scorecard/index.d.ts.map +1 -0
  7. package/dist/quality-scorecard/index.js +4 -0
  8. package/dist/quality-scorecard/index.js.map +1 -0
  9. package/dist/quality-scorecard/report-generator.d.ts +11 -0
  10. package/dist/quality-scorecard/report-generator.d.ts.map +1 -0
  11. package/dist/quality-scorecard/report-generator.js +204 -0
  12. package/dist/quality-scorecard/report-generator.js.map +1 -0
  13. package/dist/quality-scorecard/types.d.ts +106 -0
  14. package/dist/quality-scorecard/types.d.ts.map +1 -0
  15. package/dist/quality-scorecard/types.js +51 -0
  16. package/dist/quality-scorecard/types.js.map +1 -0
  17. package/dist/quality-scorecard/validation.d.ts +73 -0
  18. package/dist/quality-scorecard/validation.d.ts.map +1 -0
  19. package/dist/quality-scorecard/validation.js +251 -0
  20. package/dist/quality-scorecard/validation.js.map +1 -0
  21. package/dist/runtime-v2/__tests__/stalled-diagnostician-task.test.d.ts +2 -0
  22. package/dist/runtime-v2/__tests__/stalled-diagnostician-task.test.d.ts.map +1 -0
  23. package/dist/runtime-v2/__tests__/stalled-diagnostician-task.test.js +168 -0
  24. package/dist/runtime-v2/__tests__/stalled-diagnostician-task.test.js.map +1 -0
  25. package/dist/runtime-v2/cli/diagnose.d.ts +6 -0
  26. package/dist/runtime-v2/cli/diagnose.d.ts.map +1 -1
  27. package/dist/runtime-v2/cli/diagnose.js +10 -0
  28. package/dist/runtime-v2/cli/diagnose.js.map +1 -1
  29. package/dist/runtime-v2/index.d.ts +2 -0
  30. package/dist/runtime-v2/index.d.ts.map +1 -1
  31. package/dist/runtime-v2/index.js +2 -0
  32. package/dist/runtime-v2/index.js.map +1 -1
  33. package/dist/runtime-v2/stalled-diagnostician-task-read-model.d.ts +26 -0
  34. package/dist/runtime-v2/stalled-diagnostician-task-read-model.d.ts.map +1 -0
  35. package/dist/runtime-v2/stalled-diagnostician-task-read-model.js +59 -0
  36. package/dist/runtime-v2/stalled-diagnostician-task-read-model.js.map +1 -0
  37. package/dist/runtime-v2/store/runtime-state-manager.d.ts +1 -0
  38. package/dist/runtime-v2/store/runtime-state-manager.d.ts.map +1 -1
  39. package/dist/runtime-v2/store/runtime-state-manager.js +3 -0
  40. package/dist/runtime-v2/store/runtime-state-manager.js.map +1 -1
  41. package/package.json +5 -1
@@ -0,0 +1,106 @@
1
+ /**
2
+ * PRI-361 Quality Scorecard — Pure Type Definitions & Rubric
3
+ *
4
+ * This module is PURE LOGIC — zero I/O dependencies.
5
+ * No fs, path, fetch, database, process.env, or network access.
6
+ */
7
+ export declare const RUBRIC_DIMENSIONS: readonly ["G1", "G2", "G3", "G4", "G5", "G6", "G7"];
8
+ export type RubricDimension = (typeof RUBRIC_DIMENSIONS)[number];
9
+ /** 0 = fail, 1 = partial, 2 = pass */
10
+ export type RubricScore = 0 | 1 | 2;
11
+ export interface RubricEntry {
12
+ dimension: RubricDimension;
13
+ score: RubricScore;
14
+ rationale: string;
15
+ }
16
+ export declare const RUBRIC_LABELS: Record<RubricDimension, string>;
17
+ export declare const RUBRIC_DESCRIPTIONS: Record<RubricDimension, string>;
18
+ export declare const RUBRIC_PROMPTS: Record<RubricDimension, string>;
19
+ /** Sum rubric scores as plain numbers */
20
+ export declare function sumScores(scores: Record<RubricDimension, RubricScore>): number;
21
+ /** MVP quality gate: G1=2 AND G2=2 AND G5=2 AND G3>=1 AND total >= 10/14 */
22
+ export declare function meetsMvpThreshold(scores: Record<RubricDimension, RubricScore>): boolean;
23
+ export interface PainEpisode {
24
+ episodeId: string;
25
+ summary: string;
26
+ source: string;
27
+ score: number;
28
+ severity: string;
29
+ createdAt: string;
30
+ evolutionTaskResolution: string | null;
31
+ linkedPrinciples: string[];
32
+ gateBlockCount: number;
33
+ }
34
+ export interface LocalEvaluation {
35
+ model: string;
36
+ dimensionScores: Record<RubricDimension, RubricScore>;
37
+ dimensionRationales: Record<RubricDimension, string>;
38
+ totalScore: number;
39
+ maxScore: number;
40
+ mvpMet: boolean;
41
+ flags: string[];
42
+ }
43
+ export type AdjudicationStatus = 'pass' | 'fail' | 'needs-review' | 'local-pass' | 'local-fail' | 'skipped';
44
+ export interface StrongModelAdjudication {
45
+ model: string;
46
+ adjudicationStatus: AdjudicationStatus;
47
+ confirmedScores: Record<RubricDimension, RubricScore> | null;
48
+ confirmedMvpMet: boolean | null;
49
+ rationale: string;
50
+ nextAction: string | null;
51
+ }
52
+ export interface EpisodeEvaluation {
53
+ episode: PainEpisode;
54
+ localEvaluation: LocalEvaluation;
55
+ strongModelAdjudication: StrongModelAdjudication | null;
56
+ finalLabel: AdjudicationStatus;
57
+ }
58
+ export interface QualityScorecardReport {
59
+ generatedAt: string;
60
+ dataSource: {
61
+ painEventCount: number;
62
+ evolutionTaskCount: number;
63
+ principleEventCount: number;
64
+ gateBlockCount: number;
65
+ dateRange: {
66
+ from: string;
67
+ to: string;
68
+ };
69
+ };
70
+ localEvaluatorConfig: {
71
+ model: string;
72
+ baseUrl: string;
73
+ apiKeyStatus: string;
74
+ };
75
+ strongModelConfig: {
76
+ model: string | null;
77
+ status: 'configured' | 'skipped';
78
+ };
79
+ evaluations: EpisodeEvaluation[];
80
+ summary: {
81
+ totalEpisodes: number;
82
+ localPassCount: number;
83
+ localFailCount: number;
84
+ strongModelReviewedCount: number;
85
+ finalPassCount: number;
86
+ finalFailCount: number;
87
+ needsReviewCount: number;
88
+ localOnlyCount: number;
89
+ averageLocalScore: number;
90
+ mvpThresholdMetCount: number;
91
+ };
92
+ knownLimitations: string[];
93
+ }
94
+ export interface ScorecardOptions {
95
+ dbPath: string;
96
+ logsDir: string;
97
+ localModelBaseUrl: string;
98
+ localModelId: string;
99
+ strongModelId: string | null;
100
+ limit: number;
101
+ format: 'json' | 'markdown' | 'html';
102
+ output: string;
103
+ minPainScore: number;
104
+ skipStrongModel: boolean;
105
+ }
106
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/quality-scorecard/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * PRI-361 Quality Scorecard — Pure Type Definitions & Rubric
3
+ *
4
+ * This module is PURE LOGIC — zero I/O dependencies.
5
+ * No fs, path, fetch, database, process.env, or network access.
6
+ */
7
+ // ── Rubric Dimensions ──────────────────────────────────────────────
8
+ export const RUBRIC_DIMENSIONS = [
9
+ 'G1', 'G2', 'G3', 'G4', 'G5', 'G6', 'G7',
10
+ ];
11
+ export const RUBRIC_LABELS = {
12
+ G1: 'Evidence Grounding',
13
+ G2: 'Behavior-Oriented',
14
+ G3: 'Actionable Specificity',
15
+ G4: 'Root Cause Depth',
16
+ G5: 'Classification Correctness',
17
+ G6: 'Confidence Calibration',
18
+ G7: 'Scope Clarity',
19
+ };
20
+ export const RUBRIC_DESCRIPTIONS = {
21
+ G1: 'Diagnosis is grounded in concrete evidence (logs, error messages, code references) — not speculation or fabricated data.',
22
+ G2: 'Principle/diagnosis describes observable agent behavior, not internal model states or vague abstractions.',
23
+ G3: 'Root cause and recommended action are specific enough to act on without further clarification.',
24
+ G4: 'Root cause goes beyond surface symptoms — uses 5-Whys depth or equivalent causal analysis.',
25
+ G5: 'Pain classification (category, severity, confidence) matches the actual evidence.',
26
+ G6: 'Confidence score reflects actual certainty — not overconfident on weak evidence or underconfident on strong evidence.',
27
+ G7: 'Principle scope is clearly bounded — specifies when it applies and when it does not.',
28
+ };
29
+ export const RUBRIC_PROMPTS = {
30
+ G1: 'Does the diagnosis cite concrete evidence (error messages, file paths, code snippets, event IDs) rather than vague claims? Score 2 if specific evidence is quoted, 1 if partially grounded, 0 if purely speculative.',
31
+ G2: 'Is the principle/diagnosis written in terms of observable agent behavior (tool calls, file edits, decision patterns)? Score 2 if fully behavior-oriented, 1 if partially, 0 if only describes internal states.',
32
+ G3: 'Can someone act on the recommendation without asking clarifying questions? Score 2 if immediately actionable, 1 if needs minor clarification, 0 if vague or generic.',
33
+ G4: 'Does the root cause analysis go beyond "the code has a bug"? Score 2 if identifies systemic pattern (5-Whys depth >=3), 1 if identifies proximate cause, 0 if only restates symptom.',
34
+ G5: 'Does the pain classification match the evidence? Score 2 if category/severity/confidence align perfectly, 1 if mostly correct with minor mismatch, 0 if clearly miscategorized.',
35
+ G6: 'Is the confidence level calibrated to evidence strength? Score 2 if confidence matches evidence quality, 1 if slightly off, 0 if grossly over/under confident.',
36
+ G7: 'Is the principle scope explicitly bounded? Score 2 if clear applicability and exclusion criteria, 1 if scope is implicit, 0 if scope is unlimited or undefined.',
37
+ };
38
+ /** Sum rubric scores as plain numbers */
39
+ export function sumScores(scores) {
40
+ return Object.values(scores).reduce((s, v) => s + v, 0);
41
+ }
42
+ /** MVP quality gate: G1=2 AND G2=2 AND G5=2 AND G3>=1 AND total >= 10/14 */
43
+ export function meetsMvpThreshold(scores) {
44
+ const total = sumScores(scores);
45
+ return (scores.G1 === 2 &&
46
+ scores.G2 === 2 &&
47
+ scores.G5 === 2 &&
48
+ scores.G3 >= 1 &&
49
+ total >= 10);
50
+ }
51
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/quality-scorecard/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,sEAAsE;AAEtE,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;CAChC,CAAC;AAYX,MAAM,CAAC,MAAM,aAAa,GAAoC;IAC5D,EAAE,EAAE,oBAAoB;IACxB,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,wBAAwB;IAC5B,EAAE,EAAE,kBAAkB;IACtB,EAAE,EAAE,4BAA4B;IAChC,EAAE,EAAE,wBAAwB;IAC5B,EAAE,EAAE,eAAe;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAoC;IAClE,EAAE,EAAE,0HAA0H;IAC9H,EAAE,EAAE,2GAA2G;IAC/G,EAAE,EAAE,gGAAgG;IACpG,EAAE,EAAE,4FAA4F;IAChG,EAAE,EAAE,mFAAmF;IACvF,EAAE,EAAE,uHAAuH;IAC3H,EAAE,EAAE,sFAAsF;CAC3F,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAoC;IAC7D,EAAE,EAAE,sNAAsN;IAC1N,EAAE,EAAE,gNAAgN;IACpN,EAAE,EAAE,sKAAsK;IAC1K,EAAE,EAAE,sLAAsL;IAC1L,EAAE,EAAE,iLAAiL;IACrL,EAAE,EAAE,gKAAgK;IACpK,EAAE,EAAE,iKAAiK;CACtK,CAAC;AAEF,yCAAyC;AACzC,MAAM,UAAU,SAAS,CAAC,MAA4C;IACpE,OAAQ,MAAM,CAAC,MAAM,CAAC,MAAM,CAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,iBAAiB,CAAC,MAA4C;IAC5E,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,OAAO,CACL,MAAM,CAAC,EAAE,KAAK,CAAC;QACf,MAAM,CAAC,EAAE,KAAK,CAAC;QACf,MAAM,CAAC,EAAE,KAAK,CAAC;QACf,MAAM,CAAC,EAAE,IAAI,CAAC;QACd,KAAK,IAAI,EAAE,CACZ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * PRI-361 Quality Scorecard — Runtime Validation
3
+ *
4
+ * Pure validation functions for untrusted data from DB rows, LLM responses, CLI opts.
5
+ * ZERO I/O — no fs, fetch, database, process.env.
6
+ */
7
+ import { type RubricDimension, type RubricScore, type PainEpisode, type LocalEvaluation, type AdjudicationStatus, type ScorecardOptions } from './types.js';
8
+ export declare function escapeHtml(text: string): string;
9
+ export declare function escapeMarkdownTable(text: string): string;
10
+ export declare function isValidRubricScore(value: unknown): value is RubricScore;
11
+ export declare function parseRubricScore(value: unknown): RubricScore;
12
+ export declare function validateDimensionScores(raw: Record<string, unknown>): Record<RubricDimension, RubricScore>;
13
+ export interface ValidatedLlmScores {
14
+ scores: Record<RubricDimension, RubricScore>;
15
+ rationales: Record<RubricDimension, string>;
16
+ flags: string[];
17
+ }
18
+ export declare function validateLlmScoreResponse(raw: unknown): ValidatedLlmScores;
19
+ export declare function validateAdjudicationResponse(raw: unknown): {
20
+ scores: Record<RubricDimension, RubricScore>;
21
+ rationale: string;
22
+ verdict: AdjudicationStatus;
23
+ };
24
+ export interface ValidatedPainRow {
25
+ id: number;
26
+ session_id: string;
27
+ source: string;
28
+ score: number;
29
+ reason: string;
30
+ severity: string;
31
+ created_at: string;
32
+ }
33
+ export declare function validatePainRow(raw: unknown): ValidatedPainRow | null;
34
+ export interface ValidatedEvolutionRow {
35
+ task_id: string;
36
+ score: number;
37
+ status: string;
38
+ resolution: string | null;
39
+ created_at: string;
40
+ }
41
+ export declare function validateEvolutionRow(raw: unknown): ValidatedEvolutionRow | null;
42
+ export interface ValidatedPrincipleEventRow {
43
+ principle_id: string | null;
44
+ event_type: string;
45
+ created_at: string;
46
+ }
47
+ export declare function validatePrincipleEventRow(raw: unknown): ValidatedPrincipleEventRow | null;
48
+ export interface ValidatedGateRow {
49
+ session_id: string;
50
+ cnt: number;
51
+ }
52
+ export declare function validateGateRow(raw: unknown): ValidatedGateRow | null;
53
+ export interface ValidationError {
54
+ field: string;
55
+ message: string;
56
+ }
57
+ export declare function validateCliOptions(raw: Record<string, unknown>): {
58
+ options: ScorecardOptions;
59
+ errors: ValidationError[];
60
+ };
61
+ export declare function extractJsonFromLlmResponse(text: string): unknown | null;
62
+ export declare function sanitize(text: string): string;
63
+ export declare function truncate(text: string, maxLen?: number): string;
64
+ export interface AdjudicationDecision {
65
+ shouldAdjudicate: boolean;
66
+ reason: string;
67
+ priority: 'critical' | 'high' | 'medium' | 'low';
68
+ }
69
+ export declare function needsAdjudication(episode: PainEpisode, localEval: LocalEvaluation): AdjudicationDecision;
70
+ export declare function determineFinalLabel(localEval: LocalEvaluation, adjudication: {
71
+ adjudicationStatus: AdjudicationStatus;
72
+ } | null): AdjudicationStatus;
73
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/quality-scorecard/validation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACtB,MAAM,YAAY,CAAC;AAcpB,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAID,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOxD;AAID,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAEvE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAG5D;AAED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,MAAM,CAAC,eAAe,EAAE,WAAW,CAAC,CAMtC;AAID,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC5C,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,kBAAkB,CA8BzE;AAMD,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,OAAO,GAAG;IAC1D,MAAM,EAAE,MAAM,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,kBAAkB,CAAC;CAC7B,CAwBA;AAID,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAcrE;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,qBAAqB,GAAG,IAAI,CAa/E;AAED,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,0BAA0B,GAAG,IAAI,CAWzF;AAID,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAOrE;AAID,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAChE,OAAO,EAAE,gBAAgB,CAAC;IAC1B,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B,CA+CA;AAMD,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAQvE;AASD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM7C;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAM,GAAG,MAAM,CAG3D;AAID,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CAClD;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,eAAe,GACzB,oBAAoB,CAkBtB;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,eAAe,EAC1B,YAAY,EAAE;IAAE,kBAAkB,EAAE,kBAAkB,CAAA;CAAE,GAAG,IAAI,GAC9D,kBAAkB,CAOpB"}
@@ -0,0 +1,251 @@
1
+ /**
2
+ * PRI-361 Quality Scorecard — Runtime Validation
3
+ *
4
+ * Pure validation functions for untrusted data from DB rows, LLM responses, CLI opts.
5
+ * ZERO I/O — no fs, fetch, database, process.env.
6
+ */
7
+ import { RUBRIC_DIMENSIONS, } from './types.js';
8
+ // ── HTML / Markdown Escaping ───────────────────────────────────────
9
+ const HTML_ESCAPES = {
10
+ '&': '&amp;',
11
+ '<': '&lt;',
12
+ '>': '&gt;',
13
+ '"': '&quot;',
14
+ "'": '&#x27;',
15
+ };
16
+ const HTML_RE = /[&<>"']/g;
17
+ export function escapeHtml(text) {
18
+ return text.replace(HTML_RE, (ch) => HTML_ESCAPES[ch] ?? ch);
19
+ }
20
+ const MARKDOWN_TABLE_RE = /[|\n\r]/g;
21
+ export function escapeMarkdownTable(text) {
22
+ return text.replace(MARKDOWN_TABLE_RE, (ch) => {
23
+ if (ch === '|')
24
+ return '\\|';
25
+ if (ch === '\n')
26
+ return ' ';
27
+ if (ch === '\r')
28
+ return '';
29
+ return ch;
30
+ });
31
+ }
32
+ // ── Score Validation ───────────────────────────────────────────────
33
+ export function isValidRubricScore(value) {
34
+ return value === 0 || value === 1 || value === 2;
35
+ }
36
+ export function parseRubricScore(value) {
37
+ if (isValidRubricScore(value))
38
+ return value;
39
+ return 0;
40
+ }
41
+ export function validateDimensionScores(raw) {
42
+ const result = {};
43
+ for (const dim of RUBRIC_DIMENSIONS) {
44
+ result[dim] = parseRubricScore(raw[dim]);
45
+ }
46
+ return result;
47
+ }
48
+ export function validateLlmScoreResponse(raw) {
49
+ if (typeof raw !== 'object' || raw === null) {
50
+ return {
51
+ scores: validateDimensionScores({}),
52
+ rationales: Object.fromEntries(RUBRIC_DIMENSIONS.map(d => [d, 'Invalid LLM response'])),
53
+ flags: ['invalid_llm_response'],
54
+ };
55
+ }
56
+ const obj = raw;
57
+ const rawScores = (typeof obj.scores === 'object' && obj.scores !== null)
58
+ ? obj.scores
59
+ : {};
60
+ const rawRationales = (typeof obj.rationales === 'object' && obj.rationales !== null)
61
+ ? obj.rationales
62
+ : {};
63
+ const scores = validateDimensionScores(rawScores);
64
+ const rationales = {};
65
+ for (const dim of RUBRIC_DIMENSIONS) {
66
+ rationales[dim] = typeof rawRationales[dim] === 'string'
67
+ ? rawRationales[dim]
68
+ : 'No rationale provided';
69
+ }
70
+ const flags = Array.isArray(obj.flags)
71
+ ? obj.flags.filter((f) => typeof f === 'string').map(String)
72
+ : [];
73
+ return { scores, rationales, flags };
74
+ }
75
+ // ── Adjudication Response Validation ───────────────────────────────
76
+ const VALID_ADJUDICATION_STATUSES = ['pass', 'fail', 'needs-review'];
77
+ export function validateAdjudicationResponse(raw) {
78
+ if (typeof raw !== 'object' || raw === null) {
79
+ return {
80
+ scores: validateDimensionScores({}),
81
+ rationale: 'Invalid adjudication response',
82
+ verdict: 'needs-review',
83
+ };
84
+ }
85
+ const obj = raw;
86
+ const rawScores = (typeof obj.scores === 'object' && obj.scores !== null)
87
+ ? obj.scores
88
+ : {};
89
+ const rawVerdict = String(obj.verdict ?? '').toLowerCase();
90
+ const verdict = VALID_ADJUDICATION_STATUSES.includes(rawVerdict)
91
+ ? rawVerdict
92
+ : 'needs-review';
93
+ return {
94
+ scores: validateDimensionScores(rawScores),
95
+ rationale: typeof obj.rationale === 'string' ? obj.rationale : 'No rationale provided',
96
+ verdict,
97
+ };
98
+ }
99
+ export function validatePainRow(raw) {
100
+ if (typeof raw !== 'object' || raw === null)
101
+ return null;
102
+ const obj = raw;
103
+ const id = typeof obj.id === 'number' ? obj.id : -1;
104
+ const session_id = typeof obj.session_id === 'string' ? obj.session_id : '';
105
+ const source = typeof obj.source === 'string' ? obj.source : 'unknown';
106
+ const score = typeof obj.score === 'number' ? obj.score : 0;
107
+ const reason = typeof obj.reason === 'string' ? obj.reason : '';
108
+ const severity = typeof obj.severity === 'string' ? obj.severity : 'unknown';
109
+ const created_at = typeof obj.created_at === 'string' ? obj.created_at : new Date().toISOString();
110
+ if (id < 0 || reason === '')
111
+ return null;
112
+ return { id, session_id, source, score, reason, severity, created_at };
113
+ }
114
+ export function validateEvolutionRow(raw) {
115
+ if (typeof raw !== 'object' || raw === null)
116
+ return null;
117
+ const obj = raw;
118
+ const task_id = typeof obj.task_id === 'string' ? obj.task_id : '';
119
+ if (!task_id)
120
+ return null;
121
+ return {
122
+ task_id,
123
+ score: typeof obj.score === 'number' ? obj.score : 0,
124
+ status: typeof obj.status === 'string' ? obj.status : 'unknown',
125
+ resolution: typeof obj.resolution === 'string' ? obj.resolution : null,
126
+ created_at: typeof obj.created_at === 'string' ? obj.created_at : new Date().toISOString(),
127
+ };
128
+ }
129
+ export function validatePrincipleEventRow(raw) {
130
+ if (typeof raw !== 'object' || raw === null)
131
+ return null;
132
+ const obj = raw;
133
+ const event_type = typeof obj.event_type === 'string' ? obj.event_type : '';
134
+ if (!event_type)
135
+ return null;
136
+ return {
137
+ principle_id: typeof obj.principle_id === 'string' ? obj.principle_id : null,
138
+ event_type,
139
+ created_at: typeof obj.created_at === 'string' ? obj.created_at : new Date().toISOString(),
140
+ };
141
+ }
142
+ export function validateGateRow(raw) {
143
+ if (typeof raw !== 'object' || raw === null)
144
+ return null;
145
+ const obj = raw;
146
+ const session_id = typeof obj.session_id === 'string' ? obj.session_id : '';
147
+ if (!session_id)
148
+ return null;
149
+ const cnt = typeof obj.cnt === 'number' ? obj.cnt : 0;
150
+ return { session_id, cnt };
151
+ }
152
+ export function validateCliOptions(raw) {
153
+ const errors = [];
154
+ const format = String(raw.format ?? 'markdown');
155
+ if (format !== 'json' && format !== 'markdown' && format !== 'html') {
156
+ errors.push({ field: 'format', message: `Invalid format "${format}"; must be json, markdown, or html` });
157
+ }
158
+ const minPainScore = Number(raw.minPainScore);
159
+ if (!Number.isFinite(minPainScore) || minPainScore < 0 || minPainScore > 100) {
160
+ errors.push({ field: 'minPainScore', message: `Invalid minPainScore "${raw.minPainScore}"; must be 0-100` });
161
+ }
162
+ const limit = Number(raw.limit);
163
+ if (!Number.isFinite(limit) || limit < 0) {
164
+ errors.push({ field: 'limit', message: `Invalid limit "${raw.limit}"; must be >= 0` });
165
+ }
166
+ const localUrl = String(raw.localModelBaseUrl ?? '');
167
+ if (!localUrl.startsWith('http://') && !localUrl.startsWith('https://')) {
168
+ errors.push({ field: 'localModelBaseUrl', message: `Invalid URL "${localUrl}"; must start with http:// or https://` });
169
+ }
170
+ const output = String(raw.output ?? '');
171
+ if (!output) {
172
+ errors.push({ field: 'output', message: 'Output path is required' });
173
+ }
174
+ const localModelId = String(raw.localModelId ?? '');
175
+ if (!localModelId) {
176
+ errors.push({ field: 'localModelId', message: 'Local model ID is required' });
177
+ }
178
+ const options = {
179
+ dbPath: String(raw.dbPath ?? ''),
180
+ logsDir: String(raw.logsDir ?? ''),
181
+ localModelBaseUrl: localUrl,
182
+ localModelId,
183
+ strongModelId: typeof raw.strongModelId === 'string' && raw.strongModelId ? raw.strongModelId : null,
184
+ limit: Number.isFinite(limit) ? Math.floor(limit) : 0,
185
+ format: (format === 'json' || format === 'markdown' || format === 'html') ? format : 'markdown',
186
+ output,
187
+ minPainScore: Number.isFinite(minPainScore) ? minPainScore : 0,
188
+ skipStrongModel: Boolean(raw.skipStrongModel),
189
+ };
190
+ return { options, errors };
191
+ }
192
+ // ── JSON Extraction from LLM ───────────────────────────────────────
193
+ const JSON_RE = /\{[\s\S]*\}/;
194
+ export function extractJsonFromLlmResponse(text) {
195
+ const match = JSON_RE.exec(text);
196
+ if (!match)
197
+ return null;
198
+ try {
199
+ return JSON.parse(match[0]);
200
+ }
201
+ catch {
202
+ return null;
203
+ }
204
+ }
205
+ // ── Desensitization ────────────────────────────────────────────────
206
+ const WIN_PATH_RE = /[A-Z]:\\[^\s"']+/g;
207
+ const POSIX_PATH_RE = /(?:\/home|\/mnt|\/Users|\/tmp|\/var|\/opt|\/etc|\/root)\/[^\s"']+/g;
208
+ const TOKEN_RE = /(eyJ[A-Za-z0-9_-]{10,})/g;
209
+ const SESSION_ID_RE = /([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})/g;
210
+ export function sanitize(text) {
211
+ return text
212
+ .replace(WIN_PATH_RE, '<path>')
213
+ .replace(POSIX_PATH_RE, '<path>')
214
+ .replace(TOKEN_RE, '<token-redacted>')
215
+ .replace(SESSION_ID_RE, '<session-id>');
216
+ }
217
+ export function truncate(text, maxLen = 200) {
218
+ if (text.length <= maxLen)
219
+ return text;
220
+ return text.substring(0, maxLen) + '...';
221
+ }
222
+ export function needsAdjudication(episode, localEval) {
223
+ if (localEval.flags.includes('fabricated_evidence')) {
224
+ return { shouldAdjudicate: true, reason: 'Fabrication detected in local evaluation', priority: 'critical' };
225
+ }
226
+ if (!localEval.mvpMet) {
227
+ return { shouldAdjudicate: true, reason: `MVP threshold not met (score ${localEval.totalScore}/14)`, priority: 'high' };
228
+ }
229
+ if (localEval.totalScore <= 8) {
230
+ return { shouldAdjudicate: true, reason: `Low total score (${localEval.totalScore}/14)`, priority: 'high' };
231
+ }
232
+ const zeroDims = RUBRIC_DIMENSIONS.filter(d => localEval.dimensionScores[d] === 0);
233
+ if (zeroDims.length > 0) {
234
+ return { shouldAdjudicate: true, reason: `Zero-score dimensions: ${zeroDims.join(', ')}`, priority: 'medium' };
235
+ }
236
+ if (localEval.totalScore >= 12 && localEval.mvpMet) {
237
+ return { shouldAdjudicate: false, reason: 'High score with MVP met — local-pass sufficient', priority: 'low' };
238
+ }
239
+ return { shouldAdjudicate: true, reason: 'Moderate score — recommend strong-model review', priority: 'medium' };
240
+ }
241
+ export function determineFinalLabel(localEval, adjudication) {
242
+ if (!adjudication || adjudication.adjudicationStatus === 'skipped') {
243
+ if (localEval.mvpMet && localEval.totalScore >= 12)
244
+ return 'local-pass';
245
+ if (localEval.totalScore <= 6)
246
+ return 'local-fail';
247
+ return 'needs-review';
248
+ }
249
+ return adjudication.adjudicationStatus;
250
+ }
251
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/quality-scorecard/validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=stalled-diagnostician-task.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stalled-diagnostician-task.test.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/__tests__/stalled-diagnostician-task.test.ts"],"names":[],"mappings":""}