@lumenflow/cli 3.12.6 → 3.12.8

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 (111) hide show
  1. package/dist/config-set.js +82 -32
  2. package/dist/config-set.js.map +1 -1
  3. package/dist/wu-claim.js +2 -1
  4. package/dist/wu-claim.js.map +1 -1
  5. package/dist/wu-done-policies.js +9 -9
  6. package/dist/wu-done-policies.js.map +1 -1
  7. package/dist/wu-spawn-strategy-resolver.js +14 -6
  8. package/dist/wu-spawn-strategy-resolver.js.map +1 -1
  9. package/package.json +8 -8
  10. package/packs/sidekick/.turbo/turbo-build.log +1 -1
  11. package/packs/sidekick/package.json +1 -1
  12. package/packs/software-delivery/.turbo/turbo-build.log +1 -1
  13. package/packs/software-delivery/package.json +1 -1
  14. package/dist/chunk-2D2VOCA4.js +0 -37
  15. package/dist/chunk-2D5KFYGX.js +0 -284
  16. package/dist/chunk-2GXVIN57.js +0 -14072
  17. package/dist/chunk-2MQ7HZWZ.js +0 -26
  18. package/dist/chunk-2UFQ3A3C.js +0 -643
  19. package/dist/chunk-3RG5ZIWI.js +0 -10
  20. package/dist/chunk-4N74J3UT.js +0 -15
  21. package/dist/chunk-5GTOXFYR.js +0 -392
  22. package/dist/chunk-5VY6MQMC.js +0 -240
  23. package/dist/chunk-67XVPMRY.js +0 -1297
  24. package/dist/chunk-6HO4GWJE.js +0 -164
  25. package/dist/chunk-6W5XHWYV.js +0 -1890
  26. package/dist/chunk-6X4EMYJQ.js +0 -64
  27. package/dist/chunk-6XYXI2NQ.js +0 -772
  28. package/dist/chunk-7ANSOV6Q.js +0 -285
  29. package/dist/chunk-A624LFLB.js +0 -1380
  30. package/dist/chunk-ADN5NHG4.js +0 -126
  31. package/dist/chunk-B7YJYJKG.js +0 -33
  32. package/dist/chunk-CCLHCPKG.js +0 -210
  33. package/dist/chunk-CK36VROC.js +0 -1584
  34. package/dist/chunk-D3UOFRSB.js +0 -81
  35. package/dist/chunk-DFR4DJBM.js +0 -230
  36. package/dist/chunk-DSYBDHYH.js +0 -79
  37. package/dist/chunk-DWMLTXKQ.js +0 -1176
  38. package/dist/chunk-E3REJTAJ.js +0 -28
  39. package/dist/chunk-EA3IVO64.js +0 -633
  40. package/dist/chunk-EK2AKZKD.js +0 -55
  41. package/dist/chunk-ELD7JTTT.js +0 -343
  42. package/dist/chunk-EX6TT2XI.js +0 -195
  43. package/dist/chunk-EXINSFZE.js +0 -82
  44. package/dist/chunk-EZ6ZBYBM.js +0 -510
  45. package/dist/chunk-FBKAPTJ2.js +0 -16
  46. package/dist/chunk-FVLV5RYH.js +0 -1118
  47. package/dist/chunk-GDNSBQVK.js +0 -2485
  48. package/dist/chunk-GPQHMBNN.js +0 -278
  49. package/dist/chunk-GTFJB67L.js +0 -68
  50. package/dist/chunk-HANJXVKW.js +0 -1127
  51. package/dist/chunk-HEVS5YLD.js +0 -269
  52. package/dist/chunk-HMEVZKPQ.js +0 -9
  53. package/dist/chunk-HRGSYNLM.js +0 -3511
  54. package/dist/chunk-ISZR5N4K.js +0 -60
  55. package/dist/chunk-J6SUPR2C.js +0 -226
  56. package/dist/chunk-JERYVEIZ.js +0 -244
  57. package/dist/chunk-JHHWGL2N.js +0 -87
  58. package/dist/chunk-JONWQUB5.js +0 -775
  59. package/dist/chunk-K2DIWWDM.js +0 -1766
  60. package/dist/chunk-KY4PGL5V.js +0 -969
  61. package/dist/chunk-L737LQ4C.js +0 -1285
  62. package/dist/chunk-LFTWYIB2.js +0 -497
  63. package/dist/chunk-LV47RFNJ.js +0 -41
  64. package/dist/chunk-MKSAITI7.js +0 -15
  65. package/dist/chunk-MZ7RKIX4.js +0 -212
  66. package/dist/chunk-NAP6CFSO.js +0 -84
  67. package/dist/chunk-ND6MY37M.js +0 -16
  68. package/dist/chunk-NMG736UR.js +0 -683
  69. package/dist/chunk-NRAXROED.js +0 -32
  70. package/dist/chunk-NRIZR3A7.js +0 -690
  71. package/dist/chunk-NX43BG3M.js +0 -233
  72. package/dist/chunk-O645XLSI.js +0 -297
  73. package/dist/chunk-OMJD6A3S.js +0 -235
  74. package/dist/chunk-QB6SJD4T.js +0 -430
  75. package/dist/chunk-QFSTL4J3.js +0 -276
  76. package/dist/chunk-QLGDFMFX.js +0 -212
  77. package/dist/chunk-RIAAGL2E.js +0 -13
  78. package/dist/chunk-RWO5XMZ6.js +0 -86
  79. package/dist/chunk-RXRKBBSM.js +0 -149
  80. package/dist/chunk-RZOZMML6.js +0 -363
  81. package/dist/chunk-U7I7FS7T.js +0 -113
  82. package/dist/chunk-UI42RODY.js +0 -717
  83. package/dist/chunk-UTVMVSCO.js +0 -519
  84. package/dist/chunk-V6OJGLBA.js +0 -1746
  85. package/dist/chunk-W2JHVH7D.js +0 -152
  86. package/dist/chunk-WD3Y7VQN.js +0 -280
  87. package/dist/chunk-WOCTQ5MS.js +0 -303
  88. package/dist/chunk-WZR3ZUNN.js +0 -696
  89. package/dist/chunk-XGI665H7.js +0 -150
  90. package/dist/chunk-XKY65P2T.js +0 -304
  91. package/dist/chunk-Y4CQZY65.js +0 -57
  92. package/dist/chunk-YFEXKLVE.js +0 -194
  93. package/dist/chunk-YHO3HS5X.js +0 -287
  94. package/dist/chunk-YLS7AZSX.js +0 -738
  95. package/dist/chunk-ZE473AO6.js +0 -49
  96. package/dist/chunk-ZF747T3O.js +0 -644
  97. package/dist/chunk-ZHCZHZH3.js +0 -43
  98. package/dist/chunk-ZZNZX2XY.js +0 -87
  99. package/dist/constants-7QAP3VQ4.js +0 -23
  100. package/dist/dist-IY3UUMWK.js +0 -33
  101. package/dist/invariants-runner-W5RGHCSU.js +0 -27
  102. package/dist/lane-lock-6J36HD5O.js +0 -35
  103. package/dist/mem-checkpoint-core-EANG2GVN.js +0 -14
  104. package/dist/mem-signal-core-2LZ2WYHW.js +0 -19
  105. package/dist/memory-store-OLB5FO7K.js +0 -18
  106. package/dist/service-6BYCOCO5.js +0 -13
  107. package/dist/spawn-policy-resolver-NTSZYQ6R.js +0 -17
  108. package/dist/spawn-task-builder-R4E2BHSW.js +0 -22
  109. package/dist/wu-done-pr-WLFFFEPJ.js +0 -25
  110. package/dist/wu-done-validation-3J5E36FE.js +0 -30
  111. package/dist/wu-duplicate-id-detector-5S7JHELK.js +0 -232
