@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.
- package/README.md +54 -52
- package/dist/agent-issues-query.js +10 -2
- package/dist/agent-issues-query.js.map +1 -1
- package/dist/agent-runtime-enrollment-events.js +44 -0
- package/dist/agent-runtime-enrollment-events.js.map +1 -0
- package/dist/agent-session-end.js +47 -0
- package/dist/agent-session-end.js.map +1 -1
- package/dist/agent-session-heartbeat.js +250 -0
- package/dist/agent-session-heartbeat.js.map +1 -0
- package/dist/agent-session.js +299 -5
- package/dist/agent-session.js.map +1 -1
- package/dist/capacity-snapshot-emitter.js +73 -0
- package/dist/capacity-snapshot-emitter.js.map +1 -0
- package/dist/claim-queue.js +276 -0
- package/dist/claim-queue.js.map +1 -0
- package/dist/config-set.js +22 -3
- package/dist/config-set.js.map +1 -1
- package/dist/control-plane-sidecar-runner.js +145 -0
- package/dist/control-plane-sidecar-runner.js.map +1 -0
- package/dist/delegation-list.js +160 -1
- package/dist/delegation-list.js.map +1 -1
- package/dist/delegation-role-resolver.js +69 -0
- package/dist/delegation-role-resolver.js.map +1 -0
- package/dist/docs-generate-pack-reference.js +500 -0
- package/dist/docs-generate-pack-reference.js.map +1 -0
- package/dist/docs-sync.js +116 -1
- package/dist/docs-sync.js.map +1 -1
- package/dist/file-edit.js +28 -8
- package/dist/file-edit.js.map +1 -1
- package/dist/file-write.js +29 -5
- package/dist/file-write.js.map +1 -1
- package/dist/gate-co-change.js +25 -7
- package/dist/gate-co-change.js.map +1 -1
- package/dist/gate-conditional.js +19 -7
- package/dist/gate-conditional.js.map +1 -1
- package/dist/gates-runners.js +42 -33
- package/dist/gates-runners.js.map +1 -1
- package/dist/gates-utils.js +34 -20
- package/dist/gates-utils.js.map +1 -1
- package/dist/gates.js +79 -7
- package/dist/gates.js.map +1 -1
- package/dist/hooks/config-resolver.js +10 -1
- package/dist/hooks/config-resolver.js.map +1 -1
- package/dist/init-package-config.js +1 -1
- package/dist/init-package-config.js.map +1 -1
- package/dist/init-scaffolding.js +5 -1
- package/dist/init-scaffolding.js.map +1 -1
- package/dist/init-templates.js +10 -0
- package/dist/init-templates.js.map +1 -1
- package/dist/init.js +1 -1
- package/dist/init.js.map +1 -1
- package/dist/initiative-create.js +17 -0
- package/dist/initiative-create.js.map +1 -1
- package/dist/initiative-remove-wu.js +17 -3
- package/dist/initiative-remove-wu.js.map +1 -1
- package/dist/kernel-event-sync/emitters.js +104 -0
- package/dist/kernel-event-sync/emitters.js.map +1 -0
- package/dist/kernel-event-sync/index.js +13 -0
- package/dist/kernel-event-sync/index.js.map +1 -0
- package/dist/kernel-event-sync/lifecycle-emitters.js +160 -0
- package/dist/kernel-event-sync/lifecycle-emitters.js.map +1 -0
- package/dist/kernel-event-sync/narrow-emissions.js +89 -0
- package/dist/kernel-event-sync/narrow-emissions.js.map +1 -0
- package/dist/kernel-event-sync/software-delivery-emitters.js +297 -0
- package/dist/kernel-event-sync/software-delivery-emitters.js.map +1 -0
- package/dist/lane-lock.js +14 -1
- package/dist/lane-lock.js.map +1 -1
- package/dist/lane-suggest.js +21 -0
- package/dist/lane-suggest.js.map +1 -1
- package/dist/lumenflow-upgrade.js +7 -5
- package/dist/lumenflow-upgrade.js.map +1 -1
- package/dist/mem-context.js +145 -0
- package/dist/mem-context.js.map +1 -1
- package/dist/mem-create.js +39 -6
- package/dist/mem-create.js.map +1 -1
- package/dist/mem-inbox.js +16 -0
- package/dist/mem-inbox.js.map +1 -1
- package/dist/mem-roster.js +95 -0
- package/dist/mem-roster.js.map +1 -0
- package/dist/mem-signal.js +97 -2
- package/dist/mem-signal.js.map +1 -1
- package/dist/metrics-snapshot.js +3 -2
- package/dist/metrics-snapshot.js.map +1 -1
- package/dist/orchestrate-init-status.js +117 -2
- package/dist/orchestrate-init-status.js.map +1 -1
- package/dist/orchestrate-initiative.js +83 -10
- package/dist/orchestrate-initiative.js.map +1 -1
- package/dist/orchestrate-monitor-quality.js +289 -0
- package/dist/orchestrate-monitor-quality.js.map +1 -0
- package/dist/orchestrate-monitor.js +85 -0
- package/dist/orchestrate-monitor.js.map +1 -1
- package/dist/pack-validate.js +127 -2
- package/dist/pack-validate.js.map +1 -1
- package/dist/plan-create.js +18 -0
- package/dist/plan-create.js.map +1 -1
- package/dist/plan-link.js +13 -0
- package/dist/plan-link.js.map +1 -1
- package/dist/plan-promote.js +14 -0
- package/dist/plan-promote.js.map +1 -1
- package/dist/pre-commit-check.js +4 -3
- package/dist/pre-commit-check.js.map +1 -1
- package/dist/public-manifest.js +17 -3
- package/dist/public-manifest.js.map +1 -1
- package/dist/release.js +28 -10
- package/dist/release.js.map +1 -1
- package/dist/session-cross-link.js +139 -0
- package/dist/session-cross-link.js.map +1 -0
- package/dist/sidecar-manager.js +208 -0
- package/dist/sidecar-manager.js.map +1 -0
- package/dist/state-path-resolvers.js +18 -0
- package/dist/state-path-resolvers.js.map +1 -1
- package/dist/stream-heartbeat.js +151 -0
- package/dist/stream-heartbeat.js.map +1 -0
- package/dist/sync-templates.js +56 -2
- package/dist/sync-templates.js.map +1 -1
- package/dist/wu-block.js +47 -5
- package/dist/wu-block.js.map +1 -1
- package/dist/wu-claim-branch.js +8 -4
- package/dist/wu-claim-branch.js.map +1 -1
- package/dist/wu-claim-state.js +5 -3
- package/dist/wu-claim-state.js.map +1 -1
- package/dist/wu-claim-worktree.js +5 -3
- package/dist/wu-claim-worktree.js.map +1 -1
- package/dist/wu-claim.js +261 -9
- package/dist/wu-claim.js.map +1 -1
- package/dist/wu-done-auto-cleanup.js +3 -2
- package/dist/wu-done-auto-cleanup.js.map +1 -1
- package/dist/wu-done-git-ops.js +12 -8
- package/dist/wu-done-git-ops.js.map +1 -1
- package/dist/wu-done-preflight.js +3 -3
- package/dist/wu-done-preflight.js.map +1 -1
- package/dist/wu-done.js +46 -10
- package/dist/wu-done.js.map +1 -1
- package/dist/wu-lifecycle-sync/gate-scope-resolver.js +16 -0
- package/dist/wu-lifecycle-sync/gate-scope-resolver.js.map +1 -0
- package/dist/wu-lifecycle-sync/kernel-event-sync-shim.js +10 -0
- package/dist/wu-lifecycle-sync/kernel-event-sync-shim.js.map +1 -0
- package/dist/wu-prep.js +363 -22
- package/dist/wu-prep.js.map +1 -1
- package/dist/wu-prune.js +68 -27
- package/dist/wu-prune.js.map +1 -1
- package/dist/wu-release.js +34 -3
- package/dist/wu-release.js.map +1 -1
- package/dist/wu-review.js +167 -0
- package/dist/wu-review.js.map +1 -0
- package/dist/wu-spawn-prompt-builders.js +296 -40
- package/dist/wu-spawn-prompt-builders.js.map +1 -1
- package/dist/wu-spawn-strategy-resolver.js +126 -14
- package/dist/wu-spawn-strategy-resolver.js.map +1 -1
- package/dist/wu-unblock.js +52 -22
- package/dist/wu-unblock.js.map +1 -1
- package/package.json +13 -8
- package/packs/agent-runtime/agent-heartbeat.ts +163 -0
- package/packs/agent-runtime/auto-session-integration.ts +874 -0
- package/packs/agent-runtime/delegation-registry-schema.ts +220 -0
- package/packs/agent-runtime/delegation-registry-store.ts +269 -0
- package/packs/agent-runtime/delegation-tree.ts +328 -0
- package/packs/agent-runtime/index.ts +9 -0
- package/packs/agent-runtime/manifest.ts +109 -19
- package/packs/agent-runtime/manifest.yaml +150 -0
- package/packs/agent-runtime/memory-coordination-contract.ts +86 -0
- package/packs/agent-runtime/memory.d.ts +19 -0
- package/packs/agent-runtime/orchestration.ts +238 -23
- package/packs/agent-runtime/package.json +11 -2
- package/packs/agent-runtime/remote-controls/index.ts +7 -0
- package/packs/agent-runtime/remote-controls/operations.ts +399 -0
- package/packs/agent-runtime/remote-controls/port.ts +48 -0
- package/packs/agent-runtime/remote-controls/state-store.ts +258 -0
- package/packs/agent-runtime/remote-controls/types.ts +105 -0
- package/packs/agent-runtime/session-schema.ts +423 -0
- package/packs/agent-runtime/tool-impl/index.ts +1 -0
- package/packs/agent-runtime/tool-impl/remote-controls.mock.ts +252 -0
- package/packs/agent-runtime/tool-impl/remote-controls.ts +273 -0
- package/packs/agent-runtime/tsconfig.json +1 -1
- package/packs/agent-runtime/turn-lifecycle-events.ts +501 -0
- package/packs/sidekick/channel-ingress.ts +137 -0
- package/packs/sidekick/manifest.ts +74 -0
- package/packs/sidekick/manifest.yaml +88 -0
- package/packs/sidekick/package.json +3 -1
- package/packs/sidekick/sidekick-events.ts +517 -0
- package/packs/sidekick/src/adapters/cloud-queue.ts +101 -0
- package/packs/sidekick/src/adapters/control-plane-bridge.adapter.ts +378 -0
- package/packs/sidekick/src/adapters/filesystem-bridge.adapter.ts +224 -0
- package/packs/sidekick/src/domain/channel.types.ts +84 -0
- package/packs/sidekick/src/ports/channel-bridge.port.ts +75 -0
- package/packs/sidekick/src/routines/commit.ts +74 -0
- package/packs/sidekick/tool-impl/channel-tools.ts +47 -0
- package/packs/sidekick/tool-impl/memory-tools.ts +17 -0
- package/packs/sidekick/tool-impl/routine-commit.ts +102 -0
- package/packs/sidekick/tool-impl/routine-tools.ts +67 -7
- package/packs/sidekick/tool-impl/runtime-context.ts +4 -0
- package/packs/sidekick/tool-impl/storage.ts +3 -0
- package/packs/sidekick/tool-impl/system-tools.ts +7 -0
- package/packs/sidekick/tool-impl/task-tools.ts +46 -0
- package/packs/sidekick/tsconfig.json +1 -1
- package/packs/software-delivery/manifest-schema.ts +30 -0
- package/packs/software-delivery/manifest.ts +160 -11
- package/packs/software-delivery/manifest.yaml +210 -230
- package/packs/software-delivery/package.json +88 -3
- package/packs/software-delivery/src/commands/index.ts +5 -0
- package/packs/software-delivery/src/config/delivery-review-contract.ts +20 -0
- package/packs/software-delivery/src/config/env-accessors.ts +19 -0
- package/packs/software-delivery/src/config/index.ts +8 -0
- package/packs/software-delivery/src/config/normalize-config-keys.ts +19 -0
- package/packs/software-delivery/src/config/schemas/lumenflow-config-schema-types.ts +436 -0
- package/packs/software-delivery/src/config/workspace-reader.ts +310 -0
- package/packs/software-delivery/src/constants/backlog-patterns.ts +31 -0
- package/packs/software-delivery/src/constants/client-ids.ts +19 -0
- package/packs/software-delivery/src/constants/config-contract.ts +7 -0
- package/packs/software-delivery/src/constants/docs-layout-presets.ts +50 -0
- package/packs/software-delivery/src/constants/duration-constants.ts +20 -0
- package/packs/software-delivery/src/constants/gate-constants.ts +32 -0
- package/packs/software-delivery/src/constants/index.ts +29 -0
- package/packs/software-delivery/src/constants/lock-constants.ts +35 -0
- package/packs/software-delivery/src/constants/object-guards.ts +12 -0
- package/packs/software-delivery/src/constants/section-headings.ts +107 -0
- package/packs/software-delivery/src/constants/wu-cli-constants.ts +485 -0
- package/packs/software-delivery/src/constants/wu-domain-constants.ts +466 -0
- package/packs/software-delivery/src/constants/wu-git-constants.ts +7 -0
- package/packs/software-delivery/src/constants/wu-id-format.ts +327 -0
- package/packs/software-delivery/src/constants/wu-paths-constants.ts +358 -0
- package/packs/software-delivery/src/constants/wu-statuses.ts +287 -0
- package/packs/software-delivery/src/constants/wu-type-helpers.ts +67 -0
- package/packs/software-delivery/src/constants/wu-ui-constants.ts +267 -0
- package/packs/software-delivery/src/constants/wu-validation-constants.ts +73 -0
- package/packs/software-delivery/src/domain/index.ts +5 -0
- package/packs/software-delivery/src/domain/orchestration.constants.ts +168 -0
- package/packs/software-delivery/src/domain/orchestration.schemas.ts +239 -0
- package/packs/software-delivery/src/domain/orchestration.types.ts +178 -0
- package/packs/software-delivery/src/methodology/incremental-test.ts +90 -0
- package/packs/software-delivery/src/methodology/index.ts +6 -0
- package/packs/software-delivery/src/methodology/manual-test-validator.ts +292 -0
- package/packs/software-delivery/src/policy/coverage-gate.ts +270 -0
- package/packs/software-delivery/src/policy/gates-agent-mode.ts +223 -0
- package/packs/software-delivery/src/policy/gates-config-internal.ts +121 -0
- package/packs/software-delivery/src/policy/gates-config.ts +293 -0
- package/packs/software-delivery/src/policy/gates-coverage.ts +247 -0
- package/packs/software-delivery/src/policy/gates-presets.ts +134 -0
- package/packs/software-delivery/src/policy/gates-schemas.ts +173 -0
- package/packs/software-delivery/src/policy/index.ts +22 -0
- package/packs/software-delivery/src/policy/package-manager-resolver.ts +319 -0
- package/packs/software-delivery/src/policy/resolve-policy.ts +518 -0
- package/packs/software-delivery/src/ports/config.ports.ts +90 -0
- package/packs/software-delivery/src/ports/dashboard-renderer.port.ts +125 -0
- package/packs/software-delivery/src/ports/index.ts +10 -0
- package/packs/software-delivery/src/ports/sync-validator.ports.ts +59 -0
- package/packs/software-delivery/src/ports/wu-helpers.ports.ts +168 -0
- package/packs/software-delivery/src/ports/wu-state.ports.ts +241 -0
- package/packs/software-delivery/src/primitives/index.ts +5 -0
- package/packs/software-delivery/src/runtime/index.ts +6 -0
- package/packs/software-delivery/src/runtime/work-classifier.ts +561 -0
- package/packs/software-delivery/src/sandbox/index.ts +10 -0
- package/packs/software-delivery/src/sandbox/sandbox-allowlist.ts +118 -0
- package/packs/software-delivery/src/sandbox/sandbox-backend-linux.ts +88 -0
- package/packs/software-delivery/src/sandbox/sandbox-backend-macos.ts +154 -0
- package/packs/software-delivery/src/sandbox/sandbox-backend-windows.ts +47 -0
- package/packs/software-delivery/src/sandbox/sandbox-profile.ts +153 -0
- package/packs/software-delivery/src/schemas/index.ts +5 -0
- package/packs/software-delivery/src/state/date-utils.ts +158 -0
- package/packs/software-delivery/src/state/index.ts +15 -0
- package/packs/software-delivery/src/state/state-machine.ts +119 -0
- package/packs/software-delivery/src/state/wu-doc-types.ts +51 -0
- package/packs/software-delivery/src/state/wu-paths.ts +381 -0
- package/packs/software-delivery/src/state/wu-schema.ts +1139 -0
- package/packs/software-delivery/src/state/wu-state-schema.ts +255 -0
- package/packs/software-delivery/src/state/wu-yaml.ts +338 -0
- package/packs/software-delivery/src/types.d.ts +16 -0
- package/packs/software-delivery/tool-impl/wu-lifecycle-tools.ts +18 -0
- package/packs/software-delivery/tsconfig.json +28 -2
- package/templates/core/AGENTS.md.template +76 -17
- package/templates/core/LUMENFLOW.md.template +265 -66
- package/templates/core/_frameworks/lumenflow/wu-sizing-guide.md.template +180 -116
- package/templates/core/ai/onboarding/agent-invocation-guide.md.template +26 -8
- package/templates/core/ai/onboarding/existing-project-bootstrap.md.template +171 -0
- package/templates/core/ai/onboarding/first-15-mins.md.template +3 -1
- package/templates/core/ai/onboarding/first-wu-mistakes.md.template +1 -1
- package/templates/core/ai/onboarding/initiative-orchestration.md.template +46 -30
- package/templates/core/ai/onboarding/quick-ref-commands.md.template +36 -33
- package/templates/core/ai/onboarding/release-process.md.template +8 -7
- package/templates/core/ai/onboarding/starting-prompt.md.template +2 -0
- package/templates/core/ai/onboarding/troubleshooting-wu-done.md.template +62 -0
- package/templates/vendors/claude/.claude/CLAUDE.md.template +29 -54
- package/templates/vendors/cursor/.cursor/rules/lumenflow.md.template +24 -52
- package/templates/vendors/windsurf/.windsurf/rules/lumenflow.md.template +24 -52
- package/packs/agent-runtime/.turbo/turbo-build.log +0 -4
- package/packs/sidekick/.turbo/turbo-build.log +0 -4
- 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.
|
|
50
|
-
|
|
51
|
-
pnpm mem:
|
|
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
|
-
|
|
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
|
-
|
|
164
|
+
Canonical WU types are defined by the shared CLI/core taxonomy and advertised by
|
|
165
|
+
`pnpm wu:create --help`:
|
|
135
166
|
|
|
136
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
195
|
+
## Safety: Forbidden Commands and Safe Alternatives
|
|
143
196
|
|
|
144
|
-
LumenFlow
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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 --
|
|
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
|
-
|
|
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
|
-
###
|
|
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
|
-
#
|
|
175
|
-
pnpm mem:
|
|
176
|
-
|
|
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
|
-
|
|
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
|
-
|
|
184
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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:
|
|
422
|
-
| `pnpm 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
|
|
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
|
|
742
|
+
### Vendor activation
|
|
563
743
|
|
|
564
|
-
|
|
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
|
-
|
|
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)
|