@lumenflow/cli 1.0.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/LICENSE +190 -0
- package/README.md +116 -0
- package/dist/gates.d.ts +41 -0
- package/dist/gates.d.ts.map +1 -0
- package/dist/gates.js +684 -0
- package/dist/gates.js.map +1 -0
- package/dist/initiative-add-wu.d.ts +22 -0
- package/dist/initiative-add-wu.d.ts.map +1 -0
- package/dist/initiative-add-wu.js +234 -0
- package/dist/initiative-add-wu.js.map +1 -0
- package/dist/initiative-create.d.ts +28 -0
- package/dist/initiative-create.d.ts.map +1 -0
- package/dist/initiative-create.js +172 -0
- package/dist/initiative-create.js.map +1 -0
- package/dist/initiative-edit.d.ts +34 -0
- package/dist/initiative-edit.d.ts.map +1 -0
- package/dist/initiative-edit.js +440 -0
- package/dist/initiative-edit.js.map +1 -0
- package/dist/initiative-list.d.ts +12 -0
- package/dist/initiative-list.d.ts.map +1 -0
- package/dist/initiative-list.js +101 -0
- package/dist/initiative-list.js.map +1 -0
- package/dist/initiative-status.d.ts +11 -0
- package/dist/initiative-status.d.ts.map +1 -0
- package/dist/initiative-status.js +221 -0
- package/dist/initiative-status.js.map +1 -0
- package/dist/mem-checkpoint.d.ts +16 -0
- package/dist/mem-checkpoint.d.ts.map +1 -0
- package/dist/mem-checkpoint.js +237 -0
- package/dist/mem-checkpoint.js.map +1 -0
- package/dist/mem-cleanup.d.ts +29 -0
- package/dist/mem-cleanup.d.ts.map +1 -0
- package/dist/mem-cleanup.js +267 -0
- package/dist/mem-cleanup.js.map +1 -0
- package/dist/mem-create.d.ts +17 -0
- package/dist/mem-create.d.ts.map +1 -0
- package/dist/mem-create.js +265 -0
- package/dist/mem-create.js.map +1 -0
- package/dist/mem-inbox.d.ts +35 -0
- package/dist/mem-inbox.d.ts.map +1 -0
- package/dist/mem-inbox.js +373 -0
- package/dist/mem-inbox.js.map +1 -0
- package/dist/mem-init.d.ts +15 -0
- package/dist/mem-init.d.ts.map +1 -0
- package/dist/mem-init.js +146 -0
- package/dist/mem-init.js.map +1 -0
- package/dist/mem-ready.d.ts +16 -0
- package/dist/mem-ready.d.ts.map +1 -0
- package/dist/mem-ready.js +224 -0
- package/dist/mem-ready.js.map +1 -0
- package/dist/mem-signal.d.ts +16 -0
- package/dist/mem-signal.d.ts.map +1 -0
- package/dist/mem-signal.js +204 -0
- package/dist/mem-signal.js.map +1 -0
- package/dist/mem-start.d.ts +16 -0
- package/dist/mem-start.d.ts.map +1 -0
- package/dist/mem-start.js +158 -0
- package/dist/mem-start.js.map +1 -0
- package/dist/mem-summarize.d.ts +22 -0
- package/dist/mem-summarize.d.ts.map +1 -0
- package/dist/mem-summarize.js +213 -0
- package/dist/mem-summarize.js.map +1 -0
- package/dist/mem-triage.d.ts +22 -0
- package/dist/mem-triage.d.ts.map +1 -0
- package/dist/mem-triage.js +328 -0
- package/dist/mem-triage.js.map +1 -0
- package/dist/spawn-list.d.ts +16 -0
- package/dist/spawn-list.d.ts.map +1 -0
- package/dist/spawn-list.js +140 -0
- package/dist/spawn-list.js.map +1 -0
- package/dist/wu-block.d.ts +16 -0
- package/dist/wu-block.d.ts.map +1 -0
- package/dist/wu-block.js +241 -0
- package/dist/wu-block.js.map +1 -0
- package/dist/wu-claim.d.ts +32 -0
- package/dist/wu-claim.d.ts.map +1 -0
- package/dist/wu-claim.js +1106 -0
- package/dist/wu-claim.js.map +1 -0
- package/dist/wu-cleanup.d.ts +17 -0
- package/dist/wu-cleanup.d.ts.map +1 -0
- package/dist/wu-cleanup.js +194 -0
- package/dist/wu-cleanup.js.map +1 -0
- package/dist/wu-create.d.ts +38 -0
- package/dist/wu-create.d.ts.map +1 -0
- package/dist/wu-create.js +520 -0
- package/dist/wu-create.js.map +1 -0
- package/dist/wu-deps.d.ts +13 -0
- package/dist/wu-deps.d.ts.map +1 -0
- package/dist/wu-deps.js +119 -0
- package/dist/wu-deps.js.map +1 -0
- package/dist/wu-done.d.ts +153 -0
- package/dist/wu-done.d.ts.map +1 -0
- package/dist/wu-done.js +2096 -0
- package/dist/wu-done.js.map +1 -0
- package/dist/wu-edit.d.ts +29 -0
- package/dist/wu-edit.d.ts.map +1 -0
- package/dist/wu-edit.js +852 -0
- package/dist/wu-edit.js.map +1 -0
- package/dist/wu-infer-lane.d.ts +17 -0
- package/dist/wu-infer-lane.d.ts.map +1 -0
- package/dist/wu-infer-lane.js +135 -0
- package/dist/wu-infer-lane.js.map +1 -0
- package/dist/wu-preflight.d.ts +47 -0
- package/dist/wu-preflight.d.ts.map +1 -0
- package/dist/wu-preflight.js +167 -0
- package/dist/wu-preflight.js.map +1 -0
- package/dist/wu-prune.d.ts +16 -0
- package/dist/wu-prune.d.ts.map +1 -0
- package/dist/wu-prune.js +259 -0
- package/dist/wu-prune.js.map +1 -0
- package/dist/wu-repair.d.ts +60 -0
- package/dist/wu-repair.d.ts.map +1 -0
- package/dist/wu-repair.js +226 -0
- package/dist/wu-repair.js.map +1 -0
- package/dist/wu-spawn-completion.d.ts +10 -0
- package/dist/wu-spawn-completion.js +30 -0
- package/dist/wu-spawn.d.ts +168 -0
- package/dist/wu-spawn.d.ts.map +1 -0
- package/dist/wu-spawn.js +1327 -0
- package/dist/wu-spawn.js.map +1 -0
- package/dist/wu-unblock.d.ts +16 -0
- package/dist/wu-unblock.d.ts.map +1 -0
- package/dist/wu-unblock.js +234 -0
- package/dist/wu-unblock.js.map +1 -0
- package/dist/wu-validate.d.ts +16 -0
- package/dist/wu-validate.d.ts.map +1 -0
- package/dist/wu-validate.js +193 -0
- package/dist/wu-validate.js.map +1 -0
- package/package.json +92 -0
package/dist/wu-deps.js
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* WU Dependency Visualization (WU-1247)
|
|
4
|
+
*
|
|
5
|
+
* Shows dependency graph for a WU in ASCII or Mermaid format.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* pnpm wu:deps WU-1247 # ASCII format
|
|
9
|
+
* pnpm wu:deps WU-1247 --format mermaid # Mermaid diagram
|
|
10
|
+
* pnpm wu:deps WU-1247 --depth 5 # Deeper traversal
|
|
11
|
+
* pnpm wu:deps WU-1247 --direction up # Only upstream deps
|
|
12
|
+
*/
|
|
13
|
+
import { createWUParser, WU_OPTIONS } from '@lumenflow/core/dist/arg-parser.js';
|
|
14
|
+
import { die } from '@lumenflow/core/dist/error-handler.js';
|
|
15
|
+
import { buildDependencyGraph, renderASCII, renderMermaid, validateGraph, } from '@lumenflow/core/dist/dependency-graph.js';
|
|
16
|
+
import { OUTPUT_FORMATS } from '@lumenflow/initiatives/dist/initiative-constants.js';
|
|
17
|
+
import { PATTERNS } from '@lumenflow/core/dist/wu-constants.js';
|
|
18
|
+
async function main() {
|
|
19
|
+
const args = createWUParser({
|
|
20
|
+
name: 'wu-deps',
|
|
21
|
+
description: 'Visualize WU dependency graph',
|
|
22
|
+
options: [WU_OPTIONS.id, WU_OPTIONS.format, WU_OPTIONS.depth, WU_OPTIONS.direction],
|
|
23
|
+
required: [],
|
|
24
|
+
allowPositionalId: true,
|
|
25
|
+
});
|
|
26
|
+
const wuId = args.id;
|
|
27
|
+
if (!wuId) {
|
|
28
|
+
die('WU ID is required.\n\nUsage: pnpm wu:deps WU-1247');
|
|
29
|
+
}
|
|
30
|
+
if (!PATTERNS.WU_ID.test(wuId)) {
|
|
31
|
+
die(`Invalid WU ID format: "${wuId}"\n\nExpected format: WU-<number> (e.g., WU-1247)`);
|
|
32
|
+
}
|
|
33
|
+
console.log(`[wu:deps] Building dependency graph...`);
|
|
34
|
+
const graph = buildDependencyGraph();
|
|
35
|
+
if (!graph.has(wuId)) {
|
|
36
|
+
die(`WU not found in graph: ${wuId}\n\nEnsure the WU exists in docs/04-operations/tasks/wu/`);
|
|
37
|
+
}
|
|
38
|
+
const format = args.format || OUTPUT_FORMATS.ASCII;
|
|
39
|
+
const depth = args.depth ? parseInt(args.depth, 10) : 3;
|
|
40
|
+
const direction = args.direction || 'both';
|
|
41
|
+
// Validate direction
|
|
42
|
+
if (!['up', 'down', 'both'].includes(direction)) {
|
|
43
|
+
die(`Invalid direction: "${direction}"\n\nValid options: up, down, both`);
|
|
44
|
+
}
|
|
45
|
+
let output;
|
|
46
|
+
switch (format) {
|
|
47
|
+
case OUTPUT_FORMATS.MERMAID:
|
|
48
|
+
output = renderMermaid(graph, { rootId: wuId, direction: 'TD', depth });
|
|
49
|
+
break;
|
|
50
|
+
case OUTPUT_FORMATS.JSON:
|
|
51
|
+
output = renderGraphJSON(graph, wuId, depth, direction);
|
|
52
|
+
break;
|
|
53
|
+
case OUTPUT_FORMATS.ASCII:
|
|
54
|
+
default:
|
|
55
|
+
output = renderASCII(graph, wuId, { direction, depth });
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
console.log('');
|
|
59
|
+
console.log(output);
|
|
60
|
+
// Validate and warn about issues
|
|
61
|
+
const validation = validateGraph(graph);
|
|
62
|
+
if (validation.hasCycle) {
|
|
63
|
+
console.log('\n⚠️ Warning: Circular dependencies detected in graph!');
|
|
64
|
+
console.log('Run with --validate for full validation report.');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function renderGraphJSON(graph, rootId, depth, direction) {
|
|
68
|
+
const node = graph.get(rootId);
|
|
69
|
+
if (!node)
|
|
70
|
+
return JSON.stringify({ error: 'WU not found' }, null, 2);
|
|
71
|
+
const visited = new Set();
|
|
72
|
+
const collectDeps = (id, currentDepth, isUpstream) => {
|
|
73
|
+
if (currentDepth > depth || visited.has(id))
|
|
74
|
+
return null;
|
|
75
|
+
visited.add(id);
|
|
76
|
+
const n = graph.get(id);
|
|
77
|
+
if (!n)
|
|
78
|
+
return { id, status: 'unknown', deps: [] };
|
|
79
|
+
const deps = isUpstream ? n.blockedBy : n.blocks;
|
|
80
|
+
return {
|
|
81
|
+
id,
|
|
82
|
+
title: n.title,
|
|
83
|
+
status: n.status,
|
|
84
|
+
deps: deps
|
|
85
|
+
.filter((d) => graph.has(d))
|
|
86
|
+
.map((d) => collectDeps(d, currentDepth + 1, isUpstream))
|
|
87
|
+
.filter(Boolean),
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
const output = {
|
|
91
|
+
root: {
|
|
92
|
+
id: node.id,
|
|
93
|
+
title: node.title,
|
|
94
|
+
status: node.status,
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
visited.clear();
|
|
98
|
+
if (direction === 'up' || direction === 'both') {
|
|
99
|
+
visited.add(rootId);
|
|
100
|
+
output.upstream = node.blockedBy
|
|
101
|
+
.filter((d) => graph.has(d))
|
|
102
|
+
.map((d) => collectDeps(d, 1, true))
|
|
103
|
+
.filter(Boolean);
|
|
104
|
+
}
|
|
105
|
+
visited.clear();
|
|
106
|
+
if (direction === 'down' || direction === 'both') {
|
|
107
|
+
visited.add(rootId);
|
|
108
|
+
output.downstream = node.blocks
|
|
109
|
+
.filter((d) => graph.has(d))
|
|
110
|
+
.map((d) => collectDeps(d, 1, false))
|
|
111
|
+
.filter(Boolean);
|
|
112
|
+
}
|
|
113
|
+
return JSON.stringify(output, null, 2);
|
|
114
|
+
}
|
|
115
|
+
// Guard main() for testability (WU-1366)
|
|
116
|
+
import { fileURLToPath } from 'node:url';
|
|
117
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
118
|
+
main();
|
|
119
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wu-deps.js","sourceRoot":"","sources":["../src/wu-deps.ts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAE,GAAG,EAAE,MAAM,sCAAsC,CAAC;AAC3D,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,aAAa,EACb,aAAa,GACd,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,oDAAoD,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAE/D,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,cAAc,CAAC;QAC1B,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,+BAA+B;QAC5C,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC;QACnF,QAAQ,EAAE,EAAE;QACZ,iBAAiB,EAAE,IAAI;KACxB,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;IAErB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,GAAG,CAAC,mDAAmD,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,GAAG,CAAC,0BAA0B,IAAI,mDAAmD,CAAC,CAAC;IACzF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC;IAErC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,GAAG,CAAC,0BAA0B,IAAI,0DAA0D,CAAC,CAAC;IAChG,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,cAAc,CAAC,KAAK,CAAC;IACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC;IAE3C,qBAAqB;IACrB,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAChD,GAAG,CAAC,uBAAuB,SAAS,oCAAoC,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,MAAM,CAAC;IAEX,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,cAAc,CAAC,OAAO;YACzB,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACxE,MAAM;QACR,KAAK,cAAc,CAAC,IAAI;YACtB,MAAM,GAAG,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YACxD,MAAM;QACR,KAAK,cAAc,CAAC,KAAK,CAAC;QAC1B;YACE,MAAM,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YACxD,MAAM;IACV,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEpB,iCAAiC;IACjC,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS;IACtD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAErE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;IAC1B,MAAM,WAAW,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE;QACnD,IAAI,YAAY,GAAG,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QAEnD,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACjD,OAAO;YACL,EAAE;YACF,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,IAAI;iBACP,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;iBACxD,MAAM,CAAC,OAAO,CAAC;SACnB,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG;QACb,IAAI,EAAE;YACJ,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB;KACF,CAAC;IAEF,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS;aAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;aACnC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM;aAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;aACpC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,yCAAyC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACvD,IAAI,EAAE,CAAC;AACT,CAAC"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* WU Done Helper
|
|
4
|
+
*
|
|
5
|
+
* Canonical sequence (Worktree mode - DEFAULT):
|
|
6
|
+
* 1) Run gates in lane worktree (validates the change, not just main)
|
|
7
|
+
* 2) Pre-flight validation: run ALL pre-commit hooks before merge (prevents partial completion)
|
|
8
|
+
* 3) cd into worktree
|
|
9
|
+
* 4) Auto-update WU YAML/backlog/status to Done in worktree (unless --no-auto)
|
|
10
|
+
* 5) Create `.beacon/stamps/WU-{id}.done` in worktree
|
|
11
|
+
* 6) Validate staged files against whitelist
|
|
12
|
+
* 7) Commit metadata changes in worktree (on lane branch)
|
|
13
|
+
* 8) cd back to main
|
|
14
|
+
* 9) Merge lane branch to main with --ff-only (metadata + code merged atomically)
|
|
15
|
+
* 10) Push to `main`
|
|
16
|
+
* 11) Remove the associated worktree (unless --no-remove)
|
|
17
|
+
* 12) Optionally delete the lane branch (with --delete-branch)
|
|
18
|
+
* 13) Emit telemetry to .beacon/flow.log
|
|
19
|
+
*
|
|
20
|
+
* Canonical sequence (Branch-Only mode - LEGACY):
|
|
21
|
+
* 1) Run gates on lane branch (in main checkout)
|
|
22
|
+
* 2) Pre-flight validation
|
|
23
|
+
* 3) Merge lane branch to main
|
|
24
|
+
* 4) Update metadata on main
|
|
25
|
+
* 5) Commit and push
|
|
26
|
+
* 6) Delete lane branch
|
|
27
|
+
*
|
|
28
|
+
* Usage:
|
|
29
|
+
* pnpm wu:done --id WU-334 [--worktree worktrees/intelligence-wu-334] [--no-auto] [--no-remove] [--no-merge] [--delete-branch]
|
|
30
|
+
*
|
|
31
|
+
* WU-2542: This script imports utilities from @lumenflow/core package.
|
|
32
|
+
* Full migration to thin shim pending @lumenflow/core CLI export implementation.
|
|
33
|
+
*/
|
|
34
|
+
/**
|
|
35
|
+
* WU-1999: Print exposure validation warnings.
|
|
36
|
+
*
|
|
37
|
+
* Validates exposure field and UI pairing for user-facing WUs.
|
|
38
|
+
* Non-blocking - logs warnings but doesn't prevent completion.
|
|
39
|
+
*
|
|
40
|
+
* Checks:
|
|
41
|
+
* - exposure field is present (warn if missing)
|
|
42
|
+
* - If exposure=api, warns if no ui_pairing_wus specified
|
|
43
|
+
* - If exposure=api, checks acceptance criteria for UI verification mention
|
|
44
|
+
* - If exposure=ui, recommends user_journey field if not present
|
|
45
|
+
*
|
|
46
|
+
* @param {object} wu - WU YAML document
|
|
47
|
+
* @param {object} options - Validation options
|
|
48
|
+
* @param {boolean} [options.skipExposureCheck=false] - Skip all exposure validation
|
|
49
|
+
* @returns {void}
|
|
50
|
+
*/
|
|
51
|
+
interface ExposureOptions {
|
|
52
|
+
skipExposureCheck?: boolean;
|
|
53
|
+
}
|
|
54
|
+
export declare function printExposureWarnings(wu: Record<string, unknown>, options?: ExposureOptions): void;
|
|
55
|
+
/**
|
|
56
|
+
* WU-2022: Validate feature accessibility for UI-exposed WUs.
|
|
57
|
+
*
|
|
58
|
+
* BLOCKING validation - prevents wu:done if exposure=ui but feature is not accessible.
|
|
59
|
+
* This prevents "orphaned code" where UI features exist but users cannot navigate to them.
|
|
60
|
+
*
|
|
61
|
+
* Accessibility is verified by ANY of:
|
|
62
|
+
* 1. navigation_path field is specified (explicit route)
|
|
63
|
+
* 2. code_paths includes a page.tsx file (Next.js page)
|
|
64
|
+
* 3. tests.manual includes navigation/accessibility verification
|
|
65
|
+
*
|
|
66
|
+
* @param {object} wu - WU YAML document
|
|
67
|
+
* @param {object} options - Validation options
|
|
68
|
+
* @param {boolean} [options.skipAccessibilityCheck=false] - Skip accessibility validation
|
|
69
|
+
* @returns {void} Calls die() if validation fails
|
|
70
|
+
*/
|
|
71
|
+
interface AccessibilityOptions {
|
|
72
|
+
skipAccessibilityCheck?: boolean;
|
|
73
|
+
}
|
|
74
|
+
export declare function validateAccessibilityOrDie(wu: Record<string, unknown>, options?: AccessibilityOptions): void;
|
|
75
|
+
/**
|
|
76
|
+
* WU-1946: Update spawn registry on WU completion.
|
|
77
|
+
* Non-blocking wrapper - failures logged as warnings.
|
|
78
|
+
*
|
|
79
|
+
* When a WU is completed via wu:done, this function updates the spawn registry
|
|
80
|
+
* to mark the spawned entry as completed (if one exists). This allows orchestrators
|
|
81
|
+
* to track sub-agent spawn completion status.
|
|
82
|
+
*
|
|
83
|
+
* Gracefully skips if:
|
|
84
|
+
* - No spawn entry found for this WU (legacy WU created before registry)
|
|
85
|
+
* - Registry file doesn't exist
|
|
86
|
+
* - Any error during update
|
|
87
|
+
*
|
|
88
|
+
* @param {string} id - WU ID being completed
|
|
89
|
+
* @param {string} baseDir - Base directory containing .beacon/state/
|
|
90
|
+
* @returns {Promise<void>}
|
|
91
|
+
*/
|
|
92
|
+
export declare function updateSpawnRegistryOnCompletion(id: any, baseDir?: string): Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* WU-1234: Normalize username for ownership comparison
|
|
95
|
+
* Extracts username from email address for comparison.
|
|
96
|
+
* This allows tom@hellm.ai to match 'tom' assigned_to field.
|
|
97
|
+
*
|
|
98
|
+
* @param {string|null|undefined} value - Email address or username
|
|
99
|
+
* @returns {string} Normalized username (lowercase)
|
|
100
|
+
*/
|
|
101
|
+
export declare function normalizeUsername(value: any): string;
|
|
102
|
+
/**
|
|
103
|
+
* WU-1234: Detect if branch is already merged to main
|
|
104
|
+
* Checks if branch tip is an ancestor of main HEAD (i.e., already merged).
|
|
105
|
+
* This prevents merge loops when code was merged via emergency fix or manual merge.
|
|
106
|
+
*
|
|
107
|
+
* @param {string} branch - Lane branch name
|
|
108
|
+
* @returns {Promise<boolean>} True if branch is already merged to main
|
|
109
|
+
*/
|
|
110
|
+
export declare function isBranchAlreadyMerged(branch: any): Promise<boolean>;
|
|
111
|
+
export { shouldSkipWebTests as isDocsOnlyByPaths } from '@lumenflow/core/dist/path-classifiers.js';
|
|
112
|
+
/**
|
|
113
|
+
* WU-1234: Pre-flight check for backlog state consistency
|
|
114
|
+
* Fails fast if the WU appears in both Done and In Progress sections.
|
|
115
|
+
*
|
|
116
|
+
* @param {string} id - WU ID to check
|
|
117
|
+
* @param {string} backlogPath - Path to backlog.md
|
|
118
|
+
* @returns {{ valid: boolean, error: string|null }}
|
|
119
|
+
*/
|
|
120
|
+
export declare function checkBacklogConsistencyForWU(id: any, backlogPath: any): {
|
|
121
|
+
valid: boolean;
|
|
122
|
+
error: string;
|
|
123
|
+
};
|
|
124
|
+
export declare function emitTelemetry(event: any): void;
|
|
125
|
+
/**
|
|
126
|
+
* WU-1983: Print migration deployment nudge when WU includes supabase changes.
|
|
127
|
+
* Notifies agent to deploy new migrations to production via MCP tools.
|
|
128
|
+
* Conditional output - only prints when migrations are in scope and new migrations exist.
|
|
129
|
+
*
|
|
130
|
+
* @param {string[]} codePaths - WU code_paths array
|
|
131
|
+
* @param {string} baseDir - Base directory for migration discovery
|
|
132
|
+
* @returns {Promise<void>}
|
|
133
|
+
*/
|
|
134
|
+
export declare function printMigrationDeploymentNudge(codePaths: any, baseDir: any): Promise<void>;
|
|
135
|
+
/**
|
|
136
|
+
* WU-1763: Print discovery summary nudge when discoveries exist for this WU.
|
|
137
|
+
* Conditional output - only prints when discoveryCount > 0.
|
|
138
|
+
* Non-blocking, single-line output to avoid flooding the console.
|
|
139
|
+
*
|
|
140
|
+
* @param {string} id - WU ID being completed
|
|
141
|
+
* @param {number} discoveryCount - Number of open discoveries for this WU
|
|
142
|
+
* @param {string[]} discoveryIds - List of discovery IDs (limited to 5 in output)
|
|
143
|
+
*/
|
|
144
|
+
export declare function printDiscoveryNudge(id: any, discoveryCount: any, discoveryIds: any): void;
|
|
145
|
+
/**
|
|
146
|
+
* WU-1763: Print documentation validation nudge when docs changed.
|
|
147
|
+
* Conditional output - only prints when changedDocPaths.length > 0.
|
|
148
|
+
* Non-blocking, single-line output to avoid flooding the console.
|
|
149
|
+
*
|
|
150
|
+
* @param {string} id - WU ID being completed
|
|
151
|
+
* @param {string[]} changedDocPaths - List of documentation paths that changed
|
|
152
|
+
*/
|
|
153
|
+
export declare function printDocValidationNudge(id: any, changedDocPaths: any): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wu-done.d.ts","sourceRoot":"","sources":["../src/wu-done.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAmLH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,KAAA,EAAE,OAAO,KAAK,QAerD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,0BAA0B,CAAC,EAAE,KAAA,EAAE,OAAO,KAAK,QAgB1D;AAgID;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,+BAA+B,CAAC,EAAE,KAAA,EAAE,OAAO,SAAgB,iBA0BhF;AASD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,KAAA,UAQtC;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,KAAA,oBA0BjD;AAKD,OAAO,EAAE,kBAAkB,IAAI,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAElG;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAAC,EAAE,KAAA,EAAE,WAAW,KAAA;;;EA+B3D;AAiVD,wBAAgB,aAAa,CAAC,KAAK,KAAA,QAMlC;AA67CD;;;;;;;;GAQG;AACH,wBAAsB,6BAA6B,CAAC,SAAS,KAAA,EAAE,OAAO,KAAA,iBA4BrE;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,KAAA,EAAE,cAAc,KAAA,EAAE,YAAY,KAAA,QASnE;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,KAAA,EAAE,eAAe,KAAA,QAK1D"}
|