@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.
- package/dist/commands/pain-evidence.d.ts +41 -0
- package/dist/commands/pain-evidence.d.ts.map +1 -0
- package/dist/commands/pain-evidence.js +177 -0
- package/dist/commands/pain-evidence.js.map +1 -0
- package/dist/commands/runtime-uat.d.ts +1 -0
- package/dist/commands/runtime-uat.d.ts.map +1 -1
- package/dist/commands/runtime-uat.guard.test.d.ts +2 -0
- package/dist/commands/runtime-uat.guard.test.d.ts.map +1 -0
- package/dist/commands/runtime-uat.guard.test.js +155 -0
- package/dist/commands/runtime-uat.guard.test.js.map +1 -0
- package/dist/commands/runtime-uat.js +29 -3
- package/dist/commands/runtime-uat.js.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/production-workspace-guard.d.ts +77 -0
- package/dist/utils/production-workspace-guard.d.ts.map +1 -0
- package/dist/utils/production-workspace-guard.js +170 -0
- package/dist/utils/production-workspace-guard.js.map +1 -0
- package/dist/utils/production-workspace-guard.test.d.ts +2 -0
- package/dist/utils/production-workspace-guard.test.d.ts.map +1 -0
- package/dist/utils/production-workspace-guard.test.js +95 -0
- package/dist/utils/production-workspace-guard.test.js.map +1 -0
- package/package.json +1 -1
- package/src/commands/pain-evidence.ts +210 -0
- package/src/commands/runtime-uat.guard.test.ts +177 -0
- package/src/commands/runtime-uat.ts +42 -4
- package/src/index.ts +13 -0
- package/src/utils/production-workspace-guard.test.ts +108 -0
- package/src/utils/production-workspace-guard.ts +219 -0
- package/tests/commands/pain-evidence.test.ts +479 -0
- 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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-uat.d.ts","sourceRoot":"","sources":["../../src/commands/runtime-uat.ts"],"names":[],"mappings":"
|
|
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 @@
|
|
|
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
|