@principles/core 1.187.0 → 1.189.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 (52) hide show
  1. package/dist/runtime-v2/__tests__/architecture-regression.test.js +11 -0
  2. package/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
  3. package/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.d.ts +2 -0
  4. package/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.d.ts.map +1 -0
  5. package/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.js +284 -0
  6. package/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.js.map +1 -0
  7. package/dist/runtime-v2/diagnostician/diag-rootcause-output.d.ts +8 -0
  8. package/dist/runtime-v2/diagnostician/diag-rootcause-output.d.ts.map +1 -1
  9. package/dist/runtime-v2/diagnostician/diag-rootcause-output.js +23 -0
  10. package/dist/runtime-v2/diagnostician/diag-rootcause-output.js.map +1 -1
  11. package/dist/runtime-v2/evidence-triage/source-descriptors.d.ts +1 -1
  12. package/dist/runtime-v2/evidence-triage/source-descriptors.js +1 -1
  13. package/dist/runtime-v2/index.d.ts +4 -3
  14. package/dist/runtime-v2/index.d.ts.map +1 -1
  15. package/dist/runtime-v2/index.js +6 -2
  16. package/dist/runtime-v2/index.js.map +1 -1
  17. package/dist/runtime-v2/intent/__tests__/intent-decision-record.test.d.ts +2 -0
  18. package/dist/runtime-v2/intent/__tests__/intent-decision-record.test.d.ts.map +1 -0
  19. package/dist/runtime-v2/intent/__tests__/intent-decision-record.test.js +183 -0
  20. package/dist/runtime-v2/intent/__tests__/intent-decision-record.test.js.map +1 -0
  21. package/dist/runtime-v2/intent/index.d.ts +1 -0
  22. package/dist/runtime-v2/intent/index.d.ts.map +1 -1
  23. package/dist/runtime-v2/intent/index.js +1 -0
  24. package/dist/runtime-v2/intent/index.js.map +1 -1
  25. package/dist/runtime-v2/intent/intent-decision-record.d.ts +105 -0
  26. package/dist/runtime-v2/intent/intent-decision-record.d.ts.map +1 -0
  27. package/dist/runtime-v2/intent/intent-decision-record.js +21 -0
  28. package/dist/runtime-v2/intent/intent-decision-record.js.map +1 -0
  29. package/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.d.ts +2 -0
  30. package/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.d.ts.map +1 -0
  31. package/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.js +207 -0
  32. package/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.js.map +1 -0
  33. package/dist/runtime-v2/store/intent/index.d.ts +6 -0
  34. package/dist/runtime-v2/store/intent/index.d.ts.map +1 -0
  35. package/dist/runtime-v2/store/intent/index.js +5 -0
  36. package/dist/runtime-v2/store/intent/index.js.map +1 -0
  37. package/dist/runtime-v2/store/intent/sqlite-intent-decision-store.d.ts +36 -0
  38. package/dist/runtime-v2/store/intent/sqlite-intent-decision-store.d.ts.map +1 -0
  39. package/dist/runtime-v2/store/intent/sqlite-intent-decision-store.js +259 -0
  40. package/dist/runtime-v2/store/intent/sqlite-intent-decision-store.js.map +1 -0
  41. package/dist/runtime-v2/store/sqlite-connection.d.ts.map +1 -1
  42. package/dist/runtime-v2/store/sqlite-connection.js +33 -0
  43. package/dist/runtime-v2/store/sqlite-connection.js.map +1 -1
  44. package/dist/runtime-v2/types/evidence-chain-contract.d.ts +63 -0
  45. package/dist/runtime-v2/types/evidence-chain-contract.d.ts.map +1 -1
  46. package/dist/runtime-v2/types/evidence-chain-contract.js +234 -9
  47. package/dist/runtime-v2/types/evidence-chain-contract.js.map +1 -1
  48. package/dist/runtime-v2/types/index.d.ts +2 -2
  49. package/dist/runtime-v2/types/index.d.ts.map +1 -1
  50. package/dist/runtime-v2/types/index.js +3 -1
  51. package/dist/runtime-v2/types/index.js.map +1 -1
  52. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-connection.js","sourceRoot":"","sources":["../../../src/runtime-v2/store/sqlite-connection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sqlite-connection.js","sourceRoot":"","sources":["../../../src/runtime-v2/store/sqlite-connection.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@
