@principles/pd-cli 1.93.0 → 1.94.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.
@@ -4,8 +4,7 @@ import { RuntimeStateManager } from '@principles/core/runtime-v2';
4
4
  import { SqliteContextAssembler } from '@principles/core/runtime-v2';
5
5
  import { SqliteHistoryQuery } from '@principles/core/runtime-v2';
6
6
  import { StoreEventEmitter } from '@principles/core/runtime-v2';
7
- import { DiagnosticianRunner } from '@principles/core/runtime-v2';
8
- import { PassThroughValidator } from '@principles/core/runtime-v2';
7
+ import { SplitDiagnosticianRunner, DiagRootCauseRunner, DiagDistillerRunner, DiagRouterRunner, DefaultDiagRootCauseValidator, DefaultDiagDistillerValidator, } from '@principles/core/runtime-v2';
9
8
  import { SqliteDiagnosticianCommitter } from '@principles/core/runtime-v2';
10
9
  import { TestDoubleRuntimeAdapter } from '@principles/core/runtime-v2';
11
10
  import { PainSignalBridge } from '@principles/core/runtime-v2';
@@ -47,14 +46,98 @@ export async function runSyntheticBaseline(opts) {
47
46
  const contextAssembler = new SqliteContextAssembler(taskStore, historyQuery, runStore);
48
47
  const eventEmitter = new StoreEventEmitter();
49
48
  const committer = new SqliteDiagnosticianCommitter(sqliteConn);
50
- const validator = new PassThroughValidator();
51
- const runtimeAdapter = new TestDoubleRuntimeAdapter({ onFetchOutput: () => ({ runId: `synth-${painId}`, payload: diagnosticianOutput }) }, `diagnosis_${painId}`);
52
- const runner = new DiagnosticianRunner({
49
+ const runIdToTaskId = new Map();
50
+ let runCounter = 0;
51
+ // Single test-double adapter handles all pains with stage-aware output
52
+ const runtimeAdapter = new TestDoubleRuntimeAdapter({
53
+ onStartRun: (input) => {
54
+ runCounter += 1;
55
+ const runId = `td-${runCounter}`;
56
+ const taskId = input.taskRef?.taskId ?? '';
57
+ runIdToTaskId.set(runId, taskId);
58
+ return {
59
+ runId,
60
+ runtimeKind: 'test-double',
61
+ startedAt: new Date().toISOString(),
62
+ };
63
+ },
64
+ onFetchOutput: async (runId) => {
65
+ const taskId = runIdToTaskId.get(runId) ?? '';
66
+ if (taskId.includes('diag_rootcause')) {
67
+ return {
68
+ runId,
69
+ payload: {
70
+ valid: true,
71
+ diagnosisId: `diag-${runId}`,
72
+ taskId,
73
+ summary: 'Mock rootcause summary for synthetic-baseline',
74
+ causalChain: [{ why: 1, statement: 'why', evidenceRefs: ['ref-1'] }],
75
+ rootCause: 'Design: Mock rootcause',
76
+ rootCauseCategory: 'Design',
77
+ evidence: [{ sourceRef: 'ref-1', note: 'note' }],
78
+ confidence: 0.9,
79
+ },
80
+ };
81
+ }
82
+ else if (taskId.includes('diag_distiller')) {
83
+ const parentTaskId = taskId.replace('diag_distiller-', '');
84
+ const stageATaskId = `diag_rootcause-${parentTaskId}`;
85
+ const artifacts = stateManager
86
+ ? await stateManager.piArtifactStore.listBySourceTaskId(stageATaskId)
87
+ : [];
88
+ const sourceRootCauseArtifactId = artifacts[0]?.artifactId ?? 'art-rc';
89
+ return {
90
+ runId,
91
+ payload: {
92
+ valid: true,
93
+ taskId,
94
+ sourceRootCauseArtifactId,
95
+ abstractedPrinciple: 'Mock abstracted principle',
96
+ rationale: 'Mock rationale',
97
+ groundedOnCorePrincipleIds: ['T-01'],
98
+ scope: 'domain',
99
+ confidence: 0.9,
100
+ },
101
+ };
102
+ }
103
+ else {
104
+ return {
105
+ runId,
106
+ payload: diagnosticianOutput,
107
+ };
108
+ }
109
+ },
110
+ });
111
+ const rootCauseRunner = new DiagRootCauseRunner({
53
112
  stateManager,
113
+ runtimeAdapter,
114
+ eventEmitter,
115
+ artifactStore: stateManager.piArtifactStore,
116
+ validator: new DefaultDiagRootCauseValidator(),
54
117
  contextAssembler,
118
+ }, {
119
+ owner: 'synthetic-baseline',
120
+ runtimeKind: 'test-double',
121
+ pollIntervalMs: 50,
122
+ timeoutMs: 10000,
123
+ });
124
+ const distillerRunner = new DiagDistillerRunner({
125
+ stateManager,
126
+ runtimeAdapter,
127
+ eventEmitter,
128
+ artifactStore: stateManager.piArtifactStore,
129
+ validator: new DefaultDiagDistillerValidator(),
130
+ }, {
131
+ owner: 'synthetic-baseline',
132
+ runtimeKind: 'test-double',
133
+ pollIntervalMs: 50,
134
+ timeoutMs: 10000,
135
+ });
136
+ const routerRunner = new DiagRouterRunner({
137
+ stateManager,
55
138
  runtimeAdapter,
56
139
  eventEmitter,
57
- validator,
140
+ artifactStore: stateManager.piArtifactStore,
58
141
  committer,
59
142
  }, {
60
143
  owner: 'synthetic-baseline',
@@ -62,6 +145,14 @@ export async function runSyntheticBaseline(opts) {
62
145
  pollIntervalMs: 50,
63
146
  timeoutMs: 10000,
64
147
  });
148
+ const runner = new SplitDiagnosticianRunner({
149
+ rootCauseRunner,
150
+ distillerRunner,
151
+ routerRunner,
152
+ stateManager,
153
+ committer,
154
+ perStageTimeoutMs: 10000,
155
+ });
65
156
  const ledgerAdapter = new PrincipleTreeLedgerAdapter({ stateDir });
66
157
  const intakeService = new CandidateIntakeService({ stateManager, ledgerAdapter });
67
158
  const bridge = new PainSignalBridge({
@@ -1 +1 @@
1
- {"version":3,"file":"synthetic-baseline-runner.js","sourceRoot":"","sources":["../../src/services/synthetic-baseline-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"synthetic-baseline-runner.js","sourceRoot":"","sources":["../../src/services/synthetic-baseline-runner.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@principles/pd-cli",
3
- "version": "1.93.0",
3
+ "version": "1.94.0",
4
4
  "description": "PD CLI — Pain recording, sample management, and evolution tasks",
5
5
  "type": "module",
6
6
  "bin": {
@@ -14,8 +14,14 @@ import {
14
14
  SqliteSourceTraceLocator,
15
15
  StoreEventEmitter,
16
16
  storeEmitter,
17
- DiagnosticianRunner,
18
- DefaultDiagnosticianValidator,
17
+ SplitDiagnosticianRunner,
18
+ DiagRootCauseRunner,
19
+ DiagDistillerRunner,
20
+ DiagRouterRunner,
21
+ DefaultDiagRootCauseValidator,
22
+ DefaultDiagDistillerValidator,
23
+ DisabledDiagnosticianRunner,
24
+ type DiagnosticianRunnerLike,
19
25
  TestDoubleRuntimeAdapter,
20
26
  OpenClawCliRuntimeAdapter,
21
27
  PiAiRuntimeAdapter,
@@ -295,24 +301,32 @@ export async function handleDiagnoseRun(opts: DiagnoseRunOptions): Promise<void>
295
301
  const isSplitPipeline = isFeatureEnabled(featureFlags, 'diagnostician_split_pipeline');
296
302
  const pipelineTimeoutMs = isSplitPipeline ? SPLIT_PIPELINE_TOTAL_TIMEOUT_MS : 300_000;
297
303
 
298
- const runner = new DiagnosticianRunner(
299
- {
304
+ let runner: DiagnosticianRunnerLike;
305
+ if (isSplitPipeline) {
306
+ const rootCauseRunner = new DiagRootCauseRunner(
307
+ { stateManager, runtimeAdapter, eventEmitter, artifactStore: stateManager.piArtifactStore, validator: new DefaultDiagRootCauseValidator(), contextAssembler },
308
+ { owner: 'pd-cli-diagnose', runtimeKind, outputLanguage },
309
+ );
310
+ const distillerRunner = new DiagDistillerRunner(
311
+ { stateManager, runtimeAdapter, eventEmitter, artifactStore: stateManager.piArtifactStore, validator: new DefaultDiagDistillerValidator() },
312
+ { owner: 'pd-cli-diagnose', runtimeKind, outputLanguage },
313
+ );
314
+ const routerRunner = new DiagRouterRunner(
315
+ { stateManager, runtimeAdapter, eventEmitter, artifactStore: stateManager.piArtifactStore, committer },
316
+ { owner: 'pd-cli-diagnose', runtimeKind, outputLanguage },
317
+ );
318
+
319
+ runner = new SplitDiagnosticianRunner({
320
+ rootCauseRunner,
321
+ distillerRunner,
322
+ routerRunner,
300
323
  stateManager,
301
- contextAssembler,
302
- runtimeAdapter,
303
- eventEmitter,
304
- validator: new DefaultDiagnosticianValidator(),
305
324
  committer,
306
- },
307
- {
308
- owner: 'pd-cli-diagnose',
309
- runtimeKind,
310
- pollIntervalMs: 100,
311
- timeoutMs: pipelineTimeoutMs,
312
- agentId: opts.agent,
313
- outputLanguage,
314
- },
315
- );
325
+ perStageTimeoutMs: pipelineTimeoutMs / 3,
326
+ });
327
+ } else {
328
+ runner = new DisabledDiagnosticianRunner();
329
+ }
316
330
 
317
331
  if (!opts.json) {
318
332
  console.log(`\nRunning diagnostician for task: ${opts.taskId}`);
@@ -18,8 +18,14 @@ import {
18
18
  SqliteTrajectoryLocator,
19
19
  SqliteSourceTraceLocator,
20
20
  StoreEventEmitter,
21
- DiagnosticianRunner,
22
- DefaultDiagnosticianValidator,
21
+ SplitDiagnosticianRunner,
22
+ DiagRootCauseRunner,
23
+ DiagDistillerRunner,
24
+ DiagRouterRunner,
25
+ DefaultDiagRootCauseValidator,
26
+ DefaultDiagDistillerValidator,
27
+ DisabledDiagnosticianRunner,
28
+ type DiagnosticianRunnerLike,
23
29
  TestDoubleRuntimeAdapter,
24
30
  OpenClawCliRuntimeAdapter,
25
31
  PiAiRuntimeAdapter,
@@ -28,8 +34,11 @@ import {
28
34
  isRuntimeConfigError,
29
35
  CandidateIntakeService,
30
36
  run as diagnoseRun,
37
+ isFeatureEnabled,
38
+ SPLIT_PIPELINE_TOTAL_TIMEOUT_MS,
31
39
  } from '@principles/core/runtime-v2';
32
40
  import type { PDRuntimeAdapter, RuntimeConfig, OutputLanguage } from '@principles/core/runtime-v2';
41
+ import { loadPdConfig, computeFlagsFromLoadResult } from '../services/pd-config-loader.js';
33
42
  import type { PDTaskStatus } from '@principles/core/runtime-v2';
34
43
  import { PrincipleTreeLedgerAdapter } from '../principle-tree-ledger-adapter.js';
35
44
  import { readOutputLanguageFromWorkspace } from '../config-reader.js';
@@ -368,24 +377,38 @@ export async function handlePainRetry(opts: PainRetryOptions): Promise<void> {
368
377
  const outputLangResult = readOutputLanguageFromWorkspace(workspaceDir);
369
378
  const outputLanguage: OutputLanguage | undefined = outputLangResult.outputLanguage;
370
379
 
371
- const runner = new DiagnosticianRunner(
372
- {
380
+ // Check if split pipeline is enabled — 3 serial LLM calls need more time
381
+ const configLoadResult = loadPdConfig(workspaceDir);
382
+ const featureFlags = computeFlagsFromLoadResult(configLoadResult);
383
+ const isSplitPipeline = isFeatureEnabled(featureFlags, 'diagnostician_split_pipeline');
384
+ const pipelineTimeoutMs = isSplitPipeline ? SPLIT_PIPELINE_TOTAL_TIMEOUT_MS : 300_000;
385
+
386
+ let runner: DiagnosticianRunnerLike;
387
+ if (isSplitPipeline) {
388
+ const rootCauseRunner = new DiagRootCauseRunner(
389
+ { stateManager, runtimeAdapter, eventEmitter, artifactStore: stateManager.piArtifactStore, validator: new DefaultDiagRootCauseValidator(), contextAssembler },
390
+ { owner: 'pd-cli-pain-retry', runtimeKind, outputLanguage },
391
+ );
392
+ const distillerRunner = new DiagDistillerRunner(
393
+ { stateManager, runtimeAdapter, eventEmitter, artifactStore: stateManager.piArtifactStore, validator: new DefaultDiagDistillerValidator() },
394
+ { owner: 'pd-cli-pain-retry', runtimeKind, outputLanguage },
395
+ );
396
+ const routerRunner = new DiagRouterRunner(
397
+ { stateManager, runtimeAdapter, eventEmitter, artifactStore: stateManager.piArtifactStore, committer },
398
+ { owner: 'pd-cli-pain-retry', runtimeKind, outputLanguage },
399
+ );
400
+
401
+ runner = new SplitDiagnosticianRunner({
402
+ rootCauseRunner,
403
+ distillerRunner,
404
+ routerRunner,
373
405
  stateManager,
374
- contextAssembler,
375
- runtimeAdapter,
376
- eventEmitter,
377
- validator: new DefaultDiagnosticianValidator(),
378
406
  committer,
379
- },
380
- {
381
- owner: 'pd-cli-pain-retry',
382
- runtimeKind,
383
- pollIntervalMs: 100,
384
- timeoutMs: 300_000,
385
- agentId: opts.agent,
386
- outputLanguage,
387
- },
388
- );
407
+ perStageTimeoutMs: pipelineTimeoutMs / 3,
408
+ });
409
+ } else {
410
+ runner = new DisabledDiagnosticianRunner();
411
+ }
389
412
 
390
413
  if (!opts.json) {
391
414
  console.log(`\nRetrying diagnosis for pain: ${opts.painId}`);
@@ -56,7 +56,7 @@ const PORT_FALLBACK_LIMIT = 20; // try 3100..3119 before giving up
56
56
 
57
57
  /** Returns true if the host resolves to a loopback address. */
58
58
  export function isLoopbackHost(host: string): boolean {
59
- if (host === 'localhost' || host === '127.0.0.1' || host === '::1' || host === '[::1]') return true;
59
+ if (host === 'localhost' || host === '127.0.0.1' || host === '::1' || host === '[::1]' || host === '0:0:0:0:0:0:0:1' || host === '[0:0:0:0:0:0:0:1]') return true;
60
60
  // Reject any IPv4 host that doesn't start with 127.
61
61
  if (/^127\./.test(host)) return true;
62
62
  return false;
@@ -4,8 +4,14 @@ import { RuntimeStateManager } from '@principles/core/runtime-v2';
4
4
  import { SqliteContextAssembler } from '@principles/core/runtime-v2';
5
5
  import { SqliteHistoryQuery } from '@principles/core/runtime-v2';
6
6
  import { StoreEventEmitter } from '@principles/core/runtime-v2';
7
- import { DiagnosticianRunner } from '@principles/core/runtime-v2';
8
- import { PassThroughValidator } from '@principles/core/runtime-v2';
7
+ import {
8
+ SplitDiagnosticianRunner,
9
+ DiagRootCauseRunner,
10
+ DiagDistillerRunner,
11
+ DiagRouterRunner,
12
+ DefaultDiagRootCauseValidator,
13
+ DefaultDiagDistillerValidator,
14
+ } from '@principles/core/runtime-v2';
9
15
  import { SqliteDiagnosticianCommitter } from '@principles/core/runtime-v2';
10
16
  import { TestDoubleRuntimeAdapter } from '@principles/core/runtime-v2';
11
17
  import { PainSignalBridge } from '@principles/core/runtime-v2';
@@ -170,23 +176,107 @@ export async function runPainFloodSimulation(opts: PainFloodSimulationRunnerOpti
170
176
  const contextAssembler = new SqliteContextAssembler(taskStore, historyQuery, runStore);
171
177
  const eventEmitter = new StoreEventEmitter();
172
178
  const committer = new SqliteDiagnosticianCommitter(sqliteConn);
173
- const validator = new PassThroughValidator();
179
+ const runIdToTaskId = new Map<string, string>();
180
+ let runCounter = 0;
174
181
 
175
- // Single test-double adapter handles all pains with deterministic output
182
+ // Single test-double adapter handles all pains with stage-aware output
176
183
  const runtimeAdapter = new TestDoubleRuntimeAdapter({
177
- onFetchOutput: (runId: string) => ({
178
- runId,
179
- payload: makeDeterministicDiagnosticianOutput(runId),
180
- }),
184
+ onStartRun: (input) => {
185
+ runCounter += 1;
186
+ const runId = `td-${runCounter}`;
187
+ const taskId = input.taskRef?.taskId ?? '';
188
+ runIdToTaskId.set(runId, taskId);
189
+ return {
190
+ runId,
191
+ runtimeKind: 'test-double',
192
+ startedAt: new Date().toISOString(),
193
+ };
194
+ },
195
+ onFetchOutput: async (runId: string) => {
196
+ const taskId = runIdToTaskId.get(runId) ?? '';
197
+ if (taskId.includes('diag_rootcause')) {
198
+ return {
199
+ runId,
200
+ payload: {
201
+ valid: true,
202
+ diagnosisId: `diag-${runId}`,
203
+ taskId,
204
+ summary: 'Mock rootcause summary for pain-flood-simulation',
205
+ causalChain: [{ why: 1, statement: 'why', evidenceRefs: ['ref-1'] }],
206
+ rootCause: 'Design: Mock rootcause',
207
+ rootCauseCategory: 'Design',
208
+ evidence: [{ sourceRef: 'ref-1', note: 'note' }],
209
+ confidence: 0.9,
210
+ },
211
+ };
212
+ } else if (taskId.includes('diag_distiller')) {
213
+ const parentTaskId = taskId.replace('diag_distiller-', '');
214
+ const stageATaskId = `diag_rootcause-${parentTaskId}`;
215
+ const artifacts = stateManager
216
+ ? await stateManager.piArtifactStore.listBySourceTaskId(stageATaskId)
217
+ : [];
218
+ const sourceRootCauseArtifactId = artifacts[0]?.artifactId ?? 'art-rc';
219
+ return {
220
+ runId,
221
+ payload: {
222
+ valid: true,
223
+ taskId,
224
+ sourceRootCauseArtifactId,
225
+ abstractedPrinciple: 'Mock abstracted principle',
226
+ rationale: 'Mock rationale',
227
+ groundedOnCorePrincipleIds: ['T-01'],
228
+ scope: 'domain',
229
+ confidence: 0.9,
230
+ },
231
+ };
232
+ } else {
233
+ return {
234
+ runId,
235
+ payload: makeDeterministicDiagnosticianOutput(runId),
236
+ };
237
+ }
238
+ },
181
239
  });
182
240
 
183
- const runner = new DiagnosticianRunner(
241
+ const rootCauseRunner = new DiagRootCauseRunner(
184
242
  {
185
243
  stateManager,
244
+ runtimeAdapter,
245
+ eventEmitter,
246
+ artifactStore: stateManager.piArtifactStore,
247
+ validator: new DefaultDiagRootCauseValidator(),
186
248
  contextAssembler,
249
+ },
250
+ {
251
+ owner: 'pain-flood-simulation',
252
+ runtimeKind: 'test-double',
253
+ pollIntervalMs: 50,
254
+ timeoutMs: 10000,
255
+ },
256
+ );
257
+
258
+ const distillerRunner = new DiagDistillerRunner(
259
+ {
260
+ stateManager,
187
261
  runtimeAdapter,
188
262
  eventEmitter,
189
- validator,
263
+ artifactStore: stateManager.piArtifactStore,
264
+ validator: new DefaultDiagDistillerValidator(),
265
+ },
266
+ {
267
+ owner: 'pain-flood-simulation',
268
+ runtimeKind: 'test-double',
269
+ pollIntervalMs: 50,
270
+ timeoutMs: 10000,
271
+ },
272
+ );
273
+
274
+ const routerRunner = new DiagRouterRunner(
275
+ {
276
+ stateManager,
277
+ runtimeAdapter,
278
+ eventEmitter,
279
+ artifactStore: stateManager.piArtifactStore,
190
280
  committer,
191
281
  },
192
282
  {
@@ -197,6 +287,15 @@ export async function runPainFloodSimulation(opts: PainFloodSimulationRunnerOpti
197
287
  },
198
288
  );
199
289
 
290
+ const runner = new SplitDiagnosticianRunner({
291
+ rootCauseRunner,
292
+ distillerRunner,
293
+ routerRunner,
294
+ stateManager,
295
+ committer,
296
+ perStageTimeoutMs: 10000,
297
+ });
298
+
200
299
  const ledgerAdapter = new PrincipleTreeLedgerAdapter({ stateDir });
201
300
  const intakeService = new CandidateIntakeService({ stateManager, ledgerAdapter });
202
301
 
@@ -4,8 +4,14 @@ import { RuntimeStateManager } from '@principles/core/runtime-v2';
4
4
  import { SqliteContextAssembler } from '@principles/core/runtime-v2';
5
5
  import { SqliteHistoryQuery } from '@principles/core/runtime-v2';
6
6
  import { StoreEventEmitter } from '@principles/core/runtime-v2';
7
- import { DiagnosticianRunner } from '@principles/core/runtime-v2';
8
- import { PassThroughValidator } from '@principles/core/runtime-v2';
7
+ import {
8
+ SplitDiagnosticianRunner,
9
+ DiagRootCauseRunner,
10
+ DiagDistillerRunner,
11
+ DiagRouterRunner,
12
+ DefaultDiagRootCauseValidator,
13
+ DefaultDiagDistillerValidator,
14
+ } from '@principles/core/runtime-v2';
9
15
  import { SqliteDiagnosticianCommitter } from '@principles/core/runtime-v2';
10
16
  import { TestDoubleRuntimeAdapter } from '@principles/core/runtime-v2';
11
17
  import { PainSignalBridge } from '@principles/core/runtime-v2';
@@ -72,20 +78,107 @@ export async function runSyntheticBaseline(opts: SyntheticBaselineRunnerOptions)
72
78
  const contextAssembler = new SqliteContextAssembler(taskStore, historyQuery, runStore);
73
79
  const eventEmitter = new StoreEventEmitter();
74
80
  const committer = new SqliteDiagnosticianCommitter(sqliteConn);
75
- const validator = new PassThroughValidator();
81
+ const runIdToTaskId = new Map<string, string>();
82
+ let runCounter = 0;
76
83
 
77
- const runtimeAdapter = new TestDoubleRuntimeAdapter(
78
- { onFetchOutput: () => ({ runId: `synth-${painId}`, payload: diagnosticianOutput }) },
79
- `diagnosis_${painId}`,
80
- );
84
+ // Single test-double adapter handles all pains with stage-aware output
85
+ const runtimeAdapter = new TestDoubleRuntimeAdapter({
86
+ onStartRun: (input) => {
87
+ runCounter += 1;
88
+ const runId = `td-${runCounter}`;
89
+ const taskId = input.taskRef?.taskId ?? '';
90
+ runIdToTaskId.set(runId, taskId);
91
+ return {
92
+ runId,
93
+ runtimeKind: 'test-double',
94
+ startedAt: new Date().toISOString(),
95
+ };
96
+ },
97
+ onFetchOutput: async (runId: string) => {
98
+ const taskId = runIdToTaskId.get(runId) ?? '';
99
+ if (taskId.includes('diag_rootcause')) {
100
+ return {
101
+ runId,
102
+ payload: {
103
+ valid: true,
104
+ diagnosisId: `diag-${runId}`,
105
+ taskId,
106
+ summary: 'Mock rootcause summary for synthetic-baseline',
107
+ causalChain: [{ why: 1, statement: 'why', evidenceRefs: ['ref-1'] }],
108
+ rootCause: 'Design: Mock rootcause',
109
+ rootCauseCategory: 'Design',
110
+ evidence: [{ sourceRef: 'ref-1', note: 'note' }],
111
+ confidence: 0.9,
112
+ },
113
+ };
114
+ } else if (taskId.includes('diag_distiller')) {
115
+ const parentTaskId = taskId.replace('diag_distiller-', '');
116
+ const stageATaskId = `diag_rootcause-${parentTaskId}`;
117
+ const artifacts = stateManager
118
+ ? await stateManager.piArtifactStore.listBySourceTaskId(stageATaskId)
119
+ : [];
120
+ const sourceRootCauseArtifactId = artifacts[0]?.artifactId ?? 'art-rc';
121
+ return {
122
+ runId,
123
+ payload: {
124
+ valid: true,
125
+ taskId,
126
+ sourceRootCauseArtifactId,
127
+ abstractedPrinciple: 'Mock abstracted principle',
128
+ rationale: 'Mock rationale',
129
+ groundedOnCorePrincipleIds: ['T-01'],
130
+ scope: 'domain',
131
+ confidence: 0.9,
132
+ },
133
+ };
134
+ } else {
135
+ return {
136
+ runId,
137
+ payload: diagnosticianOutput,
138
+ };
139
+ }
140
+ },
141
+ });
81
142
 
82
- const runner = new DiagnosticianRunner(
143
+ const rootCauseRunner = new DiagRootCauseRunner(
83
144
  {
84
145
  stateManager,
146
+ runtimeAdapter,
147
+ eventEmitter,
148
+ artifactStore: stateManager.piArtifactStore,
149
+ validator: new DefaultDiagRootCauseValidator(),
85
150
  contextAssembler,
151
+ },
152
+ {
153
+ owner: 'synthetic-baseline',
154
+ runtimeKind: 'test-double',
155
+ pollIntervalMs: 50,
156
+ timeoutMs: 10000,
157
+ },
158
+ );
159
+
160
+ const distillerRunner = new DiagDistillerRunner(
161
+ {
162
+ stateManager,
86
163
  runtimeAdapter,
87
164
  eventEmitter,
88
- validator,
165
+ artifactStore: stateManager.piArtifactStore,
166
+ validator: new DefaultDiagDistillerValidator(),
167
+ },
168
+ {
169
+ owner: 'synthetic-baseline',
170
+ runtimeKind: 'test-double',
171
+ pollIntervalMs: 50,
172
+ timeoutMs: 10000,
173
+ },
174
+ );
175
+
176
+ const routerRunner = new DiagRouterRunner(
177
+ {
178
+ stateManager,
179
+ runtimeAdapter,
180
+ eventEmitter,
181
+ artifactStore: stateManager.piArtifactStore,
89
182
  committer,
90
183
  },
91
184
  {
@@ -96,6 +189,15 @@ export async function runSyntheticBaseline(opts: SyntheticBaselineRunnerOptions)
96
189
  },
97
190
  );
98
191
 
192
+ const runner = new SplitDiagnosticianRunner({
193
+ rootCauseRunner,
194
+ distillerRunner,
195
+ routerRunner,
196
+ stateManager,
197
+ committer,
198
+ perStageTimeoutMs: 10000,
199
+ });
200
+
99
201
  const ledgerAdapter = new PrincipleTreeLedgerAdapter({ stateDir });
100
202
  const intakeService = new CandidateIntakeService({ stateManager, ledgerAdapter });
101
203
 
@@ -758,9 +758,18 @@ describe('CLI command wiring (pd console open)', () => {
758
758
 
759
759
  function runPd(args: string[], cwd: string): string {
760
760
  try {
761
+ const env: Record<string, string> = { ...process.env };
762
+ if (!args.includes('--workspace') && !args.includes('--help') && !args.includes('-h')) {
763
+ env.USERPROFILE = '/nonexistent';
764
+ env.HOME = '/nonexistent';
765
+ env.HOMEPATH = '/nonexistent';
766
+ env.HOMEDRIVE = '/nonexistent';
767
+ delete env.PD_WORKSPACE_DIR;
768
+ }
761
769
  return execFileSync('node', [getBuiltPdCliPath(), ...args], {
762
770
  encoding: 'utf8',
763
771
  cwd,
772
+ env,
764
773
  });
765
774
  } catch (err: unknown) {
766
775
  if (err && typeof err === 'object' && Object.hasOwn(err, 'stdout')) {