@lumenflow/cli 2.12.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.
Files changed (37) hide show
  1. package/README.md +105 -105
  2. package/dist/gates-graceful-degradation.js +151 -0
  3. package/dist/gates-graceful-degradation.js.map +1 -0
  4. package/dist/gates.js +90 -5
  5. package/dist/gates.js.map +1 -1
  6. package/dist/hooks/enforcement-checks.js +104 -37
  7. package/dist/hooks/enforcement-checks.js.map +1 -1
  8. package/dist/hooks/enforcement-generator.js +229 -28
  9. package/dist/hooks/enforcement-generator.js.map +1 -1
  10. package/dist/hooks/enforcement-sync.js +4 -1
  11. package/dist/hooks/enforcement-sync.js.map +1 -1
  12. package/dist/init.js +160 -13
  13. package/dist/init.js.map +1 -1
  14. package/dist/initiative-edit.js +3 -2
  15. package/dist/initiative-edit.js.map +1 -1
  16. package/dist/lifecycle-regression-harness.js +179 -0
  17. package/dist/lifecycle-regression-harness.js.map +1 -0
  18. package/dist/mem-recover.js +0 -0
  19. package/dist/public-manifest.js +7 -0
  20. package/dist/public-manifest.js.map +1 -1
  21. package/dist/wu-claim-mode.js +80 -0
  22. package/dist/wu-claim-mode.js.map +1 -0
  23. package/dist/wu-claim.js +163 -9
  24. package/dist/wu-claim.js.map +1 -1
  25. package/dist/wu-create.js +5 -1
  26. package/dist/wu-create.js.map +1 -1
  27. package/dist/wu-delete.js +196 -60
  28. package/dist/wu-delete.js.map +1 -1
  29. package/dist/wu-done.js +99 -17
  30. package/dist/wu-done.js.map +1 -1
  31. package/dist/wu-edit.js +5 -4
  32. package/dist/wu-edit.js.map +1 -1
  33. package/dist/wu-prep.js +122 -27
  34. package/dist/wu-prep.js.map +1 -1
  35. package/package.json +7 -6
  36. package/templates/vendors/claude/.claude/hooks/enforce-worktree.sh +78 -17
  37. 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 file and update backlog.md in micro-worktree
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 # Single WU deletion
18
- * pnpm wu:delete --id WU-123 --dry-run # 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, stringifyYAML } from '@lumenflow/core/dist/wu-yaml.js';
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 { FILE_SYSTEM, EXIT_CODES, MICRO_WORKTREE_OPERATIONS, LOG_PREFIX, WU_STATUS, } from '@lumenflow/core/dist/wu-constants.js';
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 removeFromBacklog(backlogPath, id) {
87
- if (!existsSync(backlogPath)) {
91
+ function removeEventsForDeletedWUs(eventsPath, ids) {
92
+ if (!existsSync(eventsPath)) {
88
93
  return false;
89
94
  }
90
- const content = readFileSync(backlogPath, FILE_SYSTEM.ENCODING);
91
- const wuLinkPattern = new RegExp(`^.*\\[${id}[^\\]]*\\].*$`, 'gmi');
92
- const wuSimplePattern = new RegExp(`^.*${id}.*\\.yaml.*$`, 'gmi');
93
- let updated = content.replace(wuLinkPattern, '');
94
- updated = updated.replace(wuSimplePattern, '');
95
- updated = updated.replace(/\n{3,}/g, '\n\n');
96
- if (updated !== content) {
97
- writeFileSync(backlogPath, updated, FILE_SYSTEM.ENCODING);
98
- return true;
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
- return false;
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} - Update: ${WU_PATHS.BACKLOG()}`);
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 wuFilePath = join(worktreePath, wuPath);
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 backlogFilePath = join(worktreePath, WU_PATHS.BACKLOG());
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
- main().catch((err) => {
267
- console.error(`${PREFIX} ${err.message}`);
268
- process.exit(EXIT_CODES.ERROR);
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
@@ -1 +1 @@
1
- {"version":3,"file":"wu-delete.js","sourceRoot":"","sources":["../src/wu-delete.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3F,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,GAAG,EAAE,MAAM,uCAAuC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,EACL,WAAW,EACX,UAAU,EACV,yBAAyB,EACzB,UAAU,EACV,SAAS,GACV,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAE3E,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,aAAa,CAAC;AAElD,MAAM,cAAc,GAAG;IACrB,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,mDAAmD;KACjE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,kEAAkE;KAChF;CACF,CAAC;AAEF,SAAS,SAAS;IAChB,OAAO,cAAc,CAAC;QACpB,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,2DAA2D;QACxE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC;QACrE,QAAQ,EAAE,EAAE;QACZ,iBAAiB,EAAE,IAAI;KACxB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB;IACrC,OAAO,QAAQ;SACZ,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;SACpC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,mBAAmB,CAAC,EAAU;IACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,GAAG,CAAC,MAAM,EAAE,iBAAiB,MAAM,uDAAuD,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,QAA0B,CAAC,CAAC;IAC7E,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAE9B,IAAI,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC;QACxC,GAAG,CACD,oBAAoB,EAAE,gBAAgB,SAAS,CAAC,WAAW,QAAQ;YACjE,4DAA4D;YAC5D,0DAA0D,EAAE,yBAAyB;YACrF,kCAAkC,CACrC,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,sBAAsB;IACnC,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC,SAAS,EAAE,CAAC;IAChD,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAClB,GAAG,CACD,yEAAyE,MAAM,oFAAoF,CACpK,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,EAAU;IAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,WAAW,CAAC,EAAU;IAC7B,OAAO,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,iBAAiB,CAAC,WAAmB,EAAE,EAAU;IACxD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,WAAW,CAAC,QAA0B,CAAC,CAAC;IAClF,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;IACpE,MAAM,eAAe,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;IAElE,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IACjD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAC/C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAE7C,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,aAAa,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC,QAA0B,CAAC,CAAC;QAC5E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,EAAU,EAAE,MAAe;IACvD,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,2BAA2B,EAAE,EAAE,CAAC,CAAC;IAEtD,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACvB,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAE/C,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,cAAc,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,aAAa,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,cAAc,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,YAAY,MAAM,EAAE,CAAC,CAAC;IAE3C,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,6BAA6B,EAAE,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,qBAAqB,MAAM,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,gBAAgB,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC3D,IAAI,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,sBAAsB,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,mBAAmB,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC;IACnC,MAAM,sBAAsB,EAAE,CAAC;IAC/B,MAAM,kBAAkB,CAAC,YAAY,EAAE,EAAE,WAAW,CAAC,CAAC;IAEtD,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,iCAAiC,CAAC,CAAC;IAExD,6DAA6D;IAC7D,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,yBAAyB,CAAC,SAAS,CAAC;IACpE,IAAI,CAAC;QACH,MAAM,iBAAiB,CAAC;YACtB,SAAS,EAAE,yBAAyB,CAAC,SAAS;YAC9C,EAAE,EAAE,EAAE;YACN,SAAS,EAAE,MAAM;YACjB,OAAO,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE;gBAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;gBAC9C,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;gBAE/D,UAAU,CAAC,UAAU,CAAC,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,cAAc,EAAE,OAAO,CAAC,CAAC;gBAE9C,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC1B,UAAU,CAAC,SAAS,CAAC,CAAC;oBACtB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,oBAAoB,EAAE,OAAO,CAAC,CAAC;gBACtD,CAAC;gBAED,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;gBAClE,IAAI,kBAAkB,EAAE,CAAC;oBACvB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,cAAc,EAAE,kBAAkB,CAAC,CAAC;gBAC3D,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,QAAQ,EAAE,8BAA8B,CAAC,CAAC;gBACjE,CAAC;gBAED,MAAM,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAE3B,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;gBACzD,OAAO;oBACL,aAAa;oBACb,KAAK,EAAE,EAAE;iBACV,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,2CAA2C;QAC3C,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,cAAc,CAAC;QACjD,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,2BAA2B,EAAE,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,gCAAgC,CAAC,CAAC;AACzD,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,GAAa,EAAE,MAAe;IAC1D,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,8BAA8B,GAAG,CAAC,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE1F,MAAM,WAAW,GAAmD,EAAE,CAAC;IACvE,MAAM,cAAc,GAAa,EAAE,CAAC;IAEpC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACvB,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAC/C,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAErC,IAAI,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;YACpB,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,iBAAiB,CAAC,CAAC;IACxC,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,MAAM,OAAO,MAAM,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,6BAA6B,GAAG,CAAC,MAAM,QAAQ,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,mBAAmB,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC;IACnC,MAAM,sBAAsB,EAAE,CAAC;IAC/B,MAAM,kBAAkB,CAAC,YAAY,EAAE,EAAE,mBAAmB,CAAC,CAAC;IAE9D,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,aAAa,GAAG,CAAC,MAAM,8BAA8B,CAAC,CAAC;IAE5E,6DAA6D;IAC7D,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,yBAAyB,CAAC,SAAS,CAAC;IACpE,IAAI,CAAC;QACH,MAAM,iBAAiB,CAAC;YACtB,SAAS,EAAE,yBAAyB,CAAC,SAAS;YAC9C,EAAE,EAAE,SAAS,GAAG,CAAC,MAAM,EAAE;YACzB,SAAS,EAAE,MAAM;YACjB,OAAO,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE;gBAC/C,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;gBAE/D,KAAK,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;oBACzC,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;oBAC9C,UAAU,CAAC,UAAU,CAAC,CAAC;oBACvB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,cAAc,EAAE,OAAO,CAAC,CAAC;gBAChD,CAAC;gBAED,KAAK,MAAM,EAAE,IAAI,cAAc,EAAE,CAAC;oBAChC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;oBACvD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC1B,UAAU,CAAC,SAAS,CAAC,CAAC;wBACtB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,oBAAoB,EAAE,OAAO,CAAC,CAAC;oBACtD,CAAC;gBACH,CAAC;gBAED,KAAK,MAAM,EAAE,EAAE,EAAE,IAAI,WAAW,EAAE,CAAC;oBACjC,MAAM,OAAO,GAAG,iBAAiB,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;oBACvD,IAAI,OAAO,EAAE,CAAC;wBACZ,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,cAAc,EAAE,kBAAkB,CAAC,CAAC;oBAC3D,CAAC;gBACH,CAAC;gBAED,MAAM,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAE3B,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5D,MAAM,aAAa,GAAG,yBAAyB,GAAG,CAAC,MAAM,kBAAkB,MAAM,GAAG,CAAC;gBACrF,OAAO;oBACL,aAAa;oBACb,KAAK,EAAE,EAAE;iBACV,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,2CAA2C;QAC3C,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,cAAc,CAAC;QACjD,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,2BAA2B,GAAG,CAAC,MAAM,QAAQ,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,gCAAgC,CAAC,CAAC;AACzD,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;IACzB,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAEnC,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QAClB,GAAG,CAAC,2DAA2D,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC;QAChB,GAAG,CAAC,yDAAyD,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,GAAG,CAAC,qCAAqC,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,MAAM,cAAc,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC"}
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, } from '@lumenflow/core/dist/wu-done-validators.js';
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,
@@ -73,7 +75,9 @@ import { getConfig } from '@lumenflow/core/dist/lumenflow-config.js';
73
75
  import { writeWU, appendNote, parseYAML } from '@lumenflow/core/dist/wu-yaml.js';
74
76
  import { PLACEHOLDER_SENTINEL, validateWU, validateDoneWU, validateApprovalGates, } from '@lumenflow/core/dist/wu-schema.js';
75
77
  import { validateBacklogSync } from '@lumenflow/core/dist/backlog-sync-validator.js';
76
- import { executeBranchOnlyCompletion } from '@lumenflow/core/dist/wu-done-branch-only.js';
78
+ import { executeBranchOnlyCompletion,
79
+ // WU-1492: Import branch-pr completion path
80
+ executeBranchPRCompletion, } from '@lumenflow/core/dist/wu-done-branch-only.js';
77
81
  import { executeWorktreeCompletion, autoRebaseBranch, } from '@lumenflow/core/dist/wu-done-worktree.js';
78
82
  import { checkWUConsistency } from '@lumenflow/core/dist/wu-consistency-checker.js';
79
83
  // WU-1542: Use blocking mode compliance check (replaces non-blocking checkMandatoryAgentsCompliance)
@@ -557,6 +561,23 @@ async function ensureCleanWorkingTree() {
557
561
  ` - Leftover changes from previous session`);
558
562
  }
559
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
+ }
560
581
  /**
561
582
  * WU-1084: Check for uncommitted changes on main after merge completes.
562
583
  *
@@ -569,11 +590,24 @@ async function ensureCleanWorkingTree() {
569
590
  * @returns Object with isDirty flag and optional error message
570
591
  */
571
592
  export function checkPostMergeDirtyState(gitStatus, wuId) {
572
- const trimmedStatus = gitStatus.trim();
573
- if (!trimmedStatus) {
574
- return { isDirty: false };
575
- }
576
- const error = `Main branch has uncommitted changes after merge:\n\n${trimmedStatus}\n\n` +
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` +
577
611
  `This indicates files were modified outside the WU's code_paths.\n` +
578
612
  `Common cause: pnpm format touched files outside the WU scope.\n\n` +
579
613
  `The worktree has NOT been removed to allow investigation.\n\n` +
@@ -581,7 +615,7 @@ export function checkPostMergeDirtyState(gitStatus, wuId) {
581
615
  ` 1. Review and commit the changes: git add . && git commit -m "format: fix formatting"\n` +
582
616
  ` 2. Discard if unwanted: git checkout -- .\n` +
583
617
  ` 3. Then re-run: pnpm wu:done --id ${wuId} --skip-worktree-completion`;
584
- return { isDirty: true, error };
618
+ return { isDirty: true, internalOnlyFiles, unrelatedFiles, error };
585
619
  }
586
620
  /**
587
621
  * Extract completed WU IDs from git log output.
@@ -825,7 +859,8 @@ export function emitTelemetry(event) {
825
859
  appendFileSync(logPath, `${line}\n`, { encoding: FILE_SYSTEM.UTF8 });
826
860
  }
827
861
  async function auditSkipGates(id, reason, fixWU, worktreePath) {
828
- const auditPath = path.join('.lumenflow', 'skip-gates-audit.log');
862
+ const auditBaseDir = worktreePath || process.cwd();
863
+ const auditPath = path.join(auditBaseDir, '.lumenflow', 'skip-gates-audit.log');
829
864
  const auditDir = path.dirname(auditPath);
830
865
  if (!existsSync(auditDir))
831
866
  mkdirSync(auditDir, { recursive: true });
@@ -844,13 +879,14 @@ async function auditSkipGates(id, reason, fixWU, worktreePath) {
844
879
  };
845
880
  const line = JSON.stringify(entry);
846
881
  appendFileSync(auditPath, `${line}\n`, { encoding: FILE_SYSTEM.UTF8 });
847
- 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}`);
848
883
  }
849
884
  /**
850
885
  * Audit trail for --skip-cos-gates (COS v1.3 §7)
851
886
  */
852
- async function auditSkipCosGates(id, reason) {
853
- const auditPath = path.join('.lumenflow', 'skip-cos-gates-audit.log');
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');
854
890
  const auditDir = path.dirname(auditPath);
855
891
  if (!existsSync(auditDir))
856
892
  mkdirSync(auditDir, { recursive: true });
@@ -1519,8 +1555,32 @@ async function executePreFlightChecks({ id, args, isBranchOnly, isDocsOnly, docM
1519
1555
  else {
1520
1556
  // Worktree mode: must be on main
1521
1557
  await ensureOnMain(getGitForCwd());
1522
- // Prevent multi-agent data loss by ensuring clean working tree
1523
- await ensureCleanWorkingTree();
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
+ }
1524
1584
  // Prevent coordination failures by ensuring main is up-to-date
1525
1585
  await ensureMainUpToDate();
1526
1586
  // P0 EMERGENCY FIX Part 1: Restore wu-events.jsonl BEFORE parallel completion check
@@ -1899,7 +1959,7 @@ async function executeGates({ id, args, isBranchOnly, isDocsOnly, worktreePath,
1899
1959
  else {
1900
1960
  console.log(`\n${LOG_PREFIX.DONE} ${EMOJI.WARNING} Skipping COS governance gates as requested`);
1901
1961
  console.log(`${LOG_PREFIX.DONE} Reason: ${args.reason || DEFAULT_NO_REASON}`);
1902
- await auditSkipCosGates(id, args.reason);
1962
+ await auditSkipCosGates(id, args.reason, worktreePath);
1903
1963
  emitTelemetry({
1904
1964
  script: 'wu-done',
1905
1965
  wu_id: id,
@@ -1961,7 +2021,9 @@ async function main() {
1961
2021
  }
1962
2022
  // Detect workspace mode and calculate paths (WU-1215: extracted to validators module)
1963
2023
  const pathInfo = await detectModeAndPaths(id, args);
1964
- const { WU_PATH, STATUS_PATH, BACKLOG_PATH, STAMPS_DIR, docMain, isBranchOnly, derivedWorktree, docForValidation: initialDocForValidation, isDocsOnly, } = pathInfo;
2024
+ const { WU_PATH, STATUS_PATH, BACKLOG_PATH, STAMPS_DIR, docMain, isBranchOnly,
2025
+ // WU-1492: Detect branch-pr mode for separate completion path
2026
+ isBranchPR, derivedWorktree, docForValidation: initialDocForValidation, isDocsOnly, } = pathInfo;
1965
2027
  // Capture main checkout path once. process.cwd() may drift later during recovery flows.
1966
2028
  const mainCheckoutPath = process.cwd();
1967
2029
  // Resolve worktree path early so we can detect missing worktree before pre-flight checks
@@ -2089,7 +2151,17 @@ async function main() {
2089
2151
  validateStagedFiles,
2090
2152
  };
2091
2153
  try {
2092
- if (effectiveBranchOnly) {
2154
+ if (isBranchPR) {
2155
+ // WU-1492: Branch-PR mode: commit metadata on lane branch, push, create PR
2156
+ // Never checks out or merges to main
2157
+ const laneBranch = defaultBranchFrom(docMain);
2158
+ const branchPRContext = {
2159
+ ...baseContext,
2160
+ laneBranch,
2161
+ };
2162
+ completionResult = await executeBranchPRCompletion(branchPRContext);
2163
+ }
2164
+ else if (effectiveBranchOnly) {
2093
2165
  // Branch-Only mode: merge first, then update metadata on main
2094
2166
  // NOTE: Branch-only still uses old rollback mechanism
2095
2167
  const branchOnlyContext = {
@@ -2149,6 +2221,16 @@ async function main() {
2149
2221
  // This catches cases where pnpm format touched files outside code_paths
2150
2222
  const postMergeStatus = await getGitForCwd().getStatus();
2151
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
+ }
2152
2234
  if (dirtyCheck.isDirty) {
2153
2235
  die(dirtyCheck.error);
2154
2236
  }