@lumenflow/cli 2.20.1 → 2.21.1

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 (111) hide show
  1. package/README.md +8 -4
  2. package/dist/hooks/enforcement-checks.js +120 -0
  3. package/dist/hooks/enforcement-checks.js.map +1 -1
  4. package/dist/init-lane-validation.js +141 -0
  5. package/dist/init-lane-validation.js.map +1 -0
  6. package/dist/init-templates.js +36 -8
  7. package/dist/init-templates.js.map +1 -1
  8. package/dist/init.js +27 -58
  9. package/dist/init.js.map +1 -1
  10. package/dist/initiative-create.js +35 -4
  11. package/dist/initiative-create.js.map +1 -1
  12. package/dist/lane-lifecycle-process.js +364 -0
  13. package/dist/lane-lifecycle-process.js.map +1 -0
  14. package/dist/lane-lock.js +41 -0
  15. package/dist/lane-lock.js.map +1 -0
  16. package/dist/lane-setup.js +55 -0
  17. package/dist/lane-setup.js.map +1 -0
  18. package/dist/lane-status.js +38 -0
  19. package/dist/lane-status.js.map +1 -0
  20. package/dist/lane-validate.js +43 -0
  21. package/dist/lane-validate.js.map +1 -0
  22. package/dist/onboarding-smoke-test.js +17 -0
  23. package/dist/onboarding-smoke-test.js.map +1 -1
  24. package/dist/public-manifest.js +28 -0
  25. package/dist/public-manifest.js.map +1 -1
  26. package/dist/wu-claim-cloud.js +16 -0
  27. package/dist/wu-claim-cloud.js.map +1 -1
  28. package/dist/wu-claim.js +12 -2
  29. package/dist/wu-claim.js.map +1 -1
  30. package/dist/wu-create-content.js +8 -2
  31. package/dist/wu-create-content.js.map +1 -1
  32. package/dist/wu-create-validation.js +5 -3
  33. package/dist/wu-create-validation.js.map +1 -1
  34. package/dist/wu-create.js +21 -1
  35. package/dist/wu-create.js.map +1 -1
  36. package/dist/wu-done.js +57 -8
  37. package/dist/wu-done.js.map +1 -1
  38. package/dist/wu-prep.js +22 -0
  39. package/dist/wu-prep.js.map +1 -1
  40. package/package.json +15 -11
  41. package/dist/__tests__/agent-log-issue.test.js +0 -56
  42. package/dist/__tests__/agent-spawn-coordination.test.js +0 -451
  43. package/dist/__tests__/backlog-prune.test.js +0 -478
  44. package/dist/__tests__/cli-entry-point.test.js +0 -160
  45. package/dist/__tests__/cli-subprocess.test.js +0 -89
  46. package/dist/__tests__/commands/integrate.test.js +0 -165
  47. package/dist/__tests__/commands.test.js +0 -271
  48. package/dist/__tests__/deps-operations.test.js +0 -206
  49. package/dist/__tests__/doctor.test.js +0 -510
  50. package/dist/__tests__/file-operations.test.js +0 -906
  51. package/dist/__tests__/flow-report.test.js +0 -24
  52. package/dist/__tests__/gates-config.test.js +0 -303
  53. package/dist/__tests__/gates-integration-tests.test.js +0 -112
  54. package/dist/__tests__/git-operations.test.js +0 -668
  55. package/dist/__tests__/guard-main-branch.test.js +0 -79
  56. package/dist/__tests__/guards-validation.test.js +0 -416
  57. package/dist/__tests__/hooks/enforcement.test.js +0 -279
  58. package/dist/__tests__/init-config-lanes.test.js +0 -131
  59. package/dist/__tests__/init-docs-structure.test.js +0 -152
  60. package/dist/__tests__/init-greenfield.test.js +0 -247
  61. package/dist/__tests__/init-lane-inference.test.js +0 -125
  62. package/dist/__tests__/init-onboarding-docs.test.js +0 -132
  63. package/dist/__tests__/init-quick-ref.test.js +0 -144
  64. package/dist/__tests__/init-scripts.test.js +0 -207
  65. package/dist/__tests__/init-template-portability.test.js +0 -96
  66. package/dist/__tests__/init.test.js +0 -968
  67. package/dist/__tests__/initiative-add-wu.test.js +0 -490
  68. package/dist/__tests__/initiative-e2e.test.js +0 -442
  69. package/dist/__tests__/initiative-plan-replacement.test.js +0 -161
  70. package/dist/__tests__/initiative-plan.test.js +0 -340
  71. package/dist/__tests__/initiative-remove-wu.test.js +0 -458
  72. package/dist/__tests__/lumenflow-upgrade.test.js +0 -260
  73. package/dist/__tests__/mem-cleanup-execution.test.js +0 -19
  74. package/dist/__tests__/memory-integration.test.js +0 -333
  75. package/dist/__tests__/merge-block.test.js +0 -220
  76. package/dist/__tests__/metrics-cli.test.js +0 -619
  77. package/dist/__tests__/metrics-snapshot.test.js +0 -24
  78. package/dist/__tests__/no-beacon-references-docs.test.js +0 -30
  79. package/dist/__tests__/no-beacon-references.test.js +0 -39
  80. package/dist/__tests__/onboarding-smoke-test.test.js +0 -211
  81. package/dist/__tests__/path-centralization-cli.test.js +0 -234
  82. package/dist/__tests__/plan-create.test.js +0 -126
  83. package/dist/__tests__/plan-edit.test.js +0 -157
  84. package/dist/__tests__/plan-link.test.js +0 -239
  85. package/dist/__tests__/plan-promote.test.js +0 -181
  86. package/dist/__tests__/release.test.js +0 -372
  87. package/dist/__tests__/rotate-progress.test.js +0 -127
  88. package/dist/__tests__/safe-git.test.js +0 -190
  89. package/dist/__tests__/session-coordinator.test.js +0 -109
  90. package/dist/__tests__/state-bootstrap.test.js +0 -432
  91. package/dist/__tests__/state-doctor.test.js +0 -328
  92. package/dist/__tests__/sync-templates.test.js +0 -255
  93. package/dist/__tests__/templates-sync.test.js +0 -219
  94. package/dist/__tests__/trace-gen.test.js +0 -115
  95. package/dist/__tests__/wu-create-required-fields.test.js +0 -143
  96. package/dist/__tests__/wu-create-strict.test.js +0 -118
  97. package/dist/__tests__/wu-create.test.js +0 -121
  98. package/dist/__tests__/wu-done-auto-cleanup.test.js +0 -135
  99. package/dist/__tests__/wu-done-docs-only-policy.test.js +0 -20
  100. package/dist/__tests__/wu-done-staging-whitelist.test.js +0 -35
  101. package/dist/__tests__/wu-done.test.js +0 -36
  102. package/dist/__tests__/wu-edit-strict.test.js +0 -109
  103. package/dist/__tests__/wu-edit.test.js +0 -119
  104. package/dist/__tests__/wu-lifecycle-integration.test.js +0 -388
  105. package/dist/__tests__/wu-prep-default-exec.test.js +0 -35
  106. package/dist/__tests__/wu-prep.test.js +0 -140
  107. package/dist/__tests__/wu-proto.test.js +0 -97
  108. package/dist/__tests__/wu-validate-strict.test.js +0 -113
  109. package/dist/__tests__/wu-validate.test.js +0 -36
  110. package/dist/spawn-list.js +0 -143
  111. package/dist/spawn-list.js.map +0 -1
