@lumenflow/core 2.2.1 → 2.3.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 (221) hide show
  1. package/dist/active-wu-detector.d.ts +1 -1
  2. package/dist/active-wu-detector.js +1 -1
  3. package/dist/arg-parser.js +51 -18
  4. package/dist/backlog-generator.d.ts +4 -4
  5. package/dist/backlog-generator.js +4 -4
  6. package/dist/backlog-sync-validator.js +1 -1
  7. package/dist/cleanup-lock.d.ts +9 -2
  8. package/dist/cleanup-lock.js +17 -7
  9. package/dist/code-path-validator.d.ts +3 -3
  10. package/dist/code-path-validator.js +3 -3
  11. package/dist/compliance-parser.d.ts +1 -1
  12. package/dist/compliance-parser.js +1 -1
  13. package/dist/constants/backlog-patterns.d.ts +1 -1
  14. package/dist/constants/backlog-patterns.js +1 -1
  15. package/dist/constants/dora-constants.d.ts +1 -1
  16. package/dist/constants/dora-constants.js +1 -1
  17. package/dist/constants/gate-constants.d.ts +1 -1
  18. package/dist/constants/gate-constants.js +1 -1
  19. package/dist/constants/linter-constants.d.ts +1 -1
  20. package/dist/constants/linter-constants.js +1 -1
  21. package/dist/constants/tokenizer-constants.d.ts +1 -1
  22. package/dist/constants/tokenizer-constants.js +1 -1
  23. package/dist/context/location-resolver.js +2 -1
  24. package/dist/context-validation-integration.d.ts +1 -0
  25. package/dist/core/scope-checker.d.ts +3 -3
  26. package/dist/core/scope-checker.js +3 -3
  27. package/dist/core/tool-runner.d.ts +5 -5
  28. package/dist/core/tool-runner.js +5 -5
  29. package/dist/core/tool.constants.d.ts +1 -1
  30. package/dist/core/tool.constants.js +1 -1
  31. package/dist/core/tool.schemas.d.ts +2 -2
  32. package/dist/core/tool.schemas.js +1 -1
  33. package/dist/core/worktree-guard.d.ts +1 -1
  34. package/dist/core/worktree-guard.js +1 -1
  35. package/dist/coverage-gate.d.ts +12 -3
  36. package/dist/coverage-gate.js +15 -8
  37. package/dist/date-utils.d.ts +4 -4
  38. package/dist/date-utils.js +4 -4
  39. package/dist/dependency-graph.d.ts +6 -0
  40. package/dist/dependency-graph.js +43 -2
  41. package/dist/dependency-guard.d.ts +2 -2
  42. package/dist/dependency-guard.js +3 -3
  43. package/dist/dependency-validator.d.ts +4 -4
  44. package/dist/dependency-validator.js +4 -7
  45. package/dist/domain/orchestration.constants.d.ts +31 -10
  46. package/dist/domain/orchestration.constants.js +45 -16
  47. package/dist/domain/orchestration.schemas.d.ts +54 -28
  48. package/dist/domain/orchestration.schemas.js +2 -2
  49. package/dist/domain/orchestration.types.d.ts +2 -2
  50. package/dist/domain/orchestration.types.js +2 -2
  51. package/dist/error-handler.d.ts +10 -10
  52. package/dist/error-handler.js +10 -10
  53. package/dist/file-classifiers.d.ts +6 -6
  54. package/dist/file-classifiers.js +6 -6
  55. package/dist/gates-config.d.ts +74 -0
  56. package/dist/gates-config.js +209 -2
  57. package/dist/git-adapter.d.ts +11 -11
  58. package/dist/git-adapter.js +11 -11
  59. package/dist/git-context-extractor.d.ts +112 -0
  60. package/dist/git-context-extractor.js +559 -0
  61. package/dist/hardcoded-strings.d.ts +1 -1
  62. package/dist/hardcoded-strings.js +1 -1
  63. package/dist/incremental-lint.d.ts +1 -1
  64. package/dist/incremental-lint.js +2 -2
  65. package/dist/incremental-test.d.ts +1 -1
  66. package/dist/incremental-test.js +1 -1
  67. package/dist/index.d.ts +13 -0
  68. package/dist/index.js +25 -0
  69. package/dist/invariants/check-automated-tests.d.ts +2 -2
  70. package/dist/invariants/check-automated-tests.js +3 -3
  71. package/dist/lane-checker.d.ts +28 -7
  72. package/dist/lane-checker.js +316 -159
  73. package/dist/lane-suggest-prompt.d.ts +108 -0
  74. package/dist/lane-suggest-prompt.js +359 -0
  75. package/dist/lane-validator.d.ts +3 -3
  76. package/dist/lane-validator.js +3 -3
  77. package/dist/logs-lib.d.ts +1 -1
  78. package/dist/logs-lib.js +1 -1
  79. package/dist/lumenflow-config-schema.d.ts +162 -0
  80. package/dist/lumenflow-config-schema.js +180 -0
  81. package/dist/manual-test-validator.d.ts +2 -2
  82. package/dist/manual-test-validator.js +3 -3
  83. package/dist/merge-lock.d.ts +8 -1
  84. package/dist/merge-lock.js +16 -7
  85. package/dist/micro-worktree.d.ts +81 -13
  86. package/dist/micro-worktree.js +98 -17
  87. package/dist/migration-deployer.d.ts +1 -1
  88. package/dist/migration-deployer.js +1 -1
  89. package/dist/orchestration-advisory-loader.d.ts +2 -2
  90. package/dist/orchestration-advisory-loader.js +10 -6
  91. package/dist/orchestration-advisory.d.ts +3 -3
  92. package/dist/orchestration-advisory.js +4 -4
  93. package/dist/orchestration-di.d.ts +4 -4
  94. package/dist/orchestration-di.js +4 -4
  95. package/dist/orchestration-rules.d.ts +4 -4
  96. package/dist/orchestration-rules.js +18 -10
  97. package/dist/orphan-detector.d.ts +3 -3
  98. package/dist/orphan-detector.js +3 -3
  99. package/dist/patrol-loop.d.ts +170 -0
  100. package/dist/patrol-loop.js +186 -0
  101. package/dist/process-detector.d.ts +5 -5
  102. package/dist/process-detector.js +5 -5
  103. package/dist/rebase-artifact-cleanup.d.ts +3 -3
  104. package/dist/rebase-artifact-cleanup.js +3 -3
  105. package/dist/resolve-policy.d.ts +195 -0
  106. package/dist/resolve-policy.js +203 -0
  107. package/dist/risk-detector.d.ts +2 -2
  108. package/dist/risk-detector.js +2 -2
  109. package/dist/rollback-utils.d.ts +1 -1
  110. package/dist/rollback-utils.js +1 -1
  111. package/dist/section-headings.d.ts +1 -1
  112. package/dist/section-headings.js +1 -1
  113. package/dist/spawn-escalation.d.ts +4 -4
  114. package/dist/spawn-escalation.js +3 -3
  115. package/dist/spawn-monitor.d.ts +4 -4
  116. package/dist/spawn-monitor.js +4 -4
  117. package/dist/spawn-recovery.d.ts +3 -3
  118. package/dist/spawn-recovery.js +3 -3
  119. package/dist/spawn-registry-schema.d.ts +2 -2
  120. package/dist/spawn-registry-schema.js +2 -2
  121. package/dist/spawn-registry-store.d.ts +2 -2
  122. package/dist/spawn-registry-store.js +2 -2
  123. package/dist/spawn-strategy.d.ts +17 -11
  124. package/dist/spawn-strategy.js +47 -44
  125. package/dist/spawn-tree.d.ts +3 -3
  126. package/dist/spawn-tree.js +3 -3
  127. package/dist/state-cleanup-core.d.ts +205 -0
  128. package/dist/state-cleanup-core.js +240 -0
  129. package/dist/state-doctor-core.d.ts +168 -0
  130. package/dist/state-doctor-core.js +251 -0
  131. package/dist/stream-error-handler.d.ts +67 -0
  132. package/dist/stream-error-handler.js +94 -0
  133. package/dist/system-map-validator.d.ts +18 -0
  134. package/dist/system-map-validator.js +50 -16
  135. package/dist/telemetry.d.ts +1 -1
  136. package/dist/telemetry.js +1 -1
  137. package/dist/template-loader.d.ts +162 -0
  138. package/dist/template-loader.js +372 -0
  139. package/dist/test-baseline.d.ts +176 -0
  140. package/dist/test-baseline.js +282 -0
  141. package/dist/usecases/get-suggestions.usecase.d.ts +1 -1
  142. package/dist/validation/command-registry.js +37 -0
  143. package/dist/validators/backlog-sync.d.ts +14 -0
  144. package/dist/validators/backlog-sync.js +62 -0
  145. package/dist/validators/supabase-docs-linter.d.ts +18 -0
  146. package/dist/validators/supabase-docs-linter.js +42 -0
  147. package/dist/validators/wu-tasks.d.ts +24 -0
  148. package/dist/validators/wu-tasks.js +90 -0
  149. package/dist/worktree-scanner.d.ts +1 -1
  150. package/dist/worktree-scanner.js +1 -1
  151. package/dist/worktree-symlink.d.ts +3 -3
  152. package/dist/worktree-symlink.js +3 -3
  153. package/dist/wu-backlog-updater.d.ts +1 -1
  154. package/dist/wu-backlog-updater.js +1 -1
  155. package/dist/wu-claim-helpers.d.ts +1 -1
  156. package/dist/wu-claim-helpers.js +1 -1
  157. package/dist/wu-claim-resume.d.ts +1 -1
  158. package/dist/wu-claim-resume.js +1 -1
  159. package/dist/wu-consistency-checker.d.ts +1 -1
  160. package/dist/wu-consistency-checker.js +17 -11
  161. package/dist/wu-constants.d.ts +73 -36
  162. package/dist/wu-constants.js +65 -92
  163. package/dist/wu-done-branch-only.d.ts +1 -1
  164. package/dist/wu-done-branch-only.js +1 -1
  165. package/dist/wu-done-docs-generate.d.ts +1 -1
  166. package/dist/wu-done-docs-generate.js +1 -1
  167. package/dist/wu-done-messages.d.ts +2 -2
  168. package/dist/wu-done-messages.js +2 -2
  169. package/dist/wu-done-metadata.d.ts +3 -3
  170. package/dist/wu-done-metadata.js +3 -3
  171. package/dist/wu-done-pr.d.ts +1 -1
  172. package/dist/wu-done-pr.js +4 -2
  173. package/dist/wu-done-preflight.d.ts +20 -10
  174. package/dist/wu-done-preflight.js +48 -47
  175. package/dist/wu-done-ui.d.ts +3 -3
  176. package/dist/wu-done-ui.js +3 -3
  177. package/dist/wu-done-validation.d.ts +30 -0
  178. package/dist/wu-done-validation.js +106 -1
  179. package/dist/wu-done-validators.d.ts +1 -1
  180. package/dist/wu-done-worktree.d.ts +1 -1
  181. package/dist/wu-done-worktree.js +11 -1
  182. package/dist/wu-events-cleanup.d.ts +148 -0
  183. package/dist/wu-events-cleanup.js +401 -0
  184. package/dist/wu-helpers.d.ts +2 -2
  185. package/dist/wu-helpers.js +2 -2
  186. package/dist/wu-id-generator.d.ts +58 -0
  187. package/dist/wu-id-generator.js +103 -0
  188. package/dist/wu-lint.js +1 -1
  189. package/dist/wu-preflight-validators.d.ts +13 -1
  190. package/dist/wu-preflight-validators.js +56 -1
  191. package/dist/wu-recovery.d.ts +2 -2
  192. package/dist/wu-recovery.js +4 -4
  193. package/dist/wu-repair-core.d.ts +5 -5
  194. package/dist/wu-repair-core.js +6 -6
  195. package/dist/wu-schema-normalization.d.ts +1 -1
  196. package/dist/wu-schema-normalization.js +1 -1
  197. package/dist/wu-schema.d.ts +7 -7
  198. package/dist/wu-schema.js +8 -8
  199. package/dist/wu-spawn-context.d.ts +87 -0
  200. package/dist/wu-spawn-context.js +175 -0
  201. package/dist/wu-spawn-helpers.d.ts +1 -1
  202. package/dist/wu-spawn-helpers.js +1 -1
  203. package/dist/wu-spawn.d.ts +177 -4
  204. package/dist/wu-spawn.js +694 -72
  205. package/dist/wu-state-schema.d.ts +1 -1
  206. package/dist/wu-state-schema.js +1 -1
  207. package/dist/wu-state-store.d.ts +3 -3
  208. package/dist/wu-state-store.js +3 -3
  209. package/dist/wu-status-transition.d.ts +1 -1
  210. package/dist/wu-status-transition.js +1 -1
  211. package/dist/wu-status-updater.d.ts +3 -3
  212. package/dist/wu-status-updater.js +3 -3
  213. package/dist/wu-validation-constants.d.ts +2 -2
  214. package/dist/wu-validation-constants.js +2 -2
  215. package/dist/wu-validation.d.ts +3 -3
  216. package/dist/wu-validation.js +3 -3
  217. package/dist/wu-yaml-fixer.d.ts +2 -2
  218. package/dist/wu-yaml-fixer.js +3 -3
  219. package/dist/wu-yaml.d.ts +23 -0
  220. package/dist/wu-yaml.js +76 -2
  221. package/package.json +5 -2
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @file worktree-guard.mjs
2
+ * @file worktree-guard.ts
3
3
  * @description WU context validation and main branch protection (WU-1396)