@@ -1,1176 +0,0 @@
1
- import {
2
- DEFAULT_DOCS_LAYOUT,
3
- DOCS_LAYOUT_PRESETS,
4
- GIT_DIRECTORY_NAME,
5
- WORKSPACE_CONFIG_FILE_NAME,
6
- getConfig
7
- } from "./chunk-V6OJGLBA.js";
8
-
9
- // ../core/dist/wu-git-constants.js
10
- var BRANCHES = {
11
- MAIN: "main",
12
- MASTER: "master",
13
- // Legacy default branch name (defensive check)
14
- /** Temporary branch prefix for micro-worktree operations */
15
- TEMP_PREFIX: "tmp/"
16
- };
17
- var REMOTES = {
18
- ORIGIN: "origin"
19
- };
20
- var GIT_REFS = {
21
- /** Construct remote ref like 'origin/main' */
22
- remote: (remoteName, branchName) => `${remoteName}/${branchName}`,
23
- /** Shortcut for origin/main */
24
- ORIGIN_MAIN: "origin/main",
25
- /** Current HEAD ref */
26
- HEAD: "HEAD",
27
- /** Upstream ref */
28
- UPSTREAM: "@{u}",
29
- /** Range of upstream..HEAD */
30
- UPSTREAM_RANGE: "@{u}..HEAD",
31
- /** Fetch head ref */
32
- FETCH_HEAD: "FETCH_HEAD"
33
- };
34
- var GIT = {
35
- /** Standard length for displaying short SHA hashes (e.g., "abc12345") */
36
- SHA_SHORT_LENGTH: 8,
37
- /** Max number of commits to inspect in git log lookbacks */
38
- LOG_MAX_COUNT: 50
39
- };
40
- var REAL_GIT = "/usr/bin/git";
41
- var GIT_FLAGS = {
42
- /** Show abbreviated ref names (for branch name resolution) */
43
- ABBREV_REF: "--abbrev-ref",
44
- /** Porcelain format (machine-readable output) */
45
- PORCELAIN: "--porcelain",
46
- /** Create new branch and switch to it */
47
- BRANCH: "-b",
48
- /** Force flag (long form) */
49
- FORCE: "--force",
50
- /** Force flag (short form) */
51
- FORCE_SHORT: "-f",
52
- /** Fast-forward only merge */
53
- FF_ONLY: "--ff-only",
54
- /** Rebase local commits on top of fetched branch */
55
- REBASE: "--rebase",
56
- /** Check ancestry without output (merge-base) */
57
- IS_ANCESTOR: "--is-ancestor",
58
- /** Write merged tree object and return conflict status code */
59
- WRITE_TREE: "--write-tree",
60
- /** Set upstream tracking */
61
- UPSTREAM: "-u",
62
- /** Delete branch (safe - only if merged) */
63
- DELETE: "-d",
64
- /** Delete branch (force - even if not merged) */
65
- DELETE_FORCE: "-D",
66
- /** Delete remote branch flag (for git push --delete) */
67
- DELETE_REMOTE: "--delete",
68
- /** Hard reset flag */
69
- HARD: "--hard",
70
- /** Soft reset flag */
71
- SOFT: "--soft",
72
- /** fd flags for clean (force delete directories) */
73
- FD_SHORT: "-fd",
74
- /** df flags for clean (delete force directories) */
75
- DF_SHORT: "-df",
76
- /** No verify flag (skip pre-commit/commit-msg hooks) */
77
- NO_VERIFY: "--no-verify",
78
- /** No GPG sign flag (skip commit signing) */
79
- NO_GPG_SIGN: "--no-gpg-sign",
80
- /** One-line log format */
81
- ONELINE: "--oneline",
82
- /** List heads only (for ls-remote) */
83
- HEADS: "--heads",
84
- /** Path separator (separates git options from file paths) */
85
- PATH_SEPARATOR: "--"
86
- };
87
- var GIT_COMMANDS = {
88
- /** Git binary */
89
- GIT: "git",
90
- /** Git reset command */
91
- RESET: "reset",
92
- /** List tree objects (check file existence on branch) */
93
- LS_TREE: "ls-tree",
94
- /** List remote references */
95
- LS_REMOTE: "ls-remote",
96
- /** Push command */
97
- PUSH: "push",
98
- /** Pull command */
99
- PULL: "pull",
100
- /** Git diff command */
101
- DIFF: "diff",
102
- /** Git log command */
103
- LOG: "log",
104
- /** Git merge-base command */
105
- MERGE_BASE: "merge-base",
106
- /** Git merge-tree command */
107
- MERGE_TREE: "merge-tree",
108
- /** Git rev-parse command */
109
- REV_PARSE: "rev-parse",
110
- /** Git diff flags */
111
- CACHED: "--cached",
112
- NAME_ONLY: "--name-only",
113
- DIFF_FILTER_ACM: "--diff-filter=ACM"
114
- };
115
-
116
- // ../core/dist/wu-paths-constants.js
117
- import path from "path";
118
- import { tmpdir } from "os";
119
- var DEFAULT_DOCS_PATHS = DOCS_LAYOUT_PRESETS[DEFAULT_DOCS_LAYOUT];
120
- var UTF8_ENCODING = "utf8";
121
- var FILE_SYSTEM = {
122
- /** Standard file encoding */
123
- ENCODING: UTF8_ENCODING,
124
- /** UTF-8 encoding (alias for compatibility) */
125
- UTF8: UTF8_ENCODING
126
- };
127
- var CONFIG_FILES = {
128
- /** Canonical workspace config */
129
- WORKSPACE_CONFIG: WORKSPACE_CONFIG_FILE_NAME,
130
- /** Lane inference taxonomy */
131
- LANE_INFERENCE: ".lumenflow.lane-inference.yaml"
132
- };
133
- var DIRECTORIES = {
134
- APPS_WEB: "apps/web/",
135
- WORKTREES: "worktrees/",
136
- AI: "ai/",
137
- CLAUDE: ".claude/",
138
- CLAUDE_HOOKS: ".claude/hooks/",
139
- DOCS: "docs/",
140
- PACKAGES: "packages/",
141
- TOOLS: "tools/",
142
- MEMORY_BANK: "memory-bank/",
143
- WU_DIR: `${DEFAULT_DOCS_PATHS.tasks}/wu`,
144
- INITIATIVES_DIR: `${DEFAULT_DOCS_PATHS.tasks}/initiatives`,
145
- // WU-1814: Paths for active WU detection
146
- BACKLOG_PATH: `${DEFAULT_DOCS_PATHS.tasks}/backlog.md`,
147
- STATUS_PATH: `${DEFAULT_DOCS_PATHS.tasks}/status.md`
148
- };
149
- var BUILD_ARTIFACT_GLOBS = {
150
- /** Common dist directories inside worktrees */
151
- DIST_DIRS: [
152
- "packages/*/dist",
153
- "packages/**/dist",
154
- "apps/*/dist",
155
- "apps/**/dist",
156
- "tools/*/dist",
157
- "tools/**/dist"
158
- ],
159
- /** TypeScript build info files */
160
- TSBUILDINFO_FILES: ["**/*.tsbuildinfo"]
161
- };
162
- var GIT_ARTIFACT_IGNORE_GLOB = `**/${GIT_DIRECTORY_NAME}/**`;
163
- var BUILD_ARTIFACT_IGNORES = [
164
- "**/node_modules/**",
165
- GIT_ARTIFACT_IGNORE_GLOB,
166
- "**/.turbo/**"
167
- ];
168
- var FILE_EXTENSIONS = {
169
- /** Newline-delimited JSON format */
170
- NDJSON: ".ndjson",
171
- /** Markdown format */
172
- MARKDOWN: ".md",
173
- /** YAML format */
174
- YAML: ".yaml",
175
- /** YAML alternate extension */
176
- YML: ".yml",
177
- /** JSON format */
178
- JSON: ".json",
179
- /** Log format */
180
- LOG: ".log",
181
- /** Stamp files (completion markers) */
182
- STAMP: ".done"
183
- };
184
- var PATH_LITERALS = {
185
- /** Tilde prefix for home directory expansion (e.g., ~/path) */
186
- TILDE_PREFIX: "~/",
187
- /** Tilde character for home directory */
188
- TILDE: "~",
189
- /** Plan file suffix for WU plans */
190
- PLAN_FILE_SUFFIX: "-plan.md",
191
- /** Trailing slash regex pattern */
192
- TRAILING_SLASH_REGEX: /\/+$/,
193
- /** .lumenflow path prefix for internal path detection (WU-1430) */
194
- LUMENFLOW_PREFIX: ".lumenflow/",
195
- /** Current directory prefix for repo-internal paths (WU-1430) */
196
- CURRENT_DIR_PREFIX: "./"
197
- };
198
- var PATH_SLICE_LENGTHS = {
199
- /** Length of '~/' prefix for tilde expansion */
200
- TILDE_PREFIX_LENGTH: 2,
201
- /** Length of '/' for leading slash removal */
202
- LEADING_SLASH_LENGTH: 1
203
- };
204
- var LOCK_DIR_NAME = ".lumenflow-locks";
205
- var LUMENFLOW_PATHS = {
206
- /** Base directory for all LumenFlow runtime data */
207
- BASE: ".lumenflow",
208
- /** WU state store directory */
209
- STATE_DIR: ".lumenflow/state",
210
- /** Stamp directory (WU completion markers) */
211
- STAMPS_DIR: ".lumenflow/stamps",
212
- /** Archive directory for old WU events (WU-1430) */
213
- ARCHIVE_DIR: ".lumenflow/archive",
214
- /** Merge lock file (runtime coordination, WU-1747) */
215
- MERGE_LOCK: ".lumenflow/merge.lock",
216
- /** Base telemetry directory */
217
- TELEMETRY: ".lumenflow/telemetry",
218
- /** Flow log file (WU flow events) */
219
- FLOW_LOG: ".lumenflow/flow.log",
220
- /** Agent sessions directory */
221
- SESSIONS: ".lumenflow/sessions",
222
- /** Agent incidents directory */
223
- INCIDENTS: ".lumenflow/incidents",
224
- /** Git commands log file */
225
- COMMANDS_LOG: ".lumenflow/commands.log",
226
- /** Memory layer directory */
227
- MEMORY_DIR: ".lumenflow/memory",
228
- /** Memory layer JSONL file */
229
- MEMORY_JSONL: ".lumenflow/memory/memory.jsonl",
230
- /** WU-1539: Memory signals JSONL file */
231
- MEMORY_SIGNALS: ".lumenflow/memory/signals.jsonl",
232
- /** Audit log for tool calls */
233
- AUDIT_LOG: ".lumenflow/telemetry/tools.ndjson",
234
- /** Feedback drafts directory */
235
- FEEDBACK_DRAFTS: ".lumenflow/feedback-drafts",
236
- /** Feedback index file */
237
- FEEDBACK_INDEX: ".lumenflow/feedback-index.ndjson",
238
- /** Current session file */
239
- SESSION_CURRENT: ".lumenflow/sessions/current.json",
240
- /** WU events log */
241
- WU_EVENTS: ".lumenflow/state/wu-events.jsonl",
242
- /** Lock files directory (lane locks - persisted) */
243
- LOCKS_DIR: ".lumenflow/locks",
244
- /** Force bypass audit log */
245
- FORCE_BYPASSES: ".lumenflow/force-bypasses.log",
246
- /** WU-1539: Skip-gates audit log */
247
- SKIP_GATES_AUDIT: ".lumenflow/skip-gates-audit.log",
248
- /** WU-1539: Skip-COS-gates audit log */
249
- SKIP_COS_GATES_AUDIT: ".lumenflow/skip-cos-gates-audit.log",
250
- /** Test baseline file for ratchet pattern (WU-1430) */
251
- TEST_BASELINE: ".lumenflow/test-baseline.json",
252
- /** Templates directory (WU-1430) */
253
- TEMPLATES_DIR: ".lumenflow/templates",
254
- /** Spawn prompt templates (WU-1674) */
255
- SPAWN_PROMPT_DIR: ".lumenflow/templates/spawn-prompt",
256
- /** Template manifest file (WU-1430) */
257
- TEMPLATE_MANIFEST: ".lumenflow/templates/manifest.yaml",
258
- /** Skills directory for agent skills (WU-1430) */
259
- SKILLS_DIR: ".lumenflow/skills",
260
- /** Agents directory for agent definitions (WU-1430) */
261
- AGENTS_DIR: ".lumenflow/agents",
262
- /** Methodology log for delegation telemetry (WU-1430) */
263
- METHODOLOGY_LOG: ".lumenflow/telemetry/methodology.ndjson",
264
- /** Prompt metrics cache (WU-1430) */
265
- PROMPT_METRICS: ".lumenflow/telemetry/prompt-metrics.json",
266
- /** Prompt lint results (WU-1430) */
267
- PROMPT_LINT: ".lumenflow/telemetry/prompt-lint.ndjson",
268
- /** Recovery markers directory (WU-1430) */
269
- RECOVERY_DIR: ".lumenflow/recovery",
270
- /** Checkpoints directory (WU-1430) */
271
- CHECKPOINTS_DIR: ".lumenflow/checkpoints",
272
- /** WU-1471: Hook counters directory for auto-checkpoint interval tracking */
273
- HOOK_COUNTERS_DIR: ".lumenflow/state/hook-counters",
274
- /** Cache directory under user home (WU-1430) */
275
- HOME_CACHE: "cache",
276
- /**
277
- * WU-1174: Runtime lock directory for merge/cleanup locks
278
- *
279
- * These locks are transient and should NOT be created in the main checkout
280
- * because wu:done runs from main. Using os.tmpdir() ensures:
281
- * 1. Locks don't pollute the git working tree
282
- * 2. Locks work across processes on the same machine
283
- * 3. No "Working tree is not clean" errors if process crashes
284
- *
285
- * Note: Lane locks still use LOCKS_DIR (.lumenflow/locks) because they need
286
- * to persist across sessions and be visible to other agents.
287
- */
288
- LOCK_DIR: path.join(tmpdir(), LOCK_DIR_NAME)
289
- };
290
-
291
- // ../core/dist/wu-cli-constants.js
292
- var CLI_FLAGS = {
293
- // Common flags
294
- DRY_RUN: "--dry-run",
295
- EXECUTE: "--execute",
296
- HELP: "--help",
297
- HELP_SHORT: "-h",
298
- VERBOSE: "--verbose",
299
- FIX: "--fix",
300
- JSON: "--json",
301
- FORCE: "--force",
302
- // Gate-specific flags
303
- DOCS_ONLY: "--docs-only",
304
- FULL_LINT: "--full-lint",
305
- FULL_TESTS: "--full-tests",
306
- // WU-1920: Force full test suite
307
- FULL_COVERAGE: "--full-coverage",
308
- // WU-2244: Force full coverage (deterministic)
309
- COVERAGE_MODE: "--coverage-mode=",
310
- // WU-specific flags
311
- WU: "--wu",
312
- ID: "--id",
313
- ALL: "--all",
314
- CHECK: "--check",
315
- TIER: "--tier",
316
- AGENT_TYPE: "--agent-type",
317
- DESCRIPTION: "--description",
318
- ACCEPTANCE: "--acceptance",
319
- VALIDATE: "--validate",
320
- REASON: "--reason",
321
- WEEK: "--week",
322
- SINCE: "--since"
323
- };
324
- var PKG_FLAGS = {
325
- FILTER: "--filter",
326
- FROZEN_LOCKFILE: "--frozen-lockfile",
327
- /** WU-1527: Required for pnpm add at workspace root in monorepos */
328
- WORKSPACE_ROOT: "-w",
329
- SAVE_DEV: "--save-dev",
330
- SAVE_EXACT: "--save-exact"
331
- };
332
- var ESLINT_FLAGS = {
333
- MAX_WARNINGS: "--max-warnings",
334
- NO_WARN_IGNORED: "--no-warn-ignored",
335
- CACHE: "--cache",
336
- CACHE_STRATEGY: "--cache-strategy",
337
- CACHE_LOCATION: "--cache-location",
338
- PASS_ON_UNPRUNED: "--pass-on-unpruned-suppressions"
339
- };
340
- var SCRIPTS = {
341
- LINT: "lint",
342
- TEST: "test",
343
- TEST_UNIT: "test:unit",
344
- BUILD: "build",
345
- FORMAT: "format",
346
- FORMAT_CHECK: "format:check",
347
- TYPECHECK: "typecheck",
348
- DEV: "dev",
349
- SPEC_LINTER: "spec:linter",
350
- /** WU-1467: Stub script -- not an enforced gate. Retained for script surface only. */
351
- PROMPTS_LINT: "prompts:lint",
352
- RUN: "run",
353
- GATES: "gates",
354
- /** WU-1467: Stub script -- not an enforced gate. Retained for script surface only. */
355
- COS_GATES: "cos:gates",
356
- PRETTIER: "prettier",
357
- /** WU-1467: Root script surface for tasks:validate (delegates to wu:validate --all) */
358
- TASKS_VALIDATE: "tasks:validate"
359
- };
360
- var GATE_NAMES = {
361
- /** WU-2252: Invariants check (runs first, non-bypassable) */
362
- INVARIANTS: "invariants",
363
- FORMAT_CHECK: "format:check",
364
- SPEC_LINTER: "spec:linter",
365
- /** WU-1467: PROMPTS_LINT removed -- was a stub (exit 0), not an authoritative gate */
366
- BACKLOG_SYNC: "backlog-sync",
367
- /** WU-2009: Spec-to-code absolute claim drift detector */
368
- CLAIM_VALIDATION: "claim-validation",
369
- SUPABASE_DOCS_LINTER: "supabase-docs:linter",
370
- LINT: "lint",
371
- /** WU-2158: Generic co-change rule enforcement gate */
372
- CO_CHANGE: "co-change",
373
- TYPECHECK: "typecheck",
374
- TEST: "test",
375
- COVERAGE: "coverage",
376
- /** WU-2062: Safety-critical tests (always run) */
377
- SAFETY_CRITICAL_TEST: "safety-critical-test",
378
- /** WU-2062: Integration tests (for high-risk changes) */
379
- INTEGRATION_TEST: "integration-test",
380
- /** WU-1191: Lane health check (overlap detection) */
381
- LANE_HEALTH: "lane-health",
382
- /** WU-1315: Onboarding smoke test (init + wu:create validation) */
383
- ONBOARDING_SMOKE_TEST: "onboarding-smoke-test"
384
- };
385
- var GATE_COMMANDS = {
386
- /** WU-2252: Triggers invariants check */
387
- INVARIANTS: "invariants",
388
- /** Triggers incremental lint (only changed files) */
389
- INCREMENTAL: "incremental",
390
- /** Triggers incremental tests (only tests related to changed files) - WU-1920 */
391
- INCREMENTAL_TEST: "incremental-test",
392
- /** Triggers coverage gate check */
393
- COVERAGE_GATE: "coverage-gate",
394
- /** WU-2062: Triggers safety-critical tests (always run) */
395
- SAFETY_CRITICAL_TEST: "safety-critical-test",
396
- /** WU-2062: Triggers tiered test execution based on risk */
397
- TIERED_TEST: "tiered-test",
398
- /** WU-1315: Triggers onboarding smoke test */
399
- ONBOARDING_SMOKE_TEST: "onboarding-smoke-test"
400
- };
401
- var PRETTIER_FLAGS = {
402
- WRITE: "--write"
403
- };
404
- var PKG_MANAGER = "pnpm";
405
- var PKG_COMMANDS = {
406
- INSTALL: "install",
407
- /** WU-1527: Used by lumenflow-upgrade and deps-add */
408
- ADD: "add",
409
- REMOVE: "remove"
410
- };
411
- var PACKAGES = {
412
- WEB: "web",
413
- APPLICATION: "@lumenflow/core",
414
- DOMAIN: "@lumenflow/core",
415
- INFRASTRUCTURE: "@lumenflow/cli"
416
- };
417
- var STDIO = {
418
- /** Pipe stdout/stderr (capture output) */
419
- PIPE: "pipe",
420
- /** Inherit stdio from parent process */
421
- INHERIT: "inherit",
422
- /** Ignore stdio (silent execution) */
423
- IGNORE: "ignore"
424
- };
425
- var STDIO_MODES = {
426
- /** Inherit stdio from parent process (shows output in console) */
427
- INHERIT: "inherit",
428
- /** Pipe stdio to parent process (capture output) */
429
- PIPE: "pipe",
430
- /** Ignore stdio (discard output) */
431
- IGNORE: "ignore"
432
- };
433
- var EXIT_CODES = {
434
- /** Success exit code */
435
- SUCCESS: 0,
436
- /** Generic error exit code */
437
- ERROR: 1,
438
- /** Fatal or distinct failure exit code */
439
- FAILURE: 2
440
- };
441
- var STREAM_ERRORS = {
442
- /**
443
- * EPIPE error code
444
- *
445
- * Occurs when writing to a pipe whose read end has been closed.
446
- * This is normal behavior when CLI output is piped through head/tail.
447
- * Unix convention: exit with code 0 on EPIPE (consumer got what it needed).
448
- */
449
- EPIPE: "EPIPE"
450
- };
451
- var ESLINT_COMMANDS = {
452
- /** ESLint CLI command */
453
- ESLINT: "eslint"
454
- };
455
- var ESLINT_DEFAULTS = {
456
- /**
457
- * Maximum allowed warnings
458
- *
459
- * WU-1866: Temporarily increased from 0 to 100 to unblock gates.
460
- * There are ~82 pre-existing warnings that need proper fixes.
461
- */
462
- MAX_WARNINGS: "100"
463
- };
464
- var CACHE_STRATEGIES = {
465
- CONTENT: "content",
466
- METADATA: "metadata"
467
- };
468
- var PRETTIER_ARGS = {
469
- /** Check formatting without writing */
470
- CHECK: "--check",
471
- /** List files with formatting differences */
472
- LIST_DIFFERENT: "--list-different"
473
- };
474
- var MICRO_WORKTREE_OPERATIONS = {
475
- WU_CREATE: "wu-create",
476
- WU_EDIT: "wu-edit",
477
- WU_DELETE: "wu-delete",
478
- // WU-1809: Safe WU deletion
479
- WU_DONE: "wu-done",
480
- WU_BLOCK: "wu-block",
481
- WU_UNBLOCK: "wu-unblock",
482
- WU_CLAIM: "wu-claim",
483
- ORPHAN_REPAIR: "orphan-repair",
484
- // WU-1437: Pre-claim orphan WU repair
485
- INITIATIVE_EDIT: "initiative-edit",
486
- // WU-1451: Initiative edit operation
487
- INITIATIVE_BULK_ASSIGN: "initiative-bulk-assign",
488
- // WU-2553: Bulk WU assignment
489
- LANE_EDIT: "lane-edit",
490
- // WU-1854: Safe in-place lane definition editing
491
- WU_ESCALATE: "wu-escalate"
492
- // WU-2225: Resolve escalation triggers
493
- };
494
- var TELEMETRY_STEPS = {
495
- GATES: "gates",
496
- /** WU-1467: COS_GATES removed -- was a stub (exit 0), not an authoritative step */
497
- PARALLEL_DETECTION: "parallel_detection",
498
- PARALLEL_AUTO_REBASE: "parallel_auto_rebase"
499
- };
500
- var SKIP_GATES_REASONS = {
501
- CHECKPOINT_VALID: "checkpoint_valid"
502
- };
503
- var CHECKPOINT_MESSAGES = {
504
- SKIPPING_GATES_VALID: "Skipping gates - valid checkpoint found",
505
- CHECKPOINT_LABEL: "Checkpoint",
506
- GATES_PASSED_AT: "Gates passed at",
507
- COULD_NOT_CREATE: "Could not create WU-1747 checkpoint"
508
- };
509
- var PROCESS_DETECTION = {
510
- /**
511
- * Process names that commonly interfere with gates execution.
512
- * These processes may:
513
- * - Write to stdout/stderr (causing mixed output)
514
- * - Hold file locks that may cause test failures
515
- * - Consume resources that affect gate performance
516
- */
517
- INTERFERING_NAMES: ["node", "pnpm", "npm", "vitest", "tsx", "eslint", "prettier", "tsc", "turbo"],
518
- /** Maximum characters to display for command in warnings */
519
- CMD_DISPLAY_LIMIT: 60
520
- };
521
-
522
- // ../core/dist/wu-ui-constants.js
523
- var BACKLOG_SECTIONS = {
524
- READY: "## \u{1F680} Ready (pull from here)",
525
- IN_PROGRESS: "## \u{1F527} In progress",
526
- BLOCKED: "## \u26D4 Blocked",
527
- DONE: "## \u2705 Done"
528
- };
529
- var STATUS_SECTIONS = {
530
- IN_PROGRESS: "## In Progress",
531
- BLOCKED: "## Blocked",
532
- COMPLETED: "## Completed"
533
- };
534
- var LOG_PREFIX = {
535
- DONE: "[wu-done]",
536
- CLAIM: "[wu-claim]",
537
- CREATE: "[wu:create]",
538
- EDIT: "[wu:edit]",
539
- DELETE: "[wu:delete]",
540
- BLOCK: "[wu-block]",
541
- UNBLOCK: "[wu-unblock]",
542
- UNLOCK_LANE: "[wu-unlock-lane]",
543
- CLEANUP: "[wu-cleanup]",
544
- PRUNE: "[wu-prune]",
545
- REPAIR: "[wu:repair]",
546
- CONSISTENCY: "[wu-consistency]",
547
- PREFLIGHT: "[wu-preflight]",
548
- INITIATIVE_PLAN: "[initiative:plan]",
549
- PLAN_CREATE: "[plan:create]",
550
- PLAN_LINK: "[plan:link]",
551
- PLAN_EDIT: "[plan:edit]",
552
- PLAN_PROMOTE: "[plan:promote]",
553
- ESCALATE: "[wu:escalate]"
554
- };
555
- var EMOJI = {
556
- SUCCESS: "\u2705",
557
- FAILURE: "\u274C",
558
- WARNING: "\u26A0\uFE0F",
559
- INFO: "\u2139\uFE0F",
560
- BLOCKED: "\u26D4",
561
- ROCKET: "\u{1F680}",
562
- WRENCH: "\u{1F527}",
563
- TARGET: "\u{1F3AF}",
564
- MEMO: "\u{1F4DD}",
565
- FOLDER: "\u{1F4CD}"
566
- };
567
- var BOX = {
568
- /** Top border: ╔══...══╗ (66 chars inside + corners = 68 total) */
569
- TOP: "\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557",
570
- /** Middle separator: ╠══...══╣ */
571
- MID: "\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563",
572
- /** Bottom border: ╚══...══╝ */
573
- BOT: "\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D",
574
- /** Side border for content lines */
575
- SIDE: "\u2551"
576
- };
577
- var UI = {
578
- /** Width for error/info boxes in console output */
579
- ERROR_BOX_WIDTH: 70,
580
- /** Number of lines to show in status file preview */
581
- STATUS_PREVIEW_LINES: 5
582
- };
583
- var YAML_OPTIONS = {
584
- /** Standard line width for YAML dump (100 chars) */
585
- LINE_WIDTH: 100,
586
- /** No line wrapping (-1 disables wrapping) */
587
- NO_WRAP: -1
588
- };
589
- var STRING_LITERALS = {
590
- /** Newline character */
591
- NEWLINE: "\n",
592
- /** Double newline (paragraph separator) */
593
- DOUBLE_NEWLINE: "\n\n",
594
- /** Space character */
595
- SPACE: " ",
596
- /** Empty string */
597
- EMPTY: "",
598
- /** Tab character */
599
- TAB: " ",
600
- /** Comma separator */
601
- COMMA: ",",
602
- /** Colon separator */
603
- COLON: ":",
604
- /** Dash/hyphen */
605
- DASH: "-",
606
- /** Forward slash */
607
- SLASH: "/"
608
- };
609
- var READINESS_UI = {
610
- /** Box width (inner content area) */
611
- BOX_WIDTH: 50,
612
- /** Box drawing characters */
613
- BOX: {
614
- TOP_LEFT: "\u250C",
615
- TOP_RIGHT: "\u2510",
616
- BOTTOM_LEFT: "\u2514",
617
- BOTTOM_RIGHT: "\u2518",
618
- HORIZONTAL: "\u2500",
619
- VERTICAL: "\u2502"
620
- },
621
- /** Status messages */
622
- MESSAGES: {
623
- READY_YES: "\u2705 Ready to claim: YES",
624
- READY_NO: "\u26A0\uFE0F Ready to claim: NO",
625
- MISSING_HEADER: "Missing:",
626
- BULLET: "\u2022"
627
- },
628
- /** Error truncation length */
629
- ERROR_MAX_LENGTH: 46,
630
- ERROR_TRUNCATE_LENGTH: 43,
631
- TRUNCATION_SUFFIX: "...",
632
- /** Padding calculations (relative to BOX_WIDTH) */
633
- PADDING: {
634
- READY_YES: 27,
635
- // 50 - len("... Ready to claim: YES") - 1
636
- READY_NO: 28,
637
- // 50 - len("... Ready to claim: NO") - 1
638
- MISSING_HEADER: 41,
639
- // 50 - len("Missing:") - 1
640
- ERROR_BULLET: 45
641
- // 50 - len(" ... ") - 1
642
- }
643
- };
644
-
645
- // ../core/dist/wu-domain-constants.js
646
- import path2 from "path";
647
- import { kebabCase } from "change-case";
648
- var PATTERNS = {
649
- /** WU identifier format: WU-123 */
650
- WU_ID: /^WU-\d+$/,
651
- /** Extract WU ID from text: captures "WU-123" */
652
- WU_ID_EXTRACT: /WU-\d+/,
653
- /**
654
- * Extract WU ID from worktree paths (case-insensitive)
655
- *
656
- * WU-1090: Worktree names use lowercase like 'framework-core-wu-1090'
657
- * This pattern matches both 'WU-123' and 'wu-123' to support
658
- * extracting WU IDs from worktree paths.
659
- */
660
- WU_ID_EXTRACT_CI: /wu-\d+/i,
661
- /** Lane branch format: lane/<lane-kebab>/wu-<id> */
662
- LANE_BRANCH: /^lane\/[\w-]+\/wu-\d+$/,
663
- /** Worktree path format: worktrees/<lane-kebab>-wu-<id> */
664
- WORKTREE_PATH: /^worktrees\/[\w-]+-wu-\d+$/
665
- };
666
- var COMMIT_FORMATS = {
667
- CLAIM: (id, laneKebab) => `wu(${id}): claim for ${laneKebab} lane`,
668
- DONE: (id, title) => `wu(${id}): done - ${title}`,
669
- CREATE: (id, title) => `docs: create ${id.toLowerCase()} for ${title}`,
670
- EDIT: (id) => `docs: edit ${id.toLowerCase()} spec`,
671
- SPEC_UPDATE: (id) => `wu(${id.toLowerCase()}): spec update`,
672
- BLOCK: (id) => `wu(${id}): block`,
673
- UNBLOCK: (id) => `wu(${id}): unblock`,
674
- REPAIR: (id) => `fix(${id}): repair state inconsistency`,
675
- REBASE_ARTIFACT_CLEANUP: (id) => `chore(${id.toLowerCase()}): remove rebased completion artifacts`,
676
- BACKLOG_REPAIR: (id) => `chore(repair): repair backlog duplicates for ${id.toLowerCase()}`,
677
- ESCALATE: (id) => `wu(${id.toLowerCase()}): resolve escalation`
678
- };
679
- var CONSISTENCY_TYPES = {
680
- /** WU YAML has status 'done' but WU appears in status.md In Progress section */
681
- YAML_DONE_STATUS_IN_PROGRESS: "YAML_DONE_STATUS_IN_PROGRESS",
682
- /** WU appears in both Done AND In Progress sections of backlog.md */
683
- BACKLOG_DUAL_SECTION: "BACKLOG_DUAL_SECTION",
684
- /** WU YAML has status 'done' but no stamp file exists */
685
- YAML_DONE_NO_STAMP: "YAML_DONE_NO_STAMP",
686
- /** WU has status 'done' but still has an associated worktree */
687
- ORPHAN_WORKTREE_DONE: "ORPHAN_WORKTREE_DONE",
688
- /** Stamp file exists but WU YAML status is not 'done' (partial wu:done failure) */
689
- STAMP_EXISTS_YAML_NOT_DONE: "STAMP_EXISTS_YAML_NOT_DONE",
690
- /** WU is claimed but its worktree directory is missing */
691
- MISSING_WORKTREE_CLAIMED: "MISSING_WORKTREE_CLAIMED"
692
- };
693
- var CONSISTENCY_MESSAGES = {
694
- MISSING_WORKTREE_CLAIMED: (id, status, worktreePath) => `WU ${id} is '${status}' but worktree path is missing (${worktreePath})`,
695
- MISSING_WORKTREE_CLAIMED_REPAIR: "Recover worktree or re-claim WU"
696
- };
697
- var WORKTREE_WARNINGS = {
698
- MISSING_TRACKED_HEADER: "Tracked worktrees missing on disk (possible manual deletion):",
699
- MISSING_TRACKED_LINE: (worktreePath) => `Missing: ${worktreePath}`
700
- };
701
- var CLEANUP_GUARD = {
702
- REASONS: {
703
- UNCOMMITTED_CHANGES: "UNCOMMITTED_CHANGES",
704
- UNPUSHED_COMMITS: "UNPUSHED_COMMITS",
705
- STATUS_NOT_DONE: "STATUS_NOT_DONE",
706
- MISSING_STAMP: "MISSING_STAMP",
707
- PR_NOT_MERGED: "PR_NOT_MERGED"
708
- },
709
- TITLES: {
710
- BLOCKED: "CLEANUP BLOCKED",
711
- NEXT_STEPS: "Next steps:"
712
- },
713
- MESSAGES: {
714
- UNCOMMITTED_CHANGES: "Worktree has uncommitted changes. Refusing to delete.",
715
- UNPUSHED_COMMITS: "Worktree has unpushed commits. Refusing to delete.",
716
- STATUS_NOT_DONE: "WU YAML status is not done. Refusing to delete.",
717
- MISSING_STAMP: "WU stamp is missing. Refusing to delete.",
718
- PR_NOT_MERGED: "PR is not merged (or cannot be verified). Refusing to delete."
719
- },
720
- /* eslint-disable sonarjs/no-duplicate-string -- Intentional: cleanup instructions repeated for each error type for readability */
721
- NEXT_STEPS: {
722
- DEFAULT: [
723
- { text: "1. Resolve the issue above", appendId: false },
724
- { text: "2. Re-run: pnpm wu:cleanup --id", appendId: true }
725
- ],
726
- UNCOMMITTED_CHANGES: [
727
- { text: "1. Commit or stash changes in the worktree", appendId: false },
728
- { text: "2. Re-run: pnpm wu:cleanup --id", appendId: true }
729
- ],
730
- UNPUSHED_COMMITS: [
731
- { text: "1. Push the lane branch to origin", appendId: false },
732
- { text: "2. Re-run: pnpm wu:cleanup --id", appendId: true }
733
- ],
734
- STATUS_NOT_DONE: [
735
- {
736
- text: `1. Complete the WU with ${LOG_PREFIX.DONE} (creates stamp + done status)`,
737
- appendId: false
738
- },
739
- { text: "2. Re-run: pnpm wu:cleanup --id", appendId: true }
740
- ],
741
- MISSING_STAMP: [
742
- { text: "1. Run wu:done to create the stamp file", appendId: false },
743
- { text: "2. Re-run: pnpm wu:cleanup --id", appendId: true }
744
- ],
745
- PR_NOT_MERGED: [
746
- { text: "1. Merge the PR in GitHub", appendId: false },
747
- { text: "2. Re-run: pnpm wu:cleanup --id", appendId: true }
748
- ]
749
- },
750
- /* eslint-enable sonarjs/no-duplicate-string */
751
- PR_CHECK: {
752
- START: "Verifying PR merge status...",
753
- RESULT: "PR merge verification via"
754
- }
755
- };
756
- var SESSION = {
757
- /** Standard length for displaying session ID prefix (e.g., "sess-123") */
758
- ID_DISPLAY_LENGTH: 8
759
- };
760
- var VALIDATION = {
761
- /** Minimum description length for WU spec completeness */
762
- MIN_DESCRIPTION_LENGTH: 50
763
- };
764
- var THRESHOLDS = {
765
- /** Info threshold: commits behind main to suggest rebasing (WU-1370) */
766
- BRANCH_DRIFT_INFO: 10,
767
- /** Warning threshold: commits behind main where rebase is recommended (WU-1370) */
768
- BRANCH_DRIFT_WARNING: 15,
769
- /** Maximum commits behind main before requiring rebase (WU-755 pre-flight) */
770
- BRANCH_DRIFT_MAX: 20
771
- };
772
- var DEFAULTS = {
773
- /** Default worktrees directory */
774
- WORKTREES_DIR: "worktrees",
775
- /** Maximum commit subject length (commitlint default) */
776
- MAX_COMMIT_SUBJECT: 100,
777
- /** Parent directory traversal depth from tools/lib to project root */
778
- PROJECT_ROOT_DEPTH: 2,
779
- /**
780
- * Default email domain for username -> email conversion
781
- * WU-1068: Made configurable, no longer hardcoded to exampleapp.co.uk
782
- * @see user-normalizer.ts - Infers from git config first
783
- */
784
- EMAIL_DOMAIN: "example.com"
785
- };
786
- var WU_DEFAULTS = {
787
- /** Default priority level (medium priority) */
788
- priority: "P2",
789
- /** Default status for new WUs */
790
- status: "ready",
791
- /** Default work type */
792
- type: "feature",
793
- /** Default code paths (empty until populated) */
794
- code_paths: [],
795
- /** Default test structure (includes all test types) */
796
- tests: {
797
- manual: [],
798
- unit: [],
799
- integration: [],
800
- e2e: []
801
- },
802
- /** Default artifacts (empty - wu:done adds stamp) */
803
- artifacts: [],
804
- /** Default dependencies (no blockers) */
805
- dependencies: [],
806
- /** Default risks (none identified) */
807
- risks: [],
808
- /** Default notes (empty string, not undefined) */
809
- notes: "",
810
- /** Default review requirement (agent-completed WUs) */
811
- requires_review: false
812
- };
813
- var SAFETY_CRITICAL_TEST_GLOBS = Object.freeze([
814
- // Escalation trigger tests
815
- "apps/web/src/**/*escalation*.test.{ts,tsx}",
816
- "apps/web/src/**/*Escalation*.test.{ts,tsx}",
817
- // Privacy detection tests
818
- "apps/web/src/**/*privacy*.test.{ts,tsx}",
819
- "apps/web/src/**/*Privacy*.test.{ts,tsx}",
820
- // Constitutional enforcer tests
821
- "apps/web/src/**/*constitutional*.test.{ts,tsx}",
822
- "apps/web/src/**/*Constitutional*.test.{ts,tsx}",
823
- // Safe prompt wrapper tests
824
- "apps/web/src/**/*safePrompt*.test.{ts,tsx}",
825
- "apps/web/src/**/*SafePrompt*.test.{ts,tsx}",
826
- // Crisis/emergency handling tests
827
- "apps/web/src/**/*crisis*.test.{ts,tsx}",
828
- "apps/web/src/**/*Crisis*.test.{ts,tsx}"
829
- ]);
830
- var LANE_PATH_PATTERNS = {
831
- Operations: {
832
- exclude: ["ai/prompts/**", "apps/web/src/lib/prompts/**"],
833
- allowExceptions: []
834
- },
835
- Intelligence: {
836
- exclude: ["tools/**"],
837
- allowExceptions: ["tools/lib/prompt-*", "tools/prompts-eval/**"]
838
- }
839
- };
840
- function toKebab(lane) {
841
- if (lane == null)
842
- return "";
843
- const normalized = String(lane).trim();
844
- if (normalized === "")
845
- return "";
846
- return kebabCase(normalized);
847
- }
848
- function getWorktreePath(lane, id) {
849
- const laneKebab = toKebab(lane);
850
- const idLower = id.toLowerCase();
851
- return `${DEFAULTS.WORKTREES_DIR}/${laneKebab}-${idLower}`;
852
- }
853
- function getLaneBranch(lane, id) {
854
- const laneKebab = toKebab(lane);
855
- const idLower = id.toLowerCase();
856
- return `lane/${laneKebab}/${idLower}`;
857
- }
858
- function getProjectRoot(moduleUrl) {
859
- const { dirname } = path2;
860
- const currentDir = dirname(new URL(moduleUrl).pathname);
861
- let root = currentDir;
862
- for (let i = 0; i < DEFAULTS.PROJECT_ROOT_DEPTH; i++) {
863
- root = dirname(root);
864
- }
865
- return root;
866
- }
867
-
868
- // ../core/dist/wu-context-constants.js
869
- function getSizingGuideRef() {
870
- try {
871
- return getConfig().directories.sizingGuidePath;
872
- } catch {
873
- return DOCS_LAYOUT_PRESETS.simple.sizingGuidePath;
874
- }
875
- }
876
- var CONTEXT_VALIDATION = {
877
- /** Location types for WU operations */
878
- LOCATION_TYPES: {
879
- /** Main checkout (not a worktree) */
880
- MAIN: "main",
881
- /** Inside a worktree */
882
- WORKTREE: "worktree",
883
- /** Detached HEAD state */
884
- DETACHED: "detached",
885
- /** Unknown location (not a git repo or error) */
886
- UNKNOWN: "unknown"
887
- },
888
- /** Validation error codes */
889
- ERROR_CODES: {
890
- /** Command run from wrong location type */
891
- WRONG_LOCATION: "WRONG_LOCATION",
892
- /** Target WU does not exist */
893
- WU_NOT_FOUND: "WU_NOT_FOUND",
894
- /** WU with this ID already exists */
895
- WU_ALREADY_EXISTS: "WU_ALREADY_EXISTS",
896
- /** WU in unexpected status for command */
897
- WRONG_WU_STATUS: "WRONG_WU_STATUS",
898
- /** Lane already has WU in progress */
899
- LANE_OCCUPIED: "LANE_OCCUPIED",
900
- /** Worktree already exists for WU */
901
- WORKTREE_EXISTS: "WORKTREE_EXISTS",
902
- /** Expected worktree not found */
903
- WORKTREE_MISSING: "WORKTREE_MISSING",
904
- /** Gates haven't run or failed */
905
- GATES_NOT_PASSED: "GATES_NOT_PASSED",
906
- /** Uncommitted changes exist */
907
- DIRTY_GIT: "DIRTY_GIT",
908
- /** Cannot reach origin remote */
909
- REMOTE_UNAVAILABLE: "REMOTE_UNAVAILABLE",
910
- /** YAML and state store disagree */
911
- INCONSISTENT_STATE: "INCONSISTENT_STATE"
912
- },
913
- /** Recovery action types */
914
- RECOVERY_ACTIONS: {
915
- /** Reconcile state and continue working (preserves work) */
916
- RESUME: "resume",
917
- /** Discard worktree, reset WU to ready */
918
- RESET: "reset",
919
- /** Remove all artifacts completely (requires --force) */
920
- NUKE: "nuke",
921
- /** Remove leftover worktree (for done WUs) */
922
- CLEANUP: "cleanup",
923
- /** Complete a WU that is already merged but not stamped (WU-1746) */
924
- COMPLETE: "complete"
925
- },
926
- /** Recovery issue codes */
927
- RECOVERY_ISSUES: {
928
- /** Worktree exists but WU status is "ready" */
929
- PARTIAL_CLAIM: "PARTIAL_CLAIM",
930
- /** WU is "in_progress" but worktree does not exist */
931
- ORPHAN_CLAIM: "ORPHAN_CLAIM",
932
- /** YAML status differs from state store */
933
- INCONSISTENT_STATE: "INCONSISTENT_STATE",
934
- /** Branch exists but worktree does not */
935
- ORPHAN_BRANCH: "ORPHAN_BRANCH",
936
- /** Lock file from different WU */
937
- STALE_LOCK: "STALE_LOCK",
938
- /** WU is done but worktree was not cleaned up */
939
- LEFTOVER_WORKTREE: "LEFTOVER_WORKTREE",
940
- /** WU branch is merged to main but WU is not stamped as done (WU-1746) */
941
- MERGED_NOT_DONE: "MERGED_NOT_DONE"
942
- },
943
- /** Predicate severity levels */
944
- SEVERITY: {
945
- /** Blocks command execution */
946
- ERROR: "error",
947
- /** Shows warning but allows execution */
948
- WARNING: "warning"
949
- },
950
- /** Performance thresholds */
951
- THRESHOLDS: {
952
- /** Max context computation time (ms) - acceptance criterion */
953
- CONTEXT_COMPUTATION_MS: 100,
954
- /** Max stale lock age (hours) */
955
- STALE_LOCK_HOURS: 24
956
- },
957
- /** Feature flag keys for workspace.yaml */
958
- FEATURE_FLAGS: {
959
- /** Enable context-aware validation */
960
- CONTEXT_VALIDATION: "context_validation",
961
- /** Validation behavior: 'off' | 'warn' | 'error' */
962
- VALIDATION_MODE: "validation_mode",
963
- /** Show next steps after successful commands */
964
- SHOW_NEXT_STEPS: "show_next_steps",
965
- /** Enable wu:recover command */
966
- RECOVERY_COMMAND: "recovery_command"
967
- },
968
- /** Validation modes */
969
- VALIDATION_MODES: {
970
- /** No validation (legacy behavior) */
971
- OFF: "off",
972
- /** Show warnings but proceed */
973
- WARN: "warn",
974
- /** Block on validation failures */
975
- ERROR: "error"
976
- },
977
- /** Command names for the registry */
978
- COMMANDS: {
979
- WU_CREATE: "wu:create",
980
- WU_CLAIM: "wu:claim",
981
- WU_PREP: "wu:prep",
982
- WU_DONE: "wu:done",
983
- WU_BLOCK: "wu:block",
984
- WU_UNBLOCK: "wu:unblock",
985
- WU_STATUS: "wu:status",
986
- WU_RECOVER: "wu:recover",
987
- GATES: "gates"
988
- }
989
- };
990
- var ENV_VARS = {
991
- /** Headless mode for non-interactive execution */
992
- HEADLESS: "LUMENFLOW_HEADLESS",
993
- /** Admin mode for elevated operations */
994
- ADMIN: "LUMENFLOW_ADMIN",
995
- /** Force bypass for git hooks */
996
- FORCE: "LUMENFLOW_FORCE",
997
- /** Reason for force bypass (audit trail) */
998
- FORCE_REASON: "LUMENFLOW_FORCE_REASON",
999
- /** Identifies the WU tool performing a git operation */
1000
- WU_TOOL: "LUMENFLOW_WU_TOOL",
1001
- /** Allows worktree removal operations */
1002
- WORKTREE_REMOVE_ALLOWED: "LUMENFLOW_WORKTREE_REMOVE_ALLOWED",
1003
- /** Claude Code agent detection */
1004
- CLAUDE_CODE: "CLAUDE_CODE",
1005
- /** Cloud mode for branch-PR workflows */
1006
- CLOUD: "LUMENFLOW_CLOUD",
1007
- /** LumenFlow home directory override */
1008
- HOME: "LUMENFLOW_HOME",
1009
- /** Test baseline path override */
1010
- TEST_BASELINE: "LUMENFLOW_TEST_BASELINE",
1011
- /** Legacy rollback mode */
1012
- LEGACY_ROLLBACK: "LUMENFLOW_LEGACY_ROLLBACK",
1013
- /** Git shim recursion guard */
1014
- GIT_SHIM_ACTIVE: "LUMENFLOW_GIT_SHIM_ACTIVE",
1015
- /** pnpm shim recursion guard */
1016
- PNPM_SHIM_ACTIVE: "LUMENFLOW_PNPM_SHIM_ACTIVE",
1017
- /** Agent session identifier */
1018
- AGENT_SESSION: "LUMENFLOW_AGENT_SESSION",
1019
- /** MCP project root override */
1020
- PROJECT_ROOT: "LUMENFLOW_PROJECT_ROOT",
1021
- /** MCP log level override */
1022
- MCP_LOG_LEVEL: "LUMENFLOW_MCP_LOG_LEVEL",
1023
- /** MCP migration compatibility mode */
1024
- MCP_MIGRATION_COMPAT_MODE: "LUMENFLOW_MCP_MIGRATION_COMPAT_MODE",
1025
- /** Sandbox allow unsandboxed override */
1026
- SANDBOX_ALLOW_UNSANDBOXED: "LUMENFLOW_SANDBOX_ALLOW_UNSANDBOXED",
1027
- /** Control plane auth token */
1028
- CONTROL_PLANE_TOKEN: "LUMENFLOW_CONTROL_PLANE_TOKEN",
1029
- /** Custom git binary path */
1030
- GIT_BINARY: "LUMENFLOW_GIT_BINARY",
1031
- /** Registry auth token for pack publishing */
1032
- REGISTRY_TOKEN: "LUMENFLOW_REGISTRY_TOKEN",
1033
- /** Agent log directory override */
1034
- LOG_DIR: "LUMENFLOW_LOG_DIR",
1035
- /** CI environment marker */
1036
- CI: "CI",
1037
- /** GitHub Actions environment marker */
1038
- GITHUB_ACTIONS: "GITHUB_ACTIONS",
1039
- /** Debug logging toggle */
1040
- DEBUG: "DEBUG",
1041
- /** Hostname provided by runtime/container */
1042
- HOSTNAME: "HOSTNAME",
1043
- /** Git author email override */
1044
- GIT_AUTHOR_EMAIL: "GIT_AUTHOR_EMAIL",
1045
- /** Git editor override used for non-interactive rebase flows */
1046
- GIT_EDITOR: "GIT_EDITOR",
1047
- /** Optional user identity used by wu:done preflight */
1048
- GIT_USER: "GIT_USER",
1049
- /** Shell user identity fallback */
1050
- USER: "USER",
1051
- /** User profile path fallback on Windows */
1052
- USERPROFILE: "USERPROFILE",
1053
- /** Explicit color disable flag */
1054
- NO_COLOR: "NO_COLOR",
1055
- /** Explicit color level override */
1056
- FORCE_COLOR: "FORCE_COLOR",
1057
- /** Verbose validate output toggle */
1058
- VERBOSE: "VERBOSE",
1059
- /** Test-mode toggle for command logging */
1060
- TEST_MODE: "TEST_MODE",
1061
- /** Test-only branch override for command logging */
1062
- TEST_BRANCH: "TEST_BRANCH",
1063
- /** Test-only worktree override for command logging */
1064
- TEST_WORKTREE: "TEST_WORKTREE",
1065
- /** Stale lock threshold override (hours) */
1066
- STALE_LOCK_THRESHOLD_HOURS: "STALE_LOCK_THRESHOLD_HOURS",
1067
- /** Claude project directory provided by client runtime */
1068
- CLAUDE_PROJECT_DIR: "CLAUDE_PROJECT_DIR"
1069
- };
1070
- var SIZING_GUIDE_REF = getSizingGuideRef();
1071
- var CLAUDE_HOOKS = {
1072
- /** Hook script filenames */
1073
- SCRIPTS: {
1074
- ENFORCE_WORKTREE: "enforce-worktree.sh",
1075
- REQUIRE_WU: "require-wu.sh",
1076
- WARN_INCOMPLETE: "warn-incomplete.sh",
1077
- PRE_COMPACT_CHECKPOINT: "pre-compact-checkpoint.sh",
1078
- SESSION_START_RECOVERY: "session-start-recovery.sh",
1079
- /** WU-1471: Auto-checkpoint hook for PostToolUse and SubagentStop events */
1080
- AUTO_CHECKPOINT: "auto-checkpoint.sh"
1081
- },
1082
- /** Hook command path prefix (uses Claude Code's $CLAUDE_PROJECT_DIR variable) */
1083
- PATH_PREFIX: "$CLAUDE_PROJECT_DIR/.claude/hooks",
1084
- /** Hook matchers for settings.json */
1085
- MATCHERS: {
1086
- ALL: ".*",
1087
- WRITE_EDIT: "Write|Edit",
1088
- COMPACT: "compact",
1089
- RESUME: "resume",
1090
- CLEAR: "clear",
1091
- /** WU-1471: Matcher for SubagentStop hook event */
1092
- SUBAGENT_STOP: ".*",
1093
- /** WU-1502: Matcher for Bash tool PostToolUse */
1094
- BASH: "Bash"
1095
- },
1096
- /** Template paths (relative to templates directory) */
1097
- TEMPLATES: {
1098
- SETTINGS: "vendors/claude/.claude/settings.json.template",
1099
- PRE_COMPACT: "vendors/claude/.claude/hooks/pre-compact-checkpoint.sh",
1100
- SESSION_START: "vendors/claude/.claude/hooks/session-start-recovery.sh"
1101
- }
1102
- };
1103
- var getHookCommand = (scriptName) => `${CLAUDE_HOOKS.PATH_PREFIX}/${scriptName}`;
1104
-
1105
- export {
1106
- BRANCHES,
1107
- REMOTES,
1108
- GIT_REFS,
1109
- GIT,
1110
- REAL_GIT,
1111
- GIT_FLAGS,
1112
- GIT_COMMANDS,
1113
- FILE_SYSTEM,
1114
- CONFIG_FILES,
1115
- DIRECTORIES,
1116
- BUILD_ARTIFACT_GLOBS,
1117
- BUILD_ARTIFACT_IGNORES,
1118
- FILE_EXTENSIONS,
1119
- PATH_LITERALS,
1120
- PATH_SLICE_LENGTHS,
1121
- LOCK_DIR_NAME,
1122
- LUMENFLOW_PATHS,
1123
- CLI_FLAGS,
1124
- PKG_FLAGS,
1125
- ESLINT_FLAGS,
1126
- SCRIPTS,
1127
- GATE_NAMES,
1128
- GATE_COMMANDS,
1129
- PRETTIER_FLAGS,
1130
- PKG_MANAGER,
1131
- PKG_COMMANDS,
1132
- PACKAGES,
1133
- STDIO,
1134
- STDIO_MODES,
1135
- EXIT_CODES,
1136
- STREAM_ERRORS,
1137
- ESLINT_COMMANDS,
1138
- ESLINT_DEFAULTS,
1139
- CACHE_STRATEGIES,
1140
- PRETTIER_ARGS,
1141
- MICRO_WORKTREE_OPERATIONS,
1142
- TELEMETRY_STEPS,
1143
- SKIP_GATES_REASONS,
1144
- CHECKPOINT_MESSAGES,
1145
- PROCESS_DETECTION,
1146
- BACKLOG_SECTIONS,
1147
- STATUS_SECTIONS,
1148
- LOG_PREFIX,
1149
- EMOJI,
1150
- BOX,
1151
- UI,
1152
- YAML_OPTIONS,
1153
- STRING_LITERALS,
1154
- READINESS_UI,
1155
- PATTERNS,
1156
- COMMIT_FORMATS,
1157
- CONSISTENCY_TYPES,
1158
- CONSISTENCY_MESSAGES,
1159
- WORKTREE_WARNINGS,
1160
- CLEANUP_GUARD,
1161
- SESSION,
1162
- VALIDATION,
1163
- THRESHOLDS,
1164
- DEFAULTS,
1165
- WU_DEFAULTS,
1166
- LANE_PATH_PATTERNS,
1167
- toKebab,
1168
- getWorktreePath,
1169
- getLaneBranch,
1170
- getProjectRoot,
1171
- CONTEXT_VALIDATION,
1172
- ENV_VARS,
1173
- SIZING_GUIDE_REF,
1174
- CLAUDE_HOOKS,
1175
- getHookCommand
1176
- };