@lumenflow/core 3.1.2 → 3.2.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 +16 -16
- package/dist/cli/is-agent-branch.js +31 -10
- package/dist/index.js +3 -0
- package/package.json +5 -2
- package/dist/active-wu-detector.d.ts +0 -25
- package/dist/active-wu-detector.d.ts.map +0 -1
- package/dist/active-wu-detector.js +0 -109
- package/dist/active-wu-detector.js.map +0 -1
- package/dist/adapters/context-adapters.d.ts +0 -101
- package/dist/adapters/context-adapters.d.ts.map +0 -1
- package/dist/adapters/context-adapters.js +0 -98
- package/dist/adapters/context-adapters.js.map +0 -1
- package/dist/adapters/filesystem-metrics.adapter.d.ts +0 -91
- package/dist/adapters/filesystem-metrics.adapter.d.ts.map +0 -1
- package/dist/adapters/filesystem-metrics.adapter.js +0 -530
- package/dist/adapters/filesystem-metrics.adapter.js.map +0 -1
- package/dist/adapters/index.d.ts +0 -15
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/index.js +0 -21
- package/dist/adapters/index.js.map +0 -1
- package/dist/adapters/mock-dashboard-renderer.adapter.d.ts +0 -86
- package/dist/adapters/mock-dashboard-renderer.adapter.d.ts.map +0 -1
- package/dist/adapters/mock-dashboard-renderer.adapter.js +0 -93
- package/dist/adapters/mock-dashboard-renderer.adapter.js.map +0 -1
- package/dist/adapters/recovery-adapters.d.ts +0 -41
- package/dist/adapters/recovery-adapters.d.ts.map +0 -1
- package/dist/adapters/recovery-adapters.js +0 -32
- package/dist/adapters/recovery-adapters.js.map +0 -1
- package/dist/adapters/terminal-renderer.adapter.d.ts +0 -86
- package/dist/adapters/terminal-renderer.adapter.d.ts.map +0 -1
- package/dist/adapters/terminal-renderer.adapter.js +0 -342
- package/dist/adapters/terminal-renderer.adapter.js.map +0 -1
- package/dist/adapters/validation-adapters.d.ts +0 -53
- package/dist/adapters/validation-adapters.d.ts.map +0 -1
- package/dist/adapters/validation-adapters.js +0 -48
- package/dist/adapters/validation-adapters.js.map +0 -1
- package/dist/agent-patterns-registry.d.ts +0 -141
- package/dist/agent-patterns-registry.d.ts.map +0 -1
- package/dist/agent-patterns-registry.js +0 -319
- package/dist/agent-patterns-registry.js.map +0 -1
- package/dist/arg-parser.d.ts +0 -94
- package/dist/arg-parser.d.ts.map +0 -1
- package/dist/arg-parser.js +0 -774
- package/dist/arg-parser.js.map +0 -1
- package/dist/atomic-merge.d.ts +0 -21
- package/dist/atomic-merge.d.ts.map +0 -1
- package/dist/atomic-merge.js +0 -87
- package/dist/atomic-merge.js.map +0 -1
- package/dist/backlog-editor.d.ts +0 -103
- package/dist/backlog-editor.d.ts.map +0 -1
- package/dist/backlog-editor.js +0 -158
- package/dist/backlog-editor.js.map +0 -1
- package/dist/backlog-generator.d.ts +0 -90
- package/dist/backlog-generator.d.ts.map +0 -1
- package/dist/backlog-generator.js +0 -536
- package/dist/backlog-generator.js.map +0 -1
- package/dist/backlog-parser.d.ts +0 -46
- package/dist/backlog-parser.d.ts.map +0 -1
- package/dist/backlog-parser.js +0 -105
- package/dist/backlog-parser.js.map +0 -1
- package/dist/backlog-sync-validator.d.ts +0 -88
- package/dist/backlog-sync-validator.d.ts.map +0 -1
- package/dist/backlog-sync-validator.js +0 -324
- package/dist/backlog-sync-validator.js.map +0 -1
- package/dist/beacon-migration.d.ts +0 -56
- package/dist/beacon-migration.js +0 -101
- package/dist/branch-check.d.ts +0 -63
- package/dist/branch-check.d.ts.map +0 -1
- package/dist/branch-check.js +0 -197
- package/dist/branch-check.js.map +0 -1
- package/dist/branch-drift.d.ts +0 -24
- package/dist/branch-drift.d.ts.map +0 -1
- package/dist/branch-drift.js +0 -54
- package/dist/branch-drift.js.map +0 -1
- package/dist/cleanup-install-config.d.ts +0 -24
- package/dist/cleanup-install-config.d.ts.map +0 -1
- package/dist/cleanup-install-config.js +0 -40
- package/dist/cleanup-install-config.js.map +0 -1
- package/dist/cleanup-lock.d.ts +0 -125
- package/dist/cleanup-lock.d.ts.map +0 -1
- package/dist/cleanup-lock.js +0 -325
- package/dist/cleanup-lock.js.map +0 -1
- package/dist/cli/is-agent-branch.d.ts +0 -15
- package/dist/cli/is-agent-branch.d.ts.map +0 -1
- package/dist/cli/is-agent-branch.js.map +0 -1
- package/dist/cloud-detect.d.ts +0 -145
- package/dist/cloud-detect.d.ts.map +0 -1
- package/dist/cloud-detect.js +0 -116
- package/dist/cloud-detect.js.map +0 -1
- package/dist/code-path-validator.d.ts +0 -147
- package/dist/code-path-validator.d.ts.map +0 -1
- package/dist/code-path-validator.js +0 -551
- package/dist/code-path-validator.js.map +0 -1
- package/dist/code-paths-overlap.d.ts +0 -50
- package/dist/code-paths-overlap.d.ts.map +0 -1
- package/dist/code-paths-overlap.js +0 -248
- package/dist/code-paths-overlap.js.map +0 -1
- package/dist/color-support.d.ts +0 -21
- package/dist/color-support.d.ts.map +0 -1
- package/dist/color-support.js +0 -67
- package/dist/color-support.js.map +0 -1
- package/dist/commands-logger.d.ts +0 -71
- package/dist/commands-logger.d.ts.map +0 -1
- package/dist/commands-logger.js +0 -256
- package/dist/commands-logger.js.map +0 -1
- package/dist/commit-message-utils.d.ts +0 -26
- package/dist/commit-message-utils.d.ts.map +0 -1
- package/dist/commit-message-utils.js +0 -44
- package/dist/commit-message-utils.js.map +0 -1
- package/dist/compliance-parser.d.ts +0 -125
- package/dist/compliance-parser.d.ts.map +0 -1
- package/dist/compliance-parser.js +0 -457
- package/dist/compliance-parser.js.map +0 -1
- package/dist/constants/backlog-patterns.d.ts +0 -21
- package/dist/constants/backlog-patterns.d.ts.map +0 -1
- package/dist/constants/backlog-patterns.js +0 -26
- package/dist/constants/backlog-patterns.js.map +0 -1
- package/dist/constants/dora-constants.d.ts +0 -50
- package/dist/constants/dora-constants.d.ts.map +0 -1
- package/dist/constants/dora-constants.js +0 -56
- package/dist/constants/dora-constants.js.map +0 -1
- package/dist/constants/gate-constants.d.ts +0 -16
- package/dist/constants/gate-constants.d.ts.map +0 -1
- package/dist/constants/gate-constants.js +0 -18
- package/dist/constants/gate-constants.js.map +0 -1
- package/dist/constants/linter-constants.d.ts +0 -17
- package/dist/constants/linter-constants.d.ts.map +0 -1
- package/dist/constants/linter-constants.js +0 -19
- package/dist/constants/linter-constants.js.map +0 -1
- package/dist/constants/tokenizer-constants.d.ts +0 -16
- package/dist/constants/tokenizer-constants.d.ts.map +0 -1
- package/dist/constants/tokenizer-constants.js +0 -18
- package/dist/constants/tokenizer-constants.js.map +0 -1
- package/dist/context/context-computer.d.ts +0 -36
- package/dist/context/context-computer.d.ts.map +0 -1
- package/dist/context/context-computer.js +0 -128
- package/dist/context/context-computer.js.map +0 -1
- package/dist/context/git-state-reader.d.ts +0 -37
- package/dist/context/git-state-reader.d.ts.map +0 -1
- package/dist/context/git-state-reader.js +0 -64
- package/dist/context/git-state-reader.js.map +0 -1
- package/dist/context/index.d.ts +0 -18
- package/dist/context/index.d.ts.map +0 -1
- package/dist/context/index.js +0 -20
- package/dist/context/index.js.map +0 -1
- package/dist/context/location-resolver.d.ts +0 -34
- package/dist/context/location-resolver.d.ts.map +0 -1
- package/dist/context/location-resolver.js +0 -179
- package/dist/context/location-resolver.js.map +0 -1
- package/dist/context/wu-state-reader.d.ts +0 -30
- package/dist/context/wu-state-reader.d.ts.map +0 -1
- package/dist/context/wu-state-reader.js +0 -126
- package/dist/context/wu-state-reader.js.map +0 -1
- package/dist/context-di.d.ts +0 -185
- package/dist/context-di.d.ts.map +0 -1
- package/dist/context-di.js +0 -165
- package/dist/context-di.js.map +0 -1
- package/dist/context-validation-integration.d.ts +0 -69
- package/dist/context-validation-integration.d.ts.map +0 -1
- package/dist/context-validation-integration.js +0 -161
- package/dist/context-validation-integration.js.map +0 -1
- package/dist/core/scope-checker.d.ts +0 -80
- package/dist/core/scope-checker.d.ts.map +0 -1
- package/dist/core/scope-checker.js +0 -166
- package/dist/core/scope-checker.js.map +0 -1
- package/dist/core/tool-runner.d.ts +0 -136
- package/dist/core/tool-runner.d.ts.map +0 -1
- package/dist/core/tool-runner.js +0 -396
- package/dist/core/tool-runner.js.map +0 -1
- package/dist/core/tool.constants.d.ts +0 -106
- package/dist/core/tool.constants.d.ts.map +0 -1
- package/dist/core/tool.constants.js +0 -104
- package/dist/core/tool.constants.js.map +0 -1
- package/dist/core/tool.schemas.d.ts +0 -227
- package/dist/core/tool.schemas.d.ts.map +0 -1
- package/dist/core/tool.schemas.js +0 -229
- package/dist/core/tool.schemas.js.map +0 -1
- package/dist/core/worktree-guard.d.ts +0 -115
- package/dist/core/worktree-guard.d.ts.map +0 -1
- package/dist/core/worktree-guard.js +0 -245
- package/dist/core/worktree-guard.js.map +0 -1
- package/dist/coverage-gate.d.ts +0 -126
- package/dist/coverage-gate.d.ts.map +0 -1
- package/dist/coverage-gate.js +0 -209
- package/dist/coverage-gate.js.map +0 -1
- package/dist/cycle-detector.d.ts +0 -52
- package/dist/cycle-detector.d.ts.map +0 -1
- package/dist/cycle-detector.js +0 -84
- package/dist/cycle-detector.js.map +0 -1
- package/dist/date-utils.d.ts +0 -66
- package/dist/date-utils.d.ts.map +0 -1
- package/dist/date-utils.js +0 -143
- package/dist/date-utils.js.map +0 -1
- package/dist/delegation-escalation.d.ts +0 -71
- package/dist/delegation-escalation.d.ts.map +0 -1
- package/dist/delegation-escalation.js +0 -264
- package/dist/delegation-escalation.js.map +0 -1
- package/dist/delegation-monitor.d.ts +0 -262
- package/dist/delegation-monitor.d.ts.map +0 -1
- package/dist/delegation-monitor.js +0 -678
- package/dist/delegation-monitor.js.map +0 -1
- package/dist/delegation-recovery.d.ts +0 -62
- package/dist/delegation-recovery.d.ts.map +0 -1
- package/dist/delegation-recovery.js +0 -304
- package/dist/delegation-recovery.js.map +0 -1
- package/dist/delegation-registry-schema.d.ts +0 -75
- package/dist/delegation-registry-schema.d.ts.map +0 -1
- package/dist/delegation-registry-schema.js +0 -93
- package/dist/delegation-registry-schema.js.map +0 -1
- package/dist/delegation-registry-store.d.ts +0 -145
- package/dist/delegation-registry-store.d.ts.map +0 -1
- package/dist/delegation-registry-store.js +0 -308
- package/dist/delegation-registry-store.js.map +0 -1
- package/dist/delegation-tree.d.ts +0 -52
- package/dist/delegation-tree.d.ts.map +0 -1
- package/dist/delegation-tree.js +0 -205
- package/dist/delegation-tree.js.map +0 -1
- package/dist/dependency-graph.d.ts +0 -169
- package/dist/dependency-graph.d.ts.map +0 -1
- package/dist/dependency-graph.js +0 -612
- package/dist/dependency-graph.js.map +0 -1
- package/dist/dependency-guard.d.ts +0 -41
- package/dist/dependency-guard.d.ts.map +0 -1
- package/dist/dependency-guard.js +0 -145
- package/dist/dependency-guard.js.map +0 -1
- package/dist/dependency-validator.d.ts +0 -89
- package/dist/dependency-validator.d.ts.map +0 -1
- package/dist/dependency-validator.js +0 -155
- package/dist/dependency-validator.js.map +0 -1
- package/dist/docs-path-validator.d.ts +0 -16
- package/dist/docs-path-validator.d.ts.map +0 -1
- package/dist/docs-path-validator.js +0 -98
- package/dist/docs-path-validator.js.map +0 -1
- package/dist/domain/context.schemas.d.ts +0 -170
- package/dist/domain/context.schemas.d.ts.map +0 -1
- package/dist/domain/context.schemas.js +0 -151
- package/dist/domain/context.schemas.js.map +0 -1
- package/dist/domain/index.d.ts +0 -15
- package/dist/domain/index.d.ts.map +0 -1
- package/dist/domain/index.js +0 -23
- package/dist/domain/index.js.map +0 -1
- package/dist/domain/orchestration.constants.d.ts +0 -111
- package/dist/domain/orchestration.constants.d.ts.map +0 -1
- package/dist/domain/orchestration.constants.js +0 -130
- package/dist/domain/orchestration.constants.js.map +0 -1
- package/dist/domain/orchestration.schemas.d.ts +0 -307
- package/dist/domain/orchestration.schemas.d.ts.map +0 -1
- package/dist/domain/orchestration.schemas.js +0 -214
- package/dist/domain/orchestration.schemas.js.map +0 -1
- package/dist/domain/orchestration.types.d.ts +0 -134
- package/dist/domain/orchestration.types.d.ts.map +0 -1
- package/dist/domain/orchestration.types.js +0 -5
- package/dist/domain/orchestration.types.js.map +0 -1
- package/dist/domain/recovery.schemas.d.ts +0 -164
- package/dist/domain/recovery.schemas.d.ts.map +0 -1
- package/dist/domain/recovery.schemas.js +0 -134
- package/dist/domain/recovery.schemas.js.map +0 -1
- package/dist/domain/validation.schemas.d.ts +0 -147
- package/dist/domain/validation.schemas.d.ts.map +0 -1
- package/dist/domain/validation.schemas.js +0 -117
- package/dist/domain/validation.schemas.js.map +0 -1
- package/dist/error-handler.d.ts +0 -144
- package/dist/error-handler.d.ts.map +0 -1
- package/dist/error-handler.js +0 -214
- package/dist/error-handler.js.map +0 -1
- package/dist/file-classifiers.d.ts +0 -63
- package/dist/file-classifiers.d.ts.map +0 -1
- package/dist/file-classifiers.js +0 -111
- package/dist/file-classifiers.js.map +0 -1
- package/dist/force-bypass-audit.d.ts +0 -47
- package/dist/force-bypass-audit.d.ts.map +0 -1
- package/dist/force-bypass-audit.js +0 -146
- package/dist/force-bypass-audit.js.map +0 -1
- package/dist/gates-agent-mode.d.ts +0 -107
- package/dist/gates-agent-mode.d.ts.map +0 -1
- package/dist/gates-agent-mode.js +0 -138
- package/dist/gates-agent-mode.js.map +0 -1
- package/dist/gates-config.d.ts +0 -268
- package/dist/gates-config.d.ts.map +0 -1
- package/dist/gates-config.js +0 -644
- package/dist/gates-config.js.map +0 -1
- package/dist/generate-traceability.d.ts +0 -106
- package/dist/generate-traceability.d.ts.map +0 -1
- package/dist/generate-traceability.js +0 -387
- package/dist/generate-traceability.js.map +0 -1
- package/dist/git-adapter.d.ts +0 -406
- package/dist/git-adapter.d.ts.map +0 -1
- package/dist/git-adapter.js +0 -686
- package/dist/git-adapter.js.map +0 -1
- package/dist/git-context-extractor.d.ts +0 -102
- package/dist/git-context-extractor.d.ts.map +0 -1
- package/dist/git-context-extractor.js +0 -571
- package/dist/git-context-extractor.js.map +0 -1
- package/dist/git-staged-validator.d.ts +0 -33
- package/dist/git-staged-validator.d.ts.map +0 -1
- package/dist/git-staged-validator.js +0 -52
- package/dist/git-staged-validator.js.map +0 -1
- package/dist/hardcoded-strings.d.ts +0 -67
- package/dist/hardcoded-strings.d.ts.map +0 -1
- package/dist/hardcoded-strings.js +0 -276
- package/dist/hardcoded-strings.js.map +0 -1
- package/dist/incremental-lint.d.ts +0 -71
- package/dist/incremental-lint.d.ts.map +0 -1
- package/dist/incremental-lint.js +0 -132
- package/dist/incremental-lint.js.map +0 -1
- package/dist/incremental-test.d.ts +0 -33
- package/dist/incremental-test.d.ts.map +0 -1
- package/dist/incremental-test.js +0 -64
- package/dist/incremental-test.js.map +0 -1
- package/dist/index.d.ts +0 -104
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/invariants/check-automated-tests.d.ts +0 -42
- package/dist/invariants/check-automated-tests.d.ts.map +0 -1
- package/dist/invariants/check-automated-tests.js +0 -171
- package/dist/invariants/check-automated-tests.js.map +0 -1
- package/dist/invariants-runner.d.ts +0 -108
- package/dist/invariants-runner.d.ts.map +0 -1
- package/dist/invariants-runner.js +0 -547
- package/dist/invariants-runner.js.map +0 -1
- package/dist/lane-checker.d.ts +0 -132
- package/dist/lane-checker.d.ts.map +0 -1
- package/dist/lane-checker.js +0 -743
- package/dist/lane-checker.js.map +0 -1
- package/dist/lane-inference.d.ts +0 -29
- package/dist/lane-inference.d.ts.map +0 -1
- package/dist/lane-inference.js +0 -210
- package/dist/lane-inference.js.map +0 -1
- package/dist/lane-lock.d.ts +0 -220
- package/dist/lane-lock.d.ts.map +0 -1
- package/dist/lane-lock.js +0 -499
- package/dist/lane-lock.js.map +0 -1
- package/dist/lane-suggest-prompt.d.ts +0 -97
- package/dist/lane-suggest-prompt.d.ts.map +0 -1
- package/dist/lane-suggest-prompt.js +0 -362
- package/dist/lane-suggest-prompt.js.map +0 -1
- package/dist/lane-validator.d.ts +0 -49
- package/dist/lane-validator.d.ts.map +0 -1
- package/dist/lane-validator.js +0 -117
- package/dist/lane-validator.js.map +0 -1
- package/dist/logs-lib.d.ts +0 -89
- package/dist/logs-lib.d.ts.map +0 -1
- package/dist/logs-lib.js +0 -214
- package/dist/logs-lib.js.map +0 -1
- package/dist/lumenflow-config-schema.d.ts +0 -1428
- package/dist/lumenflow-config-schema.d.ts.map +0 -1
- package/dist/lumenflow-config-schema.js +0 -1255
- package/dist/lumenflow-config-schema.js.map +0 -1
- package/dist/lumenflow-config.d.ts +0 -94
- package/dist/lumenflow-config.d.ts.map +0 -1
- package/dist/lumenflow-config.js +0 -253
- package/dist/lumenflow-config.js.map +0 -1
- package/dist/lumenflow-home.d.ts +0 -118
- package/dist/lumenflow-home.d.ts.map +0 -1
- package/dist/lumenflow-home.js +0 -214
- package/dist/lumenflow-home.js.map +0 -1
- package/dist/manual-test-validator.d.ts +0 -84
- package/dist/manual-test-validator.d.ts.map +0 -1
- package/dist/manual-test-validator.js +0 -206
- package/dist/manual-test-validator.js.map +0 -1
- package/dist/merge-lock.d.ts +0 -107
- package/dist/merge-lock.d.ts.map +0 -1
- package/dist/merge-lock.js +0 -263
- package/dist/merge-lock.js.map +0 -1
- package/dist/micro-worktree-shared.d.ts +0 -128
- package/dist/micro-worktree-shared.d.ts.map +0 -1
- package/dist/micro-worktree-shared.js +0 -352
- package/dist/micro-worktree-shared.js.map +0 -1
- package/dist/micro-worktree.d.ts +0 -165
- package/dist/micro-worktree.d.ts.map +0 -1
- package/dist/micro-worktree.js +0 -463
- package/dist/micro-worktree.js.map +0 -1
- package/dist/migration-deployer.d.ts +0 -70
- package/dist/migration-deployer.d.ts.map +0 -1
- package/dist/migration-deployer.js +0 -152
- package/dist/migration-deployer.js.map +0 -1
- package/dist/normalize-config-keys.d.ts +0 -10
- package/dist/normalize-config-keys.d.ts.map +0 -1
- package/dist/normalize-config-keys.js +0 -70
- package/dist/normalize-config-keys.js.map +0 -1
- package/dist/orchestration-advisory-loader.d.ts +0 -19
- package/dist/orchestration-advisory-loader.d.ts.map +0 -1
- package/dist/orchestration-advisory-loader.js +0 -94
- package/dist/orchestration-advisory-loader.js.map +0 -1
- package/dist/orchestration-advisory.d.ts +0 -49
- package/dist/orchestration-advisory.d.ts.map +0 -1
- package/dist/orchestration-advisory.js +0 -97
- package/dist/orchestration-advisory.js.map +0 -1
- package/dist/orchestration-di.d.ts +0 -36
- package/dist/orchestration-di.d.ts.map +0 -1
- package/dist/orchestration-di.js +0 -60
- package/dist/orchestration-di.js.map +0 -1
- package/dist/orchestration-rules.d.ts +0 -60
- package/dist/orchestration-rules.d.ts.map +0 -1
- package/dist/orchestration-rules.js +0 -212
- package/dist/orchestration-rules.js.map +0 -1
- package/dist/orphan-detector.d.ts +0 -148
- package/dist/orphan-detector.d.ts.map +0 -1
- package/dist/orphan-detector.js +0 -253
- package/dist/orphan-detector.js.map +0 -1
- package/dist/pack-authoring-template-engine.d.ts +0 -54
- package/dist/pack-authoring-template-engine.d.ts.map +0 -1
- package/dist/pack-authoring-template-engine.js +0 -510
- package/dist/pack-authoring-template-engine.js.map +0 -1
- package/dist/path-classifiers.d.ts +0 -58
- package/dist/path-classifiers.d.ts.map +0 -1
- package/dist/path-classifiers.js +0 -96
- package/dist/path-classifiers.js.map +0 -1
- package/dist/patrol-loop.d.ts +0 -171
- package/dist/patrol-loop.d.ts.map +0 -1
- package/dist/patrol-loop.js +0 -197
- package/dist/patrol-loop.js.map +0 -1
- package/dist/piped-command-detector.d.ts +0 -25
- package/dist/piped-command-detector.d.ts.map +0 -1
- package/dist/piped-command-detector.js +0 -67
- package/dist/piped-command-detector.js.map +0 -1
- package/dist/ports/context.ports.d.ts +0 -136
- package/dist/ports/context.ports.d.ts.map +0 -1
- package/dist/ports/context.ports.js +0 -4
- package/dist/ports/context.ports.js.map +0 -1
- package/dist/ports/core-tools.ports.d.ts +0 -282
- package/dist/ports/core-tools.ports.d.ts.map +0 -1
- package/dist/ports/core-tools.ports.js +0 -4
- package/dist/ports/core-tools.ports.js.map +0 -1
- package/dist/ports/dashboard-renderer.port.d.ts +0 -113
- package/dist/ports/dashboard-renderer.port.d.ts.map +0 -1
- package/dist/ports/dashboard-renderer.port.js +0 -4
- package/dist/ports/dashboard-renderer.port.js.map +0 -1
- package/dist/ports/git-validator.ports.d.ts +0 -114
- package/dist/ports/git-validator.ports.d.ts.map +0 -1
- package/dist/ports/git-validator.ports.js +0 -4
- package/dist/ports/git-validator.ports.js.map +0 -1
- package/dist/ports/index.d.ts +0 -21
- package/dist/ports/index.d.ts.map +0 -1
- package/dist/ports/index.js +0 -23
- package/dist/ports/index.js.map +0 -1
- package/dist/ports/metrics-collector.port.d.ts +0 -133
- package/dist/ports/metrics-collector.port.d.ts.map +0 -1
- package/dist/ports/metrics-collector.port.js +0 -4
- package/dist/ports/metrics-collector.port.js.map +0 -1
- package/dist/ports/recovery.ports.d.ts +0 -59
- package/dist/ports/recovery.ports.d.ts.map +0 -1
- package/dist/ports/recovery.ports.js +0 -4
- package/dist/ports/recovery.ports.js.map +0 -1
- package/dist/ports/validation.ports.d.ts +0 -75
- package/dist/ports/validation.ports.d.ts.map +0 -1
- package/dist/ports/validation.ports.js +0 -4
- package/dist/ports/validation.ports.js.map +0 -1
- package/dist/ports/wu-helpers.ports.d.ts +0 -227
- package/dist/ports/wu-helpers.ports.d.ts.map +0 -1
- package/dist/ports/wu-helpers.ports.js +0 -4
- package/dist/ports/wu-helpers.ports.js.map +0 -1
- package/dist/process-detector.d.ts +0 -69
- package/dist/process-detector.d.ts.map +0 -1
- package/dist/process-detector.js +0 -175
- package/dist/process-detector.js.map +0 -1
- package/dist/prompt-linter.d.ts +0 -66
- package/dist/prompt-linter.d.ts.map +0 -1
- package/dist/prompt-linter.js +0 -323
- package/dist/prompt-linter.js.map +0 -1
- package/dist/prompt-monitor.d.ts +0 -6
- package/dist/prompt-monitor.d.ts.map +0 -1
- package/dist/prompt-monitor.js +0 -218
- package/dist/prompt-monitor.js.map +0 -1
- package/dist/rebase-artifact-cleanup.d.ts +0 -156
- package/dist/rebase-artifact-cleanup.d.ts.map +0 -1
- package/dist/rebase-artifact-cleanup.js +0 -475
- package/dist/rebase-artifact-cleanup.js.map +0 -1
- package/dist/recovery/index.d.ts +0 -12
- package/dist/recovery/index.d.ts.map +0 -1
- package/dist/recovery/index.js +0 -14
- package/dist/recovery/index.js.map +0 -1
- package/dist/recovery/recovery-analyzer.d.ts +0 -49
- package/dist/recovery/recovery-analyzer.d.ts.map +0 -1
- package/dist/recovery/recovery-analyzer.js +0 -149
- package/dist/recovery/recovery-analyzer.js.map +0 -1
- package/dist/resolve-policy.d.ts +0 -257
- package/dist/resolve-policy.d.ts.map +0 -1
- package/dist/resolve-policy.js +0 -269
- package/dist/resolve-policy.js.map +0 -1
- package/dist/retry-strategy.d.ts +0 -191
- package/dist/retry-strategy.d.ts.map +0 -1
- package/dist/retry-strategy.js +0 -286
- package/dist/retry-strategy.js.map +0 -1
- package/dist/risk-detector.d.ts +0 -109
- package/dist/risk-detector.d.ts.map +0 -1
- package/dist/risk-detector.js +0 -253
- package/dist/risk-detector.js.map +0 -1
- package/dist/rollback-utils.d.ts +0 -129
- package/dist/rollback-utils.d.ts.map +0 -1
- package/dist/rollback-utils.js +0 -217
- package/dist/rollback-utils.js.map +0 -1
- package/dist/sandbox-allowlist.d.ts +0 -16
- package/dist/sandbox-allowlist.d.ts.map +0 -1
- package/dist/sandbox-allowlist.js +0 -77
- package/dist/sandbox-allowlist.js.map +0 -1
- package/dist/sandbox-backend-linux.d.ts +0 -6
- package/dist/sandbox-backend-linux.d.ts.map +0 -1
- package/dist/sandbox-backend-linux.js +0 -67
- package/dist/sandbox-backend-linux.js.map +0 -1
- package/dist/sandbox-backend-macos.d.ts +0 -6
- package/dist/sandbox-backend-macos.d.ts.map +0 -1
- package/dist/sandbox-backend-macos.js +0 -66
- package/dist/sandbox-backend-macos.js.map +0 -1
- package/dist/sandbox-backend-windows.d.ts +0 -6
- package/dist/sandbox-backend-windows.d.ts.map +0 -1
- package/dist/sandbox-backend-windows.js +0 -30
- package/dist/sandbox-backend-windows.js.map +0 -1
- package/dist/sandbox-profile.d.ts +0 -53
- package/dist/sandbox-profile.d.ts.map +0 -1
- package/dist/sandbox-profile.js +0 -64
- package/dist/sandbox-profile.js.map +0 -1
- package/dist/schemas/arg-validators.d.ts +0 -58
- package/dist/schemas/arg-validators.d.ts.map +0 -1
- package/dist/schemas/arg-validators.js +0 -193
- package/dist/schemas/arg-validators.js.map +0 -1
- package/dist/schemas/command-schemas.d.ts +0 -171
- package/dist/schemas/command-schemas.d.ts.map +0 -1
- package/dist/schemas/command-schemas.js +0 -145
- package/dist/schemas/command-schemas.js.map +0 -1
- package/dist/schemas/flow-arg-validators.d.ts +0 -32
- package/dist/schemas/flow-arg-validators.d.ts.map +0 -1
- package/dist/schemas/flow-arg-validators.js +0 -57
- package/dist/schemas/flow-arg-validators.js.map +0 -1
- package/dist/schemas/flow-schemas.d.ts +0 -152
- package/dist/schemas/flow-schemas.d.ts.map +0 -1
- package/dist/schemas/flow-schemas.js +0 -105
- package/dist/schemas/flow-schemas.js.map +0 -1
- package/dist/schemas/index.d.ts +0 -33
- package/dist/schemas/index.d.ts.map +0 -1
- package/dist/schemas/index.js +0 -96
- package/dist/schemas/index.js.map +0 -1
- package/dist/schemas/initiative-arg-validators.d.ts +0 -64
- package/dist/schemas/initiative-arg-validators.d.ts.map +0 -1
- package/dist/schemas/initiative-arg-validators.js +0 -65
- package/dist/schemas/initiative-arg-validators.js.map +0 -1
- package/dist/schemas/initiative-schemas.d.ts +0 -256
- package/dist/schemas/initiative-schemas.d.ts.map +0 -1
- package/dist/schemas/initiative-schemas.js +0 -186
- package/dist/schemas/initiative-schemas.js.map +0 -1
- package/dist/schemas/memory-arg-validators.d.ts +0 -91
- package/dist/schemas/memory-arg-validators.d.ts.map +0 -1
- package/dist/schemas/memory-arg-validators.js +0 -75
- package/dist/schemas/memory-arg-validators.js.map +0 -1
- package/dist/schemas/memory-schemas.d.ts +0 -287
- package/dist/schemas/memory-schemas.d.ts.map +0 -1
- package/dist/schemas/memory-schemas.js +0 -242
- package/dist/schemas/memory-schemas.js.map +0 -1
- package/dist/schemas/schema-utils.d.ts +0 -87
- package/dist/schemas/schema-utils.d.ts.map +0 -1
- package/dist/schemas/schema-utils.js +0 -320
- package/dist/schemas/schema-utils.js.map +0 -1
- package/dist/schemas/setup-arg-validators.d.ts +0 -91
- package/dist/schemas/setup-arg-validators.d.ts.map +0 -1
- package/dist/schemas/setup-arg-validators.js +0 -98
- package/dist/schemas/setup-arg-validators.js.map +0 -1
- package/dist/schemas/setup-schemas.d.ts +0 -335
- package/dist/schemas/setup-schemas.d.ts.map +0 -1
- package/dist/schemas/setup-schemas.js +0 -260
- package/dist/schemas/setup-schemas.js.map +0 -1
- package/dist/schemas/validation-arg-validators.d.ts +0 -18
- package/dist/schemas/validation-arg-validators.d.ts.map +0 -1
- package/dist/schemas/validation-arg-validators.js +0 -59
- package/dist/schemas/validation-arg-validators.js.map +0 -1
- package/dist/schemas/validation-schemas.d.ts +0 -80
- package/dist/schemas/validation-schemas.d.ts.map +0 -1
- package/dist/schemas/validation-schemas.js +0 -88
- package/dist/schemas/validation-schemas.js.map +0 -1
- package/dist/schemas/wu-lifecycle-arg-validators.d.ts +0 -118
- package/dist/schemas/wu-lifecycle-arg-validators.d.ts.map +0 -1
- package/dist/schemas/wu-lifecycle-arg-validators.js +0 -82
- package/dist/schemas/wu-lifecycle-arg-validators.js.map +0 -1
- package/dist/schemas/wu-lifecycle-schemas.d.ts +0 -362
- package/dist/schemas/wu-lifecycle-schemas.d.ts.map +0 -1
- package/dist/schemas/wu-lifecycle-schemas.js +0 -284
- package/dist/schemas/wu-lifecycle-schemas.js.map +0 -1
- package/dist/section-headings.d.ts +0 -35
- package/dist/section-headings.d.ts.map +0 -1
- package/dist/section-headings.js +0 -54
- package/dist/section-headings.js.map +0 -1
- package/dist/spawn-escalation.d.ts +0 -91
- package/dist/spawn-escalation.d.ts.map +0 -1
- package/dist/spawn-escalation.js +0 -258
- package/dist/spawn-escalation.js.map +0 -1
- package/dist/spawn-monitor.d.ts +0 -230
- package/dist/spawn-monitor.d.ts.map +0 -1
- package/dist/spawn-monitor.js +0 -675
- package/dist/spawn-monitor.js.map +0 -1
- package/dist/spawn-prompt-schema.d.ts +0 -107
- package/dist/spawn-prompt-schema.d.ts.map +0 -1
- package/dist/spawn-prompt-schema.js +0 -163
- package/dist/spawn-prompt-schema.js.map +0 -1
- package/dist/spawn-recovery.d.ts +0 -83
- package/dist/spawn-recovery.d.ts.map +0 -1
- package/dist/spawn-recovery.js +0 -299
- package/dist/spawn-recovery.js.map +0 -1
- package/dist/spawn-registry-schema.d.ts +0 -122
- package/dist/spawn-registry-schema.d.ts.map +0 -1
- package/dist/spawn-registry-schema.js +0 -129
- package/dist/spawn-registry-schema.js.map +0 -1
- package/dist/spawn-registry-store.d.ts +0 -161
- package/dist/spawn-registry-store.d.ts.map +0 -1
- package/dist/spawn-registry-store.js +0 -301
- package/dist/spawn-registry-store.js.map +0 -1
- package/dist/spawn-strategy.d.ts +0 -60
- package/dist/spawn-strategy.d.ts.map +0 -1
- package/dist/spawn-strategy.js +0 -112
- package/dist/spawn-strategy.js.map +0 -1
- package/dist/spawn-tree.d.ts +0 -125
- package/dist/spawn-tree.d.ts.map +0 -1
- package/dist/spawn-tree.js +0 -286
- package/dist/spawn-tree.js.map +0 -1
- package/dist/stamp-status-validator.d.ts +0 -77
- package/dist/stamp-status-validator.d.ts.map +0 -1
- package/dist/stamp-status-validator.js +0 -138
- package/dist/stamp-status-validator.js.map +0 -1
- package/dist/stamp-tracking.d.ts +0 -12
- package/dist/stamp-tracking.d.ts.map +0 -1
- package/dist/stamp-tracking.js +0 -43
- package/dist/stamp-tracking.js.map +0 -1
- package/dist/stamp-utils.d.ts +0 -94
- package/dist/stamp-utils.d.ts.map +0 -1
- package/dist/stamp-utils.js +0 -245
- package/dist/stamp-utils.js.map +0 -1
- package/dist/state-cleanup-core.d.ts +0 -206
- package/dist/state-cleanup-core.d.ts.map +0 -1
- package/dist/state-cleanup-core.js +0 -225
- package/dist/state-cleanup-core.js.map +0 -1
- package/dist/state-doctor-core.d.ts +0 -177
- package/dist/state-doctor-core.d.ts.map +0 -1
- package/dist/state-doctor-core.js +0 -395
- package/dist/state-doctor-core.js.map +0 -1
- package/dist/state-machine.d.ts +0 -10
- package/dist/state-machine.d.ts.map +0 -1
- package/dist/state-machine.js +0 -89
- package/dist/state-machine.js.map +0 -1
- package/dist/stream-error-handler.d.ts +0 -68
- package/dist/stream-error-handler.d.ts.map +0 -1
- package/dist/stream-error-handler.js +0 -77
- package/dist/stream-error-handler.js.map +0 -1
- package/dist/system-map-validator.d.ts +0 -111
- package/dist/system-map-validator.d.ts.map +0 -1
- package/dist/system-map-validator.js +0 -383
- package/dist/system-map-validator.js.map +0 -1
- package/dist/telemetry.d.ts +0 -81
- package/dist/telemetry.d.ts.map +0 -1
- package/dist/telemetry.js +0 -219
- package/dist/telemetry.js.map +0 -1
- package/dist/template-loader.d.ts +0 -151
- package/dist/template-loader.d.ts.map +0 -1
- package/dist/template-loader.js +0 -400
- package/dist/template-loader.js.map +0 -1
- package/dist/test-baseline.d.ts +0 -177
- package/dist/test-baseline.d.ts.map +0 -1
- package/dist/test-baseline.js +0 -286
- package/dist/test-baseline.js.map +0 -1
- package/dist/token-counter.d.ts +0 -50
- package/dist/token-counter.d.ts.map +0 -1
- package/dist/token-counter.js +0 -144
- package/dist/token-counter.js.map +0 -1
- package/dist/usecases/analyze-recovery.usecase.d.ts +0 -43
- package/dist/usecases/analyze-recovery.usecase.d.ts.map +0 -1
- package/dist/usecases/analyze-recovery.usecase.js +0 -34
- package/dist/usecases/analyze-recovery.usecase.js.map +0 -1
- package/dist/usecases/compute-context.usecase.d.ts +0 -63
- package/dist/usecases/compute-context.usecase.d.ts.map +0 -1
- package/dist/usecases/compute-context.usecase.js +0 -91
- package/dist/usecases/compute-context.usecase.js.map +0 -1
- package/dist/usecases/get-dashboard-data.usecase.d.ts +0 -53
- package/dist/usecases/get-dashboard-data.usecase.d.ts.map +0 -1
- package/dist/usecases/get-dashboard-data.usecase.js +0 -54
- package/dist/usecases/get-dashboard-data.usecase.js.map +0 -1
- package/dist/usecases/get-suggestions.usecase.d.ts +0 -101
- package/dist/usecases/get-suggestions.usecase.d.ts.map +0 -1
- package/dist/usecases/get-suggestions.usecase.js +0 -148
- package/dist/usecases/get-suggestions.usecase.js.map +0 -1
- package/dist/usecases/index.d.ts +0 -15
- package/dist/usecases/index.d.ts.map +0 -1
- package/dist/usecases/index.js +0 -21
- package/dist/usecases/index.js.map +0 -1
- package/dist/usecases/validate-command.usecase.d.ts +0 -56
- package/dist/usecases/validate-command.usecase.d.ts.map +0 -1
- package/dist/usecases/validate-command.usecase.js +0 -143
- package/dist/usecases/validate-command.usecase.js.map +0 -1
- package/dist/user-normalizer.d.ts +0 -36
- package/dist/user-normalizer.d.ts.map +0 -1
- package/dist/user-normalizer.js +0 -149
- package/dist/user-normalizer.js.map +0 -1
- package/dist/validation/command-registry.d.ts +0 -26
- package/dist/validation/command-registry.d.ts.map +0 -1
- package/dist/validation/command-registry.js +0 -269
- package/dist/validation/command-registry.js.map +0 -1
- package/dist/validation/index.d.ts +0 -16
- package/dist/validation/index.d.ts.map +0 -1
- package/dist/validation/index.js +0 -18
- package/dist/validation/index.js.map +0 -1
- package/dist/validation/types.d.ts +0 -140
- package/dist/validation/types.d.ts.map +0 -1
- package/dist/validation/types.js +0 -4
- package/dist/validation/types.js.map +0 -1
- package/dist/validation/validate-command.d.ts +0 -16
- package/dist/validation/validate-command.d.ts.map +0 -1
- package/dist/validation/validate-command.js +0 -163
- package/dist/validation/validate-command.js.map +0 -1
- package/dist/validators/backlog-sync.d.ts +0 -11
- package/dist/validators/backlog-sync.d.ts.map +0 -1
- package/dist/validators/backlog-sync.js +0 -65
- package/dist/validators/backlog-sync.js.map +0 -1
- package/dist/validators/phi-constants.d.ts +0 -98
- package/dist/validators/phi-constants.d.ts.map +0 -1
- package/dist/validators/phi-constants.js +0 -153
- package/dist/validators/phi-constants.js.map +0 -1
- package/dist/validators/phi-scanner.d.ts +0 -59
- package/dist/validators/phi-scanner.d.ts.map +0 -1
- package/dist/validators/phi-scanner.js +0 -222
- package/dist/validators/phi-scanner.js.map +0 -1
- package/dist/validators/supabase-docs-linter.d.ts +0 -15
- package/dist/validators/supabase-docs-linter.d.ts.map +0 -1
- package/dist/validators/supabase-docs-linter.js +0 -45
- package/dist/validators/supabase-docs-linter.js.map +0 -1
- package/dist/validators/wu-tasks.d.ts +0 -21
- package/dist/validators/wu-tasks.d.ts.map +0 -1
- package/dist/validators/wu-tasks.js +0 -93
- package/dist/validators/wu-tasks.js.map +0 -1
- package/dist/work-classifier.d.ts +0 -95
- package/dist/work-classifier.d.ts.map +0 -1
- package/dist/work-classifier.js +0 -408
- package/dist/work-classifier.js.map +0 -1
- package/dist/worktree-ownership.d.ts +0 -51
- package/dist/worktree-ownership.d.ts.map +0 -1
- package/dist/worktree-ownership.js +0 -77
- package/dist/worktree-ownership.js.map +0 -1
- package/dist/worktree-scanner.d.ts +0 -118
- package/dist/worktree-scanner.d.ts.map +0 -1
- package/dist/worktree-scanner.js +0 -171
- package/dist/worktree-scanner.js.map +0 -1
- package/dist/worktree-symlink.d.ts +0 -86
- package/dist/worktree-symlink.d.ts.map +0 -1
- package/dist/worktree-symlink.js +0 -349
- package/dist/worktree-symlink.js.map +0 -1
- package/dist/wu-backlog-updater.d.ts +0 -10
- package/dist/wu-backlog-updater.d.ts.map +0 -1
- package/dist/wu-backlog-updater.js +0 -40
- package/dist/wu-backlog-updater.js.map +0 -1
- package/dist/wu-checkpoint.d.ts +0 -110
- package/dist/wu-checkpoint.d.ts.map +0 -1
- package/dist/wu-checkpoint.js +0 -236
- package/dist/wu-checkpoint.js.map +0 -1
- package/dist/wu-claim-helpers.d.ts +0 -21
- package/dist/wu-claim-helpers.d.ts.map +0 -1
- package/dist/wu-claim-helpers.js +0 -66
- package/dist/wu-claim-helpers.js.map +0 -1
- package/dist/wu-claim-resume.d.ts +0 -106
- package/dist/wu-claim-resume.d.ts.map +0 -1
- package/dist/wu-claim-resume.js +0 -279
- package/dist/wu-claim-resume.js.map +0 -1
- package/dist/wu-cli-constants.d.ts +0 -425
- package/dist/wu-cli-constants.d.ts.map +0 -1
- package/dist/wu-cli-constants.js +0 -430
- package/dist/wu-cli-constants.js.map +0 -1
- package/dist/wu-consistency-checker.d.ts +0 -189
- package/dist/wu-consistency-checker.d.ts.map +0 -1
- package/dist/wu-consistency-checker.js +0 -1026
- package/dist/wu-consistency-checker.js.map +0 -1
- package/dist/wu-constants.d.ts +0 -29
- package/dist/wu-constants.d.ts.map +0 -1
- package/dist/wu-constants.js +0 -37
- package/dist/wu-constants.js.map +0 -1
- package/dist/wu-context-constants.d.ts +0 -270
- package/dist/wu-context-constants.d.ts.map +0 -1
- package/dist/wu-context-constants.js +0 -267
- package/dist/wu-context-constants.js.map +0 -1
- package/dist/wu-create-defaults.d.ts +0 -11
- package/dist/wu-create-defaults.d.ts.map +0 -1
- package/dist/wu-create-defaults.js +0 -13
- package/dist/wu-create-defaults.js.map +0 -1
- package/dist/wu-create-validators.d.ts +0 -89
- package/dist/wu-create-validators.d.ts.map +0 -1
- package/dist/wu-create-validators.js +0 -215
- package/dist/wu-create-validators.js.map +0 -1
- package/dist/wu-domain-constants.d.ts +0 -295
- package/dist/wu-domain-constants.d.ts.map +0 -1
- package/dist/wu-domain-constants.js +0 -399
- package/dist/wu-domain-constants.js.map +0 -1
- package/dist/wu-done-branch-only.d.ts +0 -120
- package/dist/wu-done-branch-only.d.ts.map +0 -1
- package/dist/wu-done-branch-only.js +0 -412
- package/dist/wu-done-branch-only.js.map +0 -1
- package/dist/wu-done-branch-utils.d.ts +0 -8
- package/dist/wu-done-branch-utils.d.ts.map +0 -1
- package/dist/wu-done-branch-utils.js +0 -34
- package/dist/wu-done-branch-utils.js.map +0 -1
- package/dist/wu-done-cleanup.d.ts +0 -6
- package/dist/wu-done-cleanup.d.ts.map +0 -1
- package/dist/wu-done-cleanup.js +0 -161
- package/dist/wu-done-cleanup.js.map +0 -1
- package/dist/wu-done-concurrent-merge.d.ts +0 -103
- package/dist/wu-done-concurrent-merge.d.ts.map +0 -1
- package/dist/wu-done-concurrent-merge.js +0 -375
- package/dist/wu-done-concurrent-merge.js.map +0 -1
- package/dist/wu-done-docs-generate.d.ts +0 -72
- package/dist/wu-done-docs-generate.d.ts.map +0 -1
- package/dist/wu-done-docs-generate.js +0 -129
- package/dist/wu-done-docs-generate.js.map +0 -1
- package/dist/wu-done-docs-only.d.ts +0 -16
- package/dist/wu-done-docs-only.d.ts.map +0 -1
- package/dist/wu-done-docs-only.js +0 -68
- package/dist/wu-done-docs-only.js.map +0 -1
- package/dist/wu-done-errors.d.ts +0 -13
- package/dist/wu-done-errors.d.ts.map +0 -1
- package/dist/wu-done-errors.js +0 -27
- package/dist/wu-done-errors.js.map +0 -1
- package/dist/wu-done-initiative-sync.d.ts +0 -13
- package/dist/wu-done-initiative-sync.d.ts.map +0 -1
- package/dist/wu-done-initiative-sync.js +0 -235
- package/dist/wu-done-initiative-sync.js.map +0 -1
- package/dist/wu-done-inputs.d.ts +0 -10
- package/dist/wu-done-inputs.d.ts.map +0 -1
- package/dist/wu-done-inputs.js +0 -55
- package/dist/wu-done-inputs.js.map +0 -1
- package/dist/wu-done-machine.d.ts +0 -175
- package/dist/wu-done-machine.d.ts.map +0 -1
- package/dist/wu-done-machine.js +0 -227
- package/dist/wu-done-machine.js.map +0 -1
- package/dist/wu-done-merged-worktree.d.ts +0 -65
- package/dist/wu-done-merged-worktree.d.ts.map +0 -1
- package/dist/wu-done-merged-worktree.js +0 -197
- package/dist/wu-done-merged-worktree.js.map +0 -1
- package/dist/wu-done-messages.d.ts +0 -120
- package/dist/wu-done-messages.d.ts.map +0 -1
- package/dist/wu-done-messages.js +0 -191
- package/dist/wu-done-messages.js.map +0 -1
- package/dist/wu-done-metadata.d.ts +0 -123
- package/dist/wu-done-metadata.d.ts.map +0 -1
- package/dist/wu-done-metadata.js +0 -240
- package/dist/wu-done-metadata.js.map +0 -1
- package/dist/wu-done-paths.d.ts +0 -87
- package/dist/wu-done-paths.d.ts.map +0 -1
- package/dist/wu-done-paths.js +0 -263
- package/dist/wu-done-paths.js.map +0 -1
- package/dist/wu-done-pr.d.ts +0 -76
- package/dist/wu-done-pr.d.ts.map +0 -1
- package/dist/wu-done-pr.js +0 -189
- package/dist/wu-done-pr.js.map +0 -1
- package/dist/wu-done-preflight.d.ts +0 -65
- package/dist/wu-done-preflight.d.ts.map +0 -1
- package/dist/wu-done-preflight.js +0 -205
- package/dist/wu-done-preflight.js.map +0 -1
- package/dist/wu-done-retry-helpers.d.ts +0 -75
- package/dist/wu-done-retry-helpers.d.ts.map +0 -1
- package/dist/wu-done-retry-helpers.js +0 -175
- package/dist/wu-done-retry-helpers.js.map +0 -1
- package/dist/wu-done-ui.d.ts +0 -29
- package/dist/wu-done-ui.d.ts.map +0 -1
- package/dist/wu-done-ui.js +0 -74
- package/dist/wu-done-ui.js.map +0 -1
- package/dist/wu-done-validation.d.ts +0 -128
- package/dist/wu-done-validation.d.ts.map +0 -1
- package/dist/wu-done-validation.js +0 -530
- package/dist/wu-done-validation.js.map +0 -1
- package/dist/wu-done-validators.d.ts +0 -16
- package/dist/wu-done-validators.d.ts.map +0 -1
- package/dist/wu-done-validators.js +0 -16
- package/dist/wu-done-validators.js.map +0 -1
- package/dist/wu-done-worktree-services.d.ts +0 -174
- package/dist/wu-done-worktree-services.d.ts.map +0 -1
- package/dist/wu-done-worktree-services.js +0 -274
- package/dist/wu-done-worktree-services.js.map +0 -1
- package/dist/wu-done-worktree.d.ts +0 -229
- package/dist/wu-done-worktree.d.ts.map +0 -1
- package/dist/wu-done-worktree.js +0 -1290
- package/dist/wu-done-worktree.js.map +0 -1
- package/dist/wu-events-cleanup.d.ts +0 -131
- package/dist/wu-events-cleanup.d.ts.map +0 -1
- package/dist/wu-events-cleanup.js +0 -404
- package/dist/wu-events-cleanup.js.map +0 -1
- package/dist/wu-git-constants.d.ts +0 -176
- package/dist/wu-git-constants.d.ts.map +0 -1
- package/dist/wu-git-constants.js +0 -178
- package/dist/wu-git-constants.js.map +0 -1
- package/dist/wu-helpers.d.ts +0 -133
- package/dist/wu-helpers.d.ts.map +0 -1
- package/dist/wu-helpers.js +0 -268
- package/dist/wu-helpers.js.map +0 -1
- package/dist/wu-id-generator.d.ts +0 -51
- package/dist/wu-id-generator.d.ts.map +0 -1
- package/dist/wu-id-generator.js +0 -110
- package/dist/wu-id-generator.js.map +0 -1
- package/dist/wu-lint.d.ts +0 -191
- package/dist/wu-lint.d.ts.map +0 -1
- package/dist/wu-lint.js +0 -338
- package/dist/wu-lint.js.map +0 -1
- package/dist/wu-list.d.ts +0 -76
- package/dist/wu-list.d.ts.map +0 -1
- package/dist/wu-list.js +0 -181
- package/dist/wu-list.js.map +0 -1
- package/dist/wu-paths-constants.d.ts +0 -264
- package/dist/wu-paths-constants.d.ts.map +0 -1
- package/dist/wu-paths-constants.js +0 -272
- package/dist/wu-paths-constants.js.map +0 -1
- package/dist/wu-paths.d.ts +0 -211
- package/dist/wu-paths.d.ts.map +0 -1
- package/dist/wu-paths.js +0 -223
- package/dist/wu-paths.js.map +0 -1
- package/dist/wu-preflight-validators.d.ts +0 -64
- package/dist/wu-preflight-validators.d.ts.map +0 -1
- package/dist/wu-preflight-validators.js +0 -277
- package/dist/wu-preflight-validators.js.map +0 -1
- package/dist/wu-recovery.d.ts +0 -220
- package/dist/wu-recovery.d.ts.map +0 -1
- package/dist/wu-recovery.js +0 -470
- package/dist/wu-recovery.js.map +0 -1
- package/dist/wu-repair-core.d.ts +0 -150
- package/dist/wu-repair-core.d.ts.map +0 -1
- package/dist/wu-repair-core.js +0 -718
- package/dist/wu-repair-core.js.map +0 -1
- package/dist/wu-rules-core.d.ts +0 -95
- package/dist/wu-rules-core.d.ts.map +0 -1
- package/dist/wu-rules-core.js +0 -401
- package/dist/wu-rules-core.js.map +0 -1
- package/dist/wu-rules-engine.d.ts +0 -29
- package/dist/wu-rules-engine.d.ts.map +0 -1
- package/dist/wu-rules-engine.js +0 -61
- package/dist/wu-rules-engine.js.map +0 -1
- package/dist/wu-rules-resolvers.d.ts +0 -19
- package/dist/wu-rules-resolvers.d.ts.map +0 -1
- package/dist/wu-rules-resolvers.js +0 -210
- package/dist/wu-rules-resolvers.js.map +0 -1
- package/dist/wu-schema-normalization.d.ts +0 -18
- package/dist/wu-schema-normalization.d.ts.map +0 -1
- package/dist/wu-schema-normalization.js +0 -87
- package/dist/wu-schema-normalization.js.map +0 -1
- package/dist/wu-schema.d.ts +0 -772
- package/dist/wu-schema.d.ts.map +0 -1
- package/dist/wu-schema.js +0 -897
- package/dist/wu-schema.js.map +0 -1
- package/dist/wu-spawn-context.d.ts +0 -66
- package/dist/wu-spawn-context.d.ts.map +0 -1
- package/dist/wu-spawn-context.js +0 -185
- package/dist/wu-spawn-context.js.map +0 -1
- package/dist/wu-spawn-helpers.d.ts +0 -110
- package/dist/wu-spawn-helpers.d.ts.map +0 -1
- package/dist/wu-spawn-helpers.js +0 -276
- package/dist/wu-spawn-helpers.js.map +0 -1
- package/dist/wu-spawn-skills.d.ts +0 -39
- package/dist/wu-spawn-skills.d.ts.map +0 -1
- package/dist/wu-spawn-skills.js +0 -214
- package/dist/wu-spawn-skills.js.map +0 -1
- package/dist/wu-spawn.d.ts +0 -394
- package/dist/wu-spawn.d.ts.map +0 -1
- package/dist/wu-spawn.js +0 -1977
- package/dist/wu-spawn.js.map +0 -1
- package/dist/wu-state-schema.d.ts +0 -237
- package/dist/wu-state-schema.d.ts.map +0 -1
- package/dist/wu-state-schema.js +0 -172
- package/dist/wu-state-schema.js.map +0 -1
- package/dist/wu-state-store.d.ts +0 -275
- package/dist/wu-state-store.d.ts.map +0 -1
- package/dist/wu-state-store.js +0 -1057
- package/dist/wu-state-store.js.map +0 -1
- package/dist/wu-status-transition.d.ts +0 -58
- package/dist/wu-status-transition.d.ts.map +0 -1
- package/dist/wu-status-transition.js +0 -370
- package/dist/wu-status-transition.js.map +0 -1
- package/dist/wu-status-updater.d.ts +0 -18
- package/dist/wu-status-updater.d.ts.map +0 -1
- package/dist/wu-status-updater.js +0 -123
- package/dist/wu-status-updater.js.map +0 -1
- package/dist/wu-statuses.d.ts +0 -154
- package/dist/wu-statuses.d.ts.map +0 -1
- package/dist/wu-statuses.js +0 -176
- package/dist/wu-statuses.js.map +0 -1
- package/dist/wu-transaction-collectors.d.ts +0 -116
- package/dist/wu-transaction-collectors.d.ts.map +0 -1
- package/dist/wu-transaction-collectors.js +0 -273
- package/dist/wu-transaction-collectors.js.map +0 -1
- package/dist/wu-transaction.d.ts +0 -172
- package/dist/wu-transaction.d.ts.map +0 -1
- package/dist/wu-transaction.js +0 -288
- package/dist/wu-transaction.js.map +0 -1
- package/dist/wu-type-helpers.d.ts +0 -26
- package/dist/wu-type-helpers.d.ts.map +0 -1
- package/dist/wu-type-helpers.js +0 -45
- package/dist/wu-type-helpers.js.map +0 -1
- package/dist/wu-ui-constants.d.ts +0 -235
- package/dist/wu-ui-constants.d.ts.map +0 -1
- package/dist/wu-ui-constants.js +0 -237
- package/dist/wu-ui-constants.js.map +0 -1
- package/dist/wu-validation-constants.d.ts +0 -61
- package/dist/wu-validation-constants.d.ts.map +0 -1
- package/dist/wu-validation-constants.js +0 -69
- package/dist/wu-validation-constants.js.map +0 -1
- package/dist/wu-validation.d.ts +0 -121
- package/dist/wu-validation.d.ts.map +0 -1
- package/dist/wu-validation.js +0 -266
- package/dist/wu-validation.js.map +0 -1
- package/dist/wu-validator.d.ts +0 -128
- package/dist/wu-validator.d.ts.map +0 -1
- package/dist/wu-validator.js +0 -445
- package/dist/wu-validator.js.map +0 -1
- package/dist/wu-yaml-fixer.d.ts +0 -74
- package/dist/wu-yaml-fixer.d.ts.map +0 -1
- package/dist/wu-yaml-fixer.js +0 -273
- package/dist/wu-yaml-fixer.js.map +0 -1
- package/dist/wu-yaml.d.ts +0 -110
- package/dist/wu-yaml.d.ts.map +0 -1
- package/dist/wu-yaml.js +0 -300
- package/dist/wu-yaml.js.map +0 -1
package/dist/lane-checker.js
DELETED
|
@@ -1,743 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// Copyright (c) 2026 Hellmai Ltd
|
|
3
|
-
// SPDX-License-Identifier: AGPL-3.0-only
|
|
4
|
-
/**
|
|
5
|
-
* Lane Occupancy Checker
|
|
6
|
-
*
|
|
7
|
-
* Enforces one-WU-per-lane rule by checking status.md for active WUs in a given lane.
|
|
8
|
-
* Used by wu-claim.ts and wu-unblock.ts to prevent WIP violations.
|
|
9
|
-
*/
|
|
10
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
11
|
-
import path from 'node:path';
|
|
12
|
-
import { parseYAML } from './wu-yaml.js';
|
|
13
|
-
import { getSubLanesForParent } from './lane-inference.js';
|
|
14
|
-
import { createError, ErrorCodes } from './error-handler.js';
|
|
15
|
-
import { isInProgressHeader, WU_LINK_PATTERN } from './constants/backlog-patterns.js';
|
|
16
|
-
import { CONFIG_FILES, STRING_LITERALS } from './wu-constants.js';
|
|
17
|
-
import { WU_PATHS } from './wu-paths.js';
|
|
18
|
-
import { findProjectRoot } from './lumenflow-config.js';
|
|
19
|
-
// Re-export for test access
|
|
20
|
-
export { getSubLanesForParent };
|
|
21
|
-
/** Log prefix for lane-checker messages */
|
|
22
|
-
const PREFIX = '[lane-checker]';
|
|
23
|
-
/** Status.md marker for empty In Progress section */
|
|
24
|
-
const NO_ITEMS_MARKER = 'No items currently in progress';
|
|
25
|
-
/**
|
|
26
|
-
* Extract parent lane from sub-lane or parent-only format
|
|
27
|
-
* @param {string} lane - Lane name (e.g., "Operations: Tooling" or "Operations")
|
|
28
|
-
* @returns {string} Parent lane name
|
|
29
|
-
*/
|
|
30
|
-
export function extractParent(lane) {
|
|
31
|
-
const trimmed = lane.trim();
|
|
32
|
-
const colonIndex = trimmed.indexOf(':');
|
|
33
|
-
if (colonIndex === -1) {
|
|
34
|
-
// Parent-only format
|
|
35
|
-
return trimmed;
|
|
36
|
-
}
|
|
37
|
-
// Sub-lane format: extract parent before colon
|
|
38
|
-
return trimmed.substring(0, colonIndex).trim();
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* WU-1308: Check if lane-inference.yaml file exists
|
|
42
|
-
* @returns {boolean} True if the file exists
|
|
43
|
-
*/
|
|
44
|
-
function laneInferenceFileExists() {
|
|
45
|
-
const projectRoot = findProjectRoot();
|
|
46
|
-
const taxonomyPath = path.join(projectRoot, CONFIG_FILES.LANE_INFERENCE);
|
|
47
|
-
return existsSync(taxonomyPath);
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Check if a parent lane has sub-lane taxonomy defined
|
|
51
|
-
* @param {string} parent - Parent lane name
|
|
52
|
-
* @returns {boolean} True if parent has sub-lanes in lane-inference config
|
|
53
|
-
*/
|
|
54
|
-
function hasSubLaneTaxonomy(parent) {
|
|
55
|
-
const projectRoot = findProjectRoot();
|
|
56
|
-
const taxonomyPath = path.join(projectRoot, CONFIG_FILES.LANE_INFERENCE);
|
|
57
|
-
if (!existsSync(taxonomyPath)) {
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
try {
|
|
61
|
-
const taxonomyContent = readFileSync(taxonomyPath, { encoding: 'utf-8' });
|
|
62
|
-
const taxonomy = parseYAML(taxonomyContent);
|
|
63
|
-
// Check if parent exists as top-level key in taxonomy
|
|
64
|
-
const normalizedParent = parent.trim();
|
|
65
|
-
return Object.keys(taxonomy).some((key) => key.toLowerCase().trim() === normalizedParent.toLowerCase());
|
|
66
|
-
}
|
|
67
|
-
catch {
|
|
68
|
-
return false;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Check if a sub-lane exists for a given parent in lane-inference config
|
|
73
|
-
* @param {string} parent - Parent lane name
|
|
74
|
-
* @param {string} subdomain - Sub-lane name
|
|
75
|
-
* @returns {boolean} True if sub-lane exists
|
|
76
|
-
*/
|
|
77
|
-
function isValidSubLane(parent, subdomain) {
|
|
78
|
-
const projectRoot = findProjectRoot();
|
|
79
|
-
const taxonomyPath = path.join(projectRoot, CONFIG_FILES.LANE_INFERENCE);
|
|
80
|
-
if (!existsSync(taxonomyPath)) {
|
|
81
|
-
return false;
|
|
82
|
-
}
|
|
83
|
-
try {
|
|
84
|
-
const taxonomyContent = readFileSync(taxonomyPath, { encoding: 'utf-8' });
|
|
85
|
-
const taxonomy = parseYAML(taxonomyContent);
|
|
86
|
-
// Find parent key (case-insensitive)
|
|
87
|
-
const normalizedParent = parent.trim().toLowerCase();
|
|
88
|
-
const parentKey = Object.keys(taxonomy).find((key) => key.toLowerCase().trim() === normalizedParent);
|
|
89
|
-
if (!parentKey) {
|
|
90
|
-
return false;
|
|
91
|
-
}
|
|
92
|
-
// Check if subdomain exists under parent
|
|
93
|
-
const subLanes = taxonomy[parentKey];
|
|
94
|
-
if (!subLanes || typeof subLanes !== 'object') {
|
|
95
|
-
return false;
|
|
96
|
-
}
|
|
97
|
-
// Exact match on subdomain (case-sensitive per Codex spec)
|
|
98
|
-
return Object.keys(subLanes).includes(subdomain.trim());
|
|
99
|
-
}
|
|
100
|
-
catch {
|
|
101
|
-
return false;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Count occurrences of a character in a string
|
|
106
|
-
* @param {string} str - String to search
|
|
107
|
-
* @param {string} char - Character to count
|
|
108
|
-
* @returns {number} Number of occurrences
|
|
109
|
-
*/
|
|
110
|
-
function countChar(str, char) {
|
|
111
|
-
let count = 0;
|
|
112
|
-
for (const c of str) {
|
|
113
|
-
if (c === char)
|
|
114
|
-
count++;
|
|
115
|
-
}
|
|
116
|
-
return count;
|
|
117
|
-
}
|
|
118
|
-
/** Lane format separator character */
|
|
119
|
-
const LANE_SEPARATOR = ':';
|
|
120
|
-
/** Space character for format validation */
|
|
121
|
-
const SPACE = ' ';
|
|
122
|
-
/**
|
|
123
|
-
* Validation mode options
|
|
124
|
-
* @typedef {Object} ValidateLaneOptions
|
|
125
|
-
* @property {boolean} [strict=true] - When true, throws error for parent-only lanes with taxonomy.
|
|
126
|
-
* When false, only warns (for existing WU validation).
|
|
127
|
-
*/
|
|
128
|
-
/**
|
|
129
|
-
* WU-1197: Validate colon format in lane string
|
|
130
|
-
* @throws {LumenflowError} If format is invalid
|
|
131
|
-
*/
|
|
132
|
-
function validateColonFormat(lane, trimmed, colonIndex) {
|
|
133
|
-
// Check for space before colon
|
|
134
|
-
if (colonIndex > 0 && trimmed[colonIndex - 1] === SPACE) {
|
|
135
|
-
throw createError(ErrorCodes.INVALID_LANE, `Invalid lane format: "${lane}" has space before colon. Expected format: "Parent: Subdomain" (space AFTER colon only)`, { lane });
|
|
136
|
-
}
|
|
137
|
-
// Check for space after colon
|
|
138
|
-
if (colonIndex + 1 >= trimmed.length || trimmed[colonIndex + 1] !== SPACE) {
|
|
139
|
-
throw createError(ErrorCodes.INVALID_LANE, `Invalid lane format: "${lane}" is missing space after colon. Expected format: "Parent: Subdomain"`, { lane });
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* WU-1197: Validate sub-lane format (Parent: Subdomain)
|
|
144
|
-
* @throws {LumenflowError} If validation fails
|
|
145
|
-
*/
|
|
146
|
-
function validateSubLaneFormat(lane, trimmed, colonIndex, configPath) {
|
|
147
|
-
validateColonFormat(lane, trimmed, colonIndex);
|
|
148
|
-
// Extract parent and subdomain (colonIndex + 2 = skip colon and space)
|
|
149
|
-
const parent = trimmed.substring(0, colonIndex).trim();
|
|
150
|
-
const subdomain = trimmed.substring(colonIndex + LANE_SEPARATOR.length + SPACE.length).trim();
|
|
151
|
-
// Validate parent exists in config
|
|
152
|
-
if (!isValidParentLane(parent, configPath)) {
|
|
153
|
-
throw createError(ErrorCodes.INVALID_LANE, `Unknown parent lane: "${parent}". Check ${CONFIG_FILES.LUMENFLOW_CONFIG} for valid lanes.`, { parent, lane });
|
|
154
|
-
}
|
|
155
|
-
// WU-1308: Check if lane-inference file exists before validating sub-lanes
|
|
156
|
-
// This provides a clear error message when the file is missing
|
|
157
|
-
if (!laneInferenceFileExists()) {
|
|
158
|
-
throw createError(ErrorCodes.FILE_NOT_FOUND, `Sub-lane validation requires ${CONFIG_FILES.LANE_INFERENCE} which is missing.\n\n` +
|
|
159
|
-
`The file "${CONFIG_FILES.LANE_INFERENCE}" defines the lane taxonomy for sub-lane validation.\n\n` +
|
|
160
|
-
`To fix this:\n` +
|
|
161
|
-
` 1. Generate a lane taxonomy from your codebase:\n` +
|
|
162
|
-
` pnpm lane:suggest --output ${CONFIG_FILES.LANE_INFERENCE}\n\n` +
|
|
163
|
-
` 2. Or copy from an example project and customize.\n\n` +
|
|
164
|
-
`See: LUMENFLOW.md "Setup Notes" section for details.`, { lane, parent, subdomain, missingFile: CONFIG_FILES.LANE_INFERENCE });
|
|
165
|
-
}
|
|
166
|
-
// Validate sub-lane exists in taxonomy
|
|
167
|
-
if (hasSubLaneTaxonomy(parent)) {
|
|
168
|
-
validateSubLaneInTaxonomy(parent, subdomain);
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
// Parent has no taxonomy - reject sub-lane format
|
|
172
|
-
throw createError(ErrorCodes.INVALID_LANE, `Parent lane "${parent}" does not support sub-lanes. Use parent-only format or extend ${CONFIG_FILES.LANE_INFERENCE}.`, { parent, lane });
|
|
173
|
-
}
|
|
174
|
-
return { valid: true, parent, error: null };
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* WU-1197: Validate that sub-lane exists in taxonomy
|
|
178
|
-
* @throws {LumenflowError} If sub-lane is not valid
|
|
179
|
-
*/
|
|
180
|
-
function validateSubLaneInTaxonomy(parent, subdomain) {
|
|
181
|
-
if (!isValidSubLane(parent, subdomain)) {
|
|
182
|
-
const validSubLanes = getSubLanesForParent(parent);
|
|
183
|
-
throw createError(ErrorCodes.INVALID_LANE, `Unknown sub-lane: "${subdomain}" for parent lane "${parent}".\n\n` +
|
|
184
|
-
`Valid sub-lanes: ${validSubLanes.join(', ')}`, { parent, subdomain, validSubLanes });
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* WU-1197: Validate parent-only lane format
|
|
189
|
-
* @throws {LumenflowError} If validation fails (in strict mode)
|
|
190
|
-
*/
|
|
191
|
-
function validateParentOnlyFormat(trimmed, configPath, strict) {
|
|
192
|
-
if (!isValidParentLane(trimmed, configPath)) {
|
|
193
|
-
throw createError(ErrorCodes.INVALID_LANE, `Unknown parent lane: "${trimmed}". Check ${CONFIG_FILES.LUMENFLOW_CONFIG} for valid lanes.`, { lane: trimmed });
|
|
194
|
-
}
|
|
195
|
-
// Block if parent has sub-lane taxonomy (sub-lane required)
|
|
196
|
-
if (hasSubLaneTaxonomy(trimmed)) {
|
|
197
|
-
const validSubLanes = getSubLanesForParent(trimmed);
|
|
198
|
-
const message = `Parent-only lane "${trimmed}" blocked. Sub-lane required. ` +
|
|
199
|
-
`Valid: ${validSubLanes.join(', ')}. ` +
|
|
200
|
-
`Format: "${trimmed}: <sublane>"`;
|
|
201
|
-
if (strict) {
|
|
202
|
-
throw createError(ErrorCodes.INVALID_LANE, message, { lane: trimmed, validSubLanes });
|
|
203
|
-
}
|
|
204
|
-
// Non-strict mode: warn only for existing WU validation
|
|
205
|
-
console.warn(`${PREFIX} ⚠️ ${message}`);
|
|
206
|
-
}
|
|
207
|
-
return { valid: true, parent: trimmed, error: null };
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Validate lane format and parent existence
|
|
211
|
-
* @param {string} lane - Lane name (e.g., "Operations: Tooling" or "Operations")
|
|
212
|
-
* @param {string} configPath - Path to config file (optional, defaults to project root)
|
|
213
|
-
* @param {ValidateLaneOptions} options - Validation options
|
|
214
|
-
* @returns {{ valid: boolean, parent: string, error: string | null }}
|
|
215
|
-
*/
|
|
216
|
-
export function validateLaneFormat(lane, configPath = null, options = {}) {
|
|
217
|
-
const { strict = true } = options;
|
|
218
|
-
const trimmed = lane.trim();
|
|
219
|
-
// Check for multiple colons
|
|
220
|
-
const colonCount = countChar(trimmed, LANE_SEPARATOR);
|
|
221
|
-
if (colonCount > 1) {
|
|
222
|
-
throw createError(ErrorCodes.INVALID_LANE, `Invalid lane format: "${lane}" contains multiple colons. Expected format: "Parent: Subdomain" or "Parent"`, { lane });
|
|
223
|
-
}
|
|
224
|
-
const colonIndex = trimmed.indexOf(LANE_SEPARATOR);
|
|
225
|
-
const isSubLaneFormat = colonIndex !== -1;
|
|
226
|
-
if (isSubLaneFormat) {
|
|
227
|
-
return validateSubLaneFormat(lane, trimmed, colonIndex, configPath);
|
|
228
|
-
}
|
|
229
|
-
return validateParentOnlyFormat(trimmed, configPath, strict);
|
|
230
|
-
}
|
|
231
|
-
/**
|
|
232
|
-
* WU-1197: Extract lane names and parent lanes from config
|
|
233
|
-
* Handles flat array, definitions, and legacy nested formats
|
|
234
|
-
*/
|
|
235
|
-
function extractLanesForParentCheck(config) {
|
|
236
|
-
const allLanes = [];
|
|
237
|
-
const parentLanes = new Set();
|
|
238
|
-
if (!config.lanes) {
|
|
239
|
-
return { allLanes, parentLanes };
|
|
240
|
-
}
|
|
241
|
-
if (Array.isArray(config.lanes)) {
|
|
242
|
-
// Flat array format: lanes: [{name: "Core"}, {name: "CLI"}, ...]
|
|
243
|
-
allLanes.push(...config.lanes.map((l) => l.name));
|
|
244
|
-
return { allLanes, parentLanes };
|
|
245
|
-
}
|
|
246
|
-
// WU-1022: New format with lanes.definitions containing full "Parent: Sublane" names
|
|
247
|
-
if (config.lanes.definitions) {
|
|
248
|
-
for (const lane of config.lanes.definitions) {
|
|
249
|
-
allLanes.push(lane.name);
|
|
250
|
-
// Extract parent from full lane name for parent validation
|
|
251
|
-
const extracted = extractParent(lane.name);
|
|
252
|
-
parentLanes.add(extracted.toLowerCase().trim());
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
// Legacy nested format: lanes: {engineering: [...], business: [...]}
|
|
256
|
-
if (config.lanes.engineering) {
|
|
257
|
-
allLanes.push(...config.lanes.engineering.map((l) => l.name));
|
|
258
|
-
}
|
|
259
|
-
if (config.lanes.business) {
|
|
260
|
-
allLanes.push(...config.lanes.business.map((l) => l.name));
|
|
261
|
-
}
|
|
262
|
-
return { allLanes, parentLanes };
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* WU-1197: Resolve config path, defaulting to project root if not provided
|
|
266
|
-
*/
|
|
267
|
-
function resolveConfigPath(configPath) {
|
|
268
|
-
if (configPath) {
|
|
269
|
-
return configPath;
|
|
270
|
-
}
|
|
271
|
-
const projectRoot = findProjectRoot();
|
|
272
|
-
return path.join(projectRoot, CONFIG_FILES.LUMENFLOW_CONFIG);
|
|
273
|
-
}
|
|
274
|
-
/**
|
|
275
|
-
* Check if a parent lane exists in LumenFlow config
|
|
276
|
-
*
|
|
277
|
-
* WU-1022: Updated to support lanes.definitions with full "Parent: Sublane" format.
|
|
278
|
-
* When lanes.definitions exists, parent lanes are extracted from full lane names.
|
|
279
|
-
*
|
|
280
|
-
* @param {string} parent - Parent lane name to check
|
|
281
|
-
* @param {string} configPath - Path to config file (optional)
|
|
282
|
-
* @returns {boolean} True if parent lane exists
|
|
283
|
-
*/
|
|
284
|
-
function isValidParentLane(parent, configPath = null) {
|
|
285
|
-
const resolvedConfigPath = resolveConfigPath(configPath);
|
|
286
|
-
// Read and parse config
|
|
287
|
-
if (!existsSync(resolvedConfigPath)) {
|
|
288
|
-
throw createError(ErrorCodes.FILE_NOT_FOUND, `Config file not found: ${resolvedConfigPath}`, {
|
|
289
|
-
path: resolvedConfigPath,
|
|
290
|
-
});
|
|
291
|
-
}
|
|
292
|
-
const configContent = readFileSync(resolvedConfigPath, { encoding: 'utf-8' });
|
|
293
|
-
const config = parseYAML(configContent);
|
|
294
|
-
const { allLanes, parentLanes } = extractLanesForParentCheck(config);
|
|
295
|
-
const normalizedParent = parent.toLowerCase().trim();
|
|
296
|
-
// WU-1022: If we have extracted parent lanes (from full lane names), check against those
|
|
297
|
-
if (parentLanes.size > 0) {
|
|
298
|
-
return parentLanes.has(normalizedParent);
|
|
299
|
-
}
|
|
300
|
-
// Legacy: check against direct lane names
|
|
301
|
-
return allLanes.some((lane) => lane.toLowerCase().trim() === normalizedParent);
|
|
302
|
-
}
|
|
303
|
-
/** WU-1016: Default WIP limit when not specified in config */
|
|
304
|
-
const DEFAULT_WIP_LIMIT = 1;
|
|
305
|
-
/**
|
|
306
|
-
* WU-1016: Get WIP limit for a lane from config
|
|
307
|
-
*
|
|
308
|
-
* Reads the wip_limit field from .lumenflow.config.yaml for the specified lane.
|
|
309
|
-
* Returns DEFAULT_WIP_LIMIT (1) if the lane is not found or wip_limit is not specified.
|
|
310
|
-
*
|
|
311
|
-
* @param {string} lane - Lane name (e.g., "Core", "CLI")
|
|
312
|
-
* @param {GetWipLimitOptions} options - Options including configPath for testing
|
|
313
|
-
* @returns {number} The WIP limit for the lane (default: 1)
|
|
314
|
-
*/
|
|
315
|
-
export function getWipLimitForLane(lane, options = {}) {
|
|
316
|
-
// Determine config path
|
|
317
|
-
let resolvedConfigPath = options.configPath;
|
|
318
|
-
if (!resolvedConfigPath) {
|
|
319
|
-
const projectRoot = findProjectRoot();
|
|
320
|
-
resolvedConfigPath = path.join(projectRoot, CONFIG_FILES.LUMENFLOW_CONFIG);
|
|
321
|
-
}
|
|
322
|
-
// Check if config file exists
|
|
323
|
-
if (!existsSync(resolvedConfigPath)) {
|
|
324
|
-
return DEFAULT_WIP_LIMIT;
|
|
325
|
-
}
|
|
326
|
-
try {
|
|
327
|
-
const configContent = readFileSync(resolvedConfigPath, { encoding: 'utf-8' });
|
|
328
|
-
const config = parseYAML(configContent);
|
|
329
|
-
if (!config.lanes) {
|
|
330
|
-
return DEFAULT_WIP_LIMIT;
|
|
331
|
-
}
|
|
332
|
-
// Normalize lane name for case-insensitive comparison
|
|
333
|
-
const normalizedLane = lane.toLowerCase().trim();
|
|
334
|
-
// Extract all lanes with their wip_limit
|
|
335
|
-
let allLanes = [];
|
|
336
|
-
if (Array.isArray(config.lanes)) {
|
|
337
|
-
// Flat array format: lanes: [{name: "Core", wip_limit: 2}, ...]
|
|
338
|
-
allLanes = config.lanes;
|
|
339
|
-
}
|
|
340
|
-
else {
|
|
341
|
-
// New format with definitions
|
|
342
|
-
if (config.lanes.definitions) {
|
|
343
|
-
allLanes.push(...config.lanes.definitions);
|
|
344
|
-
}
|
|
345
|
-
// Legacy nested format: lanes: {engineering: [...], business: [...]}
|
|
346
|
-
if (config.lanes.engineering) {
|
|
347
|
-
allLanes.push(...config.lanes.engineering);
|
|
348
|
-
}
|
|
349
|
-
if (config.lanes.business) {
|
|
350
|
-
allLanes.push(...config.lanes.business);
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
// Find matching lane (case-insensitive)
|
|
354
|
-
const matchingLane = allLanes.find((l) => l.name.toLowerCase().trim() === normalizedLane);
|
|
355
|
-
if (!matchingLane) {
|
|
356
|
-
return DEFAULT_WIP_LIMIT;
|
|
357
|
-
}
|
|
358
|
-
// Return wip_limit if specified, otherwise default
|
|
359
|
-
return matchingLane.wip_limit ?? DEFAULT_WIP_LIMIT;
|
|
360
|
-
}
|
|
361
|
-
catch {
|
|
362
|
-
// If config parsing fails, return default
|
|
363
|
-
return DEFAULT_WIP_LIMIT;
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
/** WU-1325: Default lock policy when not specified in config */
|
|
367
|
-
const DEFAULT_LOCK_POLICY = 'all';
|
|
368
|
-
/**
|
|
369
|
-
* WU-1325: Get lock policy for a lane from config
|
|
370
|
-
*
|
|
371
|
-
* Reads the lock_policy field from .lumenflow.config.yaml for the specified lane.
|
|
372
|
-
* Returns DEFAULT_LOCK_POLICY ('all') if the lane is not found or lock_policy is not specified.
|
|
373
|
-
*
|
|
374
|
-
* Lock policies:
|
|
375
|
-
* - 'all' (default): Lock held through entire WU lifecycle (claim to done)
|
|
376
|
-
* - 'active': Lock released on block, re-acquired on unblock
|
|
377
|
-
* - 'none': No lock files created, WIP checking disabled for this lane
|
|
378
|
-
*
|
|
379
|
-
* @param {string} lane - Lane name (e.g., "Framework: Core", "Content: Documentation")
|
|
380
|
-
* @param {GetLockPolicyOptions} options - Options including configPath for testing
|
|
381
|
-
* @returns {LockPolicy} The lock policy for the lane (default: 'all')
|
|
382
|
-
*/
|
|
383
|
-
export function getLockPolicyForLane(lane, options = {}) {
|
|
384
|
-
// Determine config path
|
|
385
|
-
let resolvedConfigPath = options.configPath;
|
|
386
|
-
if (!resolvedConfigPath) {
|
|
387
|
-
const projectRoot = findProjectRoot();
|
|
388
|
-
resolvedConfigPath = path.join(projectRoot, CONFIG_FILES.LUMENFLOW_CONFIG);
|
|
389
|
-
}
|
|
390
|
-
// Check if config file exists
|
|
391
|
-
if (!existsSync(resolvedConfigPath)) {
|
|
392
|
-
return DEFAULT_LOCK_POLICY;
|
|
393
|
-
}
|
|
394
|
-
try {
|
|
395
|
-
const configContent = readFileSync(resolvedConfigPath, { encoding: 'utf-8' });
|
|
396
|
-
const config = parseYAML(configContent);
|
|
397
|
-
if (!config.lanes) {
|
|
398
|
-
return DEFAULT_LOCK_POLICY;
|
|
399
|
-
}
|
|
400
|
-
// Normalize lane name for case-insensitive comparison
|
|
401
|
-
const normalizedLane = lane.toLowerCase().trim();
|
|
402
|
-
// Extract all lanes with their lock_policy
|
|
403
|
-
let allLanes = [];
|
|
404
|
-
if (Array.isArray(config.lanes)) {
|
|
405
|
-
// Flat array format: lanes: [{name: "Core", lock_policy: "none"}, ...]
|
|
406
|
-
allLanes = config.lanes;
|
|
407
|
-
}
|
|
408
|
-
else {
|
|
409
|
-
// New format with definitions
|
|
410
|
-
if (config.lanes.definitions) {
|
|
411
|
-
allLanes.push(...config.lanes.definitions);
|
|
412
|
-
}
|
|
413
|
-
// Legacy nested format: lanes: {engineering: [...], business: [...]}
|
|
414
|
-
if (config.lanes.engineering) {
|
|
415
|
-
allLanes.push(...config.lanes.engineering);
|
|
416
|
-
}
|
|
417
|
-
if (config.lanes.business) {
|
|
418
|
-
allLanes.push(...config.lanes.business);
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
// Find matching lane (case-insensitive)
|
|
422
|
-
const matchingLane = allLanes.find((l) => l.name.toLowerCase().trim() === normalizedLane);
|
|
423
|
-
if (!matchingLane) {
|
|
424
|
-
return DEFAULT_LOCK_POLICY;
|
|
425
|
-
}
|
|
426
|
-
// Return lock_policy if specified and valid, otherwise default
|
|
427
|
-
const policy = matchingLane.lock_policy;
|
|
428
|
-
if (policy === 'all' || policy === 'active' || policy === 'none') {
|
|
429
|
-
return policy;
|
|
430
|
-
}
|
|
431
|
-
return DEFAULT_LOCK_POLICY;
|
|
432
|
-
}
|
|
433
|
-
catch {
|
|
434
|
-
// If config parsing fails, return default
|
|
435
|
-
return DEFAULT_LOCK_POLICY;
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
/** WU-1197: Section heading marker for H2 headings */
|
|
439
|
-
const SECTION_HEADING_PREFIX = '## ';
|
|
440
|
-
/**
|
|
441
|
-
* WU-1197: Create an empty lane result (no WUs in progress)
|
|
442
|
-
*/
|
|
443
|
-
function createEmptyLaneResult(wipLimit) {
|
|
444
|
-
return {
|
|
445
|
-
free: true,
|
|
446
|
-
occupiedBy: null,
|
|
447
|
-
error: null,
|
|
448
|
-
inProgressWUs: [],
|
|
449
|
-
wipLimit,
|
|
450
|
-
currentCount: 0,
|
|
451
|
-
};
|
|
452
|
-
}
|
|
453
|
-
/**
|
|
454
|
-
* WU-1197: Extract In Progress section from status.md lines
|
|
455
|
-
* @returns Section content or null if not found
|
|
456
|
-
*/
|
|
457
|
-
function extractInProgressSection(lines) {
|
|
458
|
-
const inProgressIdx = lines.findIndex((l) => isInProgressHeader(l));
|
|
459
|
-
if (inProgressIdx === -1) {
|
|
460
|
-
return { section: '', error: 'Could not find "## In Progress" section in status.md' };
|
|
461
|
-
}
|
|
462
|
-
// Find end of In Progress section (next ## heading or end of file)
|
|
463
|
-
let endIdx = lines
|
|
464
|
-
.slice(inProgressIdx + 1)
|
|
465
|
-
.findIndex((l) => l.startsWith(SECTION_HEADING_PREFIX));
|
|
466
|
-
if (endIdx === -1) {
|
|
467
|
-
endIdx = lines.length - inProgressIdx - 1;
|
|
468
|
-
}
|
|
469
|
-
else {
|
|
470
|
-
endIdx = inProgressIdx + 1 + endIdx;
|
|
471
|
-
}
|
|
472
|
-
const section = lines.slice(inProgressIdx + 1, endIdx).join(STRING_LITERALS.NEWLINE);
|
|
473
|
-
return { section, error: null };
|
|
474
|
-
}
|
|
475
|
-
/** WU-1324: Blocked section header patterns */
|
|
476
|
-
const BLOCKED_HEADERS = ['## blocked', '## ⛔ blocked'];
|
|
477
|
-
/**
|
|
478
|
-
* WU-1324: Check if a line matches a Blocked section header.
|
|
479
|
-
* @param {string} line - Line to check (will be trimmed and lowercased)
|
|
480
|
-
* @returns {boolean} True if line is a Blocked header
|
|
481
|
-
*/
|
|
482
|
-
function isBlockedHeader(line) {
|
|
483
|
-
const normalized = line.trim().toLowerCase();
|
|
484
|
-
return BLOCKED_HEADERS.some((header) => normalized === header || normalized.startsWith(header));
|
|
485
|
-
}
|
|
486
|
-
/**
|
|
487
|
-
* WU-1324: Extract Blocked section from status.md lines
|
|
488
|
-
* @returns Section content (may be empty if section doesn't exist)
|
|
489
|
-
*/
|
|
490
|
-
function extractBlockedSection(lines) {
|
|
491
|
-
const blockedIdx = lines.findIndex((l) => isBlockedHeader(l));
|
|
492
|
-
if (blockedIdx === -1) {
|
|
493
|
-
// Blocked section doesn't exist - return empty
|
|
494
|
-
return { section: '' };
|
|
495
|
-
}
|
|
496
|
-
// Find end of Blocked section (next ## heading or end of file)
|
|
497
|
-
let endIdx = lines.slice(blockedIdx + 1).findIndex((l) => l.startsWith(SECTION_HEADING_PREFIX));
|
|
498
|
-
if (endIdx === -1) {
|
|
499
|
-
endIdx = lines.length - blockedIdx - 1;
|
|
500
|
-
}
|
|
501
|
-
else {
|
|
502
|
-
endIdx = blockedIdx + 1 + endIdx;
|
|
503
|
-
}
|
|
504
|
-
const section = lines.slice(blockedIdx + 1, endIdx).join(STRING_LITERALS.NEWLINE);
|
|
505
|
-
return { section };
|
|
506
|
-
}
|
|
507
|
-
/**
|
|
508
|
-
* WU-1197: Check if a WU belongs to the target lane
|
|
509
|
-
* @returns The WU ID if it matches the target lane, null otherwise
|
|
510
|
-
*/
|
|
511
|
-
function checkWuLaneMatch(activeWuid, wuid, projectRoot, targetLane) {
|
|
512
|
-
// Skip if it's the same WU we're trying to claim
|
|
513
|
-
if (activeWuid === wuid) {
|
|
514
|
-
return null;
|
|
515
|
-
}
|
|
516
|
-
const wuPath = path.join(projectRoot, WU_PATHS.WU(activeWuid));
|
|
517
|
-
if (!existsSync(wuPath)) {
|
|
518
|
-
console.warn(`${PREFIX} Warning: ${activeWuid} referenced in status.md but ${wuPath} not found`);
|
|
519
|
-
return null;
|
|
520
|
-
}
|
|
521
|
-
try {
|
|
522
|
-
const wuContent = readFileSync(wuPath, { encoding: 'utf-8' });
|
|
523
|
-
const wuDoc = parseYAML(wuContent);
|
|
524
|
-
if (!wuDoc || !wuDoc.lane) {
|
|
525
|
-
console.warn(`${PREFIX} Warning: ${activeWuid} has no lane field`);
|
|
526
|
-
return null;
|
|
527
|
-
}
|
|
528
|
-
// Normalize lane names for comparison (case-insensitive, trim whitespace)
|
|
529
|
-
const activeLane = wuDoc.lane.toString().trim().toLowerCase();
|
|
530
|
-
if (activeLane === targetLane) {
|
|
531
|
-
return activeWuid;
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
catch (e) {
|
|
535
|
-
const errMessage = e instanceof Error ? e.message : String(e);
|
|
536
|
-
console.warn(`${PREFIX} Warning: Failed to parse ${activeWuid} YAML: ${errMessage}`);
|
|
537
|
-
}
|
|
538
|
-
return null;
|
|
539
|
-
}
|
|
540
|
-
/**
|
|
541
|
-
* WU-1197: Collect WUs in the target lane from matched WU links
|
|
542
|
-
*/
|
|
543
|
-
function collectInProgressWUsForLane(matches, wuid, projectRoot, targetLane) {
|
|
544
|
-
const inProgressWUs = [];
|
|
545
|
-
for (const match of matches) {
|
|
546
|
-
const activeWuid = match[1]; // e.g., "WU-334"
|
|
547
|
-
if (!activeWuid) {
|
|
548
|
-
continue;
|
|
549
|
-
}
|
|
550
|
-
const matchedWu = checkWuLaneMatch(activeWuid, wuid, projectRoot, targetLane);
|
|
551
|
-
if (matchedWu) {
|
|
552
|
-
inProgressWUs.push(matchedWu);
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
return inProgressWUs;
|
|
556
|
-
}
|
|
557
|
-
/**
|
|
558
|
-
* WU-1324: Extract WU IDs from a section's WU links and filter by target lane
|
|
559
|
-
* @param section - Section content from status.md
|
|
560
|
-
* @param wuid - WU ID being claimed (excluded from results)
|
|
561
|
-
* @param projectRoot - Project root path
|
|
562
|
-
* @param targetLane - Target lane name (normalized lowercase)
|
|
563
|
-
* @returns Array of WU IDs in the target lane
|
|
564
|
-
*/
|
|
565
|
-
function extractWUsFromSection(section, wuid, projectRoot, targetLane) {
|
|
566
|
-
if (!section || section.includes(NO_ITEMS_MARKER)) {
|
|
567
|
-
return [];
|
|
568
|
-
}
|
|
569
|
-
// Extract WU IDs from links like [WU-334 — Title](wu/WU-334.yaml)
|
|
570
|
-
WU_LINK_PATTERN.lastIndex = 0; // Reset global regex state
|
|
571
|
-
const matches = [...section.matchAll(WU_LINK_PATTERN)];
|
|
572
|
-
if (matches.length === 0) {
|
|
573
|
-
return [];
|
|
574
|
-
}
|
|
575
|
-
return collectInProgressWUsForLane(matches, wuid, projectRoot, targetLane);
|
|
576
|
-
}
|
|
577
|
-
/**
|
|
578
|
-
* Check if a lane is free (WU count is below wip_limit)
|
|
579
|
-
*
|
|
580
|
-
* WU-1016: Now respects configurable wip_limit per lane from .lumenflow.config.yaml.
|
|
581
|
-
* Lane is considered "free" if current WU count < wip_limit.
|
|
582
|
-
* Default wip_limit is 1 if not specified in config (backward compatible).
|
|
583
|
-
*
|
|
584
|
-
* WU-1324: Now respects lock_policy for WIP counting:
|
|
585
|
-
* - 'all' (default): Count in_progress + blocked WUs toward WIP limit
|
|
586
|
-
* - 'active': Count only in_progress WUs (blocked WUs release lane lock)
|
|
587
|
-
* - 'none': Disable WIP checking entirely (lane always free)
|
|
588
|
-
*
|
|
589
|
-
* @param {string} statusPath - Path to status.md
|
|
590
|
-
* @param {string} lane - Lane name (e.g., "Operations", "Intelligence")
|
|
591
|
-
* @param {string} wuid - WU ID being claimed (e.g., "WU-419")
|
|
592
|
-
* @param {CheckLaneFreeOptions} options - Options including configPath for testing
|
|
593
|
-
* @returns {{ free: boolean, occupiedBy: string | null, error: string | null, inProgressWUs?: string[], wipLimit?: number, currentCount?: number }}
|
|
594
|
-
*/
|
|
595
|
-
export function checkLaneFree(statusPath, lane, wuid, options = {}) {
|
|
596
|
-
try {
|
|
597
|
-
// WU-1016: Get WIP limit for this lane from config
|
|
598
|
-
const wipLimit = getWipLimitForLane(lane, { configPath: options.configPath });
|
|
599
|
-
// WU-1324: Get lock policy for this lane from config
|
|
600
|
-
const lockPolicy = getLockPolicyForLane(lane, { configPath: options.configPath });
|
|
601
|
-
// WU-1324: If policy is 'none', WIP checking is disabled - lane is always free
|
|
602
|
-
if (lockPolicy === 'none') {
|
|
603
|
-
return createEmptyLaneResult(wipLimit);
|
|
604
|
-
}
|
|
605
|
-
// Read status.md
|
|
606
|
-
if (!existsSync(statusPath)) {
|
|
607
|
-
return { free: false, occupiedBy: null, error: `status.md not found: ${statusPath}` };
|
|
608
|
-
}
|
|
609
|
-
const content = readFileSync(statusPath, { encoding: 'utf-8' });
|
|
610
|
-
const lines = content.split(/\r?\n/);
|
|
611
|
-
// Extract In Progress section
|
|
612
|
-
const { section: inProgressSection, error } = extractInProgressSection(lines);
|
|
613
|
-
if (error) {
|
|
614
|
-
return { free: false, occupiedBy: null, error };
|
|
615
|
-
}
|
|
616
|
-
// Get project root from statusPath (docs/04-operations/tasks/status.md)
|
|
617
|
-
const projectRoot = path.dirname(path.dirname(path.dirname(path.dirname(statusPath))));
|
|
618
|
-
const targetLane = lane.toString().trim().toLowerCase();
|
|
619
|
-
// Collect in_progress WUs
|
|
620
|
-
const inProgressWUs = extractWUsFromSection(inProgressSection, wuid, projectRoot, targetLane);
|
|
621
|
-
// WU-1324: If policy is 'all', also count blocked WUs
|
|
622
|
-
let blockedWUs = [];
|
|
623
|
-
if (lockPolicy === 'all') {
|
|
624
|
-
const { section: blockedSection } = extractBlockedSection(lines);
|
|
625
|
-
blockedWUs = extractWUsFromSection(blockedSection, wuid, projectRoot, targetLane);
|
|
626
|
-
}
|
|
627
|
-
// WU-1324: Calculate total count based on policy
|
|
628
|
-
// - 'all': in_progress + blocked
|
|
629
|
-
// - 'active': in_progress only
|
|
630
|
-
const allCountedWUs = [...inProgressWUs, ...blockedWUs];
|
|
631
|
-
const currentCount = allCountedWUs.length;
|
|
632
|
-
const isFree = currentCount < wipLimit;
|
|
633
|
-
return {
|
|
634
|
-
free: isFree,
|
|
635
|
-
occupiedBy: isFree ? null : allCountedWUs[0] || null,
|
|
636
|
-
error: null,
|
|
637
|
-
inProgressWUs: allCountedWUs, // Include all counted WUs for visibility
|
|
638
|
-
wipLimit,
|
|
639
|
-
currentCount,
|
|
640
|
-
};
|
|
641
|
-
}
|
|
642
|
-
catch (error) {
|
|
643
|
-
const errMessage = error instanceof Error ? error.message : String(error);
|
|
644
|
-
return { free: false, occupiedBy: null, error: `Unexpected error: ${errMessage}` };
|
|
645
|
-
}
|
|
646
|
-
}
|
|
647
|
-
/** WU-1187: Default result when no justification is required */
|
|
648
|
-
const NO_JUSTIFICATION_REQUIRED = {
|
|
649
|
-
valid: true,
|
|
650
|
-
warning: null,
|
|
651
|
-
requiresJustification: false,
|
|
652
|
-
};
|
|
653
|
-
/**
|
|
654
|
-
* WU-1187: Extract all lanes from config (handles all config formats)
|
|
655
|
-
* @param config - Parsed LumenFlow config
|
|
656
|
-
* @returns Array of lane configs with wip settings
|
|
657
|
-
*/
|
|
658
|
-
function extractAllLanesFromConfig(config) {
|
|
659
|
-
if (!config.lanes) {
|
|
660
|
-
return [];
|
|
661
|
-
}
|
|
662
|
-
if (Array.isArray(config.lanes)) {
|
|
663
|
-
// Flat array format: lanes: [{name: "Core", wip_limit: 2}, ...]
|
|
664
|
-
return config.lanes;
|
|
665
|
-
}
|
|
666
|
-
// Nested formats with definitions, engineering, business
|
|
667
|
-
const allLanes = [];
|
|
668
|
-
if (config.lanes.definitions) {
|
|
669
|
-
allLanes.push(...config.lanes.definitions);
|
|
670
|
-
}
|
|
671
|
-
if (config.lanes.engineering) {
|
|
672
|
-
allLanes.push(...config.lanes.engineering);
|
|
673
|
-
}
|
|
674
|
-
if (config.lanes.business) {
|
|
675
|
-
allLanes.push(...config.lanes.business);
|
|
676
|
-
}
|
|
677
|
-
return allLanes;
|
|
678
|
-
}
|
|
679
|
-
/**
|
|
680
|
-
* WU-1187: Check if a lane has WIP justification when required
|
|
681
|
-
*
|
|
682
|
-
* Philosophy: If you need WIP > 1, you need better lanes, not higher limits.
|
|
683
|
-
* This is soft enforcement: logs a warning at claim time, but doesn't block.
|
|
684
|
-
*
|
|
685
|
-
* @param {string} lane - Lane name to check
|
|
686
|
-
* @param {CheckWipJustificationOptions} options - Options including configPath for testing
|
|
687
|
-
* @returns {CheckWipJustificationResult} Result with valid=true (always) and optional warning
|
|
688
|
-
*/
|
|
689
|
-
export function checkWipJustification(lane, options = {}) {
|
|
690
|
-
// Determine config path
|
|
691
|
-
let resolvedConfigPath = options.configPath;
|
|
692
|
-
if (!resolvedConfigPath) {
|
|
693
|
-
const projectRoot = findProjectRoot();
|
|
694
|
-
resolvedConfigPath = path.join(projectRoot, CONFIG_FILES.LUMENFLOW_CONFIG);
|
|
695
|
-
}
|
|
696
|
-
if (!existsSync(resolvedConfigPath)) {
|
|
697
|
-
return NO_JUSTIFICATION_REQUIRED;
|
|
698
|
-
}
|
|
699
|
-
try {
|
|
700
|
-
const configContent = readFileSync(resolvedConfigPath, { encoding: 'utf-8' });
|
|
701
|
-
const config = parseYAML(configContent);
|
|
702
|
-
const allLanes = extractAllLanesFromConfig(config);
|
|
703
|
-
if (allLanes.length === 0) {
|
|
704
|
-
return NO_JUSTIFICATION_REQUIRED;
|
|
705
|
-
}
|
|
706
|
-
// Find matching lane (case-insensitive)
|
|
707
|
-
const normalizedLane = lane.toLowerCase().trim();
|
|
708
|
-
const matchingLane = allLanes.find((l) => l.name.toLowerCase().trim() === normalizedLane);
|
|
709
|
-
if (!matchingLane) {
|
|
710
|
-
return NO_JUSTIFICATION_REQUIRED;
|
|
711
|
-
}
|
|
712
|
-
const wipLimit = matchingLane.wip_limit ?? DEFAULT_WIP_LIMIT;
|
|
713
|
-
// WIP <= 1 doesn't need justification
|
|
714
|
-
if (wipLimit <= 1) {
|
|
715
|
-
return NO_JUSTIFICATION_REQUIRED;
|
|
716
|
-
}
|
|
717
|
-
// WIP > 1 - check for justification
|
|
718
|
-
const justification = matchingLane.wip_justification;
|
|
719
|
-
if (justification && justification.trim().length > 0) {
|
|
720
|
-
// Has justification - all good
|
|
721
|
-
return {
|
|
722
|
-
valid: true,
|
|
723
|
-
warning: null,
|
|
724
|
-
requiresJustification: false,
|
|
725
|
-
justification: justification.trim(),
|
|
726
|
-
};
|
|
727
|
-
}
|
|
728
|
-
// WIP > 1 without justification - emit warning
|
|
729
|
-
const warning = `Lane "${lane}" has WIP limit of ${wipLimit} but no wip_justification. ` +
|
|
730
|
-
`Philosophy: If you need WIP > 1, you need better lanes, not higher limits. ` +
|
|
731
|
-
`Add wip_justification to .lumenflow.config.yaml to suppress this warning.`;
|
|
732
|
-
return {
|
|
733
|
-
valid: true, // Soft enforcement - warning only, doesn't block
|
|
734
|
-
warning,
|
|
735
|
-
requiresJustification: true,
|
|
736
|
-
};
|
|
737
|
-
}
|
|
738
|
-
catch {
|
|
739
|
-
// If config parsing fails, don't block
|
|
740
|
-
return NO_JUSTIFICATION_REQUIRED;
|
|
741
|
-
}
|
|
742
|
-
}
|
|
743
|
-
//# sourceMappingURL=lane-checker.js.map
|