@lumenflow/cli 2.13.0 → 2.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.
- package/README.md +105 -105
- package/dist/gates-graceful-degradation.js +151 -0
- package/dist/gates-graceful-degradation.js.map +1 -0
- package/dist/gates.js +90 -5
- package/dist/gates.js.map +1 -1
- package/dist/hooks/enforcement-checks.js +104 -37
- package/dist/hooks/enforcement-checks.js.map +1 -1
- package/dist/hooks/enforcement-generator.js +229 -28
- package/dist/hooks/enforcement-generator.js.map +1 -1
- package/dist/hooks/enforcement-sync.js +4 -1
- package/dist/hooks/enforcement-sync.js.map +1 -1
- package/dist/init.js +121 -12
- package/dist/init.js.map +1 -1
- package/dist/lifecycle-regression-harness.js +179 -0
- package/dist/lifecycle-regression-harness.js.map +1 -0
- package/dist/mem-recover.js +0 -0
- package/dist/public-manifest.js +7 -0
- package/dist/public-manifest.js.map +1 -1
- package/dist/wu-claim.js +132 -0
- package/dist/wu-claim.js.map +1 -1
- package/dist/wu-create.js +5 -1
- package/dist/wu-create.js.map +1 -1
- package/dist/wu-delete.js +196 -60
- package/dist/wu-delete.js.map +1 -1
- package/dist/wu-done.js +82 -14
- package/dist/wu-done.js.map +1 -1
- package/package.json +7 -6
- package/templates/vendors/claude/.claude/hooks/enforce-worktree.sh +78 -17
- package/templates/vendors/claude/.claude/hooks/session-start-recovery.sh +30 -0
package/dist/wu-delete.js
CHANGED
|
@@ -9,25 +9,30 @@
|
|
|
9
9
|
* 2) Ensure main is clean and up-to-date with origin
|
|
10
10
|
* 3) Create temp branch WITHOUT switching (main checkout stays on main)
|
|
11
11
|
* 4) Create micro-worktree in /tmp pointing to temp branch
|
|
12
|
-
* 5) Delete WU
|
|
12
|
+
* 5) Delete WU artifacts and clean references in micro-worktree
|
|
13
13
|
* 6) Commit, ff-only merge, push
|
|
14
14
|
* 7) Cleanup temp branch and micro-worktree
|
|
15
15
|
*
|
|
16
16
|
* Usage:
|
|
17
|
-
* pnpm wu:delete --id WU-123
|
|
18
|
-
* pnpm wu:delete --id WU-123 --dry-run
|
|
17
|
+
* pnpm wu:delete --id WU-123 # Single WU deletion
|
|
18
|
+
* pnpm wu:delete --id WU-123 --dry-run # Dry run
|
|
19
19
|
* pnpm wu:delete --batch WU-1,WU-2,WU-3 # Batch deletion
|
|
20
20
|
*/
|
|
21
21
|
import { existsSync, readFileSync, writeFileSync, unlinkSync, readdirSync } from 'node:fs';
|
|
22
22
|
import { join } from 'node:path';
|
|
23
23
|
import { getGitForCwd } from '@lumenflow/core/dist/git-adapter.js';
|
|
24
24
|
import { die } from '@lumenflow/core/dist/error-handler.js';
|
|
25
|
-
import { parseYAML
|
|
25
|
+
import { parseYAML } from '@lumenflow/core/dist/wu-yaml.js';
|
|
26
26
|
import { createWUParser, WU_OPTIONS } from '@lumenflow/core/dist/arg-parser.js';
|
|
27
27
|
import { WU_PATHS } from '@lumenflow/core/dist/wu-paths.js';
|
|
28
|
-
import {
|
|
28
|
+
import { generateBacklog, generateStatus } from '@lumenflow/core/dist/backlog-generator.js';
|
|
29
|
+
import { WUStateStore } from '@lumenflow/core/dist/wu-state-store.js';
|
|
30
|
+
import { FILE_SYSTEM, EXIT_CODES, MICRO_WORKTREE_OPERATIONS, LOG_PREFIX, WU_STATUS, LUMENFLOW_PATHS, } from '@lumenflow/core/dist/wu-constants.js';
|
|
29
31
|
import { ensureOnMain, ensureMainUpToDate, validateWUIDFormat, } from '@lumenflow/core/dist/wu-helpers.js';
|
|
30
32
|
import { withMicroWorktree } from '@lumenflow/core/dist/micro-worktree.js';
|
|
33
|
+
import { INIT_PATHS } from '@lumenflow/initiatives/dist/initiative-paths.js';
|
|
34
|
+
import { INIT_PATTERNS } from '@lumenflow/initiatives/dist/initiative-constants.js';
|
|
35
|
+
import { readInitiative, writeInitiative } from '@lumenflow/initiatives/dist/initiative-yaml.js';
|
|
31
36
|
const PREFIX = LOG_PREFIX.DELETE || '[wu:delete]';
|
|
32
37
|
const DELETE_OPTIONS = {
|
|
33
38
|
dryRun: {
|
|
@@ -83,21 +88,173 @@ function getStampPath(id) {
|
|
|
83
88
|
function stampExists(id) {
|
|
84
89
|
return existsSync(getStampPath(id));
|
|
85
90
|
}
|
|
86
|
-
function
|
|
87
|
-
if (!existsSync(
|
|
91
|
+
function removeEventsForDeletedWUs(eventsPath, ids) {
|
|
92
|
+
if (!existsSync(eventsPath)) {
|
|
88
93
|
return false;
|
|
89
94
|
}
|
|
90
|
-
const content = readFileSync(
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
95
|
+
const content = readFileSync(eventsPath, FILE_SYSTEM.ENCODING);
|
|
96
|
+
const lines = content.split('\n');
|
|
97
|
+
let changed = false;
|
|
98
|
+
const retained = [];
|
|
99
|
+
for (const line of lines) {
|
|
100
|
+
if (!line.trim()) {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
const event = JSON.parse(line);
|
|
105
|
+
if (event.wuId && ids.has(event.wuId.toUpperCase())) {
|
|
106
|
+
changed = true;
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
retained.push(line);
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
// Preserve malformed lines to avoid destructive cleanup of unrelated data
|
|
113
|
+
retained.push(line);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (!changed) {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
const next = retained.length > 0 ? `${retained.join('\n')}\n` : '';
|
|
120
|
+
writeFileSync(eventsPath, next, FILE_SYSTEM.ENCODING);
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
function getExistingWuIds(worktreePath) {
|
|
124
|
+
const wuIds = new Set();
|
|
125
|
+
const wuDir = join(worktreePath, WU_PATHS.WU_DIR());
|
|
126
|
+
if (!existsSync(wuDir)) {
|
|
127
|
+
return wuIds;
|
|
128
|
+
}
|
|
129
|
+
for (const file of readdirSync(wuDir)) {
|
|
130
|
+
if (!file.endsWith('.yaml')) {
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
const id = file.slice(0, -'.yaml'.length).toUpperCase();
|
|
134
|
+
if (id.startsWith('WU-')) {
|
|
135
|
+
wuIds.add(id);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return wuIds;
|
|
139
|
+
}
|
|
140
|
+
function removeOrphanedEvents(eventsPath, existingWuIds) {
|
|
141
|
+
if (!existsSync(eventsPath)) {
|
|
142
|
+
return 0;
|
|
143
|
+
}
|
|
144
|
+
const content = readFileSync(eventsPath, FILE_SYSTEM.ENCODING);
|
|
145
|
+
const lines = content.split('\n');
|
|
146
|
+
let removed = 0;
|
|
147
|
+
const retained = [];
|
|
148
|
+
for (const line of lines) {
|
|
149
|
+
if (!line.trim()) {
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
try {
|
|
153
|
+
const event = JSON.parse(line);
|
|
154
|
+
if (event.wuId && !existingWuIds.has(event.wuId.toUpperCase())) {
|
|
155
|
+
removed++;
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
retained.push(line);
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
// Preserve malformed lines to avoid destructive cleanup of unrelated data
|
|
162
|
+
retained.push(line);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
if (removed === 0) {
|
|
166
|
+
return 0;
|
|
99
167
|
}
|
|
100
|
-
|
|
168
|
+
const next = retained.length > 0 ? `${retained.join('\n')}\n` : '';
|
|
169
|
+
writeFileSync(eventsPath, next, FILE_SYSTEM.ENCODING);
|
|
170
|
+
return removed;
|
|
171
|
+
}
|
|
172
|
+
function removeDeletedWUsFromInitiatives(worktreePath, ids) {
|
|
173
|
+
const modified = [];
|
|
174
|
+
const initiativesDir = join(worktreePath, INIT_PATHS.INITIATIVES_DIR());
|
|
175
|
+
if (!existsSync(initiativesDir)) {
|
|
176
|
+
return modified;
|
|
177
|
+
}
|
|
178
|
+
const initiativeFiles = readdirSync(initiativesDir).filter((file) => file.endsWith('.yaml'));
|
|
179
|
+
for (const fileName of initiativeFiles) {
|
|
180
|
+
const initId = fileName.replace(/\.yaml$/, '');
|
|
181
|
+
if (!INIT_PATTERNS.INIT_ID.test(initId)) {
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
const initiativePath = join(initiativesDir, fileName);
|
|
185
|
+
try {
|
|
186
|
+
const initDoc = readInitiative(initiativePath, initId);
|
|
187
|
+
if (!Array.isArray(initDoc.wus)) {
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
const before = initDoc.wus.length;
|
|
191
|
+
initDoc.wus = initDoc.wus.filter((wuId) => !ids.has(String(wuId).toUpperCase()));
|
|
192
|
+
if (initDoc.wus.length === before) {
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
writeInitiative(initiativePath, { ...initDoc, id: initDoc.id || initId });
|
|
196
|
+
modified.push(INIT_PATHS.INITIATIVE(initId));
|
|
197
|
+
}
|
|
198
|
+
catch (err) {
|
|
199
|
+
// Non-blocking: malformed initiative files should not block WU delete operation
|
|
200
|
+
console.warn(`${PREFIX} ⚠️ Could not update initiative ${initId}: ${err.message}`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return modified;
|
|
204
|
+
}
|
|
205
|
+
export async function cleanupDeletedWUsInWorktree({ worktreePath, ids }) {
|
|
206
|
+
const normalizedIds = new Set(ids.map((id) => id.toUpperCase()));
|
|
207
|
+
const modified = new Set();
|
|
208
|
+
for (const id of normalizedIds) {
|
|
209
|
+
const wuRelPath = WU_PATHS.WU(id);
|
|
210
|
+
const wuAbsPath = join(worktreePath, wuRelPath);
|
|
211
|
+
if (existsSync(wuAbsPath)) {
|
|
212
|
+
unlinkSync(wuAbsPath);
|
|
213
|
+
modified.add(wuRelPath);
|
|
214
|
+
console.log(`${PREFIX} ✅ Deleted ${id}.yaml`);
|
|
215
|
+
}
|
|
216
|
+
const stampRelPath = getStampPath(id);
|
|
217
|
+
const stampAbsPath = join(worktreePath, stampRelPath);
|
|
218
|
+
if (existsSync(stampAbsPath)) {
|
|
219
|
+
unlinkSync(stampAbsPath);
|
|
220
|
+
modified.add(stampRelPath);
|
|
221
|
+
console.log(`${PREFIX} ✅ Deleted stamp ${id}.done`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
const eventsRelPath = LUMENFLOW_PATHS.WU_EVENTS;
|
|
225
|
+
const eventsAbsPath = join(worktreePath, eventsRelPath);
|
|
226
|
+
if (removeEventsForDeletedWUs(eventsAbsPath, normalizedIds)) {
|
|
227
|
+
modified.add(eventsRelPath);
|
|
228
|
+
console.log(`${PREFIX} ✅ Removed ${normalizedIds.size} WU event stream(s) from wu-events.jsonl`);
|
|
229
|
+
}
|
|
230
|
+
const existingWuIds = getExistingWuIds(worktreePath);
|
|
231
|
+
const orphanedRemoved = removeOrphanedEvents(eventsAbsPath, existingWuIds);
|
|
232
|
+
if (orphanedRemoved > 0) {
|
|
233
|
+
modified.add(eventsRelPath);
|
|
234
|
+
console.log(`${PREFIX} ✅ Removed ${orphanedRemoved} orphaned event(s) for missing WU specs`);
|
|
235
|
+
}
|
|
236
|
+
const initiativeFiles = removeDeletedWUsFromInitiatives(worktreePath, normalizedIds);
|
|
237
|
+
for (const file of initiativeFiles) {
|
|
238
|
+
modified.add(file);
|
|
239
|
+
}
|
|
240
|
+
if (initiativeFiles.length > 0) {
|
|
241
|
+
console.log(`${PREFIX} ✅ Removed deleted WU references from ${initiativeFiles.length} initiative file(s)`);
|
|
242
|
+
}
|
|
243
|
+
const stateDir = join(worktreePath, '.lumenflow', 'state');
|
|
244
|
+
const store = new WUStateStore(stateDir);
|
|
245
|
+
await store.load();
|
|
246
|
+
const backlogRelPath = WU_PATHS.BACKLOG();
|
|
247
|
+
const statusRelPath = WU_PATHS.STATUS();
|
|
248
|
+
const backlogAbsPath = join(worktreePath, backlogRelPath);
|
|
249
|
+
const statusAbsPath = join(worktreePath, statusRelPath);
|
|
250
|
+
const backlogContent = await generateBacklog(store);
|
|
251
|
+
writeFileSync(backlogAbsPath, backlogContent, FILE_SYSTEM.ENCODING);
|
|
252
|
+
modified.add(backlogRelPath);
|
|
253
|
+
const statusContent = await generateStatus(store);
|
|
254
|
+
writeFileSync(statusAbsPath, statusContent, FILE_SYSTEM.ENCODING);
|
|
255
|
+
modified.add(statusRelPath);
|
|
256
|
+
console.log(`${PREFIX} ✅ Regenerated backlog.md and status.md from state store`);
|
|
257
|
+
return Array.from(modified);
|
|
101
258
|
}
|
|
102
259
|
async function deleteSingleWU(id, dryRun) {
|
|
103
260
|
console.log(`${PREFIX} Starting WU delete for ${id}`);
|
|
@@ -111,7 +268,10 @@ async function deleteSingleWU(id, dryRun) {
|
|
|
111
268
|
if (dryRun) {
|
|
112
269
|
console.log(`\n${PREFIX} 🔍 DRY RUN: Would delete ${id}`);
|
|
113
270
|
console.log(`${PREFIX} - Delete file: ${wuPath}`);
|
|
114
|
-
console.log(`${PREFIX} -
|
|
271
|
+
console.log(`${PREFIX} - Delete events from: ${LUMENFLOW_PATHS.WU_EVENTS}`);
|
|
272
|
+
console.log(`${PREFIX} - Regenerate: ${WU_PATHS.BACKLOG()}`);
|
|
273
|
+
console.log(`${PREFIX} - Regenerate: ${WU_PATHS.STATUS()}`);
|
|
274
|
+
console.log(`${PREFIX} - Remove initiative links from: ${INIT_PATHS.INITIATIVES_DIR()}`);
|
|
115
275
|
if (stampExists(id)) {
|
|
116
276
|
console.log(`${PREFIX} - Delete stamp: ${getStampPath(id)}`);
|
|
117
277
|
}
|
|
@@ -131,27 +291,12 @@ async function deleteSingleWU(id, dryRun) {
|
|
|
131
291
|
id: id,
|
|
132
292
|
logPrefix: PREFIX,
|
|
133
293
|
execute: async ({ worktreePath, gitWorktree }) => {
|
|
134
|
-
const
|
|
135
|
-
const backlogFilePath = join(worktreePath, WU_PATHS.BACKLOG());
|
|
136
|
-
unlinkSync(wuFilePath);
|
|
137
|
-
console.log(`${PREFIX} ✅ Deleted ${id}.yaml`);
|
|
138
|
-
const stampPath = join(worktreePath, getStampPath(id));
|
|
139
|
-
if (existsSync(stampPath)) {
|
|
140
|
-
unlinkSync(stampPath);
|
|
141
|
-
console.log(`${PREFIX} ✅ Deleted stamp ${id}.done`);
|
|
142
|
-
}
|
|
143
|
-
const removedFromBacklog = removeFromBacklog(backlogFilePath, id);
|
|
144
|
-
if (removedFromBacklog) {
|
|
145
|
-
console.log(`${PREFIX} ✅ Removed ${id} from backlog.md`);
|
|
146
|
-
}
|
|
147
|
-
else {
|
|
148
|
-
console.log(`${PREFIX} ℹ️ ${id} was not found in backlog.md`);
|
|
149
|
-
}
|
|
294
|
+
const files = await cleanupDeletedWUsInWorktree({ worktreePath, ids: [id] });
|
|
150
295
|
await gitWorktree.add('.');
|
|
151
296
|
const commitMessage = `docs: delete ${id.toLowerCase()}`;
|
|
152
297
|
return {
|
|
153
298
|
commitMessage,
|
|
154
|
-
files
|
|
299
|
+
files,
|
|
155
300
|
};
|
|
156
301
|
},
|
|
157
302
|
});
|
|
@@ -186,6 +331,13 @@ async function deleteBatchWUs(ids, dryRun) {
|
|
|
186
331
|
}
|
|
187
332
|
if (dryRun) {
|
|
188
333
|
console.log(`\n${PREFIX} 🔍 DRY RUN: Would delete ${ids.length} WU(s)`);
|
|
334
|
+
console.log(`${PREFIX} - Delete events from: ${LUMENFLOW_PATHS.WU_EVENTS}`);
|
|
335
|
+
console.log(`${PREFIX} - Regenerate: ${WU_PATHS.BACKLOG()}`);
|
|
336
|
+
console.log(`${PREFIX} - Regenerate: ${WU_PATHS.STATUS()}`);
|
|
337
|
+
console.log(`${PREFIX} - Remove initiative links from: ${INIT_PATHS.INITIATIVES_DIR()}`);
|
|
338
|
+
if (stampsToDelete.length > 0) {
|
|
339
|
+
console.log(`${PREFIX} - Delete ${stampsToDelete.length} stamp(s)`);
|
|
340
|
+
}
|
|
189
341
|
console.log(`${PREFIX} No changes made.`);
|
|
190
342
|
process.exit(EXIT_CODES.SUCCESS);
|
|
191
343
|
}
|
|
@@ -202,31 +354,13 @@ async function deleteBatchWUs(ids, dryRun) {
|
|
|
202
354
|
id: `batch-${ids.length}`,
|
|
203
355
|
logPrefix: PREFIX,
|
|
204
356
|
execute: async ({ worktreePath, gitWorktree }) => {
|
|
205
|
-
const
|
|
206
|
-
for (const { id, wuPath } of wusToDelete) {
|
|
207
|
-
const wuFilePath = join(worktreePath, wuPath);
|
|
208
|
-
unlinkSync(wuFilePath);
|
|
209
|
-
console.log(`${PREFIX} ✅ Deleted ${id}.yaml`);
|
|
210
|
-
}
|
|
211
|
-
for (const id of stampsToDelete) {
|
|
212
|
-
const stampPath = join(worktreePath, getStampPath(id));
|
|
213
|
-
if (existsSync(stampPath)) {
|
|
214
|
-
unlinkSync(stampPath);
|
|
215
|
-
console.log(`${PREFIX} ✅ Deleted stamp ${id}.done`);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
for (const { id } of wusToDelete) {
|
|
219
|
-
const removed = removeFromBacklog(backlogFilePath, id);
|
|
220
|
-
if (removed) {
|
|
221
|
-
console.log(`${PREFIX} ✅ Removed ${id} from backlog.md`);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
357
|
+
const files = await cleanupDeletedWUsInWorktree({ worktreePath, ids });
|
|
224
358
|
await gitWorktree.add('.');
|
|
225
359
|
const idList = ids.map((id) => id.toLowerCase()).join(', ');
|
|
226
360
|
const commitMessage = `chore(repair): delete ${ids.length} orphaned wus (${idList})`;
|
|
227
361
|
return {
|
|
228
362
|
commitMessage,
|
|
229
|
-
files
|
|
363
|
+
files,
|
|
230
364
|
};
|
|
231
365
|
},
|
|
232
366
|
});
|
|
@@ -243,7 +377,7 @@ async function deleteBatchWUs(ids, dryRun) {
|
|
|
243
377
|
console.log(`${PREFIX} ✅ Successfully deleted ${ids.length} WU(s)`);
|
|
244
378
|
console.log(`${PREFIX} Changes pushed to origin/main`);
|
|
245
379
|
}
|
|
246
|
-
async function main() {
|
|
380
|
+
export async function main() {
|
|
247
381
|
const opts = parseArgs();
|
|
248
382
|
const { id, dryRun, batch } = opts;
|
|
249
383
|
if (!id && !batch) {
|
|
@@ -263,8 +397,10 @@ async function main() {
|
|
|
263
397
|
await deleteSingleWU(id, dryRun);
|
|
264
398
|
}
|
|
265
399
|
}
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
400
|
+
if (import.meta.main) {
|
|
401
|
+
void main().catch((err) => {
|
|
402
|
+
console.error(`${PREFIX} ❌ ${err.message}`);
|
|
403
|
+
process.exit(EXIT_CODES.ERROR);
|
|
404
|
+
});
|
|
405
|
+
}
|
|
270
406
|
//# sourceMappingURL=wu-delete.js.map
|
package/dist/wu-delete.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wu-delete.js","sourceRoot":"","sources":["../src/wu-delete.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wu-delete.js","sourceRoot":"","sources":["../src/wu-delete.ts"],"names":[],"mappings":"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"}
|
package/dist/wu-done.js
CHANGED
|
@@ -59,7 +59,9 @@ executePreflightCodePathValidation, buildPreflightCodePathErrorMessage,
|
|
|
59
59
|
// WU-2308: Pre-commit hooks with worktree context
|
|
60
60
|
validateAllPreCommitHooks,
|
|
61
61
|
// WU-2310: Type vs code_paths preflight validation
|
|
62
|
-
validateTypeVsCodePathsPreflight, buildTypeVsCodePathsErrorMessage,
|
|
62
|
+
validateTypeVsCodePathsPreflight, buildTypeVsCodePathsErrorMessage,
|
|
63
|
+
// WU-1503: Dirty-main pre-merge guard
|
|
64
|
+
validateDirtyMain, buildDirtyMainErrorMessage, } from '@lumenflow/core/dist/wu-done-validators.js';
|
|
63
65
|
// WU-1825: validateCodePathsExist moved to unified code-path-validator
|
|
64
66
|
import { validateCodePathsExist } from '@lumenflow/core/dist/code-path-validator.js';
|
|
65
67
|
import { BRANCHES, REMOTES, PATTERNS, DEFAULTS, LOG_PREFIX, EMOJI, GIT, SESSION, WU_STATUS, WU_EXPOSURE, PKG_MANAGER, SCRIPTS, CLI_FLAGS, FILE_SYSTEM, STDIO, EXIT_CODES, STRING_LITERALS, MICRO_WORKTREE_OPERATIONS, TELEMETRY_STEPS, SKIP_GATES_REASONS, CHECKPOINT_MESSAGES,
|
|
@@ -559,6 +561,23 @@ async function ensureCleanWorkingTree() {
|
|
|
559
561
|
` - Leftover changes from previous session`);
|
|
560
562
|
}
|
|
561
563
|
}
|
|
564
|
+
const INTERNAL_LIFECYCLE_DIRTY_FILES = new Set([
|
|
565
|
+
'.lumenflow/flow.log',
|
|
566
|
+
'.lumenflow/skip-gates-audit.log',
|
|
567
|
+
'.lumenflow/skip-cos-gates-audit.log',
|
|
568
|
+
]);
|
|
569
|
+
function parsePorcelainPath(line) {
|
|
570
|
+
if (line.length < 4)
|
|
571
|
+
return null;
|
|
572
|
+
const pathPart = line.slice(3).trim();
|
|
573
|
+
if (!pathPart)
|
|
574
|
+
return null;
|
|
575
|
+
const renameIndex = pathPart.indexOf(' -> ');
|
|
576
|
+
if (renameIndex !== -1) {
|
|
577
|
+
return pathPart.slice(renameIndex + 4);
|
|
578
|
+
}
|
|
579
|
+
return pathPart;
|
|
580
|
+
}
|
|
562
581
|
/**
|
|
563
582
|
* WU-1084: Check for uncommitted changes on main after merge completes.
|
|
564
583
|
*
|
|
@@ -571,11 +590,24 @@ async function ensureCleanWorkingTree() {
|
|
|
571
590
|
* @returns Object with isDirty flag and optional error message
|
|
572
591
|
*/
|
|
573
592
|
export function checkPostMergeDirtyState(gitStatus, wuId) {
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
const
|
|
593
|
+
// WU-1522: Split before trimming to preserve leading spaces in porcelain format.
|
|
594
|
+
// Porcelain lines like ' M .lumenflow/flow.log' use the leading space as a status
|
|
595
|
+
// indicator (working tree vs staging area). Trimming the whole string first strips
|
|
596
|
+
// the leading space from the first line, corrupting parsePorcelainPath output.
|
|
597
|
+
const lines = gitStatus.split('\n').filter((line) => line.length >= 4);
|
|
598
|
+
if (lines.length === 0) {
|
|
599
|
+
return { isDirty: false, internalOnlyFiles: [], unrelatedFiles: [] };
|
|
600
|
+
}
|
|
601
|
+
const dirtyFiles = lines
|
|
602
|
+
.map((line) => parsePorcelainPath(line))
|
|
603
|
+
.filter((value) => Boolean(value));
|
|
604
|
+
const internalOnlyFiles = dirtyFiles.filter((file) => INTERNAL_LIFECYCLE_DIRTY_FILES.has(file));
|
|
605
|
+
const unrelatedFiles = dirtyFiles.filter((file) => !INTERNAL_LIFECYCLE_DIRTY_FILES.has(file));
|
|
606
|
+
if (unrelatedFiles.length === 0) {
|
|
607
|
+
return { isDirty: false, internalOnlyFiles, unrelatedFiles: [] };
|
|
608
|
+
}
|
|
609
|
+
const displayStatus = gitStatus.trim();
|
|
610
|
+
const error = `Main branch has uncommitted changes after merge:\n\n${displayStatus}\n\n` +
|
|
579
611
|
`This indicates files were modified outside the WU's code_paths.\n` +
|
|
580
612
|
`Common cause: pnpm format touched files outside the WU scope.\n\n` +
|
|
581
613
|
`The worktree has NOT been removed to allow investigation.\n\n` +
|
|
@@ -583,7 +615,7 @@ export function checkPostMergeDirtyState(gitStatus, wuId) {
|
|
|
583
615
|
` 1. Review and commit the changes: git add . && git commit -m "format: fix formatting"\n` +
|
|
584
616
|
` 2. Discard if unwanted: git checkout -- .\n` +
|
|
585
617
|
` 3. Then re-run: pnpm wu:done --id ${wuId} --skip-worktree-completion`;
|
|
586
|
-
return { isDirty: true, error };
|
|
618
|
+
return { isDirty: true, internalOnlyFiles, unrelatedFiles, error };
|
|
587
619
|
}
|
|
588
620
|
/**
|
|
589
621
|
* Extract completed WU IDs from git log output.
|
|
@@ -827,7 +859,8 @@ export function emitTelemetry(event) {
|
|
|
827
859
|
appendFileSync(logPath, `${line}\n`, { encoding: FILE_SYSTEM.UTF8 });
|
|
828
860
|
}
|
|
829
861
|
async function auditSkipGates(id, reason, fixWU, worktreePath) {
|
|
830
|
-
const
|
|
862
|
+
const auditBaseDir = worktreePath || process.cwd();
|
|
863
|
+
const auditPath = path.join(auditBaseDir, '.lumenflow', 'skip-gates-audit.log');
|
|
831
864
|
const auditDir = path.dirname(auditPath);
|
|
832
865
|
if (!existsSync(auditDir))
|
|
833
866
|
mkdirSync(auditDir, { recursive: true });
|
|
@@ -846,13 +879,14 @@ async function auditSkipGates(id, reason, fixWU, worktreePath) {
|
|
|
846
879
|
};
|
|
847
880
|
const line = JSON.stringify(entry);
|
|
848
881
|
appendFileSync(auditPath, `${line}\n`, { encoding: FILE_SYSTEM.UTF8 });
|
|
849
|
-
console.log(`${LOG_PREFIX.DONE} ${EMOJI.MEMO} Skip-gates event logged to ${auditPath}`);
|
|
882
|
+
console.log(`${LOG_PREFIX.DONE} ${EMOJI.MEMO} Skip-gates event logged to ${path.relative(process.cwd(), auditPath) || auditPath}`);
|
|
850
883
|
}
|
|
851
884
|
/**
|
|
852
885
|
* Audit trail for --skip-cos-gates (COS v1.3 §7)
|
|
853
886
|
*/
|
|
854
|
-
async function auditSkipCosGates(id, reason) {
|
|
855
|
-
const
|
|
887
|
+
async function auditSkipCosGates(id, reason, worktreePath) {
|
|
888
|
+
const auditBaseDir = worktreePath || process.cwd();
|
|
889
|
+
const auditPath = path.join(auditBaseDir, '.lumenflow', 'skip-cos-gates-audit.log');
|
|
856
890
|
const auditDir = path.dirname(auditPath);
|
|
857
891
|
if (!existsSync(auditDir))
|
|
858
892
|
mkdirSync(auditDir, { recursive: true });
|
|
@@ -1521,8 +1555,32 @@ async function executePreFlightChecks({ id, args, isBranchOnly, isDocsOnly, docM
|
|
|
1521
1555
|
else {
|
|
1522
1556
|
// Worktree mode: must be on main
|
|
1523
1557
|
await ensureOnMain(getGitForCwd());
|
|
1524
|
-
//
|
|
1525
|
-
|
|
1558
|
+
// WU-1503: Dirty-main pre-merge guard (replaces blanket ensureCleanWorkingTree)
|
|
1559
|
+
// Distinguishes between WU-related dirty files (allowed) and unrelated dirty
|
|
1560
|
+
// files (blocked with actionable guidance). Uses --force for audited bypass.
|
|
1561
|
+
{
|
|
1562
|
+
const gitAdapter = getGitForCwd();
|
|
1563
|
+
const gitStatus = await gitAdapter.raw(['status', '--porcelain']);
|
|
1564
|
+
if (gitStatus && gitStatus.trim()) {
|
|
1565
|
+
const wuCodePaths = docForValidation.code_paths || [];
|
|
1566
|
+
const dirtyResult = validateDirtyMain(gitStatus, id, wuCodePaths);
|
|
1567
|
+
if (!dirtyResult.valid) {
|
|
1568
|
+
if (args.force) {
|
|
1569
|
+
console.log(`\n${LOG_PREFIX.DONE} ${EMOJI.WARNING} WU-1503: Dirty-main guard bypassed with --force`);
|
|
1570
|
+
console.log(`${LOG_PREFIX.DONE} Unrelated dirty files (${dirtyResult.unrelatedFiles.length}):`);
|
|
1571
|
+
for (const f of dirtyResult.unrelatedFiles) {
|
|
1572
|
+
console.log(`${LOG_PREFIX.DONE} - ${f}`);
|
|
1573
|
+
}
|
|
1574
|
+
}
|
|
1575
|
+
else {
|
|
1576
|
+
die(buildDirtyMainErrorMessage(id, dirtyResult.unrelatedFiles));
|
|
1577
|
+
}
|
|
1578
|
+
}
|
|
1579
|
+
else if (dirtyResult.relatedFiles.length > 0) {
|
|
1580
|
+
console.log(`${LOG_PREFIX.DONE} ${EMOJI.INFO} WU-1503: ${dirtyResult.relatedFiles.length} related dirty file(s) on main (allowed)`);
|
|
1581
|
+
}
|
|
1582
|
+
}
|
|
1583
|
+
}
|
|
1526
1584
|
// Prevent coordination failures by ensuring main is up-to-date
|
|
1527
1585
|
await ensureMainUpToDate();
|
|
1528
1586
|
// P0 EMERGENCY FIX Part 1: Restore wu-events.jsonl BEFORE parallel completion check
|
|
@@ -1901,7 +1959,7 @@ async function executeGates({ id, args, isBranchOnly, isDocsOnly, worktreePath,
|
|
|
1901
1959
|
else {
|
|
1902
1960
|
console.log(`\n${LOG_PREFIX.DONE} ${EMOJI.WARNING} Skipping COS governance gates as requested`);
|
|
1903
1961
|
console.log(`${LOG_PREFIX.DONE} Reason: ${args.reason || DEFAULT_NO_REASON}`);
|
|
1904
|
-
await auditSkipCosGates(id, args.reason);
|
|
1962
|
+
await auditSkipCosGates(id, args.reason, worktreePath);
|
|
1905
1963
|
emitTelemetry({
|
|
1906
1964
|
script: 'wu-done',
|
|
1907
1965
|
wu_id: id,
|
|
@@ -2163,6 +2221,16 @@ async function main() {
|
|
|
2163
2221
|
// This catches cases where pnpm format touched files outside code_paths
|
|
2164
2222
|
const postMergeStatus = await getGitForCwd().getStatus();
|
|
2165
2223
|
const dirtyCheck = checkPostMergeDirtyState(postMergeStatus, id);
|
|
2224
|
+
if (dirtyCheck.internalOnlyFiles.length > 0) {
|
|
2225
|
+
const gitMain = getGitForCwd();
|
|
2226
|
+
try {
|
|
2227
|
+
await gitMain.raw(['restore', '--', ...dirtyCheck.internalOnlyFiles]);
|
|
2228
|
+
console.log(`${LOG_PREFIX.DONE} ${EMOJI.INFO} Restored internal lifecycle log files: ${dirtyCheck.internalOnlyFiles.join(', ')}`);
|
|
2229
|
+
}
|
|
2230
|
+
catch (restoreErr) {
|
|
2231
|
+
console.warn(`${LOG_PREFIX.DONE} ${EMOJI.WARNING} Could not auto-restore internal lifecycle files: ${restoreErr.message}`);
|
|
2232
|
+
}
|
|
2233
|
+
}
|
|
2166
2234
|
if (dirtyCheck.isDirty) {
|
|
2167
2235
|
die(dirtyCheck.error);
|
|
2168
2236
|
}
|