@lumenflow/cli 2.18.3 → 2.19.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.
Files changed (104) hide show
  1. package/README.md +42 -41
  2. package/dist/delegation-list.js +140 -0
  3. package/dist/delegation-list.js.map +1 -0
  4. package/dist/doctor.js +35 -99
  5. package/dist/doctor.js.map +1 -1
  6. package/dist/gates-plan-resolvers.js +150 -0
  7. package/dist/gates-plan-resolvers.js.map +1 -0
  8. package/dist/gates-runners.js +533 -0
  9. package/dist/gates-runners.js.map +1 -0
  10. package/dist/gates-types.js +3 -0
  11. package/dist/gates-types.js.map +1 -1
  12. package/dist/gates-utils.js +316 -0
  13. package/dist/gates-utils.js.map +1 -0
  14. package/dist/gates.js +44 -1016
  15. package/dist/gates.js.map +1 -1
  16. package/dist/hooks/enforcement-generator.js +16 -880
  17. package/dist/hooks/enforcement-generator.js.map +1 -1
  18. package/dist/hooks/enforcement-sync.js +1 -4
  19. package/dist/hooks/enforcement-sync.js.map +1 -1
  20. package/dist/hooks/generators/auto-checkpoint.js +123 -0
  21. package/dist/hooks/generators/auto-checkpoint.js.map +1 -0
  22. package/dist/hooks/generators/enforce-worktree.js +188 -0
  23. package/dist/hooks/generators/enforce-worktree.js.map +1 -0
  24. package/dist/hooks/generators/index.js +16 -0
  25. package/dist/hooks/generators/index.js.map +1 -0
  26. package/dist/hooks/generators/pre-compact-checkpoint.js +134 -0
  27. package/dist/hooks/generators/pre-compact-checkpoint.js.map +1 -0
  28. package/dist/hooks/generators/require-wu.js +115 -0
  29. package/dist/hooks/generators/require-wu.js.map +1 -0
  30. package/dist/hooks/generators/session-start-recovery.js +101 -0
  31. package/dist/hooks/generators/session-start-recovery.js.map +1 -0
  32. package/dist/hooks/generators/signal-utils.js +52 -0
  33. package/dist/hooks/generators/signal-utils.js.map +1 -0
  34. package/dist/hooks/generators/warn-incomplete.js +65 -0
  35. package/dist/hooks/generators/warn-incomplete.js.map +1 -0
  36. package/dist/init-detection.js +228 -0
  37. package/dist/init-detection.js.map +1 -0
  38. package/dist/init-scaffolding.js +146 -0
  39. package/dist/init-scaffolding.js.map +1 -0
  40. package/dist/init-templates.js +1928 -0
  41. package/dist/init-templates.js.map +1 -0
  42. package/dist/init.js +136 -2425
  43. package/dist/init.js.map +1 -1
  44. package/dist/initiative-edit.js +42 -11
  45. package/dist/initiative-edit.js.map +1 -1
  46. package/dist/initiative-remove-wu.js +0 -0
  47. package/dist/initiative-status.js +29 -2
  48. package/dist/initiative-status.js.map +1 -1
  49. package/dist/mem-context.js +22 -9
  50. package/dist/mem-context.js.map +1 -1
  51. package/dist/orchestrate-init-status.js +32 -1
  52. package/dist/orchestrate-init-status.js.map +1 -1
  53. package/dist/orchestrate-monitor.js +38 -38
  54. package/dist/orchestrate-monitor.js.map +1 -1
  55. package/dist/public-manifest.js +12 -5
  56. package/dist/public-manifest.js.map +1 -1
  57. package/dist/shared-validators.js +1 -0
  58. package/dist/shared-validators.js.map +1 -1
  59. package/dist/spawn-list.js +0 -0
  60. package/dist/wu-claim-branch.js +121 -0
  61. package/dist/wu-claim-branch.js.map +1 -0
  62. package/dist/wu-claim-output.js +83 -0
  63. package/dist/wu-claim-output.js.map +1 -0
  64. package/dist/wu-claim-resume-handler.js +85 -0
  65. package/dist/wu-claim-resume-handler.js.map +1 -0
  66. package/dist/wu-claim-state.js +572 -0
  67. package/dist/wu-claim-state.js.map +1 -0
  68. package/dist/wu-claim-validation.js +439 -0
  69. package/dist/wu-claim-validation.js.map +1 -0
  70. package/dist/wu-claim-worktree.js +221 -0
  71. package/dist/wu-claim-worktree.js.map +1 -0
  72. package/dist/wu-claim.js +54 -1402
  73. package/dist/wu-claim.js.map +1 -1
  74. package/dist/wu-create-content.js +254 -0
  75. package/dist/wu-create-content.js.map +1 -0
  76. package/dist/wu-create-readiness.js +57 -0
  77. package/dist/wu-create-readiness.js.map +1 -0
  78. package/dist/wu-create-validation.js +149 -0
  79. package/dist/wu-create-validation.js.map +1 -0
  80. package/dist/wu-create.js +39 -441
  81. package/dist/wu-create.js.map +1 -1
  82. package/dist/wu-done.js +144 -249
  83. package/dist/wu-done.js.map +1 -1
  84. package/dist/wu-edit-operations.js +432 -0
  85. package/dist/wu-edit-operations.js.map +1 -0
  86. package/dist/wu-edit-validators.js +280 -0
  87. package/dist/wu-edit-validators.js.map +1 -0
  88. package/dist/wu-edit.js +27 -713
  89. package/dist/wu-edit.js.map +1 -1
  90. package/dist/wu-prep.js +32 -2
  91. package/dist/wu-prep.js.map +1 -1
  92. package/dist/wu-repair.js +1 -1
  93. package/dist/wu-repair.js.map +1 -1
  94. package/dist/wu-spawn-prompt-builders.js +1123 -0
  95. package/dist/wu-spawn-prompt-builders.js.map +1 -0
  96. package/dist/wu-spawn-strategy-resolver.js +314 -0
  97. package/dist/wu-spawn-strategy-resolver.js.map +1 -0
  98. package/dist/wu-spawn.js +9 -1398
  99. package/dist/wu-spawn.js.map +1 -1
  100. package/package.json +10 -7
  101. package/templates/core/LUMENFLOW.md.template +29 -99
  102. package/templates/core/ai/onboarding/agent-invocation-guide.md.template +1 -1
  103. package/templates/core/ai/onboarding/quick-ref-commands.md.template +29 -4
  104. package/templates/vendors/claude/.claude/skills/orchestration/SKILL.md.template +8 -8
