@lumenflow/cli 2.11.0 → 2.12.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 +6 -17
- package/dist/__tests__/commands.test.js +198 -2
- package/dist/__tests__/init-docs-structure.test.js +33 -0
- package/dist/__tests__/initiative-add-wu.test.js +71 -1
- package/dist/__tests__/no-beacon-references-docs.test.js +30 -0
- package/dist/__tests__/no-beacon-references.test.js +39 -0
- package/dist/__tests__/wu-create.test.js +50 -1
- package/dist/__tests__/wu-done-docs-only-policy.test.js +20 -0
- package/dist/__tests__/wu-prep-default-exec.test.js +35 -0
- package/dist/__tests__/wu-prep.test.js +32 -0
- package/dist/__tests__/wu-validate.test.js +36 -0
- package/dist/agent-issues-query.js +1 -0
- package/dist/agent-issues-query.js.map +1 -0
- package/dist/agent-log-issue.js +1 -0
- package/dist/agent-log-issue.js.map +1 -0
- package/dist/agent-session-end.js +1 -0
- package/dist/agent-session-end.js.map +1 -0
- package/dist/agent-session.js +1 -0
- package/dist/agent-session.js.map +1 -0
- package/dist/backlog-prune.js +2 -0
- package/dist/backlog-prune.js.map +1 -0
- package/dist/cli-entry-point.js +1 -0
- package/dist/cli-entry-point.js.map +1 -0
- package/dist/commands/integrate.js +1 -0
- package/dist/commands/integrate.js.map +1 -0
- package/dist/commands.js +56 -77
- package/dist/commands.js.map +1 -0
- package/dist/deps-add.js +1 -0
- package/dist/deps-add.js.map +1 -0
- package/dist/deps-remove.js +1 -0
- package/dist/deps-remove.js.map +1 -0
- package/dist/docs-sync.js +1 -0
- package/dist/docs-sync.js.map +1 -0
- package/dist/doctor.js +1 -0
- package/dist/doctor.js.map +1 -0
- package/dist/file-delete.js +1 -0
- package/dist/file-delete.js.map +1 -0
- package/dist/file-edit.js +1 -0
- package/dist/file-edit.js.map +1 -0
- package/dist/file-read.js +1 -0
- package/dist/file-read.js.map +1 -0
- package/dist/file-write.js +1 -0
- package/dist/file-write.js.map +1 -0
- package/dist/flow-bottlenecks.js +1 -0
- package/dist/flow-bottlenecks.js.map +1 -0
- package/dist/flow-report.js +1 -0
- package/dist/flow-report.js.map +1 -0
- package/dist/gates.js +26 -12
- package/dist/gates.js.map +1 -0
- package/dist/git-branch.js +1 -0
- package/dist/git-branch.js.map +1 -0
- package/dist/git-diff.js +1 -0
- package/dist/git-diff.js.map +1 -0
- package/dist/git-log.js +1 -0
- package/dist/git-log.js.map +1 -0
- package/dist/git-status.js +1 -0
- package/dist/git-status.js.map +1 -0
- package/dist/guard-locked.js +1 -0
- package/dist/guard-locked.js.map +1 -0
- package/dist/guard-main-branch.js +1 -0
- package/dist/guard-main-branch.js.map +1 -0
- package/dist/guard-worktree-commit.js +1 -0
- package/dist/guard-worktree-commit.js.map +1 -0
- package/dist/hooks/auto-checkpoint-utils.js +52 -0
- package/dist/hooks/auto-checkpoint-utils.js.map +1 -0
- package/dist/hooks/enforcement-checks.js +1 -0
- package/dist/hooks/enforcement-checks.js.map +1 -0
- package/dist/hooks/enforcement-generator.js +185 -1
- package/dist/hooks/enforcement-generator.js.map +1 -0
- package/dist/hooks/enforcement-sync.js +91 -1
- package/dist/hooks/enforcement-sync.js.map +1 -0
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/dist/init.js +32 -36
- package/dist/init.js.map +1 -0
- package/dist/initiative-add-wu.js +180 -59
- package/dist/initiative-add-wu.js.map +1 -0
- package/dist/initiative-bulk-assign-wus.js +3 -1
- package/dist/initiative-bulk-assign-wus.js.map +1 -0
- package/dist/initiative-create.js +1 -0
- package/dist/initiative-create.js.map +1 -0
- package/dist/initiative-edit.js +67 -32
- package/dist/initiative-edit.js.map +1 -0
- package/dist/initiative-list.js +1 -0
- package/dist/initiative-list.js.map +1 -0
- package/dist/initiative-plan.js +1 -0
- package/dist/initiative-plan.js.map +1 -0
- package/dist/initiative-remove-wu.js +1 -0
- package/dist/initiative-remove-wu.js.map +1 -0
- package/dist/initiative-status.js +1 -0
- package/dist/initiative-status.js.map +1 -0
- package/dist/lane-health.js +1 -0
- package/dist/lane-health.js.map +1 -0
- package/dist/lane-suggest.js +1 -0
- package/dist/lane-suggest.js.map +1 -0
- package/dist/lumenflow-upgrade.js +1 -0
- package/dist/lumenflow-upgrade.js.map +1 -0
- package/dist/mem-checkpoint.js +1 -0
- package/dist/mem-checkpoint.js.map +1 -0
- package/dist/mem-cleanup.js +114 -1
- package/dist/mem-cleanup.js.map +1 -0
- package/dist/mem-context.js +1 -0
- package/dist/mem-context.js.map +1 -0
- package/dist/mem-create.js +1 -0
- package/dist/mem-create.js.map +1 -0
- package/dist/mem-delete.js +1 -0
- package/dist/mem-delete.js.map +1 -0
- package/dist/mem-export.js +1 -0
- package/dist/mem-export.js.map +1 -0
- package/dist/mem-inbox.js +1 -0
- package/dist/mem-inbox.js.map +1 -0
- package/dist/mem-index.js +1 -0
- package/dist/mem-index.js.map +1 -0
- package/dist/mem-init.js +1 -0
- package/dist/mem-init.js.map +1 -0
- package/dist/mem-profile.js +1 -0
- package/dist/mem-profile.js.map +1 -0
- package/dist/mem-promote.js +1 -0
- package/dist/mem-promote.js.map +1 -0
- package/dist/mem-ready.js +1 -0
- package/dist/mem-ready.js.map +1 -0
- package/dist/mem-recover.js +1 -0
- package/dist/mem-recover.js.map +1 -0
- package/dist/mem-signal.js +12 -1
- package/dist/mem-signal.js.map +1 -0
- package/dist/mem-start.js +1 -0
- package/dist/mem-start.js.map +1 -0
- package/dist/mem-summarize.js +1 -0
- package/dist/mem-summarize.js.map +1 -0
- package/dist/mem-triage.js +2 -1
- package/dist/mem-triage.js.map +1 -0
- package/dist/merge-block.js +1 -0
- package/dist/merge-block.js.map +1 -0
- package/dist/metrics-cli.js +1 -0
- package/dist/metrics-cli.js.map +1 -0
- package/dist/metrics-snapshot.js +1 -0
- package/dist/metrics-snapshot.js.map +1 -0
- package/dist/onboarding-smoke-test.js +1 -0
- package/dist/onboarding-smoke-test.js.map +1 -0
- package/dist/orchestrate-init-status.js +1 -0
- package/dist/orchestrate-init-status.js.map +1 -0
- package/dist/orchestrate-initiative.js +1 -0
- package/dist/orchestrate-initiative.js.map +1 -0
- package/dist/orchestrate-monitor.js +1 -0
- package/dist/orchestrate-monitor.js.map +1 -0
- package/dist/plan-create.js +1 -0
- package/dist/plan-create.js.map +1 -0
- package/dist/plan-edit.js +1 -0
- package/dist/plan-edit.js.map +1 -0
- package/dist/plan-link.js +1 -0
- package/dist/plan-link.js.map +1 -0
- package/dist/plan-promote.js +1 -0
- package/dist/plan-promote.js.map +1 -0
- package/dist/public-manifest.js +773 -0
- package/dist/public-manifest.js.map +1 -0
- package/dist/release.js +3 -2
- package/dist/release.js.map +1 -0
- package/dist/rotate-progress.js +2 -1
- package/dist/rotate-progress.js.map +1 -0
- package/dist/session-coordinator.js +1 -0
- package/dist/session-coordinator.js.map +1 -0
- package/dist/shared-validators.js +78 -0
- package/dist/shared-validators.js.map +1 -0
- package/dist/signal-cleanup.js +1 -0
- package/dist/signal-cleanup.js.map +1 -0
- package/dist/spawn-list.js +1 -0
- package/dist/spawn-list.js.map +1 -0
- package/dist/state-bootstrap.js +1 -0
- package/dist/state-bootstrap.js.map +1 -0
- package/dist/state-cleanup.js +1 -0
- package/dist/state-cleanup.js.map +1 -0
- package/dist/state-doctor-fix.js +1 -0
- package/dist/state-doctor-fix.js.map +1 -0
- package/dist/state-doctor.js +1 -0
- package/dist/state-doctor.js.map +1 -0
- package/dist/sync-templates.js +1 -0
- package/dist/sync-templates.js.map +1 -0
- package/dist/trace-gen.js +1 -0
- package/dist/trace-gen.js.map +1 -0
- package/dist/validate-agent-skills.js +1 -0
- package/dist/validate-agent-skills.js.map +1 -0
- package/dist/validate-agent-sync.js +1 -0
- package/dist/validate-agent-sync.js.map +1 -0
- package/dist/validate-backlog-sync.js +1 -0
- package/dist/validate-backlog-sync.js.map +1 -0
- package/dist/validate-skills-spec.js +1 -0
- package/dist/validate-skills-spec.js.map +1 -0
- package/dist/validate.js +1 -0
- package/dist/validate.js.map +1 -0
- package/dist/wu-block.js +1 -0
- package/dist/wu-block.js.map +1 -0
- package/dist/wu-claim-repair-guidance.js +10 -0
- package/dist/wu-claim-repair-guidance.js.map +1 -0
- package/dist/wu-claim.js +40 -0
- package/dist/wu-claim.js.map +1 -0
- package/dist/wu-cleanup.js +2 -1
- package/dist/wu-cleanup.js.map +1 -0
- package/dist/wu-create.js +58 -14
- package/dist/wu-create.js.map +1 -0
- package/dist/wu-delete.js +3 -2
- package/dist/wu-delete.js.map +1 -0
- package/dist/wu-deps.js +2 -1
- package/dist/wu-deps.js.map +1 -0
- package/dist/wu-done-auto-cleanup.js +1 -0
- package/dist/wu-done-auto-cleanup.js.map +1 -0
- package/dist/wu-done-check.js +1 -0
- package/dist/wu-done-check.js.map +1 -0
- package/dist/wu-done-decay.js +88 -0
- package/dist/wu-done-decay.js.map +1 -0
- package/dist/wu-done.js +75 -18
- package/dist/wu-done.js.map +1 -0
- package/dist/wu-edit.js +2 -1
- package/dist/wu-edit.js.map +1 -0
- package/dist/wu-infer-lane.js +1 -0
- package/dist/wu-infer-lane.js.map +1 -0
- package/dist/wu-preflight.js +1 -0
- package/dist/wu-preflight.js.map +1 -0
- package/dist/wu-prep.js +105 -9
- package/dist/wu-prep.js.map +1 -0
- package/dist/wu-proto.js +12 -9
- package/dist/wu-proto.js.map +1 -0
- package/dist/wu-prune.js +1 -0
- package/dist/wu-prune.js.map +1 -0
- package/dist/wu-recover.js +1 -0
- package/dist/wu-recover.js.map +1 -0
- package/dist/wu-release.js +2 -1
- package/dist/wu-release.js.map +1 -0
- package/dist/wu-repair.js +1 -0
- package/dist/wu-repair.js.map +1 -0
- package/dist/wu-spawn-completion.js +1 -0
- package/dist/wu-spawn-completion.js.map +1 -0
- package/dist/wu-spawn.js +1 -0
- package/dist/wu-spawn.js.map +1 -0
- package/dist/wu-status.js +1 -0
- package/dist/wu-status.js.map +1 -0
- package/dist/wu-unblock.js +1 -0
- package/dist/wu-unblock.js.map +1 -0
- package/dist/wu-unlock-lane.js +1 -0
- package/dist/wu-unlock-lane.js.map +1 -0
- package/dist/wu-validate.js +58 -9
- package/dist/wu-validate.js.map +1 -0
- package/package.json +11 -21
- package/templates/core/.husky/pre-commit.template +5 -5
- package/templates/core/LUMENFLOW.md.template +2 -2
- package/templates/core/ai/onboarding/agent-safety-card.md.template +6 -6
- package/templates/core/ai/onboarding/lumenflow-force-usage.md.template +4 -4
package/dist/wu-validate.js
CHANGED
|
@@ -25,7 +25,31 @@ import { validateWU, validateWUCompleteness } from '@lumenflow/core/dist/wu-sche
|
|
|
25
25
|
import { FILE_SYSTEM, EMOJI, PATTERNS } from '@lumenflow/core/dist/wu-constants.js';
|
|
26
26
|
// WU-2253: Import WU spec linter for acceptance/code_paths validation
|
|
27
27
|
import { lintWUSpec } from '@lumenflow/core/dist/wu-lint.js';
|
|
28
|
+
import { validateWuValidateCliArgs } from './shared-validators.js';
|
|
28
29
|
const LOG_PREFIX = '[wu:validate]';
|
|
30
|
+
export function validateWuValidateOptions(id, noStrict) {
|
|
31
|
+
return validateWuValidateCliArgs({ id, noStrict });
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Summarize validation results for JSON output.
|
|
35
|
+
*/
|
|
36
|
+
export function summarizeValidationResults(results) {
|
|
37
|
+
const totalValid = results.filter((r) => r.valid).length;
|
|
38
|
+
const totalInvalid = results.filter((r) => !r.valid).length;
|
|
39
|
+
const totalWarnings = results.reduce((sum, r) => sum + (r.warnings?.length ?? 0), 0);
|
|
40
|
+
const invalid = results.filter((r) => !r.valid).map((r) => ({ wuId: r.wuId, errors: r.errors }));
|
|
41
|
+
const warnings = results
|
|
42
|
+
.filter((r) => r.warnings && r.warnings.length > 0)
|
|
43
|
+
.map((r) => ({ wuId: r.wuId, warnings: r.warnings }));
|
|
44
|
+
return {
|
|
45
|
+
valid: totalInvalid === 0,
|
|
46
|
+
totalValid,
|
|
47
|
+
totalInvalid,
|
|
48
|
+
totalWarnings,
|
|
49
|
+
invalid,
|
|
50
|
+
warnings,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
29
53
|
/**
|
|
30
54
|
* Validate a single WU file
|
|
31
55
|
*
|
|
@@ -82,7 +106,7 @@ function validateSingleWU(wuPath, { strict = true } = {}) {
|
|
|
82
106
|
*
|
|
83
107
|
* @param {object} options - Validation options
|
|
84
108
|
* @param {boolean} options.strict - Treat warnings as errors (default: true)
|
|
85
|
-
* @returns {{totalValid: number, totalInvalid: number, totalWarnings: number, results:
|
|
109
|
+
* @returns {{totalValid: number, totalInvalid: number, totalWarnings: number, results: ValidationResult[]}}
|
|
86
110
|
*/
|
|
87
111
|
function validateAllWUs({ strict = true } = {}) {
|
|
88
112
|
const wuDir = WU_PATHS.WU_DIR();
|
|
@@ -126,11 +150,17 @@ async function main() {
|
|
|
126
150
|
},
|
|
127
151
|
// WU-1329: Change from --strict to --no-strict (strict is now default)
|
|
128
152
|
WU_OPTIONS.noStrict,
|
|
153
|
+
{
|
|
154
|
+
name: 'json',
|
|
155
|
+
flags: '--json',
|
|
156
|
+
type: 'boolean',
|
|
157
|
+
description: 'Output JSON summary only',
|
|
158
|
+
},
|
|
129
159
|
],
|
|
130
160
|
required: [],
|
|
131
161
|
allowPositionalId: true,
|
|
132
162
|
});
|
|
133
|
-
const { id, all, noStrict } = args;
|
|
163
|
+
const { id, all, noStrict, json } = args;
|
|
134
164
|
// WU-1329: Strict mode is the default, --no-strict opts out
|
|
135
165
|
const strict = !noStrict;
|
|
136
166
|
// WU-1329: Log when strict validation is bypassed
|
|
@@ -145,8 +175,15 @@ async function main() {
|
|
|
145
175
|
}
|
|
146
176
|
if (all) {
|
|
147
177
|
// Validate all WUs
|
|
148
|
-
|
|
149
|
-
|
|
178
|
+
if (!json) {
|
|
179
|
+
console.log(`${LOG_PREFIX} Validating all WU files...`);
|
|
180
|
+
}
|
|
181
|
+
const { results } = validateAllWUs({ strict });
|
|
182
|
+
const summary = summarizeValidationResults(results);
|
|
183
|
+
if (json) {
|
|
184
|
+
console.log(JSON.stringify(summary));
|
|
185
|
+
process.exit(summary.valid ? 0 : 1);
|
|
186
|
+
}
|
|
150
187
|
// Print results
|
|
151
188
|
for (const result of results) {
|
|
152
189
|
if (result.errors.length > 0) {
|
|
@@ -160,14 +197,18 @@ async function main() {
|
|
|
160
197
|
}
|
|
161
198
|
console.log('');
|
|
162
199
|
console.log(`${LOG_PREFIX} Summary:`);
|
|
163
|
-
console.log(` ${EMOJI.SUCCESS} Valid: ${totalValid}`);
|
|
164
|
-
console.log(` ${EMOJI.FAILURE} Invalid: ${totalInvalid}`);
|
|
165
|
-
console.log(` ${EMOJI.WARNING} Warnings: ${totalWarnings}`);
|
|
166
|
-
if (
|
|
200
|
+
console.log(` ${EMOJI.SUCCESS} Valid: ${summary.totalValid}`);
|
|
201
|
+
console.log(` ${EMOJI.FAILURE} Invalid: ${summary.totalInvalid}`);
|
|
202
|
+
console.log(` ${EMOJI.WARNING} Warnings: ${summary.totalWarnings}`);
|
|
203
|
+
if (!summary.valid) {
|
|
167
204
|
process.exit(1);
|
|
168
205
|
}
|
|
169
206
|
}
|
|
170
207
|
else {
|
|
208
|
+
const validation = validateWuValidateOptions(id, noStrict);
|
|
209
|
+
if (!validation.valid) {
|
|
210
|
+
die(`Invalid wu:validate arguments:\n - ${validation.errors.join('\n - ')}`);
|
|
211
|
+
}
|
|
171
212
|
// Validate single WU
|
|
172
213
|
const wuId = id.toUpperCase();
|
|
173
214
|
if (!PATTERNS.WU_ID.test(wuId)) {
|
|
@@ -177,8 +218,15 @@ async function main() {
|
|
|
177
218
|
if (!existsSync(wuPath)) {
|
|
178
219
|
die(`WU file not found: ${wuPath}`);
|
|
179
220
|
}
|
|
180
|
-
|
|
221
|
+
if (!json) {
|
|
222
|
+
console.log(`${LOG_PREFIX} Validating ${wuId}...`);
|
|
223
|
+
}
|
|
181
224
|
const result = validateSingleWU(wuPath, { strict });
|
|
225
|
+
const summary = summarizeValidationResults([{ wuId, ...result }]);
|
|
226
|
+
if (json) {
|
|
227
|
+
console.log(JSON.stringify(summary));
|
|
228
|
+
process.exit(summary.valid ? 0 : 1);
|
|
229
|
+
}
|
|
182
230
|
if (result.errors.length > 0) {
|
|
183
231
|
console.log(`${EMOJI.FAILURE} Validation failed:`);
|
|
184
232
|
result.errors.forEach((e) => console.log(` ${e}`));
|
|
@@ -200,3 +248,4 @@ import { runCLI } from './cli-entry-point.js';
|
|
|
200
248
|
if (import.meta.main) {
|
|
201
249
|
runCLI(main);
|
|
202
250
|
}
|
|
251
|
+
//# sourceMappingURL=wu-validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wu-validate.js","sourceRoot":"","sources":["../src/wu-validate.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lumenflow/cli",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.12.0",
|
|
4
4
|
"description": "Command-line interface for LumenFlow workflow framework",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"lumenflow",
|
|
@@ -109,25 +109,13 @@
|
|
|
109
109
|
"file-write": "./dist/file-write.js",
|
|
110
110
|
"file-edit": "./dist/file-edit.js",
|
|
111
111
|
"file-delete": "./dist/file-delete.js",
|
|
112
|
-
"guard-worktree-commit": "./dist/guard-worktree-commit.js",
|
|
113
|
-
"guard-locked": "./dist/guard-locked.js",
|
|
114
112
|
"validate": "./dist/validate.js",
|
|
115
113
|
"lumenflow-validate": "./dist/validate.js",
|
|
116
|
-
"validate-agent-skills": "./dist/validate-agent-skills.js",
|
|
117
|
-
"validate-agent-sync": "./dist/validate-agent-sync.js",
|
|
118
|
-
"validate-backlog-sync": "./dist/validate-backlog-sync.js",
|
|
119
|
-
"validate-skills-spec": "./dist/validate-skills-spec.js",
|
|
120
|
-
"deps-add": "./dist/deps-add.js",
|
|
121
|
-
"deps-remove": "./dist/deps-remove.js",
|
|
122
|
-
"session-coordinator": "./dist/session-coordinator.js",
|
|
123
|
-
"rotate-progress": "./dist/rotate-progress.js",
|
|
124
114
|
"lumenflow-upgrade": "./dist/lumenflow-upgrade.js",
|
|
125
|
-
"trace-gen": "./dist/trace-gen.js",
|
|
126
115
|
"git-status": "./dist/git-status.js",
|
|
127
116
|
"git-diff": "./dist/git-diff.js",
|
|
128
117
|
"git-log": "./dist/git-log.js",
|
|
129
118
|
"git-branch": "./dist/git-branch.js",
|
|
130
|
-
"guard-main-branch": "./dist/guard-main-branch.js",
|
|
131
119
|
"state-bootstrap": "./dist/state-bootstrap.js",
|
|
132
120
|
"lane-health": "./dist/lane-health.js",
|
|
133
121
|
"lane-suggest": "./dist/lane-suggest.js",
|
|
@@ -146,16 +134,16 @@
|
|
|
146
134
|
"cli-table3": "^0.6.5",
|
|
147
135
|
"commander": "^14.0.2",
|
|
148
136
|
"fast-glob": "^3.3.3",
|
|
149
|
-
"minimatch": "^10.1.
|
|
137
|
+
"minimatch": "^10.1.2",
|
|
150
138
|
"ms": "^2.1.3",
|
|
151
139
|
"pretty-ms": "^9.2.0",
|
|
152
140
|
"simple-git": "^3.30.0",
|
|
153
141
|
"yaml": "^2.8.2",
|
|
154
|
-
"@lumenflow/core": "2.
|
|
155
|
-
"@lumenflow/metrics": "2.
|
|
156
|
-
"@lumenflow/
|
|
157
|
-
"@lumenflow/
|
|
158
|
-
"@lumenflow/
|
|
142
|
+
"@lumenflow/core": "2.12.0",
|
|
143
|
+
"@lumenflow/metrics": "2.12.0",
|
|
144
|
+
"@lumenflow/agent": "2.12.0",
|
|
145
|
+
"@lumenflow/memory": "2.12.0",
|
|
146
|
+
"@lumenflow/initiatives": "2.12.0"
|
|
159
147
|
},
|
|
160
148
|
"devDependencies": {
|
|
161
149
|
"@vitest/coverage-v8": "^4.0.17",
|
|
@@ -170,9 +158,11 @@
|
|
|
170
158
|
},
|
|
171
159
|
"scripts": {
|
|
172
160
|
"build": "tsc",
|
|
173
|
-
"build:dist": "tsc -p tsconfig.build.json",
|
|
161
|
+
"build:dist": "rm -rf dist && tsc -p tsconfig.build.json",
|
|
174
162
|
"pack:dist": "pnpm pack",
|
|
175
163
|
"clean": "rm -rf dist *.tgz",
|
|
176
|
-
"test": "vitest run"
|
|
164
|
+
"test": "vitest run",
|
|
165
|
+
"lint": "eslint src --quiet --rule no-console:off --rule @typescript-eslint/no-unused-vars:off --rule sonarjs/concise-regex:off",
|
|
166
|
+
"typecheck": "tsc --noEmit"
|
|
177
167
|
}
|
|
178
168
|
}
|
|
@@ -30,8 +30,8 @@ case "$BRANCH" in tmp/*) exit 0 ;; esac
|
|
|
30
30
|
if [ "$LUMENFLOW_FORCE" = "1" ]; then
|
|
31
31
|
if [ -z "$LUMENFLOW_FORCE_REASON" ]; then
|
|
32
32
|
echo "" >&2
|
|
33
|
-
echo "[pre-commit] Warning:
|
|
34
|
-
echo "
|
|
33
|
+
echo "[pre-commit] Warning: Hook bypass used without a reason." >&2
|
|
34
|
+
echo "Please provide a reason for the audit trail." >&2
|
|
35
35
|
echo "" >&2
|
|
36
36
|
fi
|
|
37
37
|
# Log bypass to .beacon/ for audit trail
|
|
@@ -79,10 +79,10 @@ case "$BRANCH" in
|
|
|
79
79
|
echo " - Run: pnpm wu:help" >&2
|
|
80
80
|
echo "" >&2
|
|
81
81
|
echo "------------------------------------------------------------------" >&2
|
|
82
|
-
echo "
|
|
82
|
+
echo "STUCK?" >&2
|
|
83
83
|
echo "------------------------------------------------------------------" >&2
|
|
84
|
-
echo "
|
|
85
|
-
echo "
|
|
84
|
+
echo "If you need to fix workflow state:" >&2
|
|
85
|
+
echo " pnpm wu:recover --id WU-XXXX" >&2
|
|
86
86
|
echo "------------------------------------------------------------------" >&2
|
|
87
87
|
echo "" >&2
|
|
88
88
|
exit 1
|
|
@@ -132,8 +132,8 @@ LumenFlow enforces safety at the repository level so protections apply to all ag
|
|
|
132
132
|
- **Git wrapper**: `scripts/safe-git` blocks destructive operations (e.g. `worktree remove`, `reset --hard`, `clean -fd`, `push --force`).
|
|
133
133
|
- **Husky hooks**: staged secret scanning, absolute-path scanning, lockfile sync, and worktree discipline.
|
|
134
134
|
- **Audit logs**:
|
|
135
|
-
- `.
|
|
136
|
-
- `.
|
|
135
|
+
- `.lumenflow/safety-blocks.log`
|
|
136
|
+
- `.lumenflow/force-bypasses.log`
|
|
137
137
|
|
|
138
138
|
---
|
|
139
139
|
|
|
@@ -68,8 +68,8 @@ These run for everyone:
|
|
|
68
68
|
|
|
69
69
|
Audit logs:
|
|
70
70
|
|
|
71
|
-
- `.
|
|
72
|
-
- `.
|
|
71
|
+
- `.lumenflow/safety-blocks.log` (blocked safety actions)
|
|
72
|
+
- `.lumenflow/force-bypasses.log` (LUMENFLOW_FORCE bypasses)
|
|
73
73
|
|
|
74
74
|
---
|
|
75
75
|
|
|
@@ -162,7 +162,7 @@ Agents MUST stop and ask before using LUMENFLOW_FORCE. Present the situation to
|
|
|
162
162
|
|
|
163
163
|
```
|
|
164
164
|
I need to bypass the safety check for [reason].
|
|
165
|
-
This will be logged to .
|
|
165
|
+
This will be logged to .lumenflow/force-bypasses.log.
|
|
166
166
|
Do you approve? (yes/no)
|
|
167
167
|
```
|
|
168
168
|
|
|
@@ -191,7 +191,7 @@ notes: |
|
|
|
191
191
|
|
|
192
192
|
### Audit Log Format
|
|
193
193
|
|
|
194
|
-
All bypasses are logged to `.
|
|
194
|
+
All bypasses are logged to `.lumenflow/force-bypasses.log`:
|
|
195
195
|
|
|
196
196
|
```
|
|
197
197
|
ISO_TIMESTAMP|BYPASSED|COMMAND_OR_HOOK|USER|BRANCH|REASON|CWD
|
|
@@ -200,7 +200,7 @@ ISO_TIMESTAMP|BYPASSED|COMMAND_OR_HOOK|USER|BRANCH|REASON|CWD
|
|
|
200
200
|
Example:
|
|
201
201
|
|
|
202
202
|
```
|
|
203
|
-
{{DATE}}T12:34:56Z|BYPASSED|git reset --hard HEAD|tom|lane/core/wu-1172|user-approved: recovering state
|
|
203
|
+
{{DATE}}T12:34:56Z|BYPASSED|git reset --hard HEAD|tom|lane/core/wu-1172|user-approved: recovering state|<cwd>
|
|
204
204
|
```
|
|
205
205
|
|
|
206
206
|
### Warning When No Reason Provided
|
|
@@ -329,5 +329,5 @@ ls -la .husky/
|
|
|
329
329
|
|
|
330
330
|
# Verify bypass works with audit
|
|
331
331
|
LUMENFLOW_FORCE_REASON="testing" LUMENFLOW_FORCE=1 ./scripts/safe-git --version
|
|
332
|
-
# Should succeed and log to .
|
|
332
|
+
# Should succeed and log to .lumenflow/force-bypasses.log
|
|
333
333
|
```
|
|
@@ -8,7 +8,7 @@ This document presents the findings from WU-1220, investigating improper LUMENFL
|
|
|
8
8
|
|
|
9
9
|
## Executive Summary
|
|
10
10
|
|
|
11
|
-
Analysis of `.
|
|
11
|
+
Analysis of `.lumenflow/force-bypasses.log` reveals that LUMENFLOW_FORCE is used extensively, but almost exclusively by human operators (user "Tom") rather than AI agents. The vast majority of uses are for legitimate infrastructure operations such as:
|
|
12
12
|
|
|
13
13
|
- Release version pushes
|
|
14
14
|
- Micro-worktree recovery operations
|
|
@@ -76,11 +76,11 @@ Analysis of 347 logged bypass events shows:
|
|
|
76
76
|
|
|
77
77
|
### Technical Safeguards
|
|
78
78
|
|
|
79
|
-
1. **Audit logging:** All bypasses logged to `.
|
|
79
|
+
1. **Audit logging:** All bypasses logged to `.lumenflow/force-bypasses.log` with timestamp, hook, user, branch, reason, and working directory.
|
|
80
80
|
|
|
81
81
|
2. **Warning when no reason:** If LUMENFLOW_FORCE_REASON is not provided, a warning is printed.
|
|
82
82
|
|
|
83
|
-
3. **Git-tracked audit log:** The `.
|
|
83
|
+
3. **Git-tracked audit log:** The `.lumenflow/force-bypasses.log` file is version controlled, providing historical accountability.
|
|
84
84
|
|
|
85
85
|
4. **Hook enforcement:** Pre-commit, commit-msg, pre-push, and prepare-commit-msg hooks all check for LUMENFLOW_FORCE before allowing bypass.
|
|
86
86
|
|
|
@@ -126,7 +126,7 @@ Where `SESSION_TYPE` could be: `human`, `claude-code`, `cursor`, `windsurf`, `un
|
|
|
126
126
|
|
|
127
127
|
### 2. Periodic Audit Review (Process)
|
|
128
128
|
|
|
129
|
-
Establish a monthly review of `.
|
|
129
|
+
Establish a monthly review of `.lumenflow/force-bypasses.log` to identify:
|
|
130
130
|
|
|
131
131
|
- High volume of "no reason provided" entries
|
|
132
132
|
- Unexpected patterns in bypass usage
|