6
6
  * lives inside principles-core to be shared by Console read models,
7
7
  * CLI commands, and test fixtures.
8
8
  */
9
+ import { type IntentTension } from '../diagnostician/diag-rootcause-output.js';
10
+ export type { IntentTension };
9
11
  export type EvidenceChainState = 'recorded-only' | 'evidence-only' | 'diagnosis-queued' | 'diagnosis-running' | 'diagnosis-succeeded' | 'diagnosis-failed' | 'diagnosis-retry-wait' | 'candidate-generated' | 'internalization-missing' | 'internalization-pending' | 'internalization-running' | 'internalization-failed' | 'internalization-succeeded' | 'owner-reviewable' | 'malformed' | 'degraded';
10
12
  export declare const EvidenceChainStateSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"recorded-only">, import("@sinclair/typebox").TLiteral<"evidence-only">, import("@sinclair/typebox").TLiteral<"diagnosis-queued">, import("@sinclair/typebox").TLiteral<"diagnosis-running">, import("@sinclair/typebox").TLiteral<"diagnosis-succeeded">, import("@sinclair/typebox").TLiteral<"diagnosis-failed">, import("@sinclair/typebox").TLiteral<"diagnosis-retry-wait">, import("@sinclair/typebox").TLiteral<"candidate-generated">, import("@sinclair/typebox").TLiteral<"internalization-missing">, import("@sinclair/typebox").TLiteral<"internalization-pending">, import("@sinclair/typebox").TLiteral<"internalization-running">, import("@sinclair/typebox").TLiteral<"internalization-failed">, import("@sinclair/typebox").TLiteral<"internalization-succeeded">, import("@sinclair/typebox").TLiteral<"owner-reviewable">, import("@sinclair/typebox").TLiteral<"malformed">, import("@sinclair/typebox").TLiteral<"degraded">]>;
11
13
  export interface EvidenceChainRecord {
@@ -36,6 +38,18 @@ export interface EvidenceChainRecord {
36
38
  runtimeTaskId?: string;
37
39
  /** PRI-406: How this record was linked — 'canonical' (precise via canonical_pain_id) or 'legacy' (timestamp/content heuristic). */
38
40
  linkMode?: 'canonical' | 'legacy';
41
+ /**
42
+ * PRI-469: Optional intent tension surfaced from the diagnostician artifact
43
+ * (Stage A output, SPEC §16). Present only when:
44
+ * 1. The `intent_engineering` flag was on at diagnosis time, AND
45
+ * 2. The Stage A LLM chose to emit an intentTension, AND
46
+ * 3. The artifact content_json validated successfully.
47
+ *
48
+ * This field is for Owner-facing display only (SPEC §22.1.2). It MUST NOT
49
+ * directly create rules or modify ledger principle status (SPEC §22).
50
+ * `confidence` is forbidden on this object (SPEC §16.3).
51
+ */
52
+ intentTension?: IntentTension;
39
53
  }
40
54
  export declare const EvidenceChainRecordSchema: import("@sinclair/typebox").TObject<{
41
55
  id: import("@sinclair/typebox").TString;
@@ -62,6 +76,15 @@ export declare const EvidenceChainRecordSchema: import("@sinclair/typebox").TObj
62
76
  canonicalPainId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
63
77
  runtimeTaskId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
64
78
  linkMode: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"canonical">, import("@sinclair/typebox").TLiteral<"legacy">]>>;
79
+ intentTension: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
80
+ source: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"none">, import("@sinclair/typebox").TLiteral<"action_drift">, import("@sinclair/typebox").TLiteral<"intent_suspect">, import("@sinclair/typebox").TLiteral<"healthy_tension">]>;
81
+ evidenceStrength: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"weak">, import("@sinclair/typebox").TLiteral<"moderate">, import("@sinclair/typebox").TLiteral<"strong">]>;
82
+ relatedIntentFields: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"why">, import("@sinclair/typebox").TLiteral<"desired_outcome">, import("@sinclair/typebox").TLiteral<"non_negotiables">, import("@sinclair/typebox").TLiteral<"stop_escalation">, import("@sinclair/typebox").TLiteral<"current_strategic_focus">]>>;
83
+ evidence: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
84
+ explanation: import("@sinclair/typebox").TString;
85
+ suggestedOwnerAction: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"confirm_drift">, import("@sinclair/typebox").TLiteral<"revise_intent">, import("@sinclair/typebox").TLiteral<"observe">, import("@sinclair/typebox").TLiteral<"dismiss">, import("@sinclair/typebox").TLiteral<"promote_to_principle">, import("@sinclair/typebox").TLiteral<"promote_to_rulehost">]>;
86
+ intentDocHash: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
87
+ }>>;
65
88
  }>;