@@ -0,0 +1,533 @@
1
+ /**
2
+ * Gate Runner Functions
3
+ *
4
+ * WU-1647: Extracted gate runner functions that execute individual gates.
5
+ * Each runner takes a GateLogContext and returns a result with ok/duration.
6
+ *
7
+ * @module gates-runners
8
+ */
9
+ import { spawnSync } from 'node:child_process';
10
+ import { writeSync } from 'node:fs';
11
+ import { access } from 'node:fs/promises';
12
+ import path from 'node:path';
13
+ import { getChangedLintableFiles } from '@lumenflow/core/incremental-lint';
14
+ import { buildVitestChangedArgs, isCodeFilePath } from '@lumenflow/core/incremental-test';
15
+ import { createGitForPath } from '@lumenflow/core/git-adapter';
16
+ import { resolveGatesCommands, resolveTestRunner } from '@lumenflow/core/gates-config';
17
+ import { validateBacklogSync } from '@lumenflow/core/validators/backlog-sync';
18
+ import { runSupabaseDocsLinter } from '@lumenflow/core/validators/supabase-docs-linter';
19
+ import { runSystemMapValidation } from '@lumenflow/core/system-map-validator';
20
+ import { BRANCHES, PACKAGES, PKG_MANAGER, ESLINT_FLAGS, ESLINT_COMMANDS, ESLINT_DEFAULTS, SCRIPTS, CACHE_STRATEGIES, DIRECTORIES, EXIT_CODES, FILE_SYSTEM, } from '@lumenflow/core/wu-constants';
21
+ import { runLaneHealthCheck } from './lane-health.js';
22
+ import { pnpmCmd, pnpmRun, run, makeGateLogger, quoteShellArgs, filterExistingFiles, getChangedFilesForIncremental, detectCurrentWUForCwd, buildPrettierCheckCommand, } from './gates-utils.js';
23
+ import { resolveFormatCheckPlan, resolveLintPlan, resolveTestPlan, resolveSpecLinterPlan, isTestConfigFile, } from './gates-plan-resolvers.js';
24
+ // ── Format check gate ──────────────────────────────────────────────────
25
+ export async function runFormatCheckGate({ agentLog, useAgentMode, cwd }) {
26
+ const start = Date.now();
27
+ const logLine = makeGateLogger({ agentLog, useAgentMode });
28
+ let git;
29
+ let isMainBranch = false;
30
+ try {
31
+ git = createGitForPath(cwd);
32
+ const currentBranch = await git.getCurrentBranch();
33
+ isMainBranch = currentBranch === BRANCHES.MAIN || currentBranch === BRANCHES.MASTER;
34
+ }
35
+ catch (error) {
36
+ logLine(`\u26A0\uFE0F Failed to determine branch for format check: ${error.message}`);
37
+ const result = run(pnpmCmd(SCRIPTS.FORMAT_CHECK), { agentLog, cwd });
38
+ return { ...result, duration: Date.now() - start, fileCount: -1 };
39
+ }
40
+ if (isMainBranch) {
41
+ logLine('\uD83D\uDCCB On main branch - running full format check');
42
+ const result = run(pnpmCmd(SCRIPTS.FORMAT_CHECK), { agentLog, cwd });
43
+ return { ...result, duration: Date.now() - start, fileCount: -1 };
44
+ }
45
+ let changedFiles = [];
46
+ let fileListError = false;
47
+ try {
48
+ changedFiles = await getChangedFilesForIncremental({ git });
49
+ }
50
+ catch (error) {
51
+ fileListError = true;
52
+ logLine(`\u26A0\uFE0F Failed to determine changed files for format check: ${error.message}`);
53
+ }
54
+ const plan = resolveFormatCheckPlan({ changedFiles, fileListError });
55
+ if (plan.mode === 'skip') {
56
+ logLine('\n> format:check (incremental)\n');
57
+ logLine('\u2705 No files changed - skipping format check');
58
+ return { ok: true, duration: Date.now() - start, fileCount: 0, filesChecked: [] };
59
+ }
60
+ if (plan.mode === 'full') {
61
+ const reason = plan.reason === 'prettier-config'
62
+ ? ' (prettier config changed)'
63
+ : plan.reason === 'file-list-error'
64
+ ? ' (file list unavailable)'
65
+ : '';
66
+ logLine(`\uD83D\uDCCB Running full format check${reason}`);
67
+ const result = run(pnpmCmd(SCRIPTS.FORMAT_CHECK), { agentLog, cwd });
68
+ return { ...result, duration: Date.now() - start, fileCount: -1 };
69
+ }
70
+ const existingFiles = await filterExistingFiles(plan.files);
71
+ if (existingFiles.length === 0) {
72
+ logLine('\n> format:check (incremental)\n');
73
+ logLine('\u2705 All changed files were deleted - skipping format check');
74
+ return { ok: true, duration: Date.now() - start, fileCount: 0, filesChecked: [] };
75
+ }
76
+ logLine(`\n> format:check (incremental: ${existingFiles.length} files)\n`);
77
+ const result = run(buildPrettierCheckCommand(existingFiles), { agentLog, cwd });
78
+ return {
79
+ ...result,
80
+ duration: Date.now() - start,
81
+ fileCount: existingFiles.length,
82
+ filesChecked: existingFiles,
83
+ };
84
+ }
85
+ // ── Lint gate ──────────────────────────────────────────────────────────
86
+ /**
87
+ * Run incremental ESLint on changed files only
88
+ * Falls back to full lint if on main branch or if incremental fails
89
+ */
90
+ export async function runIncrementalLint({ agentLog, cwd, }) {
91
+ const start = Date.now();
92
+ const logLine = (line) => {
93
+ if (!agentLog) {
94
+ console.log(line);
95
+ return;
96
+ }
97
+ writeSync(agentLog.logFd, `${line}\n`);
98
+ };
99
+ try {
100
+ // Check if we're on main branch
101
+ const git = createGitForPath(cwd);
102
+ const currentBranch = await git.getCurrentBranch();
103
+ const isMainBranch = currentBranch === BRANCHES.MAIN || currentBranch === BRANCHES.MASTER;
104
+ if (isMainBranch) {
105
+ logLine('\uD83D\uDCCB On main branch - running full lint');
106
+ const result = run(pnpmCmd(SCRIPTS.LINT), { agentLog, cwd });
107
+ return { ...result, fileCount: -1 };
108
+ }
109
+ const changedFiles = await getChangedLintableFiles({ git });
110
+ const plan = resolveLintPlan({ isMainBranch, changedFiles });
111
+ if (plan.mode === 'skip') {
112
+ logLine('\n> ESLint (incremental)\n');
113
+ logLine('\u2705 No lintable files changed - skipping lint');
114
+ return { ok: true, duration: Date.now() - start, fileCount: 0 };
115
+ }
116
+ if (plan.mode === 'full') {
117
+ logLine('\uD83D\uDCCB Running full lint (incremental plan forced full)');
118
+ const result = run(pnpmCmd(SCRIPTS.LINT), { agentLog, cwd });
119
+ return { ...result, fileCount: -1 };
120
+ }
121
+ const existingFiles = await filterExistingFiles(plan.files);
122
+ if (existingFiles.length === 0) {
123
+ logLine('\n> ESLint (incremental)\n');
124
+ logLine('\u2705 All changed files were deleted - skipping lint');
125
+ return { ok: true, duration: Date.now() - start, fileCount: 0 };
126
+ }
127
+ logLine(`\n> ESLint (incremental: ${existingFiles.length} files)\n`);
128
+ logLine(`Files to lint:\n ${existingFiles.join('\n ')}\n`);
129
+ const result = spawnSync(PKG_MANAGER, [
130
+ ESLINT_COMMANDS.ESLINT,
131
+ ESLINT_FLAGS.MAX_WARNINGS,
132
+ ESLINT_DEFAULTS.MAX_WARNINGS,
133
+ ESLINT_FLAGS.NO_WARN_IGNORED,
134
+ ESLINT_FLAGS.CACHE,
135
+ ESLINT_FLAGS.CACHE_STRATEGY,
136
+ CACHE_STRATEGIES.CONTENT,
137
+ ESLINT_FLAGS.CACHE_LOCATION,
138
+ '.eslintcache',
139
+ ESLINT_FLAGS.PASS_ON_UNPRUNED,
140
+ ...existingFiles,
141
+ ], agentLog
142
+ ? {
143
+ stdio: ['ignore', agentLog.logFd, agentLog.logFd],
144
+ encoding: FILE_SYSTEM.ENCODING,
145
+ cwd,
146
+ }
147
+ : {
148
+ stdio: 'inherit',
149
+ encoding: FILE_SYSTEM.ENCODING,
150
+ cwd,
151
+ });
152
+ const duration = Date.now() - start;
153
+ return {
154
+ ok: result.status === EXIT_CODES.SUCCESS,
155
+ duration,
156
+ fileCount: existingFiles.length,
157
+ };
158
+ }
159
+ catch (error) {
160
+ console.error('\u26A0\uFE0F Incremental lint failed, falling back to full lint:', error.message);
161
+ const result = run(pnpmCmd(SCRIPTS.LINT), { agentLog, cwd });
162
+ return { ...result, fileCount: -1 };
163
+ }
164
+ }
165
+ // ── Test gates ─────────────────────────────────────────────────────────
166
+ const DEFAULT_INCREMENTAL_BASE_BRANCH = 'origin/main';
167
+ export function buildStableVitestIncrementalCommand(baseBranch = DEFAULT_INCREMENTAL_BASE_BRANCH) {
168
+ return pnpmCmd('vitest', 'run', ...buildVitestChangedArgs({ baseBranch }));
169
+ }
170
+ export function resolveIncrementalTestCommand({ testRunner, configuredIncrementalCommand, baseBranch = DEFAULT_INCREMENTAL_BASE_BRANCH, }) {
171
+ const normalizedConfiguredCommand = configuredIncrementalCommand?.trim();
172
+ if (testRunner === 'vitest') {
173
+ if (!normalizedConfiguredCommand) {
174
+ return buildStableVitestIncrementalCommand(baseBranch);
175
+ }
176
+ const isVitestChangedCommand = normalizedConfiguredCommand.includes('vitest') &&
177
+ normalizedConfiguredCommand.includes('--changed');
178
+ if (isVitestChangedCommand) {
179
+ return buildStableVitestIncrementalCommand(baseBranch);
180
+ }
181
+ }
182
+ return normalizedConfiguredCommand ?? null;
183
+ }
184
+ /**
185
+ * Run changed tests using configured test runner's incremental mode.
186
+ * WU-1356: Updated to use configured commands from gates-config.
187
+ */
188
+ export async function runChangedTests({ agentLog, cwd, scopedTestPaths = [], }) {
189
+ const start = Date.now();
190
+ // eslint-disable-next-line sonarjs/no-identical-functions -- Pre-existing: logLine helper duplicated across gate runners
191
+ const logLine = (line) => {
192
+ if (!agentLog) {
193
+ console.log(line);
194
+ return;
195
+ }
196
+ writeSync(agentLog.logFd, `${line}\n`);
197
+ };
198
+ // WU-1356: Get configured commands
199
+ const gatesCommands = resolveGatesCommands(cwd);
200
+ const testRunner = resolveTestRunner(cwd);
201
+ const normalizedScopedTestPaths = scopedTestPaths
202
+ .filter((testPath) => typeof testPath === 'string')
203
+ .map((testPath) => testPath.trim())
204
+ .filter(Boolean);
205
+ try {
206
+ if (normalizedScopedTestPaths.length > 0) {
207
+ const testPathsArg = quoteShellArgs(normalizedScopedTestPaths);
208
+ logLine(`\n> Running scoped tests from WU tests.unit (${normalizedScopedTestPaths.length})\n`);
209
+ const result = run(pnpmCmd('vitest', 'run', testPathsArg, '--passWithNoTests'), {
210
+ agentLog,
211
+ cwd,
212
+ });
213
+ return { ...result, duration: Date.now() - start, isIncremental: true };
214
+ }
215
+ const git = createGitForPath(cwd);
216
+ const currentBranch = await git.getCurrentBranch();
217
+ const isMainBranch = currentBranch === BRANCHES.MAIN || currentBranch === BRANCHES.MASTER;
218
+ if (isMainBranch) {
219
+ logLine('\uD83D\uDCCB On main branch - running full test suite');
220
+ const result = run(gatesCommands.test_full, { agentLog, cwd });
221
+ return { ...result, isIncremental: false };
222
+ }
223
+ let changedFiles = [];
224
+ let fileListError = false;
225
+ try {
226
+ changedFiles = await getChangedFilesForIncremental({ git });
227
+ }
228
+ catch (error) {
229
+ fileListError = true;
230
+ logLine(`\u26A0\uFE0F Failed to determine changed files for tests: ${error.message}`);
231
+ }
232
+ const hasConfigChange = !fileListError && changedFiles.some(isTestConfigFile);
233
+ const untrackedOutput = await git.raw(['ls-files', '--others', '--exclude-standard']);
234
+ const untrackedFiles = untrackedOutput
235
+ .split(/\r?\n/)
236
+ .map((f) => f.trim())
237
+ .filter(Boolean);
238
+ const untrackedCodeFiles = untrackedFiles.filter(isCodeFilePath);
239
+ const hasUntrackedCode = untrackedCodeFiles.length > 0;
240
+ const plan = resolveTestPlan({
241
+ isMainBranch,
242
+ hasUntrackedCode,
243
+ hasConfigChange,
244
+ fileListError,
245
+ });
246
+ if (plan.mode === 'full') {
247
+ if (plan.reason === 'untracked-code') {
248
+ const preview = untrackedCodeFiles.slice(0, 5).join(', ');
249
+ logLine(`\u26A0\uFE0F Untracked code files detected (${untrackedCodeFiles.length}): ${preview}${untrackedCodeFiles.length > 5 ? '...' : ''}`);
250
+ }
251
+ else if (plan.reason === 'test-config') {
252
+ logLine('\u26A0\uFE0F Test config changes detected - running full test suite');
253
+ }
254
+ else if (plan.reason === 'file-list-error') {
255
+ logLine('\u26A0\uFE0F Changed file list unavailable - running full test suite');
256
+ }
257
+ logLine('\uD83D\uDCCB Running full test suite to avoid missing coverage');
258
+ const result = run(gatesCommands.test_full, { agentLog, cwd });
259
+ return { ...result, duration: Date.now() - start, isIncremental: false };
260
+ }
261
+ // WU-1356: Use configured incremental test command
262
+ logLine(`\n> Running tests (${testRunner} --changed)\n`);
263
+ const incrementalCommand = resolveIncrementalTestCommand({
264
+ testRunner,
265
+ configuredIncrementalCommand: gatesCommands.test_incremental,
266
+ });
267
+ if (incrementalCommand) {
268
+ if (testRunner === 'vitest' &&
269
+ incrementalCommand !== gatesCommands.test_incremental?.trim()) {
270
+ logLine('ℹ️ Using hardened vitest incremental command for worker stability');
271
+ }
272
+ const result = run(incrementalCommand, { agentLog, cwd });
273
+ return { ...result, duration: Date.now() - start, isIncremental: true };
274
+ }
275
+ // For other runners without configured incremental, fall back to full
276
+ logLine('\u26A0\uFE0F No incremental test command configured, running full suite');
277
+ const result = run(gatesCommands.test_full, { agentLog, cwd });
278
+ return { ...result, duration: Date.now() - start, isIncremental: false };
279
+ }
280
+ catch (error) {
281
+ console.error('\u26A0\uFE0F Changed tests failed, falling back to full suite:', error.message);
282
+ const result = run(gatesCommands.test_full, { agentLog, cwd });
283
+ return { ...result, isIncremental: false };
284
+ }
285
+ }
286
+ /**
287
+ * Safety-critical test file patterns (relative to apps/web).
288
+ */
289
+ export const SAFETY_CRITICAL_TEST_FILES = [
290
+ // PHI protection tests
291
+ 'src/components/ui/__tests__/PHIGuard.test.tsx',
292
+ 'src/components/ui/__tests__/WidgetPHIConsentDialog.test.tsx',
293
+ 'src/components/ui/__tests__/Composer.phi.test.tsx',
294
+ // Privacy detection tests
295
+ 'src/lib/llm/__tests__/privacyDetector.test.ts',
296
+ // Escalation trigger tests
297
+ 'src/lib/llm/__tests__/escalationTrigger.test.ts',
298
+ 'src/components/escalation/__tests__/EscalationHistory.test.tsx',
299
+ // Constitutional enforcer tests
300
+ 'src/lib/llm/__tests__/constitutionalEnforcer.test.ts',
301
+ // Safe prompt wrapper tests
302
+ 'src/lib/llm/__tests__/safePromptWrapper.test.ts',
303
+ // Crisis/emergency handling tests
304
+ 'src/lib/prompts/__tests__/golden-crisis.test.ts',
305
+ ];
306
+ /**
307
+ * WU-2062: Run safety-critical tests
308
+ * These tests ALWAYS run regardless of which files changed.
309
+ */
310
+ export async function runSafetyCriticalTests({ agentLog, cwd, }) {
311
+ const start = Date.now();
312
+ // eslint-disable-next-line sonarjs/no-identical-functions -- Pre-existing: logLine helper duplicated across gate runners
313
+ const logLine = (line) => {
314
+ if (!agentLog) {
315
+ console.log(line);
316
+ return;
317
+ }
318
+ writeSync(agentLog.logFd, `${line}\n`);
319
+ };
320
+ // WU-1006: Skip safety-critical tests if apps/web doesn't exist (repo-agnostic)
321
+ const webDir = path.join(cwd, DIRECTORIES.APPS_WEB);
322
+ try {
323
+ await access(webDir);
324
+ }
325
+ catch {
326
+ logLine('\n> Safety-critical tests skipped (apps/web not present)\n');
327
+ return { ok: true, duration: Date.now() - start, testCount: 0 };
328
+ }
329
+ try {
330
+ logLine('\n> Safety-critical tests (always run)\n');
331
+ logLine(`Test files: ${SAFETY_CRITICAL_TEST_FILES.length} files\n`);
332
+ const result = spawnSync(PKG_MANAGER, [
333
+ 'vitest',
334
+ 'run',
335
+ '--project',
336
+ PACKAGES.WEB,
337
+ '--reporter=verbose',
338
+ ...SAFETY_CRITICAL_TEST_FILES,
339
+ '--passWithNoTests',
340
+ ], agentLog
341
+ ? {
342
+ stdio: ['ignore', agentLog.logFd, agentLog.logFd],
343
+ encoding: FILE_SYSTEM.ENCODING,
344
+ cwd,
345
+ }
346
+ : {
347
+ stdio: 'inherit',
348
+ encoding: FILE_SYSTEM.ENCODING,
349
+ cwd,
350
+ });
351
+ const duration = Date.now() - start;
352
+ return {
353
+ ok: result.status === EXIT_CODES.SUCCESS,
354
+ duration,
355
+ testCount: SAFETY_CRITICAL_TEST_FILES.length,
356
+ };
357
+ }
358
+ catch (error) {
359
+ console.error('\u26A0\uFE0F Safety-critical tests failed:', error.message);
360
+ return { ok: false, duration: Date.now() - start, testCount: 0 };
361
+ }
362
+ }
363
+ /**
364
+ * WU-2062: Run integration tests for high-risk changes
365
+ */
366
+ export async function runIntegrationTests({ agentLog, cwd, }) {
367
+ const start = Date.now();
368
+ // eslint-disable-next-line sonarjs/no-identical-functions -- Pre-existing: logLine helper duplicated across gate runners
369
+ const logLine = (line) => {
370
+ if (!agentLog) {
371
+ console.log(line);
372
+ return;
373
+ }
374
+ writeSync(agentLog.logFd, `${line}\n`);
375
+ };
376
+ try {
377
+ logLine('\n> Integration tests (high-risk changes detected)\n');
378
+ // WU-1415: vitest doesn't support --include flag
379
+ const result = run(`RUN_INTEGRATION_TESTS=1 ${pnpmCmd('vitest', 'run', "'**/*.integration.*'", "'**/golden-*.test.*'")}`, { agentLog, cwd });
380
+ const duration = Date.now() - start;
381
+ return {
382
+ ok: result.ok,
383
+ duration,
384
+ };
385
+ }
386
+ catch (error) {
387
+ console.error('\u26A0\uFE0F Integration tests failed:', error.message);
388
+ return { ok: false, duration: Date.now() - start };
389
+ }
390
+ }
391
+ // ── Spec linter gate ───────────────────────────────────────────────────
392
+ export async function runSpecLinterGate({ agentLog, useAgentMode, cwd }) {
393
+ const start = Date.now();
394
+ const wuId = await detectCurrentWUForCwd(cwd);
395
+ const plan = resolveSpecLinterPlan(wuId);
396
+ if (plan.scopedWuId) {
397
+ const scopedCmd = pnpmCmd('wu:validate', '--id', plan.scopedWuId);
398
+ const scopedResult = run(scopedCmd, { agentLog, cwd });
399
+ if (!scopedResult.ok) {
400
+ return { ok: false, duration: Date.now() - start };
401
+ }
402
+ return { ok: true, duration: Date.now() - start };
403
+ }
404
+ if (!useAgentMode) {
405
+ console.log('\u26A0\uFE0F Unable to detect current WU; skipping scoped validation.');
406
+ }
407
+ else if (agentLog) {
408
+ writeSync(agentLog.logFd, '\u26A0\uFE0F Unable to detect current WU; skipping scoped validation.\n');
409
+ }
410
+ if (!plan.runGlobal) {
411
+ return { ok: true, duration: Date.now() - start };
412
+ }
413
+ const fallbackResult = run(pnpmRun(SCRIPTS.SPEC_LINTER), { agentLog, cwd });
414
+ return { ok: fallbackResult.ok, duration: Date.now() - start };
415
+ }
416
+ // ── Backlog sync gate ──────────────────────────────────────────────────
417
+ export async function runBacklogSyncGate({ agentLog, useAgentMode, cwd }) {
418
+ const start = Date.now();
419
+ const logLine = makeGateLogger({ agentLog, useAgentMode });
420
+ logLine('\n> Backlog sync\n');
421
+ const result = await validateBacklogSync({ cwd });
422
+ if (result.errors.length > 0) {
423
+ logLine('\u274C Backlog sync errors:');
424
+ result.errors.forEach((error) => logLine(` - ${error}`));
425
+ }
426
+ if (result.warnings.length > 0) {
427
+ logLine('\u26A0\uFE0F Backlog sync warnings:');
428
+ result.warnings.forEach((warning) => logLine(` - ${warning}`));
429
+ }
430
+ logLine(`Backlog sync summary: WU files=${result.wuCount}, Backlog refs=${result.backlogCount}`);
431
+ return { ok: result.valid, duration: Date.now() - start };
432
+ }
433
+ // ── Supabase docs gate ─────────────────────────────────────────────────
434
+ export async function runSupabaseDocsGate({ agentLog, useAgentMode, cwd }) {
435
+ const start = Date.now();
436
+ const logLine = makeGateLogger({ agentLog, useAgentMode });
437
+ logLine('\n> Supabase docs linter\n');
438
+ const result = await runSupabaseDocsLinter({ cwd, logger: { log: logLine } });
439
+ if (result.skipped) {
440
+ logLine(`\u26A0\uFE0F ${result.message ?? 'Supabase docs linter skipped.'}`);
441
+ }
442
+ else if (!result.ok) {
443
+ logLine('\u274C Supabase docs linter failed.');
444
+ (result.errors ?? []).forEach((error) => logLine(` - ${error}`));
445
+ }
446
+ else {
447
+ logLine(result.message ?? 'Supabase docs linter passed.');
448
+ }
449
+ return { ok: result.ok, duration: Date.now() - start };
450
+ }
451
+ // ── System map gate ────────────────────────────────────────────────────
452
+ export async function runSystemMapGate({ agentLog, useAgentMode, cwd }) {
453
+ const start = Date.now();
454
+ const logLine = makeGateLogger({ agentLog, useAgentMode });
455
+ logLine('\n> System map validation\n');
456
+ const result = await runSystemMapValidation({
457
+ cwd,
458
+ logger: { log: logLine, warn: logLine, error: logLine },
459
+ });
460
+ if (!result.valid) {
461
+ logLine('\u274C System map validation failed');
462
+ (result.pathErrors ?? []).forEach((error) => logLine(` - ${error}`));
463
+ (result.orphanDocs ?? []).forEach((error) => logLine(` - ${error}`));
464
+ (result.audienceErrors ?? []).forEach((error) => logLine(` - ${error}`));
465
+ (result.queryErrors ?? []).forEach((error) => logLine(` - ${error}`));
466
+ (result.classificationErrors ?? []).forEach((error) => logLine(` - ${error}`));
467
+ }
468
+ else {
469
+ logLine('System map validation passed.');
470
+ }
471
+ return { ok: result.valid, duration: Date.now() - start };
472
+ }
473
+ // ── Lane health gate ───────────────────────────────────────────────────
474
+ /**
475
+ * WU-1191: Run lane health check gate
476
+ */
477
+ export async function runLaneHealthGate({ agentLog, useAgentMode, mode, cwd, }) {
478
+ const start = Date.now();
479
+ const logLine = makeGateLogger({ agentLog, useAgentMode });
480
+ if (mode === 'off') {
481
+ logLine('\n> Lane health check (skipped - mode: off)\n');
482
+ return { ok: true, duration: Date.now() - start };
483
+ }
484
+ logLine(`\n> Lane health check (mode: ${mode})\n`);
485
+ const report = runLaneHealthCheck({ projectRoot: cwd });
486
+ if (!report.healthy) {
487
+ logLine('\u26A0\uFE0F Lane health issues detected:');
488
+ if (report.overlaps.hasOverlaps) {
489
+ logLine(` - ${report.overlaps.overlaps.length} overlapping code_paths`);
490
+ }
491
+ if (report.gaps.hasGaps) {
492
+ logLine(` - ${report.gaps.uncoveredFiles.length} uncovered files`);
493
+ }
494
+ logLine(` Run 'pnpm lane:health' for full report.`);
495
+ if (mode === 'error') {
496
+ return { ok: false, duration: Date.now() - start };
497
+ }
498
+ // mode === 'warn': report but don't fail
499
+ logLine(' (mode: warn - not blocking)');
500
+ }
501
+ else {
502
+ logLine('Lane health check passed.');
503
+ }
504
+ return { ok: true, duration: Date.now() - start };
505
+ }
506
+ // ── Docs-only filtered tests ───────────────────────────────────────────
507
+ /**
508
+ * WU-1299: Run filtered tests for docs-only mode
509
+ * WU-1356: Updated to use configured test command
510
+ */
511
+ export async function runDocsOnlyFilteredTests({ packages, agentLog, cwd = process.cwd(), }) {
512
+ const start = Date.now();
513
+ const logLine = makeGateLogger({ agentLog, useAgentMode: !!agentLog, cwd });
514
+ if (packages.length === 0) {
515
+ logLine('\uD83D\uDCDD docs-only mode: no packages to test, skipping');
516
+ return { ok: true, duration: Date.now() - start };
517
+ }
518
+ logLine(`\n> Tests (docs-only filtered: ${packages.join(', ')})\n`);
519
+ // WU-1356: Use configured test command with filter
520
+ const gatesCommands = resolveGatesCommands(cwd);
521
+ // If there's a configured test_docs_only command, use it
522
+ if (gatesCommands.test_docs_only) {
523
+ const result = run(gatesCommands.test_docs_only, { agentLog, cwd });
524
+ return { ok: result.ok, duration: Date.now() - start };
525
+ }
526
+ // Otherwise, use the full test command with filter args
527
+ const filterArgs = packages.map((pkg) => `--filter=${pkg}`);
528
+ const baseCmd = gatesCommands.test_full;
529
+ const filteredCmd = `${baseCmd} ${filterArgs.join(' ')}`;
530
+ const result = run(filteredCmd, { agentLog });
531
+ return { ok: result.ok, duration: Date.now() - start };
532
+ }
533
+ //# sourceMappingURL=gates-runners.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gates-runners.js","sourceRoot":"","sources":["../src/gates-runners.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,9 @@
4
4
  * WU-1550: Extracted type definitions used across gate-registry,
5
5
  * gate-defaults, and the main gates.ts orchestrator.
6
6
  *
7
+ * WU-1647: DocsOnlyTestPlan now canonical in gates-plan-resolvers.ts;
8
+ * re-exported here for backward compatibility with gate-defaults.ts.
9
+ *
7
10
  * @module gates-types
8
11
  */
9
12
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"gates-types.js","sourceRoot":"","sources":["../src/gates-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
1
+ {"version":3,"file":"gates-types.js","sourceRoot":"","sources":["../src/gates-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}