@lumenflow/cli 3.5.0 → 3.6.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/dist/config-get.js +61 -20
- package/dist/config-get.js.map +1 -1
- package/dist/config-set.js +469 -70
- package/dist/config-set.js.map +1 -1
- package/dist/init-templates.js +12 -0
- package/dist/init-templates.js.map +1 -1
- package/dist/release.js +193 -223
- package/dist/release.js.map +1 -1
- package/dist/workspace-init.js +35 -3
- package/dist/workspace-init.js.map +1 -1
- package/dist/wu-claim.js +3 -2
- package/dist/wu-claim.js.map +1 -1
- package/dist/wu-create.js +74 -10
- package/dist/wu-create.js.map +1 -1
- package/dist/wu-delete.js +3 -3
- package/dist/wu-delete.js.map +1 -1
- package/dist/wu-done-already-merged.js +154 -0
- package/dist/wu-done-already-merged.js.map +1 -0
- package/dist/wu-done-git-ops.js +288 -0
- package/dist/wu-done-git-ops.js.map +1 -0
- package/dist/wu-done-policies.js +266 -0
- package/dist/wu-done-policies.js.map +1 -0
- package/dist/wu-done.js +64 -645
- package/dist/wu-done.js.map +1 -1
- package/dist/wu-edit.js +2 -2
- package/dist/wu-edit.js.map +1 -1
- package/dist/wu-repair.js +26 -8
- package/dist/wu-repair.js.map +1 -1
- package/package.json +7 -7
- package/packs/software-delivery/manifest-schema.ts +2 -0
- package/packs/software-delivery/manifest.ts +1 -0
- package/packs/software-delivery/manifest.yaml +1 -0
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
// Copyright (c) 2026 Hellmai Ltd
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { getDocsOnlyPrefixes, DOCS_ONLY_ROOT_FILES } from '@lumenflow/core';
|
|
4
|
+
import { DelegationRegistryStore } from '@lumenflow/core/delegation-registry-store';
|
|
5
|
+
import { die, getErrorMessage } from '@lumenflow/core/error-handler';
|
|
6
|
+
import { isDocumentationType } from '@lumenflow/core/wu-type-helpers';
|
|
7
|
+
import { CLI_FLAGS, EMOJI, LOG_PREFIX, PKG_MANAGER, SCRIPTS, WU_EXPOSURE, WU_TYPES, } from '@lumenflow/core/wu-constants';
|
|
8
|
+
import { getLatestWuBriefEvidence } from '@lumenflow/core/wu-state-store';
|
|
9
|
+
import { validateExposure, validateFeatureAccessibility } from '@lumenflow/core/wu-validation';
|
|
10
|
+
import { createSignal } from '@lumenflow/memory/signal';
|
|
11
|
+
import { resolveStateDir } from './state-path-resolvers.js';
|
|
12
|
+
/**
|
|
13
|
+
* WU-1999: Print exposure validation warnings.
|
|
14
|
+
*
|
|
15
|
+
* Validates exposure field and UI pairing for user-facing WUs.
|
|
16
|
+
* Non-blocking - logs warnings but doesn't prevent completion.
|
|
17
|
+
*/
|
|
18
|
+
export function printExposureWarnings(wu, options = {}) {
|
|
19
|
+
const result = validateExposure(wu, { skipExposureCheck: options.skipExposureCheck });
|
|
20
|
+
if (result.warnings.length > 0) {
|
|
21
|
+
console.log(`\n${LOG_PREFIX.DONE} ${EMOJI.WARNING} WU-1999: Exposure validation warnings:`);
|
|
22
|
+
for (const warning of result.warnings) {
|
|
23
|
+
console.log(`${LOG_PREFIX.DONE} ${warning}`);
|
|
24
|
+
}
|
|
25
|
+
console.log(`${LOG_PREFIX.DONE} These are non-blocking warnings. ` +
|
|
26
|
+
`To skip, use --skip-exposure-check flag.\n`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* WU-2022: Validate feature accessibility for UI-exposed WUs.
|
|
31
|
+
*
|
|
32
|
+
* BLOCKING validation - prevents wu:done if exposure=ui but feature is not accessible.
|
|
33
|
+
*/
|
|
34
|
+
export function validateAccessibilityOrDie(wu, options = {}) {
|
|
35
|
+
const result = validateFeatureAccessibility(wu, {
|
|
36
|
+
skipAccessibilityCheck: options.skipAccessibilityCheck,
|
|
37
|
+
});
|
|
38
|
+
if (!result.valid) {
|
|
39
|
+
console.log(`\n${LOG_PREFIX.DONE} ${EMOJI.FAILURE} WU-2022: Feature accessibility validation failed`);
|
|
40
|
+
die(`❌ FEATURE ACCESSIBILITY VALIDATION FAILED (WU-2022)\n\n` +
|
|
41
|
+
`Cannot complete wu:done - UI feature accessibility not verified.\n\n` +
|
|
42
|
+
`${result.errors.join('\n\n')}\n\n` +
|
|
43
|
+
`This gate prevents "orphaned code" - features that exist but users cannot access.`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* WU-1012: Validate --docs-only flag usage.
|
|
48
|
+
*/
|
|
49
|
+
export function validateDocsOnlyFlag(wu, args) {
|
|
50
|
+
if (!args.docsOnly) {
|
|
51
|
+
return { valid: true, errors: [] };
|
|
52
|
+
}
|
|
53
|
+
const wuId = wu.id || 'unknown';
|
|
54
|
+
const exposure = wu.exposure;
|
|
55
|
+
const type = wu.type;
|
|
56
|
+
const codePaths = wu.code_paths;
|
|
57
|
+
if (exposure === WU_EXPOSURE.DOCUMENTATION) {
|
|
58
|
+
return { valid: true, errors: [] };
|
|
59
|
+
}
|
|
60
|
+
if (isDocumentationType(type)) {
|
|
61
|
+
return { valid: true, errors: [] };
|
|
62
|
+
}
|
|
63
|
+
const docsOnlyPrefixes = getDocsOnlyPrefixes().map((prefix) => prefix.toLowerCase());
|
|
64
|
+
const isDocsPath = (p) => {
|
|
65
|
+
const normalizedPath = p.trim().toLowerCase();
|
|
66
|
+
for (const prefix of docsOnlyPrefixes) {
|
|
67
|
+
if (normalizedPath.startsWith(prefix)) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (normalizedPath.endsWith('.md')) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
for (const pattern of DOCS_ONLY_ROOT_FILES) {
|
|
75
|
+
if (normalizedPath.startsWith(pattern)) {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return false;
|
|
80
|
+
};
|
|
81
|
+
if (codePaths && Array.isArray(codePaths) && codePaths.length > 0) {
|
|
82
|
+
const allDocsOnly = codePaths.every((p) => typeof p === 'string' && isDocsPath(p));
|
|
83
|
+
if (allDocsOnly) {
|
|
84
|
+
return { valid: true, errors: [] };
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const currentExposure = exposure || 'not set';
|
|
88
|
+
const currentType = type || 'not set';
|
|
89
|
+
return {
|
|
90
|
+
valid: false,
|
|
91
|
+
errors: [
|
|
92
|
+
`--docs-only flag used on ${wuId} but WU is not documentation-focused.\n\n` +
|
|
93
|
+
`Current exposure: ${currentExposure}\n` +
|
|
94
|
+
`Current type: ${currentType}\n\n` +
|
|
95
|
+
`--docs-only requires one of:\n` +
|
|
96
|
+
` 1. exposure: documentation\n` +
|
|
97
|
+
` 2. type: documentation\n` +
|
|
98
|
+
` 3. All code_paths under configured docs prefixes (${docsOnlyPrefixes.join(', ')}), or *.md files\n\n` +
|
|
99
|
+
`To fix, either:\n` +
|
|
100
|
+
` - Remove --docs-only flag and run full gates\n` +
|
|
101
|
+
` - Change WU exposure to 'documentation' if this is truly a docs-only change`,
|
|
102
|
+
],
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* WU-1012: Build gates command with --docs-only flag support.
|
|
107
|
+
*/
|
|
108
|
+
export function buildGatesCommand(options) {
|
|
109
|
+
const { docsOnly = false, isDocsOnly = false } = options;
|
|
110
|
+
if (docsOnly || isDocsOnly) {
|
|
111
|
+
return `${PKG_MANAGER} ${SCRIPTS.GATES} -- ${CLI_FLAGS.DOCS_ONLY}`;
|
|
112
|
+
}
|
|
113
|
+
return `${PKG_MANAGER} ${SCRIPTS.GATES}`;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Enforce wu:brief evidence for feature and bug WUs.
|
|
117
|
+
*/
|
|
118
|
+
export function shouldEnforceWuBriefEvidence(doc) {
|
|
119
|
+
return doc.type === WU_TYPES.FEATURE || doc.type === WU_TYPES.BUG;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Build remediation guidance when wu:brief evidence is missing.
|
|
123
|
+
*/
|
|
124
|
+
export function buildMissingWuBriefEvidenceMessage(id) {
|
|
125
|
+
return (`Missing wu:brief evidence for ${id}.\n\n` +
|
|
126
|
+
`Completion policy requires an auditable wu:brief execution record for feature/bug WUs.\n\n` +
|
|
127
|
+
`Fix options:\n` +
|
|
128
|
+
` 1. Run wu:brief in the claimed workspace:\n` +
|
|
129
|
+
` pnpm wu:brief --id ${id}\n` +
|
|
130
|
+
` 2. Retry completion:\n` +
|
|
131
|
+
` pnpm wu:done --id ${id}\n` +
|
|
132
|
+
` 3. Legacy/manual override (audited):\n` +
|
|
133
|
+
` pnpm wu:done --id ${id} --force`);
|
|
134
|
+
}
|
|
135
|
+
function buildWuBriefEvidenceReadFailureMessage(id, stateDir, error) {
|
|
136
|
+
return (`Could not verify wu:brief evidence for ${id}.\n\n` +
|
|
137
|
+
`State path: ${stateDir}\n` +
|
|
138
|
+
`Error: ${getErrorMessage(error)}\n\n` +
|
|
139
|
+
`Fix options:\n` +
|
|
140
|
+
` 1. Repair/restore state store, then rerun wu:done\n` +
|
|
141
|
+
` 2. Use --force for audited override when recovery is not possible`);
|
|
142
|
+
}
|
|
143
|
+
export async function enforceWuBriefEvidenceForDone(id, doc, options = {}) {
|
|
144
|
+
if (!shouldEnforceWuBriefEvidence(doc)) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const baseDir = options.baseDir ?? process.cwd();
|
|
148
|
+
const force = options.force === true;
|
|
149
|
+
const stateDir = resolveStateDir(baseDir);
|
|
150
|
+
const getBriefEvidenceFn = options.getBriefEvidenceFn ?? getLatestWuBriefEvidence;
|
|
151
|
+
const blocker = options.blocker ?? ((message) => die(message));
|
|
152
|
+
const warn = options.warn ?? console.warn;
|
|
153
|
+
let evidence;
|
|
154
|
+
try {
|
|
155
|
+
evidence = await getBriefEvidenceFn(stateDir, id);
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
if (!force) {
|
|
159
|
+
blocker(buildWuBriefEvidenceReadFailureMessage(id, stateDir, error));
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
warn(`${LOG_PREFIX.DONE} ${EMOJI.WARNING} WU-2132: brief evidence verification failed for ${id}, override accepted via --force`);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
if (evidence) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
if (!force) {
|
|
169
|
+
blocker(buildMissingWuBriefEvidenceMessage(id));
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
warn(`${LOG_PREFIX.DONE} ${EMOJI.WARNING} WU-2132: brief evidence override accepted for ${id} via --force`);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Returns true when completion should enforce spawn provenance.
|
|
176
|
+
*/
|
|
177
|
+
export function shouldEnforceSpawnProvenance(doc) {
|
|
178
|
+
return typeof doc?.initiative === 'string' && doc.initiative.trim().length > 0;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Build actionable remediation guidance for missing spawn provenance.
|
|
182
|
+
*/
|
|
183
|
+
export function buildMissingSpawnProvenanceMessage(id, initiativeId) {
|
|
184
|
+
return (`Missing spawn provenance for initiative-governed WU ${id} (${initiativeId}).\n\n` +
|
|
185
|
+
`This completion path enforces auditable delegation lineage for initiative work.\n\n` +
|
|
186
|
+
`Fix options:\n` +
|
|
187
|
+
` 1. Re-run with --force for an audited override (legacy/manual workflow)\n` +
|
|
188
|
+
` 2. Register spawn lineage before completion (preferred):\n` +
|
|
189
|
+
` pnpm wu:delegate --id ${id} --parent-wu WU-XXXX --client codex-cli\n\n` +
|
|
190
|
+
`Then retry: pnpm wu:done --id ${id}`);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Build actionable remediation guidance for intent-only spawn provenance.
|
|
194
|
+
*/
|
|
195
|
+
export function buildMissingSpawnPickupEvidenceMessage(id, initiativeId) {
|
|
196
|
+
return (`Missing pickup evidence for initiative-governed WU ${id} (${initiativeId}).\n\n` +
|
|
197
|
+
`Delegation intent exists, but this WU has no claim-time pickup handshake.\n` +
|
|
198
|
+
`Completion policy requires both intent and pickup evidence.\n\n` +
|
|
199
|
+
`Fix options:\n` +
|
|
200
|
+
` 1. Re-run with --force for an audited override (legacy/manual claim)\n` +
|
|
201
|
+
` 2. Ensure future delegated work is picked up via wu:claim (records handshake automatically)\n\n` +
|
|
202
|
+
`Then retry: pnpm wu:done --id ${id}`);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Returns true when spawn provenance includes claim-time pickup evidence.
|
|
206
|
+
*/
|
|
207
|
+
export function hasSpawnPickupEvidence(spawnEntry) {
|
|
208
|
+
const pickedUpAt = typeof spawnEntry?.pickedUpAt === 'string' && spawnEntry.pickedUpAt.trim().length > 0
|
|
209
|
+
? spawnEntry.pickedUpAt
|
|
210
|
+
: '';
|
|
211
|
+
const pickedUpBy = typeof spawnEntry?.pickedUpBy === 'string' && spawnEntry.pickedUpBy.trim().length > 0
|
|
212
|
+
? spawnEntry.pickedUpBy
|
|
213
|
+
: '';
|
|
214
|
+
return pickedUpAt.length > 0 && pickedUpBy.length > 0;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Record forced spawn-provenance bypass in memory signals for auditability.
|
|
218
|
+
*/
|
|
219
|
+
async function recordSpawnProvenanceOverride(id, doc, baseDir = process.cwd()) {
|
|
220
|
+
try {
|
|
221
|
+
const initiativeId = typeof doc?.initiative === 'string' ? doc.initiative.trim() : 'unknown';
|
|
222
|
+
const lane = typeof doc?.lane === 'string' ? doc.lane : undefined;
|
|
223
|
+
const result = await createSignal(baseDir, {
|
|
224
|
+
message: `spawn-provenance override used for ${id} in ${initiativeId} via --force`,
|
|
225
|
+
wuId: id,
|
|
226
|
+
lane,
|
|
227
|
+
});
|
|
228
|
+
if (result.success) {
|
|
229
|
+
console.log(`${LOG_PREFIX.DONE} ${EMOJI.INFO} Spawn-provenance override recorded (${result.signal.id})`);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
catch (err) {
|
|
233
|
+
console.warn(`${LOG_PREFIX.DONE} ${EMOJI.WARNING} Could not record spawn-provenance override: ${getErrorMessage(err)}`);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Enforce spawn provenance policy for initiative-governed WUs before completion.
|
|
238
|
+
*/
|
|
239
|
+
export async function enforceSpawnProvenanceForDone(id, doc, options = {}) {
|
|
240
|
+
if (!shouldEnforceSpawnProvenance(doc)) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
const initiativeId = typeof doc.initiative === 'string' && doc.initiative.trim() ? doc.initiative.trim() : 'unknown';
|
|
244
|
+
const baseDir = options.baseDir ?? process.cwd();
|
|
245
|
+
const force = options.force === true;
|
|
246
|
+
const store = new DelegationRegistryStore(resolveStateDir(baseDir));
|
|
247
|
+
await store.load();
|
|
248
|
+
const spawnEntry = store.getByTarget(id);
|
|
249
|
+
if (!spawnEntry) {
|
|
250
|
+
if (!force) {
|
|
251
|
+
die(buildMissingSpawnProvenanceMessage(id, initiativeId));
|
|
252
|
+
}
|
|
253
|
+
console.warn(`${LOG_PREFIX.DONE} ${EMOJI.WARNING} WU-1599: spawn provenance override accepted for ${id} (${initiativeId}) via --force`);
|
|
254
|
+
await recordSpawnProvenanceOverride(id, doc, baseDir);
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
if (hasSpawnPickupEvidence(spawnEntry)) {
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
if (!force) {
|
|
261
|
+
die(buildMissingSpawnPickupEvidenceMessage(id, initiativeId));
|
|
262
|
+
}
|
|
263
|
+
console.warn(`${LOG_PREFIX.DONE} ${EMOJI.WARNING} WU-1605: pickup evidence override accepted for ${id} (${initiativeId}) via --force`);
|
|
264
|
+
await recordSpawnProvenanceOverride(id, doc, baseDir);
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=wu-done-policies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wu-done-policies.js","sourceRoot":"","sources":["../src/wu-done-policies.ts"],"names":[],"mappings":"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"}
|