66
89
  export interface EvidenceChainResponse {
67
90
  records: EvidenceChainRecord[];
@@ -96,12 +119,35 @@ export declare const EvidenceChainResponseSchema: import("@sinclair/typebox").TO
96
119
  canonicalPainId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
97
120
  runtimeTaskId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
98
121
  linkMode: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"canonical">, import("@sinclair/typebox").TLiteral<"legacy">]>>;
122
+ intentTension: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
123
+ source: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"none">, import("@sinclair/typebox").TLiteral<"action_drift">, import("@sinclair/typebox").TLiteral<"intent_suspect">, import("@sinclair/typebox").TLiteral<"healthy_tension">]>;
124
+ evidenceStrength: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"weak">, import("@sinclair/typebox").TLiteral<"moderate">, import("@sinclair/typebox").TLiteral<"strong">]>;
125
+ relatedIntentFields: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"why">, import("@sinclair/typebox").TLiteral<"desired_outcome">, import("@sinclair/typebox").TLiteral<"non_negotiables">, import("@sinclair/typebox").TLiteral<"stop_escalation">, import("@sinclair/typebox").TLiteral<"current_strategic_focus">]>>;
126
+ evidence: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
127
+ explanation: import("@sinclair/typebox").TString;
128
+ suggestedOwnerAction: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"confirm_drift">, import("@sinclair/typebox").TLiteral<"revise_intent">, import("@sinclair/typebox").TLiteral<"observe">, import("@sinclair/typebox").TLiteral<"dismiss">, import("@sinclair/typebox").TLiteral<"promote_to_principle">, import("@sinclair/typebox").TLiteral<"promote_to_rulehost">]>;
129
+ intentDocHash: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
130
+ }>>;
99
131
  }>>;
100
132
  generatedAt: import("@sinclair/typebox").TString;
101
133
  degradedReason: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
102
134
  nextAction: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
103
135
  note: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
104
136
  }>;
137
+ /**
138
+ * Validate an untrusted `intentTension` value from a diagnostician artifact.
139
+ *
140
+ * @returns The validated IntentTension (evidence truncated to max 3), or
141
+ * `undefined` when the value is malformed. Never throws.
142
+ *
143
+ * Runtime Contract rules applied:
144
+ * - Rule 1: input is `unknown`, validated before use (ERR-001)
145
+ * - Rule 2: no `as` bypass — all fields checked with typeof / Set.has (ERR-001/005)
146
+ * - Rule 4: array element types validated element-wise (ERR-005/007)
147
+ * - Rule 5: Object.hasOwn used for key checks (ERR-013)
148
+ * - Rule 9: callers must set a degradedReason when this returns undefined (ERR-002)
149
+ */
150
+ export declare function validateIntentTension(value: unknown): IntentTension | undefined;
105
151
  export declare function mapSourceKind(source: string): string;
106
152
  export declare function inferAdmissionDecision(sourceKind: string): string;
