@lumenflow/cli 3.8.6 → 3.9.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 +11 -15
- package/dist/cli-entry-point.js +7 -0
- package/dist/cli-entry-point.js.map +1 -1
- package/dist/gate-defaults.js +5 -0
- package/dist/gate-defaults.js.map +1 -1
- package/dist/gates-runners.js +77 -1
- package/dist/gates-runners.js.map +1 -1
- package/dist/guard-main-branch.js +3 -2
- package/dist/guard-main-branch.js.map +1 -1
- package/dist/hooks/enforcement-checks.js +3 -2
- package/dist/hooks/enforcement-checks.js.map +1 -1
- package/dist/hooks/path-utils.js +2 -1
- package/dist/hooks/path-utils.js.map +1 -1
- package/dist/init-detection.js +3 -3
- package/dist/init-detection.js.map +1 -1
- package/dist/lane-create.js +223 -0
- package/dist/lane-create.js.map +1 -0
- package/dist/mem-signal.js +1 -1
- package/dist/mem-signal.js.map +1 -1
- package/dist/public-manifest.js +7 -0
- package/dist/public-manifest.js.map +1 -1
- package/dist/signal-middleware.js +192 -0
- package/dist/signal-middleware.js.map +1 -0
- package/dist/state-doctor.js +135 -0
- package/dist/state-doctor.js.map +1 -1
- package/dist/state-emit.js +72 -10
- package/dist/state-emit.js.map +1 -1
- package/dist/validate.js +2 -2
- package/dist/validate.js.map +1 -1
- package/dist/wu-claim.js +75 -10
- package/dist/wu-claim.js.map +1 -1
- package/dist/wu-done-already-merged.js +2 -7
- package/dist/wu-done-already-merged.js.map +1 -1
- package/dist/wu-done-gates.js +296 -0
- package/dist/wu-done-gates.js.map +1 -0
- package/dist/wu-done-memory-telemetry.js +145 -0
- package/dist/wu-done-memory-telemetry.js.map +1 -0
- package/dist/wu-done-mode-execution.js +136 -0
- package/dist/wu-done-mode-execution.js.map +1 -0
- package/dist/wu-done-policies.js +206 -1
- package/dist/wu-done-policies.js.map +1 -1
- package/dist/wu-done-preflight.js +207 -0
- package/dist/wu-done-preflight.js.map +1 -0
- package/dist/wu-done.js +48 -888
- package/dist/wu-done.js.map +1 -1
- package/dist/wu-edit-validators.js +30 -1
- package/dist/wu-edit-validators.js.map +1 -1
- package/dist/wu-edit.js +7 -2
- package/dist/wu-edit.js.map +1 -1
- package/dist/wu-prep.js +17 -1
- package/dist/wu-prep.js.map +1 -1
- package/dist/wu-spawn-prompt-builders.js +65 -10
- package/dist/wu-spawn-prompt-builders.js.map +1 -1
- package/package.json +9 -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 +12 -14
- package/templates/core/LUMENFLOW.md.template +7 -4
- package/templates/core/ai/onboarding/agent-invocation-guide.md.template +2 -2
- package/templates/core/ai/onboarding/docs-generation.md.template +1 -1
- package/templates/core/ai/onboarding/first-wu-mistakes.md.template +40 -0
- package/templates/core/ai/onboarding/initiative-orchestration.md.template +402 -0
- package/templates/core/ai/onboarding/quick-ref-commands.md.template +129 -56
- package/templates/core/ai/onboarding/release-process.md.template +102 -39
- package/templates/core/ai/onboarding/starting-prompt.md.template +1 -0
- package/templates/core/ai/onboarding/test-ratchet.md.template +2 -8
- package/templates/vendors/claude/.claude/CLAUDE.md.template +1 -1
- package/templates/vendors/claude/.claude/skills/bug-classification/SKILL.md.template +2 -2
- package/templates/vendors/claude/.claude/skills/code-quality/SKILL.md.template +3 -3
- package/templates/vendors/claude/.claude/skills/context-management/SKILL.md.template +1 -1
- package/templates/vendors/claude/.claude/skills/frontend-design/SKILL.md.template +1 -1
- package/templates/vendors/claude/.claude/skills/lumenflow-gates/SKILL.md.template +4 -4
- package/templates/vendors/claude/.claude/skills/tdd-workflow/SKILL.md.template +4 -4
- package/templates/vendors/claude/.claude/skills/worktree-discipline/SKILL.md.template +5 -5
- package/templates/vendors/claude/.claude/skills/wu-lifecycle/SKILL.md.template +4 -4
- package/templates/vendors/cline/.clinerules.template +1 -1
- package/templates/vendors/cursor/.cursor/rules/lumenflow.md.template +22 -2
- package/templates/vendors/windsurf/.windsurf/rules/lumenflow.md.template +22 -2
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
// Copyright (c) 2026 Hellmai Ltd
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { createGitForPath } from '@lumenflow/core/git-adapter';
|
|
4
|
+
import { executeBranchOnlyCompletion, executeBranchPRCompletion, } from '@lumenflow/core/wu-done-branch-only';
|
|
5
|
+
import { executeWorktreeCompletion } from '@lumenflow/core/wu-done-worktree';
|
|
6
|
+
import { detectAlreadyMergedNoWorktree } from '@lumenflow/core/wu-done-merged-worktree';
|
|
7
|
+
import { releaseLaneLock } from '@lumenflow/core/lane-lock';
|
|
8
|
+
import { getErrorMessage } from '@lumenflow/core/error-handler';
|
|
9
|
+
import { EMOJI, EXIT_CODES, LOG_PREFIX } from '@lumenflow/core/wu-constants';
|
|
10
|
+
import { WU_DONE_EVENTS } from '@lumenflow/core/wu-done-machine';
|
|
11
|
+
/**
|
|
12
|
+
* WU-2167: Execute mode-specific wu:done completion while keeping main() as a thin orchestrator.
|
|
13
|
+
*/
|
|
14
|
+
export async function executeModeSpecificCompletion({ id, args, docMain, title, isDocsOnly, maxCommitLength, isBranchPR, effectiveBranchOnly, worktreePath, resolvedWorktreePath, pipelineActor, validateStagedFiles, defaultBranchFrom, executeAlreadyMergedFinalize, recordTransactionState, rollbackTransaction, }) {
|
|
15
|
+
const completionResult = { cleanupSafe: true };
|
|
16
|
+
const baseContext = {
|
|
17
|
+
id,
|
|
18
|
+
args,
|
|
19
|
+
docMain,
|
|
20
|
+
title,
|
|
21
|
+
isDocsOnly,
|
|
22
|
+
maxCommitLength,
|
|
23
|
+
validateStagedFiles,
|
|
24
|
+
};
|
|
25
|
+
try {
|
|
26
|
+
let modeCompletionResult;
|
|
27
|
+
if (isBranchPR) {
|
|
28
|
+
const laneBranch = defaultBranchFrom(docMain);
|
|
29
|
+
const branchPRContext = {
|
|
30
|
+
...baseContext,
|
|
31
|
+
laneBranch,
|
|
32
|
+
};
|
|
33
|
+
modeCompletionResult = await executeBranchPRCompletion(branchPRContext);
|
|
34
|
+
}
|
|
35
|
+
else if (effectiveBranchOnly) {
|
|
36
|
+
const branchOnlyContext = {
|
|
37
|
+
...baseContext,
|
|
38
|
+
recordTransactionState,
|
|
39
|
+
rollbackTransaction,
|
|
40
|
+
};
|
|
41
|
+
modeCompletionResult = await executeBranchOnlyCompletion(branchOnlyContext);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
if (!worktreePath) {
|
|
45
|
+
const laneBranch = defaultBranchFrom(docMain);
|
|
46
|
+
const mergedDetection = await detectAlreadyMergedNoWorktree({
|
|
47
|
+
wuId: id,
|
|
48
|
+
laneBranch: laneBranch || '',
|
|
49
|
+
worktreePath: resolvedWorktreePath,
|
|
50
|
+
});
|
|
51
|
+
if (mergedDetection.merged && !mergedDetection.worktreeExists) {
|
|
52
|
+
console.log(`${LOG_PREFIX.DONE} ${EMOJI.INFO} WU-1746: Worktree missing but branch already merged to main`);
|
|
53
|
+
const mergedTitle = title || String(docMain.title || id);
|
|
54
|
+
const mergedResult = await executeAlreadyMergedFinalize({
|
|
55
|
+
id,
|
|
56
|
+
title: mergedTitle,
|
|
57
|
+
lane: String(docMain.lane || ''),
|
|
58
|
+
doc: docMain,
|
|
59
|
+
});
|
|
60
|
+
modeCompletionResult = {
|
|
61
|
+
success: mergedResult.success,
|
|
62
|
+
committed: true,
|
|
63
|
+
pushed: true,
|
|
64
|
+
merged: true,
|
|
65
|
+
cleanupSafe: true,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
throw new Error(`Missing worktree path for ${id} completion in worktree mode`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
const worktreeGitForValidation = createGitForPath(worktreePath);
|
|
74
|
+
const worktreeContext = {
|
|
75
|
+
...baseContext,
|
|
76
|
+
worktreePath,
|
|
77
|
+
validateStagedFiles: (wuId, docsOnly, options) => validateStagedFiles(wuId, docsOnly, worktreeGitForValidation, options),
|
|
78
|
+
};
|
|
79
|
+
modeCompletionResult = await executeWorktreeCompletion(worktreeContext);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
pipelineActor.send({ type: WU_DONE_EVENTS.COMMIT_COMPLETE });
|
|
83
|
+
pipelineActor.send({ type: WU_DONE_EVENTS.MERGE_COMPLETE });
|
|
84
|
+
pipelineActor.send({ type: WU_DONE_EVENTS.PUSH_COMPLETE });
|
|
85
|
+
if ('recovered' in modeCompletionResult && modeCompletionResult.recovered) {
|
|
86
|
+
try {
|
|
87
|
+
const lane = docMain.lane;
|
|
88
|
+
if (lane)
|
|
89
|
+
releaseLaneLock(lane, { wuId: id });
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// Ignore lock release errors during cleanup path
|
|
93
|
+
}
|
|
94
|
+
pipelineActor.stop();
|
|
95
|
+
process.exit(EXIT_CODES.SUCCESS);
|
|
96
|
+
}
|
|
97
|
+
return modeCompletionResult;
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
const failureStage = completionResult.committed === false
|
|
101
|
+
? WU_DONE_EVENTS.COMMIT_FAILED
|
|
102
|
+
: completionResult.merged === false
|
|
103
|
+
? WU_DONE_EVENTS.MERGE_FAILED
|
|
104
|
+
: completionResult.pushed === false
|
|
105
|
+
? WU_DONE_EVENTS.PUSH_FAILED
|
|
106
|
+
: WU_DONE_EVENTS.COMMIT_FAILED;
|
|
107
|
+
pipelineActor.send({
|
|
108
|
+
type: failureStage,
|
|
109
|
+
error: getErrorMessage(err),
|
|
110
|
+
});
|
|
111
|
+
const failedSnapshot = pipelineActor.getSnapshot();
|
|
112
|
+
console.error(`${LOG_PREFIX.DONE} Pipeline state: ${failedSnapshot.value} (failedAt: ${failedSnapshot.context.failedAt})`);
|
|
113
|
+
pipelineActor.stop();
|
|
114
|
+
try {
|
|
115
|
+
const lane = docMain.lane;
|
|
116
|
+
if (lane)
|
|
117
|
+
releaseLaneLock(lane, { wuId: id });
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// Ignore lock release errors during failure path
|
|
121
|
+
}
|
|
122
|
+
console.error(`\n${LOG_PREFIX.DONE} ${EMOJI.FAILURE} Mode execution failed: ${getErrorMessage(err)}`);
|
|
123
|
+
console.error(`${LOG_PREFIX.DONE} ${EMOJI.INFO} Next step: resolve the reported error and retry: pnpm wu:done --id ${id}`);
|
|
124
|
+
const cleanupSafe = typeof err === 'object' &&
|
|
125
|
+
err !== null &&
|
|
126
|
+
'cleanupSafe' in err &&
|
|
127
|
+
typeof err.cleanupSafe === 'boolean'
|
|
128
|
+
? err.cleanupSafe
|
|
129
|
+
: undefined;
|
|
130
|
+
if (cleanupSafe === false) {
|
|
131
|
+
console.log(`\n${LOG_PREFIX.DONE} ${EMOJI.WARNING} WU-1811: Worktree preserved - rerun wu:done to recover`);
|
|
132
|
+
}
|
|
133
|
+
process.exit(EXIT_CODES.ERROR);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=wu-done-mode-execution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wu-done-mode-execution.js","sourceRoot":"","sources":["../src/wu-done-mode-execution.ts"],"names":[],"mappings":"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"}
|
package/dist/wu-done-policies.js
CHANGED
|
@@ -2,13 +2,19 @@
|
|
|
2
2
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
3
|
import { getDocsOnlyPrefixes, DOCS_ONLY_ROOT_FILES } from '@lumenflow/core';
|
|
4
4
|
import { DelegationRegistryStore } from '@lumenflow/core/delegation-registry-store';
|
|
5
|
+
import { getConfig } from '@lumenflow/core/config';
|
|
5
6
|
import { die, getErrorMessage } from '@lumenflow/core/error-handler';
|
|
6
7
|
import { isDocumentationType } from '@lumenflow/core/wu-type-helpers';
|
|
7
8
|
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 { getLatestWuBriefEvidence, getWuBriefEvidenceAgeMinutes, isWuBriefEvidenceStale, WUStateStore, } from '@lumenflow/core/wu-state-store';
|
|
9
10
|
import { validateExposure, validateFeatureAccessibility } from '@lumenflow/core/wu-validation';
|
|
10
11
|
import { createSignal } from '@lumenflow/memory/signal';
|
|
11
12
|
import { resolveStateDir } from './state-path-resolvers.js';
|
|
13
|
+
export const WU_BRIEF_POLICY_MODES = ['off', 'manual', 'auto', 'required'];
|
|
14
|
+
const DEFAULT_WU_BRIEF_POLICY_MODE = 'auto';
|
|
15
|
+
const DEFAULT_WU_BRIEF_FRESHNESS_MINUTES = 1440;
|
|
16
|
+
const PREP_LOG_PREFIX = '[wu-prep]';
|
|
17
|
+
const PREP_FORCE_REASON_REQUIRED_MESSAGE = 'Missing required --reason for wu:brief policy bypass in wu:prep.';
|
|
12
18
|
/**
|
|
13
19
|
* WU-1999: Print exposure validation warnings.
|
|
14
20
|
*
|
|
@@ -118,6 +124,31 @@ export function buildGatesCommand(options) {
|
|
|
118
124
|
export function shouldEnforceWuBriefEvidence(doc) {
|
|
119
125
|
return doc.type === WU_TYPES.FEATURE || doc.type === WU_TYPES.BUG;
|
|
120
126
|
}
|
|
127
|
+
function isWuBriefPolicyMode(value) {
|
|
128
|
+
return (typeof value === 'string' &&
|
|
129
|
+
WU_BRIEF_POLICY_MODES.includes(value));
|
|
130
|
+
}
|
|
131
|
+
export function resolveWuBriefPolicyMode(config = getConfig()) {
|
|
132
|
+
const configured = config.wu?.brief?.policyMode;
|
|
133
|
+
if (isWuBriefPolicyMode(configured)) {
|
|
134
|
+
return configured;
|
|
135
|
+
}
|
|
136
|
+
return DEFAULT_WU_BRIEF_POLICY_MODE;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Resolve wu:brief freshness threshold in minutes.
|
|
140
|
+
* 0 disables freshness checks.
|
|
141
|
+
*/
|
|
142
|
+
export function resolveWuBriefFreshnessMinutes(config = getConfig()) {
|
|
143
|
+
const configured = config.wu?.brief?.freshnessMinutes;
|
|
144
|
+
if (typeof configured === 'number' && Number.isFinite(configured)) {
|
|
145
|
+
if (configured <= 0) {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
return Math.floor(configured);
|
|
149
|
+
}
|
|
150
|
+
return DEFAULT_WU_BRIEF_FRESHNESS_MINUTES;
|
|
151
|
+
}
|
|
121
152
|
/**
|
|
122
153
|
* Build remediation guidance when wu:brief evidence is missing.
|
|
123
154
|
*/
|
|
@@ -134,6 +165,145 @@ export function buildMissingWuBriefEvidenceMessage(id) {
|
|
|
134
165
|
` 4. Legacy/manual override (audited):\n` +
|
|
135
166
|
` pnpm wu:done --id ${id} --force`);
|
|
136
167
|
}
|
|
168
|
+
export function buildMissingWuBriefEvidenceMessageForPrep(id, mode) {
|
|
169
|
+
return (`Missing wu:brief evidence for ${id} (policy=${mode}).\n\n` +
|
|
170
|
+
`wu:prep enforces wu:brief evidence when policy mode is required.\n\n` +
|
|
171
|
+
`Fix options:\n` +
|
|
172
|
+
` 1. Record evidence by generating a brief prompt:\n` +
|
|
173
|
+
` pnpm wu:brief --id ${id}\n` +
|
|
174
|
+
` 2. If self-implementing, record evidence only:\n` +
|
|
175
|
+
` pnpm wu:brief --id ${id} --evidence-only\n` +
|
|
176
|
+
` 3. Retry prep:\n` +
|
|
177
|
+
` pnpm wu:prep --id ${id}\n` +
|
|
178
|
+
` 4. Emergency audited bypass (requires explicit reason):\n` +
|
|
179
|
+
` pnpm wu:prep --id ${id} --force --reason "<why bypass is required>"`);
|
|
180
|
+
}
|
|
181
|
+
function describeWuBriefFreshness(evidenceTimestamp, freshnessMinutes, now) {
|
|
182
|
+
const ageMinutes = getWuBriefEvidenceAgeMinutes(evidenceTimestamp, now);
|
|
183
|
+
if (ageMinutes === null) {
|
|
184
|
+
return `Evidence timestamp is invalid: ${evidenceTimestamp}`;
|
|
185
|
+
}
|
|
186
|
+
return `Evidence age is ${ageMinutes} minute(s); threshold is ${freshnessMinutes} minute(s).`;
|
|
187
|
+
}
|
|
188
|
+
function buildStaleWuBriefEvidenceMessageForPrep(options) {
|
|
189
|
+
return (`Stale wu:brief evidence for ${options.id} (policy=${options.mode}).\n\n` +
|
|
190
|
+
`${describeWuBriefFreshness(options.evidenceTimestamp, options.freshnessMinutes, options.now)}\n\n` +
|
|
191
|
+
`Fix options:\n` +
|
|
192
|
+
` 1. Refresh evidence:\n` +
|
|
193
|
+
` pnpm wu:brief --id ${options.id}\n` +
|
|
194
|
+
` 2. If self-implementing, refresh evidence only:\n` +
|
|
195
|
+
` pnpm wu:brief --id ${options.id} --evidence-only\n` +
|
|
196
|
+
` 3. Retry prep:\n` +
|
|
197
|
+
` pnpm wu:prep --id ${options.id}\n` +
|
|
198
|
+
` 4. Emergency audited bypass (requires explicit reason):\n` +
|
|
199
|
+
` pnpm wu:prep --id ${options.id} --force --reason "<why stale evidence bypass is required>"`);
|
|
200
|
+
}
|
|
201
|
+
function buildStaleWuBriefEvidenceMessageForDone(options) {
|
|
202
|
+
return (`Stale wu:brief evidence for ${options.id} (policy=${options.mode}).\n\n` +
|
|
203
|
+
`${describeWuBriefFreshness(options.evidenceTimestamp, options.freshnessMinutes, options.now)}\n\n` +
|
|
204
|
+
`Fix options:\n` +
|
|
205
|
+
` 1. Refresh evidence:\n` +
|
|
206
|
+
` pnpm wu:brief --id ${options.id}\n` +
|
|
207
|
+
` 2. If self-implementing, refresh evidence only:\n` +
|
|
208
|
+
` pnpm wu:brief --id ${options.id} --evidence-only\n` +
|
|
209
|
+
` 3. Retry completion:\n` +
|
|
210
|
+
` pnpm wu:done --id ${options.id}\n` +
|
|
211
|
+
` 4. Legacy/manual override (audited):\n` +
|
|
212
|
+
` pnpm wu:done --id ${options.id} --force`);
|
|
213
|
+
}
|
|
214
|
+
export async function recordWuBriefPrepBypassAudit(options) {
|
|
215
|
+
const baseDir = options.baseDir ?? process.cwd();
|
|
216
|
+
const stateDir = resolveStateDir(baseDir);
|
|
217
|
+
const store = new WUStateStore(stateDir);
|
|
218
|
+
await store.checkpoint(options.wuId, `[wu:brief] prep force bypass accepted (${options.policyMode}): ${options.reason}`, {
|
|
219
|
+
progress: 'wu:brief policy bypass',
|
|
220
|
+
nextSteps: `policy=${options.policyMode}`,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
export async function enforceWuBriefEvidenceForPrep(id, doc, options = {}) {
|
|
224
|
+
if (!shouldEnforceWuBriefEvidence(doc)) {
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
const mode = options.mode ?? resolveWuBriefPolicyMode();
|
|
228
|
+
if (mode === 'off' || mode === 'manual') {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
const baseDir = options.baseDir ?? process.cwd();
|
|
232
|
+
const stateDir = resolveStateDir(baseDir);
|
|
233
|
+
const force = options.force === true;
|
|
234
|
+
const getBriefEvidenceFn = options.getBriefEvidenceFn ?? getLatestWuBriefEvidence;
|
|
235
|
+
const blocker = options.blocker ?? ((message) => die(message));
|
|
236
|
+
const warn = options.warn ?? console.warn;
|
|
237
|
+
const recordBypassAudit = options.recordBypassAudit ?? recordWuBriefPrepBypassAudit;
|
|
238
|
+
const freshnessMinutes = options.freshnessMinutes === undefined
|
|
239
|
+
? resolveWuBriefFreshnessMinutes()
|
|
240
|
+
: options.freshnessMinutes;
|
|
241
|
+
const now = options.now ?? new Date();
|
|
242
|
+
let evidence;
|
|
243
|
+
try {
|
|
244
|
+
evidence = await getBriefEvidenceFn(stateDir, id);
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
if (mode === 'required' && !force) {
|
|
248
|
+
blocker(buildWuBriefEvidenceReadFailureMessage(id, stateDir, error));
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
warn(`${PREP_LOG_PREFIX} ${EMOJI.WARNING} Could not verify wu:brief evidence for ${id}: ${getErrorMessage(error)}`);
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
if (evidence &&
|
|
255
|
+
freshnessMinutes !== null &&
|
|
256
|
+
isWuBriefEvidenceStale({ timestamp: evidence.timestamp, freshnessMinutes, now })) {
|
|
257
|
+
if (mode === 'auto') {
|
|
258
|
+
warn(`${PREP_LOG_PREFIX} ${EMOJI.WARNING} wu:brief evidence stale for ${id} (policy=auto).`);
|
|
259
|
+
warn(buildStaleWuBriefEvidenceMessageForPrep({
|
|
260
|
+
id,
|
|
261
|
+
mode,
|
|
262
|
+
evidenceTimestamp: evidence.timestamp,
|
|
263
|
+
freshnessMinutes,
|
|
264
|
+
now,
|
|
265
|
+
}));
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
if (!force) {
|
|
269
|
+
blocker(buildStaleWuBriefEvidenceMessageForPrep({
|
|
270
|
+
id,
|
|
271
|
+
mode,
|
|
272
|
+
evidenceTimestamp: evidence.timestamp,
|
|
273
|
+
freshnessMinutes,
|
|
274
|
+
now,
|
|
275
|
+
}));
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
const reason = typeof options.reason === 'string' ? options.reason.trim() : '';
|
|
279
|
+
if (!reason) {
|
|
280
|
+
blocker(PREP_FORCE_REASON_REQUIRED_MESSAGE);
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
await recordBypassAudit({ wuId: id, baseDir, reason, policyMode: mode });
|
|
284
|
+
warn(`${PREP_LOG_PREFIX} ${EMOJI.WARNING} wu:brief policy override accepted for ${id} (policy=${mode}, reason="${reason}").`);
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
if (evidence) {
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
if (mode === 'auto') {
|
|
291
|
+
warn(`${PREP_LOG_PREFIX} ${EMOJI.WARNING} wu:brief evidence missing for ${id} (policy=auto).`);
|
|
292
|
+
warn(buildMissingWuBriefEvidenceMessageForPrep(id, mode));
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
if (!force) {
|
|
296
|
+
blocker(buildMissingWuBriefEvidenceMessageForPrep(id, mode));
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
const reason = typeof options.reason === 'string' ? options.reason.trim() : '';
|
|
300
|
+
if (!reason) {
|
|
301
|
+
blocker(PREP_FORCE_REASON_REQUIRED_MESSAGE);
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
await recordBypassAudit({ wuId: id, baseDir, reason, policyMode: mode });
|
|
305
|
+
warn(`${PREP_LOG_PREFIX} ${EMOJI.WARNING} wu:brief policy override accepted for ${id} (policy=${mode}, reason="${reason}").`);
|
|
306
|
+
}
|
|
137
307
|
function buildWuBriefEvidenceReadFailureMessage(id, stateDir, error) {
|
|
138
308
|
return (`Could not verify wu:brief evidence for ${id}.\n\n` +
|
|
139
309
|
`State path: ${stateDir}\n` +
|
|
@@ -147,7 +317,12 @@ export async function enforceWuBriefEvidenceForDone(id, doc, options = {}) {
|
|
|
147
317
|
return;
|
|
148
318
|
}
|
|
149
319
|
const baseDir = options.baseDir ?? process.cwd();
|
|
320
|
+
const mode = options.mode ?? resolveWuBriefPolicyMode();
|
|
150
321
|
const force = options.force === true;
|
|
322
|
+
const freshnessMinutes = options.freshnessMinutes === undefined
|
|
323
|
+
? resolveWuBriefFreshnessMinutes()
|
|
324
|
+
: options.freshnessMinutes;
|
|
325
|
+
const now = options.now ?? new Date();
|
|
151
326
|
const stateDir = resolveStateDir(baseDir);
|
|
152
327
|
const getBriefEvidenceFn = options.getBriefEvidenceFn ?? getLatestWuBriefEvidence;
|
|
153
328
|
const blocker = options.blocker ?? ((message) => die(message));
|
|
@@ -164,6 +339,36 @@ export async function enforceWuBriefEvidenceForDone(id, doc, options = {}) {
|
|
|
164
339
|
warn(`${LOG_PREFIX.DONE} ${EMOJI.WARNING} WU-2132: brief evidence verification failed for ${id}, override accepted via --force`);
|
|
165
340
|
return;
|
|
166
341
|
}
|
|
342
|
+
if (evidence &&
|
|
343
|
+
freshnessMinutes !== null &&
|
|
344
|
+
isWuBriefEvidenceStale({ timestamp: evidence.timestamp, freshnessMinutes, now })) {
|
|
345
|
+
if (mode === 'off' || mode === 'manual') {
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
if (mode === 'auto') {
|
|
349
|
+
warn(`${LOG_PREFIX.DONE} ${EMOJI.WARNING} WU-2289: stale wu:brief evidence for ${id}`);
|
|
350
|
+
warn(buildStaleWuBriefEvidenceMessageForDone({
|
|
351
|
+
id,
|
|
352
|
+
mode,
|
|
353
|
+
evidenceTimestamp: evidence.timestamp,
|
|
354
|
+
freshnessMinutes,
|
|
355
|
+
now,
|
|
356
|
+
}));
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
if (!force) {
|
|
360
|
+
blocker(buildStaleWuBriefEvidenceMessageForDone({
|
|
361
|
+
id,
|
|
362
|
+
mode,
|
|
363
|
+
evidenceTimestamp: evidence.timestamp,
|
|
364
|
+
freshnessMinutes,
|
|
365
|
+
now,
|
|
366
|
+
}));
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
369
|
+
warn(`${LOG_PREFIX.DONE} ${EMOJI.WARNING} WU-2289: stale brief evidence override accepted for ${id} via --force`);
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
167
372
|
if (evidence) {
|
|
168
373
|
return;
|
|
169
374
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wu-done-policies.js","sourceRoot":"","sources":["../src/wu-done-policies.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wu-done-policies.js","sourceRoot":"","sources":["../src/wu-done-policies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
// Copyright (c) 2026 Hellmai Ltd
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { appendFileSync, existsSync, mkdirSync, readFileSync } from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { validateBacklogSync } from '@lumenflow/core/backlog-sync-validator';
|
|
6
|
+
import { die, getErrorMessage } from '@lumenflow/core/error-handler';
|
|
7
|
+
import { resolveWuDonePreCommitGateDecision } from '@lumenflow/core/gates-agent-mode';
|
|
8
|
+
import { getGitForCwd } from '@lumenflow/core/git-adapter';
|
|
9
|
+
import { buildPreflightErrorMessage, runPreflightTasksValidation, validateAllPreCommitHooks, } from '@lumenflow/core/wu-done-validators';
|
|
10
|
+
import { EMOJI, ENV_VARS, FILE_SYSTEM, LOG_PREFIX } from '@lumenflow/core/wu-constants';
|
|
11
|
+
import { WUStateStore } from '@lumenflow/core/wu-state-store';
|
|
12
|
+
import { WU_PATHS } from '@lumenflow/core/wu-paths';
|
|
13
|
+
import { parseYAML } from '@lumenflow/core/wu-yaml';
|
|
14
|
+
import { resolveStateDir } from './state-path-resolvers.js';
|
|
15
|
+
const GIT_CONFIG_USER_EMAIL = 'user.email';
|
|
16
|
+
export function computeBranchOnlyFallback({ isBranchOnly, branchOnlyRequested, worktreeExists, derivedWorktree, }) {
|
|
17
|
+
const allowFallback = Boolean(branchOnlyRequested) && !isBranchOnly && !worktreeExists && Boolean(derivedWorktree);
|
|
18
|
+
return {
|
|
19
|
+
allowFallback,
|
|
20
|
+
effectiveBranchOnly: isBranchOnly || allowFallback,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* WU-1234: Normalize username for ownership comparison
|
|
25
|
+
* Extracts username from email address for comparison.
|
|
26
|
+
*/
|
|
27
|
+
export function normalizeUsername(value) {
|
|
28
|
+
if (!value)
|
|
29
|
+
return '';
|
|
30
|
+
const str = String(value).trim();
|
|
31
|
+
const atIndex = str.indexOf('@');
|
|
32
|
+
const username = atIndex > 0 ? str.slice(0, atIndex) : str;
|
|
33
|
+
return username.toLowerCase();
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* WU-1234: Pre-flight check for backlog state consistency.
|
|
37
|
+
*/
|
|
38
|
+
export function checkBacklogConsistencyForWU(id, backlogPath) {
|
|
39
|
+
try {
|
|
40
|
+
const result = validateBacklogSync(backlogPath);
|
|
41
|
+
if (!result.valid) {
|
|
42
|
+
for (const error of result.errors) {
|
|
43
|
+
if (error.includes('Done and In Progress') && error.includes(id)) {
|
|
44
|
+
return {
|
|
45
|
+
valid: false,
|
|
46
|
+
error: `❌ BACKLOG STATE INCONSISTENCY: ${id} found in both Done and In Progress sections.\n\n` +
|
|
47
|
+
`This is an invalid state that must be fixed manually before wu:done can proceed.\n\n` +
|
|
48
|
+
`Fix options:\n` +
|
|
49
|
+
` 1. If ${id} is truly done: Remove from In Progress in backlog.md\n` +
|
|
50
|
+
` 2. If ${id} needs more work: Remove from Done in backlog.md, update WU YAML status\n\n` +
|
|
51
|
+
`After fixing backlog.md, retry: pnpm wu:done --id ${id}`,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return { valid: true, error: null };
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
console.warn(`${LOG_PREFIX.DONE} Warning: Could not validate backlog consistency: ${getErrorMessage(e)}`);
|
|
60
|
+
return { valid: true, error: null };
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export async function appendClaimSessionOverrideAuditEvent({ wuId, claimedSessionId, activeSessionId, reason, worktreePath, }) {
|
|
64
|
+
const stateDir = resolveStateDir(worktreePath);
|
|
65
|
+
const stateStore = new WUStateStore(stateDir);
|
|
66
|
+
await stateStore.load();
|
|
67
|
+
await stateStore.checkpoint(wuId, `[wu:done] force ownership override claimed_session=${claimedSessionId} active_session=${activeSessionId || 'none'}`, {
|
|
68
|
+
progress: 'wu:done ownership override',
|
|
69
|
+
nextSteps: reason,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
export async function checkOwnership(id, doc, worktreePath, overrideOwner = false, overrideReason = null) {
|
|
73
|
+
if (!worktreePath || !existsSync(worktreePath)) {
|
|
74
|
+
return {
|
|
75
|
+
valid: false,
|
|
76
|
+
error: `Missing worktree for ${id}.\n\n` +
|
|
77
|
+
`Expected worktree at: ${worktreePath || 'unknown'}\n\n` +
|
|
78
|
+
`Worktrees are required for proper WU completion in Worktree mode.\n` +
|
|
79
|
+
`If the worktree was removed, recreate it and retry, or use --skip-gates with justification.`,
|
|
80
|
+
auditEntry: null,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
let assignedTo = doc.assigned_to || null;
|
|
84
|
+
if (!assignedTo && worktreePath) {
|
|
85
|
+
const wtWUPath = path.join(worktreePath, WU_PATHS.WU(id));
|
|
86
|
+
if (existsSync(wtWUPath)) {
|
|
87
|
+
try {
|
|
88
|
+
const text = readFileSync(wtWUPath, { encoding: FILE_SYSTEM.UTF8 });
|
|
89
|
+
const wtDoc = parseYAML(text);
|
|
90
|
+
assignedTo = wtDoc?.assigned_to || null;
|
|
91
|
+
if (assignedTo) {
|
|
92
|
+
console.log(`${LOG_PREFIX.DONE} Note: Read assigned_to from worktree YAML (not found in main)`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
console.warn(`${LOG_PREFIX.DONE} Warning: Failed to read assigned_to from worktree: ${getErrorMessage(err)}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (!assignedTo) {
|
|
101
|
+
return {
|
|
102
|
+
valid: false,
|
|
103
|
+
error: `WU ${id} has no assigned_to field.\n\n` +
|
|
104
|
+
`This WU was claimed before ownership tracking was implemented.\n` +
|
|
105
|
+
`To complete this WU:\n` +
|
|
106
|
+
` 1. Add assigned_to: <your-email> to ${id}.yaml\n` +
|
|
107
|
+
` 2. Commit the change\n` +
|
|
108
|
+
` 3. Re-run: pnpm wu:done --id ${id}`,
|
|
109
|
+
auditEntry: null,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
let currentUser;
|
|
113
|
+
try {
|
|
114
|
+
currentUser = (await getGitForCwd().getConfigValue(GIT_CONFIG_USER_EMAIL)).trim();
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
currentUser = process.env[ENV_VARS.GIT_USER] || process.env[ENV_VARS.USER] || null;
|
|
118
|
+
}
|
|
119
|
+
if (!currentUser) {
|
|
120
|
+
return {
|
|
121
|
+
valid: false,
|
|
122
|
+
error: `Cannot determine current user identity.\n\n` +
|
|
123
|
+
`Set git user.email or GIT_USER environment variable.`,
|
|
124
|
+
auditEntry: null,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
const normalizedAssigned = normalizeUsername(assignedTo);
|
|
128
|
+
const normalizedCurrent = normalizeUsername(currentUser);
|
|
129
|
+
const isOwner = normalizedAssigned === normalizedCurrent;
|
|
130
|
+
if (isOwner) {
|
|
131
|
+
if (assignedTo !== currentUser) {
|
|
132
|
+
console.log(`${LOG_PREFIX.DONE} ${EMOJI.INFO} Ownership match via normalization: "${assignedTo}" == "${currentUser}"`);
|
|
133
|
+
}
|
|
134
|
+
return { valid: true, error: null, auditEntry: null };
|
|
135
|
+
}
|
|
136
|
+
if (overrideOwner) {
|
|
137
|
+
if (!overrideReason) {
|
|
138
|
+
return {
|
|
139
|
+
valid: false,
|
|
140
|
+
error: `--override-owner requires --reason "<why you're completing someone else's WU>"`,
|
|
141
|
+
auditEntry: null,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
const auditEntry = {
|
|
145
|
+
timestamp: new Date().toISOString(),
|
|
146
|
+
wu_id: id,
|
|
147
|
+
assigned_to: assignedTo,
|
|
148
|
+
completed_by: currentUser,
|
|
149
|
+
reason: overrideReason,
|
|
150
|
+
git_commit: (await getGitForCwd().getCommitHash()).trim(),
|
|
151
|
+
};
|
|
152
|
+
console.log(`\n⚠️ --override-owner: Completing WU assigned to someone else`);
|
|
153
|
+
console.log(` Assigned to: ${assignedTo}`);
|
|
154
|
+
console.log(` Completed by: ${currentUser}`);
|
|
155
|
+
console.log(` Reason: ${overrideReason}\n`);
|
|
156
|
+
return { valid: true, error: null, auditEntry };
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
valid: false,
|
|
160
|
+
error: `\n❌ OWNERSHIP VIOLATION: ${id} is assigned to someone else\n\n` +
|
|
161
|
+
` Assigned to: ${assignedTo}\n` +
|
|
162
|
+
` Current user: ${currentUser}\n\n` +
|
|
163
|
+
` You cannot complete WUs you do not own.\n\n` +
|
|
164
|
+
` 📋 Options:\n` +
|
|
165
|
+
` 1. Contact ${assignedTo} to complete the WU\n` +
|
|
166
|
+
` 2. Reassign the WU to yourself in ${id}.yaml (requires approval)\n` +
|
|
167
|
+
` 3. Add co_assigned field for pairing (requires approval)\n\n` +
|
|
168
|
+
` ⚠️ To override (use with extreme caution):\n` +
|
|
169
|
+
` pnpm wu:done --id ${id} --override-owner --reason "<why>"\n\n` +
|
|
170
|
+
` AGENTS: NEVER use --override-owner without explicit instruction.\n` +
|
|
171
|
+
` Language protocol: "pick up WU-${id.replace('WU-', '')}" = READ ONLY.\n`,
|
|
172
|
+
auditEntry: null,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
export function auditOwnershipOverride(auditEntry) {
|
|
176
|
+
const auditPath = path.join('.lumenflow', 'ownership-override-audit.log');
|
|
177
|
+
const auditDir = path.dirname(auditPath);
|
|
178
|
+
if (!existsSync(auditDir))
|
|
179
|
+
mkdirSync(auditDir, { recursive: true });
|
|
180
|
+
const line = JSON.stringify(auditEntry);
|
|
181
|
+
appendFileSync(auditPath, `${line}\n`, { encoding: FILE_SYSTEM.UTF8 });
|
|
182
|
+
console.log(`${LOG_PREFIX.DONE} ${EMOJI.MEMO} Ownership override logged to ${auditPath}`);
|
|
183
|
+
}
|
|
184
|
+
export async function runWuDoneStagedValidation({ id, worktreePath, gateResult, skipGates, runGatesFn, }) {
|
|
185
|
+
const preCommitGateDecision = resolveWuDonePreCommitGateDecision({
|
|
186
|
+
skipGates,
|
|
187
|
+
fullGatesRanInCurrentRun: gateResult.fullGatesRanInCurrentRun,
|
|
188
|
+
skippedByCheckpoint: gateResult.skippedByCheckpoint,
|
|
189
|
+
checkpointId: gateResult.checkpointId,
|
|
190
|
+
});
|
|
191
|
+
console.log(`${LOG_PREFIX.DONE} ${preCommitGateDecision.message}`);
|
|
192
|
+
if (preCommitGateDecision.runPreCommitFullSuite) {
|
|
193
|
+
const hookResult = await validateAllPreCommitHooks(id, worktreePath, {
|
|
194
|
+
runGates: ({ cwd }) => runGatesFn({ cwd }),
|
|
195
|
+
});
|
|
196
|
+
if (!hookResult.valid) {
|
|
197
|
+
die('Pre-flight validation failed. Fix hook issues and try again.');
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
const tasksValidationResult = runPreflightTasksValidation(id);
|
|
201
|
+
if (!tasksValidationResult.valid) {
|
|
202
|
+
const errorMessage = buildPreflightErrorMessage(id, tasksValidationResult.errors);
|
|
203
|
+
console.error(errorMessage);
|
|
204
|
+
die('Preflight tasks:validate failed. See errors above for fix options.');
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=wu-done-preflight.js.map
|