4
4
  *
5
5
  * Provides runtime guards to enforce worktree discipline:
@@ -9,7 +9,7 @@
9
9
  * - warn: Log failures but don't block (default)
10
10
  * - block: Fail the gate if thresholds not met
11
11
  *
12
- * @see {@link tools/gates.mjs} - Integration point
12
+ * @see {@link packages/@lumenflow/cli/src/gates.ts} - Integration point
13
13
  * @see {@link vitest.config.ts} - Coverage thresholds
14
14
  */
15
15
  /**
@@ -33,7 +33,9 @@ export declare const COVERAGE_GATE_MODES: Readonly<{
33
33
  */
34
34
  export declare const HEX_CORE_PATTERNS: readonly string[];
35
35
  /**
36
- * Coverage threshold for hex core files (percentage)
36
+ * Default coverage threshold for hex core files (percentage)
37
+ * WU-1262: This constant is kept for backwards compatibility.
38
+ * The actual threshold is now determined by resolveCoverageConfig() based on methodology.
37
39
  * @constant {number}
38
40
  */
39
41
  export declare const COVERAGE_THRESHOLD = 90;
@@ -66,9 +68,10 @@ export declare function parseCoverageJson(coveragePath: any): {
66
68
  * Check if coverage meets thresholds for hex core files.
67
69
  *
68
70
  * @param {object|null} coverageData - Parsed coverage data
71
+ * @param {number} [threshold] - Coverage threshold to use (defaults to COVERAGE_THRESHOLD)
69
72
  * @returns {{ pass: boolean, failures: Array<{ file: string, actual: number, threshold: number, metric: string }> }}
70
73
  */
71
- export declare function checkCoverageThresholds(coverageData: any): {
74
+ export declare function checkCoverageThresholds(coverageData: any, threshold?: number): {
72
75
  pass: boolean;
73
76
  failures: any[];
74
77
  };
@@ -95,6 +98,12 @@ export interface CoverageGateOptions {
95
98
  coveragePath?: string;
96
99
  /** Logger for output */
97
100
  logger?: CoverageGateLogger;
101
+ /**
102
+ * WU-1262: Coverage threshold override (0-100).
103
+ * When provided, overrides the default COVERAGE_THRESHOLD constant.
104
+ * This is typically populated from resolveCoverageConfig().
105
+ */
106
+ threshold?: number;
98
107
  }
99
108
  /**
100
109
  * Run coverage gate.
@@ -9,7 +9,7 @@
9
9
  * - warn: Log failures but don't block (default)
10
10
  * - block: Fail the gate if thresholds not met
11
11
  *
12
- * @see {@link tools/gates.mjs} - Integration point
12
+ * @see {@link packages/@lumenflow/cli/src/gates.ts} - Integration point
13
13
  * @see {@link vitest.config.ts} - Coverage thresholds
14
14
  */
15
15
  /* eslint-disable security/detect-non-literal-fs-filename, security/detect-object-injection */
@@ -39,7 +39,9 @@ export const HEX_CORE_PATTERNS = Object.freeze([
39
39
  'packages/@lumenflow/cli/',
40
40
  ]);
41
41
  /**
42
- * Coverage threshold for hex core files (percentage)
42
+ * Default coverage threshold for hex core files (percentage)
43
+ * WU-1262: This constant is kept for backwards compatibility.
44
+ * The actual threshold is now determined by resolveCoverageConfig() based on methodology.
43
45
  * @constant {number}
44
46
  */
45
47
  export const COVERAGE_THRESHOLD = 90;
@@ -98,12 +100,15 @@ export function parseCoverageJson(coveragePath) {
98
100
  * Check if coverage meets thresholds for hex core files.
99
101
  *
100
102
  * @param {object|null} coverageData - Parsed coverage data
103
+ * @param {number} [threshold] - Coverage threshold to use (defaults to COVERAGE_THRESHOLD)
101
104
  * @returns {{ pass: boolean, failures: Array<{ file: string, actual: number, threshold: number, metric: string }> }}
102
105
  */
103
- export function checkCoverageThresholds(coverageData) {
106
+ export function checkCoverageThresholds(coverageData, threshold) {
104
107
  if (!coverageData || !coverageData.files) {
105
108
  return { pass: true, failures: [] };
106
109
  }
110
+ // WU-1262: Use provided threshold or fall back to constant
111
+ const effectiveThreshold = threshold ?? COVERAGE_THRESHOLD;
107
112
  const failures = [];
108
113
  for (const [file, metricsValue] of Object.entries(coverageData.files)) {
109
114
  if (!isHexCoreFile(file)) {
@@ -112,11 +117,11 @@ export function checkCoverageThresholds(coverageData) {
112
117
  // Check lines coverage (primary metric)
113
118
  const metrics = metricsValue;
114
119
  const linesCoverage = metrics.lines?.pct ?? 0;
115
- if (linesCoverage < COVERAGE_THRESHOLD) {
120
+ if (linesCoverage < effectiveThreshold) {
116
121
  failures.push({
117
122
  file,
118
123
  actual: linesCoverage,
119
- threshold: COVERAGE_THRESHOLD,
124
+ threshold: effectiveThreshold,
120
125
  metric: 'lines',
121
126
  });
122
127
  }
@@ -164,6 +169,8 @@ export async function runCoverageGate(options = {}) {
164
169
  const mode = options.mode || COVERAGE_GATE_MODES.WARN;
165
170
  const coveragePath = options.coveragePath || DEFAULT_COVERAGE_PATH;
166
171
  const logger = options.logger && typeof options.logger.log === 'function' ? options.logger : console;
172
+ // WU-1262: Use provided threshold or default constant
173
+ const threshold = options.threshold ?? COVERAGE_THRESHOLD;
167
174
  // Parse coverage data
168
175
  const coverageData = parseCoverageJson(coveragePath);
169
176
  if (!coverageData) {
@@ -172,14 +179,14 @@ export async function runCoverageGate(options = {}) {
172
179
  logger.log(' Run tests with coverage first: pnpm test:coverage\n');
173
180
  return { ok: true, mode, duration, message: 'No coverage data' };
174
181
  }
175
- // Check thresholds
176
- const { pass, failures } = checkCoverageThresholds(coverageData);
182
+ // Check thresholds (WU-1262: pass resolved threshold)
183
+ const { pass, failures } = checkCoverageThresholds(coverageData, threshold);
177
184
  // Format and display
178
185
  const output = formatCoverageDelta(coverageData);
179
186
  logger.log(output);
180
187
  const duration = Date.now() - start;
181
188
  if (!pass) {
182
- logger.log(`\n${EMOJI.FAILURE} Coverage below ${COVERAGE_THRESHOLD}% for hex core files:`);
189
+ logger.log(`\n${EMOJI.FAILURE} Coverage below ${threshold}% for hex core files:`);
183
190
  for (const failure of failures) {
184
191
  const shortFile = failure.file.replace('packages/@lumenflow/', '');
185
192
  logger.log(` - ${shortFile}: ${failure.actual.toFixed(1)}% (requires ${failure.threshold}%)`);
@@ -1,12 +1,12 @@
1
1
  /**
2
- * @file date-utils.mjs
2
+ * @file date-utils.ts
3
3
  * @description Date formatting utilities using date-fns library
4
4
  * WU-1082: Extract shared utilities (eliminate date formatting duplication)
5
5
  *
6
6
  * Replaces manual date formatting in:
7
- * - tools/wu-block.mjs (todayISO)
8
- * - tools/wu-unblock.mjs (todayISO)
9
- * - tools/wu-done.mjs (todayISO - already uses date-fns)
7
+ * - tools/wu-block.ts (todayISO)
8
+ * - tools/wu-unblock.ts (todayISO)
9
+ * - tools/wu-done.ts (todayISO - already uses date-fns)
10
10
  */
11
11
  /**
12
12
  * Get current date in ISO format (YYYY-MM-DD)
@@ -1,12 +1,12 @@
1
1
  /**
2
- * @file date-utils.mjs
2
+ * @file date-utils.ts
3
3
  * @description Date formatting utilities using date-fns library
4
4
  * WU-1082: Extract shared utilities (eliminate date formatting duplication)
5
5
  *
6
6
  * Replaces manual date formatting in:
7
- * - tools/wu-block.mjs (todayISO)
8
- * - tools/wu-unblock.mjs (todayISO)
9
- * - tools/wu-done.mjs (todayISO - already uses date-fns)
7
+ * - tools/wu-block.ts (todayISO)
8
+ * - tools/wu-unblock.ts (todayISO)
9
+ * - tools/wu-done.ts (todayISO - already uses date-fns)
10
10
  */
11
11
  import { format } from 'date-fns';
12
12
  /**
@@ -24,6 +24,12 @@
24
24
  * @returns {Map<string, {id: string, title: string, status: string, blocks: string[], blockedBy: string[]}>}
25
25
  */
26
26
  export declare function buildDependencyGraph(): Map<any, any>;
27
+ /**
28
+ * Build a dependency graph from all WU YAML files asynchronously.
29
+ *
30
+ * @returns {Promise<Map<string, {id: string, title: string, status: string, blocks: string[], blockedBy: string[]}>>}
31
+ */
32
+ export declare function buildDependencyGraphAsync(): Promise<Map<any, any>>;
27
33
  /**
28
34
  * Get all dependencies (upstream: blocked_by) for a WU.
29
35
  *
@@ -1,6 +1,6 @@
1
- import { existsSync, readdirSync } from 'node:fs';
1
+ import { existsSync, readdirSync, promises as fs } from 'node:fs';
2
2
  import path from 'node:path';
3
- import { readWU } from './wu-yaml.js';
3
+ import { readWU, readWUAsync } from './wu-yaml.js';
4
4
  import { WU_PATHS } from './wu-paths.js';
5
5
  import { STRING_LITERALS, WU_STATUS } from './wu-constants.js';
6
6
  import { detectCycles } from './cycle-detector.js';
@@ -55,6 +55,47 @@ export function buildDependencyGraph() {
55
55
  }
56
56
  return graph;
57
57
  }
58
+ /**
59
+ * Build a dependency graph from all WU YAML files asynchronously.
60
+ *
61
+ * @returns {Promise<Map<string, {id: string, title: string, status: string, blocks: string[], blockedBy: string[]}>>}
62
+ */
63
+ export async function buildDependencyGraphAsync() {
64
+ const wuDir = path.dirname(WU_PATHS.WU('dummy'));
65
+ const graph = new Map();
66
+ try {
67
+ const files = await fs.readdir(wuDir);
68
+ const yamlFiles = files.filter((f) => f.endsWith('.yaml') && f.startsWith('WU-'));
69
+ const promises = yamlFiles.map(async (f) => {
70
+ const filePath = path.join(wuDir, f);
71
+ const id = f.replace('.yaml', '');
72
+ try {
73
+ const doc = await readWUAsync(filePath, id);
74
+ return {
75
+ id,
76
+ title: doc.title || id,
77
+ status: doc.status || 'unknown',
78
+ blocks: Array.isArray(doc.blocks) ? doc.blocks : [],
79
+ blockedBy: Array.isArray(doc.blocked_by) ? doc.blocked_by : [],
80
+ };
81
+ }
82
+ catch {
83
+ // Skip invalid files
84
+ return null;
85
+ }
86
+ });
87
+ const results = await Promise.all(promises);
88
+ for (const result of results) {
89
+ if (result) {
90
+ graph.set(result.id, result);
91
+ }
92
+ }
93
+ }
94
+ catch {
95
+ // Return empty graph if dir doesn't exist or other error
96
+ }
97
+ return graph;
98
+ }
58
99
  /**
59
100
  * Get all dependencies (upstream: blocked_by) for a WU.
60
101
  *
@@ -9,8 +9,8 @@
9
9
  * - deps:add and deps:remove wrapper commands
10
10
  *
11
11
  * @see {@link .claude/hooks/pre-tool-use-hook.sh} - PreToolUse hook
12
- * @see {@link tools/deps-add.mjs} - Safe wrapper for pnpm add
13
- * @see {@link tools/deps-remove.mjs} - Safe wrapper for pnpm remove
12
+ * @see {@link packages/@lumenflow/cli/src/deps-add.ts} - Safe wrapper for pnpm add
13
+ * @see {@link packages/@lumenflow/cli/src/deps-remove.ts} - Safe wrapper for pnpm remove
14
14
  */
15
15
  /**
16
16
  * pnpm subcommands that mutate dependencies.
@@ -9,8 +9,8 @@
9
9
  * - deps:add and deps:remove wrapper commands
10
10
  *
11
11
  * @see {@link .claude/hooks/pre-tool-use-hook.sh} - PreToolUse hook
12
- * @see {@link tools/deps-add.mjs} - Safe wrapper for pnpm add
13
- * @see {@link tools/deps-remove.mjs} - Safe wrapper for pnpm remove
12
+ * @see {@link packages/@lumenflow/cli/src/deps-add.ts} - Safe wrapper for pnpm add
13
+ * @see {@link packages/@lumenflow/cli/src/deps-remove.ts} - Safe wrapper for pnpm remove
14
14
  */
15
15
  import { EMOJI } from './wu-constants.js';
16
16
  /**
@@ -133,7 +133,7 @@ The safe wrapper (${wrapperCommand}) enforces worktree context
133
133
  and runs the underlying pnpm command with proper isolation.
134
134
 
135
135
  See: CLAUDE.md section 2 'Daily Operating Loop'
136
- See: docs/04-operations/_frameworks/lumenflow/lumenflow-complete.md
136
+ See: https://lumenflow.dev/reference/lumenflow-complete/
137
137
  `;
138
138
  }
139
139
  /**
@@ -48,7 +48,7 @@ export declare const TOOL_DEPENDENCIES: Readonly<{
48
48
  */
49
49
  export declare function validateDependencies(packages: any): Promise<{
50
50
  valid: boolean;
51
- missing: any[];
51
+ missing: any;
52
52
  }>;
53
53
  /**
54
54
  * Format an error message for missing dependencies.
@@ -72,7 +72,7 @@ export declare function formatDependencyError(toolName: any, missing: any): stri
72
72
  */
73
73
  export declare function validateSpawnDependencies(): Promise<{
74
74
  valid: boolean;
75
- missing: any[];
75
+ missing: any;
76
76
  }>;
77
77
  /**
78
78
  * Validate dependencies for mem:inbox.
@@ -83,7 +83,7 @@ export declare function validateSpawnDependencies(): Promise<{
83
83
  */
84
84
  export declare function validateInboxDependencies(): Promise<{
85
85
  valid: boolean;
86
- missing: any[];
86
+ missing: any;
87
87
  }>;
88
88
  /**
89
89
  * Validate dependencies for a specific tool.
@@ -101,5 +101,5 @@ export declare function validateInboxDependencies(): Promise<{
101
101
  export declare function validateToolDependencies(toolName: any): Promise<{
102
102
  toolName: any;
103
103
  valid: boolean;
104
- missing: any[];
104
+ missing: any;
105
105
  }>;
@@ -69,13 +69,10 @@ export async function validateDependencies(packages) {
69
69
  if (!packages || packages.length === 0) {
70
70
  return { valid: true, missing: [] };
71
71
  }
72
- const missing = [];
73
- for (const pkg of packages) {
74
- const available = await canImport(pkg);
75
- if (!available) {
76
- missing.push(pkg);
77
- }
78
- }
72
+ // WU-1231: Validate packages in parallel using Promise.all
73
+ // Previously sequential (for...of await) caused 5+ minute delays
74
+ const results = await Promise.all(packages.map((pkg) => canImport(pkg)));
75
+ const missing = packages.filter((_, index) => !results[index]);
79
76
  return {
80
77
  valid: missing.length === 0,
81
78
  missing,
@@ -5,8 +5,8 @@
5
5
  * Avoids magic numbers and hardcoded strings throughout the orchestration layer.
6
6
  *
7
7
  * @module orchestration.constants
8
- * @see {@link ../ports/dashboard-renderer.port.mjs} - Uses these constants
9
- * @see {@link ../ports/metrics-collector.port.mjs} - Uses these constants
8
+ * @see {@link ../ports/dashboard-renderer.port.ts} - Uses these constants
9
+ * @see {@link ../ports/metrics-collector.port.ts} - Uses these constants
10
10
  */
11
11
  /**
12
12
  * Total number of Definition of Done checkpoints.
@@ -16,15 +16,21 @@ export declare const DOD_TOTAL = 11;
16
16
  /**
17
17
  * Valid lane names in the LumenFlow system.
18
18
  * Used for type-safe lane validation.
19
+ *
20
+ * Note: This should match the lanes defined in .lumenflow.config.yaml.
21
+ * These are LumenFlow framework lanes, not application-specific lanes.
19
22
  */
20
- export declare const LANES: readonly ["Intelligence", "Experience", "Core Systems", "Operations", "Discovery"];
23
+ export declare const LANES: readonly ["Framework: Core", "Framework: CLI", "Framework: Memory", "Framework: Agent", "Framework: Metrics", "Framework: Initiatives", "Framework: Shims", "Operations: Infrastructure", "Operations: CI/CD", "Content: Documentation"];
21
24
  /** Type for valid lane names */
22
25
  export type Lane = (typeof LANES)[number];
23
26
  /**
24
27
  * Known agent names in the orchestration system.
25
28
  * Includes both mandatory (Tier 1) and suggested (Tier 2) agents.
29
+ *
30
+ * Note: These are LumenFlow framework agents defined in .claude/agents/.
31
+ * Application-specific agents should be configured separately.
26
32
  */
27
- export declare const AGENT_NAMES: readonly ["security-auditor", "beacon-guardian", "test-engineer", "code-reviewer"];
33
+ export declare const AGENT_NAMES: readonly ["general-purpose", "lumenflow-pm", "test-engineer", "code-reviewer", "bug-triage", "lumenflow-enforcer", "lumenflow-doc-sync"];
28
34
  /** Type for agent names */
29
35
  export type AgentName = (typeof AGENT_NAMES)[number];
30
36
  /**
@@ -70,21 +76,36 @@ export declare const USER_CHOICE_OPTIONS: readonly ["approve", "reject", "edit"]
70
76
  export type UserChoiceOption = (typeof USER_CHOICE_OPTIONS)[number];
71
77
  /**
72
78
  * Mandatory agent names (subset of AGENT_NAMES)
79
+ *
80
+ * Note: For LumenFlow framework development, mandatory agents are not currently
81
+ * enforced since this is a workflow framework, not an application with PHI/auth concerns.
82
+ * Projects using LumenFlow can define their own mandatory agents in their config.
83
+ *
84
+ * The test-engineer and code-reviewer agents are suggested but not mandatory.
73
85
  */
74
- export declare const MANDATORY_AGENT_NAMES: readonly ["security-auditor", "beacon-guardian"];
86
+ export declare const MANDATORY_AGENT_NAMES: readonly [];
75
87
  /** Type for mandatory agent names */
76
88
  export type MandatoryAgentName = (typeof MANDATORY_AGENT_NAMES)[number];
77
89
  /**
78
90
  * Mandatory agent triggers - glob patterns that indicate when agents must be invoked.
79
91
  * Uses minimatch patterns (NOT regex) for file path matching.
80
92
  *
81
- * @example
82
- * // Check if a path triggers security-auditor:
93
+ * Note: For LumenFlow framework development, this is empty since we don't have
94
+ * application-specific concerns like PHI, auth, or RLS. Projects using LumenFlow
95
+ * should configure their own triggers based on their domain requirements.
96
+ *
97
+ * Example application-specific triggers (configure in your project):
98
+ * - security-auditor: supabase/migrations/**, auth/**, rls/**
99
+ * - beacon-guardian: prompts/**, llm/**
100
+ *
101
+ * Usage:
102
+ * ```typescript
83
103
  * import { minimatch } from 'minimatch';
84
- * const triggers = MANDATORY_TRIGGERS['security-auditor'];
85
- * const shouldTrigger = triggers.some(pattern => minimatch(filePath, pattern));
104
+ * const triggers = MANDATORY_TRIGGERS['my-agent'];
105
+ * const shouldTrigger = triggers?.some(pattern => minimatch(filePath, pattern));
106
+ * ```
86
107
  */
87
- export declare const MANDATORY_TRIGGERS: Record<MandatoryAgentName, readonly string[]>;
108
+ export declare const MANDATORY_TRIGGERS: Record<string, readonly string[]>;
88
109
  /**
89
110
  * File system paths for metrics collection.
90
111
  * Used by FileSystemMetricsCollector to avoid hardcoded strings.
@@ -5,8 +5,8 @@
5
5
  * Avoids magic numbers and hardcoded strings throughout the orchestration layer.
6
6
  *
7
7
  * @module orchestration.constants
8
- * @see {@link ../ports/dashboard-renderer.port.mjs} - Uses these constants
9
- * @see {@link ../ports/metrics-collector.port.mjs} - Uses these constants
8
+ * @see {@link ../ports/dashboard-renderer.port.ts} - Uses these constants
9
+ * @see {@link ../ports/metrics-collector.port.ts} - Uses these constants
10
10
  */
11
11
  /**
12
12
  * Total number of Definition of Done checkpoints.
@@ -16,23 +16,37 @@ export const DOD_TOTAL = 11;
16
16
  /**
17
17
  * Valid lane names in the LumenFlow system.
18
18
  * Used for type-safe lane validation.
19
+ *
20
+ * Note: This should match the lanes defined in .lumenflow.config.yaml.
21
+ * These are LumenFlow framework lanes, not application-specific lanes.
19
22
  */
20
23
  export const LANES = [
21
- 'Intelligence',
22
- 'Experience',
23
- 'Core Systems',
24
- 'Operations',
25
- 'Discovery',
24
+ 'Framework: Core',
25
+ 'Framework: CLI',
26
+ 'Framework: Memory',
27
+ 'Framework: Agent',
28
+ 'Framework: Metrics',
29
+ 'Framework: Initiatives',
30
+ 'Framework: Shims',
31
+ 'Operations: Infrastructure',
32
+ 'Operations: CI/CD',
33
+ 'Content: Documentation',
26
34
  ];
27
35
  /**
28
36
  * Known agent names in the orchestration system.
29
37
  * Includes both mandatory (Tier 1) and suggested (Tier 2) agents.
38
+ *
39
+ * Note: These are LumenFlow framework agents defined in .claude/agents/.
40
+ * Application-specific agents should be configured separately.
30
41
  */
31
42
  export const AGENT_NAMES = [
32
- 'security-auditor',
33
- 'beacon-guardian',
43
+ 'general-purpose',
44
+ 'lumenflow-pm',
34
45
  'test-engineer',
35
46
  'code-reviewer',
47
+ 'bug-triage',
48
+ 'lumenflow-enforcer',
49
+ 'lumenflow-doc-sync',
36
50
  ];
37
51
  /**
38
52
  * Alert severity levels for dashboard display.
@@ -67,21 +81,36 @@ export const EVENT_SEVERITY_LEVELS = ['info', 'warning', 'error'];
67
81
  export const USER_CHOICE_OPTIONS = ['approve', 'reject', 'edit'];
68
82
  /**
69
83
  * Mandatory agent names (subset of AGENT_NAMES)
84
+ *
85
+ * Note: For LumenFlow framework development, mandatory agents are not currently
86
+ * enforced since this is a workflow framework, not an application with PHI/auth concerns.
87
+ * Projects using LumenFlow can define their own mandatory agents in their config.
88
+ *
89
+ * The test-engineer and code-reviewer agents are suggested but not mandatory.
70
90
  */
71
- export const MANDATORY_AGENT_NAMES = ['security-auditor', 'beacon-guardian'];
91
+ export const MANDATORY_AGENT_NAMES = [];
72
92
  /**
73
93
  * Mandatory agent triggers - glob patterns that indicate when agents must be invoked.
74
94
  * Uses minimatch patterns (NOT regex) for file path matching.
75
95
  *
76
- * @example
77
- * // Check if a path triggers security-auditor:
96
+ * Note: For LumenFlow framework development, this is empty since we don't have
97
+ * application-specific concerns like PHI, auth, or RLS. Projects using LumenFlow
98
+ * should configure their own triggers based on their domain requirements.
99
+ *
100
+ * Example application-specific triggers (configure in your project):
101
+ * - security-auditor: supabase/migrations/**, auth/**, rls/**
102
+ * - beacon-guardian: prompts/**, llm/**
103
+ *
104
+ * Usage:
105
+ * ```typescript
78
106
  * import { minimatch } from 'minimatch';
79
- * const triggers = MANDATORY_TRIGGERS['security-auditor'];
80
- * const shouldTrigger = triggers.some(pattern => minimatch(filePath, pattern));
107
+ * const triggers = MANDATORY_TRIGGERS['my-agent'];
108
+ * const shouldTrigger = triggers?.some(pattern => minimatch(filePath, pattern));
109
+ * ```
81
110
  */
82
111
  export const MANDATORY_TRIGGERS = {
83
- 'security-auditor': ['supabase/migrations/**', '**/auth/**', '**/rls/**', '**/permissions/**'],
84
- 'beacon-guardian': ['**/prompts/**', '**/classification/**', '**/detector/**', '**/llm/**'],
112
+ // No mandatory triggers for LumenFlow framework development.
113
+ // Projects should configure their own triggers based on their domain.
85
114
  };
86
115
  /**
87
116
  * File system paths for metrics collection.
@@ -5,8 +5,8 @@
5
5
  * Single source of truth - types are inferred from these schemas.
6
6
  *
7
7
  * @module orchestration.schemas
8
- * @see {@link ./orchestration.types.mjs} - Types inferred from these schemas
9
- * @see {@link ./orchestration.constants.mjs} - Constants used in validation
8
+ * @see {@link ./orchestration.types.ts} - Types inferred from these schemas
9
+ * @see {@link ./orchestration.constants.ts} - Constants used in validation
10
10
  */
11
11
  import { z } from 'zod';
12
12
  /**
@@ -21,21 +21,29 @@ export declare const GlobalStatusSchema: z.ZodObject<{
21
21
  longestRunning: z.ZodNullable<z.ZodObject<{
22
22
  wuId: z.ZodString;
23
23
  lane: z.ZodEnum<{
24
- Operations: "Operations";
25
- Intelligence: "Intelligence";
26
- Experience: "Experience";
27
- "Core Systems": "Core Systems";
28
- Discovery: "Discovery";
24
+ "Framework: Core": "Framework: Core";
25
+ "Framework: CLI": "Framework: CLI";
26
+ "Framework: Memory": "Framework: Memory";
27
+ "Framework: Agent": "Framework: Agent";
28
+ "Framework: Metrics": "Framework: Metrics";
29
+ "Framework: Initiatives": "Framework: Initiatives";
30
+ "Framework: Shims": "Framework: Shims";
31
+ "Operations: Infrastructure": "Operations: Infrastructure";
32
+ "Operations: CI/CD": "Operations: CI/CD";
33
+ "Content: Documentation": "Content: Documentation";
29
34
  }>;
30
35
  durationMs: z.ZodNumber;
31
36
  }, z.core.$strip>>;
32
37
  pendingMandatory: z.ZodArray<z.ZodObject<{
33
38
  wuId: z.ZodString;
34
39
  agent: z.ZodEnum<{
35
- "security-auditor": "security-auditor";
36
- "beacon-guardian": "beacon-guardian";
40
+ "general-purpose": "general-purpose";
41
+ "lumenflow-pm": "lumenflow-pm";
37
42
  "test-engineer": "test-engineer";
38
43
  "code-reviewer": "code-reviewer";
44
+ "bug-triage": "bug-triage";
45
+ "lumenflow-enforcer": "lumenflow-enforcer";
46
+ "lumenflow-doc-sync": "lumenflow-doc-sync";
39
47
  }>;
40
48
  }, z.core.$strip>>;
41
49
  activeSession: z.ZodNullable<z.ZodObject<{
@@ -76,11 +84,16 @@ export declare const AgentMetricSchema: z.ZodObject<{
76
84
  export declare const WUProgressSchema: z.ZodObject<{
77
85
  wuId: z.ZodString;
78
86
  lane: z.ZodEnum<{
79
- Operations: "Operations";
80
- Intelligence: "Intelligence";
81
- Experience: "Experience";
82
- "Core Systems": "Core Systems";
83
- Discovery: "Discovery";
87
+ "Framework: Core": "Framework: Core";
88
+ "Framework: CLI": "Framework: CLI";
89
+ "Framework: Memory": "Framework: Memory";
90
+ "Framework: Agent": "Framework: Agent";
91
+ "Framework: Metrics": "Framework: Metrics";
92
+ "Framework: Initiatives": "Framework: Initiatives";
93
+ "Framework: Shims": "Framework: Shims";
94
+ "Operations: Infrastructure": "Operations: Infrastructure";
95
+ "Operations: CI/CD": "Operations: CI/CD";
96
+ "Content: Documentation": "Content: Documentation";
84
97
  }>;
85
98
  title: z.ZodString;
86
99
  dodProgress: z.ZodNumber;
@@ -102,8 +115,8 @@ export declare const TimelineEventSchema: z.ZodObject<{
102
115
  event: z.ZodEnum<{
103
116
  done: "done";
104
117
  gates: "gates";
105
- agent: "agent";
106
118
  block: "block";
119
+ agent: "agent";
107
120
  claim: "claim";
108
121
  }>;
109
122
  wuId: z.ZodString;
@@ -186,21 +199,29 @@ export declare const DashboardDataSchema: z.ZodObject<{
186
199
  longestRunning: z.ZodNullable<z.ZodObject<{
187
200
  wuId: z.ZodString;
188
201
  lane: z.ZodEnum<{
189
- Operations: "Operations";
190
- Intelligence: "Intelligence";
191
- Experience: "Experience";
192
- "Core Systems": "Core Systems";
193
- Discovery: "Discovery";
202
+ "Framework: Core": "Framework: Core";
203
+ "Framework: CLI": "Framework: CLI";
204
+ "Framework: Memory": "Framework: Memory";
205
+ "Framework: Agent": "Framework: Agent";
206
+ "Framework: Metrics": "Framework: Metrics";
207
+ "Framework: Initiatives": "Framework: Initiatives";
208
+ "Framework: Shims": "Framework: Shims";
209
+ "Operations: Infrastructure": "Operations: Infrastructure";
210
+ "Operations: CI/CD": "Operations: CI/CD";
211
+ "Content: Documentation": "Content: Documentation";
194
212
  }>;
195
213
  durationMs: z.ZodNumber;
196
214
  }, z.core.$strip>>;
197
215
  pendingMandatory: z.ZodArray<z.ZodObject<{
198
216
  wuId: z.ZodString;
199
217
  agent: z.ZodEnum<{
200
- "security-auditor": "security-auditor";
201
- "beacon-guardian": "beacon-guardian";
218
+ "general-purpose": "general-purpose";
219
+ "lumenflow-pm": "lumenflow-pm";
202
220
  "test-engineer": "test-engineer";
203
221
  "code-reviewer": "code-reviewer";
222
+ "bug-triage": "bug-triage";
223
+ "lumenflow-enforcer": "lumenflow-enforcer";
224
+ "lumenflow-doc-sync": "lumenflow-doc-sync";
204
225
  }>;
205
226
  }, z.core.$strip>>;
206
227
  activeSession: z.ZodNullable<z.ZodObject<{
@@ -233,11 +254,16 @@ export declare const DashboardDataSchema: z.ZodObject<{
233
254
  wuProgress: z.ZodArray<z.ZodObject<{
234
255
  wuId: z.ZodString;
235
256
  lane: z.ZodEnum<{
236
- Operations: "Operations";
237
- Intelligence: "Intelligence";
238
- Experience: "Experience";
239
- "Core Systems": "Core Systems";
240
- Discovery: "Discovery";
257
+ "Framework: Core": "Framework: Core";
258
+ "Framework: CLI": "Framework: CLI";
259
+ "Framework: Memory": "Framework: Memory";
260
+ "Framework: Agent": "Framework: Agent";
261
+ "Framework: Metrics": "Framework: Metrics";
262
+ "Framework: Initiatives": "Framework: Initiatives";
263
+ "Framework: Shims": "Framework: Shims";
264
+ "Operations: Infrastructure": "Operations: Infrastructure";
265
+ "Operations: CI/CD": "Operations: CI/CD";
266
+ "Content: Documentation": "Content: Documentation";
241
267
  }>;
242
268
  title: z.ZodString;
243
269
  dodProgress: z.ZodNumber;
@@ -255,8 +281,8 @@ export declare const DashboardDataSchema: z.ZodObject<{
255
281
  event: z.ZodEnum<{
256
282
  done: "done";
257
283
  gates: "gates";
258
- agent: "agent";
259
284
  block: "block";
285
+ agent: "agent";
260
286
  claim: "claim";
261
287
  }>;
262
288
  wuId: z.ZodString;