package/README.md CHANGED
@@ -130,10 +130,14 @@ This package provides CLI commands for the LumenFlow workflow framework, includi
130
130
 
131
131
  ### Lane Tooling
132
132
 
133
- | Command | Description |
134
- | -------------- | --------------------------- |
135
- | `lane-health` | Check lane config health |
136
- | `lane-suggest` | Suggest lane for code paths |
133
+ | Command | Description |
134
+ | --------------- | ---------------------------------------- |
135
+ | `lane-health` | Check lane config health |
136
+ | `lane-lock` | Lock lane lifecycle for delivery WUs |
137
+ | `lane-setup` | Create/update draft lane artifacts |
138
+ | `lane-status` | Show lane lifecycle status and next step |
139
+ | `lane-suggest` | Suggest lane for code paths |
140
+ | `lane-validate` | Validate lane artifacts before lock |
137
141
 
138
142
  ### Verification & Gates
139
143
 
@@ -22,6 +22,126 @@ const MAIN_WRITE_ALLOWLIST_PREFIXES = [
22
22
  '.claude/',
23
23
  'plan/',
24
24
  ];
25
+ const GIT_STATUS_PREFIX_LENGTH = 3;
26
+ const GIT_STATUS_RENAME_SEPARATOR = ' -> ';
27
+ const GIT_STATUS_QUOTE = '"';
28
+ const PATH_PREFIX_CURRENT_DIR = './';
29
+ const PATH_SEPARATOR_WINDOWS = '\\';
30
+ const PATH_SEPARATOR_POSIX = '/';
31
+ const MAX_BLOCKED_PATHS_IN_MESSAGE = 10;
32
+ const DIRTY_MAIN_GUARD_REASONS = {
33
+ BRANCH_PR_MODE: 'branch-pr-mode',
34
+ NO_WORKTREE_CONTEXT: 'no-worktree-context',
35
+ CLEAN_OR_ALLOWLISTED: 'clean-or-allowlisted',
36
+ BLOCKED_NON_ALLOWLISTED_DIRTY_MAIN: 'blocked-non-allowlisted-dirty-main',
37
+ };
38
+ function stripWrappingQuotes(value) {
39
+ if (value.startsWith(GIT_STATUS_QUOTE) && value.endsWith(GIT_STATUS_QUOTE) && value.length >= 2) {
40
+ return value.slice(1, -1);
41
+ }
42
+ return value;
43
+ }
44
+ function normalizeRepoRelativePath(value) {
45
+ const withoutQuotes = stripWrappingQuotes(value.trim());
46
+ const normalizedSeparators = withoutQuotes
47
+ .split(PATH_SEPARATOR_WINDOWS)
48
+ .join(PATH_SEPARATOR_POSIX);
49
+ if (normalizedSeparators.startsWith(PATH_PREFIX_CURRENT_DIR)) {
50
+ return normalizedSeparators.slice(PATH_PREFIX_CURRENT_DIR.length);
51
+ }
52
+ return normalizedSeparators;
53
+ }
54
+ function parsePathFromStatusLine(line) {
55
+ if (line.length < GIT_STATUS_PREFIX_LENGTH) {
56
+ return null;
57
+ }
58
+ const pathField = line.slice(GIT_STATUS_PREFIX_LENGTH).trim();
59
+ if (pathField.length === 0) {
60
+ return null;
61
+ }
62
+ // For renames, git status emits "old -> new". We care about the destination path.
63
+ const renameSegments = pathField.split(GIT_STATUS_RENAME_SEPARATOR);
64
+ const destinationPath = renameSegments[renameSegments.length - 1];
65
+ const normalizedPath = normalizeRepoRelativePath(destinationPath);
66
+ return normalizedPath.length > 0 ? normalizedPath : null;
67
+ }
68
+ export function parseDirtyPathsFromStatus(mainStatus) {
69
+ const uniquePaths = new Set();
70
+ for (const line of mainStatus.split('\n')) {
71
+ const trimmed = line.trimEnd();
72
+ if (trimmed.length === 0) {
73
+ continue;
74
+ }
75
+ const parsed = parsePathFromStatusLine(trimmed);
76
+ if (parsed) {
77
+ uniquePaths.add(parsed);
78
+ }
79
+ }
80
+ return Array.from(uniquePaths);
81
+ }
82
+ export function getNonAllowlistedDirtyPaths(mainStatus, allowlistPrefixes = MAIN_WRITE_ALLOWLIST_PREFIXES) {
83
+ return parseDirtyPathsFromStatus(mainStatus).filter((relativePath) => !allowlistPrefixes.some((prefix) => relativePath.startsWith(prefix)));
84
+ }
85
+ function formatBlockedPaths(paths) {
86
+ const displayed = paths.slice(0, MAX_BLOCKED_PATHS_IN_MESSAGE);
87
+ const lines = displayed.map((dirtyPath) => ` - ${dirtyPath}`);
88
+ const remainder = paths.length - displayed.length;
89
+ if (remainder > 0) {
90
+ lines.push(` - ... and ${remainder} more`);
91
+ }
92
+ return lines.join('\n');
93
+ }
94
+ export function formatMainDirtyMutationGuardMessage(options) {
95
+ const { commandName, mainCheckout, blockedPaths } = options;
96
+ return (`${commandName} blocked: main checkout has non-allowlisted dirty files while a worktree WU is active.\n\n` +
97
+ `Dirty paths:\n${formatBlockedPaths(blockedPaths)}\n\n` +
98
+ `Allowed dirty prefixes on main:\n` +
99
+ ` - docs/04-operations/tasks/wu/\n` +
100
+ ` - .lumenflow/\n` +
101
+ ` - .claude/\n` +
102
+ ` - plan/\n\n` +
103
+ `How to resolve:\n` +
104
+ ` 1. Move edits into the active worktree (recommended)\n` +
105
+ ` 2. Revert or commit unintended main edits\n` +
106
+ ` 3. If writes came from MCP/tools, rerun them in the worktree path\n` +
107
+ ` 4. Retry ${commandName}\n\n` +
108
+ `Main checkout: ${mainCheckout}`);
109
+ }
110
+ export function evaluateMainDirtyMutationGuard(options) {
111
+ const { commandName, mainCheckout, mainStatus, hasActiveWorktreeContext, isBranchPrMode } = options;
112
+ if (isBranchPrMode) {
113
+ return {
114
+ blocked: false,
115
+ blockedPaths: [],
116
+ reason: DIRTY_MAIN_GUARD_REASONS.BRANCH_PR_MODE,
117
+ };
118
+ }
119
+ if (!hasActiveWorktreeContext) {
120
+ return {
121
+ blocked: false,
122
+ blockedPaths: [],
123
+ reason: DIRTY_MAIN_GUARD_REASONS.NO_WORKTREE_CONTEXT,
124
+ };
125
+ }
126
+ const blockedPaths = getNonAllowlistedDirtyPaths(mainStatus);
127
+ if (blockedPaths.length === 0) {
128
+ return {
129
+ blocked: false,
130
+ blockedPaths: [],
131
+ reason: DIRTY_MAIN_GUARD_REASONS.CLEAN_OR_ALLOWLISTED,
132
+ };
133
+ }
134
+ return {
135
+ blocked: true,
136
+ blockedPaths,
137
+ reason: DIRTY_MAIN_GUARD_REASONS.BLOCKED_NON_ALLOWLISTED_DIRTY_MAIN,
138
+ message: formatMainDirtyMutationGuardMessage({
139
+ commandName,
140
+ mainCheckout,
141
+ blockedPaths,
142
+ }),
143
+ };
144
+ }
25
145
  /**
26
146
  * WU-1501: Check if a resolved path matches the main-write allowlist.
27
147
  *
@@ -1 +1 @@
1
- {"version":3,"file":"enforcement-checks.js","sourceRoot":"","sources":["../../src/hooks/enforcement-checks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"enforcement-checks.js","sourceRoot":"","sources":["../../src/hooks/enforcement-checks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * @file init-lane-validation.ts
3
+ * Lane config validation against inference hierarchy.
4
+ *
5
+ * WU-1745: Validate lane config against inference hierarchy at init time
6
+ *
7
+ * Cross-checks lane definitions in .lumenflow.config.yaml against
8
+ * .lumenflow.lane-inference.yaml parents. Catches invalid parent names
9
+ * (e.g., "Foundation: Core" when "Foundation" is not a valid parent)
10
+ * at init time instead of deferring to wu:create.
11
+ */
12
+ import * as fs from 'node:fs';
13
+ import * as path from 'node:path';
14
+ import * as yaml from 'yaml';
15
+ /** Separator between parent and sublane in lane names */
16
+ const LANE_NAME_SEPARATOR = ': ';
17
+ /**
18
+ * Extract the parent name from a "Parent: Sublane" lane name.
19
+ *
20
+ * @param laneName - Lane name in "Parent: Sublane" format
21
+ * @returns The parent portion, or null if no separator found
22
+ */
23
+ function extractParentName(laneName) {
24
+ const separatorIndex = laneName.indexOf(LANE_NAME_SEPARATOR);
25
+ if (separatorIndex === -1) {
26
+ return null;
27
+ }
28
+ return laneName.substring(0, separatorIndex);
29
+ }
30
+ /**
31
+ * Validate lane definitions from config against valid inference hierarchy parents.
32
+ *
33
+ * Checks that each lane's parent (the part before ": ") exists as a top-level
34
+ * key in the lane inference hierarchy.
35
+ *
36
+ * @param configLanes - Lane definitions from .lumenflow.config.yaml
37
+ * @param inferenceParents - Valid parent names from .lumenflow.lane-inference.yaml
38
+ * @returns Validation result with warnings and invalid lane names
39
+ */
40
+ export function validateLaneConfigAgainstInference(configLanes, inferenceParents) {
41
+ const warnings = [];
42
+ const invalidLanes = [];
43
+ if (configLanes.length === 0) {
44
+ return { warnings, invalidLanes };
45
+ }
46
+ const validParentSet = new Set(inferenceParents);
47
+ for (const lane of configLanes) {
48
+ const parent = extractParentName(lane.name);
49
+ if (parent === null) {
50
+ // Lane name doesn't use "Parent: Sublane" format
51
+ warnings.push(`Lane "${lane.name}" does not use the required "Parent: Sublane" format. ` +
52
+ `Valid parent names: ${inferenceParents.join(', ')}`);
53
+ invalidLanes.push(lane.name);
54
+ continue;
55
+ }
56
+ if (!validParentSet.has(parent)) {
57
+ warnings.push(`Lane "${lane.name}" uses invalid parent "${parent}". ` +
58
+ `Valid parent names in lane-inference hierarchy: ${inferenceParents.join(', ')}`);
59
+ invalidLanes.push(lane.name);
60
+ }
61
+ }
62
+ return { warnings, invalidLanes };
63
+ }
64
+ /**
65
+ * Extract top-level parent names from a lane inference YAML file.
66
+ *
67
+ * The lane inference file uses hierarchical format:
68
+ * Parent:
69
+ * Sublane:
70
+ * code_paths: [...]
71
+ *
72
+ * This function returns the top-level keys (parent names).
73
+ *
74
+ * @param laneInferencePath - Path to .lumenflow.lane-inference.yaml
75
+ * @returns Array of parent names, or empty array if file doesn't exist/is invalid
76
+ */
77
+ export function extractInferenceParents(laneInferencePath) {
78
+ if (!fs.existsSync(laneInferencePath)) {
79
+ return [];
80
+ }
81
+ try {
82
+ const content = fs.readFileSync(laneInferencePath, 'utf-8');
83
+ const parsed = yaml.parse(content);
84
+ if (!parsed || typeof parsed !== 'object') {
85
+ return [];
86
+ }
87
+ // Top-level keys are parent names
88
+ return Object.keys(parsed);
89
+ }
90
+ catch {
91
+ return [];
92
+ }
93
+ }
94
+ /**
95
+ * Extract lane definitions from a config YAML file.
96
+ *
97
+ * @param configPath - Path to .lumenflow.config.yaml
98
+ * @returns Array of lane definitions, or empty array if not found
99
+ */
100
+ export function extractConfigLanes(configPath) {
101
+ if (!fs.existsSync(configPath)) {
102
+ return [];
103
+ }
104
+ try {
105
+ const content = fs.readFileSync(configPath, 'utf-8');
106
+ const parsed = yaml.parse(content);
107
+ if (!parsed || typeof parsed !== 'object') {
108
+ return [];
109
+ }
110
+ const lanes = parsed.lanes;
111
+ const definitions = lanes?.definitions;
112
+ if (!Array.isArray(definitions)) {
113
+ return [];
114
+ }
115
+ return definitions;
116
+ }
117
+ catch {
118
+ return [];
119
+ }
120
+ }
121
+ /**
122
+ * Run lane validation for a project directory.
123
+ *
124
+ * Reads both .lumenflow.config.yaml and .lumenflow.lane-inference.yaml,
125
+ * then validates that all lane parents exist in the inference hierarchy.
126
+ *
127
+ * @param targetDir - Project root directory
128
+ * @returns Validation result with warnings and invalid lane names
129
+ */
130
+ export function validateLanesForProject(targetDir) {
131
+ const configPath = path.join(targetDir, '.lumenflow.config.yaml');
132
+ const inferencePath = path.join(targetDir, '.lumenflow.lane-inference.yaml');
133
+ const configLanes = extractConfigLanes(configPath);
134
+ const inferenceParents = extractInferenceParents(inferencePath);
135
+ // If either file is missing or empty, skip validation
136
+ if (configLanes.length === 0 || inferenceParents.length === 0) {
137
+ return { warnings: [], invalidLanes: [] };
138
+ }
139
+ return validateLaneConfigAgainstInference(configLanes, inferenceParents);
140
+ }
141
+ //# sourceMappingURL=init-lane-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-lane-validation.js","sourceRoot":"","sources":["../src/init-lane-validation.ts"],"names":[],"mappings":"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"}
@@ -52,6 +52,13 @@ This project uses LumenFlow workflow. For complete documentation, see [LUMENFLOW
52
52
 
53
53
  ## Quick Start
54
54
 
55
+ \`\`\`bash
56
+ # First-time lane setup (once per project)
57
+ pnpm lane:setup
58
+ pnpm lane:validate
59
+ pnpm lane:lock
60
+ \`\`\`
61
+
55
62
  \`\`\`bash
56
63
  # 1. Claim a WU
57
64
  pnpm wu:claim --id WU-XXXX --lane <Lane>
@@ -106,7 +113,7 @@ This file provides universal guidance for all AI agents. Additional vendor-speci
106
113
  // Template for LUMENFLOW.md (main entry point)
107
114
  // WU-1309: Use <project-root> placeholder for portability
108
115
  // WU-1364: Added initiative workflow section
109
- export const LUMENFLOW_MD_TEMPLATE = `# LumenFlow Workflow Guide\n\n**Last updated:** {{DATE}}\n\nLumenFlow is a vendor-agnostic workflow framework for AI-native software development.\n\n---\n\n## Critical Rule: ALWAYS Run wu:done\n\n**After completing work on a WU, you MUST run \`pnpm wu:done --id WU-XXXX\` from the main checkout.**\n\nThis is the single most forgotten step. Do NOT:\n- Write "To Complete: pnpm wu:done" and stop\n- Ask if you should run wu:done\n- Forget to run wu:done\n\n**DO**: Run \`pnpm wu:done --id WU-XXXX\` immediately after gates pass.\n\n---\n\n## When to Use Initiatives\n\nUse **Initiatives** for multi-phase work spanning multiple WUs:\n\n- **Product visions**: "Build a task management app"\n- **Larger features**: Work requiring multiple WUs across lanes\n- **Complex projects**: Anything that needs phased delivery\n\n\`\`\`bash\n# Create an initiative for multi-phase work\npnpm initiative:create --id INIT-001 --title "Feature Name" \\\\\n --description "..." --phase "Phase 1: MVP" --phase "Phase 2: Polish"\n\n# Add WUs to the initiative\npnpm initiative:add-wu --initiative INIT-001 --wu WU-XXX --phase 1\n\n# Track progress\npnpm initiative:status --id INIT-001\n\`\`\`\n\n**Skip initiatives** for: single-file bug fixes, small docs updates, isolated refactoring.\n\n---\n\n## Quick Start\n\n\`\`\`bash\n# 1. Create a WU\npnpm wu:create --id WU-XXXX --lane <Lane> --title "Title"\n\n# 2. Edit WU spec with acceptance criteria, then claim:\npnpm wu:claim --id WU-XXXX --lane <Lane>\ncd worktrees/<lane>-wu-xxxx\n\n# 3. Implement in worktree\n\n# 4. Run gates\npnpm gates --docs-only # for docs changes\npnpm gates # for code changes\n\n# 5. Complete (from main checkout)\ncd <project-root>\npnpm wu:done --id WU-XXXX\n\`\`\`\n\n---\n\n## Core Principles\n\n1. **TDD**: Failing test -> implementation -> passing test (>=90% coverage on new code)\n2. **Library-First**: Search existing libraries before custom code\n3. **DRY/SOLID/KISS/YAGNI**: No magic numbers, no hardcoded strings\n4. **Worktree Discipline**: After \`wu:claim\`, work ONLY in the worktree\n5. **Gates Before Done**: All gates must pass before \`wu:done\`\n6. **Do Not Bypass Hooks**: No \`--no-verify\`, fix issues properly\n7. **Always wu:done**: Complete every WU by running \`pnpm wu:done\`\n\n---\n\n## Documentation Structure\n\n### Core (Vendor-Agnostic)\n\n- **LUMENFLOW.md** - This file, main entry point\n- **.lumenflow/constraints.md** - Non-negotiable workflow constraints\n- **.lumenflow/agents/** - Agent instructions (vendor-agnostic)\n- **.lumenflow.config.yaml** - Workflow configuration\n\n### Optional Overlays\n\n- **CLAUDE.md + .claude/agents/** - Claude Code overlay (auto if Claude Code detected)\n- **{{DOCS_TASKS_PATH}}** - Task boards and WU storage (\`lumenflow init --full\`)\n- **{{DOCS_ONBOARDING_PATH}}** - Agent onboarding docs\n- **.lumenflow.framework.yaml** - Framework hint file (created with \`--framework\`)\n\n---\n\n## Worktree Discipline (IMMUTABLE LAW)\n\nAfter claiming a WU, you MUST work in its worktree:\n\n\`\`\`bash\n# 1. Claim creates worktree\npnpm wu:claim --id WU-XXX --lane <lane>\n\n# 2. IMMEDIATELY cd to worktree\ncd worktrees/<lane>-wu-xxx\n\n# 3. ALL work happens here\n\n# 4. Return to main ONLY to complete\ncd <project-root>\npnpm wu:done --id WU-XXX\n\`\`\`\n\n---\n\n## Definition of Done\n\n- Acceptance criteria satisfied\n- Gates green (\`pnpm gates\` or \`pnpm gates --docs-only\`)\n- WU YAML status = \`done\`\n- \`wu:done\` has been run\n\n---\n\n## Commands Reference\n\n| Command | Description |\n| ----------------- | ----------------------------------- |\n| \`pnpm wu:create\` | Create new WU spec |\n| \`pnpm wu:claim\` | Claim WU and create worktree |\n| \`pnpm wu:done\` | Complete WU (merge, stamp, cleanup) |\n| \`pnpm gates\` | Run quality gates |\n| \`pnpm initiative:create\` | Create multi-phase initiative |\n| \`pnpm initiative:status\` | View initiative progress |\n\n---\n\n## Constraints\n\nSee [.lumenflow/constraints.md](.lumenflow/constraints.md) for the 6 non-negotiable rules.\n\n---\n\n## Agent Onboarding\n\n- Start with **CLAUDE.md** if present (Claude Code overlay).\n- Add vendor-agnostic guidance in **.lumenflow/agents/**.\n- Check the onboarding docs in **{{DOCS_ONBOARDING_PATH}}** for detailed guidance.\n`;
116
+ export const LUMENFLOW_MD_TEMPLATE = `# LumenFlow Workflow Guide\n\n**Last updated:** {{DATE}}\n\nLumenFlow is a vendor-agnostic workflow framework for AI-native software development.\n\n---\n\n## Critical Rule: ALWAYS Run wu:done\n\n**After completing work on a WU, you MUST run \`pnpm wu:done --id WU-XXXX\` from the main checkout.**\n\nThis is the single most forgotten step. Do NOT:\n- Write "To Complete: pnpm wu:done" and stop\n- Ask if you should run wu:done\n- Forget to run wu:done\n\n**DO**: Run \`pnpm wu:done --id WU-XXXX\` immediately after gates pass.\n\n---\n\n## When to Use Initiatives\n\nUse **Initiatives** for multi-phase work spanning multiple WUs:\n\n- **Product visions**: "Build a task management app"\n- **Larger features**: Work requiring multiple WUs across lanes\n- **Complex projects**: Anything that needs phased delivery\n\n\`\`\`bash\n# Create an initiative for multi-phase work\npnpm initiative:create --id INIT-001 --title "Feature Name" \\\\\n --description "..." --phase "Phase 1: MVP" --phase "Phase 2: Polish"\n\n# Add WUs to the initiative\npnpm initiative:add-wu --initiative INIT-001 --wu WU-XXX --phase 1\n\n# Track progress\npnpm initiative:status --id INIT-001\n\`\`\`\n\n**Skip initiatives** for: single-file bug fixes, small docs updates, isolated refactoring.\n\n---\n\n## Quick Start\n\n\`\`\`bash\n# 1. Configure lanes (once per project)\npnpm lane:setup\npnpm lane:validate\npnpm lane:lock\n\n# 2. Create a WU\npnpm wu:create --id WU-XXXX --lane <Lane> --title "Title"\n\n# 3. Edit WU spec with acceptance criteria, then claim:\npnpm wu:claim --id WU-XXXX --lane <Lane>\ncd worktrees/<lane>-wu-xxxx\n\n# 4. Implement in worktree\n\n# 5. Run gates\npnpm gates --docs-only # for docs changes\npnpm gates # for code changes\n\n# 6. Complete (from main checkout)\ncd <project-root>\npnpm wu:done --id WU-XXXX\n\`\`\`\n\n---\n\n## Core Principles\n\n1. **TDD**: Failing test -> implementation -> passing test (>=90% coverage on new code)\n2. **Library-First**: Search existing libraries before custom code\n3. **DRY/SOLID/KISS/YAGNI**: No magic numbers, no hardcoded strings\n4. **Worktree Discipline**: After \`wu:claim\`, work ONLY in the worktree\n5. **Gates Before Done**: All gates must pass before \`wu:done\`\n6. **Do Not Bypass Hooks**: No \`--no-verify\`, fix issues properly\n7. **Always wu:done**: Complete every WU by running \`pnpm wu:done\`\n\n---\n\n## Documentation Structure\n\n### Core (Vendor-Agnostic)\n\n- **LUMENFLOW.md** - This file, main entry point\n- **.lumenflow/constraints.md** - Non-negotiable workflow constraints\n- **.lumenflow/agents/** - Agent instructions (vendor-agnostic)\n- **.lumenflow.config.yaml** - Workflow configuration\n\n### Optional Overlays\n\n- **CLAUDE.md + .claude/agents/** - Claude Code overlay (auto if Claude Code detected)\n- **{{DOCS_TASKS_PATH}}** - Task boards and WU storage (\`lumenflow init --full\`)\n- **{{DOCS_ONBOARDING_PATH}}** - Agent onboarding docs\n- **.lumenflow.framework.yaml** - Framework hint file (created with \`--framework\`)\n\n---\n\n## Worktree Discipline (IMMUTABLE LAW)\n\nAfter claiming a WU, you MUST work in its worktree:\n\n\`\`\`bash\n# 1. Claim creates worktree\npnpm wu:claim --id WU-XXX --lane <lane>\n\n# 2. IMMEDIATELY cd to worktree\ncd worktrees/<lane>-wu-xxx\n\n# 3. ALL work happens here\n\n# 4. Return to main ONLY to complete\ncd <project-root>\npnpm wu:done --id WU-XXX\n\`\`\`\n\n---\n\n## Definition of Done\n\n- Acceptance criteria satisfied\n- Gates green (\`pnpm gates\` or \`pnpm gates --docs-only\`)\n- WU YAML status = \`done\`\n- \`wu:done\` has been run\n\n---\n\n## Commands Reference\n\n| Command | Description |\n| ----------------- | ----------------------------------- |\n| \`pnpm lane:status\` | Show lane lifecycle status |\n| \`pnpm lane:setup\` | Create/update draft lane artifacts |\n| \`pnpm lane:lock\` | Lock lane lifecycle for WU creation |\n| \`pnpm wu:create\` | Create new WU spec |\n| \`pnpm wu:claim\` | Claim WU and create worktree |\n| \`pnpm wu:done\` | Complete WU (merge, stamp, cleanup) |\n| \`pnpm gates\` | Run quality gates |\n| \`pnpm initiative:create\` | Create multi-phase initiative |\n| \`pnpm initiative:status\` | View initiative progress |\n\n---\n\n## Constraints\n\nSee [.lumenflow/constraints.md](.lumenflow/constraints.md) for the 6 non-negotiable rules.\n\n---\n\n## Agent Onboarding\n\n- Start with **CLAUDE.md** if present (Claude Code overlay).\n- Add vendor-agnostic guidance in **.lumenflow/agents/**.\n- Check the onboarding docs in **{{DOCS_ONBOARDING_PATH}}** for detailed guidance.\n`;
110
117
  // Template for .lumenflow/constraints.md
111
118
  export const CONSTRAINTS_MD_TEMPLATE = `# LumenFlow Constraints Capsule\n\n**Version:** 1.0\n**Last updated:** {{DATE}}\n\n## The 6 Non-Negotiable Constraints\n\n### 1. Worktree Discipline and Git Safety\nWork only in worktrees, treat main as read-only, never run destructive git commands on main.\n\n### 2. WUs Are Specs, Not Code\nRespect code_paths boundaries, no feature creep, no code blocks in WU YAML files.\n\n### 3. Docs-Only vs Code WUs\nDocumentation WUs use \`--docs-only\` gates, code WUs run full gates.\n\n### 4. LLM-First, Zero-Fallback Inference\nUse LLMs for semantic tasks, fall back to safe defaults (never regex/keywords).\n\n### 5. Gates and Skip-Gates\nComplete via \`pnpm wu:done\`; skip-gates only for pre-existing failures with \`--reason\` and \`--fix-wu\`.\n\n### 6. Safety and Governance\nRespect privacy rules, approved sources, security policies; when uncertain, choose safer path.\n\n---\n\n## Mini Audit Checklist\n\nBefore running \`wu:done\`, verify:\n\n- [ ] Working in worktree (not main)\n- [ ] Only modified files in \`code_paths\`\n- [ ] Gates pass\n- [ ] No forbidden git commands used\n- [ ] Acceptance criteria satisfied\n\n---\n\n## Escalation Triggers\n\nStop and ask a human when:\n- Same error repeats 3 times\n- Auth or permissions changes required\n- PII/safety issues discovered\n- Cloud spend or secrets involved\n`;
112
119
  // Template for root CLAUDE.md
@@ -1459,14 +1466,18 @@ pnpm wu:infer-lane --paths "packages/@lumenflow/cli/**" --desc "Add CLI command"
1459
1466
 
1460
1467
  ---
1461
1468
 
1462
- ## Generating Lane Taxonomy
1469
+ ## Lane Lifecycle Setup
1463
1470
 
1464
- If no taxonomy exists, generate one:
1471
+ Before creating delivery WUs, complete lane lifecycle:
1465
1472
 
1466
1473
  \`\`\`bash
1467
- pnpm lane:suggest --output .lumenflow.lane-inference.yaml
1474
+ pnpm lane:setup
1475
+ pnpm lane:validate
1476
+ pnpm lane:lock
1468
1477
  \`\`\`
1469
1478
 
1479
+ Use \`pnpm lane:status\` to inspect current state.
1480
+
1470
1481
  ---
1471
1482
 
1472
1483
  ## Common Issues
@@ -1479,12 +1490,14 @@ pnpm lane:suggest --output .lumenflow.lane-inference.yaml
1479
1490
 
1480
1491
  ### "Sub-lane validation failed"
1481
1492
 
1482
- **Cause:** No \`.lumenflow.lane-inference.yaml\` file.
1493
+ **Cause:** Lane lifecycle is not locked or taxonomy is missing.
1483
1494
 
1484
- **Fix:** Create the file or generate it:
1495
+ **Fix:** Run lane lifecycle setup:
1485
1496
 
1486
1497
  \`\`\`bash
1487
- pnpm lane:suggest --output .lumenflow.lane-inference.yaml
1498
+ pnpm lane:setup
1499
+ pnpm lane:validate
1500
+ pnpm lane:lock
1488
1501
  \`\`\`
1489
1502
 
1490
1503
  ---
@@ -1792,8 +1805,12 @@ pnpm typecheck # Check types
1792
1805
  export const GITIGNORE_TEMPLATE = `# Dependencies
1793
1806
  node_modules/
1794
1807
 
1795
- # LumenFlow telemetry (local only, not shared)
1808
+ # LumenFlow runtime state (local only, not shared)
1796
1809
  .lumenflow/telemetry/
1810
+ .lumenflow/flow.log
1811
+ .lumenflow/commands.log
1812
+ .lumenflow/sessions/
1813
+ .lumenflow/memory/
1797
1814
 
1798
1815
  # Worktrees (isolated parallel work directories)
1799
1816
  worktrees/
@@ -1802,6 +1819,9 @@ worktrees/
1802
1819
  dist/
1803
1820
  *.tsbuildinfo
1804
1821
 
1822
+ # Turbo
1823
+ .turbo/
1824
+
1805
1825
  # Environment files
1806
1826
  .env
1807
1827
  .env.local
@@ -1827,6 +1847,9 @@ dist/
1827
1847
  # Coverage reports
1828
1848
  coverage/
1829
1849
 
1850
+ # Turbo
1851
+ .turbo/
1852
+
1830
1853
  # LumenFlow state (local only)
1831
1854
  .lumenflow/state/
1832
1855
 
@@ -1924,5 +1947,10 @@ export const GATE_STUB_SCRIPTS = {
1924
1947
  'spec:linter': 'echo "[lumenflow] spec:linter stub -- install a WU spec linter or replace this script" && exit 0',
1925
1948
  lint: 'echo "[lumenflow] lint stub -- add ESLint or your preferred linter to enable this gate (e.g. eslint .)" && exit 0',
1926
1949
  typecheck: 'echo "[lumenflow] typecheck stub -- add TypeScript or your type checker to enable this gate (e.g. tsc --noEmit)" && exit 0',
1950
+ // WU-1747: format and format:check stubs that auto-detect prettier availability.
1951
+ // When prettier is installed (after pnpm install), they run prettier directly.
1952
+ // When prettier is not installed, they exit 0 with guidance -- matching other gate stubs.
1953
+ format: 'if command -v prettier >/dev/null 2>&1; then prettier --write .; else echo "[lumenflow] format stub -- install prettier to enable formatting (pnpm install)"; fi',
1954
+ 'format:check': 'if command -v prettier >/dev/null 2>&1; then prettier --check .; else echo "[lumenflow] format:check stub -- install prettier to enable this gate (pnpm install)"; fi',
1927
1955
  };
1928
1956
  //# sourceMappingURL=init-templates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init-templates.js","sourceRoot":"","sources":["../src/init-templates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init-templates.js","sourceRoot":"","sources":["../src/init-templates.ts"],"names":[],"mappings":"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"}
package/dist/init.js CHANGED
@@ -10,6 +10,7 @@
10
10
  * WU-1643: Extracted template constants into init-templates.ts
11
11
  * WU-1644: Extracted detection helpers into init-detection.ts,
12
12
  * scaffolding helpers into init-scaffolding.ts
13
+ * WU-1748: Deferred lane lifecycle - init no longer finalizes lane artifacts
13
14
  */
14
15
  import * as fs from 'node:fs';
15
16
  import * as path from 'node:path';
@@ -29,8 +30,9 @@ import { integrateClaudeCode } from './commands/integrate.js';
29
30
  // WU-1433: Import public manifest to derive scripts (no hardcoded subset)
30
31
  import { getPublicManifest } from './public-manifest.js';
31
32
  import { runCLI } from './cli-entry-point.js';
33
+ import { buildInitLaneLifecycleMessage, LANE_LIFECYCLE_STATUS } from './lane-lifecycle-process.js';
32
34
  // WU-1643: Import template constants from dedicated data module
33
- import { DEFAULT_LANE_DEFINITIONS, AGENTS_MD_TEMPLATE, LUMENFLOW_MD_TEMPLATE, CONSTRAINTS_MD_TEMPLATE, CLAUDE_MD_TEMPLATE, CLAUDE_SETTINGS_TEMPLATE, CURSOR_RULES_TEMPLATE, WINDSURF_RULES_TEMPLATE, CLINE_RULES_TEMPLATE, AIDER_CONF_TEMPLATE, MCP_JSON_TEMPLATE, BACKLOG_TEMPLATE, STATUS_TEMPLATE, WU_TEMPLATE_YAML, FRAMEWORK_HINT_TEMPLATE, FRAMEWORK_OVERLAY_TEMPLATE, QUICK_REF_COMMANDS_TEMPLATE, FIRST_WU_MISTAKES_TEMPLATE, TROUBLESHOOTING_WU_DONE_TEMPLATE, AGENT_SAFETY_CARD_TEMPLATE, LANE_INFERENCE_TEMPLATE, STARTING_PROMPT_TEMPLATE, WU_CREATE_CHECKLIST_TEMPLATE, FIRST_15_MINS_TEMPLATE, LOCAL_ONLY_TEMPLATE, LANE_INFERENCE_DOC_TEMPLATE, WU_SIZING_GUIDE_TEMPLATE, WU_LIFECYCLE_SKILL_TEMPLATE, WORKTREE_DISCIPLINE_SKILL_TEMPLATE, LUMENFLOW_GATES_SKILL_TEMPLATE, GITIGNORE_TEMPLATE, PRETTIERIGNORE_TEMPLATE, SAFE_GIT_TEMPLATE, PRE_COMMIT_TEMPLATE, GATE_STUB_SCRIPTS, SCRIPT_ARG_OVERRIDES, } from './init-templates.js';
35
+ import { AGENTS_MD_TEMPLATE, LUMENFLOW_MD_TEMPLATE, CONSTRAINTS_MD_TEMPLATE, CLAUDE_MD_TEMPLATE, CLAUDE_SETTINGS_TEMPLATE, CURSOR_RULES_TEMPLATE, WINDSURF_RULES_TEMPLATE, CLINE_RULES_TEMPLATE, AIDER_CONF_TEMPLATE, MCP_JSON_TEMPLATE, BACKLOG_TEMPLATE, STATUS_TEMPLATE, WU_TEMPLATE_YAML, FRAMEWORK_HINT_TEMPLATE, FRAMEWORK_OVERLAY_TEMPLATE, QUICK_REF_COMMANDS_TEMPLATE, FIRST_WU_MISTAKES_TEMPLATE, TROUBLESHOOTING_WU_DONE_TEMPLATE, AGENT_SAFETY_CARD_TEMPLATE, STARTING_PROMPT_TEMPLATE, WU_CREATE_CHECKLIST_TEMPLATE, FIRST_15_MINS_TEMPLATE, LOCAL_ONLY_TEMPLATE, LANE_INFERENCE_DOC_TEMPLATE, WU_SIZING_GUIDE_TEMPLATE, WU_LIFECYCLE_SKILL_TEMPLATE, WORKTREE_DISCIPLINE_SKILL_TEMPLATE, LUMENFLOW_GATES_SKILL_TEMPLATE, GITIGNORE_TEMPLATE, PRETTIERIGNORE_TEMPLATE, SAFE_GIT_TEMPLATE, PRE_COMMIT_TEMPLATE, GATE_STUB_SCRIPTS, SCRIPT_ARG_OVERRIDES, } from './init-templates.js';
34
36
  // WU-1644: Import detection helpers from dedicated module
35
37
  import { checkPrerequisites, getDocsPath, detectDocsStructure, detectDefaultClient, isGitRepo, hasGitCommits, detectGitStateConfig, } from './init-detection.js';
36
38
  // WU-1644: Re-export detection functions for backwards compatibility
@@ -163,7 +165,7 @@ async function checkBranchGuard(targetDir, result) {
163
165
  * WU-1364: Supports git config overrides (requireRemote)
164
166
  * WU-1383: Adds enforcement hooks config for Claude client by default
165
167
  */
166
- function generateLumenflowConfigYaml(gatePreset, gitConfigOverride, client) {
168
+ function generateLumenflowConfigYaml(gatePreset, gitConfigOverride, client, docsPaths) {
167
169
  // WU-1382: Add managed file header to prevent manual edits
168
170
  const header = `# ============================================================================
169
171
  # LUMENFLOW MANAGED FILE - DO NOT EDIT MANUALLY
@@ -181,6 +183,16 @@ function generateLumenflowConfigYaml(gatePreset, gitConfigOverride, client) {
181
183
  `;
182
184
  const config = getDefaultConfig();
183
185
  config.directories.agentsDir = LUMENFLOW_AGENTS_DIR;
186
+ // WU-1755: Override directory paths to match detected docs structure.
187
+ // Without this, schema defaults (arc42 paths) diverge from scaffolded structure (simple paths).
188
+ if (docsPaths) {
189
+ config.directories.wuDir = `${docsPaths.tasks}/wu`;
190
+ config.directories.initiativesDir = `${docsPaths.tasks}/initiatives`;
191
+ config.directories.backlogPath = `${docsPaths.tasks}/backlog.md`;
192
+ config.directories.statusPath = `${docsPaths.tasks}/status.md`;
193
+ config.directories.plansDir = `${docsPaths.operations}/plans`;
194
+ config.directories.onboardingDir = docsPaths.onboarding;
195
+ }
184
196
  // WU-1067: Add gates.execution section with preset if specified
185
197
  if (gatePreset && GATE_PRESETS[gatePreset]) {
186
198
  const presetConfig = GATE_PRESETS[gatePreset];
@@ -189,9 +201,11 @@ function generateLumenflowConfigYaml(gatePreset, gitConfigOverride, client) {
189
201
  ...presetConfig,
190
202
  };
191
203
  }
192
- // WU-1307: Add default lane definitions
204
+ // WU-1748: Initialize explicit lifecycle status without final lane artifacts
193
205
  config.lanes = {
194
- definitions: DEFAULT_LANE_DEFINITIONS,
206
+ lifecycle: {
207
+ status: LANE_LIFECYCLE_STATUS.UNCONFIGURED,
208
+ },
195
209
  };
196
210
  // WU-1364: Add git config overrides (e.g., requireRemote: false for local-only)
197
211
  if (gitConfigOverride) {
@@ -411,7 +425,7 @@ export async function scaffoldProject(targetDir, options) {
411
425
  'To modify configuration, use CLI commands (e.g., pnpm lumenflow:init --force) ' +
412
426
  'instead of manual editing.');
413
427
  }
414
- await createFile(configPath, generateLumenflowConfigYaml(options.gatePreset, gitConfigOverride, client), options.force ? 'force' : 'skip', result, targetDir);
428
+ await createFile(configPath, generateLumenflowConfigYaml(options.gatePreset, gitConfigOverride, client, docsPaths), options.force ? 'force' : 'skip', result, targetDir);
415
429
  // WU-1171: Create AGENTS.md (universal entry point for all agents)
416
430
  try {
417
431
  const agentsTemplate = loadTemplate('core/AGENTS.md.template');
@@ -582,22 +596,16 @@ async function scaffoldSafetyScripts(targetDir, options, result) {
582
596
  const PRETTIER_VERSION = '^3.8.0';
583
597
  /** WU-1517: Prettier package name constant */
584
598
  const PRETTIER_PACKAGE_NAME = 'prettier';
585
- /** WU-1517: Format script names */
586
- const FORMAT_SCRIPT_NAME = 'format';
587
- const FORMAT_CHECK_SCRIPT_NAME = 'format:check';
588
- /** WU-1517: Format script commands using prettier */
589
- const FORMAT_SCRIPT_COMMAND = 'prettier --write .';
590
- const FORMAT_CHECK_SCRIPT_COMMAND = 'prettier --check .';
591
599
  /**
592
600
  * WU-1300: Inject LumenFlow scripts into package.json
593
- * WU-1517: Also adds prettier devDependency and format/format:check scripts
601
+ * WU-1517: Also adds prettier devDependency
594
602
  * WU-1518: Also adds gate stub scripts (spec:linter, lint, typecheck)
603
+ * WU-1747: format and format:check are now part of GATE_STUB_SCRIPTS
595
604
  * - Creates package.json if it doesn't exist
596
605
  * - Preserves existing scripts (doesn't overwrite unless --force)
597
606
  * - Adds missing LumenFlow scripts
598
607
  * - Adds prettier to devDependencies
599
- * - Adds format and format:check scripts
600
- * - Adds gate stub scripts for spec:linter, lint, typecheck
608
+ * - Adds gate stub scripts for spec:linter, lint, typecheck, format, format:check
601
609
  */
602
610
  async function injectPackageJsonScripts(targetDir, options, result) {
603
611
  const packageJsonPath = path.join(targetDir, 'package.json');
@@ -631,20 +639,9 @@ async function injectPackageJsonScripts(targetDir, options, result) {
631
639
  }
632
640
  }
633
641
  }
634
- // WU-1517: Add format and format:check scripts
635
- const formatScripts = {
636
- [FORMAT_SCRIPT_NAME]: FORMAT_SCRIPT_COMMAND,
637
- [FORMAT_CHECK_SCRIPT_NAME]: FORMAT_CHECK_SCRIPT_COMMAND,
638
- };
639
- for (const [scriptName, scriptCommand] of Object.entries(formatScripts)) {
640
- if (options.force || !(scriptName in scripts)) {
641
- if (!(scriptName in scripts)) {
642
- scripts[scriptName] = scriptCommand;
643
- modified = true;
644
- }
645
- }
646
- }
647
- // WU-1518: Add gate stub scripts (spec:linter, lint, typecheck)
642
+ // WU-1518: Add gate stub scripts (spec:linter, lint, typecheck, format, format:check)
643
+ // WU-1747: format and format:check are now part of GATE_STUB_SCRIPTS with
644
+ // auto-detection of prettier availability, so they pass immediately after init.
648
645
  // These stubs let `pnpm gates` pass on a fresh project without manual script additions.
649
646
  // Projects replace them with real tooling when ready.
650
647
  for (const [scriptName, scriptCommand] of Object.entries(GATE_STUB_SCRIPTS)) {
@@ -685,39 +682,9 @@ async function scaffoldFullDocs(targetDir, options, result, tokens) {
685
682
  await createFile(path.join(tasksDir, 'backlog.md'), BACKLOG_TEMPLATE, options.force, result, targetDir);
686
683
  await createFile(path.join(tasksDir, 'status.md'), STATUS_TEMPLATE, options.force, result, targetDir);
687
684
  await createFile(path.join(templatesDir, 'wu-template.yaml'), processTemplate(WU_TEMPLATE_YAML, tokens), options.force, result, targetDir);
688
- // WU-1300: Scaffold lane inference configuration
689
- await scaffoldLaneInference(targetDir, options, result, tokens);
690
685
  // WU-1083: Scaffold agent onboarding docs with --full
691
686
  await scaffoldAgentOnboardingDocs(targetDir, options, result, tokens);
692
687
  }
693
- /**
694
- * WU-1307: Scaffold lane inference configuration
695
- * Uses hierarchical Parent->Sublane format required by lane-inference.ts
696
- */
697
- async function scaffoldLaneInference(targetDir, options, result, tokens) {
698
- // WU-1307: Add framework-specific lanes in hierarchical format if framework is provided
699
- let frameworkLanes = '';
700
- if (options.framework) {
701
- const { name, slug } = normalizeFrameworkName(options.framework);
702
- // Add framework lanes in hierarchical format (indentation matters in YAML)
703
- frameworkLanes = `
704
- # Framework-specific lanes (added with --framework ${name})
705
- ${name}:
706
- description: '${name} framework-specific code'
707
- code_paths:
708
- - 'src/${slug}/**'
709
- - 'packages/${slug}/**'
710
- keywords:
711
- - '${slug}'
712
- - '${name.toLowerCase()}'
713
- `;
714
- }
715
- const laneInferenceContent = processTemplate(LANE_INFERENCE_TEMPLATE, {
716
- ...tokens,
717
- FRAMEWORK_LANES: frameworkLanes,
718
- });
719
- await createFile(path.join(targetDir, '.lumenflow.lane-inference.yaml'), laneInferenceContent, options.force ? 'force' : 'skip', result, targetDir);
720
- }
721
688
  /**
722
689
  * WU-1083: Scaffold agent onboarding documentation
723
690
  * WU-1300: Added starting-prompt.md
@@ -950,6 +917,8 @@ export async function main() {
950
917
  console.log('\n[lumenflow init] Done! Next steps:');
951
918
  console.log(' 1. Review AGENTS.md and LUMENFLOW.md for workflow documentation');
952
919
  console.log(` 2. Edit ${CONFIG_FILE_NAME} to match your project structure`);
920
+ console.log('');
921
+ console.log(` ${buildInitLaneLifecycleMessage(LANE_LIFECYCLE_STATUS.UNCONFIGURED)}`);
953
922
  if (result.integrationFiles && result.integrationFiles.length > 0) {
954
923
  console.log(' \u2713 Enforcement hooks installed -- regenerate with: pnpm lumenflow:integrate');
955
924
  }