@lumenflow/cli 3.1.1 → 3.1.3
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 +36 -35
- package/dist/agent-issues-query.js +13 -8
- package/dist/agent-log-issue.js +15 -4
- package/dist/agent-session-end.js +15 -4
- package/dist/agent-session.js +18 -6
- package/dist/backlog-prune.js +1 -1
- package/dist/commands/integrate.js +32 -18
- package/dist/config-get.js +27 -15
- package/dist/config-set.js +104 -37
- package/dist/delegation-list.js +1 -1
- package/dist/doctor.js +19 -13
- package/dist/file-delete.js +1 -1
- package/dist/file-edit.js +1 -1
- package/dist/file-read.js +1 -1
- package/dist/file-write.js +1 -1
- package/dist/flow-bottlenecks.js +1 -1
- package/dist/flow-report.js +10 -9
- package/dist/gates.js +3 -2
- package/dist/git-branch.js +1 -1
- package/dist/git-diff.js +1 -1
- package/dist/git-log.js +1 -1
- package/dist/init.js +244 -61
- package/dist/initiative-add-wu.js +1 -1
- package/dist/initiative-bulk-assign-wus.js +1 -1
- package/dist/initiative-create.js +2 -2
- package/dist/initiative-edit.js +1 -1
- package/dist/initiative-list.js +1 -1
- package/dist/initiative-plan.js +1 -3
- package/dist/initiative-status.js +47 -6
- package/dist/lane-edit.js +19 -10
- package/dist/lane-health.js +13 -24
- package/dist/lane-lock.js +4 -5
- package/dist/lane-setup.js +5 -5
- package/dist/lane-status.js +4 -5
- package/dist/lane-suggest.js +9 -7
- package/dist/lane-validate.js +4 -5
- package/dist/lumenflow-upgrade.js +17 -11
- package/dist/mem-checkpoint.js +1 -1
- package/dist/mem-cleanup.js +6 -23
- package/dist/mem-context.js +1 -1
- package/dist/mem-create.js +1 -1
- package/dist/mem-delete.js +1 -1
- package/dist/mem-export.js +1 -1
- package/dist/mem-inbox.js +1 -1
- package/dist/mem-init.js +1 -1
- package/dist/mem-ready.js +1 -1
- package/dist/mem-recover.js +1 -1
- package/dist/mem-signal.js +1 -1
- package/dist/mem-start.js +1 -1
- package/dist/mem-summarize.js +8 -7
- package/dist/mem-triage.js +7 -5
- package/dist/metrics-cli.js +1 -1
- package/dist/metrics-snapshot.js +1 -1
- package/dist/onboard.js +295 -120
- package/dist/orchestrate-init-status.js +12 -7
- package/dist/orchestrate-initiative.js +23 -12
- package/dist/orchestrate-monitor.js +20 -8
- package/dist/pack-scaffold.js +1 -1
- package/dist/plan-create.js +1 -3
- package/dist/plan-edit.js +1 -3
- package/dist/plan-link.js +1 -3
- package/dist/plan-promote.js +1 -3
- package/dist/release.js +1 -3
- package/dist/signal-cleanup.js +4 -18
- package/dist/state-bootstrap.js +11 -8
- package/dist/state-cleanup.js +5 -19
- package/dist/state-doctor.js +213 -9
- package/dist/task-claim.js +1 -1
- package/dist/validate.js +1 -1
- package/dist/workspace-init.js +61 -61
- package/dist/wu-block.js +1 -1
- package/dist/wu-brief.js +1 -1
- package/dist/wu-claim.js +1 -1
- package/dist/wu-cleanup.js +1 -1
- package/dist/wu-create.js +3 -3
- package/dist/wu-delegate.js +1 -1
- package/dist/wu-deps.js +1 -1
- package/dist/wu-done.js +66 -34
- package/dist/wu-edit.js +1 -1
- package/dist/wu-infer-lane.js +1 -1
- package/dist/wu-preflight.js +1 -1
- package/dist/wu-prep.js +1 -1
- package/dist/wu-proto.js +1 -1
- package/dist/wu-prune.js +1 -1
- package/dist/wu-recover.js +1 -1
- package/dist/wu-release.js +1 -1
- package/dist/wu-repair.js +1 -1
- package/dist/wu-sandbox.js +40 -27
- package/dist/wu-status.js +1 -1
- package/dist/wu-unblock.js +1 -1
- package/dist/wu-unlock-lane.js +1 -1
- package/dist/wu-validate.js +1 -1
- package/package.json +12 -8
- package/packs/software-delivery/constants.ts +10 -0
- package/packs/software-delivery/extensions.ts +140 -0
- package/packs/software-delivery/gate-policies.ts +134 -0
- package/packs/software-delivery/index.ts +8 -0
- package/packs/software-delivery/manifest-schema.ts +236 -0
- package/packs/software-delivery/manifest.ts +417 -0
- package/packs/software-delivery/manifest.yaml +711 -0
- package/packs/software-delivery/pack-registration.ts +113 -0
- package/packs/software-delivery/tool-impl/agent-tools.ts +263 -0
- package/packs/software-delivery/tool-impl/delegation-tools.ts +66 -0
- package/packs/software-delivery/tool-impl/flow-metrics-tools.ts +219 -0
- package/packs/software-delivery/tool-impl/git-runner.ts +113 -0
- package/packs/software-delivery/tool-impl/git-tools.ts +316 -0
- package/packs/software-delivery/tool-impl/index.ts +15 -0
- package/packs/software-delivery/tool-impl/initiative-orchestration-tools.ts +720 -0
- package/packs/software-delivery/tool-impl/lane-lock.ts +246 -0
- package/packs/software-delivery/tool-impl/memory-tools.ts +415 -0
- package/packs/software-delivery/tool-impl/pending-runtime-tools.ts +21 -0
- package/packs/software-delivery/tool-impl/runtime-cli-adapter.ts +328 -0
- package/packs/software-delivery/tool-impl/runtime-native-tools.ts +687 -0
- package/packs/software-delivery/tool-impl/worker-loader.ts +52 -0
- package/packs/software-delivery/tool-impl/worktree-tools.ts +46 -0
- package/packs/software-delivery/tool-impl/wu-lifecycle-tools.ts +759 -0
- package/packs/software-delivery/tools/delegation-tools.ts +23 -0
- package/packs/software-delivery/tools/git-tools.ts +55 -0
- package/packs/software-delivery/tools/index.ts +8 -0
- package/packs/software-delivery/tools/lane-lock-tool.ts +37 -0
- package/packs/software-delivery/tools/types.ts +71 -0
- package/packs/software-delivery/tools/worktree-tools.ts +49 -0
- package/templates/core/LUMENFLOW.md.template +3 -3
- package/templates/core/ai/onboarding/agent-invocation-guide.md.template +1 -1
- package/templates/core/ai/onboarding/lumenflow-force-usage.md.template +1 -1
- package/templates/core/ai/onboarding/quick-ref-commands.md.template +5 -5
- package/templates/core/ai/onboarding/starting-prompt.md.template +3 -3
- package/templates/core/ai/onboarding/vendor-support.md.template +1 -1
- package/templates/core/ai/onboarding/wu-create-checklist.md.template +1 -1
- package/dist/agent-issues-query.js.map +0 -1
- package/dist/agent-log-issue.js.map +0 -1
- package/dist/agent-session-end.js.map +0 -1
- package/dist/agent-session.js.map +0 -1
- package/dist/backlog-prune.js.map +0 -1
- package/dist/cli-entry-point.js +0 -149
- package/dist/cli-entry-point.js.map +0 -1
- package/dist/commands/integrate.js.map +0 -1
- package/dist/commands.js.map +0 -1
- package/dist/config-get.js.map +0 -1
- package/dist/config-set.js.map +0 -1
- package/dist/delegation-list.js.map +0 -1
- package/dist/deps-add.js +0 -259
- package/dist/deps-add.js.map +0 -1
- package/dist/deps-remove.js +0 -105
- package/dist/deps-remove.js.map +0 -1
- package/dist/docs-sync.js.map +0 -1
- package/dist/doctor.js.map +0 -1
- package/dist/file-delete.js.map +0 -1
- package/dist/file-edit.js.map +0 -1
- package/dist/file-read.js.map +0 -1
- package/dist/file-write.js.map +0 -1
- package/dist/flow-bottlenecks.js.map +0 -1
- package/dist/flow-report.js.map +0 -1
- package/dist/formatters.js +0 -151
- package/dist/formatters.js.map +0 -1
- package/dist/gate-defaults.js +0 -131
- package/dist/gate-defaults.js.map +0 -1
- package/dist/gate-registry.js +0 -73
- package/dist/gate-registry.js.map +0 -1
- package/dist/gates-graceful-degradation.js +0 -153
- package/dist/gates-graceful-degradation.js.map +0 -1
- package/dist/gates-plan-resolvers.js +0 -152
- package/dist/gates-plan-resolvers.js.map +0 -1
- package/dist/gates-runners.js +0 -509
- package/dist/gates-runners.js.map +0 -1
- package/dist/gates-types.js +0 -4
- package/dist/gates-types.js.map +0 -1
- package/dist/gates-utils.js +0 -323
- package/dist/gates-utils.js.map +0 -1
- package/dist/gates.js.map +0 -1
- package/dist/git-branch.js.map +0 -1
- package/dist/git-diff.js.map +0 -1
- package/dist/git-log.js.map +0 -1
- package/dist/git-status.js.map +0 -1
- package/dist/guard-locked.js +0 -172
- package/dist/guard-locked.js.map +0 -1
- package/dist/guard-main-branch.js +0 -217
- package/dist/guard-main-branch.js.map +0 -1
- package/dist/guard-worktree-commit.js +0 -163
- package/dist/guard-worktree-commit.js.map +0 -1
- package/dist/hooks/auto-checkpoint-utils.js +0 -54
- package/dist/hooks/auto-checkpoint-utils.js.map +0 -1
- package/dist/hooks/enforcement-checks.js +0 -399
- package/dist/hooks/enforcement-checks.js.map +0 -1
- package/dist/hooks/enforcement-generator.js +0 -139
- package/dist/hooks/enforcement-generator.js.map +0 -1
- package/dist/hooks/enforcement-sync.js +0 -385
- package/dist/hooks/enforcement-sync.js.map +0 -1
- package/dist/hooks/generators/auto-checkpoint.js +0 -125
- package/dist/hooks/generators/auto-checkpoint.js.map +0 -1
- package/dist/hooks/generators/enforce-worktree.js +0 -190
- package/dist/hooks/generators/enforce-worktree.js.map +0 -1
- package/dist/hooks/generators/index.js +0 -18
- package/dist/hooks/generators/index.js.map +0 -1
- package/dist/hooks/generators/pre-compact-checkpoint.js +0 -136
- package/dist/hooks/generators/pre-compact-checkpoint.js.map +0 -1
- package/dist/hooks/generators/require-wu.js +0 -117
- package/dist/hooks/generators/require-wu.js.map +0 -1
- package/dist/hooks/generators/session-start-recovery.js +0 -103
- package/dist/hooks/generators/session-start-recovery.js.map +0 -1
- package/dist/hooks/generators/signal-utils.js +0 -54
- package/dist/hooks/generators/signal-utils.js.map +0 -1
- package/dist/hooks/generators/warn-incomplete.js +0 -67
- package/dist/hooks/generators/warn-incomplete.js.map +0 -1
- package/dist/hooks/index.js +0 -10
- package/dist/hooks/index.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/init-detection.js +0 -230
- package/dist/init-detection.js.map +0 -1
- package/dist/init-lane-validation.js +0 -143
- package/dist/init-lane-validation.js.map +0 -1
- package/dist/init-scaffolding.js +0 -158
- package/dist/init-scaffolding.js.map +0 -1
- package/dist/init-templates.js +0 -1964
- package/dist/init-templates.js.map +0 -1
- package/dist/init.js.map +0 -1
- package/dist/initiative-add-wu.js.map +0 -1
- package/dist/initiative-bulk-assign-wus.js.map +0 -1
- package/dist/initiative-create.js.map +0 -1
- package/dist/initiative-edit.js.map +0 -1
- package/dist/initiative-list.js.map +0 -1
- package/dist/initiative-plan.js.map +0 -1
- package/dist/initiative-remove-wu.js.map +0 -1
- package/dist/initiative-status.js.map +0 -1
- package/dist/lane-edit.js.map +0 -1
- package/dist/lane-health.js.map +0 -1
- package/dist/lane-lifecycle-process.js +0 -366
- package/dist/lane-lifecycle-process.js.map +0 -1
- package/dist/lane-lock.js.map +0 -1
- package/dist/lane-setup.js.map +0 -1
- package/dist/lane-status.js.map +0 -1
- package/dist/lane-suggest.js.map +0 -1
- package/dist/lane-validate.js.map +0 -1
- package/dist/lifecycle-regression-harness.js +0 -181
- package/dist/lifecycle-regression-harness.js.map +0 -1
- package/dist/lumenflow-upgrade.js.map +0 -1
- package/dist/mem-checkpoint.js.map +0 -1
- package/dist/mem-cleanup.js.map +0 -1
- package/dist/mem-context.js.map +0 -1
- package/dist/mem-create.js.map +0 -1
- package/dist/mem-delete.js.map +0 -1
- package/dist/mem-export.js.map +0 -1
- package/dist/mem-inbox.js.map +0 -1
- package/dist/mem-index.js +0 -214
- package/dist/mem-index.js.map +0 -1
- package/dist/mem-init.js.map +0 -1
- package/dist/mem-profile.js +0 -210
- package/dist/mem-profile.js.map +0 -1
- package/dist/mem-promote.js +0 -257
- package/dist/mem-promote.js.map +0 -1
- package/dist/mem-ready.js.map +0 -1
- package/dist/mem-recover.js.map +0 -1
- package/dist/mem-signal.js.map +0 -1
- package/dist/mem-start.js.map +0 -1
- package/dist/mem-summarize.js.map +0 -1
- package/dist/mem-triage.js.map +0 -1
- package/dist/merge-block.js +0 -225
- package/dist/merge-block.js.map +0 -1
- package/dist/metrics-cli.js.map +0 -1
- package/dist/metrics-snapshot.js.map +0 -1
- package/dist/onboard.js.map +0 -1
- package/dist/onboarding-smoke-test.js +0 -418
- package/dist/onboarding-smoke-test.js.map +0 -1
- package/dist/orchestrate-init-status.js.map +0 -1
- package/dist/orchestrate-initiative.js.map +0 -1
- package/dist/orchestrate-monitor.js.map +0 -1
- package/dist/pack-author.js.map +0 -1
- package/dist/pack-hash.js.map +0 -1
- package/dist/pack-install.js.map +0 -1
- package/dist/pack-publish.js.map +0 -1
- package/dist/pack-scaffold.js.map +0 -1
- package/dist/pack-search.js.map +0 -1
- package/dist/pack-validate.js.map +0 -1
- package/dist/plan-create.js.map +0 -1
- package/dist/plan-edit.js.map +0 -1
- package/dist/plan-link.js.map +0 -1
- package/dist/plan-promote.js.map +0 -1
- package/dist/public-manifest.js +0 -920
- package/dist/public-manifest.js.map +0 -1
- package/dist/release.js.map +0 -1
- package/dist/rotate-progress.js +0 -253
- package/dist/rotate-progress.js.map +0 -1
- package/dist/session-coordinator.js +0 -303
- package/dist/session-coordinator.js.map +0 -1
- package/dist/shared-validators.js +0 -81
- package/dist/shared-validators.js.map +0 -1
- package/dist/signal-cleanup.js.map +0 -1
- package/dist/state-bootstrap.js.map +0 -1
- package/dist/state-cleanup.js.map +0 -1
- package/dist/state-doctor-fix.js +0 -226
- package/dist/state-doctor-fix.js.map +0 -1
- package/dist/state-doctor-stamps.js +0 -23
- package/dist/state-doctor-stamps.js.map +0 -1
- package/dist/state-doctor.js.map +0 -1
- package/dist/strict-progress.js +0 -255
- package/dist/strict-progress.js.map +0 -1
- package/dist/sync-templates.js.map +0 -1
- package/dist/task-claim.js.map +0 -1
- package/dist/trace-gen.js +0 -401
- package/dist/trace-gen.js.map +0 -1
- package/dist/validate-agent-skills.js +0 -223
- package/dist/validate-agent-skills.js.map +0 -1
- package/dist/validate-agent-sync.js +0 -151
- package/dist/validate-agent-sync.js.map +0 -1
- package/dist/validate-backlog-sync.js +0 -77
- package/dist/validate-backlog-sync.js.map +0 -1
- package/dist/validate-skills-spec.js +0 -211
- package/dist/validate-skills-spec.js.map +0 -1
- package/dist/validate.js.map +0 -1
- package/dist/validator-defaults.js +0 -107
- package/dist/validator-defaults.js.map +0 -1
- package/dist/validator-registry.js +0 -71
- package/dist/validator-registry.js.map +0 -1
- package/dist/workspace-init.js.map +0 -1
- package/dist/wu-block.js.map +0 -1
- package/dist/wu-brief.js.map +0 -1
- package/dist/wu-claim-branch.js +0 -123
- package/dist/wu-claim-branch.js.map +0 -1
- package/dist/wu-claim-cloud.js +0 -79
- package/dist/wu-claim-cloud.js.map +0 -1
- package/dist/wu-claim-mode.js +0 -82
- package/dist/wu-claim-mode.js.map +0 -1
- package/dist/wu-claim-output.js +0 -85
- package/dist/wu-claim-output.js.map +0 -1
- package/dist/wu-claim-repair-guidance.js +0 -12
- package/dist/wu-claim-repair-guidance.js.map +0 -1
- package/dist/wu-claim-resume-handler.js +0 -87
- package/dist/wu-claim-resume-handler.js.map +0 -1
- package/dist/wu-claim-state.js +0 -581
- package/dist/wu-claim-state.js.map +0 -1
- package/dist/wu-claim-validation.js +0 -457
- package/dist/wu-claim-validation.js.map +0 -1
- package/dist/wu-claim-worktree.js +0 -223
- package/dist/wu-claim-worktree.js.map +0 -1
- package/dist/wu-claim.js.map +0 -1
- package/dist/wu-cleanup-cloud.js +0 -78
- package/dist/wu-cleanup-cloud.js.map +0 -1
- package/dist/wu-cleanup.js.map +0 -1
- package/dist/wu-code-path-coverage.js +0 -83
- package/dist/wu-code-path-coverage.js.map +0 -1
- package/dist/wu-create-cloud.js +0 -30
- package/dist/wu-create-cloud.js.map +0 -1
- package/dist/wu-create-content.js +0 -264
- package/dist/wu-create-content.js.map +0 -1
- package/dist/wu-create-readiness.js +0 -59
- package/dist/wu-create-readiness.js.map +0 -1
- package/dist/wu-create-validation.js +0 -128
- package/dist/wu-create-validation.js.map +0 -1
- package/dist/wu-create.js.map +0 -1
- package/dist/wu-delegate.js.map +0 -1
- package/dist/wu-delete.js.map +0 -1
- package/dist/wu-deps.js.map +0 -1
- package/dist/wu-done-auto-cleanup.js +0 -203
- package/dist/wu-done-auto-cleanup.js.map +0 -1
- package/dist/wu-done-check.js +0 -38
- package/dist/wu-done-check.js.map +0 -1
- package/dist/wu-done-cloud.js +0 -48
- package/dist/wu-done-cloud.js.map +0 -1
- package/dist/wu-done-decay.js +0 -86
- package/dist/wu-done-decay.js.map +0 -1
- package/dist/wu-done.js.map +0 -1
- package/dist/wu-edit-operations.js +0 -399
- package/dist/wu-edit-operations.js.map +0 -1
- package/dist/wu-edit-validators.js +0 -282
- package/dist/wu-edit-validators.js.map +0 -1
- package/dist/wu-edit.js.map +0 -1
- package/dist/wu-infer-lane.js.map +0 -1
- package/dist/wu-preflight.js.map +0 -1
- package/dist/wu-prep.js.map +0 -1
- package/dist/wu-proto.js.map +0 -1
- package/dist/wu-prune.js.map +0 -1
- package/dist/wu-recover.js.map +0 -1
- package/dist/wu-release.js.map +0 -1
- package/dist/wu-repair.js.map +0 -1
- package/dist/wu-sandbox.js.map +0 -1
- package/dist/wu-spawn-completion.js +0 -33
- package/dist/wu-spawn-completion.js.map +0 -1
- package/dist/wu-spawn-prompt-builders.js +0 -1197
- package/dist/wu-spawn-prompt-builders.js.map +0 -1
- package/dist/wu-spawn-strategy-resolver.js +0 -322
- package/dist/wu-spawn-strategy-resolver.js.map +0 -1
- package/dist/wu-spawn.js +0 -59
- package/dist/wu-spawn.js.map +0 -1
- package/dist/wu-state-cloud.js +0 -41
- package/dist/wu-state-cloud.js.map +0 -1
- package/dist/wu-status.js.map +0 -1
- package/dist/wu-unblock.js.map +0 -1
- package/dist/wu-unlock-lane.js.map +0 -1
- package/dist/wu-validate.js.map +0 -1
package/dist/wu-claim-state.js
DELETED
|
@@ -1,581 +0,0 @@
|
|
|
1
|
-
// Copyright (c) 2026 Hellmai Ltd
|
|
2
|
-
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
-
/**
|
|
4
|
-
* @file wu-claim-state.ts
|
|
5
|
-
* @description State update helpers for wu:claim - WU YAML, backlog, status updates.
|
|
6
|
-
*
|
|
7
|
-
* WU-1649: Extracted from wu-claim.ts to reduce orchestration complexity.
|
|
8
|
-
* All functions are mechanical extractions preserving original behavior.
|
|
9
|
-
*/
|
|
10
|
-
import { rmSync } from 'node:fs';
|
|
11
|
-
import { access, readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
12
|
-
import path from 'node:path';
|
|
13
|
-
import { parseYAML, stringifyYAML } from '@lumenflow/core/wu-yaml';
|
|
14
|
-
import { assertTransition } from '@lumenflow/core/state-machine';
|
|
15
|
-
import { getGitForCwd, createGitForPath } from '@lumenflow/core/git-adapter';
|
|
16
|
-
import { die, getErrorMessage } from '@lumenflow/core/error-handler';
|
|
17
|
-
import { BRANCHES, WU_STATUS, CLAIMED_MODES, STATUS_SECTIONS, STRING_LITERALS, LOG_PREFIX, GIT_REFS, MICRO_WORKTREE_OPERATIONS, COMMIT_FORMATS, LUMENFLOW_PATHS, FILE_SYSTEM, } from '@lumenflow/core/wu-constants';
|
|
18
|
-
import { WU_PATHS, getStateStoreDirFromBacklog } from '@lumenflow/core/wu-paths';
|
|
19
|
-
import { withMicroWorktree, shouldSkipRemoteOperations } from '@lumenflow/core/micro-worktree';
|
|
20
|
-
import { generateAutoApproval } from '@lumenflow/core/wu-schema';
|
|
21
|
-
import { WUStateStore } from '@lumenflow/core/wu-state-store';
|
|
22
|
-
import { DelegationRegistryStore } from '@lumenflow/core/delegation-registry-store';
|
|
23
|
-
import { generateBacklog, generateStatus } from '@lumenflow/core/backlog-generator';
|
|
24
|
-
import { getConfig } from '@lumenflow/core/config';
|
|
25
|
-
import { autoFixWUYaml } from '@lumenflow/core/wu-yaml-fixer';
|
|
26
|
-
import { getAssignedEmail } from '@lumenflow/core/wu-claim-helpers';
|
|
27
|
-
import { shouldProgressInitiativeStatus, findInitiative, writeInitiative, getInitiativeWUs, } from '@lumenflow/initiatives';
|
|
28
|
-
import { resolveClaimStatus } from './wu-claim-validation.js';
|
|
29
|
-
const PREFIX = LOG_PREFIX.CLAIM;
|
|
30
|
-
/**
|
|
31
|
-
* Decide whether wu:claim should update canonical state on origin/main.
|
|
32
|
-
*
|
|
33
|
-
* Cloud branch-pr claims run on platform-managed branches and should not mutate
|
|
34
|
-
* canonical state on main during claim; they commit claim metadata on their own branch.
|
|
35
|
-
*/
|
|
36
|
-
export function shouldApplyCanonicalClaimUpdate(input) {
|
|
37
|
-
// WU-1653: Skip canonical update when no remote (requireRemote=false)
|
|
38
|
-
if (input.noPush || shouldSkipRemoteOperations()) {
|
|
39
|
-
return false;
|
|
40
|
-
}
|
|
41
|
-
return !(input.isCloud && input.claimedMode === CLAIMED_MODES.BRANCH_PR);
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Decide whether wu:claim should write claim metadata directly to the active branch.
|
|
45
|
-
*/
|
|
46
|
-
export function shouldPersistClaimMetadataOnBranch(input) {
|
|
47
|
-
return (input.noPush === true ||
|
|
48
|
-
input.claimedMode === CLAIMED_MODES.BRANCH_PR ||
|
|
49
|
-
input.skipRemote === true);
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Resolve which main reference should be used for claim baseline SHA.
|
|
53
|
-
*
|
|
54
|
-
* In local-only mode (git.requireRemote=false), origin/main may not exist.
|
|
55
|
-
*/
|
|
56
|
-
export function resolveClaimBaselineRef(input = {}) {
|
|
57
|
-
return input.skipRemote === true ? BRANCHES.MAIN : GIT_REFS.ORIGIN_MAIN;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* WU-1521: Build a rolled-back version of a WU YAML doc by stripping claim metadata.
|
|
61
|
-
*
|
|
62
|
-
* When wu:claim fails after pushing YAML changes to origin/main but before
|
|
63
|
-
* worktree creation succeeds, this function produces a clean doc that can be
|
|
64
|
-
* written back to reset the WU to 'ready' state, enabling a clean retry.
|
|
65
|
-
*
|
|
66
|
-
* Pure function: does not mutate the input doc.
|
|
67
|
-
*
|
|
68
|
-
* @param doc - The claimed WU YAML document to roll back
|
|
69
|
-
* @returns A new document with status=ready and claim metadata removed
|
|
70
|
-
*/
|
|
71
|
-
export function buildRollbackYamlDoc(doc) {
|
|
72
|
-
// Shallow-copy to avoid mutating the original
|
|
73
|
-
const rolled = { ...doc };
|
|
74
|
-
// Reset status back to ready
|
|
75
|
-
rolled.status = WU_STATUS.READY;
|
|
76
|
-
// Remove claim-specific metadata fields
|
|
77
|
-
delete rolled.claimed_mode;
|
|
78
|
-
delete rolled.claimed_branch; // WU-1589: Clear claimed_branch on rollback
|
|
79
|
-
delete rolled.claimed_at;
|
|
80
|
-
delete rolled.worktree_path;
|
|
81
|
-
delete rolled.baseline_main_sha;
|
|
82
|
-
delete rolled.session_id;
|
|
83
|
-
delete rolled.assigned_to;
|
|
84
|
-
return rolled;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Returns true when a spawn record includes claim-time pickup evidence.
|
|
88
|
-
*/
|
|
89
|
-
export function hasClaimPickupEvidence(entry) {
|
|
90
|
-
const pickedUpAt = typeof entry?.pickedUpAt === 'string' && entry.pickedUpAt.trim().length > 0
|
|
91
|
-
? entry.pickedUpAt
|
|
92
|
-
: '';
|
|
93
|
-
const pickedUpBy = typeof entry?.pickedUpBy === 'string' && entry.pickedUpBy.trim().length > 0
|
|
94
|
-
? entry.pickedUpBy
|
|
95
|
-
: '';
|
|
96
|
-
return pickedUpAt.length > 0 && pickedUpBy.length > 0;
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* WU-1605: Record delegated pickup evidence at wu:claim time when a spawn/delegate
|
|
100
|
-
* provenance record already exists for this target WU.
|
|
101
|
-
*/
|
|
102
|
-
export async function recordClaimPickupEvidence(id, options = {}) {
|
|
103
|
-
const baseDir = options.baseDir ?? process.cwd();
|
|
104
|
-
const claimedBy = typeof options.claimedBy === 'string' && options.claimedBy.trim().length > 0
|
|
105
|
-
? options.claimedBy.trim()
|
|
106
|
-
: 'unknown';
|
|
107
|
-
const store = new DelegationRegistryStore(path.join(baseDir, '.lumenflow', 'state'));
|
|
108
|
-
await store.load();
|
|
109
|
-
const spawnEntry = store.getByTarget(id);
|
|
110
|
-
if (!spawnEntry) {
|
|
111
|
-
return { matchedSpawn: false, recorded: false, alreadyRecorded: false };
|
|
112
|
-
}
|
|
113
|
-
if (hasClaimPickupEvidence(spawnEntry)) {
|
|
114
|
-
return {
|
|
115
|
-
matchedSpawn: true,
|
|
116
|
-
recorded: false,
|
|
117
|
-
alreadyRecorded: true,
|
|
118
|
-
spawnId: spawnEntry.id,
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
await store.recordPickup(spawnEntry.id, claimedBy);
|
|
122
|
-
return {
|
|
123
|
-
matchedSpawn: true,
|
|
124
|
-
recorded: true,
|
|
125
|
-
alreadyRecorded: false,
|
|
126
|
-
spawnId: spawnEntry.id,
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
export async function updateWUYaml(WU_PATH, id, lane, claimedMode = 'worktree', worktreePath = null, sessionId = null, gitAdapter = null, claimedBranch = null) {
|
|
130
|
-
// Check file exists
|
|
131
|
-
try {
|
|
132
|
-
await access(WU_PATH);
|
|
133
|
-
}
|
|
134
|
-
catch {
|
|
135
|
-
die(`WU file not found: ${WU_PATH}\n\n` +
|
|
136
|
-
`Options:\n` +
|
|
137
|
-
` 1. Create the WU first: pnpm wu:create --id ${id} --lane "${lane}" --title "..."\n` +
|
|
138
|
-
` 2. Check if the WU ID is correct`);
|
|
139
|
-
}
|
|
140
|
-
// Read file
|
|
141
|
-
let text;
|
|
142
|
-
try {
|
|
143
|
-
text = await readFile(WU_PATH, { encoding: FILE_SYSTEM.UTF8 });
|
|
144
|
-
}
|
|
145
|
-
catch (e) {
|
|
146
|
-
die(`Failed to read WU file: ${WU_PATH}\n\n` +
|
|
147
|
-
`Error: ${getErrorMessage(e)}\n\n` +
|
|
148
|
-
`Options:\n` +
|
|
149
|
-
` 1. Check file permissions: ls -la ${WU_PATH}\n` +
|
|
150
|
-
` 2. Ensure you have read access to the repository`);
|
|
151
|
-
}
|
|
152
|
-
let doc;
|
|
153
|
-
try {
|
|
154
|
-
doc = parseYAML(text);
|
|
155
|
-
}
|
|
156
|
-
catch (e) {
|
|
157
|
-
die(`Failed to parse YAML ${WU_PATH}\n\n` +
|
|
158
|
-
`Error: ${getErrorMessage(e)}\n\n` +
|
|
159
|
-
`Options:\n` +
|
|
160
|
-
` 1. Validate YAML syntax: pnpm wu:validate --id ${id}\n` +
|
|
161
|
-
` 2. Fix YAML errors manually and retry`);
|
|
162
|
-
}
|
|
163
|
-
if (!doc || doc.id !== id) {
|
|
164
|
-
die(`WU YAML id mismatch. Expected ${id}, found ${doc && doc.id}\n\n` +
|
|
165
|
-
`Options:\n` +
|
|
166
|
-
` 1. Check the WU file has correct id field\n` +
|
|
167
|
-
` 2. Verify you're claiming the right WU`);
|
|
168
|
-
}
|
|
169
|
-
// Validate state transition before updating
|
|
170
|
-
const currentStatus = resolveClaimStatus(doc.status);
|
|
171
|
-
try {
|
|
172
|
-
assertTransition(currentStatus, WU_STATUS.IN_PROGRESS, id);
|
|
173
|
-
}
|
|
174
|
-
catch (error) {
|
|
175
|
-
die(`State transition validation failed: ${getErrorMessage(error)}`);
|
|
176
|
-
}
|
|
177
|
-
// Update status and lane (lane only if provided and different)
|
|
178
|
-
doc.status = WU_STATUS.IN_PROGRESS;
|
|
179
|
-
if (lane)
|
|
180
|
-
doc.lane = lane;
|
|
181
|
-
// Record claimed mode (worktree or branch-only)
|
|
182
|
-
doc.claimed_mode = claimedMode;
|
|
183
|
-
// WU-1590: Persist claimed_branch for branch-pr cloud agents so downstream commands
|
|
184
|
-
// (wu:prep, wu:done, wu:cleanup) can resolve the actual branch via defaultBranchFrom()
|
|
185
|
-
if (claimedBranch) {
|
|
186
|
-
doc.claimed_branch = claimedBranch;
|
|
187
|
-
}
|
|
188
|
-
// WU-1226: Record worktree path to prevent resolution failures if lane field changes
|
|
189
|
-
if (worktreePath) {
|
|
190
|
-
doc.worktree_path = worktreePath;
|
|
191
|
-
}
|
|
192
|
-
const git = gitAdapter || getGitForCwd();
|
|
193
|
-
// WU-1423: Record owner using validated email (no silent username fallback)
|
|
194
|
-
// Fallback chain: git config user.email > GIT_AUTHOR_EMAIL > error
|
|
195
|
-
// WU-1427: getAssignedEmail is now async to properly await gitAdapter.getConfigValue
|
|
196
|
-
doc.assigned_to = await getAssignedEmail(git);
|
|
197
|
-
// Record claim timestamp for duration tracking (WU-637)
|
|
198
|
-
doc.claimed_at = new Date().toISOString();
|
|
199
|
-
// WU-1382: Store baseline main SHA for parallel agent detection
|
|
200
|
-
// wu:done will compare against this to detect if other WUs were merged during work
|
|
201
|
-
const baselineRef = resolveClaimBaselineRef({ skipRemote: shouldSkipRemoteOperations() });
|
|
202
|
-
doc.baseline_main_sha = await git.getCommitHash(baselineRef);
|
|
203
|
-
// WU-1438: Store agent session ID for tracking
|
|
204
|
-
if (sessionId) {
|
|
205
|
-
doc.session_id = sessionId;
|
|
206
|
-
}
|
|
207
|
-
// WU-2080: Agent-first auto-approval
|
|
208
|
-
// Agents auto-approve on claim. Human escalation only for detected triggers.
|
|
209
|
-
const assignedTo = doc.assigned_to;
|
|
210
|
-
if (!assignedTo) {
|
|
211
|
-
die('Could not resolve assigned_to for auto-approval metadata');
|
|
212
|
-
}
|
|
213
|
-
const autoApproval = generateAutoApproval(doc, assignedTo);
|
|
214
|
-
doc.approved_by = autoApproval.approved_by;
|
|
215
|
-
doc.approved_at = autoApproval.approved_at;
|
|
216
|
-
doc.escalation_triggers = autoApproval.escalation_triggers;
|
|
217
|
-
doc.requires_human_escalation = autoApproval.requires_human_escalation;
|
|
218
|
-
// Log escalation triggers if UnsafeAny detected
|
|
219
|
-
if (autoApproval.requires_human_escalation) {
|
|
220
|
-
console.log(`[wu-claim] ⚠️ Escalation triggers detected: ${autoApproval.escalation_triggers.join(', ')}`);
|
|
221
|
-
console.log(`[wu-claim] ℹ️ Human resolution required before wu:done can complete.`);
|
|
222
|
-
}
|
|
223
|
-
else {
|
|
224
|
-
console.log(`[wu-claim] ✅ Agent auto-approved (no escalation triggers)`);
|
|
225
|
-
}
|
|
226
|
-
// WU-1352: Use centralized stringify for consistent output
|
|
227
|
-
const out = stringifyYAML(doc);
|
|
228
|
-
// Write file
|
|
229
|
-
await writeFile(WU_PATH, out, { encoding: FILE_SYSTEM.UTF8 });
|
|
230
|
-
// WU-1211: Return both title and initiative for status progression check
|
|
231
|
-
return { title: doc.title || '', initiative: doc.initiative || null };
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* WU-1211: Check and progress initiative status from draft/open to in_progress.
|
|
235
|
-
*
|
|
236
|
-
* Called when a WU with an initiative field is claimed. If this is the first
|
|
237
|
-
* WU being claimed for the initiative, progress the initiative status.
|
|
238
|
-
*
|
|
239
|
-
* @param {string} worktreePath - Path to micro-worktree (or main)
|
|
240
|
-
* @param {string} initiativeRef - Initiative ID or slug
|
|
241
|
-
* @param {string} wuId - WU ID being claimed
|
|
242
|
-
* @returns {Promise<{updated: boolean, initPath: string|null}>} Result
|
|
243
|
-
*/
|
|
244
|
-
export async function maybeProgressInitiativeStatus(worktreePath, initiativeRef, wuId) {
|
|
245
|
-
try {
|
|
246
|
-
// Find the initiative
|
|
247
|
-
const initiative = findInitiative(initiativeRef);
|
|
248
|
-
if (!initiative) {
|
|
249
|
-
console.log(`${PREFIX} Initiative ${initiativeRef} not found (may be created later)`);
|
|
250
|
-
return { updated: false, initPath: null };
|
|
251
|
-
}
|
|
252
|
-
// Get all WUs for this initiative to check if UnsafeAny are in_progress
|
|
253
|
-
const wus = getInitiativeWUs(initiativeRef);
|
|
254
|
-
// Include the WU we're currently claiming as in_progress
|
|
255
|
-
const wusWithCurrent = wus.map((wu) => wu.id === wuId ? { ...wu, doc: { ...wu.doc, status: 'in_progress' } } : wu);
|
|
256
|
-
const wuDocs = wusWithCurrent.map((wu) => wu.doc);
|
|
257
|
-
// Check if initiative status should progress
|
|
258
|
-
const progressCheck = shouldProgressInitiativeStatus(initiative.doc, wuDocs);
|
|
259
|
-
if (!progressCheck.shouldProgress || !progressCheck.newStatus) {
|
|
260
|
-
return { updated: false, initPath: null };
|
|
261
|
-
}
|
|
262
|
-
// Update initiative status in worktree
|
|
263
|
-
const initRelativePath = initiative.path.replace(process.cwd() + '/', '');
|
|
264
|
-
const initAbsPath = path.join(worktreePath, initRelativePath);
|
|
265
|
-
// Read, update, write
|
|
266
|
-
const initDoc = { ...initiative.doc, status: progressCheck.newStatus };
|
|
267
|
-
writeInitiative(initAbsPath, initDoc);
|
|
268
|
-
console.log(`${PREFIX} ✅ Initiative ${initiativeRef} status progressed: ${initiative.doc.status} → ${progressCheck.newStatus}`);
|
|
269
|
-
return { updated: true, initPath: initRelativePath };
|
|
270
|
-
}
|
|
271
|
-
catch (error) {
|
|
272
|
-
// Non-fatal: log warning and continue
|
|
273
|
-
console.warn(`${PREFIX} ⚠️ Could not check initiative status progression: ${getErrorMessage(error)}`);
|
|
274
|
-
return { updated: false, initPath: null };
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
export async function addOrReplaceInProgressStatus(statusPath, id, title) {
|
|
278
|
-
// Check file exists
|
|
279
|
-
try {
|
|
280
|
-
await access(statusPath);
|
|
281
|
-
}
|
|
282
|
-
catch {
|
|
283
|
-
die(`Missing ${statusPath}`);
|
|
284
|
-
}
|
|
285
|
-
const rel = `wu/${id}.yaml`;
|
|
286
|
-
const bullet = `- [${id} — ${title}](${rel})`;
|
|
287
|
-
// Read file
|
|
288
|
-
const content = await readFile(statusPath, { encoding: FILE_SYSTEM.UTF8 });
|
|
289
|
-
const lines = content.split(STRING_LITERALS.NEWLINE);
|
|
290
|
-
const findHeader = (h) => lines.findIndex((l) => l.trim().toLowerCase() === h.toLowerCase());
|
|
291
|
-
const startIdx = findHeader(STATUS_SECTIONS.IN_PROGRESS);
|
|
292
|
-
if (startIdx === -1)
|
|
293
|
-
die(`Could not find "${STATUS_SECTIONS.IN_PROGRESS}" section in status.md`);
|
|
294
|
-
let endIdx = lines.slice(startIdx + 1).findIndex((l) => l.startsWith('## '));
|
|
295
|
-
if (endIdx === -1)
|
|
296
|
-
endIdx = lines.length - startIdx - 1;
|
|
297
|
-
else
|
|
298
|
-
endIdx = startIdx + 1 + endIdx;
|
|
299
|
-
// Check if already present
|
|
300
|
-
const section = lines.slice(startIdx + 1, endIdx).join(STRING_LITERALS.NEWLINE);
|
|
301
|
-
if (section.includes(rel) || section.includes(`[${id}`))
|
|
302
|
-
return; // already listed
|
|
303
|
-
// Remove "No items" marker if present
|
|
304
|
-
for (let i = startIdx + 1; i < endIdx; i++) {
|
|
305
|
-
if (lines[i] && lines[i].includes('No items currently in progress')) {
|
|
306
|
-
lines.splice(i, 1);
|
|
307
|
-
break;
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
// Insert bullet right after header
|
|
311
|
-
lines.splice(startIdx + 1, 0, '', bullet);
|
|
312
|
-
// Write file
|
|
313
|
-
await writeFile(statusPath, lines.join(STRING_LITERALS.NEWLINE), {
|
|
314
|
-
encoding: FILE_SYSTEM.UTF8,
|
|
315
|
-
});
|
|
316
|
-
}
|
|
317
|
-
export async function removeFromReadyAndAddToInProgressBacklog(backlogPath, id, title, lane) {
|
|
318
|
-
// WU-1574: Use WUStateStore as single source of truth, generate backlog.md from state
|
|
319
|
-
// WU-1593: Use centralized path helper to correctly resolve state dir from backlog path
|
|
320
|
-
const stateDir = getStateStoreDirFromBacklog(backlogPath);
|
|
321
|
-
// Append claim event to state store
|
|
322
|
-
const store = new WUStateStore(stateDir);
|
|
323
|
-
await store.load();
|
|
324
|
-
await store.claim(id, lane, title);
|
|
325
|
-
console.log(`${PREFIX} Claim event appended to state store`);
|
|
326
|
-
// Regenerate backlog.md from state store
|
|
327
|
-
const backlogContent = await generateBacklog(store);
|
|
328
|
-
await writeFile(backlogPath, backlogContent, { encoding: FILE_SYSTEM.UTF8 });
|
|
329
|
-
console.log(`${PREFIX} backlog.md regenerated from state store`);
|
|
330
|
-
// Regenerate status.md from state store
|
|
331
|
-
const statusPath = path.join(path.dirname(backlogPath), 'status.md');
|
|
332
|
-
const statusContent = await generateStatus(store);
|
|
333
|
-
await writeFile(statusPath, statusContent, { encoding: FILE_SYSTEM.UTF8 });
|
|
334
|
-
console.log(`${PREFIX} status.md regenerated from state store`);
|
|
335
|
-
}
|
|
336
|
-
/**
|
|
337
|
-
* WU-1746: Append claim event without regenerating backlog.md/status.md
|
|
338
|
-
* For worktree mode, we only need to record the claim event in the state store.
|
|
339
|
-
* Generated files (backlog.md, status.md) cause merge conflicts when committed
|
|
340
|
-
* to worktrees because they change on main as other WUs complete.
|
|
341
|
-
*
|
|
342
|
-
* @param {string} stateDir - Path to state store directory
|
|
343
|
-
* @param {string} id - WU ID
|
|
344
|
-
* @param {string} title - WU title
|
|
345
|
-
* @param {string} lane - Lane name
|
|
346
|
-
*/
|
|
347
|
-
export async function appendClaimEventOnly(stateDir, id, title, lane) {
|
|
348
|
-
const store = new WUStateStore(stateDir);
|
|
349
|
-
await store.load();
|
|
350
|
-
await store.claim(id, lane, title);
|
|
351
|
-
console.log(`${PREFIX} Claim event appended to state store`);
|
|
352
|
-
}
|
|
353
|
-
/**
|
|
354
|
-
* WU-1746: Get list of files to commit in worktree mode
|
|
355
|
-
* Excludes backlog.md and status.md to prevent merge conflicts.
|
|
356
|
-
* These generated files should only be updated on main during wu:done.
|
|
357
|
-
*
|
|
358
|
-
* @param {string} wuId - WU ID (e.g., 'WU-1746')
|
|
359
|
-
* @returns {string[]} List of files to commit
|
|
360
|
-
*/
|
|
361
|
-
export function getWorktreeCommitFiles(wuId) {
|
|
362
|
-
// WU-1311: Use config-based paths instead of hardcoded docs/04-operations paths
|
|
363
|
-
const config = getConfig();
|
|
364
|
-
return [
|
|
365
|
-
`${config.directories.wuDir}/${wuId}.yaml`,
|
|
366
|
-
LUMENFLOW_PATHS.WU_EVENTS, // WU-1740: Event store is source of truth
|
|
367
|
-
// WU-1746: Explicitly NOT including backlog.md and status.md
|
|
368
|
-
// These generated files cause merge conflicts when main advances
|
|
369
|
-
];
|
|
370
|
-
}
|
|
371
|
-
export async function readWUTitle(id) {
|
|
372
|
-
const p = WU_PATHS.WU(id);
|
|
373
|
-
// Check file exists
|
|
374
|
-
try {
|
|
375
|
-
await access(p);
|
|
376
|
-
}
|
|
377
|
-
catch {
|
|
378
|
-
return null;
|
|
379
|
-
}
|
|
380
|
-
// Read file
|
|
381
|
-
const text = await readFile(p, { encoding: FILE_SYSTEM.UTF8 });
|
|
382
|
-
// Match title field - use RegExp.exec for sonarjs/prefer-regexp-exec compliance
|
|
383
|
-
// Regex is safe: runs on trusted WU YAML files with bounded input
|
|
384
|
-
const titlePattern = /^title:\s*"?([^"\n]+)"?$/m;
|
|
385
|
-
const m = titlePattern.exec(text);
|
|
386
|
-
return m ? m[1] : null;
|
|
387
|
-
}
|
|
388
|
-
export function parseStagedChangeLine(line) {
|
|
389
|
-
const parts = line.trim().split(/\s+/);
|
|
390
|
-
const status = parts[0];
|
|
391
|
-
if (!status)
|
|
392
|
-
return null;
|
|
393
|
-
if (status.startsWith('R') || status.startsWith('C')) {
|
|
394
|
-
return { status, from: parts[1], filePath: parts[2] };
|
|
395
|
-
}
|
|
396
|
-
return { status, filePath: parts.slice(1).join(' ') };
|
|
397
|
-
}
|
|
398
|
-
export async function getStagedChanges() {
|
|
399
|
-
const diff = await getGitForCwd().raw(['diff', '--cached', '--name-status']);
|
|
400
|
-
if (!diff.trim())
|
|
401
|
-
return [];
|
|
402
|
-
return diff
|
|
403
|
-
.split(STRING_LITERALS.NEWLINE)
|
|
404
|
-
.filter(Boolean)
|
|
405
|
-
.map(parseStagedChangeLine)
|
|
406
|
-
.filter((change) => Boolean(change));
|
|
407
|
-
}
|
|
408
|
-
export async function applyStagedChangesToMicroWorktree(worktreePath, stagedChanges) {
|
|
409
|
-
for (const change of stagedChanges) {
|
|
410
|
-
const filePath = change.filePath;
|
|
411
|
-
if (!filePath)
|
|
412
|
-
continue;
|
|
413
|
-
const targetPath = path.join(worktreePath, filePath);
|
|
414
|
-
if (change.status.startsWith('D')) {
|
|
415
|
-
rmSync(targetPath, { recursive: true, force: true });
|
|
416
|
-
continue;
|
|
417
|
-
}
|
|
418
|
-
const sourcePath = path.join(process.cwd(), filePath);
|
|
419
|
-
const contents = await readFile(sourcePath, { encoding: FILE_SYSTEM.UTF8 });
|
|
420
|
-
await mkdir(path.dirname(targetPath), { recursive: true });
|
|
421
|
-
await writeFile(targetPath, contents, { encoding: FILE_SYSTEM.UTF8 });
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
export async function ensureCleanOrClaimOnlyWhenNoAuto() {
|
|
425
|
-
// Require staged claim edits only if running with --no-auto
|
|
426
|
-
const status = await getGitForCwd().getStatus();
|
|
427
|
-
if (!status)
|
|
428
|
-
die('No staged changes detected. Stage backlog/status/WU YAML claim edits first or omit --no-auto.');
|
|
429
|
-
const staged = status
|
|
430
|
-
.split(STRING_LITERALS.NEWLINE)
|
|
431
|
-
.filter(Boolean)
|
|
432
|
-
.filter((l) => l.startsWith('A ') || l.startsWith('M ') || l.startsWith('R '));
|
|
433
|
-
// WU-1311: Use config-based paths instead of hardcoded docs/04-operations paths
|
|
434
|
-
const config = getConfig();
|
|
435
|
-
const wuDirPattern = config.directories.wuDir.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
436
|
-
// eslint-disable-next-line security/detect-non-literal-regexp -- config path escaped for regex; not user input
|
|
437
|
-
const wuYamlRegex = new RegExp(`${wuDirPattern}/WU-\\d+\\.yaml`);
|
|
438
|
-
const hasClaimFiles = staged.some((l) => l.includes(config.directories.statusPath) ||
|
|
439
|
-
l.includes(config.directories.backlogPath) ||
|
|
440
|
-
wuYamlRegex.test(l));
|
|
441
|
-
if (!hasClaimFiles) {
|
|
442
|
-
console.error(status);
|
|
443
|
-
die('Stage claim-related files (status/backlog/WU YAML) before running with --no-auto.');
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
/**
|
|
447
|
-
* Update canonical claim state on origin/main using push-only micro-worktree.
|
|
448
|
-
* Ensures canonical state stays global while local main remains unchanged.
|
|
449
|
-
*/
|
|
450
|
-
export async function applyCanonicalClaimUpdate(ctx, sessionId) {
|
|
451
|
-
const { args, id, laneK, worktree, WU_PATH, STATUS_PATH, BACKLOG_PATH, claimedMode, fixableIssues, stagedChanges, currentBranchForCloud, // WU-1590: For persisting claimed_branch
|
|
452
|
-
} = ctx;
|
|
453
|
-
const commitMsg = COMMIT_FORMATS.CLAIM(id.toLowerCase(), laneK);
|
|
454
|
-
const laneForUpdate = args.lane ?? laneK;
|
|
455
|
-
const worktreePathForYaml = claimedMode === CLAIMED_MODES.BRANCH_ONLY ? null : path.resolve(worktree);
|
|
456
|
-
let updatedTitle = '';
|
|
457
|
-
const filesToCommit = args.noAuto && stagedChanges.length > 0
|
|
458
|
-
? stagedChanges
|
|
459
|
-
.map((change) => change.filePath)
|
|
460
|
-
.filter((filePath) => Boolean(filePath))
|
|
461
|
-
: [WU_PATHS.WU(id), WU_PATHS.STATUS(), WU_PATHS.BACKLOG(), LUMENFLOW_PATHS.WU_EVENTS];
|
|
462
|
-
console.log(`${PREFIX} Updating canonical claim state (push-only)...`);
|
|
463
|
-
await withMicroWorktree({
|
|
464
|
-
operation: MICRO_WORKTREE_OPERATIONS.WU_CLAIM,
|
|
465
|
-
id,
|
|
466
|
-
logPrefix: PREFIX,
|
|
467
|
-
pushOnly: true,
|
|
468
|
-
execute: async ({ worktreePath }) => {
|
|
469
|
-
const microWUPath = path.join(worktreePath, WU_PATH);
|
|
470
|
-
const microStatusPath = path.join(worktreePath, STATUS_PATH);
|
|
471
|
-
const microBacklogPath = path.join(worktreePath, BACKLOG_PATH);
|
|
472
|
-
if (args.noAuto) {
|
|
473
|
-
await applyStagedChangesToMicroWorktree(worktreePath, stagedChanges);
|
|
474
|
-
}
|
|
475
|
-
else {
|
|
476
|
-
if (fixableIssues && fixableIssues.length > 0) {
|
|
477
|
-
console.log(`${PREFIX} Applying ${fixableIssues.length} YAML fix(es)...`);
|
|
478
|
-
autoFixWUYaml(microWUPath);
|
|
479
|
-
console.log(`${PREFIX} YAML fixes applied successfully`);
|
|
480
|
-
}
|
|
481
|
-
const microGit = createGitForPath(worktreePath);
|
|
482
|
-
// WU-1211: updateWUYaml now returns {title, initiative}
|
|
483
|
-
const updateResult = await updateWUYaml(microWUPath, id, laneForUpdate, claimedMode, worktreePathForYaml, sessionId, microGit, currentBranchForCloud ?? null);
|
|
484
|
-
updatedTitle = updateResult.title || updatedTitle;
|
|
485
|
-
await addOrReplaceInProgressStatus(microStatusPath, id, updatedTitle);
|
|
486
|
-
await removeFromReadyAndAddToInProgressBacklog(microBacklogPath, id, updatedTitle, laneForUpdate);
|
|
487
|
-
// WU-1211: Check and progress initiative status
|
|
488
|
-
let initPath = null;
|
|
489
|
-
if (updateResult.initiative) {
|
|
490
|
-
const initProgress = await maybeProgressInitiativeStatus(worktreePath, updateResult.initiative, id);
|
|
491
|
-
initPath = initProgress.initPath;
|
|
492
|
-
}
|
|
493
|
-
// Include initiative path in files to commit if updated
|
|
494
|
-
const allFilesToCommit = initPath ? [...filesToCommit, initPath] : filesToCommit;
|
|
495
|
-
return {
|
|
496
|
-
commitMessage: commitMsg,
|
|
497
|
-
files: allFilesToCommit,
|
|
498
|
-
};
|
|
499
|
-
}
|
|
500
|
-
return {
|
|
501
|
-
commitMessage: commitMsg,
|
|
502
|
-
files: filesToCommit,
|
|
503
|
-
};
|
|
504
|
-
},
|
|
505
|
-
});
|
|
506
|
-
console.log(`${PREFIX} Canonical claim state updated on origin/main`);
|
|
507
|
-
return updatedTitle;
|
|
508
|
-
}
|
|
509
|
-
/**
|
|
510
|
-
* WU-1521: Rollback canonical claim state on origin/main after partial failure.
|
|
511
|
-
*
|
|
512
|
-
* When wu:claim pushes YAML changes to origin/main (via applyCanonicalClaimUpdate)
|
|
513
|
-
* but then fails to create the worktree or branch, this function reverses the claim
|
|
514
|
-
* by writing the WU YAML back to 'ready' status and emitting a 'release' event
|
|
515
|
-
* to the state store. This ensures re-running wu:claim succeeds without wu:repair.
|
|
516
|
-
*
|
|
517
|
-
* Uses a push-only micro-worktree to atomically update origin/main.
|
|
518
|
-
*
|
|
519
|
-
* @param id - WU ID (e.g., 'WU-1521')
|
|
520
|
-
* @param lane - Lane name for the release event
|
|
521
|
-
* @param title - WU title for the release event
|
|
522
|
-
*/
|
|
523
|
-
export async function rollbackCanonicalClaim(id, _lane, _title) {
|
|
524
|
-
console.log(`${PREFIX} Rolling back canonical claim for ${id}...`);
|
|
525
|
-
try {
|
|
526
|
-
await withMicroWorktree({
|
|
527
|
-
operation: MICRO_WORKTREE_OPERATIONS.WU_CLAIM,
|
|
528
|
-
id,
|
|
529
|
-
logPrefix: PREFIX,
|
|
530
|
-
pushOnly: true,
|
|
531
|
-
execute: async ({ worktreePath }) => {
|
|
532
|
-
const microWUPath = path.join(worktreePath, WU_PATHS.WU(id));
|
|
533
|
-
// Read the current (claimed) YAML from the micro-worktree
|
|
534
|
-
const text = await readFile(microWUPath, {
|
|
535
|
-
encoding: FILE_SYSTEM.UTF8,
|
|
536
|
-
});
|
|
537
|
-
const doc = parseYAML(text);
|
|
538
|
-
// Build the rolled-back doc and write it
|
|
539
|
-
const rolledBackDoc = buildRollbackYamlDoc(doc);
|
|
540
|
-
const out = stringifyYAML(rolledBackDoc);
|
|
541
|
-
await writeFile(microWUPath, out, {
|
|
542
|
-
encoding: FILE_SYSTEM.UTF8,
|
|
543
|
-
});
|
|
544
|
-
// Emit a release event to the state store so the claim event is reversed
|
|
545
|
-
const microBacklogPath = path.join(worktreePath, WU_PATHS.BACKLOG());
|
|
546
|
-
const stateDir = getStateStoreDirFromBacklog(microBacklogPath);
|
|
547
|
-
const store = new WUStateStore(stateDir);
|
|
548
|
-
await store.load();
|
|
549
|
-
await store.release(id, `Rollback: wu:claim failed after canonical update`);
|
|
550
|
-
// Regenerate backlog.md and status.md from the corrected state
|
|
551
|
-
const backlogContent = await generateBacklog(store);
|
|
552
|
-
await writeFile(microBacklogPath, backlogContent, {
|
|
553
|
-
encoding: FILE_SYSTEM.UTF8,
|
|
554
|
-
});
|
|
555
|
-
const microStatusPath = path.join(worktreePath, WU_PATHS.STATUS());
|
|
556
|
-
const statusContent = await generateStatus(store);
|
|
557
|
-
await writeFile(microStatusPath, statusContent, {
|
|
558
|
-
encoding: FILE_SYSTEM.UTF8,
|
|
559
|
-
});
|
|
560
|
-
return {
|
|
561
|
-
commitMessage: `wu(${id.toLowerCase()}): rollback claim after partial failure`,
|
|
562
|
-
files: [
|
|
563
|
-
WU_PATHS.WU(id),
|
|
564
|
-
WU_PATHS.STATUS(),
|
|
565
|
-
WU_PATHS.BACKLOG(),
|
|
566
|
-
LUMENFLOW_PATHS.WU_EVENTS,
|
|
567
|
-
],
|
|
568
|
-
};
|
|
569
|
-
},
|
|
570
|
-
});
|
|
571
|
-
console.log(`${PREFIX} Canonical claim rolled back for ${id}`);
|
|
572
|
-
}
|
|
573
|
-
catch (rollbackErr) {
|
|
574
|
-
// Rollback failure should not mask the original error.
|
|
575
|
-
// Log the rollback failure but let the original error propagate.
|
|
576
|
-
const rollbackMessage = rollbackErr instanceof Error ? rollbackErr.message : getErrorMessage(rollbackErr);
|
|
577
|
-
console.error(`${PREFIX} WARNING: Failed to rollback canonical claim for ${id}: ${rollbackMessage}`);
|
|
578
|
-
console.error(`${PREFIX} Manual recovery required: pnpm wu:repair --id ${id} --claim`);
|
|
579
|
-
}
|
|
580
|
-
}
|
|
581
|
-
//# sourceMappingURL=wu-claim-state.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wu-claim-state.js","sourceRoot":"","sources":["../src/wu-claim-state.ts"],"names":[],"mappings":"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"}
|