@principles/pd-cli 1.83.0 → 1.85.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/commands/pain-evidence.d.ts +41 -0
  2. package/dist/commands/pain-evidence.d.ts.map +1 -0
  3. package/dist/commands/pain-evidence.js +177 -0
  4. package/dist/commands/pain-evidence.js.map +1 -0
  5. package/dist/commands/runtime-uat.d.ts +1 -0
  6. package/dist/commands/runtime-uat.d.ts.map +1 -1
  7. package/dist/commands/runtime-uat.guard.test.d.ts +2 -0
  8. package/dist/commands/runtime-uat.guard.test.d.ts.map +1 -0
  9. package/dist/commands/runtime-uat.guard.test.js +155 -0
  10. package/dist/commands/runtime-uat.guard.test.js.map +1 -0
  11. package/dist/commands/runtime-uat.js +29 -3
  12. package/dist/commands/runtime-uat.js.map +1 -1
  13. package/dist/index.js +12 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/utils/production-workspace-guard.d.ts +77 -0
  16. package/dist/utils/production-workspace-guard.d.ts.map +1 -0
  17. package/dist/utils/production-workspace-guard.js +170 -0
  18. package/dist/utils/production-workspace-guard.js.map +1 -0
  19. package/dist/utils/production-workspace-guard.test.d.ts +2 -0
  20. package/dist/utils/production-workspace-guard.test.d.ts.map +1 -0
  21. package/dist/utils/production-workspace-guard.test.js +95 -0
  22. package/dist/utils/production-workspace-guard.test.js.map +1 -0
  23. package/package.json +1 -1
  24. package/src/commands/pain-evidence.ts +210 -0
  25. package/src/commands/runtime-uat.guard.test.ts +177 -0
  26. package/src/commands/runtime-uat.ts +42 -4
  27. package/src/index.ts +13 -0
  28. package/src/utils/production-workspace-guard.test.ts +108 -0
  29. package/src/utils/production-workspace-guard.ts +219 -0
  30. package/tests/commands/pain-evidence.test.ts +479 -0
  31. package/tests/commands/pain-retry.test.ts +64 -0
