@principles/core 1.286.0 → 1.286.1

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 (73) hide show
  1. package/dist/runtime-v2/__tests__/dreamer-source-pain-provenance.test.d.ts +2 -0
  2. package/dist/runtime-v2/__tests__/dreamer-source-pain-provenance.test.d.ts.map +1 -0
  3. package/dist/runtime-v2/__tests__/dreamer-source-pain-provenance.test.js +208 -0
  4. package/dist/runtime-v2/__tests__/dreamer-source-pain-provenance.test.js.map +1 -0
  5. package/dist/runtime-v2/__tests__/pitask-metadata.test.js +28 -1
  6. package/dist/runtime-v2/__tests__/pitask-metadata.test.js.map +1 -1
  7. package/dist/runtime-v2/internalization/__tests__/dreamer-prompt-builder.test.js +8 -0
  8. package/dist/runtime-v2/internalization/__tests__/dreamer-prompt-builder.test.js.map +1 -1
  9. package/dist/runtime-v2/internalization/__tests__/evaluator-formation-context.test.js +2 -2
  10. package/dist/runtime-v2/internalization/__tests__/evaluator-pain-reason-echo.test.d.ts +2 -0
  11. package/dist/runtime-v2/internalization/__tests__/evaluator-pain-reason-echo.test.d.ts.map +1 -0
  12. package/dist/runtime-v2/internalization/__tests__/evaluator-pain-reason-echo.test.js +328 -0
  13. package/dist/runtime-v2/internalization/__tests__/evaluator-pain-reason-echo.test.js.map +1 -0
  14. package/dist/runtime-v2/internalization/__tests__/evaluator-prompt-builder.test.js +2 -2
  15. package/dist/runtime-v2/internalization/__tests__/evaluator-validator-refeed.test.d.ts +2 -0
  16. package/dist/runtime-v2/internalization/__tests__/evaluator-validator-refeed.test.d.ts.map +1 -0
  17. package/dist/runtime-v2/internalization/__tests__/evaluator-validator-refeed.test.js +433 -0
  18. package/dist/runtime-v2/internalization/__tests__/evaluator-validator-refeed.test.js.map +1 -0
  19. package/dist/runtime-v2/internalization/__tests__/owner-decision-review.test.js +204 -3
  20. package/dist/runtime-v2/internalization/__tests__/owner-decision-review.test.js.map +1 -1
  21. package/dist/runtime-v2/internalization/dreamer-prompt-builder.js +2 -2
  22. package/dist/runtime-v2/internalization/dreamer-runner.d.ts +19 -3
  23. package/dist/runtime-v2/internalization/dreamer-runner.d.ts.map +1 -1
  24. package/dist/runtime-v2/internalization/dreamer-runner.js +39 -10
  25. package/dist/runtime-v2/internalization/dreamer-runner.js.map +1 -1
  26. package/dist/runtime-v2/internalization/evaluator-prompt-builder.d.ts +33 -1
  27. package/dist/runtime-v2/internalization/evaluator-prompt-builder.d.ts.map +1 -1
  28. package/dist/runtime-v2/internalization/evaluator-prompt-builder.js +42 -2
  29. package/dist/runtime-v2/internalization/evaluator-prompt-builder.js.map +1 -1
  30. package/dist/runtime-v2/internalization/evaluator-runner.d.ts +10 -1
  31. package/dist/runtime-v2/internalization/evaluator-runner.d.ts.map +1 -1
  32. package/dist/runtime-v2/internalization/evaluator-runner.js +65 -1
  33. package/dist/runtime-v2/internalization/evaluator-runner.js.map +1 -1
  34. package/dist/runtime-v2/internalization/formation-context.d.ts +24 -4
  35. package/dist/runtime-v2/internalization/formation-context.d.ts.map +1 -1
  36. package/dist/runtime-v2/internalization/formation-context.js +5 -2
  37. package/dist/runtime-v2/internalization/formation-context.js.map +1 -1
  38. package/dist/runtime-v2/internalization/owner-decision-review.d.ts +33 -1
  39. package/dist/runtime-v2/internalization/owner-decision-review.d.ts.map +1 -1
  40. package/dist/runtime-v2/internalization/owner-decision-review.js +93 -1
  41. package/dist/runtime-v2/internalization/owner-decision-review.js.map +1 -1
  42. package/dist/runtime-v2/internalization/pitask-metadata.d.ts +15 -0
  43. package/dist/runtime-v2/internalization/pitask-metadata.d.ts.map +1 -1
  44. package/dist/runtime-v2/internalization/pitask-metadata.js +34 -0
  45. package/dist/runtime-v2/internalization/pitask-metadata.js.map +1 -1
  46. package/dist/runtime-v2/owner-decision/__tests__/owner-decision-view.test.js +56 -0
  47. package/dist/runtime-v2/owner-decision/__tests__/owner-decision-view.test.js.map +1 -1
  48. package/dist/runtime-v2/owner-decision/owner-decision-view-contract.d.ts +169 -0
  49. package/dist/runtime-v2/owner-decision/owner-decision-view-contract.d.ts.map +1 -1
  50. package/dist/runtime-v2/owner-decision/owner-decision-view-contract.js +4 -0
  51. package/dist/runtime-v2/owner-decision/owner-decision-view-contract.js.map +1 -1
  52. package/dist/runtime-v2/owner-decision/owner-decision-view.d.ts.map +1 -1
  53. package/dist/runtime-v2/owner-decision/owner-decision-view.js +26 -8
  54. package/dist/runtime-v2/owner-decision/owner-decision-view.js.map +1 -1
  55. package/dist/runtime-v2/pain-to-principle-service.d.ts +7 -0
  56. package/dist/runtime-v2/pain-to-principle-service.d.ts.map +1 -1
  57. package/dist/runtime-v2/pain-to-principle-service.js +1 -0
  58. package/dist/runtime-v2/pain-to-principle-service.js.map +1 -1
  59. package/dist/runtime-v2/runner/__tests__/base-peer-runner-agent-draft.test.js +34 -0
  60. package/dist/runtime-v2/runner/__tests__/base-peer-runner-agent-draft.test.js.map +1 -1
  61. package/dist/runtime-v2/runner/base-peer-runner.d.ts.map +1 -1
  62. package/dist/runtime-v2/runner/base-peer-runner.js +4 -47
  63. package/dist/runtime-v2/runner/base-peer-runner.js.map +1 -1
  64. package/dist/runtime-v2/store/task/__tests__/sqlite-task-store.failed-tasks.test.js +29 -2
  65. package/dist/runtime-v2/store/task/__tests__/sqlite-task-store.failed-tasks.test.js.map +1 -1
  66. package/dist/runtime-v2/store/task/sqlite-task-store.d.ts.map +1 -1
  67. package/dist/runtime-v2/store/task/sqlite-task-store.js +6 -37
  68. package/dist/runtime-v2/store/task/sqlite-task-store.js.map +1 -1
  69. package/dist/telemetry-event.d.ts +2 -2
  70. package/dist/telemetry-event.d.ts.map +1 -1
  71. package/dist/telemetry-event.js +8 -0
  72. package/dist/telemetry-event.js.map +1 -1
  73. package/package.json +1 -1
