@lumenflow/cli 4.24.0 → 5.0.1

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 (287) hide show
  1. package/README.md +54 -52
  2. package/dist/agent-issues-query.js +10 -2
  3. package/dist/agent-issues-query.js.map +1 -1
  4. package/dist/agent-runtime-enrollment-events.js +44 -0
  5. package/dist/agent-runtime-enrollment-events.js.map +1 -0
  6. package/dist/agent-session-end.js +47 -0
  7. package/dist/agent-session-end.js.map +1 -1
  8. package/dist/agent-session-heartbeat.js +250 -0
  9. package/dist/agent-session-heartbeat.js.map +1 -0
  10. package/dist/agent-session.js +299 -5
  11. package/dist/agent-session.js.map +1 -1
  12. package/dist/capacity-snapshot-emitter.js +73 -0
  13. package/dist/capacity-snapshot-emitter.js.map +1 -0
  14. package/dist/claim-queue.js +276 -0
  15. package/dist/claim-queue.js.map +1 -0
  16. package/dist/config-set.js +22 -3
  17. package/dist/config-set.js.map +1 -1
  18. package/dist/control-plane-sidecar-runner.js +145 -0
  19. package/dist/control-plane-sidecar-runner.js.map +1 -0
  20. package/dist/delegation-list.js +160 -1
  21. package/dist/delegation-list.js.map +1 -1
  22. package/dist/delegation-role-resolver.js +69 -0
  23. package/dist/delegation-role-resolver.js.map +1 -0
  24. package/dist/docs-generate-pack-reference.js +500 -0
  25. package/dist/docs-generate-pack-reference.js.map +1 -0
  26. package/dist/docs-sync.js +116 -1
  27. package/dist/docs-sync.js.map +1 -1
  28. package/dist/file-edit.js +28 -8
  29. package/dist/file-edit.js.map +1 -1
  30. package/dist/file-write.js +29 -5
  31. package/dist/file-write.js.map +1 -1
  32. package/dist/gate-co-change.js +25 -7
  33. package/dist/gate-co-change.js.map +1 -1
  34. package/dist/gate-conditional.js +19 -7
  35. package/dist/gate-conditional.js.map +1 -1
  36. package/dist/gates-runners.js +42 -33
  37. package/dist/gates-runners.js.map +1 -1
  38. package/dist/gates-utils.js +34 -20
  39. package/dist/gates-utils.js.map +1 -1
  40. package/dist/gates.js +79 -7
  41. package/dist/gates.js.map +1 -1
  42. package/dist/hooks/config-resolver.js +10 -1
  43. package/dist/hooks/config-resolver.js.map +1 -1
  44. package/dist/init-package-config.js +1 -1
  45. package/dist/init-package-config.js.map +1 -1
  46. package/dist/init-scaffolding.js +5 -1
  47. package/dist/init-scaffolding.js.map +1 -1
  48. package/dist/init-templates.js +10 -0
  49. package/dist/init-templates.js.map +1 -1
  50. package/dist/init.js +1 -1
  51. package/dist/init.js.map +1 -1
  52. package/dist/initiative-create.js +17 -0
  53. package/dist/initiative-create.js.map +1 -1
  54. package/dist/initiative-remove-wu.js +17 -3
  55. package/dist/initiative-remove-wu.js.map +1 -1
  56. package/dist/kernel-event-sync/emitters.js +104 -0
  57. package/dist/kernel-event-sync/emitters.js.map +1 -0
  58. package/dist/kernel-event-sync/index.js +13 -0
  59. package/dist/kernel-event-sync/index.js.map +1 -0
  60. package/dist/kernel-event-sync/lifecycle-emitters.js +160 -0
  61. package/dist/kernel-event-sync/lifecycle-emitters.js.map +1 -0
  62. package/dist/kernel-event-sync/narrow-emissions.js +89 -0
  63. package/dist/kernel-event-sync/narrow-emissions.js.map +1 -0
  64. package/dist/kernel-event-sync/software-delivery-emitters.js +297 -0
  65. package/dist/kernel-event-sync/software-delivery-emitters.js.map +1 -0
  66. package/dist/lane-lock.js +14 -1
  67. package/dist/lane-lock.js.map +1 -1
  68. package/dist/lane-suggest.js +21 -0
  69. package/dist/lane-suggest.js.map +1 -1
  70. package/dist/lumenflow-upgrade.js +7 -5
  71. package/dist/lumenflow-upgrade.js.map +1 -1
  72. package/dist/mem-context.js +145 -0
  73. package/dist/mem-context.js.map +1 -1
  74. package/dist/mem-create.js +39 -6
  75. package/dist/mem-create.js.map +1 -1
  76. package/dist/mem-inbox.js +16 -0
  77. package/dist/mem-inbox.js.map +1 -1
  78. package/dist/mem-roster.js +95 -0
  79. package/dist/mem-roster.js.map +1 -0
  80. package/dist/mem-signal.js +97 -2
  81. package/dist/mem-signal.js.map +1 -1
  82. package/dist/metrics-snapshot.js +3 -2
  83. package/dist/metrics-snapshot.js.map +1 -1
  84. package/dist/orchestrate-init-status.js +117 -2
  85. package/dist/orchestrate-init-status.js.map +1 -1
  86. package/dist/orchestrate-initiative.js +83 -10
  87. package/dist/orchestrate-initiative.js.map +1 -1
  88. package/dist/orchestrate-monitor-quality.js +289 -0
  89. package/dist/orchestrate-monitor-quality.js.map +1 -0
  90. package/dist/orchestrate-monitor.js +85 -0
  91. package/dist/orchestrate-monitor.js.map +1 -1
  92. package/dist/pack-validate.js +127 -2
  93. package/dist/pack-validate.js.map +1 -1
  94. package/dist/plan-create.js +18 -0
  95. package/dist/plan-create.js.map +1 -1
  96. package/dist/plan-link.js +13 -0
  97. package/dist/plan-link.js.map +1 -1
  98. package/dist/plan-promote.js +14 -0
  99. package/dist/plan-promote.js.map +1 -1
  100. package/dist/pre-commit-check.js +4 -3
  101. package/dist/pre-commit-check.js.map +1 -1
  102. package/dist/public-manifest.js +17 -3
  103. package/dist/public-manifest.js.map +1 -1
  104. package/dist/release.js +28 -10
  105. package/dist/release.js.map +1 -1
  106. package/dist/session-cross-link.js +139 -0
  107. package/dist/session-cross-link.js.map +1 -0
  108. package/dist/sidecar-manager.js +208 -0
  109. package/dist/sidecar-manager.js.map +1 -0
  110. package/dist/state-path-resolvers.js +18 -0
  111. package/dist/state-path-resolvers.js.map +1 -1
  112. package/dist/stream-heartbeat.js +151 -0
  113. package/dist/stream-heartbeat.js.map +1 -0
  114. package/dist/sync-templates.js +56 -2
  115. package/dist/sync-templates.js.map +1 -1
  116. package/dist/wu-block.js +47 -5
  117. package/dist/wu-block.js.map +1 -1
  118. package/dist/wu-claim-branch.js +8 -4
  119. package/dist/wu-claim-branch.js.map +1 -1
  120. package/dist/wu-claim-state.js +5 -3
  121. package/dist/wu-claim-state.js.map +1 -1
  122. package/dist/wu-claim-worktree.js +5 -3
  123. package/dist/wu-claim-worktree.js.map +1 -1
  124. package/dist/wu-claim.js +261 -9
  125. package/dist/wu-claim.js.map +1 -1
  126. package/dist/wu-done-auto-cleanup.js +3 -2
  127. package/dist/wu-done-auto-cleanup.js.map +1 -1
  128. package/dist/wu-done-git-ops.js +12 -8
  129. package/dist/wu-done-git-ops.js.map +1 -1
  130. package/dist/wu-done-preflight.js +3 -3
  131. package/dist/wu-done-preflight.js.map +1 -1
  132. package/dist/wu-done.js +46 -10
  133. package/dist/wu-done.js.map +1 -1
  134. package/dist/wu-lifecycle-sync/gate-scope-resolver.js +16 -0
  135. package/dist/wu-lifecycle-sync/gate-scope-resolver.js.map +1 -0
  136. package/dist/wu-lifecycle-sync/kernel-event-sync-shim.js +10 -0
  137. package/dist/wu-lifecycle-sync/kernel-event-sync-shim.js.map +1 -0
  138. package/dist/wu-prep.js +363 -22
  139. package/dist/wu-prep.js.map +1 -1
  140. package/dist/wu-prune.js +68 -27
  141. package/dist/wu-prune.js.map +1 -1
  142. package/dist/wu-release.js +34 -3
  143. package/dist/wu-release.js.map +1 -1
  144. package/dist/wu-review.js +167 -0
  145. package/dist/wu-review.js.map +1 -0
  146. package/dist/wu-spawn-prompt-builders.js +296 -40
  147. package/dist/wu-spawn-prompt-builders.js.map +1 -1
  148. package/dist/wu-spawn-strategy-resolver.js +126 -14
  149. package/dist/wu-spawn-strategy-resolver.js.map +1 -1
  150. package/dist/wu-unblock.js +52 -22
  151. package/dist/wu-unblock.js.map +1 -1
  152. package/package.json +13 -8
  153. package/packs/agent-runtime/agent-heartbeat.ts +163 -0
  154. package/packs/agent-runtime/auto-session-integration.ts +874 -0
  155. package/packs/agent-runtime/delegation-registry-schema.ts +220 -0
  156. package/packs/agent-runtime/delegation-registry-store.ts +269 -0
  157. package/packs/agent-runtime/delegation-tree.ts +328 -0
  158. package/packs/agent-runtime/index.ts +9 -0
  159. package/packs/agent-runtime/manifest.ts +109 -19
  160. package/packs/agent-runtime/manifest.yaml +150 -0
  161. package/packs/agent-runtime/memory-coordination-contract.ts +86 -0
  162. package/packs/agent-runtime/memory.d.ts +19 -0
  163. package/packs/agent-runtime/orchestration.ts +238 -23
  164. package/packs/agent-runtime/package.json +11 -2
  165. package/packs/agent-runtime/remote-controls/index.ts +7 -0
  166. package/packs/agent-runtime/remote-controls/operations.ts +399 -0
  167. package/packs/agent-runtime/remote-controls/port.ts +48 -0
  168. package/packs/agent-runtime/remote-controls/state-store.ts +258 -0
  169. package/packs/agent-runtime/remote-controls/types.ts +105 -0
  170. package/packs/agent-runtime/session-schema.ts +423 -0
  171. package/packs/agent-runtime/tool-impl/index.ts +1 -0
  172. package/packs/agent-runtime/tool-impl/remote-controls.mock.ts +252 -0
  173. package/packs/agent-runtime/tool-impl/remote-controls.ts +273 -0
  174. package/packs/agent-runtime/tsconfig.json +1 -1
  175. package/packs/agent-runtime/turn-lifecycle-events.ts +501 -0
  176. package/packs/sidekick/channel-ingress.ts +137 -0
  177. package/packs/sidekick/manifest.ts +74 -0
  178. package/packs/sidekick/manifest.yaml +88 -0
  179. package/packs/sidekick/package.json +3 -1
  180. package/packs/sidekick/sidekick-events.ts +517 -0
  181. package/packs/sidekick/src/adapters/cloud-queue.ts +101 -0
  182. package/packs/sidekick/src/adapters/control-plane-bridge.adapter.ts +378 -0
  183. package/packs/sidekick/src/adapters/filesystem-bridge.adapter.ts +224 -0
  184. package/packs/sidekick/src/domain/channel.types.ts +84 -0
  185. package/packs/sidekick/src/ports/channel-bridge.port.ts +75 -0
  186. package/packs/sidekick/src/routines/commit.ts +74 -0
  187. package/packs/sidekick/tool-impl/channel-tools.ts +47 -0
  188. package/packs/sidekick/tool-impl/memory-tools.ts +17 -0
  189. package/packs/sidekick/tool-impl/routine-commit.ts +102 -0
  190. package/packs/sidekick/tool-impl/routine-tools.ts +67 -7
  191. package/packs/sidekick/tool-impl/runtime-context.ts +4 -0
  192. package/packs/sidekick/tool-impl/storage.ts +3 -0
  193. package/packs/sidekick/tool-impl/system-tools.ts +7 -0
  194. package/packs/sidekick/tool-impl/task-tools.ts +46 -0
  195. package/packs/sidekick/tsconfig.json +1 -1
  196. package/packs/software-delivery/manifest-schema.ts +30 -0
  197. package/packs/software-delivery/manifest.ts +160 -11
  198. package/packs/software-delivery/manifest.yaml +210 -230
  199. package/packs/software-delivery/package.json +88 -3
  200. package/packs/software-delivery/src/commands/index.ts +5 -0
  201. package/packs/software-delivery/src/config/delivery-review-contract.ts +20 -0
  202. package/packs/software-delivery/src/config/env-accessors.ts +19 -0
  203. package/packs/software-delivery/src/config/index.ts +8 -0
  204. package/packs/software-delivery/src/config/normalize-config-keys.ts +19 -0
  205. package/packs/software-delivery/src/config/schemas/lumenflow-config-schema-types.ts +436 -0
  206. package/packs/software-delivery/src/config/workspace-reader.ts +310 -0
  207. package/packs/software-delivery/src/constants/backlog-patterns.ts +31 -0
  208. package/packs/software-delivery/src/constants/client-ids.ts +19 -0
  209. package/packs/software-delivery/src/constants/config-contract.ts +7 -0
  210. package/packs/software-delivery/src/constants/docs-layout-presets.ts +50 -0
  211. package/packs/software-delivery/src/constants/duration-constants.ts +20 -0
  212. package/packs/software-delivery/src/constants/gate-constants.ts +32 -0
  213. package/packs/software-delivery/src/constants/index.ts +29 -0
  214. package/packs/software-delivery/src/constants/lock-constants.ts +35 -0
  215. package/packs/software-delivery/src/constants/object-guards.ts +12 -0
  216. package/packs/software-delivery/src/constants/section-headings.ts +107 -0
  217. package/packs/software-delivery/src/constants/wu-cli-constants.ts +485 -0
  218. package/packs/software-delivery/src/constants/wu-domain-constants.ts +466 -0
  219. package/packs/software-delivery/src/constants/wu-git-constants.ts +7 -0
  220. package/packs/software-delivery/src/constants/wu-id-format.ts +327 -0
  221. package/packs/software-delivery/src/constants/wu-paths-constants.ts +358 -0
  222. package/packs/software-delivery/src/constants/wu-statuses.ts +287 -0
  223. package/packs/software-delivery/src/constants/wu-type-helpers.ts +67 -0
  224. package/packs/software-delivery/src/constants/wu-ui-constants.ts +267 -0
  225. package/packs/software-delivery/src/constants/wu-validation-constants.ts +73 -0
  226. package/packs/software-delivery/src/domain/index.ts +5 -0
  227. package/packs/software-delivery/src/domain/orchestration.constants.ts +168 -0
  228. package/packs/software-delivery/src/domain/orchestration.schemas.ts +239 -0
  229. package/packs/software-delivery/src/domain/orchestration.types.ts +178 -0
  230. package/packs/software-delivery/src/methodology/incremental-test.ts +90 -0
  231. package/packs/software-delivery/src/methodology/index.ts +6 -0
  232. package/packs/software-delivery/src/methodology/manual-test-validator.ts +292 -0
  233. package/packs/software-delivery/src/policy/coverage-gate.ts +270 -0
  234. package/packs/software-delivery/src/policy/gates-agent-mode.ts +223 -0
  235. package/packs/software-delivery/src/policy/gates-config-internal.ts +121 -0
  236. package/packs/software-delivery/src/policy/gates-config.ts +293 -0
  237. package/packs/software-delivery/src/policy/gates-coverage.ts +247 -0
  238. package/packs/software-delivery/src/policy/gates-presets.ts +134 -0
  239. package/packs/software-delivery/src/policy/gates-schemas.ts +173 -0
  240. package/packs/software-delivery/src/policy/index.ts +22 -0
  241. package/packs/software-delivery/src/policy/package-manager-resolver.ts +319 -0
  242. package/packs/software-delivery/src/policy/resolve-policy.ts +518 -0
  243. package/packs/software-delivery/src/ports/config.ports.ts +90 -0
  244. package/packs/software-delivery/src/ports/dashboard-renderer.port.ts +125 -0
  245. package/packs/software-delivery/src/ports/index.ts +10 -0
  246. package/packs/software-delivery/src/ports/sync-validator.ports.ts +59 -0
  247. package/packs/software-delivery/src/ports/wu-helpers.ports.ts +168 -0
  248. package/packs/software-delivery/src/ports/wu-state.ports.ts +241 -0
  249. package/packs/software-delivery/src/primitives/index.ts +5 -0
  250. package/packs/software-delivery/src/runtime/index.ts +6 -0
  251. package/packs/software-delivery/src/runtime/work-classifier.ts +561 -0
  252. package/packs/software-delivery/src/sandbox/index.ts +10 -0
  253. package/packs/software-delivery/src/sandbox/sandbox-allowlist.ts +118 -0
  254. package/packs/software-delivery/src/sandbox/sandbox-backend-linux.ts +88 -0
  255. package/packs/software-delivery/src/sandbox/sandbox-backend-macos.ts +154 -0
  256. package/packs/software-delivery/src/sandbox/sandbox-backend-windows.ts +47 -0
  257. package/packs/software-delivery/src/sandbox/sandbox-profile.ts +153 -0
  258. package/packs/software-delivery/src/schemas/index.ts +5 -0
  259. package/packs/software-delivery/src/state/date-utils.ts +158 -0
  260. package/packs/software-delivery/src/state/index.ts +15 -0
  261. package/packs/software-delivery/src/state/state-machine.ts +119 -0
  262. package/packs/software-delivery/src/state/wu-doc-types.ts +51 -0
  263. package/packs/software-delivery/src/state/wu-paths.ts +381 -0
  264. package/packs/software-delivery/src/state/wu-schema.ts +1139 -0
  265. package/packs/software-delivery/src/state/wu-state-schema.ts +255 -0
  266. package/packs/software-delivery/src/state/wu-yaml.ts +338 -0
  267. package/packs/software-delivery/src/types.d.ts +16 -0
  268. package/packs/software-delivery/tool-impl/wu-lifecycle-tools.ts +18 -0
  269. package/packs/software-delivery/tsconfig.json +28 -2
  270. package/templates/core/AGENTS.md.template +76 -17
  271. package/templates/core/LUMENFLOW.md.template +265 -66
  272. package/templates/core/_frameworks/lumenflow/wu-sizing-guide.md.template +180 -116
  273. package/templates/core/ai/onboarding/agent-invocation-guide.md.template +26 -8
  274. package/templates/core/ai/onboarding/existing-project-bootstrap.md.template +171 -0
  275. package/templates/core/ai/onboarding/first-15-mins.md.template +3 -1
  276. package/templates/core/ai/onboarding/first-wu-mistakes.md.template +1 -1
  277. package/templates/core/ai/onboarding/initiative-orchestration.md.template +46 -30
  278. package/templates/core/ai/onboarding/quick-ref-commands.md.template +36 -33
  279. package/templates/core/ai/onboarding/release-process.md.template +8 -7
  280. package/templates/core/ai/onboarding/starting-prompt.md.template +2 -0
  281. package/templates/core/ai/onboarding/troubleshooting-wu-done.md.template +62 -0
  282. package/templates/vendors/claude/.claude/CLAUDE.md.template +29 -54
  283. package/templates/vendors/cursor/.cursor/rules/lumenflow.md.template +24 -52
  284. package/templates/vendors/windsurf/.windsurf/rules/lumenflow.md.template +24 -52
  285. package/packs/agent-runtime/.turbo/turbo-build.log +0 -4
  286. package/packs/sidekick/.turbo/turbo-build.log +0 -4
  287. package/packs/software-delivery/.turbo/turbo-build.log +0 -4