@@ -0,0 +1,41 @@
1
+ /**
2
+ * pd pain evidence command — PEAT-B2
3
+ *
4
+ * Query recent admission/trigger decisions from PD logs.
5
+ * This is a read-only diagnostic command — no side effects.
6
+ *
7
+ * Usage:
8
+ * pd pain evidence [--workspace <path>] [--limit N] [--json]
9
+ *
10
+ * Shows the most recent TRIGGER_DECISION log entries.
11
+ */
12
+ interface EvidenceOptions {
13
+ workspace?: string;
14
+ limit?: number;
15
+ json?: boolean;
16
+ }
17
+ interface TriggerDecisionEntry {
18
+ timestamp: string;
19
+ outcome: string;
20
+ sourceKind: string;
21
+ reason: string;
22
+ nextAction: string;
23
+ tool?: string;
24
+ path?: string;
25
+ painId?: string;
26
+ score?: number;
27
+ sessionId?: string;
28
+ }
29
+ /**
30
+ * Get the memory/logs directory for a workspace.
31
+ * SystemLogger writes to <workspace>/memory/logs/SYSTEM_YYYY-MM-DD.log.
32
+ */
33
+ declare function getLogDir(workspaceDir: string): string;
34
+ /**
35
+ * Parse TRIGGER_DECISION entries from a log file.
36
+ * Returns entries in reverse chronological order (newest first).
37
+ */
38
+ declare function parseTriggerDecisions(logContent: string): TriggerDecisionEntry[];
39
+ export declare function handlePainEvidence(opts: EvidenceOptions): Promise<void>;
40
+ export { parseTriggerDecisions, getLogDir };
41
+ //# sourceMappingURL=pain-evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pain-evidence.d.ts","sourceRoot":"","sources":["../../src/commands/pain-evidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,UAAU,eAAe;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,oBAAoB;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,iBAAS,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;GAGG;AACH,iBAAS,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAsCzE;AAsDD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAkE7E;AAID,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,177 @@
1
+ /**
2
+ * pd pain evidence command — PEAT-B2
3
+ *
4
+ * Query recent admission/trigger decisions from PD logs.
5
+ * This is a read-only diagnostic command — no side effects.
6
+ *
7
+ * Usage:
8
+ * pd pain evidence [--workspace <path>] [--limit N] [--json]
9
+ *
10
+ * Shows the most recent TRIGGER_DECISION log entries.
11
+ */
12
+ import * as fs from 'fs';
13
+ import * as path from 'path';
14
+ import { resolveWorkspaceDir } from '../resolve-workspace.js';
15
+ /**
16
+ * Get the memory/logs directory for a workspace.
17
+ * SystemLogger writes to <workspace>/memory/logs/SYSTEM_YYYY-MM-DD.log.
18
+ */
19
+ function getLogDir(workspaceDir) {
20
+ return path.join(workspaceDir, 'memory', 'logs');
21
+ }
22
+ /**
23
+ * Parse TRIGGER_DECISION entries from a log file.
24
+ * Returns entries in reverse chronological order (newest first).
25
+ */
26
+ function parseTriggerDecisions(logContent) {
27
+ const entries = [];
28
+ const lines = logContent.split('\n');
29
+ for (const line of lines) {
30
+ if (!line.includes('TRIGGER_DECISION'))
31
+ continue;
32
+ // Extract JSON payload from log line
33
+ const jsonStart = line.indexOf('{');
34
+ if (jsonStart === -1)
35
+ continue;
36
+ try {
37
+ const payload = JSON.parse(line.slice(jsonStart));
38
+ // Extract timestamp from log line prefix.
39
+ // SystemLogger produces two formats:
40
+ // - Plain: "2026-06-08 10:16:00 [INFO] ..."
41
+ // - Bracketed ISO: "[2026-06-08T10:16:00.123Z] [INFO] ..."
42
+ const tsMatch = /^(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})/.exec(line)
43
+ ?? /^\[(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z)\]/.exec(line);
44
+ entries.push({
45
+ timestamp: tsMatch?.[1] ?? new Date().toISOString(),
46
+ outcome: typeof payload.outcome === 'string' ? payload.outcome : 'unknown',
47
+ sourceKind: typeof payload.sourceKind === 'string' ? payload.sourceKind : 'unknown',
48
+ reason: typeof payload.reason === 'string' ? payload.reason : '',
49
+ nextAction: typeof payload.nextAction === 'string' ? payload.nextAction : '',
50
+ tool: typeof payload.tool === 'string' ? payload.tool : undefined,
51
+ path: typeof payload.path === 'string' ? payload.path : undefined,
52
+ painId: typeof payload.painId === 'string' ? payload.painId : undefined,
53
+ score: typeof payload.score === 'number' ? payload.score : undefined,
54
+ sessionId: typeof payload.sessionId === 'string' ? payload.sessionId : undefined,
55
+ });
56
+ }
57
+ catch (e) {
58
+ // Skip malformed entries — always log for operator visibility (EP-03)
59
+ console.error(`WARN: Malformed TRIGGER_DECISION entry: ${String(e).slice(0, 100)}`);
60
+ }
61
+ }
62
+ return entries;
63
+ }
64
+ /**
65
+ * Read recent trigger decisions from memory/logs files.
66
+ * SystemLogger writes date-stamped files: SYSTEM_YYYY-MM-DD.log.
67
+ */
68
+ function readRecentDecisions(logDir, limit) {
69
+ if (!fs.existsSync(logDir))
70
+ return [];
71
+ const logFiles = fs.readdirSync(logDir)
72
+ .filter(f => f.startsWith('SYSTEM_') && f.endsWith('.log'))
73
+ .sort()
74
+ .reverse(); // newest first
75
+ const allEntries = [];
76
+ for (const logFile of logFiles) {
77
+ if (allEntries.length >= limit)
78
+ break;
79
+ const filePath = path.join(logDir, logFile);
80
+ try {
81
+ const content = fs.readFileSync(filePath, 'utf8');
82
+ const entries = parseTriggerDecisions(content);
83
+ // Reverse per-file entries so combined list is newest-first.
84
+ // Log files are already sorted newest-first, but entries within
85
+ // each file are in chronological (oldest-first) order.
86
+ allEntries.push(...entries.reverse());
87
+ }
88
+ catch (e) {
89
+ // Skip unreadable files — always log for operator visibility (EP-03)
90
+ console.error(`WARN: Could not read log file ${logFile}: ${String(e).slice(0, 100)}`);
91
+ }
92
+ }
93
+ return allEntries.slice(0, limit);
94
+ }
95
+ function getOutcomeEmoji(outcome) {
96
+ switch (outcome) {
97
+ case 'diagnosis_created': return '🔧';
98
+ case 'manual_owner_admitted': return '✅';
99
+ case 'evidence_only': return '📋';
100
+ case 'health_only': return '💚';
101
+ case 'cooldown_skipped': return '⏳';
102
+ case 'owner_confirm_required': return '❓';
103
+ case 'refused': return '🚫';
104
+ default: return '❔';
105
+ }
106
+ }
107
+ function truncate(s, maxLen) {
108
+ if (s.length <= maxLen)
109
+ return s;
110
+ return s.slice(0, maxLen - 3) + '...';
111
+ }
112
+ export async function handlePainEvidence(opts) {
113
+ const { workspace, limit: rawLimit, json } = opts;
114
+ const workspaceDir = resolveWorkspaceDir(workspace);
115
+ const logDir = getLogDir(workspaceDir);
116
+ // Validate limit — fail loud for invalid values
117
+ let effectiveLimit = 20;
118
+ if (rawLimit !== undefined) {
119
+ if (!Number.isInteger(rawLimit) || rawLimit < 1 || rawLimit > 10000) {
120
+ const err = {
121
+ status: 'refused',
122
+ reason: `invalid_limit: limit must be an integer between 1 and 10000, got ${rawLimit}`,
123
+ nextAction: 'Pass --limit with a valid integer (1-10000)',
124
+ };
125
+ const { reason, nextAction } = err;
126
+ if (json) {
127
+ console.log(JSON.stringify({ count: 0, error: err }));
128
+ }
129
+ else {
130
+ console.error('Error: ' + reason);
131
+ console.error('Next: ' + nextAction);
132
+ }
133
+ process.exit(1);
134
+ return; // guard: test stubs of process.exit continue execution
135
+ }
136
+ effectiveLimit = rawLimit;
137
+ }
138
+ const decisions = readRecentDecisions(logDir, effectiveLimit);
139
+ if (json) {
140
+ console.log(JSON.stringify({ count: decisions.length, decisions, searchedPath: path.join(logDir, 'SYSTEM_*.log') }, null, 2));
141
+ return;
142
+ }
143
+ if (decisions.length === 0) {
144
+ console.log('No trigger decisions found in logs.');
145
+ console.log(`Searched: ${path.join(logDir, 'SYSTEM_*.log')}`);
146
+ console.log('Tip: Enable painEvidenceAdmission feature flag to start recording trigger decisions.');
147
+ return;
148
+ }
149
+ console.log(`Recent Pain Evidence Admission Decisions (${decisions.length}):`);
150
+ console.log('─'.repeat(80));
151
+ for (const d of decisions) {
152
+ const outcomeEmoji = getOutcomeEmoji(d.outcome);
153
+ console.log(` ${outcomeEmoji} [${d.timestamp}] ${d.outcome}`);
154
+ console.log(` Source: ${d.sourceKind} | Score: ${d.score ?? 'N/A'}`);
155
+ console.log(` Reason: ${truncate(d.reason, 100)}`);
156
+ if (d.nextAction && d.nextAction !== 'none') {
157
+ console.log(` Next: ${truncate(d.nextAction, 80)}`);
158
+ }
159
+ if (d.tool)
160
+ console.log(` Tool: ${d.tool} | Path: ${d.path ?? 'N/A'}`);
161
+ console.log();
162
+ }
163
+ // Summary
164
+ const byOutcome = new Map();
165
+ for (const d of decisions) {
166
+ byOutcome.set(d.outcome, (byOutcome.get(d.outcome) ?? 0) + 1);
167
+ }
168
+ console.log('─'.repeat(80));
169
+ console.log('Summary:');
170
+ for (const [outcome, count] of byOutcome) {
171
+ console.log(` ${getOutcomeEmoji(outcome)} ${outcome}: ${count}`);
172
+ }
173
+ }
174
+ // Export for testing
175
+ // istanbul ignore next
176
+ export { parseTriggerDecisions, getLogDir };
177
+ //# sourceMappingURL=pain-evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pain-evidence.js","sourceRoot":"","sources":["../../src/commands/pain-evidence.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ interface UatOptions {
3
3
  count?: number;
