@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.
- package/dist/runtime-v2/__tests__/architecture-regression.test.js +11 -0
- package/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.d.ts +2 -0
- package/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.d.ts.map +1 -0
- package/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.js +284 -0
- package/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.js.map +1 -0
- package/dist/runtime-v2/diagnostician/diag-rootcause-output.d.ts +8 -0
- package/dist/runtime-v2/diagnostician/diag-rootcause-output.d.ts.map +1 -1
- package/dist/runtime-v2/diagnostician/diag-rootcause-output.js +23 -0
- package/dist/runtime-v2/diagnostician/diag-rootcause-output.js.map +1 -1
- package/dist/runtime-v2/evidence-triage/source-descriptors.d.ts +1 -1
- package/dist/runtime-v2/evidence-triage/source-descriptors.js +1 -1
- package/dist/runtime-v2/index.d.ts +4 -3
- package/dist/runtime-v2/index.d.ts.map +1 -1
- package/dist/runtime-v2/index.js +6 -2
- package/dist/runtime-v2/index.js.map +1 -1
- package/dist/runtime-v2/intent/__tests__/intent-decision-record.test.d.ts +2 -0
- package/dist/runtime-v2/intent/__tests__/intent-decision-record.test.d.ts.map +1 -0
- package/dist/runtime-v2/intent/__tests__/intent-decision-record.test.js +183 -0
- package/dist/runtime-v2/intent/__tests__/intent-decision-record.test.js.map +1 -0
- package/dist/runtime-v2/intent/index.d.ts +1 -0
- package/dist/runtime-v2/intent/index.d.ts.map +1 -1
- package/dist/runtime-v2/intent/index.js +1 -0
- package/dist/runtime-v2/intent/index.js.map +1 -1
- package/dist/runtime-v2/intent/intent-decision-record.d.ts +105 -0
- package/dist/runtime-v2/intent/intent-decision-record.d.ts.map +1 -0
- package/dist/runtime-v2/intent/intent-decision-record.js +21 -0
- package/dist/runtime-v2/intent/intent-decision-record.js.map +1 -0
- package/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.d.ts +2 -0
- package/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.d.ts.map +1 -0
- package/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.js +207 -0
- package/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.js.map +1 -0
- package/dist/runtime-v2/store/intent/index.d.ts +6 -0
- package/dist/runtime-v2/store/intent/index.d.ts.map +1 -0
- package/dist/runtime-v2/store/intent/index.js +5 -0
- package/dist/runtime-v2/store/intent/index.js.map +1 -0
- package/dist/runtime-v2/store/intent/sqlite-intent-decision-store.d.ts +36 -0
- package/dist/runtime-v2/store/intent/sqlite-intent-decision-store.d.ts.map +1 -0
- package/dist/runtime-v2/store/intent/sqlite-intent-decision-store.js +259 -0
- package/dist/runtime-v2/store/intent/sqlite-intent-decision-store.js.map +1 -0
- package/dist/runtime-v2/store/sqlite-connection.d.ts.map +1 -1
- package/dist/runtime-v2/store/sqlite-connection.js +33 -0
- package/dist/runtime-v2/store/sqlite-connection.js.map +1 -1
- package/dist/runtime-v2/types/evidence-chain-contract.d.ts +63 -0
- package/dist/runtime-v2/types/evidence-chain-contract.d.ts.map +1 -1
- package/dist/runtime-v2/types/evidence-chain-contract.js +234 -9
- package/dist/runtime-v2/types/evidence-chain-contract.js.map +1 -1
- package/dist/runtime-v2/types/index.d.ts +2 -2
- package/dist/runtime-v2/types/index.d.ts.map +1 -1
- package/dist/runtime-v2/types/index.js +3 -1
- package/dist/runtime-v2/types/index.js.map +1 -1
- 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":"AAAA;;;;;;;GAOG;
|
|
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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"}
|
|
@@ -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
|
|
552
|
-
if (
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
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
|
-
|
|
560
|
-
|
|
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
|