@principles/pd-cli 1.103.0 → 1.104.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.
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-internalization-integrity-repair.d.ts","sourceRoot":"","sources":["../../src/commands/runtime-internalization-integrity-repair.ts"],"names":[],"mappings":"AAKA,UAAU,qCAAqC;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAiCD,wBAAsB,2CAA2C,CAAC,IAAI,EAAE,qCAAqC,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB5H"}
1
+ {"version":3,"file":"runtime-internalization-integrity-repair.d.ts","sourceRoot":"","sources":["../../src/commands/runtime-internalization-integrity-repair.ts"],"names":[],"mappings":"AAKA,UAAU,qCAAqC;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAiCD,wBAAsB,2CAA2C,CAAC,IAAI,EAAE,qCAAqC,GAAG,OAAO,CAAC,IAAI,CAAC,CA+C5H"}
@@ -30,25 +30,51 @@ function formatTextOutput(result) {
30
30
  return lines.join('\n');
31
31
  }
32
32
  export async function handleRuntimeInternalizationIntegrityRepair(opts) {
33
- const workspaceDir = opts.workspace
34
- ? path.resolve(opts.workspace)
35
- : resolveWorkspaceDir();
36
33
  if (opts.dryRun && opts.confirm) {
37
- console.error('Error: --dry-run and --confirm are mutually exclusive. Specify one or the other.');
34
+ if (opts.json) {
35
+ console.log(JSON.stringify({
36
+ ok: false,
37
+ reason: 'Error: --dry-run and --confirm are mutually exclusive',
38
+ nextAction: 'Specify only one of --dry-run or --confirm',
39
+ }, null, 2));
40
+ }
41
+ else {
42
+ console.error('Error: --dry-run and --confirm are mutually exclusive. Specify one or the other.');
43
+ }
38
44
  process.exit(1);
45
+ return;
39
46
  }
40
47
  const isDryRun = !opts.confirm;
41
- const remediation = new InternalizationIntegrityRemediation({ workspaceDir });
42
- const result = remediation.repair({ dryRun: isDryRun });
43
- if (opts.json) {
44
- console.log(JSON.stringify(result, null, 2));
45
- }
46
- else {
47
- console.log(formatTextOutput(result));
48
+ try {
49
+ const workspaceDir = opts.workspace
50
+ ? path.resolve(opts.workspace)
51
+ : resolveWorkspaceDir();
52
+ const remediation = new InternalizationIntegrityRemediation({ workspaceDir });
53
+ const result = remediation.repair({ dryRun: isDryRun });
54
+ if (opts.json) {
55
+ console.log(JSON.stringify(result, null, 2));
56
+ }
57
+ else {
58
+ console.log(formatTextOutput(result));
59
+ if (!isDryRun && result.repairedCount === 0 && result.actions.length > 0) {
60
+ console.error('');
61
+ console.error('NOTE: No repairs were made. All issues were already resolved or skipped.');
62
+ }
63
+ }
48
64
  }
49
- if (!isDryRun && result.repairedCount === 0 && result.actions.length > 0) {
50
- console.error('');
51
- console.error('NOTE: No repairs were made. All issues were already resolved or skipped.');
65
+ catch (err) {
66
+ if (opts.json) {
67
+ console.log(JSON.stringify({
68
+ ok: false,
69
+ reason: err instanceof Error ? err.message : String(err),
70
+ nextAction: 'Check workspace path and DB connectivity',
71
+ }, null, 2));
72
+ }
73
+ else {
74
+ console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
75
+ }
76
+ process.exit(1);
77
+ return;
52
78
  }
53
79
  }
54
80
  //# sourceMappingURL=runtime-internalization-integrity-repair.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-internalization-integrity-repair.js","sourceRoot":"","sources":["../../src/commands/runtime-internalization-integrity-repair.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-internalization-integrity-repair.js","sourceRoot":"","sources":["../../src/commands/runtime-internalization-integrity-repair.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.103.0",
3
+ "version": "1.104.0",
4
4
  "description": "PD CLI — Pain recording, sample management, and evolution tasks",
5
5
  "type": "module",
6
6
  "bin": {
@@ -42,28 +42,50 @@ function formatTextOutput(result: RemediationResult): string {
42
42
  }
43
43
 
44
44
  export async function handleRuntimeInternalizationIntegrityRepair(opts: InternalizationIntegrityRepairOptions): Promise<void> {
45
- const workspaceDir = opts.workspace
46
- ? path.resolve(opts.workspace)
47
- : resolveWorkspaceDir();
48
-
49
45
  if (opts.dryRun && opts.confirm) {
50
- console.error('Error: --dry-run and --confirm are mutually exclusive. Specify one or the other.');
46
+ if (opts.json) {
47
+ console.log(JSON.stringify({
48
+ ok: false,
49
+ reason: 'Error: --dry-run and --confirm are mutually exclusive',
50
+ nextAction: 'Specify only one of --dry-run or --confirm',
51
+ }, null, 2));
52
+ } else {
53
+ console.error('Error: --dry-run and --confirm are mutually exclusive. Specify one or the other.');
54
+ }
51
55
  process.exit(1);
56
+ return;
52
57
  }
53
58
 
54
59
  const isDryRun = !opts.confirm;
55
60
 
56
- const remediation = new InternalizationIntegrityRemediation({ workspaceDir });
57
- const result = remediation.repair({ dryRun: isDryRun });
61
+ try {
62
+ const workspaceDir = opts.workspace
63
+ ? path.resolve(opts.workspace)
64
+ : resolveWorkspaceDir();
58
65
 
59
- if (opts.json) {
60
- console.log(JSON.stringify(result, null, 2));
61
- } else {
62
- console.log(formatTextOutput(result));
63
- }
66
+ const remediation = new InternalizationIntegrityRemediation({ workspaceDir });
67
+ const result = remediation.repair({ dryRun: isDryRun });
64
68
 
65
- if (!isDryRun && result.repairedCount === 0 && result.actions.length > 0) {
66
- console.error('');
67
- console.error('NOTE: No repairs were made. All issues were already resolved or skipped.');
69
+ if (opts.json) {
70
+ console.log(JSON.stringify(result, null, 2));
71
+ } else {
72
+ console.log(formatTextOutput(result));
73
+ if (!isDryRun && result.repairedCount === 0 && result.actions.length > 0) {
74
+ console.error('');
75
+ console.error('NOTE: No repairs were made. All issues were already resolved or skipped.');
76
+ }
77
+ }
78
+ } catch (err: unknown) {
79
+ if (opts.json) {
80
+ console.log(JSON.stringify({
81
+ ok: false,
82
+ reason: err instanceof Error ? err.message : String(err),
83
+ nextAction: 'Check workspace path and DB connectivity',
84
+ }, null, 2));
85
+ } else {
86
+ console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
87
+ }
88
+ process.exit(1);
89
+ return;
68
90
  }
69
91
  }
@@ -203,6 +203,37 @@ describe('Commander wiring for integrity-repair', () => {
203
203
  program.parseAsync(['node', 'pd', 'internalization', 'integrity-repair', '--workspace', WS, '--dry-run', '--confirm', '--json']),
204
204
  ).rejects.toThrow('process.exit:1');
205
205
 
206
+ // Verify it printed a single JSON error object on stdout
207
+ expect(consoleLogSpy).toHaveBeenCalledTimes(1);
208
+ const jsonOutput = JSON.parse(consoleLogSpy.mock.calls[0][0]);
209
+ expect(jsonOutput).toMatchObject({
210
+ ok: false,
211
+ reason: expect.stringContaining('mutually exclusive'),
212
+ nextAction: expect.any(String),
213
+ });
214
+
215
+ exitSpy.mockRestore();
216
+ });
217
+
218
+ it('outputs structured JSON failure on exception in JSON mode', async () => {
219
+ mockRepair.mockImplementation(() => {
220
+ throw new Error('Database connection failed');
221
+ });
222
+ const exitSpy = vi.spyOn(process, 'exit').mockImplementation((code) => { throw new Error(`process.exit:${code}`); });
223
+
224
+ const program = createTestProgram();
225
+ await expect(
226
+ program.parseAsync(['node', 'pd', 'internalization', 'integrity-repair', '--workspace', WS, '--confirm', '--json']),
227
+ ).rejects.toThrow('process.exit:1');
228
+
229
+ expect(consoleLogSpy).toHaveBeenCalledTimes(1);
230
+ const jsonOutput = JSON.parse(consoleLogSpy.mock.calls[0][0]);
231
+ expect(jsonOutput).toMatchObject({
232
+ ok: false,
233
+ reason: 'Database connection failed',
234
+ nextAction: 'Check workspace path and DB connectivity',
235
+ });
236
+
206
237
  exitSpy.mockRestore();
207
238
  });
208
239
  });