@zigrivers/scaffold 3.13.0 → 3.14.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 (73) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/commands/adopt.d.ts.map +1 -1
  3. package/dist/cli/commands/adopt.js +8 -7
  4. package/dist/cli/commands/adopt.js.map +1 -1
  5. package/dist/cli/commands/adopt.serialization.test.js +8 -0
  6. package/dist/cli/commands/adopt.serialization.test.js.map +1 -1
  7. package/dist/cli/commands/adopt.test.js +8 -0
  8. package/dist/cli/commands/adopt.test.js.map +1 -1
  9. package/dist/cli/commands/build.d.ts.map +1 -1
  10. package/dist/cli/commands/build.js +191 -180
  11. package/dist/cli/commands/build.js.map +1 -1
  12. package/dist/cli/commands/complete.d.ts.map +1 -1
  13. package/dist/cli/commands/complete.js +16 -12
  14. package/dist/cli/commands/complete.js.map +1 -1
  15. package/dist/cli/commands/complete.test.js +14 -5
  16. package/dist/cli/commands/complete.test.js.map +1 -1
  17. package/dist/cli/commands/init.d.ts.map +1 -1
  18. package/dist/cli/commands/init.js +43 -49
  19. package/dist/cli/commands/init.js.map +1 -1
  20. package/dist/cli/commands/init.test.js +33 -27
  21. package/dist/cli/commands/init.test.js.map +1 -1
  22. package/dist/cli/commands/reset.d.ts.map +1 -1
  23. package/dist/cli/commands/reset.js +44 -40
  24. package/dist/cli/commands/reset.js.map +1 -1
  25. package/dist/cli/commands/reset.test.js +42 -20
  26. package/dist/cli/commands/reset.test.js.map +1 -1
  27. package/dist/cli/commands/rework.d.ts.map +1 -1
  28. package/dist/cli/commands/rework.js +16 -12
  29. package/dist/cli/commands/rework.js.map +1 -1
  30. package/dist/cli/commands/rework.test.js +12 -3
  31. package/dist/cli/commands/rework.test.js.map +1 -1
  32. package/dist/cli/commands/run.d.ts.map +1 -1
  33. package/dist/cli/commands/run.js +318 -298
  34. package/dist/cli/commands/run.js.map +1 -1
  35. package/dist/cli/commands/run.test.js +92 -120
  36. package/dist/cli/commands/run.test.js.map +1 -1
  37. package/dist/cli/commands/skip.d.ts.map +1 -1
  38. package/dist/cli/commands/skip.js +19 -15
  39. package/dist/cli/commands/skip.js.map +1 -1
  40. package/dist/cli/commands/skip.test.js +22 -11
  41. package/dist/cli/commands/skip.test.js.map +1 -1
  42. package/dist/cli/commands/update.d.ts.map +1 -1
  43. package/dist/cli/commands/update.js +3 -1
  44. package/dist/cli/commands/update.js.map +1 -1
  45. package/dist/cli/commands/update.test.js +8 -4
  46. package/dist/cli/commands/update.test.js.map +1 -1
  47. package/dist/cli/commands/version.d.ts.map +1 -1
  48. package/dist/cli/commands/version.js +3 -1
  49. package/dist/cli/commands/version.js.map +1 -1
  50. package/dist/cli/commands/version.test.js +9 -5
  51. package/dist/cli/commands/version.test.js.map +1 -1
  52. package/dist/cli/index.d.ts.map +1 -1
  53. package/dist/cli/index.js +2 -0
  54. package/dist/cli/index.js.map +1 -1
  55. package/dist/cli/output/interactive.d.ts +1 -0
  56. package/dist/cli/output/interactive.d.ts.map +1 -1
  57. package/dist/cli/output/interactive.js +5 -0
  58. package/dist/cli/output/interactive.js.map +1 -1
  59. package/dist/cli/shutdown.d.ts +51 -0
  60. package/dist/cli/shutdown.d.ts.map +1 -0
  61. package/dist/cli/shutdown.js +199 -0
  62. package/dist/cli/shutdown.js.map +1 -0
  63. package/dist/cli/shutdown.test.d.ts +2 -0
  64. package/dist/cli/shutdown.test.d.ts.map +1 -0
  65. package/dist/cli/shutdown.test.js +316 -0
  66. package/dist/cli/shutdown.test.js.map +1 -0
  67. package/dist/e2e/init.test.js +5 -4
  68. package/dist/e2e/init.test.js.map +1 -1
  69. package/dist/state/lock-manager.d.ts +1 -0
  70. package/dist/state/lock-manager.d.ts.map +1 -1
  71. package/dist/state/lock-manager.js +1 -1
  72. package/dist/state/lock-manager.js.map +1 -1
  73. package/package.json +1 -1
