@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.
- package/README.md +42 -41
- package/dist/delegation-list.js +140 -0
- package/dist/delegation-list.js.map +1 -0
- package/dist/doctor.js +35 -99
- package/dist/doctor.js.map +1 -1
- package/dist/gates-plan-resolvers.js +150 -0
- package/dist/gates-plan-resolvers.js.map +1 -0
- package/dist/gates-runners.js +533 -0
- package/dist/gates-runners.js.map +1 -0
- package/dist/gates-types.js +3 -0
- package/dist/gates-types.js.map +1 -1
- package/dist/gates-utils.js +316 -0
- package/dist/gates-utils.js.map +1 -0
- package/dist/gates.js +44 -1016
- package/dist/gates.js.map +1 -1
- package/dist/hooks/enforcement-generator.js +16 -880
- package/dist/hooks/enforcement-generator.js.map +1 -1
- package/dist/hooks/enforcement-sync.js +1 -4
- package/dist/hooks/enforcement-sync.js.map +1 -1
- package/dist/hooks/generators/auto-checkpoint.js +123 -0
- package/dist/hooks/generators/auto-checkpoint.js.map +1 -0
- package/dist/hooks/generators/enforce-worktree.js +188 -0
- package/dist/hooks/generators/enforce-worktree.js.map +1 -0
- package/dist/hooks/generators/index.js +16 -0
- package/dist/hooks/generators/index.js.map +1 -0
- package/dist/hooks/generators/pre-compact-checkpoint.js +134 -0
- package/dist/hooks/generators/pre-compact-checkpoint.js.map +1 -0
- package/dist/hooks/generators/require-wu.js +115 -0
- package/dist/hooks/generators/require-wu.js.map +1 -0
- package/dist/hooks/generators/session-start-recovery.js +101 -0
- package/dist/hooks/generators/session-start-recovery.js.map +1 -0
- package/dist/hooks/generators/signal-utils.js +52 -0
- package/dist/hooks/generators/signal-utils.js.map +1 -0
- package/dist/hooks/generators/warn-incomplete.js +65 -0
- package/dist/hooks/generators/warn-incomplete.js.map +1 -0
- package/dist/init-detection.js +228 -0
- package/dist/init-detection.js.map +1 -0
- package/dist/init-scaffolding.js +146 -0
- package/dist/init-scaffolding.js.map +1 -0
- package/dist/init-templates.js +1928 -0
- package/dist/init-templates.js.map +1 -0
- package/dist/init.js +136 -2425
- package/dist/init.js.map +1 -1
- package/dist/initiative-edit.js +42 -11
- package/dist/initiative-edit.js.map +1 -1
- package/dist/initiative-remove-wu.js +0 -0
- package/dist/initiative-status.js +29 -2
- package/dist/initiative-status.js.map +1 -1
- package/dist/mem-context.js +22 -9
- package/dist/mem-context.js.map +1 -1
- package/dist/orchestrate-init-status.js +32 -1
- package/dist/orchestrate-init-status.js.map +1 -1
- package/dist/orchestrate-monitor.js +38 -38
- package/dist/orchestrate-monitor.js.map +1 -1
- package/dist/public-manifest.js +12 -5
- package/dist/public-manifest.js.map +1 -1
- package/dist/shared-validators.js +1 -0
- package/dist/shared-validators.js.map +1 -1
- package/dist/spawn-list.js +0 -0
- package/dist/wu-claim-branch.js +121 -0
- package/dist/wu-claim-branch.js.map +1 -0
- package/dist/wu-claim-output.js +83 -0
- package/dist/wu-claim-output.js.map +1 -0
- package/dist/wu-claim-resume-handler.js +85 -0
- package/dist/wu-claim-resume-handler.js.map +1 -0
- package/dist/wu-claim-state.js +572 -0
- package/dist/wu-claim-state.js.map +1 -0
- package/dist/wu-claim-validation.js +439 -0
- package/dist/wu-claim-validation.js.map +1 -0
- package/dist/wu-claim-worktree.js +221 -0
- package/dist/wu-claim-worktree.js.map +1 -0
- package/dist/wu-claim.js +54 -1402
- package/dist/wu-claim.js.map +1 -1
- package/dist/wu-create-content.js +254 -0
- package/dist/wu-create-content.js.map +1 -0
- package/dist/wu-create-readiness.js +57 -0
- package/dist/wu-create-readiness.js.map +1 -0
- package/dist/wu-create-validation.js +149 -0
- package/dist/wu-create-validation.js.map +1 -0
- package/dist/wu-create.js +39 -441
- package/dist/wu-create.js.map +1 -1
- package/dist/wu-done.js +144 -249
- package/dist/wu-done.js.map +1 -1
- package/dist/wu-edit-operations.js +432 -0
- package/dist/wu-edit-operations.js.map +1 -0
- package/dist/wu-edit-validators.js +280 -0
- package/dist/wu-edit-validators.js.map +1 -0
- package/dist/wu-edit.js +27 -713
- package/dist/wu-edit.js.map +1 -1
- package/dist/wu-prep.js +32 -2
- package/dist/wu-prep.js.map +1 -1
- package/dist/wu-repair.js +1 -1
- package/dist/wu-repair.js.map +1 -1
- package/dist/wu-spawn-prompt-builders.js +1123 -0
- package/dist/wu-spawn-prompt-builders.js.map +1 -0
- package/dist/wu-spawn-strategy-resolver.js +314 -0
- package/dist/wu-spawn-strategy-resolver.js.map +1 -0
- package/dist/wu-spawn.js +9 -1398
- package/dist/wu-spawn.js.map +1 -1
- package/package.json +10 -7
- package/templates/core/LUMENFLOW.md.template +29 -99
- package/templates/core/ai/onboarding/agent-invocation-guide.md.template +1 -1
- package/templates/core/ai/onboarding/quick-ref-commands.md.template +29 -4
- 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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"}
|