@lumenflow/cli 3.10.0 → 3.11.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 +78 -74
- package/dist/docs-sync.js +24 -29
- package/dist/docs-sync.js.map +1 -1
- package/dist/init-lane-validation.js +102 -17
- package/dist/init-lane-validation.js.map +1 -1
- package/dist/init-scaffolding.js +2 -9
- package/dist/init-scaffolding.js.map +1 -1
- package/dist/init.js +7 -18
- package/dist/init.js.map +1 -1
- package/dist/lane-lifecycle-process.js +16 -1
- package/dist/lane-lifecycle-process.js.map +1 -1
- package/dist/lane-suggest.js +5 -1
- package/dist/lane-suggest.js.map +1 -1
- package/dist/onboarding-template-paths.js +19 -0
- package/dist/onboarding-template-paths.js.map +1 -0
- package/dist/public-manifest.js +2 -2
- package/dist/public-manifest.js.map +1 -1
- package/dist/sync-templates.js +12 -1
- package/dist/sync-templates.js.map +1 -1
- package/dist/template-directory-resolver.js +71 -0
- package/dist/template-directory-resolver.js.map +1 -0
- package/dist/wu-done-check.js +33 -13
- package/dist/wu-done-check.js.map +1 -1
- package/dist/wu-done.js +6 -5
- package/dist/wu-done.js.map +1 -1
- package/dist/wu-spawn-prompt-builders.js +96 -23
- package/dist/wu-spawn-prompt-builders.js.map +1 -1
- package/package.json +8 -8
- package/packs/sidekick/.turbo/turbo-build.log +1 -1
- package/packs/sidekick/package.json +1 -1
- package/packs/software-delivery/.turbo/turbo-build.log +1 -1
- package/packs/software-delivery/package.json +1 -1
- package/templates/core/.lumenflow/constraints.md.template +3 -3
- package/templates/core/LUMENFLOW.md.template +17 -17
- package/templates/core/UPGRADING.md.template +30 -11
- package/templates/core/ai/onboarding/agent-safety-card.md.template +15 -16
- package/templates/core/ai/onboarding/first-15-mins.md.template +80 -0
- package/templates/core/ai/onboarding/first-wu-mistakes.md.template +3 -3
- package/templates/core/ai/onboarding/initiative-orchestration.md.template +1 -1
- package/templates/core/ai/onboarding/lane-inference.md.template +64 -0
- package/templates/core/ai/onboarding/local-only.md.template +56 -0
- package/templates/core/ai/onboarding/quick-ref-commands.md.template +122 -92
- package/templates/core/ai/onboarding/starting-prompt.md.template +91 -46
- package/templates/core/ai/onboarding/vendor-support.md.template +14 -20
- package/templates/core/ai/onboarding/wu-create-checklist.md.template +31 -82
- package/templates/core/ai/onboarding/wu-sizing-guide.md.template +48 -0
- package/templates/vendors/claude/.claude/skills/bug-classification/SKILL.md.template +2 -2
- package/templates/vendors/claude/.claude/skills/code-quality/SKILL.md.template +2 -2
- package/templates/vendors/claude/.claude/skills/context-management/SKILL.md.template +3 -3
- package/templates/vendors/claude/.claude/skills/execution-memory/SKILL.md.template +1 -1
- package/templates/vendors/claude/.claude/skills/initiative-management/SKILL.md.template +2 -2
- package/templates/vendors/claude/.claude/skills/library-first/SKILL.md.template +2 -2
- package/templates/vendors/claude/.claude/skills/lumenflow-gates/SKILL.md.template +3 -3
- package/templates/vendors/claude/.claude/skills/multi-agent-coordination/SKILL.md.template +2 -2
- package/templates/vendors/claude/.claude/skills/tdd-workflow/SKILL.md.template +3 -3
- package/templates/vendors/claude/.claude/skills/worktree-discipline/SKILL.md.template +10 -10
- package/templates/vendors/claude/.claude/skills/wu-lifecycle/SKILL.md.template +3 -3
package/README.md
CHANGED
|
@@ -51,32 +51,35 @@ This package provides CLI commands for the LumenFlow workflow framework, includi
|
|
|
51
51
|
|
|
52
52
|
### Work Unit Management
|
|
53
53
|
|
|
54
|
-
| Command
|
|
55
|
-
|
|
|
56
|
-
| `
|
|
57
|
-
| `
|
|
58
|
-
| `
|
|
59
|
-
| `wu-
|
|
60
|
-
| `wu-
|
|
61
|
-
| `wu-
|
|
62
|
-
| `wu-
|
|
63
|
-
| `wu-
|
|
64
|
-
| `wu-
|
|
65
|
-
| `wu-
|
|
66
|
-
| `wu-
|
|
67
|
-
| `wu-
|
|
68
|
-
| `wu-
|
|
69
|
-
| `wu-
|
|
70
|
-
| `wu-
|
|
71
|
-
| `wu-
|
|
72
|
-
| `wu-
|
|
73
|
-
| `wu-
|
|
74
|
-
| `wu-
|
|
75
|
-
| `wu-
|
|
76
|
-
| `wu-
|
|
77
|
-
| `wu-
|
|
78
|
-
| `wu-
|
|
79
|
-
| `wu-
|
|
54
|
+
| Command | Description |
|
|
55
|
+
| ------------------ | ------------------------------------------------------------- |
|
|
56
|
+
| `approval-list` | List control-plane approvals with optional filters |
|
|
57
|
+
| `approval-request` | Request control-plane approval for a workflow action |
|
|
58
|
+
| `approval-review` | Resolve a control-plane approval decision |
|
|
59
|
+
| `wu-block` | Block WU with reason |
|
|
60
|
+
| `wu-brief` | Generate handoff prompt for sub-agent WU execution |
|
|
61
|
+
| `wu-claim` | Claim WU and create worktree |
|
|
62
|
+
| `wu-cleanup` | Cleanup after PR merge |
|
|
63
|
+
| `wu-create` | Create new WU spec |
|
|
64
|
+
| `wu-delegate` | Generate delegation prompt and record explicit lineage intent |
|
|
65
|
+
| `wu-delete` | Delete WU spec and cleanup |
|
|
66
|
+
| `wu-deps` | Show WU dependencies |
|
|
67
|
+
| `wu-done` | Complete WU (merge, stamp, cleanup) from main |
|
|
68
|
+
| `wu-edit` | Edit WU spec fields |
|
|
69
|
+
| `wu-escalate` | Show or resolve WU escalation status |
|
|
70
|
+
| `wu-infer-lane` | Infer lane from code paths/description |
|
|
71
|
+
| `wu-preflight` | Pre-flight checks before wu:done |
|
|
72
|
+
| `wu-prep` | Run gates in worktree, prep for wu:done |
|
|
73
|
+
| `wu-proto` | Create WU prototype |
|
|
74
|
+
| `wu-prune` | Clean stale worktrees |
|
|
75
|
+
| `wu-recover` | Analyze and fix WU state inconsistencies |
|
|
76
|
+
| `wu-release` | Release orphaned WU (in_progress to ready) |
|
|
77
|
+
| `wu-repair` | Repair WU state issues |
|
|
78
|
+
| `wu-sandbox` | Run command through hardened WU sandbox backend |
|
|
79
|
+
| `wu-status` | Show WU status, location, valid commands |
|
|
80
|
+
| `wu-unblock` | Unblock WU |
|
|
81
|
+
| `wu-unlock-lane` | Unlock stuck lane |
|
|
82
|
+
| `wu-validate` | Validate WU spec |
|
|
80
83
|
|
|
81
84
|
### Memory & Session
|
|
82
85
|
|
|
@@ -122,13 +125,14 @@ This package provides CLI commands for the LumenFlow workflow framework, includi
|
|
|
122
125
|
|
|
123
126
|
### Metrics & Analytics
|
|
124
127
|
|
|
125
|
-
| Command | Description
|
|
126
|
-
| ------------------- |
|
|
127
|
-
| `
|
|
128
|
-
| `flow-
|
|
129
|
-
| `
|
|
130
|
-
| `metrics`
|
|
131
|
-
| `metrics
|
|
128
|
+
| Command | Description |
|
|
129
|
+
| ------------------- | ------------------------------ |
|
|
130
|
+
| `cost-summary` | Summarize local cost telemetry |
|
|
131
|
+
| `flow-bottlenecks` | Identify flow bottlenecks |
|
|
132
|
+
| `flow-report` | Generate flow metrics report |
|
|
133
|
+
| `lumenflow-metrics` | View workflow metrics (alias) |
|
|
134
|
+
| `metrics` | View workflow metrics |
|
|
135
|
+
| `metrics-snapshot` | Capture metrics snapshot |
|
|
132
136
|
|
|
133
137
|
### Lane Tooling
|
|
134
138
|
|
|
@@ -155,42 +159,42 @@ This package provides CLI commands for the LumenFlow workflow framework, includi
|
|
|
155
159
|
|
|
156
160
|
### System & Setup
|
|
157
161
|
|
|
158
|
-
| Command | Description
|
|
159
|
-
| -------------------------- |
|
|
160
|
-
| `backlog-prune` | Clean stale backlog entries
|
|
161
|
-
| `cloud-connect` | Connect workspace.yaml to cloud control plane
|
|
162
|
-
| `config-get` | Read and display a value from workspace.yaml software_delivery
|
|
163
|
-
| `config-set` | Safely update workspace.yaml software_delivery via micro-worktree
|
|
164
|
-
| `init-plan` | Link plan to initiative (alias)
|
|
165
|
-
| `lumenflow` | Initialize LumenFlow in a project
|
|
166
|
-
| `lumenflow-commands` | List all available CLI commands
|
|
167
|
-
| `lumenflow-docs-sync` |
|
|
168
|
-
| `lumenflow-doctor` | Diagnose LumenFlow configuration
|
|
169
|
-
| `lumenflow-init` | Initialize LumenFlow in a project (alias)
|
|
170
|
-
| `lumenflow-integrate` | Generate enforcement hooks for client
|
|
171
|
-
| `lumenflow-onboard` | Legacy entrypoint; use "npx lumenflow" for bootstrap-all onboarding
|
|
172
|
-
| `lumenflow-release` | Run release workflow
|
|
173
|
-
| `lumenflow-sync-templates` | Sync templates to project
|
|
174
|
-
| `lumenflow-upgrade` | Upgrade LumenFlow packages
|
|
175
|
-
| `onboard` | Legacy entrypoint; use "npx lumenflow" for bootstrap-all onboarding
|
|
176
|
-
| `pack-author` | Author a secure domain pack from templates
|
|
177
|
-
| `pack-hash` | Compute integrity hash for a domain pack
|
|
178
|
-
| `pack-install` | Install a domain pack into workspace
|
|
179
|
-
| `pack-publish` | Publish a domain pack to a registry
|
|
180
|
-
| `pack-scaffold` | Scaffold a new domain pack
|
|
181
|
-
| `pack-search` | Search for domain packs in a registry
|
|
182
|
-
| `pack-validate` | Validate a domain pack for integrity
|
|
183
|
-
| `plan-create` | Create a new plan
|
|
184
|
-
| `plan-edit` | Edit plan content
|
|
185
|
-
| `plan-link` | Link plan to WU or initiative
|
|
186
|
-
| `plan-promote` | Promote plan to WU
|
|
187
|
-
| `state-bootstrap` | Bootstrap state store
|
|
188
|
-
| `state-cleanup` | Clean up stale state data
|
|
189
|
-
| `state-doctor` | Diagnose state store issues
|
|
190
|
-
| `state-emit` | Emit corrective event to state store (WU-2241)
|
|
191
|
-
| `sync-templates` | Sync templates to project (alias)
|
|
192
|
-
| `templates-sync` | Sync templates to project (alias)
|
|
193
|
-
| `workspace-init` | Legacy entrypoint; use "npx lumenflow" for bootstrap-all onboarding
|
|
162
|
+
| Command | Description |
|
|
163
|
+
| -------------------------- | ---------------------------------------------------------------------- |
|
|
164
|
+
| `backlog-prune` | Clean stale backlog entries |
|
|
165
|
+
| `cloud-connect` | Connect workspace.yaml to cloud control plane |
|
|
166
|
+
| `config-get` | Read and display a value from workspace.yaml software_delivery |
|
|
167
|
+
| `config-set` | Safely update workspace.yaml software_delivery via micro-worktree |
|
|
168
|
+
| `init-plan` | Link plan to initiative (alias) |
|
|
169
|
+
| `lumenflow` | Initialize LumenFlow in a project |
|
|
170
|
+
| `lumenflow-commands` | List all available CLI commands |
|
|
171
|
+
| `lumenflow-docs-sync` | Refresh scaffolded onboarding docs and supported vendor assets (alias) |
|
|
172
|
+
| `lumenflow-doctor` | Diagnose LumenFlow configuration |
|
|
173
|
+
| `lumenflow-init` | Initialize LumenFlow in a project (alias) |
|
|
174
|
+
| `lumenflow-integrate` | Generate enforcement hooks for client |
|
|
175
|
+
| `lumenflow-onboard` | Legacy entrypoint; use "npx lumenflow" for bootstrap-all onboarding |
|
|
176
|
+
| `lumenflow-release` | Run release workflow |
|
|
177
|
+
| `lumenflow-sync-templates` | Sync templates to project |
|
|
178
|
+
| `lumenflow-upgrade` | Upgrade LumenFlow packages |
|
|
179
|
+
| `onboard` | Legacy entrypoint; use "npx lumenflow" for bootstrap-all onboarding |
|
|
180
|
+
| `pack-author` | Author a secure domain pack from templates |
|
|
181
|
+
| `pack-hash` | Compute integrity hash for a domain pack |
|
|
182
|
+
| `pack-install` | Install a domain pack into workspace |
|
|
183
|
+
| `pack-publish` | Publish a domain pack to a registry |
|
|
184
|
+
| `pack-scaffold` | Scaffold a new domain pack |
|
|
185
|
+
| `pack-search` | Search for domain packs in a registry |
|
|
186
|
+
| `pack-validate` | Validate a domain pack for integrity |
|
|
187
|
+
| `plan-create` | Create a new plan |
|
|
188
|
+
| `plan-edit` | Edit plan content |
|
|
189
|
+
| `plan-link` | Link plan to WU or initiative |
|
|
190
|
+
| `plan-promote` | Promote plan to WU |
|
|
191
|
+
| `state-bootstrap` | Bootstrap state store |
|
|
192
|
+
| `state-cleanup` | Clean up stale state data |
|
|
193
|
+
| `state-doctor` | Diagnose state store issues |
|
|
194
|
+
| `state-emit` | Emit corrective event to state store (WU-2241) |
|
|
195
|
+
| `sync-templates` | Sync templates to project (alias) |
|
|
196
|
+
| `templates-sync` | Sync templates to project (alias) |
|
|
197
|
+
| `workspace-init` | Legacy entrypoint; use "npx lumenflow" for bootstrap-all onboarding |
|
|
194
198
|
|
|
195
199
|
### File & Git Operations
|
|
196
200
|
|
|
@@ -294,14 +298,14 @@ To upgrade LumenFlow packages:
|
|
|
294
298
|
# Check for available updates
|
|
295
299
|
pnpm outdated @lumenflow/*
|
|
296
300
|
|
|
297
|
-
# Update all LumenFlow packages
|
|
298
|
-
pnpm
|
|
301
|
+
# Update all LumenFlow packages atomically
|
|
302
|
+
pnpm lumenflow:upgrade --latest
|
|
299
303
|
|
|
300
|
-
#
|
|
301
|
-
pnpm
|
|
304
|
+
# Refresh scaffolded onboarding docs and vendor assets
|
|
305
|
+
pnpm docs:sync --force
|
|
302
306
|
```
|
|
303
307
|
|
|
304
|
-
**Important**: Always run `docs:sync` after package changes to
|
|
308
|
+
**Important**: Always run `docs:sync --force` after package changes to refresh scaffolded onboarding docs and supported vendor assets.
|
|
305
309
|
|
|
306
310
|
For current setup guidance and troubleshooting, see [LUMENFLOW.md](https://lumenflow.dev).
|
|
307
311
|
|
package/dist/docs-sync.js
CHANGED
|
@@ -10,11 +10,13 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import * as fs from 'node:fs';
|
|
12
12
|
import * as path from 'node:path';
|
|
13
|
-
import { fileURLToPath } from 'node:url';
|
|
14
13
|
import { createWUParser, WU_OPTIONS, getDefaultConfig, createError, ErrorCodes, } from '@lumenflow/core';
|
|
14
|
+
import { createWuPaths } from '@lumenflow/core/wu-paths';
|
|
15
15
|
import { GIT_DIRECTORY_NAME, getConfig } from '@lumenflow/core/config';
|
|
16
16
|
// WU-1362: Import worktree guard utilities for branch checking
|
|
17
17
|
import { isMainBranch, isInWorktree } from '@lumenflow/core/core/worktree-guard';
|
|
18
|
+
import { SCAFFOLDED_ONBOARDING_TEMPLATE_PATHS } from './onboarding-template-paths.js';
|
|
19
|
+
import { resolveCliTemplatesDir } from './template-directory-resolver.js';
|
|
18
20
|
/**
|
|
19
21
|
* WU-1085: CLI option definitions for docs-sync command
|
|
20
22
|
*/
|
|
@@ -34,7 +36,7 @@ const DOCS_SYNC_OPTIONS = {
|
|
|
34
36
|
export function parseDocsSyncOptions() {
|
|
35
37
|
const opts = createWUParser({
|
|
36
38
|
name: 'lumenflow-docs-sync',
|
|
37
|
-
description: 'Sync
|
|
39
|
+
description: 'Sync scaffolded onboarding docs and supported vendor assets (skips existing files by default)',
|
|
38
40
|
options: Object.values(DOCS_SYNC_OPTIONS),
|
|
39
41
|
});
|
|
40
42
|
return {
|
|
@@ -64,20 +66,7 @@ function resolveDocsSyncDirectories(targetDir) {
|
|
|
64
66
|
* Falls back to src/templates/ for development
|
|
65
67
|
*/
|
|
66
68
|
export function getTemplatesDir() {
|
|
67
|
-
|
|
68
|
-
const __dirname = path.dirname(__filename);
|
|
69
|
-
// In production: dist/docs-sync.js -> templates/
|
|
70
|
-
// In development: src/docs-sync.ts -> ../templates/
|
|
71
|
-
const distTemplates = path.join(__dirname, '..', 'templates');
|
|
72
|
-
if (fs.existsSync(distTemplates)) {
|
|
73
|
-
return distTemplates;
|
|
74
|
-
}
|
|
75
|
-
// Fallback for tests running from src
|
|
76
|
-
const srcTemplates = path.join(__dirname, '..', 'templates');
|
|
77
|
-
if (fs.existsSync(srcTemplates)) {
|
|
78
|
-
return srcTemplates;
|
|
79
|
-
}
|
|
80
|
-
throw createError(ErrorCodes.FILE_NOT_FOUND, `Templates directory not found at ${distTemplates}`);
|
|
69
|
+
return resolveCliTemplatesDir();
|
|
81
70
|
}
|
|
82
71
|
/**
|
|
83
72
|
* WU-1124: Load a template file from the bundled templates directory
|
|
@@ -137,17 +126,6 @@ async function createFile(filePath, content, force, result, targetDir) {
|
|
|
137
126
|
fs.writeFileSync(filePath, content);
|
|
138
127
|
result.created.push(relativePath);
|
|
139
128
|
}
|
|
140
|
-
/**
|
|
141
|
-
* WU-1124: Template paths for agent onboarding docs
|
|
142
|
-
* Maps output file names to template paths
|
|
143
|
-
*/
|
|
144
|
-
const ONBOARDING_TEMPLATE_PATHS = {
|
|
145
|
-
'quick-ref-commands.md': 'core/ai/onboarding/quick-ref-commands.md.template',
|
|
146
|
-
'first-wu-mistakes.md': 'core/ai/onboarding/first-wu-mistakes.md.template',
|
|
147
|
-
'troubleshooting-wu-done.md': 'core/ai/onboarding/troubleshooting-wu-done.md.template',
|
|
148
|
-
'agent-safety-card.md': 'core/ai/onboarding/agent-safety-card.md.template',
|
|
149
|
-
'wu-create-checklist.md': 'core/ai/onboarding/wu-create-checklist.md.template',
|
|
150
|
-
};
|
|
151
129
|
const CLAUDE_VENDOR_TEMPLATE_ROOT = ['vendors', 'claude', '.claude'].join('/');
|
|
152
130
|
const CLAUDE_SKILLS_TEMPLATE_ROOT = `${CLAUDE_VENDOR_TEMPLATE_ROOT}/skills`;
|
|
153
131
|
/**
|
|
@@ -168,13 +146,30 @@ export async function syncAgentDocs(targetDir, options) {
|
|
|
168
146
|
created: [],
|
|
169
147
|
skipped: [],
|
|
170
148
|
};
|
|
149
|
+
const wuPaths = createWuPaths({ projectRoot: targetDir });
|
|
150
|
+
const wuDir = wuPaths.WU_DIR().split(path.sep).join('/');
|
|
151
|
+
const tasksDir = path.posix.dirname(wuDir);
|
|
152
|
+
const onboardingPath = wuPaths.ONBOARDING_DIR().split(path.sep).join('/');
|
|
153
|
+
const quickRefPath = wuPaths.QUICK_REF_PATH().split(path.sep).join('/');
|
|
154
|
+
const operationsPath = path.posix.dirname(tasksDir);
|
|
155
|
+
const backlogPath = wuPaths.BACKLOG().split(path.sep).join('/');
|
|
156
|
+
const statusPath = wuPaths.STATUS().split(path.sep).join('/');
|
|
171
157
|
const tokens = {
|
|
172
158
|
DATE: getCurrentDate(),
|
|
159
|
+
PROJECT_ROOT: '<project-root>',
|
|
160
|
+
QUICK_REF_LINK: quickRefPath,
|
|
161
|
+
DOCS_OPERATIONS_PATH: operationsPath,
|
|
162
|
+
DOCS_TASKS_PATH: tasksDir,
|
|
163
|
+
DOCS_ONBOARDING_PATH: onboardingPath,
|
|
164
|
+
DOCS_WU_DIR_PATH: wuDir,
|
|
165
|
+
DOCS_TEMPLATES_DIR_PATH: `${tasksDir}/templates`,
|
|
166
|
+
DOCS_BACKLOG_PATH: backlogPath,
|
|
167
|
+
DOCS_STATUS_PATH: statusPath,
|
|
173
168
|
};
|
|
174
169
|
const { onboardingDir } = resolveDocsSyncDirectories(targetDir);
|
|
175
170
|
await createDirectory(onboardingDir, result, targetDir);
|
|
176
171
|
// WU-1124: Load and process templates from bundled files
|
|
177
|
-
for (const [outputFile, templatePath] of Object.entries(
|
|
172
|
+
for (const [outputFile, templatePath] of Object.entries(SCAFFOLDED_ONBOARDING_TEMPLATE_PATHS)) {
|
|
178
173
|
const templateContent = loadTemplate(templatePath);
|
|
179
174
|
const processedContent = processTemplate(templateContent, tokens);
|
|
180
175
|
await createFile(path.join(onboardingDir, outputFile), processedContent, options.force, result, targetDir);
|
|
@@ -251,7 +246,7 @@ async function checkBranchGuard(targetDir) {
|
|
|
251
246
|
export async function main() {
|
|
252
247
|
const opts = parseDocsSyncOptions();
|
|
253
248
|
const targetDir = process.cwd();
|
|
254
|
-
console.log('[lumenflow docs:sync] Syncing
|
|
249
|
+
console.log('[lumenflow docs:sync] Syncing scaffolded onboarding docs and vendor assets...');
|
|
255
250
|
console.log(` Vendor: ${opts.vendor}`);
|
|
256
251
|
console.log(` Force: ${opts.force}`);
|
|
257
252
|
// WU-1362: Check branch guard before writing files
|
package/dist/docs-sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs-sync.js","sourceRoot":"","sources":["../src/docs-sync.ts"],"names":[],"mappings":";AACA,iCAAiC;AACjC,yCAAyC;AACzC;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,
|
|
1
|
+
{"version":3,"file":"docs-sync.js","sourceRoot":"","sources":["../src/docs-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,14 +2,15 @@
|
|
|
2
2
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
3
|
/**
|
|
4
4
|
* @file init-lane-validation.ts
|
|
5
|
-
* Lane config
|
|
5
|
+
* Lane config drift detection against inference taxonomy.
|
|
6
6
|
*
|
|
7
|
-
* WU-1745: Validate lane config against inference hierarchy at init time
|
|
7
|
+
* WU-1745: Validate lane config against inference hierarchy at init time.
|
|
8
|
+
* WU-2326: Inference taxonomy is derived metadata and never blocks
|
|
9
|
+
* workspace-defined lane validation.
|
|
8
10
|
*
|
|
9
11
|
* Cross-checks lane definitions in workspace.yaml software_delivery against
|
|
10
|
-
* .lumenflow.lane-inference.yaml parents
|
|
11
|
-
*
|
|
12
|
-
* at init time instead of deferring to wu:create.
|
|
12
|
+
* .lumenflow.lane-inference.yaml parents and emits non-blocking guidance
|
|
13
|
+
* when taxonomy drifts from workspace definitions.
|
|
13
14
|
*/
|
|
14
15
|
import * as fs from 'node:fs';
|
|
15
16
|
import * as path from 'node:path';
|
|
@@ -33,11 +34,26 @@ function extractParentName(laneName) {
|
|
|
33
34
|
}
|
|
34
35
|
return laneName.substring(0, separatorIndex);
|
|
35
36
|
}
|
|
37
|
+
function extractSubLaneName(laneName) {
|
|
38
|
+
const separatorIndex = laneName.indexOf(LANE_NAME_SEPARATOR);
|
|
39
|
+
if (separatorIndex === -1) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
const subLane = laneName.substring(separatorIndex + LANE_NAME_SEPARATOR.length).trim();
|
|
43
|
+
return subLane.length > 0 ? subLane : null;
|
|
44
|
+
}
|
|
45
|
+
function sortMapValues(map) {
|
|
46
|
+
const sorted = {};
|
|
47
|
+
for (const [parent, subLanes] of Object.entries(map)) {
|
|
48
|
+
sorted[parent] = [...subLanes].sort((left, right) => left.localeCompare(right));
|
|
49
|
+
}
|
|
50
|
+
return sorted;
|
|
51
|
+
}
|
|
36
52
|
/**
|
|
37
|
-
*
|
|
53
|
+
* Detect parent drift between workspace lane definitions and inference taxonomy.
|
|
38
54
|
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
55
|
+
* Workspace definitions are the source of truth. Inference taxonomy drift is
|
|
56
|
+
* reported as warnings only and does not populate invalidLanes.
|
|
41
57
|
*
|
|
42
58
|
* @param configLanes - Lane definitions from workspace.yaml software_delivery
|
|
43
59
|
* @param inferenceParents - Valid parent names from .lumenflow.lane-inference.yaml
|
|
@@ -46,23 +62,20 @@ function extractParentName(laneName) {
|
|
|
46
62
|
export function validateLaneConfigAgainstInference(configLanes, inferenceParents) {
|
|
47
63
|
const warnings = [];
|
|
48
64
|
const invalidLanes = [];
|
|
49
|
-
if (configLanes.length === 0) {
|
|
65
|
+
if (configLanes.length === 0 || inferenceParents.length === 0) {
|
|
50
66
|
return { warnings, invalidLanes };
|
|
51
67
|
}
|
|
52
68
|
const validParentSet = new Set(inferenceParents);
|
|
53
69
|
for (const lane of configLanes) {
|
|
54
70
|
const parent = extractParentName(lane.name);
|
|
55
71
|
if (parent === null) {
|
|
56
|
-
//
|
|
57
|
-
warnings.push(`Lane "${lane.name}" does not use the required "Parent: Sublane" format. ` +
|
|
58
|
-
`Valid parent names: ${inferenceParents.join(', ')}`);
|
|
59
|
-
invalidLanes.push(lane.name);
|
|
72
|
+
// Parent-only lanes are allowed and validated from workspace.yaml elsewhere.
|
|
60
73
|
continue;
|
|
61
74
|
}
|
|
62
75
|
if (!validParentSet.has(parent)) {
|
|
63
|
-
warnings.push(`Lane "${lane.name}" uses
|
|
64
|
-
`
|
|
65
|
-
|
|
76
|
+
warnings.push(`Lane "${lane.name}" uses parent "${parent}" which is missing from ${CONFIG_FILES.LANE_INFERENCE}. ` +
|
|
77
|
+
`workspace.yaml is authoritative for lane validation. ` +
|
|
78
|
+
`Regenerate inference taxonomy with: pnpm lane:suggest --output ${CONFIG_FILES.LANE_INFERENCE}`);
|
|
66
79
|
}
|
|
67
80
|
}
|
|
68
81
|
return { warnings, invalidLanes };
|
|
@@ -97,6 +110,78 @@ export function extractInferenceParents(laneInferencePath) {
|
|
|
97
110
|
return [];
|
|
98
111
|
}
|
|
99
112
|
}
|
|
113
|
+
export function extractInferenceTaxonomy(laneInferencePath) {
|
|
114
|
+
if (!fs.existsSync(laneInferencePath)) {
|
|
115
|
+
return {};
|
|
116
|
+
}
|
|
117
|
+
try {
|
|
118
|
+
const content = fs.readFileSync(laneInferencePath, 'utf-8');
|
|
119
|
+
const parsed = yaml.parse(content);
|
|
120
|
+
if (!parsed || typeof parsed !== 'object') {
|
|
121
|
+
return {};
|
|
122
|
+
}
|
|
123
|
+
const taxonomy = {};
|
|
124
|
+
for (const [parent, subLanesRaw] of Object.entries(parsed)) {
|
|
125
|
+
if (!subLanesRaw || typeof subLanesRaw !== 'object' || Array.isArray(subLanesRaw)) {
|
|
126
|
+
taxonomy[parent] = [];
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
taxonomy[parent] = Object.keys(subLanesRaw);
|
|
130
|
+
}
|
|
131
|
+
return sortMapValues(taxonomy);
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
return {};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
export function extractConfigTaxonomy(configLanes) {
|
|
138
|
+
if (configLanes.length === 0) {
|
|
139
|
+
return {};
|
|
140
|
+
}
|
|
141
|
+
const byParent = new Map();
|
|
142
|
+
for (const lane of configLanes) {
|
|
143
|
+
const parent = extractParentName(lane.name);
|
|
144
|
+
const subLane = extractSubLaneName(lane.name);
|
|
145
|
+
if (!parent || !subLane) {
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
const existing = byParent.get(parent) ?? new Set();
|
|
149
|
+
existing.add(subLane);
|
|
150
|
+
byParent.set(parent, existing);
|
|
151
|
+
}
|
|
152
|
+
const taxonomy = {};
|
|
153
|
+
for (const [parent, subLanes] of byParent.entries()) {
|
|
154
|
+
taxonomy[parent] = [...subLanes].sort((left, right) => left.localeCompare(right));
|
|
155
|
+
}
|
|
156
|
+
return taxonomy;
|
|
157
|
+
}
|
|
158
|
+
export function detectLaneTaxonomyDrift(configLanes, inferenceTaxonomy) {
|
|
159
|
+
const configTaxonomy = extractConfigTaxonomy(configLanes);
|
|
160
|
+
const allParents = new Set([...Object.keys(configTaxonomy), ...Object.keys(inferenceTaxonomy)]);
|
|
161
|
+
const missingInInference = {};
|
|
162
|
+
const extraInInference = {};
|
|
163
|
+
for (const parent of allParents) {
|
|
164
|
+
const configSubLanes = new Set(configTaxonomy[parent] ?? []);
|
|
165
|
+
const inferenceSubLanes = new Set(inferenceTaxonomy[parent] ?? []);
|
|
166
|
+
const missing = [...configSubLanes]
|
|
167
|
+
.filter((subLane) => !inferenceSubLanes.has(subLane))
|
|
168
|
+
.sort((left, right) => left.localeCompare(right));
|
|
169
|
+
const extra = [...inferenceSubLanes]
|
|
170
|
+
.filter((subLane) => !configSubLanes.has(subLane))
|
|
171
|
+
.sort((left, right) => left.localeCompare(right));
|
|
172
|
+
if (missing.length > 0) {
|
|
173
|
+
missingInInference[parent] = missing;
|
|
174
|
+
}
|
|
175
|
+
if (extra.length > 0) {
|
|
176
|
+
extraInInference[parent] = extra;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return {
|
|
180
|
+
hasDrift: Object.keys(missingInInference).length > 0 || Object.keys(extraInInference).length > 0,
|
|
181
|
+
missingInInference,
|
|
182
|
+
extraInInference,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
100
185
|
/**
|
|
101
186
|
* Extract lane definitions from a workspace YAML file.
|
|
102
187
|
*
|
|
@@ -139,7 +224,7 @@ export function validateLanesForProject(targetDir) {
|
|
|
139
224
|
const inferencePath = path.join(targetDir, CONFIG_FILES.LANE_INFERENCE);
|
|
140
225
|
const configLanes = extractConfigLanes(configPath);
|
|
141
226
|
const inferenceParents = extractInferenceParents(inferencePath);
|
|
142
|
-
//
|
|
227
|
+
// Without config lanes or inference parents there is no drift check to run.
|
|
143
228
|
if (configLanes.length === 0 || inferenceParents.length === 0) {
|
|
144
229
|
return { warnings: [], invalidLanes: [] };
|
|
145
230
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-lane-validation.js","sourceRoot":"","sources":["../src/init-lane-validation.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC
|
|
1
|
+
{"version":3,"file":"init-lane-validation.js","sourceRoot":"","sources":["../src/init-lane-validation.ts"],"names":[],"mappings":"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"}
|
package/dist/init-scaffolding.js
CHANGED
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import * as fs from 'node:fs';
|
|
11
11
|
import * as path from 'node:path';
|
|
12
|
-
import { fileURLToPath } from 'node:url';
|
|
13
12
|
import { createError, ErrorCodes } from '@lumenflow/core';
|
|
14
13
|
// WU-1171: Import merge block utilities
|
|
15
14
|
import { updateMergeBlock } from './merge-block.js';
|
|
15
|
+
import { resolveCliTemplatesDir } from './template-directory-resolver.js';
|
|
16
16
|
/**
|
|
17
17
|
* Process template content by replacing placeholders
|
|
18
18
|
*/
|
|
@@ -31,14 +31,7 @@ export function getRelativePath(targetDir, filePath) {
|
|
|
31
31
|
* WU-1171: Get templates directory path
|
|
32
32
|
*/
|
|
33
33
|
export function getTemplatesDir() {
|
|
34
|
-
|
|
35
|
-
const __dirname = path.dirname(__filename);
|
|
36
|
-
// Check for dist/templates (production) or ../templates (development)
|
|
37
|
-
const distTemplates = path.join(__dirname, '..', 'templates');
|
|
38
|
-
if (fs.existsSync(distTemplates)) {
|
|
39
|
-
return distTemplates;
|
|
40
|
-
}
|
|
41
|
-
throw createError(ErrorCodes.FILE_NOT_FOUND, `Templates directory not found at ${distTemplates}`);
|
|
34
|
+
return resolveCliTemplatesDir();
|
|
42
35
|
}
|
|
43
36
|
/**
|
|
44
37
|
* WU-1171: Load a template file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-scaffolding.js","sourceRoot":"","sources":["../src/init-scaffolding.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"init-scaffolding.js","sourceRoot":"","sources":["../src/init-scaffolding.ts"],"names":[],"mappings":"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"}
|