@@ -13,6 +13,7 @@ import { buildIndexWithOverrides, loadFullEntries } from '../../core/assembly/kn
13
13
  import { createAdapter } from '../../core/adapters/adapter.js';
14
14
  import { ensureScaffoldGitignore, findLegacyGeneratedOutputs } from '../../project/gitignore.js';
15
15
  import fs from 'node:fs';
16
+ import { shutdown } from '../shutdown.js';
16
17
  const buildCommand = {
17
18
  command: 'build',
18
19
  describe: 'Generate platform adapter output files',
@@ -35,188 +36,198 @@ const buildCommand = {
35
36
  },
36
37
  };
37
38
  export async function runBuild(argv, options = {}) {
38
- const startTime = Date.now();
39
- // Step 1: Resolve project root
40
- const projectRoot = argv.root ?? findProjectRoot(process.cwd());
41
- if (!projectRoot) {
42
- process.stderr.write('\u2717 error [PROJECT_NOT_INITIALIZED]: No .scaffold/ directory found\n' +
43
- ' Fix: Run `scaffold init` to initialize a project\n');
44
- return { exitCode: 1 };
45
- }
46
- const outputMode = resolveOutputMode(argv);
47
- const output = options.output ?? createOutputContext(outputMode);
48
- // Step 2: Load config
49
- const { config, errors: configErrors } = loadConfig(projectRoot, []);
50
- if (configErrors.length > 0) {
51
- displayErrors(configErrors, [], output);
52
- return { exitCode: 1, errors: configErrors };
53
- }
54
- if (!config) {
55
- output.error('Config not found');
56
- return { exitCode: 1 };
57
- }
58
- // Step 3: Discover meta-prompts from both pipeline/ and tools/ directories
59
- const metaPrompts = discoverAllMetaPrompts(getPackagePipelineDir(projectRoot), getPackageToolsDir(projectRoot));
60
- const stepNames = [...metaPrompts.keys()];
61
- // Step 4: Load presets (optional — failures are non-fatal)
62
- try {
63
- const methodologyDir = getPackageMethodologyDir(projectRoot);
64
- loadAllPresets(methodologyDir, stepNames);
65
- }
66
- catch (err) {
67
- process.stderr.write(`[scaffold] Warning: could not load methodology presets: ${err.message}\n`);
68
- }
69
- // Step 5: Build dependency graph
70
- const graph = buildGraph([...metaPrompts.values()].map(m => m.frontmatter), new Map());
71
- // Step 6: Detect cycles
72
- const cycles = detectCycles(graph);
73
- if (cycles.length > 0) {
74
- displayErrors(cycles, [], output);
75
- return { exitCode: 1, errors: cycles };
76
- }
77
- // Step 7: Topological sort (pipeline steps only — tools are excluded from graph)
78
- const sorted = topologicalSort(graph);
79
- // Append tools (category: 'tool') after pipeline steps — they aren't in the graph
80
- const toolSteps = [...metaPrompts.values()]
81
- .filter(m => m.frontmatter.category === 'tool')
82
- .map(m => m.frontmatter.name)
83
- .sort();
84
- const enabledSteps = [...sorted, ...toolSteps];
85
- // Step 8: Handle --validate-only
86
- if (argv['validate-only']) {
87
- const validationResult = { valid: true, stepCount: stepNames.length, cycles: 0 };
88
- output.success(`Validation passed: ${stepNames.length} steps, no cycles`);
89
- if (outputMode === 'json' && !options.suppressFinalResult) {
90
- output.result(validationResult);
91
- }
92
- return { exitCode: 0, data: validationResult };
93
- }
94
- // Step 9: Load knowledge index
95
- const kbIndex = buildIndexWithOverrides(projectRoot, getPackageKnowledgeDir(projectRoot));
96
- // Step 9.5: Ensure .gitignore and warn about legacy root output
97
- const gitignoreResult = ensureScaffoldGitignore(projectRoot);
98
- for (const warning of gitignoreResult.warnings) {
99
- output.warn(warning);
100
- }
101
- const legacyOutputs = findLegacyGeneratedOutputs(projectRoot);
102
- if (legacyOutputs.length > 0) {
103
- output.warn({
104
- code: 'LEGACY_GENERATED_OUTPUTS_PRESENT',
105
- message: [
106
- `Legacy root Scaffold outputs still exist: ${legacyOutputs.join(', ')}.`,
107
- 'See README migration instructions.',
108
- ].join(' '),
109
- context: { count: legacyOutputs.length },
110
- });
111
- }
112
- // Step 10: Build reverse dependency map (step → steps that come after it)
113
- const forwardDeps = new Map();
114
- for (const [stepName, _node] of graph.nodes) {
115
- // Find steps that list this step as a dependency
116
- const dependents = [];
117
- for (const [otherName, _otherNode] of graph.nodes) {
118
- if (otherName === stepName)
119
- continue;
120
- const otherMeta = metaPrompts.get(otherName);
121
- if (otherMeta?.frontmatter.dependencies.includes(stepName)) {
122
- dependents.push(otherName);
39
+ return shutdown.withContext('Cancelled. Partial output may exist. Run `scaffold build` to regenerate.', async () => {
40
+ const startTime = Date.now();
41
+ // Step 1: Resolve project root
42
+ const projectRoot = argv.root ?? findProjectRoot(process.cwd());
43
+ if (!projectRoot) {
44
+ process.stderr.write('\u2717 error [PROJECT_NOT_INITIALIZED]: No .scaffold/ directory found\n' +
45
+ ' Fix: Run `scaffold init` to initialize a project\n');
46
+ return { exitCode: 1 };
47
+ }
48
+ const outputMode = resolveOutputMode(argv);
49
+ const output = options.output ?? createOutputContext(outputMode);
50
+ // Step 2: Load config
51
+ const { config, errors: configErrors } = loadConfig(projectRoot, []);
52
+ if (configErrors.length > 0) {
53
+ displayErrors(configErrors, [], output);
54
+ return { exitCode: 1, errors: configErrors };
55
+ }
56
+ if (!config) {
57
+ output.error('Config not found');
58
+ return { exitCode: 1 };
59
+ }
60
+ // Step 3: Discover meta-prompts from both pipeline/ and tools/ directories
61
+ const metaPrompts = discoverAllMetaPrompts(getPackagePipelineDir(projectRoot), getPackageToolsDir(projectRoot));
62
+ const stepNames = [...metaPrompts.keys()];
63
+ // Step 4: Load presets (optional — failures are non-fatal)
64
+ try {
65
+ const methodologyDir = getPackageMethodologyDir(projectRoot);
66
+ loadAllPresets(methodologyDir, stepNames);
67
+ }
68
+ catch (err) {
69
+ process.stderr.write(`[scaffold] Warning: could not load methodology presets: ${err.message}\n`);
70
+ }
71
+ // Step 5: Build dependency graph
72
+ const graph = buildGraph([...metaPrompts.values()].map(m => m.frontmatter), new Map());
73
+ // Step 6: Detect cycles
74
+ const cycles = detectCycles(graph);
75
+ if (cycles.length > 0) {
76
+ displayErrors(cycles, [], output);
77
+ return { exitCode: 1, errors: cycles };
78
+ }
79
+ // Step 7: Topological sort (pipeline steps only — tools are excluded from graph)
80
+ const sorted = topologicalSort(graph);
81
+ // Append tools (category: 'tool') after pipeline steps — they aren't in the graph
82
+ const toolSteps = [...metaPrompts.values()]
83
+ .filter(m => m.frontmatter.category === 'tool')
84
+ .map(m => m.frontmatter.name)
85
+ .sort();
86
+ const enabledSteps = [...sorted, ...toolSteps];
87
+ // Step 8: Handle --validate-only
88
+ if (argv['validate-only']) {
89
+ const validationResult = { valid: true, stepCount: stepNames.length, cycles: 0 };
90
+ output.success(`Validation passed: ${stepNames.length} steps, no cycles`);
91
+ if (outputMode === 'json' && !options.suppressFinalResult) {
92
+ output.result(validationResult);
123
93
  }
94
+ return { exitCode: 0, data: validationResult };
124
95
  }
125
- forwardDeps.set(stepName, dependents);
126
- }
127
- // Step 11: Create adapters and generate
128
- const configuredPlatforms = config.platforms ?? ['claude-code'];
129
- const platforms = [...new Set([...configuredPlatforms, 'universal'])];
130
- const allOutputFiles = [];
131
- for (const platformId of platforms) {
132
- const adapter = createAdapter(platformId);
133
- adapter.initialize({
134
- projectRoot,
135
- methodology: config.methodology ?? 'deep',
136
- allSteps: stepNames,
137
- });
138
- const results = [];
139
- for (const stepSlug of enabledSteps) {
140
- const meta = metaPrompts.get(stepSlug);
141
- if (!meta)
142
- continue;
143
- // Load full knowledge entries (Summary + Deep Guidance) for self-contained commands
144
- const kbNames = meta.frontmatter.knowledgeBase ?? [];
145
- const { entries: kbEntries } = loadFullEntries(kbIndex, kbNames);
146
- // Build long description: prefer summary, then Purpose section first line, then description
147
- const purposeSection = meta.sections['Purpose'] ?? '';
148
- const longDescription = meta.frontmatter.summary
149
- ?? purposeSection.split('\n')[0]?.trim()
150
- ?? meta.frontmatter.description;
151
- const input = {
152
- slug: stepSlug,
153
- description: meta.frontmatter.description,
154
- phase: meta.frontmatter.phase,
155
- dependsOn: forwardDeps.get(stepSlug) ?? [],
156
- produces: meta.frontmatter.outputs,
157
- pipelineIndex: enabledSteps.indexOf(stepSlug),
158
- body: meta.body,
159
- sections: meta.sections,
160
- knowledgeEntries: kbEntries.map(e => ({
161
- name: e.name,
162
- description: e.description,
163
- content: e.content,
164
- })),
165
- conditional: meta.frontmatter.conditional,
166
- longDescription,
167
- };
168
- const stepResult = adapter.generateStepWrapper(input);
169
- results.push(stepResult);
170
- allOutputFiles.push(...stepResult.files);
171
- }
172
- const finalizeResult = adapter.finalize({ results });
173
- allOutputFiles.push(...finalizeResult.files);
174
- }
175
- // Step 12: Write output files
176
- let generatedCount = 0;
177
- for (const file of allOutputFiles) {
178
- const fullPath = path.join(projectRoot, file.relativePath);
179
- const dir = path.dirname(fullPath);
180
- if (!fs.existsSync(dir)) {
181
- fs.mkdirSync(dir, { recursive: true });
182
- }
183
- atomicWriteFile(fullPath, file.content);
184
- generatedCount++;
185
- }
186
- // Step 12.5: Generate resolved skills for plugin auto-discovery
187
- const skillTemplateDir = path.join(getPackageRoot(), 'content', 'skills');
188
- const skillOutputDir = path.join(getPackageRoot(), 'skills');
189
- if (fs.existsSync(skillTemplateDir)) {
190
- const claudeVars = { INSTRUCTIONS_FILE: 'CLAUDE.md' };
191
- for (const skillName of fs.readdirSync(skillTemplateDir)) {
192
- const templatePath = path.join(skillTemplateDir, skillName, 'SKILL.md');
193
- if (!fs.existsSync(templatePath))
194
- continue;
195
- const template = fs.readFileSync(templatePath, 'utf8');
196
- const resolved = template.replace(/\{\{(\w+)\}\}/g, (match, key) => claudeVars[key] ?? match);
197
- const outDir = path.join(skillOutputDir, skillName);
198
- fs.mkdirSync(outDir, { recursive: true });
199
- fs.writeFileSync(path.join(outDir, 'SKILL.md'), resolved, 'utf8');
200
- }
201
- }
202
- // Step 13: Report build stats
203
- const buildResult = {
204
- stepsTotal: stepNames.length,
205
- stepsEnabled: enabledSteps.length,
206
- platforms,
207
- generatedFiles: generatedCount,
208
- buildTimeMs: Date.now() - startTime,
209
- };
210
- if (outputMode === 'json') {
211
- if (!options.suppressFinalResult) {
212
- output.result(buildResult);
213
- }
214
- }
215
- else {
216
- output.success(`Build complete: ${generatedCount} files generated for ${enabledSteps.length} steps`);
217
- output.info(`Platforms: ${platforms.join(', ')}`);
218
- }
219
- return { exitCode: 0, data: buildResult };
96
+ // Step 9: Load knowledge index
97
+ const kbIndex = buildIndexWithOverrides(projectRoot, getPackageKnowledgeDir(projectRoot));
98
+ // Step 9.5: Ensure .gitignore and warn about legacy root output
99
+ const gitignoreResult = ensureScaffoldGitignore(projectRoot);
100
+ for (const warning of gitignoreResult.warnings) {
101
+ output.warn(warning);
102
+ }
103
+ const legacyOutputs = findLegacyGeneratedOutputs(projectRoot);
104
+ if (legacyOutputs.length > 0) {
105
+ output.warn({
106
+ code: 'LEGACY_GENERATED_OUTPUTS_PRESENT',
107
+ message: [
108
+ `Legacy root Scaffold outputs still exist: ${legacyOutputs.join(', ')}.`,
109
+ 'See README migration instructions.',
110
+ ].join(' '),
111
+ context: { count: legacyOutputs.length },
112
+ });
113
+ }
114
+ // Step 10: Build reverse dependency map (step steps that come after it)
115
+ const forwardDeps = new Map();
116
+ for (const [stepName, _node] of graph.nodes) {
117
+ // Find steps that list this step as a dependency
118
+ const dependents = [];
119
+ for (const [otherName, _otherNode] of graph.nodes) {
120
+ if (otherName === stepName)
121
+ continue;
122
+ const otherMeta = metaPrompts.get(otherName);
123
+ if (otherMeta?.frontmatter.dependencies.includes(stepName)) {
124
+ dependents.push(otherName);
125
+ }
126
+ }
127
+ forwardDeps.set(stepName, dependents);
128
+ }
129
+ // Step 11: Create adapters and generate
130
+ const configuredPlatforms = config.platforms ?? ['claude-code'];
131
+ const platforms = [...new Set([...configuredPlatforms, 'universal'])];
132
+ const allOutputFiles = [];
133
+ for (const platformId of platforms) {
134
+ const adapter = createAdapter(platformId);
135
+ adapter.initialize({
136
+ projectRoot,
137
+ methodology: config.methodology ?? 'deep',
138
+ allSteps: stepNames,
139
+ });
140
+ const results = [];
141
+ for (const stepSlug of enabledSteps) {
142
+ const meta = metaPrompts.get(stepSlug);
143
+ if (!meta)
144
+ continue;
145
+ // Load full knowledge entries (Summary + Deep Guidance) for self-contained commands
146
+ const kbNames = meta.frontmatter.knowledgeBase ?? [];
147
+ const { entries: kbEntries } = loadFullEntries(kbIndex, kbNames);
148
+ // Build long description: prefer summary, then Purpose section first line, then description
149
+ const purposeSection = meta.sections['Purpose'] ?? '';
150
+ const longDescription = meta.frontmatter.summary
151
+ ?? purposeSection.split('\n')[0]?.trim()
152
+ ?? meta.frontmatter.description;
153
+ const input = {
154
+ slug: stepSlug,
155
+ description: meta.frontmatter.description,
156
+ phase: meta.frontmatter.phase,
157
+ dependsOn: forwardDeps.get(stepSlug) ?? [],
158
+ produces: meta.frontmatter.outputs,
159
+ pipelineIndex: enabledSteps.indexOf(stepSlug),
160
+ body: meta.body,
161
+ sections: meta.sections,
162
+ knowledgeEntries: kbEntries.map(e => ({
163
+ name: e.name,
164
+ description: e.description,
165
+ content: e.content,
166
+ })),
167
+ conditional: meta.frontmatter.conditional,
168
+ longDescription,
169
+ };
170
+ const stepResult = adapter.generateStepWrapper(input);
171
+ results.push(stepResult);
172
+ allOutputFiles.push(...stepResult.files);
173
+ }
174
+ const finalizeResult = adapter.finalize({ results });
175
+ allOutputFiles.push(...finalizeResult.files);
176
+ }
177
+ // Step 12: Write output files
178
+ let generatedCount = 0;
179
+ for (const file of allOutputFiles) {
180
+ if (shutdown.isShuttingDown)
181
+ break;
182
+ const fullPath = path.join(projectRoot, file.relativePath);
183
+ const dir = path.dirname(fullPath);
184
+ if (!fs.existsSync(dir)) {
185
+ fs.mkdirSync(dir, { recursive: true });
186
+ }
187
+ atomicWriteFile(fullPath, file.content);
188
+ generatedCount++;
189
+ }
190
+ // Step 12.5: Generate resolved skills for plugin auto-discovery
191
+ const skillTemplateDir = path.join(getPackageRoot(), 'content', 'skills');
192
+ const skillOutputDir = path.join(getPackageRoot(), 'skills');
193
+ if (fs.existsSync(skillTemplateDir)) {
194
+ const claudeVars = { INSTRUCTIONS_FILE: 'CLAUDE.md' };
195
+ for (const skillName of fs.readdirSync(skillTemplateDir)) {
196
+ if (shutdown.isShuttingDown)
197
+ break;
198
+ const templatePath = path.join(skillTemplateDir, skillName, 'SKILL.md');
199
+ if (!fs.existsSync(templatePath))
200
+ continue;
201
+ const template = fs.readFileSync(templatePath, 'utf8');
202
+ const resolved = template.replace(/\{\{(\w+)\}\}/g, (match, key) => claudeVars[key] ?? match);
203
+ const outDir = path.join(skillOutputDir, skillName);
204
+ fs.mkdirSync(outDir, { recursive: true });
205
+ fs.writeFileSync(path.join(outDir, 'SKILL.md'), resolved, 'utf8');
206
+ }
207
+ }
208
+ // Step 13: Report build stats
209
+ const buildResult = {
210
+ stepsTotal: stepNames.length,
211
+ stepsEnabled: enabledSteps.length,
212
+ platforms,
213
+ generatedFiles: generatedCount,
214
+ buildTimeMs: Date.now() - startTime,
215
+ };
216
+ // If shutdown interrupted the build, return early without success message
217
+ if (shutdown.isShuttingDown) {
218
+ return { exitCode: 1, data: buildResult };
219
+ }
220
+ if (outputMode === 'json') {
221
+ if (!options.suppressFinalResult) {
222
+ output.result(buildResult);
223
+ }
224
+ }
225
+ else {
226
+ output.success(`Build complete: ${generatedCount} files generated for ${enabledSteps.length} steps`);
227
+ output.info(`Platforms: ${platforms.join(', ')}`);
228
+ }
229
+ return { exitCode: 0, data: buildResult };
230
+ }); // end withContext
220
231
  }
221
232
  export default buildCommand;
222
233
  //# sourceMappingURL=build.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"complete.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/complete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAU1C,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,QAAA,MAAM,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,CAuGzE,CAAA;AAED,eAAe,eAAe,CAAA"}
1
+ {"version":3,"file":"complete.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/complete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAW1C,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,QAAA,MAAM,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,CA4GzE,CAAA;AAED,eAAe,eAAe,CAAA"}
@@ -2,10 +2,11 @@ import { findProjectRoot } from '../middleware/project-root.js';
2
2
  import { resolveOutputMode } from '../middleware/output-mode.js';
3
3
  import { createOutputContext } from '../output/context.js';
4
4
  import { StateManager } from '../../state/state-manager.js';
5
- import { acquireLock, releaseLock } from '../../state/lock-manager.js';
5
+ import { acquireLock, getLockPath, releaseLock } from '../../state/lock-manager.js';
6
6
  import { findClosestMatch } from '../../utils/levenshtein.js';
7
7
  import { loadPipelineContext } from '../../core/pipeline/context.js';
8
8
  import { resolvePipeline } from '../../core/pipeline/resolver.js';
9
+ import { shutdown } from '../shutdown.js';
9
10
  const completeCommand = {
10
11
  command: 'complete <step>',
11
12
  describe: 'Mark a step as completed (for steps executed outside scaffold run)',
@@ -34,10 +35,18 @@ const completeCommand = {
34
35
  else {
35
36
  output.warn('Lock is held by another process');
36
37
  }
37
- process.exit(3);
38
+ process.exitCode = 3;
38
39
  return;
39
40
  }
40
- try {
41
+ if (lockResult.acquired) {
42
+ shutdown.registerLockOwnership(getLockPath(projectRoot));
43
+ }
44
+ await shutdown.withResource('lock', () => {
45
+ if (lockResult.acquired) {
46
+ releaseLock(projectRoot);
47
+ shutdown.releaseLockOwnership();
48
+ }
49
+ }, async () => {
41
50
  const context = loadPipelineContext(projectRoot);
42
51
  const pipeline = resolvePipeline(context);
43
52
  const stateManager = new StateManager(projectRoot, pipeline.computeEligible);
@@ -54,7 +63,7 @@ const completeCommand = {
54
63
  exitCode: 2,
55
64
  recovery: 'Run `scaffold list` to see available steps',
56
65
  });
57
- process.exit(2);
66
+ process.exitCode = 2;
58
67
  return;
59
68
  }
60
69
  const stepEntry = state.steps[argv.step];
@@ -66,7 +75,7 @@ const completeCommand = {
66
75
  else {
67
76
  output.info(`Step '${argv.step}' is already completed`);
68
77
  }
69
- process.exit(0);
78
+ process.exitCode = 0;
70
79
  return;
71
80
  }
72
81
  const previousStatus = stepEntry.status;
@@ -94,13 +103,8 @@ const completeCommand = {
94
103
  output.success(`Step '${argv.step}' marked as completed (was ${previousStatus})`);
95
104
  output.info('Run `scaffold next` to see eligible steps');
96
105
  }
97
- process.exit(0);
98
- }
99
- finally {
100
- if (lockResult.acquired) {
101
- releaseLock(projectRoot);
102
- }
103
- }
106
+ process.exitCode = 0;
107
+ });
104
108
  },