4
4
  minSuccessRate?: number;
5
5
  json?: boolean;
6
+ allowProductionWorkspaceForUat?: boolean;
6
7
  }
7
8
  interface PainRecordResult {
8
9
  iteration: number;
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-uat.d.ts","sourceRoot":"","sources":["../../src/commands/runtime-uat.ts"],"names":[],"mappings":"AAsBA,UAAU,UAAU;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,UAAU;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,mBAAmB,EAAE,OAAO,CAAC;IAC7B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B;AAID,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAcvD;AAID,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAkBvD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKvE;AAsCD,UAAU,eAAe;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,gBAAgB,CAgEzE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,CAqC5F;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,cAAc,SAAM,GAAG,OAAO,CAMtF;AAID,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAuEtE"}
1
+ {"version":3,"file":"runtime-uat.d.ts","sourceRoot":"","sources":["../../src/commands/runtime-uat.ts"],"names":[],"mappings":"AA4BA,UAAU,UAAU;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAC1C;AAED,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,UAAU;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,mBAAmB,EAAE,OAAO,CAAC;IAC7B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B;AAID,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAgBvD;AAID,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAkBvD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKvE;AAsCD,UAAU,eAAe;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,gBAAgB,CA4DzE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,CAqC5F;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,cAAc,SAAM,GAAG,OAAO,CAMtF;AAID,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAwGtE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=runtime-uat.guard.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-uat.guard.test.d.ts","sourceRoot":"","sources":["../../src/commands/runtime-uat.guard.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * PRI-334: Runtime UAT guard — command-level integration tests.
3
+ *
4
+ * These tests verify the guard is wired into the real Commander command
5
+ * and that refused paths do NOT call execFileSync (mutation prevention).
6
+ */
7
+ import { describe, it, expect, vi, beforeEach, afterAll, beforeAll } from 'vitest';
8
+ import { Command } from 'commander';
9
+ import * as path from 'path';
10
+ import * as os from 'os';
11
+ // ─── Mocks ─────────────────────────────────────────────────────────────────
12
+ const mockExecFileSync = vi.fn();
13
+ vi.mock('child_process', () => ({
14
+ execFileSync: mockExecFileSync,
15
+ }));
16
+ const { handleRuntimeUat } = await import('./runtime-uat.js');
17
+ const { guardUatWorkspace } = await import('../utils/production-workspace-guard.js');
18
+ // ─── Test Setup ─────────────────────────────────────────────────────────────
19
+ const capturedStderr = [];
20
+ const capturedStdout = [];
21
+ let capturedExitCode = null;
22
+ const originalExit = process.exit;
23
+ const originalError = console.error;
24
+ const originalLog = console.log;
25
+ const originalEnv = { ...process.env };
26
+ beforeAll(() => {
27
+ process.exit = vi.fn(((code) => {
28
+ capturedExitCode = code ?? 0;
29
+ }));
30
+ console.error = vi.fn((...args) => { capturedStderr.push(args.join(' ')); });
31
+ console.log = vi.fn((...args) => { capturedStdout.push(args.join(' ')); });
32
+ });
33
+ afterAll(() => {
34
+ process.exit = originalExit;
35
+ console.error = originalError;
36
+ console.log = originalLog;
37
+ process.env = originalEnv;
38
+ });
39
+ beforeEach(() => {
40
+ capturedExitCode = null;
41
+ capturedStderr.length = 0;
42
+ capturedStdout.length = 0;
43
+ mockExecFileSync.mockReset();
44
+ process.env = { ...process.env, MINIMAX_CN_API_KEY: 'test-key-for-pri-334' };
45
+ });
46
+ // ─── Tests ──────────────────────────────────────────────────────────────────
47
+ describe('PRI-334: production workspace refusal', () => {
48
+ it('refuses D: workspace with exit code 1', async () => {
49
+ mockExecFileSync.mockClear();
50
+ await handleRuntimeUat({ workspace: 'D:\\.openclaw\\workspace', count: 1 });
51
+ expect(capturedExitCode).toBe(1);
52
+ expect(mockExecFileSync).not.toHaveBeenCalled();
53
+ });
54
+ it('refuses C: workspace with exit code 1', async () => {
55
+ mockExecFileSync.mockClear();
56
+ await handleRuntimeUat({ workspace: 'C:\\.openclaw\\workspace', count: 1 });
57
+ expect(capturedExitCode).toBe(1);
58
+ expect(mockExecFileSync).not.toHaveBeenCalled();
59
+ });
60
+ it('refuses production workspace subdirectory', async () => {
61
+ mockExecFileSync.mockClear();
62
+ await handleRuntimeUat({ workspace: 'D:\\.openclaw\\workspace\\sub\\path', count: 1 });
63
+ expect(capturedExitCode).toBe(1);
64
+ expect(mockExecFileSync).not.toHaveBeenCalled();
65
+ });
66
+ });
67
+ describe('PRI-334: allowed paths (guard level)', () => {
68
+ it('allows temp workspace', () => {
69
+ const tempPath = path.join(os.tmpdir(), 'pd-test-' + Date.now());
70
+ expect(guardUatWorkspace(tempPath, 'test').refused).toBe(false);
71
+ });
72
+ it('allows workspace-test sibling (ERR-030)', () => {
73
+ expect(guardUatWorkspace('D:\\.openclaw\\workspace-test', 'test').refused).toBe(false);
74
+ });
75
+ it('allows workspace-backup sibling (ERR-030)', () => {
76
+ expect(guardUatWorkspace('D:\\.openclaw\\workspace-backup', 'test').refused).toBe(false);
77
+ });
78
+ });
79
+ describe('PRI-334: JSON output (EP-04)', () => {
80
+ it('outputs single JSON object with reason and nextAction', async () => {
81
+ mockExecFileSync.mockClear();
82
+ capturedStdout.length = 0;
83
+ await handleRuntimeUat({ workspace: 'D:\\.openclaw\\workspace', count: 1, json: true });
84
+ expect(capturedExitCode).toBe(1);
85
+ expect(mockExecFileSync).not.toHaveBeenCalled();
86
+ const jsonOutput = capturedStdout.join('');
87
+ const parsed = JSON.parse(jsonOutput);
88
+ expect(parsed).toMatchObject({
89
+ status: 'refused', reason: expect.any(String), nextAction: expect.any(String),
90
+ workspace: expect.any(String), isProduction: true,
91
+ });
92
+ expect(Array.isArray(parsed)).toBe(false);
93
+ });
94
+ });
95
+ describe('PRI-334: escape hatch', () => {
96
+ it('warns when allow-production-workspace-for-uat flag is set', async () => {
97
+ mockExecFileSync.mockClear();
98
+ mockExecFileSync.mockImplementation(() => '{"painId":"test","taskId":"t1","runId":"r1","candidateIds":["c1"],"ledgerEntryIds":["l1"]}');
99
+ capturedStderr.length = 0;
100
+ capturedExitCode = null;
101
+ await handleRuntimeUat({ workspace: 'D:\\.openclaw\\workspace', count: 1, allowProductionWorkspaceForUat: true });
102
+ const stderrText = capturedStderr.join('\n');
103
+ expect(stderrText).toContain('WARNING');
104
+ expect(stderrText).toContain('--allow-production-workspace-for-uat');
105
+ });
106
+ });
107
+ describe('PRI-334: mutation prevention', () => {
108
+ it('does not call execFileSync after guard refusal', async () => {
109
+ mockExecFileSync.mockClear();
110
+ await handleRuntimeUat({ workspace: 'D:\\.openclaw\\workspace', count: 1 });
111
+ expect(mockExecFileSync).not.toHaveBeenCalled();
112
+ });
113
+ });
114
+ describe('PRI-334: Commander flag wiring (ERR-063)', () => {
115
+ it('parses --allow-production-workspace-for-uat', () => {
116
+ const program = new Command();
117
+ const rt = program.command('runtime');
118
+ rt.command('uat')
119
+ .option('--allow-production-workspace-for-uat', 'Escape hatch')
120
+ .action(() => { });
121
+ const cmd = rt.commands.find((c) => c.name() === 'uat');
122
+ const opt = cmd.options.find((o) => o.long === '--allow-production-workspace-for-uat');
123
+ expect(opt).toBeDefined();
124
+ expect(opt?.long).toBe('--allow-production-workspace-for-uat');
125
+ });
126
+ it('negated form is NOT registered', () => {
127
+ const program = new Command();
128
+ const rt = program.command('runtime');
129
+ rt.command('uat')
130
+ .option('--allow-production-workspace-for-uat', 'Escape hatch')
131
+ .action(() => { });
132
+ const cmd = rt.commands.find((c) => c.name() === 'uat');
133
+ const noForm = cmd.options.find((o) => o.long === '--no-allow-production-workspace-for-uat');
134
+ expect(noForm).toBeUndefined();
135
+ });
136
+ });
137
+ describe('PRI-334: shouldExitWithError exit path (EP-04)', () => {
138
+ it('exits 1 and does not print ALL CHECKS PASSED when shouldExitWithError is true', async () => {
139
+ const tempWorkspace = path.join(os.tmpdir(), 'pd-exit-test-' + Date.now());
140
+ mockExecFileSync.mockClear();
141
+ // Make all iterations fail (execFileSync throws) so shouldExitWithError returns true
142
+ mockExecFileSync.mockRejectedValue(new Error('simulated failure'));
143
+ capturedStderr.length = 0;
144
+ capturedExitCode = null;
145
+ await handleRuntimeUat({
146
+ workspace: tempWorkspace,
147
+ count: 1,
148
+ minSuccessRate: 1.0,
149
+ });
150
+ expect(capturedExitCode).toBe(1);
151
+ const stderrText = capturedStderr.join('\n');
152
+ expect(stderrText).not.toContain('ALL CHECKS PASSED');
153
+ });
154
+ });
155
+ //# sourceMappingURL=runtime-uat.guard.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-uat.guard.test.js","sourceRoot":"","sources":["../../src/commands/runtime-uat.guard.test.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,7 @@ import { execFileSync } from 'child_process';
17
17
  import { fileURLToPath } from 'node:url';
18
18
  import * as path from 'path';
19
19
  import * as fs from 'fs';
20
+ import { guardUatWorkspace, formatGuardRefusal, } from '../utils/production-workspace-guard.js';
20
21
  // ── Argument parsing ─────────────────────────────────────────────────────────
21
22
  export function parseUatArgs(argv) {
22
23
  const args = { count: 5 };
@@ -32,6 +33,9 @@ export function parseUatArgs(argv) {
32
33
  const rate = parseFloat(argv[++i] ?? '1.0');
33
34
  args.minSuccessRate = isNaN(rate) ? 1.0 : rate;
34
35
  }
36
+ else if (argv[i] === '--allow-production-workspace-for-uat') {
37
+ args.allowProductionWorkspaceForUat = true;
38
+ }
35
39
  }
36
40
  return args;
37
41
  }
@@ -102,7 +106,6 @@ function pd(args, workspace, timeoutMs = 300_000) {
102
106
  export function runUatIteration(config) {
103
107
  const { iteration, reason, workspace, timeoutMs = 300_000 } = config;
104
108
  const iterStart = Date.now();
105
- // eslint-disable-next-line @typescript-eslint/init-declarations
106
109
  let recordOutput;
107
110
  try {
108
111
  recordOutput = pd(['pain', 'record', '--reason', reason, '--score', '85', '--source', 'manual', '--json'], workspace, timeoutMs);
@@ -121,7 +124,6 @@ export function runUatIteration(config) {
121
124
  };
122
125
  }
123
126
  const wallTimeMs = Date.now() - iterStart;
124
- // eslint-disable-next-line @typescript-eslint/init-declarations
125
127
  let parsed;
126
128
  try {
127
129
  parsed = parseJsonOutput(recordOutput);
@@ -138,7 +140,6 @@ export function runUatIteration(config) {
138
140
  ledgerEntryIds: [],
139
141
  };
140
142
  }
141
- // eslint-disable-next-line @typescript-eslint/init-declarations
142
143
  let auditStatus;
143
144
  try {
144
145
  const auditOut = pd(['candidate', 'audit', '--json'], workspace, 30_000);
@@ -218,12 +219,36 @@ export async function handleRuntimeUat(opts) {
218
219
  if (!workspace) {
219
220
  console.error('Error: --workspace <path> is required');
220
221
  process.exit(1);
222
+ return;
223
+ }
224
+ // PRI-334: Guard against writing to production workspace
225
+ const guardResult = guardUatWorkspace(workspace, 'pd runtime uat');
226
+ if (guardResult.refused && !opts.allowProductionWorkspaceForUat) {
227
+ // Fail loud with structured reason and nextAction (EP-03/EP-04)
228
+ const refused = guardResult;
229
+ const refusalOutput = formatGuardRefusal(refused, 'pd runtime uat', !!opts.json);
230
+ if (opts.json) {
231
+ console.log(refusalOutput);
232
+ }
233
+ else {
234
+ console.error(refusalOutput);
235
+ }
236
+ process.exit(1);
237
+ return;
238
+ }
239
+ if (guardResult.refused && opts.allowProductionWorkspaceForUat) {
240
+ // Escape hatch used: warn but allow
241
+ console.error('[pd-cli] WARNING: --allow-production-workspace-for-uat is set.');
242
+ console.error(' Test/synthetic data will be written to your production workspace.');
243
+ console.error(' This is not recommended and may pollute your real PD state.');
244
+ console.error('');
221
245
  }
222
246
  console.error(`[${new Date().toISOString()}] Runtime V2 Chain UAT — workspace: ${workspace}, count: ${count}`);
223
247
  // Check MINIMAX_CN_API_KEY
224
248
  if (!process.env.MINIMAX_CN_API_KEY) {
225
249
  console.error('Error: MINIMAX_CN_API_KEY environment variable not set');
226
250
  process.exit(1);
251
+ return;
227
252
  }
228
253
  const results = [];
229
254
  for (let i = 0; i < count; i++) {
@@ -267,6 +292,7 @@ export async function handleRuntimeUat(opts) {
267
292
  console.error(`FAIL: successRate=${summary.successRate} (threshold: ${minSuccessRate}) ` +
268
293
  `ledger=${summary.ledgerConsistencyOk} candidates=${summary.allHaveCandidates} ledger=${summary.allHaveLedger}`);
269
294
  process.exit(1);
295
+ return;
270
296
  }
271
297
  console.error('');
272
298
  console.error('✓ ALL CHECKS PASSED');
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-uat.js","sourceRoot":"","sources":["../../src/commands/runtime-uat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-uat.js","sourceRoot":"","sources":["../../src/commands/runtime-uat.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -8,6 +8,7 @@
8
8
  import { Command } from 'commander';
9
9
  import { handlePainRecord } from './commands/pain-record.js';
10
10
  import { handlePainRetry } from './commands/pain-retry.js';
11
+ import { handlePainEvidence } from './commands/pain-evidence.js';
11
12
  import { handleSamplesList } from './commands/samples-list.js';
12
13
  import { handleSamplesReview } from './commands/samples-review.js';
13
14
  import { handleEvolutionTasksList } from './commands/evolution-tasks-list.js';
@@ -90,6 +91,15 @@ painCmd
90
91
  .action(async (opts) => {
91
92
  await handlePainRetry(opts);
92
93
  });
94
+ painCmd
95
+ .command('evidence')
96
+ .description('Show recent pain admission/trigger decisions (PEAT-B2)')
97
+ .option('-w, --workspace <path>', 'Workspace directory')
98
+ .option('-l, --limit <number>', 'Max entries to show (default: 20)', parseInt)
99
+ .option('--json', 'Output raw JSON')
100
+ .action(async (opts) => {
101
+ await handlePainEvidence(opts);
102
+ });
93
103
  const samplesCmd = program
94
104
  .command('samples')
95
105
  .description('Correction sample management');
@@ -417,12 +427,14 @@ runtimeCmd
417
427
  .option('--count <n>', 'Number of iterations (default: 5, max: 50)', parseInt)
418
428
  .option('--min-success-rate <rate>', 'Minimum success rate threshold (default: 1.0)', parseFloat)
419
429
  .option('--json', 'Output machine-readable JSON summary')
430
+ .option('--allow-production-workspace-for-uat', 'DANGEROUS: Allow UAT to write to production workspace (NOT RECOMMENDED)')
420
431
  .action(async (opts) => {
421
432
  await handleRuntimeUat({
422
433
  workspace: opts.workspace,
423
434
  count: opts.count,
424
435
  minSuccessRate: opts.minSuccessRate,
425
436
  json: opts.json,
437
+ allowProductionWorkspaceForUat: opts.allowProductionWorkspaceForUat,
426
438
  });
427
439
  });
428
440
  const runtimeHealthCmd = runtimeCmd