@@ -46,9 +46,9 @@ cd worktrees/<lane>-wu-xxxx
46
46
  # 2. Record handoff evidence (MANDATORY — wu:done blocks without this)
47
47
  pnpm wu:brief --id WU-XXXX --client <client>
48
48
 
49
- # 3. Pull shared memory BEFORE coding (discoveries from other agents / vendors)
50
- pnpm mem:context --wu WU-XXXX
51
- pnpm mem:inbox --since 1h
49
+ # 3. Engage disciplines (see below)
50
+ # Shared memory is auto-loaded into wu:brief output above (WU-2607).
51
+ # For ad-hoc lookups mid-WU: pnpm mem:context --wu WU-XXXX, pnpm mem:inbox
52
52
 
53
53
  # 4. Work in worktree — capture discoveries as you go:
54
54
  # pnpm mem:create --type discovery --wu WU-XXXX --tags <csv> --title '<single-quoted>'
@@ -65,7 +65,37 @@ pnpm wu:prep --id WU-XXXX
65
65
  cd <project-root> && pnpm wu:done --id WU-XXXX
66
66
  ```
67
67
 
68
- **Always single-quote** `mem:create --title` values — bash expands `$var`, `$0`, and backticks in double-quoted strings, silently corrupting prose with prices (`$49`), positional refs, or `!`. See [LUMENFLOW.md Memory section](LUMENFLOW.md#memory-shared-vs-vendor-personal).
68
+ ### Before You Code (mandatory)
69
+
70
+ Step 2 above is not optional:
71
+
72
+ - `wu:brief` records checkpoint evidence; `wu:done` **blocks** without it for feature/bug WUs.
73
+ - `wu:brief` also auto-loads shared memory and coordination signals into the generated prompt (WU-1240, WU-2607) — read the `## Memory Context` section in the brief output before coding. Manual `mem:context`/`mem:inbox` calls are still available as ad-hoc lookups mid-WU.
74
+ - Load relevant skills (`design-first`, `tdd-workflow`, `frontend-design`, `worktree-discipline`, `lumenflow-gates`) via your vendor's skill primitive. Claude Code, Codex, Cursor, and Windsurf all support `SKILL.md`-based skills (with minor invocation differences); Aider uses `CONVENTIONS.md`; Cline uses `.clinerules`. See [LUMENFLOW.md "Skills & Agents"](LUMENFLOW.md#skills--agents) for the invocation table, and your per-vendor rules file for specifics.
75
+
76
+ ### During the WU
77
+
78
+ Capture findings in shared memory so other agents (and other vendors) can see them:
79
+
80
+ ```bash
81
+ pnpm mem:create --type discovery --wu WU-XXXX --tags <csv> --priority P? --title '<prose>'
82
+ pnpm mem:signal '<short status>' --wu WU-XXXX
83
+ pnpm mem:checkpoint --wu WU-XXXX --note '<progress>' --next-steps '<what is next>'
84
+ ```
85
+
86
+ **Classification rule:** if the fact would help _another_ agent vendor working this repo, it belongs in shared memory (`mem:create`), not your vendor's personal memory folder. Examples of shared: bug discoveries, architecture decisions, CI/gates gotchas, initiative direction, cross-WU scope flags. Examples of vendor-personal: behavioural feedback, user preferences, tool-invocation mechanics.
87
+
88
+ **Shell-quoting footgun:** always **single-quote** the `--title` value. Bash expands `$var`, `$0`, backticks, and `!hist` inside double-quoted strings, silently corrupting prose containing prices (`$49`), positional refs, or exclamation marks. See [Memory section in LUMENFLOW.md](LUMENFLOW.md#memory-shared-vs-vendor-personal) for the full mem:\* contract.
89
+
90
+ ### Before wu:done
91
+
92
+ ```bash
93
+ pnpm mem:triage --wu WU-XXXX --list
94
+ pnpm mem:triage --promote mem-XXXX --lane '<Parent: Sublane>' # turn a discovery into a new WU
95
+ pnpm mem:triage --archive mem-XXXX --reason '<why>' # drop non-actionable
96
+ ```
97
+
98
+ `wu:done` does not auto-triage. Unreviewed discoveries rot — always check the list before completing.
69
99
 
70
100
  ## Quick Start (Cloud / Branch-PR)
71
101
 
@@ -129,32 +159,61 @@ For detailed troubleshooting, see [troubleshooting-wu-done.md]({{DOCS_ONBOARDING
129
159
 
130
160
  For the complete set of non-negotiable constraints (git safety, forbidden commands, skip-gates policy, and more), see [.lumenflow/constraints.md](.lumenflow/constraints.md).
131
161
 
132
- ---
162
+ ## WU Types And Automated Test Diff Policy
133
163
 
134
- ## Safety: Forbidden Commands and Safe Alternatives
164
+ Canonical WU types are defined by the shared CLI/core taxonomy and advertised by
165
+ `pnpm wu:create --help`:
135
166
 
136
- LumenFlow enforces safety at the repository level via git wrappers and hooks. For the full list of forbidden commands and their safe `wu:` alternatives, see [.lumenflow/constraints.md](.lumenflow/constraints.md).
167
+ - `feature` net-new user or system capability
168
+ - `bug` — broken or regressed behavior fix
169
+ - `documentation` — documentation-only change
170
+ - `process` — workflow or operating-process maintenance
171
+ - `tooling` — tooling, automation, or developer-experience change
172
+ - `chore` — repository upkeep or housekeeping change
173
+ - `refactor` — behavior-preserving code restructure
137
174
 
138
- **Key rule:** Always use `wu:` commands for worktree and branch management -- never raw `git worktree` or `git branch -D` commands. Use `wu:recover` for state inconsistencies, `wu:release` for abandoned WUs, and `wu:prune` for stale worktrees.
175
+ Use `feature` when the WU introduces new capability; it must carry `spec_refs`
176
+ (or use `--plan` so `wu:create` generates the reference for you).
177
+
178
+ `wu:prep` automated test diff evidence is policy-driven, not a hardcoded
179
+ "TDD-only" rule:
180
+
181
+ - `software_delivery.gates.tdd_diff_evidence.mode: block` enforces the check
182
+ - default mode follows `software_delivery.methodology.testing`:
183
+ - `tdd` => `block`
184
+ - `test-after` => `off`
185
+ - `none` => `off`
186
+ - default `applies_to_types` are `feature` and `bug`
187
+ - default `exempt_paths` is an empty list
188
+
189
+ If a covered WU is intentionally exempt and the workspace policy does not
190
+ already exclude it, document the reason in WU notes with
191
+ `tdd-exception: <reason>`.
139
192
 
140
193
  ---
141
194
 
142
- ## Skills and Shared Memory
195
+ ## Safety: Forbidden Commands and Safe Alternatives
143
196
 
144
- LumenFlow skills live in `.lumenflow/skills/` as `SKILL.md` files and are projected to each vendor via `pnpm lumenflow:integrate --client <x>`. Claude Code, OpenAI Codex, Cursor, and Windsurf all support `SKILL.md`-based skills (with minor invocation differences); Aider uses `CONVENTIONS.md`; Cline uses `.clinerules`. See [LUMENFLOW.md "Skills & Agents"](LUMENFLOW.md#skills--agents) for the canonical list and per-vendor invocation.
197
+ LumenFlow enforces safety at the repository level via git wrappers and hooks. For the full list of forbidden commands and their safe `wu:` alternatives, see [.lumenflow/constraints.md](.lumenflow/constraints.md).
145
198
 
146
- Classification rule for memory: if a fact would help *another* agent vendor working this repo, it belongs in shared memory (`mem:create`). Only vendor-specific behavioural calibrations stay in vendor-personal memory. See [LUMENFLOW.md Memory section](LUMENFLOW.md#memory-shared-vs-vendor-personal).
199
+ **Key rule:** Always use `wu:` commands for worktree and branch management -- never raw `git worktree` or `git branch -D` commands. Use `wu:recover` for state inconsistencies, `wu:release` for abandoned WUs, and `wu:prune` for stale worktrees.
147
200
 
148
201
  ---
149
202
 
150
203
  ## Vendor-Specific Overlays
151
204
 
152
- This file provides universal guidance for all AI agents. Additional vendor-specific configuration:
205
+ This file provides universal guidance for all AI agents. LumenFlow skills live in `.lumenflow/skills/` as `SKILL.md` files and are projected to each vendor via `pnpm lumenflow:integrate --client <x>`.
206
+
207
+ | Vendor | Skill / rules surface | Invocation |
208
+ | ------------ | --------------------------------------- | -------------------------------------------------------- |
209
+ | Claude Code | `.claude/skills/` + `.claude/CLAUDE.md` | `Skill` tool call, or `/skill <name>` in interactive CLI |
210
+ | OpenAI Codex | `.codex/skills/` or repo `skills/` | `/skills`, `$<name>` mention, or implicit |
211
+ | Cursor | `.cursor/rules/` + agent skills | `/skills` or auto-discovery |
212
+ | Windsurf | `.windsurf/rules/` + Cascade skills | Auto-discovery; workflows via `/<workflow-name>` |
213
+ | Aider | `CONVENTIONS.md` | `/read CONVENTIONS.md` or `aider --read CONVENTIONS.md` |
214
+ | Cline | `.clinerules` | Auto-loaded |
153
215
 
154
- - **Claude Code**: See `CLAUDE.md` (if present)
155
- - **Cursor**: See `.cursor/rules/lumenflow.md` (if present)
156
- - **Windsurf**: See `.windsurf/rules/lumenflow.md` (if present)
157
- - **Cline**: See `.clinerules` (if present)
216
+ A skill named in prose does nothing — load it through the vendor's invocation before the work it covers. See [LUMENFLOW.md "Skills & Agents"](LUMENFLOW.md#skills--agents) for the canonical skill list.
158
217
 
159
218
  ---
160
219
 
@@ -210,7 +269,7 @@ When LumenFlow behavior changes, decide documentation impact explicitly instead
210
269
 
211
270
  ---
212
271
 
213
- ## Disable / Uninstall
272
+ ## Disable / Uninstall (WU-2590)
214
273
 
215
274
  LumenFlow supports reversible opt-out and full uninstall:
216
275
 
@@ -75,7 +75,7 @@ Use **Initiatives** for multi-phase work spanning multiple WUs:
75
75
 
76
76
  ```bash
77
77
  # Create an initiative for multi-phase work
78
- pnpm initiative:create --id INIT-001 --title "Feature Name" \
78
+ pnpm initiative:create --title "Feature Name" \
79
79
  --description "..." --phase "Phase 1: MVP" --phase "Phase 2: Polish"
80
80
 
81
81
  # Add WUs to the initiative
@@ -85,6 +85,11 @@ pnpm initiative:add-wu --initiative INIT-001 --wu WU-XXX --phase 1
85
85
  pnpm initiative:status --id INIT-001
86
86
  ```
87
87
 
88
+ `initiative:create` now auto-generates canonical padded IDs by default (`INIT-001`, `INIT-002`, ...).
89
+ If you supply an unpadded numeric ID such as `--id INIT-4`, it is canonicalized to `INIT-004`
90
+ before the YAML is written. Initiative ID formatting is configurable via
91
+ `software_delivery.initiative_id.{width,strict,prefix}` in `workspace.yaml`.
92
+
88
93
  **Skip initiatives whenever the work is still one coherent WU**, even if it spans several files or needs checkpoint-resume.
89
94
 
90
95
  Typical no-initiative cases:
@@ -137,9 +142,69 @@ When `requireRemote: true` (default):
137
142
 
138
143
  ---
139
144
 
145
+ ## WU Types And Automated Test Diff Policy
146
+
147
+ `pnpm wu:create --help` is the authoritative help surface for supported WU
148
+ types. The canonical taxonomy is:
149
+
150
+ | WU type | Meaning |
151
+ | --------------- | --------------------------------------------------- |
152
+ | `feature` | Net-new user or system capability |
153
+ | `bug` | Broken or regressed behavior fix |
154
+ | `documentation` | Documentation-only change |
155
+ | `process` | Workflow or operating-process maintenance |
156
+ | `tooling` | Tooling, automation, or developer-experience change |
157
+ | `chore` | Repository upkeep or housekeeping change |
158
+ | `refactor` | Behavior-preserving code restructure |
159
+
160
+ Practical rules:
161
+
162
+ - `feature` WUs must include `spec_refs`. Using `pnpm wu:create --plan` is the
163
+ easiest way to satisfy that requirement.
164
+ - `documentation` and `process` WUs are the only types that can omit
165
+ implementation paths and manual test paths at create time when the work is
166
+ truly non-code.
167
+ - Other types should describe the code they touch explicitly and choose the
168
+ verification surface that fits the change.
169
+
170
+ `wu:prep` automated test diff evidence is also configurable now. It no longer
171
+ assumes every repo or every bug/feature change is governed by the same TDD
172
+ rule.
173
+
174
+ Default policy resolution:
175
+
176
+ - `software_delivery.methodology.testing: tdd` => `software_delivery.gates.tdd_diff_evidence.mode: block`
177
+ - `software_delivery.methodology.testing: test-after` => `software_delivery.gates.tdd_diff_evidence.mode: off`
178
+ - `software_delivery.methodology.testing: none` => `software_delivery.gates.tdd_diff_evidence.mode: off`
179
+ - default `software_delivery.gates.tdd_diff_evidence.applies_to_types` =>
180
+ `feature`, `bug`
181
+ - default `software_delivery.gates.tdd_diff_evidence.exempt_paths` => `[]`
182
+
183
+ Example:
184
+
185
+ ```yaml
186
+ software_delivery:
187
+ methodology:
188
+ testing: tdd
189
+ gates:
190
+ tdd_diff_evidence:
191
+ mode: block
192
+ applies_to_types:
193
+ - feature
194
+ - bug
195
+ exempt_paths:
196
+ - .github/workflows/**
197
+ - workspace.yaml
198
+ ```
199
+
200
+ Use `tdd-exception: <reason>` in WU notes only when a covered WU is
201
+ intentionally exempt and the workspace policy does not already exclude it.
202
+
203
+ ---
204
+
140
205
  ## Core Principles
141
206
 
142
- 1. **Design-First** (feature/refactor WUs): Load the `design-first` skill before implementation. Question requirements, delete unnecessary, simplify before optimizing. Invocation varies by vendor — see [Skills & Agents](#skills--agents).
207
+ 1. **Design-First** (feature/refactor WUs): Load the `design-first` skill before implementation. Question requirements, delete unnecessary, simplify before optimizing. Invocation varies by vendor — see [Skills & Agents](#skills--agents) below.
143
208
  2. **Fit-For-Surface Verification**: Choose the least brittle verification that gives strong confidence. Prefer TDD for runtime logic when repository policy requires it; prefer behavior-focused integration, smoke, visual, or manual verification for UI, content, and presentation work. Never assert inline styles, CSS values, exact copy, or DOM shape in E2E/integration tests.
144
209
  3. **Library-First**: Search existing libraries before custom code
145
210
  4. **DRY/SOLID/KISS/YAGNI**: No magic numbers, no hardcoded strings
@@ -155,38 +220,85 @@ When `requireRemote: true` (default):
155
220
 
156
221
  ## Memory: Shared vs Vendor-Personal
157
222
 
158
- LumenFlow ships a shared memory layer at `.lumenflow/memory/memory.jsonl` that every agent (Claude, Codex, Cursor, Windsurf, Aider) reads and writes via `mem:*` CLIs. This is distinct from any vendor's private memory folder.
223
+ LumenFlow ships a **shared memory layer** at `.lumenflow/memory/memory.jsonl` that every agent (Claude, Codex, Cursor, Windsurf, Aider) reads and writes via the `mem:*` CLIs. This is distinct from any vendor's private memory folder.
159
224
 
160
225
  ### Classification rule
161
226
 
162
- **"Would a different agent vendor working this repo need to know this?"**
227
+ Ask one question: **"Would a different agent vendor working this repo need to know this?"**
228
+
229
+ | Goes in shared memory (`mem:create`) | Stays in vendor-personal memory |
230
+ | ----------------------------------------------------------- | ------------------------------------------------------ |
231
+ | Bug discoveries, known issues, CI/gates gotchas | Behavioural feedback (tone, verbosity, style) |
232
+ | Architecture decisions, pricing truth, initiative direction | User profile (role, background, preferences) |
233
+ | Cross-WU scope-creep flags | Vendor tool-invocation mechanics |
234
+ | Infrastructure debt future agents will hit | Session-continuity pointers |
235
+ | Project facts not derivable from code/git history | Corrections specific to one vendor's default behaviour |
163
236
 
164
- | Goes in shared memory (`mem:create`) | Stays in vendor-personal memory |
165
- | --- | --- |
166
- | Bug discoveries, known issues, CI/gates gotchas | Behavioural feedback (tone, verbosity, style) |
167
- | Architecture decisions, pricing truth, initiative direction | User profile (role, background, preferences) |
168
- | Cross-WU scope-creep flags | Vendor tool-invocation mechanics |
169
- | Infrastructure debt future agents will hit | Session-continuity pointers |
237
+ If a fact would help a different vendor working the same repo, it belongs in shared memory. Period.
170
238
 
171
- ### Required cadence
239
+ ### Before you code (auto-loaded by wu:brief)
240
+
241
+ `wu:brief` auto-loads the read-side of the memory contract into the generated prompt under a `## Memory Context` section (WU-1240, WU-2607). It includes WU-scoped discoveries, summaries, project profile, and coordination signals from peer agents since `wu:claim`. Read that section before writing code — skipping it means working blind to what peer agents already found.
242
+
243
+ For ad-hoc lookups mid-WU (rarely needed; the brief is normally sufficient):
172
244
 
173
245
  ```bash
174
- # BEFORE coding (after wu:claim + wu:brief)
175
- pnpm mem:context --wu WU-XXXX # discoveries, known-issues for this WU
176
- pnpm mem:inbox --since 1h # parallel-agent signals
246
+ pnpm mem:context --wu WU-XXXX # discoveries, signals, known-issues for this WU
247
+ pnpm mem:inbox # coordination signals (defaults to unread)
248
+ ```
177
249
 
178
- # DURING the WU — always SINGLE-QUOTE --title (bash expands $var/$0/backticks in double-quoted strings)
179
- pnpm mem:create --type discovery --wu WU-XXXX --tags <csv> --priority P? --title '<prose>'
180
- pnpm mem:signal '<status>' --wu WU-XXXX
181
- pnpm mem:checkpoint --wu WU-XXXX --note '<progress>'
250
+ ### Agent addressing
182
251
 
183
- # BEFORE wu:done (triage is NOT automatic)
184
- pnpm mem:triage --wu WU-XXXX --list
252
+ The memory layer also supports live-session addressing for active agents:
253
+
254
+ ```bash
255
+ pnpm mem:roster # list active session_id/display_name/role rows
256
+ pnpm mem:signal 'please review' --wu WU-XXXX --to Planck
257
+ pnpm mem:inbox --for Planck # targeted + broadcast signals for that session
258
+ pnpm mem:context --wu WU-XXXX --no-roster # opt out when a test needs stable output
185
259
  ```
186
260
 
187
- ### Storage note
261
+ `display_name` is an ephemeral live-session handle, not a stable role alias. It
262
+ is assigned from `.lumenflow/agents/display-name-pool.yaml` when a session
263
+ starts and released when the session ends. `mem:signal --to` / `mem:inbox --for`
264
+ resolve either a `session_id` or a current `display_name` against the live
265
+ roster before reading or writing `target_agent`.
266
+
267
+ ### During the WU (capture, don't hoard)
188
268
 
189
- `.lumenflow/memory/memory.jsonl` is gitignored by default: shared across all vendors **on the same machine/worktree**, not cross-machine. For team-wide visibility, commit the jsonl or sync via your control plane.
269
+ When you find something out-of-scope or non-obvious:
270
+
271
+ ```bash
272
+ pnpm mem:create --type discovery --wu WU-XXXX --tags <csv> --priority P? --title '<content>'
273
+ pnpm mem:signal '<short status>' --wu WU-XXXX # broadcast AC completion, blockers, milestones
274
+ pnpm mem:checkpoint --wu WU-XXXX --note '<progress>' --next-steps '<what is next>'
275
+ ```
276
+
277
+ **Shell-quoting warning:** `--title` takes prose through a shell arg. Always **single-quote** the title (`'...'`) — never double-quote. Bash expands `$var`, `$0`, backticks, and `!hist` inside double-quoted strings, which silently corrupts prose containing prices (`$49`), positional references, or exclamation marks. If the content must include single quotes, use `--title-file <path>` or pipe via stdin.
278
+
279
+ ### Before `wu:done` (triage)
280
+
281
+ ```bash
282
+ pnpm mem:triage --wu WU-XXXX --list # review discoveries captured mid-WU
283
+ pnpm mem:triage --promote mem-XXXX --lane '<Parent: Sublane>' # promote to a new WU
284
+ pnpm mem:triage --archive mem-XXXX --reason '<why>' # archive non-actionable
285
+ ```
286
+
287
+ `wu:done` does **not** auto-triage. Unreviewed discoveries rot.
288
+
289
+ ### Storage and sync note
290
+
291
+ `.lumenflow/memory/memory.jsonl` is **local by default** — gitignored in every LumenFlow repo. The distribution contract is:
292
+
293
+ - Shared across **all agent vendors on the same machine / worktree** ✓
294
+ - **Not** shared cross-machine or cross-contributor out of the box ✗
295
+
296
+ Cross-machine teams can opt into commit mode (trading locality for durability) once `software_delivery.memory.distribution: commit` ships; sync-based distribution is deferred to a future ADR. Until then, treat shared memory as "all agents running this worktree see it; humans and other machines don't." The authoritative model is [ADR-009](docs/09-architecture-decisions/ADR-009-shared-memory-jsonl-distribution.md).
297
+
298
+ ### Tooling bugs worth knowing
299
+
300
+ - `mem:delete` supports `--tag` / `--older-than` but not per-id. Local-only jsonl can be patched with care; prefer fixing via new nodes when possible.
301
+ - `mem:create --discovered-from` may silently drop invalid provenance ids. Verify with `tail -1 .lumenflow/memory/memory.jsonl` after creation.
190
302
 
191
303
  ---
192
304
 
@@ -196,6 +308,71 @@ LumenFlow enforces safety at the repository level via git wrappers, Husky hooks,
196
308
 
197
309
  ---
198
310
 
311
+ ## Canonical WU IDs (WU-2552)
312
+
313
+ Every WU has a **canonical id** derived from a configurable prefix plus a
314
+ zero-padded integer. The defaults preserve backward compatibility for every
315
+ existing LumenFlow repo:
316
+
317
+ | Setting | Default | Description |
318
+ | :------------------------------- | :------ | :----------------------------------------------------------------------------------------------------------------------------------------------- |
319
+ | `software_delivery.wu_id.width` | `4` | Zero-padding width (1-6). `width=4` produces `WU-0001`. Overflow is preserved — `WU-10000` is still canonical. |
320
+ | `software_delivery.wu_id.strict` | `true` | When true, `wu:create` canonicalizes `--id` input and `wu:doctor` flags legacy unpadded ids. Set to `false` for a migration ramp (warning-only). |
321
+ | `software_delivery.wu_id.prefix` | `'WU-'` | Canonical prefix (including trailing dash). Must match `/^[A-Z][A-Z0-9]{1,9}-$/`. OSS adopters can pick `TASK-`, `STORY-`, `TICKET-`, etc. |
322
+
323
+ ### Creation rules
324
+
325
+ - `pnpm wu:create` (no `--id`) always emits a zero-padded id at the configured
326
+ width: `WU-0001`, `WU-0014`, …
327
+ - `pnpm wu:create --id WU-14` **canonicalizes** to `WU-0014` before any file is
328
+ written. The normalization is silent; it is not an error.
329
+ - Integer-level collision detection is enforced: `WU-14` and `WU-0014` cannot
330
+ coexist. If the same integer is already on disk under any string form,
331
+ `wu:create` hard-errors with a copy-pasteable `wu:rename` remediation hint.
332
+ - When the next auto-generated id reaches 90% of `10^width` (e.g. `WU-9000` at
333
+ `width=4`), `wu:create` prints a non-blocking width-exhaustion warning
334
+ recommending a `config:set --key software_delivery.wu_id.width` bump.
335
+
336
+ ### Legacy drift and repair
337
+
338
+ - `pnpm wu:doctor` flags any WU YAML whose id is valid but not canonical for the
339
+ configured width (e.g. `WU-5.yaml` with `width=4`). The offender list ships
340
+ with copy-pasteable `wu:rename` commands. Strict mode treats drift as exit
341
+ code 1 (warning); `strict=false` treats it as warning-only so legacy repos
342
+ can migrate incrementally.
343
+ - `pnpm wu:rename --from WU-5 --to WU-0005` is the repair path: moves the YAML,
344
+ rewrites the `id:` field, moves the `.done` stamp, appends a `wu_renamed`
345
+ event to `wu-events.jsonl`, and regenerates `backlog.md` and `status.md`.
346
+ - `pnpm wu:rename --from WU-5 --to WU-0005 --replay-only` is the
347
+ event-log-only form. Use it when the YAML and stamp have already been
348
+ normalized out-of-band and you only need the event history + generated
349
+ views to catch up. No filesystem changes, no history rewrite — the rename
350
+ event is simply appended and the backlog/status regenerators honor it.
351
+
352
+ ### Vendor-neutral prefix example
353
+
354
+ ```bash
355
+ # Switch a fresh project to a TASK- prefix (one-time, before any WU is created):
356
+ pnpm config:set --key software_delivery.wu_id.prefix --value TASK-
357
+ pnpm wu:create --title '...' --description '...' ...
358
+ # ↳ generates TASK-0001.yaml with id: TASK-0001
359
+
360
+ # --id input is canonicalized to the configured prefix and width:
361
+ pnpm wu:create --id TASK-14 --title '...'
362
+ # ↳ writes TASK-0014.yaml
363
+ ```
364
+
365
+ ### Event sourcing discipline (append-only)
366
+
367
+ `wu_renamed` events never rewrite history. Historical events before the rename
368
+ keep their original `wuId` field — the audit trail for _who did what under the
369
+ old id_ stays intact. The current-state view is reconstructed by the
370
+ `wu-rename-projection` helper that collapses rename chains at replay time.
371
+ `state:bootstrap --dry-run` honors the rename projection and will not propose
372
+ reverting a canonical id back to the legacy form from a disk scan alone.
373
+
374
+ ---
375
+
199
376
  ## Global State
200
377
 
201
378
  Canonical global state is defined by:
@@ -353,7 +530,7 @@ For the full worktree lifecycle (parallel execution, bootstrap, isolation guaran
353
530
  | --------------------- | ---------------------------------------------------------------- |
354
531
  | `pnpm wu:preflight` | Pre-flight checks before wu:done |
355
532
  | `pnpm wu:repair` | Repair WU state issues (claim, admin, state, duplicate-ids mode) |
356
- | `pnpm wu:prune` | Clean stale worktrees |
533
+ | `pnpm wu:prune` | Clean stale worktrees and orphan directories |
357
534
  | `pnpm wu:cleanup` | Cleanup after PR merge (branch-pr mode) |
358
535
  | `pnpm wu:deps` | Show WU dependencies |
359
536
  | `pnpm wu:infer-lane` | Infer lane from code paths/description |
@@ -362,18 +539,18 @@ For the full worktree lifecycle (parallel execution, bootstrap, isolation guaran
362
539
 
363
540
  ### Gates & Quality
364
541
 
365
- | Command | Description |
366
- | --------------------------------- | ----------------------------------------------------- |
367
- | `pnpm gates` | Run all quality gates (`--docs-only` for docs WUs) |
368
- | `pnpm gates:docs` | Run docs-only quality gates (alias) |
369
- | `pnpm validate` | Run validation checks |
370
- | `pnpm lumenflow:pre-commit-check` | Run enforcement checks used by pre-commit and CI |
371
- | `pnpm gate:co-change` | Manage co-change gate rules (add, remove, edit, list) |
542
+ | Command | Description |
543
+ | --------------------------------- | ---------------------------------------------------------- |
544
+ | `pnpm gates` | Run all quality gates (`--docs-only` for docs WUs) |
545
+ | `pnpm gates:docs` | Run docs-only quality gates (alias) |
546
+ | `pnpm validate` | Run validation checks |
547
+ | `pnpm lumenflow:pre-commit-check` | Run enforcement checks used by pre-commit and CI |
548
+ | `pnpm gate:co-change` | Manage co-change gate rules (add, remove, edit, list) |
372
549
  | `pnpm gate:conditional` | Manage conditional_commands entries (add/remove/edit/list) |
373
- | `pnpm format` | Format all files (Prettier) |
374
- | `pnpm lint` | Run ESLint |
375
- | `pnpm typecheck` | Run TypeScript type checking |
376
- | `pnpm test` | Run all tests (Vitest) |
550
+ | `pnpm format` | Format all files (Prettier) |
551
+ | `pnpm lint` | Run ESLint |
552
+ | `pnpm typecheck` | Run TypeScript type checking |
553
+ | `pnpm test` | Run all tests (Vitest) |
377
554
 
378
555
  ### Lane Management
379
556
 
@@ -397,11 +574,12 @@ For the full worktree lifecycle (parallel execution, bootstrap, isolation guaran
397
574
  | `pnpm mem:start` | Start a memory session |
398
575
  | `pnpm mem:ready` | Check pending memory nodes |
399
576
  | `pnpm mem:export` | Export memory as markdown |
400
- | `pnpm mem:signal` | Broadcast coordination signal |
577
+ | `pnpm mem:signal` | Broadcast or address coordination signals |
401
578
  | `pnpm mem:cleanup` | Clean up stale memory data |
402
579
  | `pnpm mem:context` | Get context for current lane/WU |
403
580
  | `pnpm mem:create` | Create memory node (bug discovery) |
404
581
  | `pnpm mem:inbox` | Check coordination signals |
582
+ | `pnpm mem:roster` | List active sessions and display names |
405
583
  | `pnpm mem:summarize` | Summarize memory context |
406
584
  | `pnpm mem:triage` | Triage discovered bugs |
407
585
  | `pnpm mem:delete` | Delete/archive a memory node |
@@ -410,16 +588,18 @@ For the full worktree lifecycle (parallel execution, bootstrap, isolation guaran
410
588
 
411
589
  ### Initiatives
412
590
 
413
- | Command | Description |
414
- | ----------------------------- | ----------------------------------------- |
415
- | `pnpm initiative:create` | Create new initiative |
416
- | `pnpm initiative:edit` | Edit initiative fields and phase metadata |
417
- | `pnpm initiative:list` | List all initiatives |
418
- | `pnpm initiative:status` | Show initiative status |
419
- | `pnpm initiative:add-wu` | Add WU to initiative |
420
- | `pnpm initiative:remove-wu` | Remove WU from initiative |
421
- | `pnpm initiative:plan` | Link plan to initiative |
422
- | `pnpm initiative:bulk-assign` | Bulk assign WUs to initiative |
591
+ | Command | Description |
592
+ | ----------------------------- | ------------------------------------------- |
593
+ | `pnpm initiative:create` | Create new initiative |
594
+ | `pnpm initiative:edit` | Edit initiative fields and phase metadata |
595
+ | `pnpm initiative:list` | List all initiatives |
596
+ | `pnpm initiative:status` | Show initiative status |
597
+ | `pnpm initiative:add-wu` | Add WU to initiative |
598
+ | `pnpm initiative:remove-wu` | Remove WU from initiative |
599
+ | `pnpm initiative:rename` | Rename initiative ID and rewrite links |
600
+ | `pnpm initiative:delete` | Delete initiative with linked-WU safeguards |
601
+ | `pnpm initiative:plan` | Link plan to initiative |
602
+ | `pnpm initiative:bulk-assign` | Bulk assign WUs to initiative |
423
603
 
424
604
  ### Plans
425
605
 
@@ -545,32 +725,39 @@ If you're an AI agent, read the onboarding docs:
545
725
 
546
726
  ## Skills & Agents
547
727
 
548
- Skills are reusable knowledge bundles that agents load on demand. The `SKILL.md` format pioneered by Claude Code has converged into a de-facto standard: OpenAI Codex (Dec 2025), Cursor (v2.4+), and Windsurf Cascade (Jan 2026) all support it. LumenFlow stores vendor-neutral skill sources in `.lumenflow/skills/` and projects them to each vendor surface via `pnpm lumenflow:integrate --client <x>`.
728
+ Skills are reusable workflow/knowledge bundles that agents load on demand. The `SKILL.md` format pioneered by Claude Code has converged into a de-facto standard adopted by OpenAI Codex (Dec 2025), Cursor (v2.4), and Windsurf Cascade (Jan 2026). LumenFlow stores vendor-neutral skill sources in `.lumenflow/skills/` and projects them to each vendor surface via `pnpm lumenflow:integrate --client <x>`.
549
729
 
550
- ### Core skills
730
+ ### Core skills (vendor-neutral)
551
731
 
552
- | Skill | Load before... |
553
- | --------------------- | ------------------------------------------- |
554
- | `design-first` | Any feature or refactor WU |
555
- | `tdd-workflow` | Writing tests or runtime-logic code |
556
- | `frontend-design` | Any UI / component / page work |
557
- | `wu-lifecycle` | Claim / block / unblock / done decisions |
558
- | `worktree-discipline` | First Read/Edit/Write in a claimed worktree |
559
- | `lumenflow-gates` | When gates fail |
560
- | `bug-classification` | Mid-WU bug discovery (P0-P3 triage) |
732
+ | Skill | Load before... |
733
+ | --------------------- | -------------------------------------------- |
734
+ | `design-first` | Any feature or refactor WU |
735
+ | `tdd-workflow` | Writing tests or runtime-logic code |
736
+ | `frontend-design` | Any UI / component / page work |
737
+ | `wu-lifecycle` | Claim / block / unblock / done decisions |
738
+ | `worktree-discipline` | First Read/Edit/Write in a claimed worktree |
739
+ | `lumenflow-gates` | When gates fail (format/lint/typecheck/test) |
740
+ | `bug-classification` | Mid-WU bug discovery (P0-P3 triage) |
561
741
 
562
- ### Vendor invocation
742
+ ### Vendor activation
563
743
 
564
- | Vendor | Skill primitive | Invocation |
565
- | ------------- | ------------------------------ | ------------------------------------------------------- |
566
- | Claude Code | Skills (native) | `Skill` tool call, or `/skill <name>` in interactive CLI |
567
- | OpenAI Codex | Skills (Dec 2025) | `/skills` list, `$<name>` mention, or implicit |
568
- | Cursor | Agent Skills (v2.4+) | `/skills` or auto-discovery by agent |
569
- | Windsurf | Cascade Skills (Jan 2026) | Auto-discovery; workflows via `/<workflow-name>` |
570
- | Aider | `CONVENTIONS.md` | `/read CONVENTIONS.md` or `aider --read CONVENTIONS.md` |
571
- | Cline | `.clinerules` | Auto-loaded |
744
+ A skill name written in prose does nothing — it must be **loaded** through the vendor's invocation primitive before the work it covers.
572
745
 
573
- A skill named in prose does nothing — load it through the vendor's invocation before the work it covers.
746
+ | Vendor | Skill primitive | Invocation |
747
+ | ------------ | ------------------------- | -------------------------------------------------------- |
748
+ | Claude Code | Skills (native) | `Skill` tool call, or `/skill <name>` in interactive CLI |
749
+ | OpenAI Codex | Skills (Dec 2025) | `/skills` list, `$<name>` mention, or implicit selection |
750
+ | Cursor | Agent Skills (v2.4+) | `/skills` or auto-discovery by agent |
751
+ | Windsurf | Cascade Skills (Jan 2026) | Auto-discovery; workflows via `/<workflow-name>` |
752
+ | Aider | `CONVENTIONS.md` | `/read CONVENTIONS.md` or `aider --read CONVENTIONS.md` |
753
+ | Cline | `.clinerules` | Auto-loaded |
754
+
755
+ For vendor-specific setup details and per-vendor quirks, see:
756
+
757
+ - Claude Code: [.claude/CLAUDE.md](.claude/CLAUDE.md)
758
+ - Cursor: [.cursor/rules/lumenflow.md](.cursor/rules/lumenflow.md)
759
+ - Windsurf: [.windsurf/rules/lumenflow.md](.windsurf/rules/lumenflow.md)
760
+ - Codex / Aider / Cline: [AGENTS.md](AGENTS.md)
574
761
 
575
762
  ### Agents
576
763
 
@@ -589,6 +776,17 @@ Record explicit delegation lineage when needed: `pnpm wu:delegate --id WU-XXX --
589
776
 
590
777
  Supported clients: `claude-code`, `codex-cli`, `cursor`, `gemini-cli`, `windsurf`
591
778
 
779
+ ### Typed agent-role contract (ADR-014)
780
+
781
+ Agent aliases above (`general-purpose`, `lumenflow-pm`, etc.) are human-readable handles. The canonical orchestration identity is the typed role contract defined in [ADR-014](docs/09-architecture-decisions/ADR-014-typed-agent-role-contract.md) (public mirror: [lumenflow.dev / architecture / adr-014-typed-agent-role-contract](https://lumenflow.dev/architecture/adr-014-typed-agent-role-contract/)). Future delegation, session, launch-receipt, and `mem:signal` surfaces will carry:
782
+
783
+ - `lifecycle_role` — `orchestrator` | `implementer` | `reviewer` | `finisher` | `recovery`
784
+ - `specialty_profile` — `general` | `delivery` | `docs` | `test` | `triage` | `compliance`
785
+ - `capabilities` — opaque descriptor list (transport-level, not a substitute for role)
786
+ - `ownership_scope` — `initiative_id`, `wu_ids`, `lane`, `responsibility_kinds`
787
+
788
+ Durable artifacts carry `requested_role` (from the orchestrator) and `actual_role` (from the live worker) separately, so role mismatches surface as visible diagnostics rather than being flattened. Aliases remain supported via `role_alias`; the split fields are authoritative. See ADR-014 for the full alias-to-descriptor table and rollout order (delegation → session → memory).
789
+
592
790
  ---
593
791
 
594
792
  ## References
@@ -598,5 +796,6 @@ Supported clients: `claude-code`, `codex-cli`, `cursor`, `gemini-cli`, `windsurf
598
796
  - [Troubleshooting wu:done]({{DOCS_ONBOARDING_PATH}}/troubleshooting-wu-done.md) -- Most common completion mistakes
599
797
  - [.lumenflow/constraints.md](.lumenflow/constraints.md) -- Non-negotiable rules and forbidden commands
600
798
  - [WU Sizing Guide]({{DOCS_OPERATIONS_PATH}}/_frameworks/lumenflow/wu-sizing-guide.md) -- Scoping work without needless fragmentation
799
+ - [ADR-014: Typed Agent-Role Contract](docs/09-architecture-decisions/ADR-014-typed-agent-role-contract.md) — Canonical orchestration role vocabulary
601
800
  - [Skills Index](.claude/skills/INDEX.md)
602
801
  - [Agents README](.claude/agents/README.md)