@@ -0,0 +1,328 @@
1
+ /**
2
+ * PRI-861 — painReasonSummary producer echo (production-path tests).
3
+ *
4
+ * Gap (PRI-855 CIL-003): RuleHostWriter.buildApprovalContext reads
5
+ * `painReasonSummary` from the rule artifact contentJson, but the production
6
+ * v2 assembler never wrote it — the Owner approval card always showed the
7
+ * generic fallback trigger reason.
8
+ *
9
+ * Fix contract (PRI-855 audit option B — connection before creation):
10
+ * assembleRuleArtifact ECHOES the same bounded
11
+ * `resolveFormationContext().sourceDiagnosis.summary` projection the PRI-843
12
+ * prompt path already uses. It never re-derives or re-summarizes the diagnosis
13
+ * (P4: the diagnosis artifact stays the single source of truth) and inherits
14
+ * the projection's FORMATION_FIELD_MAX_CHARS clamp. When the formation chain
15
+ * is absent the field stays absent (PRI-530 design: show only what exists)
16
+ * with an observable skip event (rc-9) — assembly itself never blocks on it.
17
+ *
18
+ * Every test runs REAL production components (RuntimeStateManager +
19
+ * SqlitePIArtifactStore + EvaluatorRunner + deterministic replay gate +
20
+ * RuleHostWriter); only the LLM adapter is scripted.
21
+ */
22
+ import { describe, it, expect, afterEach } from 'vitest';
23
+ import * as fs from 'node:fs';
24
+ import * as path from 'node:path';
25
+ import * as os from 'node:os';
26
+ import { RuntimeStateManager } from '../../store/runtime-state-manager.js';
27
+ import { EvaluatorRunner } from '../evaluator-runner.js';
28
+ import { DefaultEvaluatorValidator } from '../evaluator-output.js';
29
+ import { StoreEventEmitter } from '../../store/event-emitter.js';
30
+ import { SqliteConnection } from '../../store/sqlite-connection.js';
31
+ import { SqlitePIArtifactStore } from '../../store/artifact/sqlite-pi-artifact-store.js';
32
+ import { createPITaskDiagnosticJson } from '../pitask-metadata.js';
33
+ import { createProductionGateDeps } from '../../activation/production-gate-deps.js';
34
+ import { RuleHostWriter } from '../../activation/writers/rule-host-writer.js';
35
+ import { FORMATION_FIELD_MAX_CHARS } from '../formation-context.js';
36
+ // ── Fixtures ─────────────────────────────────────────────────────────────────
37
+ const DIAG_ID = 'diag-pr861';
38
+ const DREAMER_ID = 'dreamer-pr861';
39
+ const SCRIBE_ID = 'scribe-pr861';
40
+ const ART_ID = 'artificer-pr861';
41
+ const EVAL_ID = 'evaluator-pr861';
42
+ const DIAG_ART = 'pi-art-diag-pr861';
43
+ const DREAMER_ART = 'pi-art-dreamer-pr861';
44
+ const SCRIBE_ART = 'pi-art-scribe-pr861';
45
+ const ART_ART = 'pi-art-artificer-pr861-seed';
46
+ const SHORT_SUMMARY = 'agent wrote config from guessed contracts instead of the authoritative one';
47
+ const LONG_SUMMARY = 'x'.repeat(FORMATION_FIELD_MAX_CHARS + 100);
48
+ function diagnosisContent(summary) {
49
+ return {
50
+ valid: true,
51
+ diagnosisId: 'diag-pr861',
52
+ summary,
53
+ rootCause: 'agent inferred a configuration contract from example files instead of reading the authoritative one',
54
+ violatedPrinciples: [
55
+ { principleId: 'T-03', title: 'Evidence first', rationale: 'contracts must be read, not guessed' },
56
+ ],
57
+ evidence: [
58
+ { sourceRef: 'trajectory://session-pr861/turn-4', note: 'wrote a config without reading the contract' },
59
+ ],
60
+ recommendations: [
61
+ { kind: 'principle', description: 'read the authoritative contract before mutating config' },
62
+ ],
63
+ confidence: 0.8,
64
+ };
65
+ }
66
+ const DREAMER_CONTENT = {
67
+ valid: true,
68
+ taskId: DREAMER_ID,
69
+ candidates: [
70
+ {
71
+ candidateIndex: 0,
72
+ badDecision: 'agent wrote config without validating the contract',
73
+ betterDecision: 'resolve and read the authoritative contract before writing',
74
+ rationale: 'guessing contracts produces silent drift',
75
+ confidence: 0.4,
76
+ riskLevel: 'high',
77
+ strategicPerspective: 'defensive',
78
+ },
79
+ ],
80
+ sourcePainId: 'pain-pr861',
81
+ contextRefs: ['pi-art-pain-pr861'],
82
+ generatedAt: '2026-09-20T00:00:00.000Z',
83
+ };
84
+ /** Scribe principle artifact — the authoritative dreamer-lineage carrier (PRI-843 contract). */
85
+ function scribeContent(withDreamerLineage) {
86
+ return {
87
+ principleId: 'contract-first-pr861',
88
+ principleDraft: {
89
+ title: 'Contract before mutation',
90
+ statement: 'Read the authoritative configuration contract before mutating any config surface.',
91
+ rationale: 'Guessed contracts drift silently from owner intent.',
92
+ applicability: ['config mutation'],
93
+ antiPatterns: ['inferring contracts from example files'],
94
+ confidence: 0.8,
95
+ },
96
+ ...(withDreamerLineage
97
+ ? { sourceTrace: { dreamerArtifactId: DREAMER_ART } }
98
+ : { sourceTrace: {} }),
99
+ };
100
+ }
101
+ // v2 code-bearing artificer payload — identical shape to the PRI-714 harness,
102
+ // whose GOOD_RULE_CODE + cases pass the real deterministic replay gate.
103
+ const RULE_CONTEXT = {
104
+ version: 2,
105
+ history: { status: 'available', truncated: false, calls: [] },
106
+ facts: { priorReadOfTarget: 'unknown', readCount: 0, writeCount: 0, uniqueWritePathCount: 0, sameActionBlockCount: null },
107
+ };
108
+ const NEG_CASE = { caseId: 'neg-1', kind: 'negative', toolName: 'write_file', params: { path: '/etc/passwd' }, expectedDecision: 'block', ruleContext: RULE_CONTEXT };
109
+ const POS_CASE = { caseId: 'pos-1', kind: 'positive', toolName: 'write_file', params: { path: '/workspace/src/a.ts' }, expectedDecision: 'allow', ruleContext: RULE_CONTEXT };
110
+ const GOOD_RULE_CODE = `function evaluate(input, helpers) {
111
+ var rawPath = input.action.paramsSummary.path;
112
+ var p = (typeof rawPath === 'string') ? rawPath : (input.action.normalizedPath || '');
113
+ if (p.indexOf('/etc/') === 0 || p === '/etc/passwd') {
114
+ return { decision: 'block', matched: true, reason: 'risk path dominates prior context' };
115
+ }
116
+ var ctx = input.context;
117
+ if (ctx && ctx.facts && ctx.facts.priorReadOfTarget === 'no') {
118
+ return { decision: 'block', matched: true, reason: 'write target was not read first' };
119
+ }
120
+ return { decision: 'allow', matched: false, reason: 'no risk signal' };
121
+ }`;
122
+ function artificerV2Content() {
123
+ return {
124
+ taskId: ART_ID,
125
+ sourceScribeArtifactId: SCRIBE_ART,
126
+ requiresContextVersion: 2,
127
+ evidenceRefs: ['pain://pr861-1'],
128
+ implementationSummary: 'read-before-write guard',
129
+ sourceTrace: { scribeArtifactId: SCRIBE_ART },
130
+ risks: [],
131
+ implementationCode: GOOD_RULE_CODE,
132
+ goldenTraceCases: [NEG_CASE, POS_CASE],
133
+ affectedTools: ['write_file'],
134
+ generatedAt: '2026-09-20T00:00:00.000Z',
135
+ };
136
+ }
137
+ function evaluatorApprovedPayload() {
138
+ return {
139
+ taskId: EVAL_ID,
140
+ sourceArtificerArtifactId: ART_ART,
141
+ evaluation: {
142
+ decision: 'approved',
143
+ summary: '规则与原则一致,全部用例通过。',
144
+ score: 0.9,
145
+ strengths: ['守卫取值替代字符串方法直接调用'],
146
+ concerns: [],
147
+ requiredChanges: [],
148
+ },
149
+ sourceTrace: { artificerArtifactId: ART_ART, scribeArtifactId: SCRIBE_ART },
150
+ risks: [],
151
+ generatedAt: '2026-09-20T00:00:00.000Z',
152
+ };
153
+ }
154
+ function meta(o = {}) {
155
+ return createPITaskDiagnosticJson({
156
+ dependencyTaskIds: [], channel: 'prompt', timeoutMs: 300_000,
157
+ inputArtifactRefs: [], outputArtifactRefs: [], ...o,
158
+ });
159
+ }
160
+ async function makeWorld(opts) {
161
+ const workspaceDir = fs.mkdtempSync(path.join(os.tmpdir(), 'pd-pri861-echo-'));
162
+ const stateManager = new RuntimeStateManager({ workspaceDir });
163
+ await stateManager.initialize();
164
+ const emitter = new StoreEventEmitter();
165
+ const emitted = [];
166
+ emitter.onTelemetry((event) => {
167
+ emitted.push({ eventType: event.eventType, payload: event.payload });
168
+ });
169
+ const store = new SqlitePIArtifactStore(new SqliteConnection(workspaceDir));
170
+ const withDiag = opts.lineage === 'full';
171
+ const withDreamer = opts.lineage !== 'none';
172
+ const now = '2026-09-20T00:00:00.000Z';
173
+ const mkTask = async (spec) => {
174
+ await stateManager.createTask({
175
+ taskId: spec.id, taskKind: spec.kind, status: 'pending', attemptCount: 0, maxAttempts: 3,
176
+ diagnosticJson: meta({ dependencyTaskIds: spec.deps }),
177
+ });
178
+ await stateManager.acquireLease({ taskId: spec.id, owner: 'pri861-test', runtimeKind: 'test-double' });
179
+ await stateManager.markTaskSucceeded(spec.id);
180
+ };
181
+ const upsert = (spec) => store.upsertArtifact({
182
+ artifactId: spec.artifactId, artifactKind: 'principle', sourceTaskId: spec.sourceTaskId,
183
+ lineageArtifactIds: [...spec.lineage],
184
+ validationStatus: 'pending', contentJson: JSON.stringify(spec.content), createdAt: now, updatedAt: now,
185
+ });
186
+ if (withDreamer) {
187
+ if (withDiag) {
188
+ await mkTask({ id: DIAG_ID, kind: 'diag_router', deps: [] });
189
+ await upsert({ artifactId: DIAG_ART, sourceTaskId: DIAG_ID, content: diagnosisContent(opts.summary ?? SHORT_SUMMARY), lineage: [] });
190
+ }
191
+ await mkTask({ id: DREAMER_ID, kind: 'dreamer', deps: withDiag ? [DIAG_ID] : [] });
192
+ await upsert({ artifactId: DREAMER_ART, sourceTaskId: DREAMER_ID, content: DREAMER_CONTENT, lineage: withDiag ? [DIAG_ART] : [] });
193
+ }
194
+ await mkTask({ id: SCRIBE_ID, kind: 'scribe', deps: withDreamer ? [DREAMER_ID] : [] });
195
+ await upsert({ artifactId: SCRIBE_ART, sourceTaskId: SCRIBE_ID, content: scribeContent(withDreamer), lineage: withDreamer ? [DREAMER_ART] : [] });
196
+ await mkTask({ id: ART_ID, kind: 'artificer', deps: [SCRIBE_ID] });
197
+ await upsert({ artifactId: ART_ART, sourceTaskId: ART_ID, content: artificerV2Content(), lineage: [SCRIBE_ART] });
198
+ await stateManager.createTask({
199
+ taskId: EVAL_ID, taskKind: 'evaluator', status: 'pending', attemptCount: 0, maxAttempts: 3,
200
+ diagnosticJson: meta({ dependencyTaskIds: [ART_ID] }),
201
+ });
202
+ const runtimeAdapter = {
203
+ startRun: async (req) => ({
204
+ runId: 'run-pr861',
205
+ runtimeKind: 'test-double',
206
+ startedAt: new Date().toISOString(),
207
+ inputPayload: req.inputPayload,
208
+ }),
209
+ pollRun: async () => ({ status: 'succeeded', runId: 'run-pr861' }),
210
+ fetchOutput: async () => ({ runId: 'run-pr861', payload: evaluatorApprovedPayload() }),
211
+ cancelRun: async () => undefined,
212
+ };
213
+ const evaluator = new EvaluatorRunner({
214
+ stateManager,
215
+ runtimeAdapter,
216
+ eventEmitter: emitter,
217
+ artifactStore: store,
218
+ validator: new DefaultEvaluatorValidator(),
219
+ }, {
220
+ owner: 'pri861-test', runtimeKind: 'test-double', pollIntervalMs: 5, timeoutMs: 5_000,
221
+ gateDeps: createProductionGateDeps(),
222
+ });
223
+ return { workspaceDir, stateManager, emitter, emitted, store, evaluator };
224
+ }
225
+ function closeWorld(world) {
226
+ void world.stateManager.close();
227
+ try {
228
+ fs.rmSync(world.workspaceDir, { recursive: true, force: true });
229
+ }
230
+ catch { /* temp */ }
231
+ }
232
+ /** Real consumer: approval card built by the production RuleHostWriter reader. */
233
+ function approvalTriggerReason(artifact) {
234
+ const writer = new RuleHostWriter({ gateDeps: createProductionGateDeps() });
235
+ return writer.buildApprovalContext({}, { ...artifact, lineageArtifactIds: [] }).triggerReason;
236
+ }
237
+ // ── Tests ────────────────────────────────────────────────────────────────────
238
+ describe('PRI-861 — painReasonSummary echo into the production rule artifact', () => {
239
+ let world;
240
+ afterEach(() => {
241
+ closeWorld(world);
242
+ });
243
+ it('full formation lineage: rule contentJson carries the projected diagnosis summary and the approval card shows it', async () => {
244
+ world = await makeWorld({ lineage: 'full' });
245
+ const result = await world.evaluator.run(EVAL_ID);
246
+ expect(result.status).toBe('succeeded');
247
+ const ruleArtifact = (await world.store.listBySourceTaskId(EVAL_ID)).find((a) => a.artifactKind === 'rule');
248
+ expect(ruleArtifact).toBeDefined();
249
+ if (!ruleArtifact)
250
+ return;
251
+ expect(ruleArtifact.artifactId).toContain('pi-rule-');
252
+ const ruleContent = JSON.parse(ruleArtifact.contentJson);
253
+ // Echo contract: byte-equal to the bounded projection of the diagnosis
254
+ // artifact — not a fresh derivation, not a rewrite.
255
+ expect(ruleContent.painReasonSummary).toBe(SHORT_SUMMARY);
256
+ // AC3 — real consumer: the production reader path surfaces it as the
257
+ // Owner-visible trigger reason (no more generic fallback).
258
+ expect(approvalTriggerReason({
259
+ artifactId: ruleArtifact.artifactId,
260
+ artifactKind: 'rule',
261
+ sourceTaskId: ruleArtifact.sourceTaskId,
262
+ contentJson: ruleArtifact.contentJson,
263
+ validationStatus: 'validated',
264
+ createdAt: ruleArtifact.createdAt,
265
+ updatedAt: ruleArtifact.updatedAt,
266
+ })).toBe(SHORT_SUMMARY);
267
+ }, 60_000);
268
+ it('long diagnosis summary is echoed already-clamped (bounded projection inherited, never full text)', async () => {
269
+ world = await makeWorld({ lineage: 'full', summary: LONG_SUMMARY });
270
+ const result = await world.evaluator.run(EVAL_ID);
271
+ expect(result.status).toBe('succeeded');
272
+ const ruleArtifact = (await world.store.listBySourceTaskId(EVAL_ID)).find((a) => a.artifactKind === 'rule');
273
+ expect(ruleArtifact).toBeDefined();
274
+ if (!ruleArtifact)
275
+ return;
276
+ const ruleContent = JSON.parse(ruleArtifact.contentJson);
277
+ const echoed = ruleContent.painReasonSummary;
278
+ expect(typeof echoed).toBe('string');
279
+ expect(echoed.length).toBeLessThanOrEqual(FORMATION_FIELD_MAX_CHARS);
280
+ expect(echoed).toBe(`${LONG_SUMMARY.slice(0, FORMATION_FIELD_MAX_CHARS - 1)}…`);
281
+ }, 60_000);
282
+ it('legacy chain without dreamer lineage: field absent, skip event observable, assembly unaffected, reader keeps fallback', async () => {
283
+ world = await makeWorld({ lineage: 'none' });
284
+ const result = await world.evaluator.run(EVAL_ID);
285
+ expect(result.status).toBe('succeeded');
286
+ const ruleArtifact = (await world.store.listBySourceTaskId(EVAL_ID)).find((a) => a.artifactKind === 'rule');
287
+ expect(ruleArtifact).toBeDefined();
288
+ if (!ruleArtifact)
289
+ return;
290
+ // Negative control: absence stays absence — no fabrication, no placeholder.
291
+ const ruleContent = JSON.parse(ruleArtifact.contentJson);
292
+ expect(Object.hasOwn(ruleContent, 'painReasonSummary')).toBe(false);
293
+ // rc-9: the degradation is observable at the decision point.
294
+ const skipped = world.emitted.filter((e) => e.eventType === 'evaluator_pain_reason_summary_skipped');
295
+ expect(skipped).toHaveLength(1);
296
+ expect(skipped[0]?.payload.reason).toBe('no_dreamer_lineage_on_scribe');
297
+ expect(typeof skipped[0]?.payload.nextAction).toBe('string');
298
+ // Reader fallback semantics unchanged (locked behavior, PRI-185).
299
+ expect(approvalTriggerReason({
300
+ artifactId: ruleArtifact.artifactId,
301
+ artifactKind: 'rule',
302
+ sourceTaskId: ruleArtifact.sourceTaskId,
303
+ contentJson: ruleArtifact.contentJson,
304
+ validationStatus: 'validated',
305
+ createdAt: ruleArtifact.createdAt,
306
+ updatedAt: ruleArtifact.updatedAt,
307
+ })).toBe('RuleHost candidate requires human approval before activation.');
308
+ }, 60_000);
309
+ it('dreamer lineage present but diagnosis unresolvable: field absent, skip event names the diagnosis gap, assembly succeeds', async () => {
310
+ // The PRI-838 degradation the echo must survive: the resolver finds the
311
+ // dreamer but the dreamer task has no diagnostic-stage dependency, so it
312
+ // returns a context WITHOUT sourceDiagnosis (never throws).
313
+ world = await makeWorld({ lineage: 'broken-diag' });
314
+ const result = await world.evaluator.run(EVAL_ID);
315
+ expect(result.status).toBe('succeeded');
316
+ const ruleArtifact = (await world.store.listBySourceTaskId(EVAL_ID)).find((a) => a.artifactKind === 'rule');
317
+ expect(ruleArtifact).toBeDefined();
318
+ if (!ruleArtifact)
319
+ return;
320
+ const ruleContent = JSON.parse(ruleArtifact.contentJson);
321
+ expect(Object.hasOwn(ruleContent, 'painReasonSummary')).toBe(false);
322
+ const skipped = world.emitted.filter((e) => e.eventType === 'evaluator_pain_reason_summary_skipped');
323
+ expect(skipped).toHaveLength(1);
324
+ expect(skipped[0]?.payload.reason).toBe('diagnosis_summary_unavailable');
325
+ expect(typeof skipped[0]?.payload.nextAction).toBe('string');
326
+ }, 60_000);
327
+ });
328
+ //# sourceMappingURL=evaluator-pain-reason-echo.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator-pain-reason-echo.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/evaluator-pain-reason-echo.test.ts"],"names":[],"mappings":"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"}
@@ -54,8 +54,8 @@ describe('EvaluatorPromptBuilder', () => {
54
54
  const { promptInput } = builder.buildPrompt(input);
55
55
  expect(promptInput.promptContractVersion).toBe(EVALUATOR_PROMPT_CONTRACT_VERSION);
56
56
  });
57
- it('promptContractVersion value is evaluator-output-v1.prompt.v5 (PRI-843 formation-context anchor)', () => {
58
- expect(EVALUATOR_PROMPT_CONTRACT_VERSION).toBe('evaluator-output-v1.prompt.v5');
57
+ it('promptContractVersion value is evaluator-output-v1.prompt.v6 (PRI-644 validator re-feed anchor)', () => {
58
+ expect(EVALUATOR_PROMPT_CONTRACT_VERSION).toBe('evaluator-output-v1.prompt.v6');
59
59
  });
60
60
  it('score instruction says number not string/percentage', () => {
61
61
  expect(EVALUATOR_PROTOCOL_INSTRUCTION).toContain('NOT a string, NOT a percentage');
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=evaluator-validator-refeed.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator-validator-refeed.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/evaluator-validator-refeed.test.ts"],"names":[],"mappings":""}