@lumenflow/cli 4.23.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +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-cli.js +3 -2
- package/dist/metrics-cli.js.map +1 -1
- package/dist/metrics-snapshot.js +271 -13
- 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 +10 -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/.turbo/turbo-build.log +1 -1
- package/packs/agent-runtime/.turbo/turbo-test.log +25 -0
- package/packs/agent-runtime/.turbo/turbo-typecheck.log +4 -0
- 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 +103 -19
- package/packs/agent-runtime/manifest.yaml +132 -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/.lumenflow/state/conductor/outbox/sidekick-events.jsonl +213 -0
- package/packs/sidekick/.turbo/turbo-build.log +1 -1
- package/packs/sidekick/.turbo/turbo-test.log +25 -0
- package/packs/sidekick/.turbo/turbo-typecheck.log +4 -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/.turbo/turbo-build.log +1 -1
- package/packs/software-delivery/.turbo/turbo-test.log +63 -0
- package/packs/software-delivery/.turbo/turbo-typecheck.log +4 -0
- package/packs/software-delivery/manifest-schema.ts +30 -0
- package/packs/software-delivery/manifest.ts +99 -1
- package/packs/software-delivery/manifest.yaml +46 -0
- 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
|
@@ -18,6 +18,13 @@ import {
|
|
|
18
18
|
type ToolContextLike,
|
|
19
19
|
type ToolOutput,
|
|
20
20
|
} from './shared.js';
|
|
21
|
+
import {
|
|
22
|
+
buildTaskCompletedEvent,
|
|
23
|
+
buildTaskCreatedEvent,
|
|
24
|
+
buildTaskScheduledEvent,
|
|
25
|
+
buildTaskSnoozedEvent,
|
|
26
|
+
emitSidekickEvent,
|
|
27
|
+
} from '../sidekick-events.js';
|
|
21
28
|
|
|
22
29
|
// ---------------------------------------------------------------------------
|
|
23
30
|
// Constants
|
|
@@ -97,6 +104,16 @@ function buildCanceledTask(task: TaskRecord): TaskRecord {
|
|
|
97
104
|
};
|
|
98
105
|
}
|
|
99
106
|
|
|
107
|
+
function movedDueDateLater(
|
|
108
|
+
previousDueAt: string | undefined,
|
|
109
|
+
nextDueAt: string | undefined,
|
|
110
|
+
): boolean {
|
|
111
|
+
if (!previousDueAt || !nextDueAt) {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
return Date.parse(nextDueAt) > Date.parse(previousDueAt);
|
|
115
|
+
}
|
|
116
|
+
|
|
100
117
|
// ---------------------------------------------------------------------------
|
|
101
118
|
// task:create
|
|
102
119
|
// ---------------------------------------------------------------------------
|
|
@@ -140,6 +157,8 @@ async function taskCreateTool(input: unknown, context?: ToolContextLike): Promis
|
|
|
140
157
|
);
|
|
141
158
|
});
|
|
142
159
|
|
|
160
|
+
await emitSidekickEvent(buildTaskCreatedEvent(task));
|
|
161
|
+
|
|
143
162
|
return success({ task: task as unknown as Record<string, unknown> });
|
|
144
163
|
}
|
|
145
164
|
|
|
@@ -234,6 +253,8 @@ async function taskUpdateTool(input: unknown, context?: ToolContextLike): Promis
|
|
|
234
253
|
});
|
|
235
254
|
}
|
|
236
255
|
|
|
256
|
+
const previousDueAt = task.due_at ?? null;
|
|
257
|
+
|
|
237
258
|
await storage.withLock(async () => {
|
|
238
259
|
const latest = await storage.readStore('tasks');
|
|
239
260
|
const target = latest.find((entry) => entry.id === id);
|
|
@@ -254,6 +275,15 @@ async function taskUpdateTool(input: unknown, context?: ToolContextLike): Promis
|
|
|
254
275
|
|
|
255
276
|
const updated = await storage.readStore('tasks');
|
|
256
277
|
const updatedTask = updated.find((entry) => entry.id === id);
|
|
278
|
+
if (updatedTask && movedDueDateLater(previousDueAt ?? undefined, updatedTask.due_at)) {
|
|
279
|
+
await emitSidekickEvent(
|
|
280
|
+
buildTaskSnoozedEvent({
|
|
281
|
+
task_id: id,
|
|
282
|
+
previous_due_at: previousDueAt,
|
|
283
|
+
due_at: updatedTask.due_at ?? previousDueAt ?? '',
|
|
284
|
+
}),
|
|
285
|
+
);
|
|
286
|
+
}
|
|
257
287
|
return success({ task: updatedTask as unknown as Record<string, unknown> });
|
|
258
288
|
}
|
|
259
289
|
|
|
@@ -309,6 +339,9 @@ async function taskCompleteTool(input: unknown, context?: ToolContextLike): Prom
|
|
|
309
339
|
|
|
310
340
|
const updated = await storage.readStore('tasks');
|
|
311
341
|
const completedTask = updated.find((t) => t.id === id);
|
|
342
|
+
if (completedTask) {
|
|
343
|
+
await emitSidekickEvent(buildTaskCompletedEvent(completedTask));
|
|
344
|
+
}
|
|
312
345
|
|
|
313
346
|
return success({ task: completedTask as unknown as Record<string, unknown> });
|
|
314
347
|
}
|
|
@@ -391,6 +424,7 @@ async function taskScheduleTool(input: unknown, context?: ToolContextLike): Prom
|
|
|
391
424
|
|
|
392
425
|
const dueAt = asNonEmptyString(parsed.due_at);
|
|
393
426
|
const cron = asNonEmptyString(parsed.cron);
|
|
427
|
+
const previousDueAt = task.due_at ?? null;
|
|
394
428
|
|
|
395
429
|
if (isDryRun(parsed)) {
|
|
396
430
|
const preview = {
|
|
@@ -429,6 +463,18 @@ async function taskScheduleTool(input: unknown, context?: ToolContextLike): Prom
|
|
|
429
463
|
|
|
430
464
|
const updated = await storage.readStore('tasks');
|
|
431
465
|
const scheduledTask = updated.find((t) => t.id === id);
|
|
466
|
+
if (scheduledTask) {
|
|
467
|
+
await emitSidekickEvent(buildTaskScheduledEvent(scheduledTask));
|
|
468
|
+
if (movedDueDateLater(previousDueAt ?? undefined, scheduledTask.due_at)) {
|
|
469
|
+
await emitSidekickEvent(
|
|
470
|
+
buildTaskSnoozedEvent({
|
|
471
|
+
task_id: id,
|
|
472
|
+
previous_due_at: previousDueAt,
|
|
473
|
+
due_at: scheduledTask.due_at ?? previousDueAt ?? '',
|
|
474
|
+
}),
|
|
475
|
+
);
|
|
476
|
+
}
|
|
477
|
+
}
|
|
432
478
|
|
|
433
479
|
return success({ task: scheduledTask as unknown as Record<string, unknown> });
|
|
434
480
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> @lumenflow/packs-software-delivery@
|
|
2
|
+
> @lumenflow/packs-software-delivery@5.0.0 build /home/tom/source/hellmai/lumenflow-dev/packages/@lumenflow/packs/software-delivery
|
|
3
3
|
> tsc
|
|
4
4
|
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
|
|
2
|
+
> @lumenflow/packs-software-delivery@4.24.0 test /home/tom/source/hellmai/lumenflow-dev/packages/@lumenflow/packs/software-delivery
|
|
3
|
+
> vitest run
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
RUN v4.0.18 /home/tom/source/hellmai/lumenflow-dev/packages/@lumenflow/packs/software-delivery
|
|
7
|
+
|
|
8
|
+
✓ __tests__/bridge-regression.test.ts (1 test) 23ms
|
|
9
|
+
✓ __tests__/runtime/work-classifier.test.ts (46 tests) 89ms
|
|
10
|
+
✓ __tests__/git-runner.test.ts (3 tests) 374ms
|
|
11
|
+
✓ uses explicit LUMENFLOW_GIT_BINARY override when provided 327ms
|
|
12
|
+
✓ __tests__/memory-tools.test.ts (18 tests) 66ms
|
|
13
|
+
✓ __tests__/wu-lifecycle-tools.test.ts (23 tests) 45ms
|
|
14
|
+
✓ __tests__/runtime-cli-adapter.test.ts (5 tests) 160ms
|
|
15
|
+
✓ __tests__/runtime-native-tools.test.ts (5 tests) 204ms
|
|
16
|
+
✓ __tests__/lane-lock.test.ts (6 tests) 95ms
|
|
17
|
+
✓ __tests__/extensions.test.ts (3 tests) 27ms
|
|
18
|
+
✓ __tests__/agent-tools.test.ts (7 tests) 16ms
|
|
19
|
+
✓ __tests__/state/wu-paths.test.ts (49 tests) 65ms
|
|
20
|
+
✓ __tests__/manifest.test.ts (8 tests) 23ms
|
|
21
|
+
✓ __tests__/config/workspace-reader.test.ts (12 tests) 181ms
|
|
22
|
+
✓ __tests__/initiative-orchestration-tools.test.ts (5 tests) 11ms
|
|
23
|
+
✓ __tests__/gate-policies.test.ts (4 tests) 582ms
|
|
24
|
+
✓ resolves state alias and registers pack with integrity hash 562ms
|
|
25
|
+
✓ __tests__/sandbox/sandbox-profile.test.ts (4 tests) 13ms
|
|
26
|
+
✓ __tests__/flow-metrics-tools.test.ts (17 tests) 97ms
|
|
27
|
+
✓ __tests__/constants/wu-id-format.test.ts (43 tests) 36ms
|
|
28
|
+
✓ __tests__/constants/wu-type-helpers.test.ts (11 tests) 1854ms
|
|
29
|
+
✓ pack constants barrel re-exports wu-type-helpers predicates 1850ms
|
|
30
|
+
✓ __tests__/git-tools.test.ts (6 tests) 1161ms
|
|
31
|
+
✓ rejects command arrays that try to execute non-git binaries 392ms
|
|
32
|
+
✓ returns command output payloads for allowed git command arrays 429ms
|
|
33
|
+
✓ __tests__/sandbox/sandbox-allowlist.test.ts (4 tests) 56ms
|
|
34
|
+
✓ __tests__/constants/config-contract.test.ts (28 tests) 44ms
|
|
35
|
+
✓ __tests__/tools/remote-exposure.test.ts (34 tests) 43ms
|
|
36
|
+
✓ __tests__/constants/wu-validation-constants.test.ts (4 tests) 35ms
|
|
37
|
+
✓ __tests__/worktree-tools.test.ts (3 tests) 19ms
|
|
38
|
+
✓ __tests__/config/pack-wrappers-consumer-migration.test.ts (7 tests) 1168ms
|
|
39
|
+
✓ no repo code imports @lumenflow/core/{env-accessors,normalize-config-keys,delivery-review-contract} 1154ms
|
|
40
|
+
✓ __tests__/sandbox/sandbox-backend-macos.test.ts (17 tests) 91ms
|
|
41
|
+
✓ __tests__/state/state-machine.test.ts (20 tests) 54ms
|
|
42
|
+
✓ __tests__/constants/backlog-patterns.test.ts (10 tests) 38ms
|
|
43
|
+
✓ __tests__/packaging/deps-manifest.test.ts (7 tests) 5ms
|
|
44
|
+
✓ __tests__/ports/transitive-clean-ports-moved.test.ts (2 tests) 596ms
|
|
45
|
+
✓ wu-helpers.ports.ts lives at the new pack path 358ms
|
|
46
|
+
✓ __tests__/domain/orchestration-moved.test.ts (3 tests) 35ms
|
|
47
|
+
✓ __tests__/constants/wu-git-constants.test.ts (2 tests) 13ms
|
|
48
|
+
✓ __tests__/sandbox/sandbox-backend-windows.test.ts (3 tests) 20ms
|
|
49
|
+
✓ __tests__/config/schema-rename.test.ts (2 tests) 2ms
|
|
50
|
+
✓ __tests__/constants/gate-constants.test.ts (5 tests) 23ms
|
|
51
|
+
✓ __tests__/sandbox/sandbox-backend-linux.test.ts (3 tests) 54ms
|
|
52
|
+
✓ __tests__/config/env-accessors.test.ts (1 test) 7ms
|
|
53
|
+
✓ __tests__/adr-013-examples-validator-parity.test.ts (4 tests) 22ms
|
|
54
|
+
✓ __tests__/ports/dashboard-renderer-port-moved.test.ts (1 test) 30ms
|
|
55
|
+
✓ __tests__/state/date-utils.test.ts (23 tests) 18ms
|
|
56
|
+
✓ __tests__/state/wu-schema.test.ts (18 tests) 47ms
|
|
57
|
+
✓ __tests__/state/wu-yaml.test.ts (38 tests) 840ms
|
|
58
|
+
|
|
59
|
+
Test Files 43 passed (43)
|
|
60
|
+
Tests 515 passed (515)
|
|
61
|
+
Start at 11:11:52
|
|
62
|
+
Duration 10.27s (transform 26.33s, setup 0ms, import 52.36s, tests 8.38s, environment 59ms)
|
|
63
|
+
|
|
@@ -37,6 +37,13 @@ export interface SoftwareDeliveryManifestTool {
|
|
|
37
37
|
permission: ToolPermission;
|
|
38
38
|
required_scopes: PathScope[];
|
|
39
39
|
internal_only?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* WU-2729 (INIT-060 Phase 2, ADR-013 §3): approval-surface identifiers the
|
|
42
|
+
* tool must present to callers before runtime dispatch. Empty array means
|
|
43
|
+
* no approval gate; undefined means the tool does not declare approval
|
|
44
|
+
* metadata (treated the same as empty by the discovery surface).
|
|
45
|
+
*/
|
|
46
|
+
required_approvals?: string[];
|
|
40
47
|
}
|
|
41
48
|
|
|
42
49
|
export interface SoftwareDeliveryManifestPolicy {
|
|
@@ -57,6 +64,11 @@ export interface SoftwareDeliveryPackManifest {
|
|
|
57
64
|
evidence_types: string[];
|
|
58
65
|
state_aliases: Record<string, string>;
|
|
59
66
|
lane_templates: Array<{ id: string }>;
|
|
67
|
+
/** WU-2718 (INIT-060 WU-1, ADR-013). */
|
|
68
|
+
emitted_event_kinds: string[];
|
|
69
|
+
subscribed_event_kinds: string[];
|
|
70
|
+
required_approvals: string[];
|
|
71
|
+
surfaces_required: string[];
|
|
60
72
|
}
|
|
61
73
|
|
|
62
74
|
function asRecord(input: unknown, label: string): Record<string, unknown> {
|
|
@@ -166,6 +178,12 @@ function parseTool(input: unknown, index: number): SoftwareDeliveryManifestTool
|
|
|
166
178
|
throw new Error(`tools[${index}].permission is invalid.`);
|
|
167
179
|
}
|
|
168
180
|
|
|
181
|
+
// WU-2729: optional per-tool required_approvals list.
|
|
182
|
+
const parsedApprovals =
|
|
183
|
+
tool.required_approvals === undefined
|
|
184
|
+
? undefined
|
|
185
|
+
: parseStringArray(tool.required_approvals, `tools[${index}].required_approvals`);
|
|
186
|
+
|
|
169
187
|
return {
|
|
170
188
|
name: parseNonEmptyString(tool.name, `tools[${index}].name`),
|
|
171
189
|
entry: parseNonEmptyString(tool.entry, `tools[${index}].entry`),
|
|
@@ -180,6 +198,7 @@ function parseTool(input: unknown, index: number): SoftwareDeliveryManifestTool
|
|
|
180
198
|
}
|
|
181
199
|
return tool.internal_only;
|
|
182
200
|
})(),
|
|
201
|
+
...(parsedApprovals === undefined ? {} : { required_approvals: parsedApprovals }),
|
|
183
202
|
};
|
|
184
203
|
}
|
|
185
204
|
|
|
@@ -233,6 +252,17 @@ export const SoftwareDeliveryManifestSchema: Parser<SoftwareDeliveryPackManifest
|
|
|
233
252
|
const entry = asRecord(laneTemplate, `lane_templates[${index}]`);
|
|
234
253
|
return { id: parseNonEmptyString(entry.id, `lane_templates[${index}].id`) };
|
|
235
254
|
}),
|
|
255
|
+
// WU-2718 (INIT-060 WU-1, ADR-013): manifest extension fields.
|
|
256
|
+
emitted_event_kinds: parseStringArray(
|
|
257
|
+
manifest.emitted_event_kinds ?? [],
|
|
258
|
+
'emitted_event_kinds',
|
|
259
|
+
),
|
|
260
|
+
subscribed_event_kinds: parseStringArray(
|
|
261
|
+
manifest.subscribed_event_kinds ?? [],
|
|
262
|
+
'subscribed_event_kinds',
|
|
263
|
+
),
|
|
264
|
+
required_approvals: parseStringArray(manifest.required_approvals ?? [], 'required_approvals'),
|
|
265
|
+
surfaces_required: parseStringArray(manifest.surfaces_required ?? [], 'surfaces_required'),
|
|
236
266
|
};
|
|
237
267
|
},
|
|
238
268
|
};
|
|
@@ -55,6 +55,10 @@ const WU_RELEASE_TOOL_ENTRY = 'tool-impl/wu-lifecycle-tools.ts#wuReleaseTool';
|
|
|
55
55
|
const WU_RECOVER_TOOL_ENTRY = 'tool-impl/wu-lifecycle-tools.ts#wuRecoverTool';
|
|
56
56
|
const WU_REPAIR_TOOL_ENTRY = 'tool-impl/wu-lifecycle-tools.ts#wuRepairTool';
|
|
57
57
|
const GATES_TOOL_ENTRY = 'tool-impl/wu-lifecycle-tools.ts#gatesTool';
|
|
58
|
+
// WU-2729 (INIT-060 Phase 2): gates:docs exposes docs-only gate runs via a
|
|
59
|
+
// dedicated manifest entry so remote callers can request the docs gate
|
|
60
|
+
// without opting into the permissive gates handler surface.
|
|
61
|
+
const GATES_DOCS_TOOL_ENTRY = 'tool-impl/wu-lifecycle-tools.ts#gatesDocsTool';
|
|
58
62
|
const CONFIG_SET_TOOL_ENTRY = 'tool-impl/runtime-native-tools.ts#configSetTool';
|
|
59
63
|
const CONFIG_GET_TOOL_ENTRY = 'tool-impl/runtime-native-tools.ts#configGetTool';
|
|
60
64
|
const MEM_INIT_TOOL_ENTRY = 'tool-impl/memory-tools.ts#memInitTool';
|
|
@@ -193,6 +197,7 @@ const TOOL_PERMISSIONS = {
|
|
|
193
197
|
'flow:bottlenecks': 'read',
|
|
194
198
|
'flow:report': 'read',
|
|
195
199
|
gates: 'write',
|
|
200
|
+
'gates:docs': 'write',
|
|
196
201
|
'file:delete': 'write',
|
|
197
202
|
'file:edit': 'write',
|
|
198
203
|
'file:read': 'read',
|
|
@@ -272,6 +277,7 @@ const TOOL_ENTRY_OVERRIDES: Partial<Record<ToolName, string>> = {
|
|
|
272
277
|
'wu:repair': WU_REPAIR_TOOL_ENTRY,
|
|
273
278
|
'wu:infer-lane': WU_INFER_LANE_TOOL_ENTRY,
|
|
274
279
|
gates: GATES_TOOL_ENTRY,
|
|
280
|
+
'gates:docs': GATES_DOCS_TOOL_ENTRY,
|
|
275
281
|
'mem:init': MEM_INIT_TOOL_ENTRY,
|
|
276
282
|
'mem:start': MEM_START_TOOL_ENTRY,
|
|
277
283
|
'mem:ready': MEM_READY_TOOL_ENTRY,
|
|
@@ -361,15 +367,85 @@ function requiredScopesForPermission(permission: ToolPermission): PathScope[] {
|
|
|
361
367
|
];
|
|
362
368
|
}
|
|
363
369
|
|
|
370
|
+
/**
|
|
371
|
+
* WU-2729 (INIT-060 Phase 2): the 10 software-delivery pack tools that are
|
|
372
|
+
* callable remotely via POST /tools/:name. The HTTP surface uses this list
|
|
373
|
+
* to build its allowlist so the set is the single source of truth (no
|
|
374
|
+
* duplicate allowlist in surface code). ADR-013 §3 tool exposure.
|
|
375
|
+
*/
|
|
376
|
+
export const REMOTE_CALLABLE_TOOLS = [
|
|
377
|
+
'gates',
|
|
378
|
+
'gates:docs',
|
|
379
|
+
'lane:suggest',
|
|
380
|
+
'lane:health',
|
|
381
|
+
'plan:create',
|
|
382
|
+
'plan:promote',
|
|
383
|
+
'initiative:create',
|
|
384
|
+
'initiative:add-wu',
|
|
385
|
+
'initiative:status',
|
|
386
|
+
'flow:report',
|
|
387
|
+
] as const satisfies readonly ToolName[];
|
|
388
|
+
|
|
389
|
+
export type RemoteCallableToolName = (typeof REMOTE_CALLABLE_TOOLS)[number];
|
|
390
|
+
|
|
391
|
+
/**
|
|
392
|
+
* Well-known approval identifiers the software-delivery pack may request.
|
|
393
|
+
* Kept narrow on purpose; adding a new identifier requires an ADR.
|
|
394
|
+
*/
|
|
395
|
+
export const SOFTWARE_DELIVERY_APPROVAL_IDS = {
|
|
396
|
+
REMOTE_MUTATION: 'software-delivery:remote_mutation',
|
|
397
|
+
} as const;
|
|
398
|
+
|
|
399
|
+
/**
|
|
400
|
+
* WU-2729 (INIT-060 Phase 2): per-tool required_approvals overrides.
|
|
401
|
+
* Tools absent from this table default to `[]` (no approval required).
|
|
402
|
+
* Read-only tools MUST remain at `[]`; state-mutating remote-callable
|
|
403
|
+
* tools SHOULD request an explicit approval identifier so the conductor
|
|
404
|
+
* UI can surface the approval gate to operators.
|
|
405
|
+
*/
|
|
406
|
+
const APPROVAL_OVERRIDES: Partial<Record<ToolName, readonly string[]>> = {
|
|
407
|
+
'lane:suggest': [SOFTWARE_DELIVERY_APPROVAL_IDS.REMOTE_MUTATION],
|
|
408
|
+
'plan:create': [SOFTWARE_DELIVERY_APPROVAL_IDS.REMOTE_MUTATION],
|
|
409
|
+
'plan:promote': [SOFTWARE_DELIVERY_APPROVAL_IDS.REMOTE_MUTATION],
|
|
410
|
+
'initiative:create': [SOFTWARE_DELIVERY_APPROVAL_IDS.REMOTE_MUTATION],
|
|
411
|
+
'initiative:add-wu': [SOFTWARE_DELIVERY_APPROVAL_IDS.REMOTE_MUTATION],
|
|
412
|
+
};
|
|
413
|
+
|
|
414
|
+
function requiredApprovalsForTool(name: ToolName): string[] | undefined {
|
|
415
|
+
// WU-2729: only the 10 remote-callable tools carry explicit
|
|
416
|
+
// required_approvals metadata (even if empty). Other tools leave the
|
|
417
|
+
// field undefined so the manifest stays minimally descriptive.
|
|
418
|
+
const isRemoteCallable = (REMOTE_CALLABLE_TOOLS as readonly string[]).includes(name);
|
|
419
|
+
if (!isRemoteCallable) {
|
|
420
|
+
return undefined;
|
|
421
|
+
}
|
|
422
|
+
const override = APPROVAL_OVERRIDES[name];
|
|
423
|
+
return override ? [...override] : [];
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
/**
|
|
427
|
+
* WU-2729: ordered list of the 10 remote-callable tool names. Preserves
|
|
428
|
+
* declaration order from REMOTE_CALLABLE_TOOLS so callers can render
|
|
429
|
+
* stable UIs without re-sorting.
|
|
430
|
+
*/
|
|
431
|
+
export function getRemoteCallableToolNames(): RemoteCallableToolName[] {
|
|
432
|
+
return [...REMOTE_CALLABLE_TOOLS];
|
|
433
|
+
}
|
|
434
|
+
|
|
364
435
|
function createManifestTools(): SoftwareDeliveryManifestTool[] {
|
|
365
436
|
return (Object.keys(TOOL_PERMISSIONS) as ToolName[]).map((name) => {
|
|
366
437
|
const permission = TOOL_PERMISSIONS[name];
|
|
367
|
-
|
|
438
|
+
const approvals = requiredApprovalsForTool(name);
|
|
439
|
+
const entry: SoftwareDeliveryManifestTool = {
|
|
368
440
|
name,
|
|
369
441
|
entry: resolveToolEntry(name),
|
|
370
442
|
permission,
|
|
371
443
|
required_scopes: requiredScopesForPermission(permission),
|
|
372
444
|
};
|
|
445
|
+
if (approvals !== undefined) {
|
|
446
|
+
entry.required_approvals = approvals;
|
|
447
|
+
}
|
|
448
|
+
return entry;
|
|
373
449
|
});
|
|
374
450
|
}
|
|
375
451
|
|
|
@@ -400,6 +476,24 @@ export function renderSoftwareDeliveryMigrationScorecard(
|
|
|
400
476
|
}
|
|
401
477
|
|
|
402
478
|
const POLICY_SUFFIXES = ['format', 'lint', 'typecheck', 'test', 'coverage'] as const;
|
|
479
|
+
const SOFTWARE_DELIVERY_EMITTED_EVENT_KINDS = [
|
|
480
|
+
'software-delivery:gate_started',
|
|
481
|
+
'software-delivery:gate_passed',
|
|
482
|
+
'software-delivery:gate_failed',
|
|
483
|
+
'software-delivery:co_change_rule_fired',
|
|
484
|
+
'software-delivery:conditional_command_fired',
|
|
485
|
+
'software-delivery:lane_wip_breached',
|
|
486
|
+
'software-delivery:lane_locked',
|
|
487
|
+
'software-delivery:lane_unlocked',
|
|
488
|
+
'software-delivery:lane_suggestion_emitted',
|
|
489
|
+
'software-delivery:initiative_created',
|
|
490
|
+
'software-delivery:initiative_closed',
|
|
491
|
+
'software-delivery:initiative_phase_advanced',
|
|
492
|
+
'software-delivery:plan_created',
|
|
493
|
+
'software-delivery:plan_linked',
|
|
494
|
+
'software-delivery:plan_promoted',
|
|
495
|
+
] as const;
|
|
496
|
+
const SOFTWARE_DELIVERY_REQUIRED_SURFACES = ['http'] as const;
|
|
403
497
|
|
|
404
498
|
export const SOFTWARE_DELIVERY_MANIFEST: SoftwareDeliveryPackManifest = {
|
|
405
499
|
id: SOFTWARE_DELIVERY_PACK_ID,
|
|
@@ -415,4 +509,8 @@ export const SOFTWARE_DELIVERY_MANIFEST: SoftwareDeliveryPackManifest = {
|
|
|
415
509
|
evidence_types: ['gate-run'],
|
|
416
510
|
state_aliases: { active: 'in_progress' },
|
|
417
511
|
lane_templates: [],
|
|
512
|
+
emitted_event_kinds: [...SOFTWARE_DELIVERY_EMITTED_EVENT_KINDS],
|
|
513
|
+
subscribed_event_kinds: [],
|
|
514
|
+
required_approvals: [],
|
|
515
|
+
surfaces_required: [...SOFTWARE_DELIVERY_REQUIRED_SURFACES],
|
|
418
516
|
};
|
|
@@ -273,6 +273,8 @@ tools:
|
|
|
273
273
|
- type: path
|
|
274
274
|
pattern: '**'
|
|
275
275
|
access: write
|
|
276
|
+
required_approvals:
|
|
277
|
+
- software-delivery:remote_mutation
|
|
276
278
|
- name: initiative:bulk-assign
|
|
277
279
|
entry: tool-impl/initiative-orchestration-tools.ts#initiativeBulkAssignTool
|
|
278
280
|
permission: write
|
|
@@ -287,6 +289,8 @@ tools:
|
|
|
287
289
|
- type: path
|
|
288
290
|
pattern: '**'
|
|
289
291
|
access: write
|
|
292
|
+
required_approvals:
|
|
293
|
+
- software-delivery:remote_mutation
|
|
290
294
|
- name: initiative:edit
|
|
291
295
|
entry: tool-impl/initiative-orchestration-tools.ts#initiativeEditTool
|
|
292
296
|
permission: write
|
|
@@ -322,6 +326,7 @@ tools:
|
|
|
322
326
|
- type: path
|
|
323
327
|
pattern: '**'
|
|
324
328
|
access: read
|
|
329
|
+
required_approvals: []
|
|
325
330
|
# lane:*
|
|
326
331
|
- name: lane:health
|
|
327
332
|
entry: tool-impl/runtime-native-tools.ts#laneHealthTool
|
|
@@ -330,6 +335,7 @@ tools:
|
|
|
330
335
|
- type: path
|
|
331
336
|
pattern: '**'
|
|
332
337
|
access: read
|
|
338
|
+
required_approvals: []
|
|
333
339
|
- name: lane:suggest
|
|
334
340
|
entry: tool-impl/runtime-native-tools.ts#laneSuggestTool
|
|
335
341
|
permission: write
|
|
@@ -337,6 +343,8 @@ tools:
|
|
|
337
343
|
- type: path
|
|
338
344
|
pattern: '**'
|
|
339
345
|
access: write
|
|
346
|
+
required_approvals:
|
|
347
|
+
- software-delivery:remote_mutation
|
|
340
348
|
# flow:*
|
|
341
349
|
- name: flow:bottlenecks
|
|
342
350
|
entry: tool-impl/flow-metrics-tools.ts#flowBottlenecksTool
|
|
@@ -352,6 +360,7 @@ tools:
|
|
|
352
360
|
- type: path
|
|
353
361
|
pattern: '**'
|
|
354
362
|
access: read
|
|
363
|
+
required_approvals: []
|
|
355
364
|
# gate:*
|
|
356
365
|
- name: gates
|
|
357
366
|
entry: tool-impl/wu-lifecycle-tools.ts#gatesTool
|
|
@@ -360,6 +369,15 @@ tools:
|
|
|
360
369
|
- type: path
|
|
361
370
|
pattern: '**'
|
|
362
371
|
access: write
|
|
372
|
+
required_approvals: []
|
|
373
|
+
- name: gates:docs
|
|
374
|
+
entry: tool-impl/wu-lifecycle-tools.ts#gatesDocsTool
|
|
375
|
+
permission: write
|
|
376
|
+
required_scopes:
|
|
377
|
+
- type: path
|
|
378
|
+
pattern: '**'
|
|
379
|
+
access: write
|
|
380
|
+
required_approvals: []
|
|
363
381
|
# file:*
|
|
364
382
|
- name: file:delete
|
|
365
383
|
entry: tool-impl/runtime-native-tools.ts#fileDeleteTool
|
|
@@ -499,6 +517,8 @@ tools:
|
|
|
499
517
|
- type: path
|
|
500
518
|
pattern: '**'
|
|
501
519
|
access: write
|
|
520
|
+
required_approvals:
|
|
521
|
+
- software-delivery:remote_mutation
|
|
502
522
|
- name: plan:edit
|
|
503
523
|
entry: tool-impl/initiative-orchestration-tools.ts#planEditTool
|
|
504
524
|
permission: write
|
|
@@ -520,6 +540,8 @@ tools:
|
|
|
520
540
|
- type: path
|
|
521
541
|
pattern: '**'
|
|
522
542
|
access: write
|
|
543
|
+
required_approvals:
|
|
544
|
+
- software-delivery:remote_mutation
|
|
523
545
|
# setup:*
|
|
524
546
|
- name: backlog:prune
|
|
525
547
|
entry: tool-impl/runtime-native-tools.ts#backlogPruneTool
|
|
@@ -710,3 +732,27 @@ evidence_types:
|
|
|
710
732
|
state_aliases:
|
|
711
733
|
active: in_progress
|
|
712
734
|
lane_templates: []
|
|
735
|
+
# WU-2728 (INIT-060, ADR-013): software-delivery pack emits 15 namespaced
|
|
736
|
+
# event kinds on a single channel (software-delivery). All kinds are
|
|
737
|
+
# ephemeral per ADR-013 §4 backpressure split; fail-silent when
|
|
738
|
+
# control_plane.org_id is unset (WU-2643 precedent).
|
|
739
|
+
emitted_event_kinds:
|
|
740
|
+
- software-delivery:gate_started
|
|
741
|
+
- software-delivery:gate_passed
|
|
742
|
+
- software-delivery:gate_failed
|
|
743
|
+
- software-delivery:co_change_rule_fired
|
|
744
|
+
- software-delivery:conditional_command_fired
|
|
745
|
+
- software-delivery:lane_wip_breached
|
|
746
|
+
- software-delivery:lane_locked
|
|
747
|
+
- software-delivery:lane_unlocked
|
|
748
|
+
- software-delivery:lane_suggestion_emitted
|
|
749
|
+
- software-delivery:initiative_created
|
|
750
|
+
- software-delivery:initiative_closed
|
|
751
|
+
- software-delivery:initiative_phase_advanced
|
|
752
|
+
- software-delivery:plan_created
|
|
753
|
+
- software-delivery:plan_linked
|
|
754
|
+
- software-delivery:plan_promoted
|
|
755
|
+
subscribed_event_kinds: []
|
|
756
|
+
required_approvals: []
|
|
757
|
+
surfaces_required:
|
|
758
|
+
- http
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lumenflow/packs-software-delivery",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.0",
|
|
4
4
|
"description": "Software delivery pack for LumenFlow — work units, gates, lanes, initiatives, and agent coordination",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"lumenflow",
|
|
@@ -25,7 +25,71 @@
|
|
|
25
25
|
"exports": {
|
|
26
26
|
".": "./dist/index.js",
|
|
27
27
|
"./tools": "./dist/tools/index.js",
|
|
28
|
-
"./tool-impl": "./dist/tool-impl/index.js"
|
|
28
|
+
"./tool-impl": "./dist/tool-impl/index.js",
|
|
29
|
+
"./constants": "./dist/src/constants/index.js",
|
|
30
|
+
"./constants/wu-statuses": "./dist/src/constants/wu-statuses.js",
|
|
31
|
+
"./constants/object-guards": "./dist/src/constants/object-guards.js",
|
|
32
|
+
"./constants/config-contract": "./dist/src/constants/config-contract.js",
|
|
33
|
+
"./constants/gate-constants": "./dist/src/constants/gate-constants.js",
|
|
34
|
+
"./constants/wu-ui-constants": "./dist/src/constants/wu-ui-constants.js",
|
|
35
|
+
"./constants/wu-paths-constants": "./dist/src/constants/wu-paths-constants.js",
|
|
36
|
+
"./constants/docs-layout-presets": "./dist/src/constants/docs-layout-presets.js",
|
|
37
|
+
"./constants/wu-git-constants": "./dist/src/constants/wu-git-constants.js",
|
|
38
|
+
"./constants/wu-cli-constants": "./dist/src/constants/wu-cli-constants.js",
|
|
39
|
+
"./constants/client-ids": "./dist/src/constants/client-ids.js",
|
|
40
|
+
"./constants/wu-domain-constants": "./dist/src/constants/wu-domain-constants.js",
|
|
41
|
+
"./constants/wu-type-helpers": "./dist/src/constants/wu-type-helpers.js",
|
|
42
|
+
"./constants/wu-validation-constants": "./dist/src/constants/wu-validation-constants.js",
|
|
43
|
+
"./constants/backlog-patterns": "./dist/src/constants/backlog-patterns.js",
|
|
44
|
+
"./constants/duration-constants": "./dist/src/constants/duration-constants.js",
|
|
45
|
+
"./constants/section-headings": "./dist/src/constants/section-headings.js",
|
|
46
|
+
"./constants/wu-id-format": "./dist/src/constants/wu-id-format.js",
|
|
47
|
+
"./runtime": "./dist/src/runtime/index.js",
|
|
48
|
+
"./runtime/work-classifier": "./dist/src/runtime/work-classifier.js",
|
|
49
|
+
"./sandbox": "./dist/src/sandbox/index.js",
|
|
50
|
+
"./sandbox/sandbox-profile": "./dist/src/sandbox/sandbox-profile.js",
|
|
51
|
+
"./sandbox/sandbox-allowlist": "./dist/src/sandbox/sandbox-allowlist.js",
|
|
52
|
+
"./sandbox/sandbox-backend-linux": "./dist/src/sandbox/sandbox-backend-linux.js",
|
|
53
|
+
"./sandbox/sandbox-backend-macos": "./dist/src/sandbox/sandbox-backend-macos.js",
|
|
54
|
+
"./sandbox/sandbox-backend-windows": "./dist/src/sandbox/sandbox-backend-windows.js",
|
|
55
|
+
"./state": "./dist/src/state/index.js",
|
|
56
|
+
"./state/wu-state-schema": "./dist/src/state/wu-state-schema.js",
|
|
57
|
+
"./state/wu-doc-types": "./dist/src/state/wu-doc-types.js",
|
|
58
|
+
"./state/wu-paths": "./dist/src/state/wu-paths.js",
|
|
59
|
+
"./state/wu-yaml": "./dist/src/state/wu-yaml.js",
|
|
60
|
+
"./state/wu-schema": "./dist/src/state/wu-schema.js",
|
|
61
|
+
"./state/date-utils": "./dist/src/state/date-utils.js",
|
|
62
|
+
"./state/state-machine": "./dist/src/state/state-machine.js",
|
|
63
|
+
"./ports": "./dist/src/ports/index.js",
|
|
64
|
+
"./ports/wu-state.ports": "./dist/src/ports/wu-state.ports.js",
|
|
65
|
+
"./ports/sync-validator.ports": "./dist/src/ports/sync-validator.ports.js",
|
|
66
|
+
"./ports/wu-helpers.ports": "./dist/src/ports/wu-helpers.ports.js",
|
|
67
|
+
"./ports/config.ports": "./dist/src/ports/config.ports.js",
|
|
68
|
+
"./ports/dashboard-renderer.port": "./dist/src/ports/dashboard-renderer.port.js",
|
|
69
|
+
"./policy": "./dist/src/policy/index.js",
|
|
70
|
+
"./policy/gates-schemas": "./dist/src/policy/gates-schemas.js",
|
|
71
|
+
"./policy/resolve-policy": "./dist/src/policy/resolve-policy.js",
|
|
72
|
+
"./policy/coverage-gate": "./dist/src/policy/coverage-gate.js",
|
|
73
|
+
"./policy/gates-config": "./dist/src/policy/gates-config.js",
|
|
74
|
+
"./policy/gates-presets": "./dist/src/policy/gates-presets.js",
|
|
75
|
+
"./policy/gates-config-internal": "./dist/src/policy/gates-config-internal.js",
|
|
76
|
+
"./policy/gates-agent-mode": "./dist/src/policy/gates-agent-mode.js",
|
|
77
|
+
"./policy/gates-coverage": "./dist/src/policy/gates-coverage.js",
|
|
78
|
+
"./policy/package-manager-resolver": "./dist/src/policy/package-manager-resolver.js",
|
|
79
|
+
"./config": "./dist/src/config/index.js",
|
|
80
|
+
"./config/workspace-reader": "./dist/src/config/workspace-reader.js",
|
|
81
|
+
"./config/schemas/lumenflow-config-schema-types": "./dist/src/config/schemas/lumenflow-config-schema-types.js",
|
|
82
|
+
"./config/env-accessors": "./dist/src/config/env-accessors.js",
|
|
83
|
+
"./config/normalize-config-keys": "./dist/src/config/normalize-config-keys.js",
|
|
84
|
+
"./config/delivery-review-contract": "./dist/src/config/delivery-review-contract.js",
|
|
85
|
+
"./constants/lock-constants": "./dist/src/constants/lock-constants.js",
|
|
86
|
+
"./domain": "./dist/src/domain/index.js",
|
|
87
|
+
"./domain/orchestration.types": "./dist/src/domain/orchestration.types.js",
|
|
88
|
+
"./domain/orchestration.schemas": "./dist/src/domain/orchestration.schemas.js",
|
|
89
|
+
"./domain/orchestration.constants": "./dist/src/domain/orchestration.constants.js",
|
|
90
|
+
"./methodology": "./dist/src/methodology/index.js",
|
|
91
|
+
"./methodology/manual-test-validator": "./dist/src/methodology/manual-test-validator.js",
|
|
92
|
+
"./methodology/incremental-test": "./dist/src/methodology/incremental-test.js"
|
|
29
93
|
},
|
|
30
94
|
"main": "./dist/index.js",
|
|
31
95
|
"types": "./dist/index.d.ts",
|
|
@@ -42,13 +106,34 @@
|
|
|
42
106
|
"typecheck": "tsc --noEmit"
|
|
43
107
|
},
|
|
44
108
|
"dependencies": {
|
|
45
|
-
"@lumenflow/
|
|
109
|
+
"@lumenflow/host": "workspace:^",
|
|
110
|
+
"@lumenflow/kernel": "workspace:^",
|
|
111
|
+
"change-case": "^5.4.4",
|
|
112
|
+
"commander": "^14.0.3",
|
|
113
|
+
"date-fns": "^4.1.0",
|
|
114
|
+
"fast-glob": "^3.3.3",
|
|
115
|
+
"glob": "^13.0.3",
|
|
116
|
+
"gray-matter": "^4.0.3",
|
|
117
|
+
"micromatch": "^4.0.8",
|
|
118
|
+
"minimatch": "^10.2.0",
|
|
119
|
+
"p-retry": "^7.1.1",
|
|
120
|
+
"picocolors": "^1.1.1",
|
|
121
|
+
"yaml": "^2.8.2",
|
|
122
|
+
"zod": "^4.3.6"
|
|
46
123
|
},
|
|
47
124
|
"devDependencies": {
|
|
48
125
|
"simple-git": "^3.27.0",
|
|
49
126
|
"typescript": "^5.9.3",
|
|
50
127
|
"vitest": "^4.0.18"
|
|
51
128
|
},
|
|
129
|
+
"peerDependencies": {
|
|
130
|
+
"@lumenflow/core": "workspace:*"
|
|
131
|
+
},
|
|
132
|
+
"peerDependenciesMeta": {
|
|
133
|
+
"@lumenflow/core": {
|
|
134
|
+
"optional": true
|
|
135
|
+
}
|
|
136
|
+
},
|
|
52
137
|
"engines": {
|
|
53
138
|
"node": ">=22"
|
|
54
139
|
},
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Copyright (c) 2026 Hellmai Ltd
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Pack-side wrapper for delivery-review-contract (INIT-058 WU-2727).
|
|
6
|
+
*
|
|
7
|
+
* Part of the staged migration pattern: consumers migrate OFF the
|
|
8
|
+
* `@lumenflow/core/delivery-review-contract` subpath and onto
|
|
9
|
+
* `@lumenflow/packs-software-delivery/config/delivery-review-contract` FIRST,
|
|
10
|
+
* while the canonical implementation still lives in `@lumenflow/core`. A
|
|
11
|
+
* follow-up WU will move the canonical file into the pack and update this
|
|
12
|
+
* wrapper to become the canonical definition.
|
|
13
|
+
*
|
|
14
|
+
* This file must re-export DIRECTLY from
|
|
15
|
+
* `@lumenflow/core/delivery-review-contract` (single level). Do NOT introduce
|
|
16
|
+
* a shim chain — WU-2712 hit TS2305 on type-only imports through chained
|
|
17
|
+
* shims.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
export * from '@lumenflow/core/delivery-review-contract';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Copyright (c) 2026 Hellmai Ltd
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Pack-side wrapper for env-accessors (INIT-058 WU-2727).
|
|
6
|
+
*
|
|
7
|
+
* Part of the staged migration pattern: consumers migrate OFF the
|
|
8
|
+
* `@lumenflow/core/env-accessors` subpath and onto
|
|
9
|
+
* `@lumenflow/packs-software-delivery/config/env-accessors` FIRST, while the
|
|
10
|
+
* canonical implementation still lives in `@lumenflow/core`. A follow-up WU
|
|
11
|
+
* will move the canonical file into the pack and update this wrapper to
|
|
12
|
+
* become the canonical definition.
|
|
13
|
+
*
|
|
14
|
+
* This file must re-export DIRECTLY from `@lumenflow/core/env-accessors`
|
|
15
|
+
* (single level). Do NOT introduce a shim chain — WU-2712 hit TS2305 on
|
|
16
|
+
* type-only imports through chained shims.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
export * from '@lumenflow/core/env-accessors';
|