105
109
  };
106
110
  export default completeCommand;
@@ -1 +1 @@
1
- {"version":3,"file":"complete.js","sourceRoot":"","sources":["../../../src/cli/commands/complete.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"complete.js","sourceRoot":"","sources":["../../../src/cli/commands/complete.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAWzC,MAAM,eAAe,GAAyD;IAC5E,OAAO,EAAE,iBAAiB;IAC1B,QAAQ,EAAE,oEAAoE;IAC9E,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QACjB,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE;YAC9B,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,gCAAgC;YAC7C,YAAY,EAAE,IAAI;SACnB,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,IAAI,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAC/D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAA;YAC/F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACf,OAAM;QACR,CAAC;QAED,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;QAC1C,MAAM,MAAM,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAA;QAE9C,eAAe;QACf,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAClE,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACxC,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;YACtE,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAA;YAChD,CAAC;YACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;YACpB,OAAM;QACR,CAAC;QAED,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YACxB,QAAQ,CAAC,qBAAqB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAA;QAC1D,CAAC;QAED,MAAM,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;YACvC,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACxB,WAAW,CAAC,WAAW,CAAC,CAAA;gBACxB,QAAQ,CAAC,oBAAoB,EAAE,CAAA;YACjC,CAAC;QACH,CAAC,EAAE,KAAK,IAAI,EAAE;YACZ,MAAM,OAAO,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAA;YAChD,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;YACzC,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAA;YAC5E,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,EAAE,CAAA;YAEtC,6BAA6B;YAC7B,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;gBACxE,MAAM,GAAG,GAAG,UAAU;oBACpB,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,8BAA8B,UAAU,IAAI;oBAChE,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,aAAa,CAAA;gBACnC,MAAM,CAAC,KAAK,CAAC;oBACX,IAAI,EAAE,oBAAoB;oBAC1B,OAAO,EAAE,GAAG;oBACZ,QAAQ,EAAE,CAAC;oBACX,QAAQ,EAAE,4CAA4C;iBACvD,CAAC,CAAA;gBACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;gBACpB,OAAM;YACR,CAAC;YAED,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAExC,8CAA8C;YAC9C,IAAI,SAAS,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBACrC,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;oBAC1B,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAA;gBACjF,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,wBAAwB,CAAC,CAAA;gBACzD,CAAC;gBACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;gBACpB,OAAM;YACR,CAAC;YAED,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAA;YAEvC,oBAAoB;YACpB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACvB,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,UAAU;gBACtC,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,EAAE;gBAClC,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC5B,YAAY,EAAE,MAAM;aACrB,CAAA;YAED,+CAA+C;YAC/C,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC1C,KAAK,CAAC,WAAW,GAAG,IAAI,CAAA;YAC1B,CAAC;YAED,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YAE7B,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;gBAC1B,MAAM,CAAC,MAAM,CAAC;oBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,cAAc;oBACd,SAAS,EAAE,WAAW;iBACvB,CAAC,CAAA;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,IAAI,8BAA8B,cAAc,GAAG,CAAC,CAAA;gBACjF,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAA;YAC1D,CAAC;YACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;QACtB,CAAC,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;AAED,eAAe,eAAe,CAAA"}
@@ -13,8 +13,16 @@ vi.mock('../middleware/output-mode.js', () => ({
13
13
  }));
14
14
  vi.mock('../../state/lock-manager.js', () => ({
15
15
  acquireLock: vi.fn(() => ({ acquired: true })),
16
+ getLockPath: vi.fn(() => '/mock/.scaffold/lock.json'),
16
17
  releaseLock: vi.fn(),
17
18
  }));
19
+ vi.mock('../shutdown.js', () => ({
20
+ shutdown: {
21
+ registerLockOwnership: vi.fn(),
22
+ releaseLockOwnership: vi.fn(),
23
+ withResource: vi.fn(async (_name, _cleanup, fn) => fn()),
24
+ },
25
+ }));
18
26
  // ---------------------------------------------------------------------------
19
27
  // Imports (after mocks)
20
28
  // ---------------------------------------------------------------------------
@@ -48,6 +56,7 @@ describe('complete command', () => {
48
56
  mockResolveOutputMode.mockReturnValue('auto');
49
57
  });
50
58
  afterEach(() => {
59
+ process.exitCode = undefined;
51
60
  vi.restoreAllMocks();
52
61
  fs.rmSync(tempDir, { recursive: true, force: true });
53
62
  });
@@ -79,28 +88,28 @@ describe('complete command', () => {
79
88
  it('exits 2 when step not found in state', async () => {
80
89
  writeState({ 'some-other-step': { status: 'pending', source: 'pipeline' } });
81
90
  await completeCommand.handler(defaultArgv({ step: 'nonexistent' }));
82
- expect(exitSpy).toHaveBeenCalledWith(2);
91
+ expect(process.exitCode).toBe(2);
83
92
  });
84
93
  it('marks in_progress step as completed', async () => {
85
94
  writeState({ 'review-testing': { status: 'in_progress', source: 'pipeline' } });
86
95
  await completeCommand.handler(defaultArgv());
87
96
  const state = JSON.parse(fs.readFileSync(path.join(tempDir, '.scaffold', 'state.json'), 'utf8'));
88
97
  expect(state.steps['review-testing'].status).toBe('completed');
89
- expect(exitSpy).toHaveBeenCalledWith(0);
98
+ expect(process.exitCode).toBe(0);
90
99
  });
91
100
  it('marks pending step as completed', async () => {
92
101
  writeState({ 'review-testing': { status: 'pending', source: 'pipeline' } });
93
102
  await completeCommand.handler(defaultArgv());
94
103
  const state = JSON.parse(fs.readFileSync(path.join(tempDir, '.scaffold', 'state.json'), 'utf8'));
95
104
  expect(state.steps['review-testing'].status).toBe('completed');
96
- expect(exitSpy).toHaveBeenCalledWith(0);
105
+ expect(process.exitCode).toBe(0);
97
106
  });
98
107
  it('reports already completed step without error', async () => {
99
108
  writeState({ 'review-testing': { status: 'completed', source: 'pipeline' } });
100
109
  await completeCommand.handler(defaultArgv());
101
110
  const allOutput = writtenLines.join('');
102
111
  expect(allOutput).toContain('already completed');
103
- expect(exitSpy).toHaveBeenCalledWith(0);
112
+ expect(process.exitCode).toBe(0);
104
113
  });
105
114
  it('clears in_progress record when completing that step', async () => {
106
115
  const state = {
@@ -130,7 +139,7 @@ describe('complete command', () => {
130
139
  await completeCommand.handler(defaultArgv({ step: 'review-testin' }));
131
140
  const allOutput = writtenLines.join('');
132
141
  expect(allOutput).toContain('review-testing');
133
- expect(exitSpy).toHaveBeenCalledWith(2);
142
+ expect(process.exitCode).toBe(2);
134
143
  });
135
144
  });
136
145
  //# sourceMappingURL=complete.test.js.map