107
153
  export interface ChainStateParams {
@@ -146,6 +192,10 @@ export interface TaskMapEntry {
146
192
  rootCauseSummary?: string;
147
193
  diagnosticJsonDegraded?: boolean;
148
194
  inputRef?: string;
195
+ /** PRI-469: intent tension extracted from the diagnostician artifact (Stage A output). */
196
+ intentTension?: IntentTension;
197
+ /** PRI-469: set when the artifact content_json could not be parsed or intentTension was malformed. */
198
+ artifactDegraded?: boolean;
149
199
  }
150
200
  export declare function crossReferenceByTimestamp(painEvents: {
151
201
  painId: string;
@@ -209,5 +259,18 @@ export declare function assembleEvidenceChain(params: {
209
259
  stateDbAvailable: boolean;
210
260
  degradedReasons?: string[];
211
261
  degradedNextActions?: string[];
262
+ /**
263
+ * PRI-469: Diagnostician artifacts (rows from the `artifacts` table where
264
+ * artifact_kind = 'diagnostician_output'). Each row is treated as untrusted
265
+ * `unknown` and must have `task_id` (string) and `content_json` (string of
266
+ * JSON containing the DiagnosticianOutputV1 with optional `rootCause` and
267
+ * `intentTension`).
268
+ *
269
+ * Production architecture: DiagnosticianCommitter writes the full Stage C
270
+ * output to the artifacts table, NOT to tasks.diagnostic_json. The artifact
271
+ * is the canonical source for both rootCause and intentTension.
272
+ * tasks.diagnostic_json remains as a test-fixture fallback only.
273
+ */
274
+ diagnosticArtifacts?: unknown[];
212
275
  }): EvidenceChainResponse;
213
276
  //# sourceMappingURL=evidence-chain-contract.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"evidence-chain-contract.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/types/evidence-chain-contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evidence-chain-contract.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/types/evidence-chain-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAEL,KAAK,aAAa,EAKnB,MAAM,2CAA2C,CAAC;AAKnD,YAAY,EAAE,aAAa,EAAE,CAAC;AAI9B,MAAM,MAAM,kBAAkB,GAC1B,eAAe,GACf,eAAe,GACf,kBAAkB,GAClB,mBAAmB,GACnB,qBAAqB,GACrB,kBAAkB,GAClB,sBAAsB,GACtB,qBAAqB,GACrB,yBAAyB,GACzB,yBAAyB,GACzB,yBAAyB,GACzB,wBAAwB,GACxB,2BAA2B,GAC3B,kBAAkB,GAClB,WAAW,GACX,UAAU,CAAC;AAEf,eAAO,MAAM,wBAAwB,g+BAiBnC,CAAC;AAEH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kEAAkE;IAClE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mIAAmI;IACnI,QAAQ,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;IAClC;;;;;;;;;;OAUG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6BpC,CAAC;AAEH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMtC,CAAC;AA4EH;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,CAmE/E;AAID,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAqBpD;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAUjE;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,kBAAkB,CA0D3E;AA6CD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iGAAiG;IACjG,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,iBAAiB,GAAG,MAAM,GAAG,SAAS,CAiC9E;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,CAMT;AAID,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CA4BhF;AAID,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0FAA0F;IAC1F,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,sGAAsG;IACtG,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,yBAAyB,CACvC,UAAU,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,EACnE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EAClC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,GAC1B,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CA2C3B;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOjE;AA6KD,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,EAAE,CAAC;IACtB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,UAAU,EAAE,OAAO,EAAE,CAAC;IACtB,YAAY,EAAE,OAAO,EAAE,CAAC;IACxB,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B;;;;;;;;;;;OAWG;IACH,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC;CACjC,GAAG,qBAAqB,CAmsBxB"}
@@ -7,6 +7,7 @@
7
7
  * CLI commands, and test fixtures.
8
8
  */
9
9
  import { Type } from '@sinclair/typebox';
10
+ import { IntentTensionSchema, } from '../diagnostician/diag-rootcause-output.js';
10
11
  export const EvidenceChainStateSchema = Type.Union([
11
12
  Type.Literal('recorded-only'),
12
13
  Type.Literal('evidence-only'),
@@ -50,6 +51,10 @@ export const EvidenceChainRecordSchema = Type.Object({
50
51
  canonicalPainId: Type.Optional(Type.String()),
51
52
  runtimeTaskId: Type.Optional(Type.String()),
52
53
  linkMode: Type.Optional(Type.Union([Type.Literal('canonical'), Type.Literal('legacy')])),
54
+ // PRI-469: optional intent tension from diagnostician artifact (SPEC §16).
55
+ // `confidence` is forbidden on this object (SPEC §16.3); enforced by
56
+ // IntentTensionSchema's additionalProperties:false and by validateIntentTension.
57
+ intentTension: Type.Optional(IntentTensionSchema),
53
58
  });
54
59
  export const EvidenceChainResponseSchema = Type.Object({
55
60
  records: Type.Array(EvidenceChainRecordSchema),
@@ -85,6 +90,121 @@ function coerceToString(value) {
85
90
  return String(value);
86
91
  return '';
87
92
  }
93
+ // ── PRI-469: Intent Tension validation (SPEC §16) ────────────────────────────
94
+ //
95
+ // Pure helper that validates an untrusted `intentTension` object read from the
96
+ // diagnostician artifact's content_json. Returns the validated IntentTension
97
+ // (with evidence truncated to max 3 per SPEC §16.4) or `undefined` when the
98
+ // data is malformed. The caller is responsible for setting a degradedReason
99
+ // when validation fails (ERR-002: graceful degradation must include a reason).
100
+ //
101
+ // SPEC §16.3: `confidence` is FORBIDDEN on intentTension. The Stage A
102
+ // rootCause-level confidence is the only diagnostician confidence. This helper
103
+ // explicitly rejects any object carrying a `confidence` field, in addition to
104
+ // the TypeBox schema's additionalProperties:false guard — defense in depth
105
+ // (ERR-001: untrusted data from DB artifacts).
106
+ const VALID_INTENT_TENSION_SOURCES = new Set([
107
+ 'none',
108
+ 'action_drift',
109
+ 'intent_suspect',
110
+ 'healthy_tension',
111
+ ]);
112
+ const VALID_EVIDENCE_STRENGTHS = new Set(['weak', 'moderate', 'strong']);
113
+ const VALID_INTENT_RELATED_FIELDS = new Set([
114
+ 'why',
115
+ 'desired_outcome',
116
+ 'non_negotiables',
117
+ 'stop_escalation',
118
+ 'current_strategic_focus',
119
+ ]);
120
+ const VALID_SUGGESTED_OWNER_ACTIONS = new Set([
121
+ 'confirm_drift',
122
+ 'revise_intent',
123
+ 'observe',
124
+ 'dismiss',
125
+ 'promote_to_principle',
126
+ 'promote_to_rulehost',
127
+ ]);
128
+ /** SPEC §16.4: evidence array is capped at 3 items to limit Owner review burden. */
129
+ const INTENT_TENSION_EVIDENCE_MAX = 3;
130
+ /**
131
+ * Validate an untrusted `intentTension` value from a diagnostician artifact.
132
+ *
133
+ * @returns The validated IntentTension (evidence truncated to max 3), or
134
+ * `undefined` when the value is malformed. Never throws.
135
+ *
136
+ * Runtime Contract rules applied:
137
+ * - Rule 1: input is `unknown`, validated before use (ERR-001)
138
+ * - Rule 2: no `as` bypass — all fields checked with typeof / Set.has (ERR-001/005)
139
+ * - Rule 4: array element types validated element-wise (ERR-005/007)
140
+ * - Rule 5: Object.hasOwn used for key checks (ERR-013)
141
+ * - Rule 9: callers must set a degradedReason when this returns undefined (ERR-002)
142
+ */
143
+ export function validateIntentTension(value) {
144
+ if (!isRecord(value))
145
+ return undefined;
146
+ // SPEC §16.3: confidence is forbidden on intentTension.
147
+ if (Object.hasOwn(value, 'confidence'))
148
+ return undefined;
149
+ const source = getOwnValue(value, 'source');
150
+ if (typeof source !== 'string' || !VALID_INTENT_TENSION_SOURCES.has(source)) {
151
+ return undefined;
152
+ }
153
+ const evidenceStrength = getOwnValue(value, 'evidenceStrength');
154
+ if (typeof evidenceStrength !== 'string' || !VALID_EVIDENCE_STRENGTHS.has(evidenceStrength)) {
155
+ return undefined;
156
+ }
157
+ // relatedIntentFields: must be an array of valid enum strings (ERR-005/007).
158
+ const relatedIntentFieldsRaw = getOwnValue(value, 'relatedIntentFields');
159
+ if (!Array.isArray(relatedIntentFieldsRaw))
160
+ return undefined;
161
+ const relatedIntentFields = [];
162
+ for (const f of relatedIntentFieldsRaw) {
163
+ // Runtime-validated against the enum Set; the `as` cast below is AFTER
164
+ // validation, which is the correct pattern (Rule 2 forbids using `as`
165
+ // INSTEAD of validation, not after it).
166
+ if (typeof f !== 'string' || !VALID_INTENT_RELATED_FIELDS.has(f))
167
+ return undefined;
168
+ relatedIntentFields.push(f);
169
+ }
170
+ // evidence: must be an array of strings. Truncate to max 3 (SPEC §16.4,
171
+ // graceful degradation — keep the first 3 rather than dropping the whole
172
+ // tension, so the Owner still sees the signal).
173
+ const evidenceRaw = getOwnValue(value, 'evidence');
174
+ if (!Array.isArray(evidenceRaw))
175
+ return undefined;
176
+ const evidence = [];
177
+ for (const e of evidenceRaw) {
178
+ if (typeof e !== 'string')
179
+ return undefined;
180
+ evidence.push(e);
181
+ }
182
+ const truncatedEvidence = evidence.slice(0, INTENT_TENSION_EVIDENCE_MAX);
183
+ const explanation = getOwnValue(value, 'explanation');
184
+ if (typeof explanation !== 'string' || explanation.length === 0)
185
+ return undefined;
186
+ const suggestedOwnerAction = getOwnValue(value, 'suggestedOwnerAction');
187
+ if (typeof suggestedOwnerAction !== 'string' ||
188
+ !VALID_SUGGESTED_OWNER_ACTIONS.has(suggestedOwnerAction)) {
189
+ return undefined;
190
+ }
191
+ // intentDocHash: optional string.
192
+ const intentDocHash = getOwnValue(value, 'intentDocHash');
193
+ if (intentDocHash !== undefined && typeof intentDocHash !== 'string')
194
+ return undefined;
195
+ const result = {
196
+ source: source,
197
+ evidenceStrength: evidenceStrength,
198
+ relatedIntentFields,
199
+ evidence: truncatedEvidence,
200
+ explanation,
201
+ suggestedOwnerAction: suggestedOwnerAction,
202
+ };
203
+ if (typeof intentDocHash === 'string') {
204
+ result.intentDocHash = intentDocHash;
205
+ }
206
+ return result;
207
+ }
88
208
  // ── Mapping & State Resolution ────────────────────────────────────────────────
89
209
  export function mapSourceKind(source) {
90
210
  switch (source) {
@@ -523,7 +643,7 @@ function dedupeRecords(records) {
523
643
  return records.filter(record => !idsToRemove.has(record.id));
524
644
  }
525
645
  export function assembleEvidenceChain(params) {
526
- const { workspaceDir, painEvents: rawPainEvents, tasks: rawTasks, candidates: rawCandidates, dreamerTasks: rawDreamerTasks, ledgerPrinciples, trajectoryDbAvailable, stateDbAvailable, } = params;
646
+ const { workspaceDir, painEvents: rawPainEvents, tasks: rawTasks, candidates: rawCandidates, dreamerTasks: rawDreamerTasks, ledgerPrinciples, trajectoryDbAvailable, stateDbAvailable, diagnosticArtifacts: rawDiagnosticArtifacts, } = params;
527
647
  const generatedAt = new Date().toISOString();
528
648
  const records = [];
529
649
  const degradedReasons = params.degradedReasons ? [...params.degradedReasons] : [];
@@ -533,6 +653,22 @@ export function assembleEvidenceChain(params) {
533
653
  const tasks = rawTasks.filter(isRecord);
534
654
  const candidates = rawCandidates.filter(isRecord);
535
655
  const dreamerTasks = rawDreamerTasks.filter(isRecord);
656
+ const diagnosticArtifacts = (rawDiagnosticArtifacts ?? []).filter(isRecord);
657
+ // PRI-469: Build artifact lookup by task_id. Each artifact row has
658
+ // { task_id: string, content_json: string }. content_json holds the
659
+ // DiagnosticianOutputV1 JSON (including rootCause and optional intentTension).
660
+ // Artifact is the CANONICAL source; tasks.diagnostic_json is a fallback.
661
+ const artifactByTaskId = new Map();
662
+ for (const artifact of diagnosticArtifacts) {
663
+ const taskId = readOwnString(artifact, 'task_id');
664
+ if (!taskId)
665
+ continue;
666
+ // First artifact wins — duplicate task_ids should not happen, but if they
667
+ // do we keep the first to avoid silent data swapping (ERR-015).
668
+ if (!artifactByTaskId.has(taskId)) {
669
+ artifactByTaskId.set(taskId, artifact);
670
+ }
671
+ }
536
672
  // 1. Process tasks into a map
537
673
  const taskMap = new Map();
538
674
  for (const task of tasks) {
@@ -546,18 +682,79 @@ export function assembleEvidenceChain(params) {
546
682
  else {
547
683
  painId = taskId.startsWith('diagnosis_') ? taskId.slice('diagnosis_'.length) : taskId;
548
684
  }
685
+ // PRI-469: Extract rootCause and intentTension from the diagnostician
686
+ // artifact (canonical source). Artifact takes precedence over
687
+ // tasks.diagnostic_json, which is kept only as a test-fixture fallback.
549
688
  let rootCauseSummary;
689
+ let intentTension;
690
+ let artifactDegraded = false;
550
691
  let diagnosticJsonDegraded = false;
551
- const dj = getOwnValue(task, 'diagnostic_json');
552
- if (isString(dj)) {
553
- try {
554
- const parsed = JSON.parse(dj);
555
- if (isRecord(parsed) && Object.hasOwn(parsed, 'rootCause') && isString(parsed.rootCause)) {
556
- rootCauseSummary = parsed.rootCause;
692
+ const artifact = taskId ? artifactByTaskId.get(taskId) : undefined;
693
+ if (artifact) {
694
+ const contentJson = readOwnString(artifact, 'content_json');
695
+ if (typeof contentJson === 'string') {
696
+ try {
697
+ const parsed = JSON.parse(contentJson);
698
+ if (isRecord(parsed)) {
699
+ // rootCause from artifact (canonical, takes precedence).
700
+ // The artifact stores DiagnosticianOutputV1 where rootCause is an
701
+ // object: { summary: string, confidence: number, ... }. Legacy
702
+ // test fixtures may store rootCause as a plain string. Handle both.
703
+ const artifactRootCause = getOwnValue(parsed, 'rootCause');
704
+ if (typeof artifactRootCause === 'string') {
705
+ rootCauseSummary = artifactRootCause;
706
+ }
707
+ else if (isRecord(artifactRootCause)) {
708
+ const rootCauseSummaryValue = getOwnValue(artifactRootCause, 'summary');
709
+ if (typeof rootCauseSummaryValue === 'string') {
710
+ rootCauseSummary = rootCauseSummaryValue;
711
+ }
712
+ }
713
+ // intentTension from artifact — validated with runtime guards.
714
+ // Only extract when the key is present (optional field).
715
+ if (Object.hasOwn(parsed, 'intentTension')) {
716
+ const validated = validateIntentTension(getOwnValue(parsed, 'intentTension'));
717
+ if (validated) {
718
+ intentTension = validated;
719
+ }
720
+ else {
721
+ // intentTension was present but malformed — degrade visibly
722
+ // (ERR-002). rootCause may still be valid, so we do NOT clobber
723
+ // it; we only flag the artifact as partially degraded.
724
+ artifactDegraded = true;
725
+ }
726
+ }
727
+ }
728
+ else {
729
+ // content_json parsed but not an object — degrade.
730
+ artifactDegraded = true;
731
+ }
557
732
  }
733
+ catch {
734
+ // content_json is not valid JSON — degrade. rootCause and
735
+ // intentTension both unavailable from the artifact.
736
+ artifactDegraded = true;
737
+ }
738
+ }
739
+ else {
740
+ // content_json missing or not a string — degrade.
741
+ artifactDegraded = true;
558
742
  }
559
- catch {
560
- diagnosticJsonDegraded = true;
743
+ }
744
+ // Fallback: tasks.diagnostic_json (test-fixture compat). Only used when
745
+ // the artifact did not provide a rootCause.
746
+ if (rootCauseSummary === undefined) {
747
+ const dj = getOwnValue(task, 'diagnostic_json');
748
+ if (isString(dj)) {
749
+ try {
750
+ const parsed = JSON.parse(dj);
751
+ if (isRecord(parsed) && Object.hasOwn(parsed, 'rootCause') && isString(parsed.rootCause)) {
752
+ rootCauseSummary = parsed.rootCause;
753
+ }
754
+ }
755
+ catch {
756
+ diagnosticJsonDegraded = true;
757
+ }
561
758
  }
562
759
  }
563
760
  taskMap.set(painId, {
@@ -568,6 +765,8 @@ export function assembleEvidenceChain(params) {
568
765
  rootCauseSummary,
569
766
  diagnosticJsonDegraded,
570
767
  inputRef,
768
+ intentTension,
769
+ artifactDegraded,
571
770
  });
572
771
  }
573
772
  // 2. Build dreamer map
@@ -753,6 +952,16 @@ export function assembleEvidenceChain(params) {
753
952
  if (linkedTask.diagnosticJsonDegraded) {
754
953
  record.degradedReason = 'Diagnostic data for this record could not be parsed';
755
954
  }
955
+ // PRI-469: surface intentTension from the diagnostician artifact.
956
+ if (linkedTask.intentTension) {
957
+ record.intentTension = linkedTask.intentTension;
958
+ }
959
+ // PRI-469: artifact degraded (content_json unparseable or intentTension
960
+ // malformed) — degrade visibly (ERR-002). Do not clobber an existing
961
+ // degradedReason from diagnosticJsonDegraded; append instead.
962
+ if (linkedTask.artifactDegraded && !record.degradedReason) {
963
+ record.degradedReason = 'Diagnostician artifact for this record could not be fully parsed; intentTension may be unavailable.';
964
+ }
756
965
  }
757
966
  if (dreamerInfo) {
758
967
  record.internalizationTaskId = dreamerInfo.taskId;
@@ -917,6 +1126,10 @@ export function assembleEvidenceChain(params) {
917
1126
  if (crossRefTask.rootCauseSummary) {
918
1127
  record.rootCauseSummary = crossRefTask.rootCauseSummary;
919
1128
  }
1129
+ // PRI-469: surface intentTension from the cross-referenced task's artifact.
1130
+ if (crossRefTask.intentTension) {
1131
+ record.intentTension = crossRefTask.intentTension;
1132
+ }
920
1133
  if (crossRefTask.lastError && (state === 'diagnosis-failed' || state === 'diagnosis-retry-wait')) {
921
1134
  record.failureReason = crossRefTask.lastError;
922
1135
  }
@@ -931,6 +1144,10 @@ export function assembleEvidenceChain(params) {
931
1144
  if (crossRefTask.diagnosticJsonDegraded) {
932
1145
  record.degradedReason = 'Diagnostic data for this record could not be parsed';
933
1146
  }
1147
+ // PRI-469: artifact degraded — degrade visibly (ERR-002).
1148
+ if (crossRefTask.artifactDegraded && !record.degradedReason) {
1149
+ record.degradedReason = 'Diagnostician artifact for this record could not be fully parsed; intentTension may be unavailable.';
1150
+ }
934
1151
  records.push(record);
935
1152
  }
936
1153
  // 6. Include tasks that have no matching pain_event (e.g. CLI direct records)
@@ -1000,6 +1217,10 @@ export function assembleEvidenceChain(params) {
1000
1217
  if (task.rootCauseSummary) {
1001
1218
  record.rootCauseSummary = task.rootCauseSummary;
1002
1219
  }
1220
+ // PRI-469: surface intentTension from the task's diagnostician artifact.
1221
+ if (task.intentTension) {
1222
+ record.intentTension = task.intentTension;
1223
+ }
1003
1224
  if (task.lastError && (state === 'diagnosis-failed' || state === 'diagnosis-retry-wait')) {
1004
1225
  record.failureReason = task.lastError;
1005
1226
  }
@@ -1014,6 +1235,10 @@ export function assembleEvidenceChain(params) {
1014
1235
  if (task.diagnosticJsonDegraded) {
1015
1236
  record.degradedReason = 'Diagnostic data for this record could not be parsed';
1016
1237
  }
1238
+ // PRI-469: artifact degraded — degrade visibly (ERR-002).
1239
+ if (task.artifactDegraded && !record.degradedReason) {
1240
+ record.degradedReason = 'Diagnostician artifact for this record could not be fully parsed; intentTension may be unavailable.';
1241
+ }
1017
1242
  records.push(record);
1018
1243
  }
1019
1244
  // Sort by observedAt descending