@dzhechkov/harness-core 0.8.2 → 0.8.6

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 (81) hide show
  1. package/.dz-manifest.json +146 -58
  2. package/README.md +72 -2
  3. package/dist/cmd-usage.d.ts +148 -0
  4. package/dist/cmd-usage.d.ts.map +1 -0
  5. package/dist/cmd-usage.js +548 -0
  6. package/dist/cmd-usage.js.map +1 -0
  7. package/dist/compounding.d.ts +4 -0
  8. package/dist/compounding.d.ts.map +1 -1
  9. package/dist/compounding.js +6 -0
  10. package/dist/compounding.js.map +1 -1
  11. package/dist/contract-checklist.d.ts +123 -0
  12. package/dist/contract-checklist.d.ts.map +1 -0
  13. package/dist/contract-checklist.js +700 -0
  14. package/dist/contract-checklist.js.map +1 -0
  15. package/dist/feature-adr-checkpoints.d.ts +11 -2
  16. package/dist/feature-adr-checkpoints.d.ts.map +1 -1
  17. package/dist/feature-adr-checkpoints.js +37 -2
  18. package/dist/feature-adr-checkpoints.js.map +1 -1
  19. package/dist/feature-adr-routing.d.ts +58 -23
  20. package/dist/feature-adr-routing.d.ts.map +1 -1
  21. package/dist/feature-adr-routing.js +208 -59
  22. package/dist/feature-adr-routing.js.map +1 -1
  23. package/dist/guard.d.ts +25 -0
  24. package/dist/guard.d.ts.map +1 -1
  25. package/dist/guard.js +59 -1
  26. package/dist/guard.js.map +1 -1
  27. package/dist/index.d.ts +9 -2
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +8 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/loop-blobs.generated.js +8 -8
  32. package/dist/loop-blobs.generated.js.map +1 -1
  33. package/dist/loop-plan.d.ts +13 -1
  34. package/dist/loop-plan.d.ts.map +1 -1
  35. package/dist/loop-plan.js +15 -1
  36. package/dist/loop-plan.js.map +1 -1
  37. package/dist/loop-render.d.ts.map +1 -1
  38. package/dist/loop-render.js +51 -6
  39. package/dist/loop-render.js.map +1 -1
  40. package/dist/loop-trace.d.ts +20 -1
  41. package/dist/loop-trace.d.ts.map +1 -1
  42. package/dist/loop-trace.js +83 -1
  43. package/dist/loop-trace.js.map +1 -1
  44. package/dist/model-recommender.d.ts +8 -0
  45. package/dist/model-recommender.d.ts.map +1 -1
  46. package/dist/model-recommender.js +31 -4
  47. package/dist/model-recommender.js.map +1 -1
  48. package/dist/qe-bridge.d.ts.map +1 -1
  49. package/dist/qe-bridge.js +9 -0
  50. package/dist/qe-bridge.js.map +1 -1
  51. package/dist/restart-advisor.d.ts +103 -0
  52. package/dist/restart-advisor.d.ts.map +1 -0
  53. package/dist/restart-advisor.js +445 -0
  54. package/dist/restart-advisor.js.map +1 -0
  55. package/dist/slop-lint.d.ts +128 -0
  56. package/dist/slop-lint.d.ts.map +1 -0
  57. package/dist/slop-lint.js +607 -0
  58. package/dist/slop-lint.js.map +1 -0
  59. package/dist/workflow-run.d.ts.map +1 -1
  60. package/dist/workflow-run.js +18 -12
  61. package/dist/workflow-run.js.map +1 -1
  62. package/package.json +19 -15
  63. package/sbom.json +277 -57
  64. package/src/cmd-usage.ts +720 -0
  65. package/src/compounding.ts +13 -0
  66. package/src/contract-checklist.ts +973 -0
  67. package/src/deadwood-allowlist.json +80 -0
  68. package/src/feature-adr-checkpoints.ts +38 -2
  69. package/src/feature-adr-routing.ts +238 -55
  70. package/src/guard.ts +79 -1
  71. package/src/index.ts +81 -1
  72. package/src/loop-blobs.generated.ts +8 -8
  73. package/src/loop-plan.ts +36 -3
  74. package/src/loop-render.ts +50 -6
  75. package/src/loop-trace.ts +91 -2
  76. package/src/model-recommender.ts +35 -4
  77. package/src/qe-bridge.ts +9 -0
  78. package/src/restart-advisor.ts +579 -0
  79. package/src/slop-lint.ts +762 -0
  80. package/src/slop-markers.json +71 -0
  81. package/src/workflow-run.ts +18 -11
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Deterministic, advisory-only policy for recognising a trailing low-grade QE streak.
3
+ *
4
+ * This module is intentionally value-in/value-out. The CLI owns filesystem reads, path confinement,
5
+ * defaults, and presentation; the core owns parsing, corroboration, policy, and the decision record.
6
+ */
7
+ export declare const RESTART_ADVISOR_SCHEMA: "restart-advisor/1";
8
+ export declare const RESTART_ADVISOR_MAX_EVIDENCE = 20;
9
+ export declare const RESTART_ADVISOR_MAX_DIAGNOSTICS = 20;
10
+ export type RestartGrade = 'A' | 'B' | 'C' | 'D' | 'F';
11
+ export type RestartThreshold = 'C' | 'D';
12
+ export type RestartSource = 'checkpoints' | 'training-pairs' | 'none';
13
+ export type RestartPolicyOrigin = 'default' | 'flag' | 'caller';
14
+ export type RestartRecommendation = 'RESTART_CODE_STAGE' | 'NO_RESTART_RECOMMENDATION' | 'NOT_ESTABLISHED' | 'INVALID_INPUT';
15
+ export type RestartReason = 'TRAILING_STREAK_AT_OR_BELOW_THRESHOLD' | 'TRAILING_STREAK_INTERRUPTED' | 'INSUFFICIENT_TRAILING_EVIDENCE' | 'OPAQUE_TRAILING_EVIDENCE' | 'ROUND_GAP' | 'NO_QE_HISTORY' | 'SOURCE_CONFLICT' | 'SOURCE_EVIDENCE_INVALID' | 'POLICY_INVALID' | 'INPUT_INVALID';
16
+ export interface RestartNormalizedRound {
17
+ readonly round: number;
18
+ readonly line: number;
19
+ readonly grade: RestartGrade | null;
20
+ readonly problem: 'UNSUPPORTED_GRADE' | 'MALFORMED_JSON' | 'INVALID_RECORD' | null;
21
+ }
22
+ export interface ParsedRestartHistory {
23
+ readonly source: Exclude<RestartSource, 'none'>;
24
+ readonly present: boolean;
25
+ readonly recordsRead: number;
26
+ readonly qeCandidates: number;
27
+ readonly identityMode: 'none' | 'explicit' | 'implicit' | 'mixed';
28
+ readonly rounds: readonly RestartNormalizedRound[];
29
+ readonly diagnostics: readonly string[];
30
+ readonly fatal: boolean;
31
+ }
32
+ export interface RestartDecisionInput {
33
+ readonly history: readonly RestartNormalizedRound[];
34
+ readonly threshold?: RestartThreshold;
35
+ readonly rounds?: number;
36
+ }
37
+ export interface RestartDecision {
38
+ readonly recommendation: RestartRecommendation;
39
+ readonly recommendRestart: boolean;
40
+ readonly autoAction: false;
41
+ readonly trailingAtOrBelow: number;
42
+ readonly reason: RestartReason;
43
+ readonly evidence: readonly RestartNormalizedRound[];
44
+ }
45
+ export interface RestartAdvisorInput {
46
+ readonly slug: string;
47
+ readonly checkpointsJsonl?: string | null;
48
+ readonly trainingPairsJsonl?: string | null;
49
+ /** I/O boundary failures already converted to deterministic, operator-visible diagnostics. */
50
+ readonly readDiagnostics?: readonly string[];
51
+ /** CLI/input-boundary refusals that must remain one versioned INVALID_INPUT result. */
52
+ readonly inputErrors?: readonly string[];
53
+ }
54
+ export interface RestartAdvisorPolicy {
55
+ readonly threshold?: RestartThreshold;
56
+ readonly rounds?: number;
57
+ readonly thresholdOrigin?: RestartPolicyOrigin;
58
+ readonly roundsOrigin?: RestartPolicyOrigin;
59
+ }
60
+ export interface RestartAdvice {
61
+ readonly schema: typeof RESTART_ADVISOR_SCHEMA;
62
+ readonly slug: string;
63
+ readonly source: RestartSource;
64
+ readonly sourcePath: string | null;
65
+ readonly inspectedPaths: readonly string[];
66
+ readonly corroborated: boolean;
67
+ readonly policy: {
68
+ readonly threshold: RestartThreshold | null;
69
+ readonly thresholdOrigin: RestartPolicyOrigin;
70
+ readonly rounds: number | null;
71
+ readonly roundsOrigin: RestartPolicyOrigin;
72
+ };
73
+ readonly counts: {
74
+ readonly recordsRead: number;
75
+ readonly qeCandidates: number;
76
+ readonly normalizedRounds: number;
77
+ readonly trailingAtOrBelow: number;
78
+ };
79
+ readonly evidence: readonly RestartNormalizedRound[];
80
+ readonly evidenceSummary: {
81
+ readonly total: number;
82
+ readonly returned: number;
83
+ readonly truncated: boolean;
84
+ };
85
+ readonly diagnostics: readonly string[];
86
+ readonly diagnosticsSummary: {
87
+ readonly total: number;
88
+ readonly returned: number;
89
+ readonly truncated: boolean;
90
+ };
91
+ readonly recommendation: RestartRecommendation;
92
+ readonly recommendRestart: boolean;
93
+ readonly autoAction: false;
94
+ readonly trailingAtOrBelow: number;
95
+ readonly reason: RestartReason;
96
+ readonly decisionLogLine: string;
97
+ }
98
+ export declare function parseCheckpointQeHistory(jsonl: string | null | undefined): ParsedRestartHistory;
99
+ export declare function parseTrainingPairQeHistory(jsonl: string | null | undefined): ParsedRestartHistory;
100
+ export declare function decideRestartRecommendation(input: RestartDecisionInput): RestartDecision;
101
+ export declare function renderRestartDecisionLog(advice: RestartAdvice): string;
102
+ export declare function adviseRestart(input: RestartAdvisorInput, policy?: RestartAdvisorPolicy): RestartAdvice;
103
+ //# sourceMappingURL=restart-advisor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart-advisor.d.ts","sourceRoot":"","sources":["../src/restart-advisor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,sBAAsB,EAAG,mBAA4B,CAAC;AACnE,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAC/C,eAAO,MAAM,+BAA+B,KAAK,CAAC;AAElD,MAAM,MAAM,YAAY,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACvD,MAAM,MAAM,gBAAgB,GAAG,GAAG,GAAG,GAAG,CAAC;AACzC,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,gBAAgB,GAAG,MAAM,CAAC;AACtE,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAChE,MAAM,MAAM,qBAAqB,GAC7B,oBAAoB,GACpB,2BAA2B,GAC3B,iBAAiB,GACjB,eAAe,CAAC;AACpB,MAAM,MAAM,aAAa,GACrB,uCAAuC,GACvC,6BAA6B,GAC7B,gCAAgC,GAChC,0BAA0B,GAC1B,WAAW,GACX,eAAe,GACf,iBAAiB,GACjB,yBAAyB,GACzB,gBAAgB,GAChB,eAAe,CAAC;AAEpB,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,IAAI,CAAC;CACpF;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;IAClE,QAAQ,CAAC,MAAM,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACnD,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,cAAc,EAAE,qBAAqB,CAAC;IAC/C,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC;IAC3B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,SAAS,sBAAsB,EAAE,CAAC;CACtD;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,8FAA8F;IAC9F,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,uFAAuF;IACvF,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,eAAe,CAAC,EAAE,mBAAmB,CAAC;IAC/C,QAAQ,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAC;CAC7C;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,sBAAsB,CAAC;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAC;QAC5C,QAAQ,CAAC,eAAe,EAAE,mBAAmB,CAAC;QAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC;KAC5C,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;QAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;KACpC,CAAC;IACF,QAAQ,CAAC,QAAQ,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACrD,QAAQ,CAAC,eAAe,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAC7G,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,kBAAkB,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAChH,QAAQ,CAAC,cAAc,EAAE,qBAAqB,CAAC;IAC/C,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC;IAC3B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAsMD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,oBAAoB,CAE/F;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,oBAAoB,CAEjG;AAiBD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,oBAAoB,GAAG,eAAe,CA0DxF;AA8FD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAEtE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,mBAAmB,EAAE,MAAM,GAAE,oBAAyB,GAAG,aAAa,CA0F1G"}
@@ -0,0 +1,445 @@
1
+ /**
2
+ * Deterministic, advisory-only policy for recognising a trailing low-grade QE streak.
3
+ *
4
+ * This module is intentionally value-in/value-out. The CLI owns filesystem reads, path confinement,
5
+ * defaults, and presentation; the core owns parsing, corroboration, policy, and the decision record.
6
+ */
7
+ export const RESTART_ADVISOR_SCHEMA = 'restart-advisor/1';
8
+ export const RESTART_ADVISOR_MAX_EVIDENCE = 20;
9
+ export const RESTART_ADVISOR_MAX_DIAGNOSTICS = 20;
10
+ const GRADES = new Set(['A', 'B', 'C', 'D', 'F']);
11
+ const GRADE_RANK = { A: 5, B: 4, C: 3, D: 2, F: 1 };
12
+ function isRecord(value) {
13
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
14
+ }
15
+ function canonicalGrade(value) {
16
+ return typeof value === 'string' && GRADES.has(value)
17
+ ? value
18
+ : null;
19
+ }
20
+ function boundedValue(value) {
21
+ let rendered;
22
+ try {
23
+ rendered = JSON.stringify(value);
24
+ }
25
+ catch {
26
+ rendered = String(value);
27
+ }
28
+ if (rendered === undefined)
29
+ rendered = String(value);
30
+ return rendered.length <= 120 ? rendered : `${rendered.slice(0, 117)}...`;
31
+ }
32
+ function nestedRecord(source, record) {
33
+ if (source === 'training-pairs')
34
+ return isRecord(record.evaluation) ? record.evaluation : null;
35
+ const result = isRecord(record.result) ? record.result : null;
36
+ return result !== null && isRecord(result.qe) ? result.qe : null;
37
+ }
38
+ function roundIdentity(record, nested) {
39
+ const values = [];
40
+ if (Object.prototype.hasOwnProperty.call(record, 'round'))
41
+ values.push(record.round);
42
+ if (nested !== null && Object.prototype.hasOwnProperty.call(nested, 'round'))
43
+ values.push(nested.round);
44
+ if (values.length === 0)
45
+ return { explicit: false, round: null, fatal: false, diagnostic: null };
46
+ if (!values.every((value) => Number.isInteger(value) && value > 0)) {
47
+ return {
48
+ explicit: true,
49
+ round: null,
50
+ fatal: true,
51
+ diagnostic: `invalid explicit round identity ${values.map(boundedValue).join(' / ')}`,
52
+ };
53
+ }
54
+ const distinct = [...new Set(values)];
55
+ if (distinct.length !== 1) {
56
+ return {
57
+ explicit: true,
58
+ round: null,
59
+ fatal: true,
60
+ diagnostic: `conflicting explicit round identities ${distinct.join(' / ')}`,
61
+ };
62
+ }
63
+ return { explicit: true, round: distinct[0], fatal: false, diagnostic: null };
64
+ }
65
+ function parseHistory(jsonl, source) {
66
+ const present = jsonl !== null && jsonl !== undefined;
67
+ if (!present || jsonl === '') {
68
+ return {
69
+ source, present, recordsRead: 0, qeCandidates: 0, identityMode: 'none',
70
+ rounds: [], diagnostics: [], fatal: false,
71
+ };
72
+ }
73
+ const candidates = [];
74
+ const diagnostics = [];
75
+ let recordsRead = 0;
76
+ let qeCandidates = 0;
77
+ let fatal = false;
78
+ const lines = jsonl.split(/\n/);
79
+ for (let index = 0; index < lines.length; index += 1) {
80
+ let physical = lines[index].replace(/\r$/, '');
81
+ if (index === 0)
82
+ physical = physical.replace(/^\uFEFF/, '');
83
+ if (physical.trim() === '')
84
+ continue;
85
+ recordsRead += 1;
86
+ const line = index + 1;
87
+ let parsed;
88
+ try {
89
+ parsed = JSON.parse(physical);
90
+ }
91
+ catch (error) {
92
+ diagnostics.push(`${source} line ${line}: malformed JSON (${error.message})`);
93
+ candidates.push({
94
+ line, fingerprint: physical, explicitIdentity: false, explicitRound: null,
95
+ grade: null, problem: 'MALFORMED_JSON',
96
+ });
97
+ continue;
98
+ }
99
+ if (!isRecord(parsed)) {
100
+ diagnostics.push(`${source} line ${line}: JSON record is not an object`);
101
+ candidates.push({
102
+ line, fingerprint: physical, explicitIdentity: false, explicitRound: null,
103
+ grade: null, problem: 'INVALID_RECORD',
104
+ });
105
+ continue;
106
+ }
107
+ if (parsed.stage !== 'qe')
108
+ continue;
109
+ qeCandidates += 1;
110
+ const nested = nestedRecord(source, parsed);
111
+ const identity = roundIdentity(parsed, nested);
112
+ if (identity.fatal) {
113
+ fatal = true;
114
+ diagnostics.push(`${source} line ${line}: ${identity.diagnostic}`);
115
+ }
116
+ const rawGrade = nested?.grade;
117
+ const grade = canonicalGrade(rawGrade);
118
+ const problem = grade === null ? 'UNSUPPORTED_GRADE' : null;
119
+ if (problem !== null) {
120
+ diagnostics.push(`${source} line ${line}: unsupported grade ${boundedValue(rawGrade)}; expected A|B|C|D|F`);
121
+ }
122
+ candidates.push({
123
+ line,
124
+ fingerprint: physical,
125
+ explicitIdentity: identity.explicit,
126
+ explicitRound: identity.round,
127
+ grade,
128
+ problem,
129
+ });
130
+ }
131
+ const identityCandidates = candidates.filter((candidate) => candidate.problem !== 'MALFORMED_JSON' && candidate.problem !== 'INVALID_RECORD');
132
+ const explicitCount = identityCandidates.filter((candidate) => candidate.explicitIdentity).length;
133
+ const implicitCount = identityCandidates.length - explicitCount;
134
+ const identityMode = candidates.length === 0
135
+ ? 'none'
136
+ : identityCandidates.length === 0
137
+ ? 'implicit'
138
+ : explicitCount === identityCandidates.length
139
+ ? 'explicit'
140
+ : implicitCount === identityCandidates.length
141
+ ? 'implicit'
142
+ : 'mixed';
143
+ if (identityMode === 'mixed') {
144
+ fatal = true;
145
+ diagnostics.push(`${source}: mixed explicit and implicit round identities are ambiguous`);
146
+ }
147
+ if (identityMode === 'explicit' && identityCandidates.length !== candidates.length) {
148
+ fatal = true;
149
+ diagnostics.push(`${source}: malformed records cannot be placed among explicit round identities`);
150
+ }
151
+ const rounds = [];
152
+ if (identityMode === 'implicit') {
153
+ let priorFingerprint = null;
154
+ for (const candidate of candidates) {
155
+ if (candidate.fingerprint === priorFingerprint)
156
+ continue;
157
+ priorFingerprint = candidate.fingerprint;
158
+ rounds.push({ round: rounds.length + 1, line: candidate.line, grade: candidate.grade, problem: candidate.problem });
159
+ }
160
+ }
161
+ else if (identityMode === 'explicit') {
162
+ const byRound = new Map();
163
+ for (const candidate of candidates) {
164
+ if (candidate.explicitRound === null)
165
+ continue;
166
+ const next = {
167
+ round: candidate.explicitRound,
168
+ line: candidate.line,
169
+ grade: candidate.grade,
170
+ problem: candidate.problem,
171
+ };
172
+ const prior = byRound.get(candidate.explicitRound);
173
+ if (prior === undefined) {
174
+ byRound.set(candidate.explicitRound, next);
175
+ }
176
+ else if (prior.grade !== next.grade || prior.problem !== next.problem) {
177
+ fatal = true;
178
+ diagnostics.push(`${source}: conflicting duplicate round ${candidate.explicitRound} at lines ${prior.line} and ${next.line}`);
179
+ }
180
+ }
181
+ rounds.push(...[...byRound.values()].sort((left, right) => left.round - right.round));
182
+ }
183
+ return {
184
+ source,
185
+ present,
186
+ recordsRead,
187
+ qeCandidates,
188
+ identityMode,
189
+ rounds,
190
+ diagnostics,
191
+ fatal,
192
+ };
193
+ }
194
+ export function parseCheckpointQeHistory(jsonl) {
195
+ return parseHistory(jsonl, 'checkpoints');
196
+ }
197
+ export function parseTrainingPairQeHistory(jsonl) {
198
+ return parseHistory(jsonl, 'training-pairs');
199
+ }
200
+ function boundedEvidence(history) {
201
+ return history.slice(-RESTART_ADVISOR_MAX_EVIDENCE).map((round) => ({ ...round }));
202
+ }
203
+ function invalidDecision(history) {
204
+ return {
205
+ recommendation: 'INVALID_INPUT',
206
+ recommendRestart: false,
207
+ autoAction: false,
208
+ trailingAtOrBelow: 0,
209
+ reason: 'POLICY_INVALID',
210
+ evidence: boundedEvidence(history),
211
+ };
212
+ }
213
+ export function decideRestartRecommendation(input) {
214
+ const { history, threshold, rounds } = input;
215
+ if ((threshold !== 'C' && threshold !== 'D')
216
+ || !Number.isFinite(rounds)
217
+ || !Number.isInteger(rounds)
218
+ || (rounds ?? 0) < 1) {
219
+ return invalidDecision(history);
220
+ }
221
+ const requiredRounds = rounds;
222
+ for (let index = 0; index < history.length; index += 1) {
223
+ const current = history[index];
224
+ if (!Number.isInteger(current.round) || current.round < 1
225
+ || (index > 0 && current.round <= history[index - 1].round)) {
226
+ return invalidDecision(history);
227
+ }
228
+ }
229
+ if (history.length === 0) {
230
+ return {
231
+ recommendation: 'NOT_ESTABLISHED', recommendRestart: false, autoAction: false,
232
+ trailingAtOrBelow: 0, reason: 'NO_QE_HISTORY', evidence: [],
233
+ };
234
+ }
235
+ let trailing = 0;
236
+ let expectedRound = history[history.length - 1].round;
237
+ let boundary = 'start';
238
+ for (let index = history.length - 1; index >= 0; index -= 1) {
239
+ const current = history[index];
240
+ if (current.round !== expectedRound) {
241
+ boundary = 'gap';
242
+ break;
243
+ }
244
+ if (current.grade === null || current.problem !== null) {
245
+ boundary = 'opaque';
246
+ break;
247
+ }
248
+ if (GRADE_RANK[current.grade] > GRADE_RANK[threshold]) {
249
+ boundary = 'better';
250
+ break;
251
+ }
252
+ trailing += 1;
253
+ expectedRound -= 1;
254
+ }
255
+ const evidence = boundedEvidence(history);
256
+ if (trailing >= requiredRounds) {
257
+ return {
258
+ recommendation: 'RESTART_CODE_STAGE', recommendRestart: true, autoAction: false,
259
+ trailingAtOrBelow: trailing, reason: 'TRAILING_STREAK_AT_OR_BELOW_THRESHOLD', evidence,
260
+ };
261
+ }
262
+ if (boundary === 'better') {
263
+ return {
264
+ recommendation: 'NO_RESTART_RECOMMENDATION', recommendRestart: false, autoAction: false,
265
+ trailingAtOrBelow: trailing, reason: 'TRAILING_STREAK_INTERRUPTED', evidence,
266
+ };
267
+ }
268
+ return {
269
+ recommendation: 'NOT_ESTABLISHED', recommendRestart: false, autoAction: false,
270
+ trailingAtOrBelow: trailing,
271
+ reason: boundary === 'gap'
272
+ ? 'ROUND_GAP'
273
+ : boundary === 'opaque'
274
+ ? 'OPAQUE_TRAILING_EVIDENCE'
275
+ : 'INSUFFICIENT_TRAILING_EVIDENCE',
276
+ evidence,
277
+ };
278
+ }
279
+ function sameNormalizedHistory(left, right) {
280
+ if (left.rounds.length !== right.rounds.length)
281
+ return false;
282
+ return left.rounds.every((round, index) => {
283
+ const other = right.rounds[index];
284
+ return other !== undefined
285
+ && round.round === other.round
286
+ && round.grade === other.grade
287
+ && round.problem === other.problem;
288
+ });
289
+ }
290
+ function sourcePath(slug, source) {
291
+ if (source === 'checkpoints')
292
+ return `features/${slug}/.fa-state/checkpoints.jsonl`;
293
+ if (source === 'training-pairs')
294
+ return `.dz/fa-training/${slug}/qe.jsonl`;
295
+ return null;
296
+ }
297
+ function assembleAdvice(checkpoints, trainingPairs, readDiagnostics, decisionInput) {
298
+ const diagnostics = [...readDiagnostics, ...checkpoints.diagnostics, ...trainingPairs.diagnostics];
299
+ if (readDiagnostics.length > 0 || checkpoints.fatal || trainingPairs.fatal) {
300
+ return {
301
+ source: 'none', selected: null, corroborated: false, diagnostics,
302
+ decision: {
303
+ recommendation: 'NOT_ESTABLISHED', recommendRestart: false, autoAction: false,
304
+ trailingAtOrBelow: 0, reason: 'SOURCE_EVIDENCE_INVALID', evidence: [],
305
+ },
306
+ };
307
+ }
308
+ const checkpointHasHistory = checkpoints.qeCandidates > 0;
309
+ const trainingHasHistory = trainingPairs.qeCandidates > 0;
310
+ if (!checkpointHasHistory && !trainingHasHistory) {
311
+ return {
312
+ source: 'none', selected: null, corroborated: false, diagnostics,
313
+ decision: decideRestartRecommendation({ history: [], ...decisionInput }),
314
+ };
315
+ }
316
+ if (checkpointHasHistory && trainingHasHistory && !sameNormalizedHistory(checkpoints, trainingPairs)) {
317
+ diagnostics.push('checkpoint and training-pair histories do not normalize to the same rounds; refusing to union them');
318
+ return {
319
+ source: 'none', selected: null, corroborated: false, diagnostics,
320
+ decision: {
321
+ recommendation: 'NOT_ESTABLISHED', recommendRestart: false, autoAction: false,
322
+ trailingAtOrBelow: 0, reason: 'SOURCE_CONFLICT', evidence: [],
323
+ },
324
+ };
325
+ }
326
+ const selected = checkpointHasHistory ? checkpoints : trainingPairs;
327
+ return {
328
+ source: selected.source,
329
+ selected,
330
+ corroborated: checkpointHasHistory && trainingHasHistory,
331
+ diagnostics,
332
+ decision: decideRestartRecommendation({ history: selected.rounds, ...decisionInput }),
333
+ };
334
+ }
335
+ function decisionLogPayload(advice) {
336
+ return {
337
+ slug: advice.slug,
338
+ recommendation: advice.recommendation,
339
+ autoAction: false,
340
+ threshold: advice.policy.threshold,
341
+ thresholdOrigin: advice.policy.thresholdOrigin,
342
+ rounds: advice.policy.rounds,
343
+ roundsOrigin: advice.policy.roundsOrigin,
344
+ trailingAtOrBelow: advice.trailingAtOrBelow,
345
+ source: advice.sourcePath ?? 'none',
346
+ evidence: advice.evidence.map((round) => ({
347
+ round: round.round,
348
+ grade: round.grade,
349
+ ...(round.problem === null ? {} : { problem: round.problem }),
350
+ })),
351
+ diagnostics: advice.diagnosticsSummary.total,
352
+ reason: advice.reason,
353
+ };
354
+ }
355
+ export function renderRestartDecisionLog(advice) {
356
+ return `restart-advisor decision ${JSON.stringify(decisionLogPayload(advice))}`;
357
+ }
358
+ export function adviseRestart(input, policy = {}) {
359
+ const checkpoints = parseCheckpointQeHistory(input.checkpointsJsonl);
360
+ const trainingPairs = parseTrainingPairQeHistory(input.trainingPairsJsonl);
361
+ const threshold = policy.threshold === 'C' || policy.threshold === 'D' ? policy.threshold : null;
362
+ const validRounds = Number.isFinite(policy.rounds) && Number.isInteger(policy.rounds) && (policy.rounds ?? 0) > 0
363
+ ? policy.rounds
364
+ : null;
365
+ const thresholdOrigin = policy.thresholdOrigin ?? 'caller';
366
+ const roundsOrigin = policy.roundsOrigin ?? 'caller';
367
+ const inspectedPaths = [
368
+ `features/${input.slug}/.fa-state/checkpoints.jsonl`,
369
+ `.dz/fa-training/${input.slug}/qe.jsonl`,
370
+ ];
371
+ let assembly;
372
+ if ((input.inputErrors?.length ?? 0) > 0) {
373
+ assembly = {
374
+ source: 'none', selected: null, corroborated: false,
375
+ diagnostics: [...(input.inputErrors ?? [])],
376
+ decision: {
377
+ recommendation: 'INVALID_INPUT', recommendRestart: false, autoAction: false,
378
+ trailingAtOrBelow: 0, reason: 'INPUT_INVALID', evidence: [],
379
+ },
380
+ };
381
+ }
382
+ else if (input.slug.trim() === '') {
383
+ assembly = {
384
+ source: 'none', selected: null, corroborated: false,
385
+ diagnostics: ['slug must be a non-empty string'],
386
+ decision: {
387
+ recommendation: 'INVALID_INPUT', recommendRestart: false, autoAction: false,
388
+ trailingAtOrBelow: 0, reason: 'INPUT_INVALID', evidence: [],
389
+ },
390
+ };
391
+ }
392
+ else if (threshold === null || validRounds === null) {
393
+ const invalid = decideRestartRecommendation({
394
+ history: [],
395
+ ...(threshold === null ? {} : { threshold }),
396
+ ...(validRounds === null ? {} : { rounds: validRounds }),
397
+ });
398
+ assembly = {
399
+ source: 'none', selected: null, corroborated: false,
400
+ diagnostics: ['threshold must be C|D and rounds must be a positive integer; core supplies no defaults'],
401
+ decision: invalid,
402
+ };
403
+ }
404
+ else {
405
+ assembly = assembleAdvice(checkpoints, trainingPairs, input.readDiagnostics ?? [], { threshold, rounds: validRounds });
406
+ }
407
+ const selected = assembly.selected;
408
+ const evidence = assembly.decision.evidence;
409
+ const boundedDiagnostics = assembly.diagnostics.slice(0, RESTART_ADVISOR_MAX_DIAGNOSTICS);
410
+ const base = {
411
+ schema: RESTART_ADVISOR_SCHEMA,
412
+ slug: input.slug,
413
+ source: assembly.source,
414
+ sourcePath: sourcePath(input.slug, assembly.source),
415
+ inspectedPaths,
416
+ corroborated: assembly.corroborated,
417
+ policy: { threshold, thresholdOrigin, rounds: validRounds, roundsOrigin },
418
+ counts: {
419
+ recordsRead: selected?.recordsRead ?? checkpoints.recordsRead + trainingPairs.recordsRead,
420
+ qeCandidates: selected?.qeCandidates ?? checkpoints.qeCandidates + trainingPairs.qeCandidates,
421
+ normalizedRounds: selected?.rounds.length ?? 0,
422
+ trailingAtOrBelow: assembly.decision.trailingAtOrBelow,
423
+ },
424
+ evidence,
425
+ evidenceSummary: {
426
+ total: selected?.rounds.length ?? evidence.length,
427
+ returned: evidence.length,
428
+ truncated: (selected?.rounds.length ?? evidence.length) > evidence.length,
429
+ },
430
+ diagnostics: boundedDiagnostics,
431
+ diagnosticsSummary: {
432
+ total: assembly.diagnostics.length,
433
+ returned: boundedDiagnostics.length,
434
+ truncated: assembly.diagnostics.length > boundedDiagnostics.length,
435
+ },
436
+ recommendation: assembly.decision.recommendation,
437
+ recommendRestart: assembly.decision.recommendRestart,
438
+ autoAction: false,
439
+ trailingAtOrBelow: assembly.decision.trailingAtOrBelow,
440
+ reason: assembly.decision.reason,
441
+ };
442
+ const advice = { ...base, decisionLogLine: '' };
443
+ return { ...advice, decisionLogLine: renderRestartDecisionLog(advice) };
444
+ }
445
+ //# sourceMappingURL=restart-advisor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart-advisor.js","sourceRoot":"","sources":["../src/restart-advisor.ts"],"names":[],"mappings":"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"}