@principles/core 1.186.0 → 1.188.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 +9 -1
- 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/__tests__/diag-rootcause-output.test.js +134 -15
- package/dist/runtime-v2/diagnostician/__tests__/diag-rootcause-output.test.js.map +1 -1
- package/dist/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.d.ts +18 -0
- package/dist/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.d.ts.map +1 -0
- package/dist/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.js +251 -0
- package/dist/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.js.map +1 -0
- package/dist/runtime-v2/diagnostician/__tests__/rootcause-prompt-builder.test.js +73 -0
- package/dist/runtime-v2/diagnostician/__tests__/rootcause-prompt-builder.test.js.map +1 -1
- package/dist/runtime-v2/diagnostician/diag-rootcause-output.d.ts +90 -0
- package/dist/runtime-v2/diagnostician/diag-rootcause-output.d.ts.map +1 -1
- package/dist/runtime-v2/diagnostician/diag-rootcause-output.js +108 -0
- package/dist/runtime-v2/diagnostician/diag-rootcause-output.js.map +1 -1
- package/dist/runtime-v2/diagnostician/rootcause-prompt-builder.d.ts +8 -0
- package/dist/runtime-v2/diagnostician/rootcause-prompt-builder.d.ts.map +1 -1
- package/dist/runtime-v2/diagnostician/rootcause-prompt-builder.js +66 -3
- package/dist/runtime-v2/diagnostician/rootcause-prompt-builder.js.map +1 -1
- package/dist/runtime-v2/diagnostician-output.d.ts +23 -0
- package/dist/runtime-v2/diagnostician-output.d.ts.map +1 -1
- package/dist/runtime-v2/diagnostician-output.js +16 -0
- package/dist/runtime-v2/diagnostician-output.js.map +1 -1
- package/dist/runtime-v2/diagnostician-prompt-builder.d.ts +32 -0
- package/dist/runtime-v2/diagnostician-prompt-builder.d.ts.map +1 -1
- package/dist/runtime-v2/diagnostician-prompt-builder.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 +5 -3
- package/dist/runtime-v2/index.d.ts.map +1 -1
- package/dist/runtime-v2/index.js +8 -4
- package/dist/runtime-v2/index.js.map +1 -1
- 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-doc-reader-port.d.ts +95 -0
- package/dist/runtime-v2/intent/intent-doc-reader-port.d.ts.map +1 -0
- package/dist/runtime-v2/intent/intent-doc-reader-port.js +43 -0
- package/dist/runtime-v2/intent/intent-doc-reader-port.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/__fixtures__/intent-tension-cases.d.ts +54 -0
- package/dist/runtime-v2/internalization/__tests__/__fixtures__/intent-tension-cases.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/__fixtures__/intent-tension-cases.js +219 -0
- package/dist/runtime-v2/internalization/__tests__/__fixtures__/intent-tension-cases.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/diag-rootcause-intent-tension.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/diag-rootcause-intent-tension.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/diag-rootcause-intent-tension.test.js +360 -0
- package/dist/runtime-v2/internalization/__tests__/diag-rootcause-intent-tension.test.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/diag-router-intent-tension.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/diag-router-intent-tension.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/diag-router-intent-tension.test.js +333 -0
- package/dist/runtime-v2/internalization/__tests__/diag-router-intent-tension.test.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/intent-tension-cases.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/intent-tension-cases.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/intent-tension-cases.test.js +113 -0
- package/dist/runtime-v2/internalization/__tests__/intent-tension-cases.test.js.map +1 -0
- package/dist/runtime-v2/internalization/diag-rootcause-runner.d.ts +13 -0
- package/dist/runtime-v2/internalization/diag-rootcause-runner.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/diag-rootcause-runner.js +42 -0
- package/dist/runtime-v2/internalization/diag-rootcause-runner.js.map +1 -1
- package/dist/runtime-v2/internalization/diag-router-runner.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/diag-router-runner.js +27 -0
- package/dist/runtime-v2/internalization/diag-router-runner.js.map +1 -1
- package/dist/runtime-v2/pain-signal-runtime-factory.d.ts +12 -0
- package/dist/runtime-v2/pain-signal-runtime-factory.d.ts.map +1 -1
- package/dist/runtime-v2/pain-signal-runtime-factory.js +1 -1
- package/dist/runtime-v2/pain-signal-runtime-factory.js.map +1 -1
- package/dist/runtime-v2/pain-to-principle-service.d.ts +6 -0
- package/dist/runtime-v2/pain-to-principle-service.d.ts.map +1 -1
- package/dist/runtime-v2/pain-to-principle-service.js +2 -0
- package/dist/runtime-v2/pain-to-principle-service.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
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRI-468 — IntentTensionSchema unit tests (SPEC §23.3).
|
|
3
|
+
*
|
|
4
|
+
* Validates the TypeBox schema for the optional `intentTension` field added
|
|
5
|
+
* to DiagRootCauseOutputV1Schema. The schema must:
|
|
6
|
+
* - accept all four `source` enum values (SPEC §16.5)
|
|
7
|
+
* - accept all three `evidenceStrength` values
|
|
8
|
+
* - accept all five `relatedIntentFields` values
|
|
9
|
+
* - accept all six `suggestedOwnerAction` values (SPEC §21)
|
|
10
|
+
* - cap `evidence` at 3 items (SPEC §16.4)
|
|
11
|
+
* - reject `confidence` (SPEC §16.3 — intentTension.confidence is forbidden;
|
|
12
|
+
* existing rootCause-level confidence is untouched)
|
|
13
|
+
* - treat `intentDocHash` as optional (SPEC §16.2)
|
|
14
|
+
*
|
|
15
|
+
* TDD: this test is written BEFORE the schema exists. Run to confirm RED.
|
|
16
|
+
*/
|
|
17
|
+
import { describe, it, expect } from 'vitest';
|
|
18
|
+
import { Value } from '@sinclair/typebox/value';
|
|
19
|
+
import { IntentTensionSchema, IntentTensionSourceSchema, EvidenceStrengthSchema, IntentRelatedFieldSchema, SuggestedOwnerActionSchema, } from '../diag-rootcause-output.js';
|
|
20
|
+
// ── Fixtures ─────────────────────────────────────────────────────────────────
|
|
21
|
+
const validIntentTension = {
|
|
22
|
+
source: 'action_drift',
|
|
23
|
+
evidenceStrength: 'moderate',
|
|
24
|
+
relatedIntentFields: ['current_strategic_focus', 'non_negotiables'],
|
|
25
|
+
evidence: [
|
|
26
|
+
'INTENT says current focus is validating the smallest Pain → Principle loop.',
|
|
27
|
+
'Agent designed a heavy dashboard.',
|
|
28
|
+
'Owner correction says the result increased review burden.',
|
|
29
|
+
],
|
|
30
|
+
explanation: 'The work may be useful later, but it optimized presentation completeness before validating the current learning loop.',
|
|
31
|
+
suggestedOwnerAction: 'confirm_drift',
|
|
32
|
+
intentDocHash: 'sha256:abc123',
|
|
33
|
+
};
|
|
34
|
+
// ── Schema existence ─────────────────────────────────────────────────────────
|
|
35
|
+
describe('IntentTensionSchema — existence', () => {
|
|
36
|
+
it('exports IntentTensionSchema', () => {
|
|
37
|
+
expect(IntentTensionSchema).toBeDefined();
|
|
38
|
+
});
|
|
39
|
+
it('exports sub-literal schemas', () => {
|
|
40
|
+
expect(IntentTensionSourceSchema).toBeDefined();
|
|
41
|
+
expect(EvidenceStrengthSchema).toBeDefined();
|
|
42
|
+
expect(IntentRelatedFieldSchema).toBeDefined();
|
|
43
|
+
expect(SuggestedOwnerActionSchema).toBeDefined();
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
// ── §23.3.1 — source enum validity ──────────────────────────────────────────
|
|
47
|
+
describe('IntentTensionSchema — source enum (SPEC §16.5)', () => {
|
|
48
|
+
const SOURCES = ['none', 'action_drift', 'intent_suspect', 'healthy_tension'];
|
|
49
|
+
for (const source of SOURCES) {
|
|
50
|
+
it(`accepts source="${source}"`, () => {
|
|
51
|
+
const obj = { ...validIntentTension, source };
|
|
52
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(true);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
it('rejects unknown source value', () => {
|
|
56
|
+
const obj = { ...validIntentTension, source: 'definitely_drift' };
|
|
57
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(false);
|
|
58
|
+
});
|
|
59
|
+
it('rejects missing source', () => {
|
|
60
|
+
const { source: _source, ...obj } = validIntentTension;
|
|
61
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(false);
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
// ── §23.3.2 — evidenceStrength enum validity ────────────────────────────────
|
|
65
|
+
describe('IntentTensionSchema — evidenceStrength enum', () => {
|
|
66
|
+
const STRENGTHS = ['weak', 'moderate', 'strong'];
|
|
67
|
+
for (const evidenceStrength of STRENGTHS) {
|
|
68
|
+
it(`accepts evidenceStrength="${evidenceStrength}"`, () => {
|
|
69
|
+
const obj = { ...validIntentTension, evidenceStrength };
|
|
70
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(true);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
it('rejects unknown evidenceStrength value', () => {
|
|
74
|
+
const obj = { ...validIntentTension, evidenceStrength: 'very_strong' };
|
|
75
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(false);
|
|
76
|
+
});
|
|
77
|
+
it('rejects numeric evidenceStrength', () => {
|
|
78
|
+
const obj = { ...validIntentTension, evidenceStrength: 0.8 };
|
|
79
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(false);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
// ── §23.3.3 — relatedIntentFields enum validity ─────────────────────────────
|
|
83
|
+
describe('IntentTensionSchema — relatedIntentFields enum', () => {
|
|
84
|
+
const FIELDS = [
|
|
85
|
+
'why',
|
|
86
|
+
'desired_outcome',
|
|
87
|
+
'non_negotiables',
|
|
88
|
+
'stop_escalation',
|
|
89
|
+
'current_strategic_focus',
|
|
90
|
+
];
|
|
91
|
+
for (const field of FIELDS) {
|
|
92
|
+
it(`accepts relatedIntentFields=["${field}"]`, () => {
|
|
93
|
+
const obj = { ...validIntentTension, relatedIntentFields: [field] };
|
|
94
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(true);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
it('accepts multiple relatedIntentFields', () => {
|
|
98
|
+
const obj = { ...validIntentTension, relatedIntentFields: [...FIELDS] };
|
|
99
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(true);
|
|
100
|
+
});
|
|
101
|
+
it('accepts empty relatedIntentFields array', () => {
|
|
102
|
+
const obj = { ...validIntentTension, relatedIntentFields: [] };
|
|
103
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(true);
|
|
104
|
+
});
|
|
105
|
+
it('rejects unknown relatedIntentFields value', () => {
|
|
106
|
+
const obj = { ...validIntentTension, relatedIntentFields: ['unknown_field'] };
|
|
107
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(false);
|
|
108
|
+
});
|
|
109
|
+
it('rejects non-array relatedIntentFields', () => {
|
|
110
|
+
const obj = { ...validIntentTension, relatedIntentFields: 'current_strategic_focus' };
|
|
111
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(false);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
// ── §23.3.4 — suggestedOwnerAction enum validity ────────────────────────────
|
|
115
|
+
describe('IntentTensionSchema — suggestedOwnerAction enum (SPEC §21)', () => {
|
|
116
|
+
const ACTIONS = [
|
|
117
|
+
'confirm_drift',
|
|
118
|
+
'revise_intent',
|
|
119
|
+
'observe',
|
|
120
|
+
'dismiss',
|
|
121
|
+
'promote_to_principle',
|
|
122
|
+
'promote_to_rulehost',
|
|
123
|
+
];
|
|
124
|
+
for (const suggestedOwnerAction of ACTIONS) {
|
|
125
|
+
it(`accepts suggestedOwnerAction="${suggestedOwnerAction}"`, () => {
|
|
126
|
+
const obj = { ...validIntentTension, suggestedOwnerAction };
|
|
127
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(true);
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
it('rejects unknown suggestedOwnerAction value', () => {
|
|
131
|
+
const obj = { ...validIntentTension, suggestedOwnerAction: 'ignore' };
|
|
132
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(false);
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
// ── §23.3.5 — evidence max 3 items (SPEC §16.4) ─────────────────────────────
|
|
136
|
+
describe('IntentTensionSchema — evidence maxItems: 3 (SPEC §16.4)', () => {
|
|
137
|
+
it('accepts evidence with 0 items', () => {
|
|
138
|
+
const obj = { ...validIntentTension, evidence: [] };
|
|
139
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(true);
|
|
140
|
+
});
|
|
141
|
+
it('accepts evidence with 1 item', () => {
|
|
142
|
+
const obj = { ...validIntentTension, evidence: ['one'] };
|
|
143
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(true);
|
|
144
|
+
});
|
|
145
|
+
it('accepts evidence with exactly 3 items', () => {
|
|
146
|
+
const obj = { ...validIntentTension, evidence: ['one', 'two', 'three'] };
|
|
147
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(true);
|
|
148
|
+
});
|
|
149
|
+
it('rejects evidence with 4 items', () => {
|
|
150
|
+
const obj = { ...validIntentTension, evidence: ['one', 'two', 'three', 'four'] };
|
|
151
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(false);
|
|
152
|
+
});
|
|
153
|
+
it('rejects evidence with 10 items', () => {
|
|
154
|
+
const obj = { ...validIntentTension, evidence: Array.from({ length: 10 }, (_, i) => `evidence-${i}`) };
|
|
155
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(false);
|
|
156
|
+
});
|
|
157
|
+
it('rejects non-array evidence', () => {
|
|
158
|
+
const obj = { ...validIntentTension, evidence: 'single string' };
|
|
159
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(false);
|
|
160
|
+
});
|
|
161
|
+
it('rejects evidence array with non-string elements', () => {
|
|
162
|
+
const obj = { ...validIntentTension, evidence: ['ok', 42, 'bad'] };
|
|
163
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(false);
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
// ── §23.3.6 — confidence is rejected (SPEC §16.3) ───────────────────────────
|
|
167
|
+
describe('IntentTensionSchema — confidence forbidden (SPEC §16.3)', () => {
|
|
168
|
+
it('rejects intentTension.confidence: number', () => {
|
|
169
|
+
const obj = { ...validIntentTension, confidence: 0.8 };
|
|
170
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(false);
|
|
171
|
+
});
|
|
172
|
+
it('rejects intentTension.confidence: 0', () => {
|
|
173
|
+
const obj = { ...validIntentTension, confidence: 0 };
|
|
174
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(false);
|
|
175
|
+
});
|
|
176
|
+
it('rejects intentTension.confidence: 1', () => {
|
|
177
|
+
const obj = { ...validIntentTension, confidence: 1 };
|
|
178
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(false);
|
|
179
|
+
});
|
|
180
|
+
it('Value.Clean strips confidence from intentTension', () => {
|
|
181
|
+
const obj = { ...validIntentTension, confidence: 0.8 };
|
|
182
|
+
const cleaned = Value.Clean(IntentTensionSchema, obj);
|
|
183
|
+
expect(Object.hasOwn(cleaned, 'confidence')).toBe(false);
|
|
184
|
+
});
|
|
185
|
+
it('Value.Errors reports confidence as additional property', () => {
|
|
186
|
+
const obj = { ...validIntentTension, confidence: 0.8 };
|
|
187
|
+
const errors = [...Value.Errors(IntentTensionSchema, obj)];
|
|
188
|
+
expect(errors.some((e) => e.path.includes('confidence') || e.message.includes('Additional'))).toBe(true);
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
// ── §23.3.7 — intentDocHash is optional (SPEC §16.2) ────────────────────────
|
|
192
|
+
describe('IntentTensionSchema — intentDocHash optional', () => {
|
|
193
|
+
it('accepts intentTension with intentDocHash', () => {
|
|
194
|
+
const obj = { ...validIntentTension, intentDocHash: 'sha256:abc123' };
|
|
195
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(true);
|
|
196
|
+
});
|
|
197
|
+
it('accepts intentTension without intentDocHash', () => {
|
|
198
|
+
const { intentDocHash: _hash, ...obj } = validIntentTension;
|
|
199
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(true);
|
|
200
|
+
});
|
|
201
|
+
it('accepts intentTension with empty intentDocHash', () => {
|
|
202
|
+
const obj = { ...validIntentTension, intentDocHash: '' };
|
|
203
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(true);
|
|
204
|
+
});
|
|
205
|
+
it('rejects non-string intentDocHash', () => {
|
|
206
|
+
const obj = { ...validIntentTension, intentDocHash: 123 };
|
|
207
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(false);
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
// ── §16.4 — explanation is required non-empty string ────────────────────────
|
|
211
|
+
describe('IntentTensionSchema — explanation required', () => {
|
|
212
|
+
it('rejects missing explanation', () => {
|
|
213
|
+
const { explanation: _exp, ...obj } = validIntentTension;
|
|
214
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(false);
|
|
215
|
+
});
|
|
216
|
+
it('rejects non-string explanation', () => {
|
|
217
|
+
const obj = { ...validIntentTension, explanation: 42 };
|
|
218
|
+
expect(Value.Check(IntentTensionSchema, obj)).toBe(false);
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
// ── Full valid object ────────────────────────────────────────────────────────
|
|
222
|
+
describe('IntentTensionSchema — full valid object', () => {
|
|
223
|
+
it('accepts the canonical valid intentTension', () => {
|
|
224
|
+
expect(Value.Check(IntentTensionSchema, validIntentTension)).toBe(true);
|
|
225
|
+
});
|
|
226
|
+
it('Value.Clean returns a clean object with all valid fields', () => {
|
|
227
|
+
const withExtra = { ...validIntentTension, extraField: 'should be removed' };
|
|
228
|
+
const cleaned = Value.Clean(IntentTensionSchema, withExtra);
|
|
229
|
+
expect(Object.hasOwn(cleaned, 'extraField')).toBe(false);
|
|
230
|
+
expect(Object.hasOwn(cleaned, 'source')).toBe(true);
|
|
231
|
+
expect(Object.hasOwn(cleaned, 'evidenceStrength')).toBe(true);
|
|
232
|
+
expect(Object.hasOwn(cleaned, 'relatedIntentFields')).toBe(true);
|
|
233
|
+
expect(Object.hasOwn(cleaned, 'evidence')).toBe(true);
|
|
234
|
+
expect(Object.hasOwn(cleaned, 'explanation')).toBe(true);
|
|
235
|
+
expect(Object.hasOwn(cleaned, 'suggestedOwnerAction')).toBe(true);
|
|
236
|
+
expect(Object.hasOwn(cleaned, 'intentDocHash')).toBe(true);
|
|
237
|
+
});
|
|
238
|
+
it('rejects empty object', () => {
|
|
239
|
+
expect(Value.Check(IntentTensionSchema, {})).toBe(false);
|
|
240
|
+
});
|
|
241
|
+
it('rejects null', () => {
|
|
242
|
+
expect(Value.Check(IntentTensionSchema, null)).toBe(false);
|
|
243
|
+
});
|
|
244
|
+
it('rejects array', () => {
|
|
245
|
+
expect(Value.Check(IntentTensionSchema, [])).toBe(false);
|
|
246
|
+
});
|
|
247
|
+
it('rejects string', () => {
|
|
248
|
+
expect(Value.Check(IntentTensionSchema, 'not an object')).toBe(false);
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
//# sourceMappingURL=intent-tension-schema.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent-tension-schema.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,4 +31,77 @@ describe('RootCausePromptBuilder', () => {
|
|
|
31
31
|
expect(phase35Index).toBeGreaterThan(phase3Index);
|
|
32
32
|
});
|
|
33
33
|
});
|
|
34
|
+
// ── PRI-468: PHASE 3.6 — Intent Tension Check ───────────────────────────────
|
|
35
|
+
describe('RootCausePromptBuilder — PHASE 3.6 Intent Tension Check (PRI-468)', () => {
|
|
36
|
+
it('intentGrounding=false does NOT include PHASE 3.6', () => {
|
|
37
|
+
const instruction = buildRootCauseProtocolInstruction({
|
|
38
|
+
coreGrounding: false,
|
|
39
|
+
intentGrounding: false,
|
|
40
|
+
});
|
|
41
|
+
expect(instruction).not.toContain('PHASE 3.6');
|
|
42
|
+
expect(instruction).not.toContain('Intent Tension Check');
|
|
43
|
+
});
|
|
44
|
+
it('intentGrounding=undefined does NOT include PHASE 3.6 (default off)', () => {
|
|
45
|
+
const instruction = buildRootCauseProtocolInstruction({ coreGrounding: false });
|
|
46
|
+
expect(instruction).not.toContain('PHASE 3.6');
|
|
47
|
+
});
|
|
48
|
+
it('intentGrounding=true injects PHASE 3.6', () => {
|
|
49
|
+
const instruction = buildRootCauseProtocolInstruction({
|
|
50
|
+
coreGrounding: false,
|
|
51
|
+
intentGrounding: true,
|
|
52
|
+
});
|
|
53
|
+
expect(instruction).toContain('PHASE 3.6');
|
|
54
|
+
expect(instruction).toContain('Intent Tension Check');
|
|
55
|
+
});
|
|
56
|
+
it('PHASE 3.6 contains SPEC §17 required text', () => {
|
|
57
|
+
const instruction = buildRootCauseProtocolInstruction({
|
|
58
|
+
coreGrounding: false,
|
|
59
|
+
intentGrounding: true,
|
|
60
|
+
});
|
|
61
|
+
expect(instruction).toContain('Owner-owned INTENT.md');
|
|
62
|
+
expect(instruction).toContain('Do not assume every failure is intent drift');
|
|
63
|
+
expect(instruction).toContain('Do not treat INTENT.md as a hard rule system');
|
|
64
|
+
expect(instruction).toContain("source='none'");
|
|
65
|
+
expect(instruction).toContain("evidenceStrength='weak'");
|
|
66
|
+
expect(instruction).toContain('intent_suspect');
|
|
67
|
+
expect(instruction).toContain('Return intentTension as an optional additive field');
|
|
68
|
+
expect(instruction).toContain('PD surfaces tension');
|
|
69
|
+
expect(instruction).toContain('Owner decides value');
|
|
70
|
+
});
|
|
71
|
+
it('PHASE 3.6 appears after PHASE 3.5 when both are enabled', () => {
|
|
72
|
+
const instruction = buildRootCauseProtocolInstruction({
|
|
73
|
+
coreGrounding: true,
|
|
74
|
+
intentGrounding: true,
|
|
75
|
+
});
|
|
76
|
+
const phase35Index = instruction.indexOf('PHASE 3.5');
|
|
77
|
+
const phase36Index = instruction.indexOf('PHASE 3.6');
|
|
78
|
+
expect(phase36Index).toBeGreaterThan(phase35Index);
|
|
79
|
+
});
|
|
80
|
+
it('PHASE 3.6 appears after PHASE 3 when only 3.6 is enabled', () => {
|
|
81
|
+
const instruction = buildRootCauseProtocolInstruction({
|
|
82
|
+
coreGrounding: false,
|
|
83
|
+
intentGrounding: true,
|
|
84
|
+
});
|
|
85
|
+
const phase3Index = instruction.indexOf('PHASE 3 —');
|
|
86
|
+
const phase36Index = instruction.indexOf('PHASE 3.6');
|
|
87
|
+
expect(phase36Index).toBeGreaterThan(phase3Index);
|
|
88
|
+
});
|
|
89
|
+
// EP-03: no silent fallback — byte-identical output when flag off
|
|
90
|
+
it('intentGrounding=false produces byte-identical output to pre-change prompt', () => {
|
|
91
|
+
const before = buildRootCauseProtocolInstruction({ coreGrounding: false });
|
|
92
|
+
const after = buildRootCauseProtocolInstruction({
|
|
93
|
+
coreGrounding: false,
|
|
94
|
+
intentGrounding: false,
|
|
95
|
+
});
|
|
96
|
+
expect(after).toBe(before);
|
|
97
|
+
});
|
|
98
|
+
it('intentGrounding=false + coreGrounding=true produces byte-identical output to coreGrounding-only', () => {
|
|
99
|
+
const before = buildRootCauseProtocolInstruction({ coreGrounding: true });
|
|
100
|
+
const after = buildRootCauseProtocolInstruction({
|
|
101
|
+
coreGrounding: true,
|
|
102
|
+
intentGrounding: false,
|
|
103
|
+
});
|
|
104
|
+
expect(after).toBe(before);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
34
107
|
//# sourceMappingURL=rootcause-prompt-builder.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rootcause-prompt-builder.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/diagnostician/__tests__/rootcause-prompt-builder.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,iCAAiC,EAAE,MAAM,gCAAgC,CAAC;AAEnF,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,sFAAsF,EAAE,GAAG,EAAE;QAC9F,MAAM,WAAW,GAAG,iCAAiC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,WAAW,GAAG,iCAAiC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC7C,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC7C,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,WAAW,GAAG,iCAAiC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/E,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,WAAW,GAAG,iCAAiC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,WAAW,GAAG,iCAAiC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/E,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACtD,oCAAoC;QACpC,MAAM,CAAC,YAAY,CAAC,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"rootcause-prompt-builder.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/diagnostician/__tests__/rootcause-prompt-builder.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,6 +43,78 @@ export declare const DiagRootCauseEvidenceSchema: import("@sinclair/typebox").TO
|
|
|
43
43
|
}>;
|
|
44
44
|
/** Evidence entry linking a source reference to an explanatory note. */
|
|
45
45
|
export type DiagRootCauseEvidence = Static<typeof DiagRootCauseEvidenceSchema>;
|
|
46
|
+
/**
|
|
47
|
+
* Intent tension source enum (SPEC §16.5).
|
|
48
|
+
*
|
|
49
|
+
* - `none` — no tension detected
|
|
50
|
+
* - `action_drift` — Agent's action appears to drift from INTENT
|
|
51
|
+
* - `intent_suspect` — INTENT itself may be stale, ambiguous, or contradictory
|
|
52
|
+
* - `healthy_tension` — genuine strategic trade-off, no drift
|
|
53
|
+
*/
|
|
54
|
+
export declare const IntentTensionSourceSchema: 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">]>;
|
|
55
|
+
/** Intent tension source: none | action_drift | intent_suspect | healthy_tension */
|
|
56
|
+
export type IntentTensionSource = Static<typeof IntentTensionSourceSchema>;
|
|
57
|
+
/**
|
|
58
|
+
* Evidence strength enum (SPEC §16.6).
|
|
59
|
+
*
|
|
60
|
+
* Coarse three-level scale; intentionally NOT a numeric confidence
|
|
61
|
+
* (SPEC §16.3 forbids `intentTension.confidence`).
|
|
62
|
+
*/
|
|
63
|
+
export declare const EvidenceStrengthSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"weak">, import("@sinclair/typebox").TLiteral<"moderate">, import("@sinclair/typebox").TLiteral<"strong">]>;
|
|
64
|
+
/** Evidence strength: weak | moderate | strong */
|
|
65
|
+
export type EvidenceStrength = Static<typeof EvidenceStrengthSchema>;
|
|
66
|
+
/**
|
|
67
|
+
* Related INTENT.md field enum (SPEC §16.7).
|
|
68
|
+
*
|
|
69
|
+
* Snake_case keys mirror the INTENT.md section identifiers used in the
|
|
70
|
+
* prompt block. The LLM picks one or more fields that the tension
|
|
71
|
+
* relates to.
|
|
72
|
+
*/
|
|
73
|
+
export declare const IntentRelatedFieldSchema: 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">]>;
|
|
74
|
+
/** Related INTENT field: why | desired_outcome | non_negotiables | stop_escalation | current_strategic_focus */
|
|
75
|
+
export type IntentRelatedField = Static<typeof IntentRelatedFieldSchema>;
|
|
76
|
+
/**
|
|
77
|
+
* Suggested Owner action enum (SPEC §21).
|
|
78
|
+
*
|
|
79
|
+
* PD surfaces tension; the Owner decides value. This field is a
|
|
80
|
+
* SUGGESTION — never auto-applied. The Owner must record a
|
|
81
|
+
* IntentDecisionRecord (PRI-470) before any follow-up action executes.
|
|
82
|
+
*/
|
|
83
|
+
export declare const SuggestedOwnerActionSchema: 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">]>;
|
|
84
|
+
/** Suggested Owner action: confirm_drift | revise_intent | observe | dismiss | promote_to_principle | promote_to_rulehost */
|
|
85
|
+
export type SuggestedOwnerAction = Static<typeof SuggestedOwnerActionSchema>;
|
|
86
|
+
/**
|
|
87
|
+
* IntentTension schema (SPEC §16.2).
|
|
88
|
+
*
|
|
89
|
+
* Optional object produced by Stage A when the Agent detects a tension
|
|
90
|
+
* between its action and the Owner-authored INTENT.md.
|
|
91
|
+
*
|
|
92
|
+
* CRITICAL (SPEC §16.3): this object MUST NOT carry a `confidence`
|
|
93
|
+
* field. The Stage A `confidence` (rootCause-level) is the only
|
|
94
|
+
* diagnostician confidence. To enforce this, `additionalProperties: false`
|
|
95
|
+
* is set so any extra property (including `confidence`) is rejected by
|
|
96
|
+
* `Value.Check`.
|
|
97
|
+
*
|
|
98
|
+
* Lineage (SPEC §16.2): `intentDocHash` is optional but, when present,
|
|
99
|
+
* MUST match the hash of the INTENT.md that was injected into the
|
|
100
|
+
* prompt. The Stage A runner enforces this invariant (PRI-468).
|
|
101
|
+
*/
|
|
102
|
+
export declare const IntentTensionSchema: import("@sinclair/typebox").TObject<{
|
|
103
|
+
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">]>;
|
|
104
|
+
evidenceStrength: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"weak">, import("@sinclair/typebox").TLiteral<"moderate">, import("@sinclair/typebox").TLiteral<"strong">]>;
|
|
105
|
+
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">]>>;
|
|
106
|
+
evidence: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
|
|
107
|
+
explanation: import("@sinclair/typebox").TString;
|
|
108
|
+
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">]>;
|
|
109
|
+
intentDocHash: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
110
|
+
}>;
|
|
111
|
+
/**
|
|
112
|
+
* IntentTension — optional Stage A output describing a tension between
|
|
113
|
+
* the Agent's action and the Owner-authored INTENT.md.
|
|
114
|
+
*
|
|
115
|
+
* `confidence` is forbidden on this object (SPEC §16.3).
|
|
116
|
+
*/
|
|
117
|
+
export type IntentTension = Static<typeof IntentTensionSchema>;
|
|
46
118
|
/**
|
|
47
119
|
* TypeBox schema for the Root Cause stage (Stage A) output.
|
|
48
120
|
*
|
|
@@ -70,6 +142,24 @@ export declare const DiagRootCauseOutputV1Schema: import("@sinclair/typebox").TO
|
|
|
70
142
|
}>>;
|
|
71
143
|
confidence: import("@sinclair/typebox").TNumber;
|
|
72
144
|
ambiguityNotes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
|
|
145
|
+
/**
|
|
146
|
+
* Optional intent tension (PRI-468, SPEC §16). Present only when:
|
|
147
|
+
* 1. The `intent_engineering` flag is on, AND
|
|
148
|
+
* 2. The Stage A prompt was built with the INTENT context injected, AND
|
|
149
|
+
* 3. The LLM chose to emit a tension.
|
|
150
|
+
*
|
|
151
|
+
* When absent (flag off or LLM omitted), Stage C passthrough must NOT
|
|
152
|
+
* synthesize one (SPEC §18 — additive only, never generates).
|
|
153
|
+
*/
|
|
154
|
+
intentTension: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
155
|
+
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">]>;
|
|
156
|
+
evidenceStrength: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"weak">, import("@sinclair/typebox").TLiteral<"moderate">, import("@sinclair/typebox").TLiteral<"strong">]>;
|
|
157
|
+
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">]>>;
|
|
158
|
+
evidence: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
|
|
159
|
+
explanation: import("@sinclair/typebox").TString;
|
|
160
|
+
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">]>;
|
|
161
|
+
intentDocHash: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
162
|
+
}>>;
|
|
73
163
|
}>;
|
|
74
164
|
/** Typed output of the Root Cause stage (Stage A). */
|
|
75
165
|
export type DiagRootCauseOutputV1 = Static<typeof DiagRootCauseOutputV1Schema>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diag-rootcause-output.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/diagnostician/diag-rootcause-output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAKtD;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,2OAKlC,CAAC;AAEH,kEAAkE;AAClE,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAEvE;;;;GAIG;AACH,eAAO,MAAM,sBAAsB;;;;EAIjC,CAAC;AAEH,iDAAiD;AACjD,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAErE;;GAEG;AACH,eAAO,MAAM,2BAA2B;;;EAGtC,CAAC;AAEH,wEAAwE;AACxE,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAI/E;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"diag-rootcause-output.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/diagnostician/diag-rootcause-output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAKtD;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,2OAKlC,CAAC;AAEH,kEAAkE;AAClE,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAEvE;;;;GAIG;AACH,eAAO,MAAM,sBAAsB;;;;EAIjC,CAAC;AAEH,iDAAiD;AACjD,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAErE;;GAEG;AACH,eAAO,MAAM,2BAA2B;;;EAGtC,CAAC;AAEH,wEAAwE;AACxE,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAI/E;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB,2PAKpC,CAAC;AAEH,oFAAoF;AACpF,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE3E;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,sLAIjC,CAAC;AAEH,kDAAkD;AAClD,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAErE;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,+TAMnC,CAAC;AAEH,gHAAgH;AAChH,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAEzE;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,iXAOrC,CAAC;AAEH,6HAA6H;AAC7H,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE7E;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;EAQG,CAAC;AAEpC;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAI/D;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;IActC;;;;;;;;OAQG;;;;;;;;;;EAEH,CAAC;AAEH,sDAAsD;AACtD,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAM/E;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CACvI;AAED;;;;;;;;;;GAUG;AACH,qBAAa,6BAA8B,YAAW,sBAAsB;IAEpE,QAAQ,CACZ,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CA6H9F"}
|
|
@@ -44,6 +44,86 @@ export const DiagRootCauseEvidenceSchema = Type.Object({
|
|
|
44
44
|
sourceRef: Type.String({ minLength: 1 }),
|
|
45
45
|
note: Type.String({ minLength: 1 }),
|
|
46
46
|
});
|
|
47
|
+
// ── Intent Tension sub-schemas (PRI-468, SPEC §16) ──────────────────────────
|
|
48
|
+
/**
|
|
49
|
+
* Intent tension source enum (SPEC §16.5).
|
|
50
|
+
*
|
|
51
|
+
* - `none` — no tension detected
|
|
52
|
+
* - `action_drift` — Agent's action appears to drift from INTENT
|
|
53
|
+
* - `intent_suspect` — INTENT itself may be stale, ambiguous, or contradictory
|
|
54
|
+
* - `healthy_tension` — genuine strategic trade-off, no drift
|
|
55
|
+
*/
|
|
56
|
+
export const IntentTensionSourceSchema = Type.Union([
|
|
57
|
+
Type.Literal('none'),
|
|
58
|
+
Type.Literal('action_drift'),
|
|
59
|
+
Type.Literal('intent_suspect'),
|
|
60
|
+
Type.Literal('healthy_tension'),
|
|
61
|
+
]);
|
|
62
|
+
/**
|
|
63
|
+
* Evidence strength enum (SPEC §16.6).
|
|
64
|
+
*
|
|
65
|
+
* Coarse three-level scale; intentionally NOT a numeric confidence
|
|
66
|
+
* (SPEC §16.3 forbids `intentTension.confidence`).
|
|
67
|
+
*/
|
|
68
|
+
export const EvidenceStrengthSchema = Type.Union([
|
|
69
|
+
Type.Literal('weak'),
|
|
70
|
+
Type.Literal('moderate'),
|
|
71
|
+
Type.Literal('strong'),
|
|
72
|
+
]);
|
|
73
|
+
/**
|
|
74
|
+
* Related INTENT.md field enum (SPEC §16.7).
|
|
75
|
+
*
|
|
76
|
+
* Snake_case keys mirror the INTENT.md section identifiers used in the
|
|
77
|
+
* prompt block. The LLM picks one or more fields that the tension
|
|
78
|
+
* relates to.
|
|
79
|
+
*/
|
|
80
|
+
export const IntentRelatedFieldSchema = Type.Union([
|
|
81
|
+
Type.Literal('why'),
|
|
82
|
+
Type.Literal('desired_outcome'),
|
|
83
|
+
Type.Literal('non_negotiables'),
|
|
84
|
+
Type.Literal('stop_escalation'),
|
|
85
|
+
Type.Literal('current_strategic_focus'),
|
|
86
|
+
]);
|
|
87
|
+
/**
|
|
88
|
+
* Suggested Owner action enum (SPEC §21).
|
|
89
|
+
*
|
|
90
|
+
* PD surfaces tension; the Owner decides value. This field is a
|
|
91
|
+
* SUGGESTION — never auto-applied. The Owner must record a
|
|
92
|
+
* IntentDecisionRecord (PRI-470) before any follow-up action executes.
|
|
93
|
+
*/
|
|
94
|
+
export const SuggestedOwnerActionSchema = Type.Union([
|
|
95
|
+
Type.Literal('confirm_drift'),
|
|
96
|
+
Type.Literal('revise_intent'),
|
|
97
|
+
Type.Literal('observe'),
|
|
98
|
+
Type.Literal('dismiss'),
|
|
99
|
+
Type.Literal('promote_to_principle'),
|
|
100
|
+
Type.Literal('promote_to_rulehost'),
|
|
101
|
+
]);
|
|
102
|
+
/**
|
|
103
|
+
* IntentTension schema (SPEC §16.2).
|
|
104
|
+
*
|
|
105
|
+
* Optional object produced by Stage A when the Agent detects a tension
|
|
106
|
+
* between its action and the Owner-authored INTENT.md.
|
|
107
|
+
*
|
|
108
|
+
* CRITICAL (SPEC §16.3): this object MUST NOT carry a `confidence`
|
|
109
|
+
* field. The Stage A `confidence` (rootCause-level) is the only
|
|
110
|
+
* diagnostician confidence. To enforce this, `additionalProperties: false`
|
|
111
|
+
* is set so any extra property (including `confidence`) is rejected by
|
|
112
|
+
* `Value.Check`.
|
|
113
|
+
*
|
|
114
|
+
* Lineage (SPEC §16.2): `intentDocHash` is optional but, when present,
|
|
115
|
+
* MUST match the hash of the INTENT.md that was injected into the
|
|
116
|
+
* prompt. The Stage A runner enforces this invariant (PRI-468).
|
|
117
|
+
*/
|
|
118
|
+
export const IntentTensionSchema = Type.Object({
|
|
119
|
+
source: IntentTensionSourceSchema,
|
|
120
|
+
evidenceStrength: EvidenceStrengthSchema,
|
|
121
|
+
relatedIntentFields: Type.Array(IntentRelatedFieldSchema),
|
|
122
|
+
evidence: Type.Array(Type.String(), { maxItems: 3 }),
|
|
123
|
+
explanation: Type.String({ minLength: 1 }),
|
|
124
|
+
suggestedOwnerAction: SuggestedOwnerActionSchema,
|
|
125
|
+
intentDocHash: Type.Optional(Type.String()),
|
|
126
|
+
}, { additionalProperties: false });
|
|
47
127
|
// ── Main output schema ───────────────────────────────────────────────────────
|
|
48
128
|
/**
|
|
49
129
|
* TypeBox schema for the Root Cause stage (Stage A) output.
|
|
@@ -68,6 +148,16 @@ export const DiagRootCauseOutputV1Schema = Type.Object({
|
|
|
68
148
|
evidence: Type.Array(DiagRootCauseEvidenceSchema),
|
|
69
149
|
confidence: Type.Number({ minimum: 0, maximum: 1 }),
|
|
70
150
|
ambiguityNotes: Type.Optional(Type.Array(Type.String())),
|
|
151
|
+
/**
|
|
152
|
+
* Optional intent tension (PRI-468, SPEC §16). Present only when:
|
|
153
|
+
* 1. The `intent_engineering` flag is on, AND
|
|
154
|
+
* 2. The Stage A prompt was built with the INTENT context injected, AND
|
|
155
|
+
* 3. The LLM chose to emit a tension.
|
|
156
|
+
*
|
|
157
|
+
* When absent (flag off or LLM omitted), Stage C passthrough must NOT
|
|
158
|
+
* synthesize one (SPEC §18 — additive only, never generates).
|
|
159
|
+
*/
|
|
160
|
+
intentTension: Type.Optional(IntentTensionSchema),
|
|
71
161
|
});
|
|
72
162
|
// ── Validator ────────────────────────────────────────────────────────────────
|
|
73
163
|
const VALID_ROOT_CAUSE_CATEGORIES = new Set(['People', 'Design', 'Assumption', 'Tooling']);
|
|
@@ -167,6 +257,24 @@ export class DefaultDiagRootCauseValidator {
|
|
|
167
257
|
}
|
|
168
258
|
}
|
|
169
259
|
}
|
|
260
|
+
// ── Step 6b: intentTension element-level checks (PRI-468, SPEC §16) ─────
|
|
261
|
+
// Provide clearer error messages than the TypeBox fallback for the most
|
|
262
|
+
// critical SPEC §16.3 violation (forbidden `confidence` field) and for
|
|
263
|
+
// non-object intentTension. The TypeBox schema (with additionalProperties:
|
|
264
|
+
// false) catches these as well, but the explicit check produces a
|
|
265
|
+
// human-readable message that references the SPEC clause.
|
|
266
|
+
if (Object.hasOwn(record, 'intentTension')) {
|
|
267
|
+
const tension = record.intentTension;
|
|
268
|
+
if (tension === null || typeof tension !== 'object') {
|
|
269
|
+
errors.push('intentTension must be an object when present');
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
const tensionRecord = tension;
|
|
273
|
+
if (Object.hasOwn(tensionRecord, 'confidence')) {
|
|
274
|
+
errors.push('intentTension.confidence is forbidden (SPEC §16.3); use rootCause-level confidence instead');
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
170
278
|
// ── Step 7: TypeBox schema validation as fallback ───────────────────────
|
|
171
279
|
if (!Value.Check(DiagRootCauseOutputV1Schema, output)) {
|
|
172
280
|
const schemaErrors = [...Value.Errors(DiagRootCauseOutputV1Schema, output)];
|