@lumenflow/cli 2.18.2 → 2.19.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 (104) hide show
  1. package/README.md +42 -41
  2. package/dist/delegation-list.js +140 -0
  3. package/dist/delegation-list.js.map +1 -0
  4. package/dist/doctor.js +35 -99
  5. package/dist/doctor.js.map +1 -1
  6. package/dist/gates-plan-resolvers.js +150 -0
  7. package/dist/gates-plan-resolvers.js.map +1 -0
  8. package/dist/gates-runners.js +533 -0
  9. package/dist/gates-runners.js.map +1 -0
  10. package/dist/gates-types.js +3 -0
  11. package/dist/gates-types.js.map +1 -1
  12. package/dist/gates-utils.js +316 -0
  13. package/dist/gates-utils.js.map +1 -0
  14. package/dist/gates.js +44 -1016
  15. package/dist/gates.js.map +1 -1
  16. package/dist/hooks/enforcement-generator.js +16 -880
  17. package/dist/hooks/enforcement-generator.js.map +1 -1
  18. package/dist/hooks/enforcement-sync.js +1 -4
  19. package/dist/hooks/enforcement-sync.js.map +1 -1
  20. package/dist/hooks/generators/auto-checkpoint.js +123 -0
  21. package/dist/hooks/generators/auto-checkpoint.js.map +1 -0
  22. package/dist/hooks/generators/enforce-worktree.js +188 -0
  23. package/dist/hooks/generators/enforce-worktree.js.map +1 -0
  24. package/dist/hooks/generators/index.js +16 -0
  25. package/dist/hooks/generators/index.js.map +1 -0
  26. package/dist/hooks/generators/pre-compact-checkpoint.js +134 -0
  27. package/dist/hooks/generators/pre-compact-checkpoint.js.map +1 -0
  28. package/dist/hooks/generators/require-wu.js +115 -0
  29. package/dist/hooks/generators/require-wu.js.map +1 -0
  30. package/dist/hooks/generators/session-start-recovery.js +101 -0
  31. package/dist/hooks/generators/session-start-recovery.js.map +1 -0
  32. package/dist/hooks/generators/signal-utils.js +52 -0
  33. package/dist/hooks/generators/signal-utils.js.map +1 -0
  34. package/dist/hooks/generators/warn-incomplete.js +65 -0
  35. package/dist/hooks/generators/warn-incomplete.js.map +1 -0
  36. package/dist/init-detection.js +228 -0
  37. package/dist/init-detection.js.map +1 -0
  38. package/dist/init-scaffolding.js +146 -0
  39. package/dist/init-scaffolding.js.map +1 -0
  40. package/dist/init-templates.js +1928 -0
  41. package/dist/init-templates.js.map +1 -0
  42. package/dist/init.js +136 -2425
  43. package/dist/init.js.map +1 -1
  44. package/dist/initiative-edit.js +42 -11
  45. package/dist/initiative-edit.js.map +1 -1
  46. package/dist/initiative-remove-wu.js +0 -0
  47. package/dist/initiative-status.js +29 -2
  48. package/dist/initiative-status.js.map +1 -1
  49. package/dist/mem-context.js +22 -9
  50. package/dist/mem-context.js.map +1 -1
  51. package/dist/orchestrate-init-status.js +32 -1
  52. package/dist/orchestrate-init-status.js.map +1 -1
  53. package/dist/orchestrate-monitor.js +38 -38
  54. package/dist/orchestrate-monitor.js.map +1 -1
  55. package/dist/public-manifest.js +12 -5
  56. package/dist/public-manifest.js.map +1 -1
  57. package/dist/shared-validators.js +1 -0
  58. package/dist/shared-validators.js.map +1 -1
  59. package/dist/spawn-list.js +0 -0
  60. package/dist/wu-claim-branch.js +121 -0
  61. package/dist/wu-claim-branch.js.map +1 -0
  62. package/dist/wu-claim-output.js +83 -0
  63. package/dist/wu-claim-output.js.map +1 -0
  64. package/dist/wu-claim-resume-handler.js +85 -0
  65. package/dist/wu-claim-resume-handler.js.map +1 -0
  66. package/dist/wu-claim-state.js +572 -0
  67. package/dist/wu-claim-state.js.map +1 -0
  68. package/dist/wu-claim-validation.js +439 -0
  69. package/dist/wu-claim-validation.js.map +1 -0
  70. package/dist/wu-claim-worktree.js +221 -0
  71. package/dist/wu-claim-worktree.js.map +1 -0
  72. package/dist/wu-claim.js +54 -1402
  73. package/dist/wu-claim.js.map +1 -1
  74. package/dist/wu-create-content.js +254 -0
  75. package/dist/wu-create-content.js.map +1 -0
  76. package/dist/wu-create-readiness.js +57 -0
  77. package/dist/wu-create-readiness.js.map +1 -0
  78. package/dist/wu-create-validation.js +149 -0
  79. package/dist/wu-create-validation.js.map +1 -0
  80. package/dist/wu-create.js +39 -441
  81. package/dist/wu-create.js.map +1 -1
  82. package/dist/wu-done.js +144 -249
  83. package/dist/wu-done.js.map +1 -1
  84. package/dist/wu-edit-operations.js +432 -0
  85. package/dist/wu-edit-operations.js.map +1 -0
  86. package/dist/wu-edit-validators.js +280 -0
  87. package/dist/wu-edit-validators.js.map +1 -0
  88. package/dist/wu-edit.js +27 -713
  89. package/dist/wu-edit.js.map +1 -1
  90. package/dist/wu-prep.js +32 -2
  91. package/dist/wu-prep.js.map +1 -1
  92. package/dist/wu-repair.js +1 -1
  93. package/dist/wu-repair.js.map +1 -1
  94. package/dist/wu-spawn-prompt-builders.js +1123 -0
  95. package/dist/wu-spawn-prompt-builders.js.map +1 -0
  96. package/dist/wu-spawn-strategy-resolver.js +314 -0
  97. package/dist/wu-spawn-strategy-resolver.js.map +1 -0
  98. package/dist/wu-spawn.js +9 -1398
  99. package/dist/wu-spawn.js.map +1 -1
  100. package/package.json +10 -7
  101. package/templates/core/LUMENFLOW.md.template +29 -99
  102. package/templates/core/ai/onboarding/agent-invocation-guide.md.template +1 -1
  103. package/templates/core/ai/onboarding/quick-ref-commands.md.template +29 -4
  104. package/templates/vendors/claude/.claude/skills/orchestration/SKILL.md.template +8 -8
@@ -0,0 +1,280 @@
1
+ /**
2
+ * WU-1650: Validation helpers for wu:edit command
3
+ *
4
+ * Extracted from wu-edit.ts to dedicated module.
5
+ * All validation logic used by the wu:edit orchestrator lives here.
6
+ */
7
+ import { die } from '@lumenflow/core/error-handler';
8
+ import { existsSync, readFileSync } from 'node:fs';
9
+ import { parseYAML } from '@lumenflow/core/wu-yaml';
10
+ import { defaultWorktreeFrom, WU_PATHS } from '@lumenflow/core/wu-paths';
11
+ import { resolve, join } from 'node:path';
12
+ import { createGitForPath } from '@lumenflow/core/git-adapter';
13
+ import { FILE_SYSTEM, WU_STATUS, WU_EXPOSURE_VALUES } from '@lumenflow/core/wu-constants';
14
+ import { INIT_PATTERNS } from '@lumenflow/initiatives/constants';
15
+ import { INIT_PATHS } from '@lumenflow/initiatives/paths';
16
+ import { BRANCH_PR_EDIT_MODE, BLOCKED_EDIT_MODE, resolveInProgressEditMode, } from './wu-state-cloud.js';
17
+ /**
18
+ * Edit modes for WU editing
19
+ * WU-1365: Worktree-aware editing support
20
+ */
21
+ export const EDIT_MODE = {
22
+ /** Ready WUs: Use micro-worktree on main (existing behavior) */
23
+ MICRO_WORKTREE: 'micro_worktree',
24
+ /** In-progress worktree WUs: Apply edits directly in active worktree (WU-1365) */
25
+ WORKTREE: 'worktree',
26
+ /** In-progress branch-pr WUs: apply edits directly on the claimed branch */
27
+ BRANCH_PR: BRANCH_PR_EDIT_MODE,
28
+ };
29
+ /**
30
+ * WU-1039: Validate which edits are allowed on done WUs
31
+ *
32
+ * Done WUs only allow metadata reassignment: initiative, phase, and exposure.
33
+ * All other edits are blocked to preserve WU immutability after completion.
34
+ *
35
+ * @param opts - Parsed CLI options
36
+ * @returns { valid: boolean, disallowedEdits: string[] }
37
+ */
38
+ export function validateDoneWUEdits(opts) {
39
+ const disallowedEdits = [];
40
+ // Check for disallowed edits on done WUs
41
+ if (opts.specFile)
42
+ disallowedEdits.push('--spec-file');
43
+ if (opts.description)
44
+ disallowedEdits.push('--description');
45
+ if (opts.acceptance && Array.isArray(opts.acceptance) && opts.acceptance.length > 0) {
46
+ disallowedEdits.push('--acceptance');
47
+ }
48
+ if (opts.notes)
49
+ disallowedEdits.push('--notes');
50
+ if (opts.codePaths && Array.isArray(opts.codePaths) && opts.codePaths.length > 0) {
51
+ disallowedEdits.push('--code-paths');
52
+ }
53
+ if (opts.risks && Array.isArray(opts.risks) && opts.risks.length > 0) {
54
+ disallowedEdits.push('--risks');
55
+ }
56
+ if (opts.lane)
57
+ disallowedEdits.push('--lane');
58
+ if (opts.type)
59
+ disallowedEdits.push('--type');
60
+ if (opts.priority)
61
+ disallowedEdits.push('--priority');
62
+ if (opts.testPathsManual &&
63
+ Array.isArray(opts.testPathsManual) &&
64
+ opts.testPathsManual.length > 0) {
65
+ disallowedEdits.push('--test-paths-manual');
66
+ }
67
+ if (opts.testPathsUnit && Array.isArray(opts.testPathsUnit) && opts.testPathsUnit.length > 0) {
68
+ disallowedEdits.push('--test-paths-unit');
69
+ }
70
+ if (opts.testPathsE2e && Array.isArray(opts.testPathsE2e) && opts.testPathsE2e.length > 0) {
71
+ disallowedEdits.push('--test-paths-e2e');
72
+ }
73
+ return {
74
+ valid: disallowedEdits.length === 0,
75
+ disallowedEdits,
76
+ };
77
+ }
78
+ /**
79
+ * WU-1039: Validate exposure value against schema
80
+ *
81
+ * Uses WU_EXPOSURE_VALUES from core constants (Library-First, no magic strings).
82
+ *
83
+ * @param exposure - Exposure value to validate
84
+ * @returns { valid: boolean, error?: string }
85
+ */
86
+ export function validateExposureValue(exposure) {
87
+ // WU_EXPOSURE_VALUES is readonly array, need to cast for includes check
88
+ const validValues = WU_EXPOSURE_VALUES;
89
+ if (!validValues.includes(exposure)) {
90
+ return {
91
+ valid: false,
92
+ error: `Invalid exposure value: "${exposure}"\n\nValid values: ${WU_EXPOSURE_VALUES.join(', ')}`,
93
+ };
94
+ }
95
+ return { valid: true };
96
+ }
97
+ /**
98
+ * WU-1929: Validate initiative ID format
99
+ * @param {string} initId - Initiative ID to validate
100
+ */
101
+ export function validateInitiativeFormat(initId) {
102
+ if (!INIT_PATTERNS.INIT_ID.test(initId)) {
103
+ die(`Invalid Initiative ID format: "${initId}"\n\n` +
104
+ `Expected format: INIT-<number> or INIT-<NAME> (e.g., INIT-001, INIT-TOOLING)`);
105
+ }
106
+ }
107
+ /**
108
+ * WU-1929: Validate initiative exists on disk
109
+ * @param {string} initId - Initiative ID to check
110
+ * @returns {string} Path to initiative file
111
+ */
112
+ export function validateInitiativeExists(initId) {
113
+ const initPath = INIT_PATHS.INITIATIVE(initId);
114
+ if (!existsSync(initPath)) {
115
+ die(`Initiative not found: ${initId}\n\nFile does not exist: ${initPath}`);
116
+ }
117
+ return initPath;
118
+ }
119
+ /**
120
+ * Check WU exists and determine edit mode
121
+ * WU-1365: Now supports worktree-aware editing for in_progress WUs
122
+ *
123
+ * @param {string} id - WU ID
124
+ * @returns {{ wu: object, editMode: string, isDone: boolean }} WU object and edit mode
125
+ */
126
+ export function validateWUEditable(id) {
127
+ const wuPath = WU_PATHS.WU(id);
128
+ if (!existsSync(wuPath)) {
129
+ die(`WU ${id} not found at ${wuPath}\n\nEnsure the WU exists and you're in the repo root.`);
130
+ }
131
+ const content = readFileSync(wuPath, { encoding: FILE_SYSTEM.ENCODING });
132
+ const wu = parseYAML(content);
133
+ // WU-1929: Done WUs allow initiative/phase edits only (metadata reassignment)
134
+ // WU-1365: Other fields on done WUs are immutable
135
+ if (wu.status === WU_STATUS.DONE) {
136
+ // Return done status - main() will validate allowed fields
137
+ return { wu, editMode: EDIT_MODE.MICRO_WORKTREE, isDone: true };
138
+ }
139
+ // Handle in_progress WUs based on claimed_mode (WU-1365)
140
+ if (wu.status === WU_STATUS.IN_PROGRESS) {
141
+ const editMode = resolveInProgressEditMode(typeof wu.claimed_mode === 'string' ? wu.claimed_mode : undefined);
142
+ if (editMode === BLOCKED_EDIT_MODE) {
143
+ die(`Cannot edit branch-only WU ${id} via wu:edit.\n\n` +
144
+ `WUs claimed with claimed_mode='branch-only' cannot be edited via wu:edit.\n` +
145
+ `To modify the spec, edit the file directly on the lane branch and commit.`);
146
+ }
147
+ if (editMode === EDIT_MODE.BRANCH_PR) {
148
+ return { wu, editMode: EDIT_MODE.BRANCH_PR, isDone: false };
149
+ }
150
+ // WU-1677: For worktree-mode WUs, re-read YAML from the worktree.
151
+ // The worktree copy is authoritative (it may have prior wu:edit commits
152
+ // that haven't been merged to main yet). Reading from main causes
153
+ // sequential wu:edit calls to silently overwrite each other.
154
+ const worktreeRelPath = defaultWorktreeFrom(wu);
155
+ if (worktreeRelPath) {
156
+ const worktreeWuPath = join(resolve(worktreeRelPath), WU_PATHS.WU(id));
157
+ if (existsSync(worktreeWuPath)) {
158
+ const worktreeContent = readFileSync(worktreeWuPath, {
159
+ encoding: FILE_SYSTEM.ENCODING,
160
+ });
161
+ const worktreeWu = parseYAML(worktreeContent);
162
+ return { wu: worktreeWu, editMode: EDIT_MODE.WORKTREE, isDone: false };
163
+ }
164
+ }
165
+ return { wu, editMode: EDIT_MODE.WORKTREE, isDone: false };
166
+ }
167
+ // Ready WUs use micro-worktree (existing behavior)
168
+ if (wu.status === WU_STATUS.READY) {
169
+ return { wu, editMode: EDIT_MODE.MICRO_WORKTREE, isDone: false };
170
+ }
171
+ // Block other statuses (blocked, etc.)
172
+ die(`Cannot edit WU ${id}: status is '${wu.status}'.\n\n` +
173
+ `Only WUs in '${WU_STATUS.READY}' or '${WU_STATUS.IN_PROGRESS}' (worktree mode) can be edited.`);
174
+ }
175
+ /**
176
+ * Validate worktree exists on disk
177
+ * WU-1365: Required check before worktree editing
178
+ *
179
+ * @param {string} worktreePath - Absolute path to worktree
180
+ * @param {string} id - WU ID (for error messages)
181
+ */
182
+ export function validateWorktreeExists(worktreePath, id) {
183
+ if (!existsSync(worktreePath)) {
184
+ die(`Cannot edit WU ${id}: worktree path missing from disk.\n\n` +
185
+ `Expected worktree at: ${worktreePath}\n\n` +
186
+ `The worktree may have been removed or the path is incorrect.\n` +
187
+ `If the worktree was accidentally deleted, you may need to re-claim the WU.`);
188
+ }
189
+ }
190
+ /**
191
+ * Validate worktree has no uncommitted changes
192
+ * WU-1365: Required check to prevent edit conflicts
193
+ *
194
+ * @param {string} worktreePath - Absolute path to worktree
195
+ * @param {string} id - WU ID (for error messages)
196
+ */
197
+ export async function validateWorktreeClean(worktreePath, id) {
198
+ try {
199
+ const gitAdapter = createGitForPath(worktreePath);
200
+ const status = (await gitAdapter.raw(['status', '--porcelain'])).trim();
201
+ if (status !== '') {
202
+ die(`Cannot edit WU ${id}: worktree has uncommitted changes.\n\n` +
203
+ `Uncommitted changes in ${worktreePath}:\n${status}\n\n` +
204
+ `Commit or discard your changes before editing the WU spec:\n` +
205
+ ` cd ${worktreePath}\n` +
206
+ ` git add . && git commit -m "wip: save progress"\n\n` +
207
+ `Then retry wu:edit.`);
208
+ }
209
+ }
210
+ catch (err) {
211
+ die(`Cannot edit WU ${id}: failed to check worktree status.\n\n` +
212
+ `Error: ${err.message}\n\n` +
213
+ `Worktree path: ${worktreePath}`);
214
+ }
215
+ }
216
+ /**
217
+ * Validate worktree is on expected lane branch
218
+ * WU-1365: Prevents editing WUs in worktrees with mismatched branches
219
+ *
220
+ * @param {string} worktreePath - Absolute path to worktree
221
+ * @param {string} expectedBranch - Expected branch name (e.g., lane/operations-tooling/wu-1365)
222
+ * @param {string} id - WU ID (for error messages)
223
+ */
224
+ export async function validateWorktreeBranch(worktreePath, expectedBranch, id) {
225
+ try {
226
+ const gitAdapter = createGitForPath(worktreePath);
227
+ const actualBranch = (await gitAdapter.raw(['rev-parse', '--abbrev-ref', 'HEAD'])).trim();
228
+ if (actualBranch !== expectedBranch) {
229
+ die(`Cannot edit WU ${id}: worktree branch does not match expected lane branch.\n\n` +
230
+ `Expected branch: ${expectedBranch}\n` +
231
+ `Actual branch: ${actualBranch}\n\n` +
232
+ `This may indicate a corrupted worktree state.\n` +
233
+ `Verify the worktree is correctly set up for this WU.`);
234
+ }
235
+ }
236
+ catch (err) {
237
+ die(`Cannot edit WU ${id}: failed to check worktree branch.\n\n` +
238
+ `Error: ${err.message}\n\n` +
239
+ `Worktree path: ${worktreePath}`);
240
+ }
241
+ }
242
+ const NON_SCOPE_RELEVANT_PATHS = new Set([
243
+ '.lumenflow/state/wu-events.jsonl',
244
+ 'docs/04-operations/tasks/backlog.md',
245
+ 'docs/04-operations/tasks/status.md',
246
+ ]);
247
+ /**
248
+ * WU-1618: Treat backlog/state bookkeeping files as non-scope signals.
249
+ */
250
+ export function hasScopeRelevantBranchChanges(changedFiles) {
251
+ return changedFiles.some((filePath) => {
252
+ const normalized = filePath.trim().replace(/\\/g, '/');
253
+ if (!normalized) {
254
+ return false;
255
+ }
256
+ if (NON_SCOPE_RELEVANT_PATHS.has(normalized)) {
257
+ return false;
258
+ }
259
+ return !normalized.startsWith('docs/04-operations/tasks/wu/');
260
+ });
261
+ }
262
+ /**
263
+ * WU-1618: Support `--replace-code-paths <paths>` shorthand by normalizing to
264
+ * `--replace-code-paths --code-paths <paths>` before Commander parsing.
265
+ */
266
+ export function normalizeReplaceCodePathsArgv(argv) {
267
+ const normalized = [...argv];
268
+ for (let i = 0; i < normalized.length; i += 1) {
269
+ if (normalized[i] !== '--replace-code-paths') {
270
+ continue;
271
+ }
272
+ const next = normalized[i + 1];
273
+ if (next && !next.startsWith('-')) {
274
+ normalized.splice(i + 1, 0, '--code-paths');
275
+ i += 1;
276
+ }
277
+ }
278
+ return normalized;
279
+ }
280
+ //# sourceMappingURL=wu-edit-validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wu-edit-validators.js","sourceRoot":"","sources":["../src/wu-edit-validators.ts"],"names":[],"mappings":"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"}