@planu/cli 4.13.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +64 -1
- package/LICENSE +55 -12
- package/README.md +33 -25
- package/dist/cli/commands/inspect.d.ts +4 -0
- package/dist/cli/commands/inspect.js +144 -0
- package/dist/cli/commands/install.d.ts +19 -12
- package/dist/cli/commands/install.js +148 -102
- package/dist/cli/commands/job.d.ts +3 -0
- package/dist/cli/commands/job.js +120 -0
- package/dist/cli/commands/offline.d.ts +15 -0
- package/dist/cli/commands/offline.js +132 -0
- package/dist/cli/commands/serve.js +4 -0
- package/dist/cli/commands/spec.js +1 -1
- package/dist/cli/commands/storage.d.ts +3 -0
- package/dist/cli/commands/storage.js +102 -0
- package/dist/cli/commands/uninstall.d.ts +10 -0
- package/dist/cli/commands/uninstall.js +93 -7
- package/dist/cli/commands/validate.js +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/router.js +9 -3
- package/dist/config/crash-shield-framework-rules.json +93 -0
- package/dist/config/environment-schema.json +147 -0
- package/dist/config/hardcode-exceptions.json +4 -0
- package/dist/config/native-release-public-key.pem +3 -0
- package/dist/config/native-targets.json +87 -0
- package/dist/config/official-sdd-tools.d.ts +4 -0
- package/dist/config/official-sdd-tools.js +35 -0
- package/dist/config/product-public.d.ts +225 -0
- package/dist/config/product-public.js +147 -0
- package/dist/config/product-public.json +283 -0
- package/dist/config/registries/hosts/codex.json +20 -363
- package/dist/config/release-compatibility.json +13 -0
- package/dist/config/release-policy.json +108 -0
- package/dist/config/runtime-policy.json +55 -0
- package/dist/config/skill-templates/planu-resume-work.md +2 -2
- package/dist/config/skill-templates/planu-validate.md +7 -4
- package/dist/config/subagent-templates/planu-spec-implementer.md +7 -3
- package/dist/config/subagent-templates/planu-validator.md +10 -5
- package/dist/config/technology-registry.json +120 -0
- package/dist/config/version.js +7 -8
- package/dist/core/index.d.ts +1 -1
- package/dist/core/spec-validator.d.ts +4 -4
- package/dist/core/spec-validator.js +1 -1
- package/dist/engine/abortable-process-runner.d.ts +20 -2
- package/dist/engine/abortable-process-runner.js +267 -67
- package/dist/engine/advanced-testing/accessibility-checker.js +12 -14
- package/dist/engine/advanced-testing/mutation-advisor.js +3 -4
- package/dist/engine/advanced-testing/property-based.js +2 -3
- package/dist/engine/advanced-testing/test-data-advisor.js +2 -3
- package/dist/engine/agent-generator.js +2 -1
- package/dist/engine/agent-handoff-store.js +2 -1
- package/dist/engine/agent-prompt-generator.js +7 -5
- package/dist/engine/agent-telemetry.js +2 -1
- package/dist/engine/ai-integration/gemini/extensions-advisor.js +41 -9
- package/dist/engine/ambiguity-detector.js +12 -11
- package/dist/engine/ambiguity-scorer.js +4 -26
- package/dist/engine/analyzer/db-engine.js +2 -3
- package/dist/engine/analyzer/detectors.js +13 -14
- package/dist/engine/analyzer/env-setup.js +9 -10
- package/dist/engine/analyzer-env-scanner/env-example.js +7 -8
- package/dist/engine/api-spec-generator/graphql-parser.js +2 -2
- package/dist/engine/api-validation/graphql-schema-validator.js +2 -1
- package/dist/engine/api-validation/openapi-impl-validator.js +6 -7
- package/dist/engine/architecture-detector.js +10 -8
- package/dist/engine/auth/config.d.ts +1 -1
- package/dist/engine/auth/config.js +4 -3
- package/dist/engine/auth/scope-mapper.js +1 -7
- package/dist/engine/auto-updater/atomic-upgrade.d.ts +8 -0
- package/dist/engine/auto-updater/atomic-upgrade.js +381 -0
- package/dist/engine/auto-updater/config-detector.js +9 -3
- package/dist/engine/auto-updater/config-patcher.d.ts +0 -4
- package/dist/engine/auto-updater/config-patcher.js +10 -15
- package/dist/engine/auto-updater/index.d.ts +3 -1
- package/dist/engine/auto-updater/index.js +44 -30
- package/dist/engine/auto-updater/npm-registry.js +10 -2
- package/dist/engine/auto-updater/release-verifier.d.ts +3 -0
- package/dist/engine/auto-updater/release-verifier.js +112 -0
- package/dist/engine/auto-updater/upgrade-lock.d.ts +6 -0
- package/dist/engine/auto-updater/upgrade-lock.js +28 -0
- package/dist/engine/auto-updater/upgrade-trust-state.d.ts +7 -0
- package/dist/engine/auto-updater/upgrade-trust-state.js +59 -0
- package/dist/engine/autopilot/audit-logger.js +2 -5
- package/dist/engine/autopilot/state-updater.js +4 -4
- package/dist/engine/best-practices-library.js +2 -1
- package/dist/engine/browser-validator.js +2 -1
- package/dist/engine/build-tool-detector.js +3 -2
- package/dist/engine/cascade-hooks/hooks/review-enricher.hook.js +9 -6
- package/dist/engine/cascade-hooks/state-drift-detector.d.ts +3 -3
- package/dist/engine/cascade-hooks/state-drift-detector.js +1 -1
- package/dist/engine/ci-generator/context-builders.js +7 -5
- package/dist/engine/ci-generator/planu-config.js +1 -7
- package/dist/engine/ci-generator/stack-detector.js +0 -2
- package/dist/engine/ci-generator/yaml-builder.js +0 -2
- package/dist/engine/clarification-gate/gate.d.ts +3 -3
- package/dist/engine/claude-config-auditor/rules-auditor.js +4 -3
- package/dist/engine/code-scanner/layer-scanner.js +6 -22
- package/dist/engine/code-transforms/typescript/ast-utils.js +2 -3
- package/dist/engine/complexity-budget/trivial-detector.js +2 -1
- package/dist/engine/compliance-test-generator/index.js +7 -2
- package/dist/engine/compliance-test-generator/test-formatter.js +2 -2
- package/dist/engine/config-health/mcp-config-checker.js +2 -1
- package/dist/engine/config-health/ts-checker-scripts.js +4 -3
- package/dist/engine/config-health/ts-checker.js +3 -2
- package/dist/engine/convention-injector.js +5 -7
- package/dist/engine/convention-scanner/convention-parser.js +3 -2
- package/dist/engine/core-bridge-duplicate-blocks.d.ts +3 -0
- package/dist/engine/core-bridge-duplicate-blocks.js +57 -0
- package/dist/engine/core-bridge-gaps.d.ts +4 -0
- package/dist/engine/core-bridge-gaps.js +75 -0
- package/dist/engine/core-bridge.d.ts +10 -10
- package/dist/engine/core-bridge.js +196 -283
- package/dist/engine/cost-guardrails.d.ts +1 -1
- package/dist/engine/cost-guardrails.js +1 -1
- package/dist/engine/cost-tracking/ledger.js +2 -5
- package/dist/engine/coverage-gap-analyzer.js +10 -1
- package/dist/engine/crash-shield/detectors/framework-detector.d.ts +2 -0
- package/dist/engine/crash-shield/detectors/framework-detector.js +110 -192
- package/dist/engine/crash-shield/detectors/typescript-detector.js +2 -1
- package/dist/engine/criterion-identity.d.ts +1 -0
- package/dist/engine/criterion-identity.js +7 -0
- package/dist/engine/dashboard/data-loader.js +4 -8
- package/dist/engine/dashboard/templates-layout.js +0 -3
- package/dist/engine/dashboard/templates-project.js +1 -13
- package/dist/engine/data-projects-gc/gc-runner.d.ts +7 -0
- package/dist/engine/data-projects-gc/gc-runner.js +113 -3
- package/dist/engine/data-projects-gc/scanner.js +5 -1
- package/dist/engine/decision-store.js +11 -14
- package/dist/engine/deleter/core.js +5 -5
- package/dist/engine/dep-auditor/abandonment-data.js +2 -1
- package/dist/engine/dep-auditor/abandonment-registry.js +3 -1
- package/dist/engine/dep-auditor/cve-fetcher.js +3 -0
- package/dist/engine/dep-auditor/dep-duplicates-detector.js +36 -4
- package/dist/engine/dep-auditor/license-registry.js +2 -0
- package/dist/engine/dependency-evaluator.d.ts +14 -0
- package/dist/engine/dependency-evaluator.js +81 -0
- package/dist/engine/deploy/providers/fly.js +7 -7
- package/dist/engine/deploy/providers/netlify.js +7 -7
- package/dist/engine/deploy/providers/railway.js +10 -12
- package/dist/engine/deploy/providers/vercel.js +7 -9
- package/dist/engine/deprecation-scanner/pattern-loader.js +0 -2
- package/dist/engine/desktop-detector.js +2 -3
- package/dist/engine/detect-duplication.js +2 -1
- package/dist/engine/detectors/advanced-framework-detector/css-state-detector.js +2 -1
- package/dist/engine/detectors/advanced-framework-detector/legacy-detector.js +2 -3
- package/dist/engine/detectors/advanced-framework-detector/modern-detector.js +3 -4
- package/dist/engine/detectors/agent-framework-detector.js +3 -2
- package/dist/engine/detectors/ai-native-detector.js +4 -6
- package/dist/engine/detectors/cache-db-detector.js +4 -3
- package/dist/engine/detectors/cicd-detector.js +4 -3
- package/dist/engine/detectors/deployment-detector.js +11 -12
- package/dist/engine/detectors/frontend-perf-detector.js +14 -9
- package/dist/engine/detectors/library-detector-multilang-a.js +16 -3
- package/dist/engine/detectors/library-detector-node.js +14 -4
- package/dist/engine/detectors/library-detector-python.js +7 -1
- package/dist/engine/detectors/library-detector.js +0 -2
- package/dist/engine/detectors/llm-detector/provider-maps.js +3 -2
- package/dist/engine/detectors/mcp-candidate-detector.js +12 -16
- package/dist/engine/detectors/mfe-detector.js +6 -7
- package/dist/engine/detectors/monitoring-detector.js +4 -3
- package/dist/engine/detectors/otel-detector.js +3 -2
- package/dist/engine/detectors/otel-ecosystem-detectors.d.ts +2 -2
- package/dist/engine/detectors/otel-ecosystem-detectors.js +4 -3
- package/dist/engine/detectors/platform-specialty-detector.js +3 -5
- package/dist/engine/detectors/template-engine-detector.js +3 -4
- package/dist/engine/doc-generator/builders.js +2 -3
- package/dist/engine/doc-generator/mobile-distribution-guide.js +13 -17
- package/dist/engine/doc-generator/portal/dirty-flag-map.d.ts +2 -2
- package/dist/engine/doc-generator/portal/portal-regenerator.js +3 -47
- package/dist/engine/docs-site-generator/data-collector.d.ts +1 -1
- package/dist/engine/docs-site-generator/data-collector.js +7 -28
- package/dist/engine/docs-site-generator/tools-renderer.js +3 -10
- package/dist/engine/domain-detector.js +3 -6
- package/dist/engine/dynamic-knowledge/knowledge-cache.js +3 -4
- package/dist/engine/dynamic-knowledge/knowledge-merger.js +17 -2
- package/dist/engine/dynamic-knowledge/web-researcher.js +15 -14
- package/dist/engine/dynamic-migration-detector/manifest-readers-extended.js +0 -2
- package/dist/engine/e2e-test-generator.js +4 -3
- package/dist/engine/ecosystem-absorber/knowledge-cache.js +2 -1
- package/dist/engine/ecosystem-absorber/platform-crawler.js +2 -2
- package/dist/engine/escalator/retry-counter.js +2 -1
- package/dist/engine/evidence-gates/artifact-reader.d.ts +16 -1
- package/dist/engine/evidence-gates/artifact-reader.js +220 -23
- package/dist/engine/evidence-gates/lifecycle-gate.d.ts +2 -1
- package/dist/engine/evidence-gates/lifecycle-gate.js +58 -3
- package/dist/engine/evidence-gates/reconciliation-freshness.d.ts +11 -0
- package/dist/engine/evidence-gates/reconciliation-freshness.js +72 -0
- package/dist/engine/evidence-index/done-drift.d.ts +1 -1
- package/dist/engine/evidence-index/done-drift.js +40 -18
- package/dist/engine/execution/context.d.ts +19 -0
- package/dist/engine/execution/context.js +130 -0
- package/dist/engine/execution/deadline-io.d.ts +21 -0
- package/dist/engine/execution/deadline-io.js +45 -0
- package/dist/engine/execution/durable-job-heartbeat-runtime.d.ts +4 -0
- package/dist/engine/execution/durable-job-heartbeat-runtime.js +400 -0
- package/dist/engine/execution/job-executor.d.ts +16 -0
- package/dist/engine/execution/job-executor.js +140 -0
- package/dist/engine/execution/job-runtime.d.ts +108 -0
- package/dist/engine/execution/job-runtime.js +328 -0
- package/dist/engine/execution/native-relevance-scorer.d.ts +6 -0
- package/dist/engine/execution/native-relevance-scorer.js +64 -0
- package/dist/engine/execution/native-worker-dispatch.d.ts +3 -0
- package/dist/engine/execution/native-worker-dispatch.js +46 -0
- package/dist/engine/execution/native-worker-protocol.d.ts +6 -0
- package/dist/engine/execution/native-worker-protocol.js +33 -0
- package/dist/engine/execution/native-worker-runtime.d.ts +4 -0
- package/dist/engine/execution/native-worker-runtime.js +177 -0
- package/dist/engine/execution/native-worker-thread.d.ts +2 -0
- package/dist/engine/execution/native-worker-thread.js +66 -0
- package/dist/engine/execution/operation-journal.d.ts +66 -0
- package/dist/engine/execution/operation-journal.js +260 -0
- package/dist/engine/execution/outbox-worker.d.ts +31 -0
- package/dist/engine/execution/outbox-worker.js +192 -0
- package/dist/engine/execution/public-job-sanitizer.d.ts +4 -0
- package/dist/engine/execution/public-job-sanitizer.js +31 -0
- package/dist/engine/execution/validate-job-executor.d.ts +35 -0
- package/dist/engine/execution/validate-job-executor.js +805 -0
- package/dist/engine/execution/validate-job-payload.d.ts +5 -0
- package/dist/engine/execution/validate-job-payload.js +144 -0
- package/dist/engine/execution/validate-job-recovery.d.ts +4 -0
- package/dist/engine/execution/validate-job-recovery.js +47 -0
- package/dist/engine/execution/validate-worker-runtime.d.ts +10 -0
- package/dist/engine/execution/validate-worker-runtime.js +188 -0
- package/dist/engine/execution/validate-worker-thread.d.ts +2 -0
- package/dist/engine/execution/validate-worker-thread.js +64 -0
- package/dist/engine/execution-plan/desktop-distribution.js +3 -7
- package/dist/engine/execution-plan/mobile-distribution.js +4 -9
- package/dist/engine/execution-plan/phases.js +4 -5
- package/dist/engine/execution-plan/plan-utils.js +8 -5
- package/dist/engine/facilitate/context-loader.js +3 -9
- package/dist/engine/figma/code-connect-fetcher.js +9 -8
- package/dist/engine/filesystem-watcher/index.d.ts +3 -3
- package/dist/engine/filesystem-watcher/index.js +5 -5
- package/dist/engine/framework-detector.js +14 -15
- package/dist/engine/git/planu-autocommit.js +8 -7
- package/dist/engine/git/repository-probe.d.ts +3 -0
- package/dist/engine/git/repository-probe.js +13 -0
- package/dist/engine/global-rules-manager.js +2 -2
- package/dist/engine/handoff-artifacts/io.js +2 -3
- package/dist/engine/handoff-artifacts/schemas/red-tests-handoff.js +8 -1
- package/dist/engine/handoff-artifacts/schemas.d.ts +6 -1
- package/dist/engine/handoff-artifacts/schemas.js +38 -0
- package/dist/engine/handoff-packager.d.ts +19 -0
- package/dist/engine/handoff-packager.js +415 -13
- package/dist/engine/hook-generator/stack-hook-templates.js +4 -4
- package/dist/engine/hooks/config-loader.js +1 -1
- package/dist/engine/hooks/context-injector.js +4 -7
- package/dist/engine/hooks/effort-configurator.js +1 -1
- package/dist/engine/hooks/file-watcher.js +1 -14
- package/dist/engine/hooks-reconciler.js +6 -4
- package/dist/engine/impact-detector/test-break-predictor.js +3 -3
- package/dist/engine/impact-detector/tool-registration.js +1 -1
- package/dist/engine/implementation-contract/renderer.js +23 -8
- package/dist/engine/infrastructure/component-mapper.js +5 -7
- package/dist/engine/infrastructure/docker-compose-generator.js +8 -10
- package/dist/engine/infrastructure/index.js +6 -3
- package/dist/engine/infrastructure/kubernetes-generator.js +2 -2
- package/dist/engine/infrastructure/railway-generator.js +10 -8
- package/dist/engine/infrastructure/signal-detector.js +6 -8
- package/dist/engine/infrastructure/terraform-generator.js +6 -8
- package/dist/engine/legal-compliance/detector.js +3 -2
- package/dist/engine/lifecycle-reconciliation-io.d.ts +11 -0
- package/dist/engine/lifecycle-reconciliation-io.js +180 -0
- package/dist/engine/lifecycle-reconciliation.d.ts +16 -0
- package/dist/engine/lifecycle-reconciliation.js +406 -0
- package/dist/engine/local-first/storage-advisor.js +5 -6
- package/dist/engine/local-first/tool-classification.js +2 -0
- package/dist/engine/macos-keychain-native-port.d.ts +10 -0
- package/dist/engine/macos-keychain-native-port.js +38 -0
- package/dist/engine/marketplace-fetcher/cache.js +3 -1
- package/dist/engine/mcp-config/mcp-config-writer.d.ts +2 -2
- package/dist/engine/mcp-config/mcp-config-writer.js +10 -8
- package/dist/engine/migration/db-migrator.js +2 -5
- package/dist/engine/migration/equivalence-mapper.js +12 -13
- package/dist/engine/migration/service-catalogs.js +6 -7
- package/dist/engine/migration/service-migrator-catalogs.js +6 -7
- package/dist/engine/migrations/remove-commercial-state.d.ts +3 -0
- package/dist/engine/migrations/remove-commercial-state.js +343 -0
- package/dist/engine/mobile-detector-ios.js +2 -3
- package/dist/engine/mobile-detector.js +16 -4
- package/dist/engine/model-router/complexity-analyzer.js +4 -7
- package/dist/engine/multi-agent-review/security-analyzer.js +3 -1
- package/dist/engine/multi-app-detector/app-type.js +26 -21
- package/dist/engine/multi-app-detector/core.js +3 -2
- package/dist/engine/multi-teammate-review/disagreement-counter.js +2 -1
- package/dist/engine/multi-teammate-review/panel-orchestrator.js +0 -2
- package/dist/engine/mutation-config-generator.js +10 -7
- package/dist/engine/native-capability-policy.d.ts +4 -0
- package/dist/engine/native-capability-policy.js +24 -0
- package/dist/engine/native-platform.d.ts +3 -0
- package/dist/engine/native-platform.js +44 -0
- package/dist/engine/native-runtime-handshake.d.ts +20 -0
- package/dist/engine/native-runtime-handshake.js +230 -0
- package/dist/engine/network-policy.d.ts +27 -0
- package/dist/engine/network-policy.js +175 -0
- package/dist/engine/next-spec-resolver/dependency-filter.js +2 -22
- package/dist/engine/nfr-profile-detector.js +12 -16
- package/dist/engine/nli-keywords.js +8 -9
- package/dist/engine/oauth/config-guard.js +4 -5
- package/dist/engine/observability/local-execution-spans.d.ts +15 -0
- package/dist/engine/observability/local-execution-spans.js +63 -0
- package/dist/engine/orchestrator/runtime.js +0 -1
- package/dist/engine/package-registry.js +2 -6
- package/dist/engine/performance-analyzer.js +2 -5
- package/dist/engine/permissions-merger/stack-detectors.js +5 -5
- package/dist/engine/planu-core.darwin-arm64.node.manifest.json +39 -0
- package/dist/engine/planu-core.darwin-arm64.node.sbom.json +1310 -0
- package/dist/engine/planu-core.darwin-x64.node.manifest.json +39 -0
- package/dist/engine/planu-core.darwin-x64.node.sbom.json +1310 -0
- package/dist/engine/planu-core.linux-arm64-gnu.node.manifest.json +38 -0
- package/dist/engine/planu-core.linux-arm64-gnu.node.sbom.json +1310 -0
- package/dist/engine/planu-core.linux-arm64-musl.node.manifest.json +38 -0
- package/dist/engine/planu-core.linux-arm64-musl.node.sbom.json +1310 -0
- package/dist/engine/planu-core.linux-x64-gnu.node.manifest.json +38 -0
- package/dist/engine/planu-core.linux-x64-gnu.node.sbom.json +1310 -0
- package/dist/engine/planu-core.linux-x64-musl.node.manifest.json +38 -0
- package/dist/engine/planu-core.linux-x64-musl.node.sbom.json +1310 -0
- package/dist/engine/planu-core.win32-arm64-msvc.node.manifest.json +38 -0
- package/dist/engine/planu-core.win32-arm64-msvc.node.sbom.json +1310 -0
- package/dist/engine/planu-core.win32-x64-msvc.node.manifest.json +38 -0
- package/dist/engine/planu-core.win32-x64-msvc.node.sbom.json +1310 -0
- package/dist/engine/platform-detector/desktop.js +15 -2
- package/dist/engine/platform-detector/extensions.js +2 -1
- package/dist/engine/platform-detector/games.js +2 -1
- package/dist/engine/platform-detector.js +3 -2
- package/dist/engine/platform-engineering/idp-detector.js +2 -1
- package/dist/engine/plugin-installer/stack-matcher.js +9 -17
- package/dist/engine/plugins/lifecycle.js +6 -2
- package/dist/engine/prior-decisions/contradiction-detector.js +60 -30
- package/dist/engine/project-dna/stack-detector.js +15 -17
- package/dist/engine/project-graph/builder.js +11 -0
- package/dist/engine/project-graph/cache.js +1 -1
- package/dist/engine/project-graph/freshness-projection.d.ts +16 -0
- package/dist/engine/project-graph/freshness-projection.js +95 -0
- package/dist/engine/project-graph/index.d.ts +1 -0
- package/dist/engine/project-graph/index.js +1 -0
- package/dist/engine/project-graph/query.js +15 -25
- package/dist/engine/project-health-checker.js +3 -4
- package/dist/engine/project-scanner/stack-detector.js +17 -17
- package/dist/engine/property-test-generator.js +2 -3
- package/dist/engine/qa-gate.d.ts +1 -0
- package/dist/engine/qa-gate.js +6 -4
- package/dist/engine/quality-gates/gate-catalog.js +47 -46
- package/dist/engine/quality-gates/gate-injector.js +9 -4
- package/dist/engine/readiness-checker.d.ts +1 -16
- package/dist/engine/readiness-checker.js +27 -88
- package/dist/engine/registry/core.js +0 -2
- package/dist/engine/registry/loader.js +9 -12
- package/dist/engine/registry/matcher.js +129 -24
- package/dist/engine/resilience-detector/concurrency-detector.js +4 -4
- package/dist/engine/resilience-detector/middleware-detector.js +11 -13
- package/dist/engine/resilience-detector/validation-detector.js +17 -4
- package/dist/engine/reverse-engineer/config-analyzer.js +9 -8
- package/dist/engine/reverse-engineer/orchestrator.js +5 -9
- package/dist/engine/reverse-engineer/test-file-parser.js +6 -3
- package/dist/engine/rules-generator/index.js +6 -5
- package/dist/engine/runtime-policy.d.ts +9 -0
- package/dist/engine/runtime-policy.js +138 -0
- package/dist/engine/runtime-security/checkers/content-security.js +21 -6
- package/dist/engine/runtime-security/checkers/file-permissions.js +0 -2
- package/dist/engine/runtime-security/rate-limiter.js +0 -1
- package/dist/engine/safety/atomic-write-file.js +20 -9
- package/dist/engine/safety/atomic-writer.js +10 -3
- package/dist/engine/safety/contained-project-file.d.ts +3 -0
- package/dist/engine/safety/contained-project-file.js +23 -0
- package/dist/engine/safety/cross-process-lock.d.ts +3 -40
- package/dist/engine/safety/cross-process-lock.js +268 -272
- package/dist/engine/safety/file-mutex.d.ts +2 -9
- package/dist/engine/safety/file-mutex.js +155 -87
- package/dist/engine/safety/health-monitor.js +15 -6
- package/dist/engine/safety/lock-lease-store.d.ts +79 -0
- package/dist/engine/safety/lock-lease-store.js +372 -0
- package/dist/engine/safety/lock-scavenger.d.ts +2 -5
- package/dist/engine/safety/lock-scavenger.js +158 -76
- package/dist/engine/safety/lock-staleness.js +4 -1
- package/dist/engine/safety/obsolete-lock-guard.d.ts +8 -0
- package/dist/engine/safety/obsolete-lock-guard.js +31 -0
- package/dist/engine/safety/transaction.js +3 -3
- package/dist/engine/sandbox/index.js +2 -1
- package/dist/engine/sandbox/runner-detect.js +3 -2
- package/dist/engine/sandbox/runner-docker.js +4 -3
- package/dist/engine/scan-project/module-discoverer.js +3 -2
- package/dist/engine/schema-generator.js +16 -9
- package/dist/engine/scope-boundaries/contradiction-checker.js +63 -1
- package/dist/engine/scope-boundaries/scope-validator.js +45 -7
- package/dist/engine/security-analyzer/criteria-generator.js +2 -3
- package/dist/engine/self-healing/healer.js +4 -4
- package/dist/engine/session/checkpoint-writer.js +0 -9
- package/dist/engine/shared-agent-memory.js +66 -74
- package/dist/engine/skill-adapter/command-rewriter.js +3 -2
- package/dist/engine/skill-adapter/index.js +3 -3
- package/dist/engine/skill-adapter/placeholder-map.js +3 -2
- package/dist/engine/skill-bootstrap/stack-matcher.js +47 -48
- package/dist/engine/skill-generation/stack-content-generator.js +0 -2
- package/dist/engine/skill-generator/workflow-skill-generator.js +2 -1
- package/dist/engine/skill-registry/ttl-refresh.js +3 -1
- package/dist/engine/skills/skills-fetcher.js +3 -6
- package/dist/engine/skills-reconciler.js +19 -39
- package/dist/engine/spec-coverage/test-finder.js +7 -6
- package/dist/engine/spec-diff-engine.js +3 -3
- package/dist/engine/spec-format/acceptance-criteria.d.ts +6 -2
- package/dist/engine/spec-format/acceptance-criteria.js +77 -18
- package/dist/engine/spec-format/markdown-sections.d.ts +14 -0
- package/dist/engine/spec-format/markdown-sections.js +105 -0
- package/dist/engine/spec-format/read-technical-section.js +33 -5
- package/dist/engine/spec-format/technical-md-populator.js +3 -2
- package/dist/engine/spec-format/unified-spec-builder.d.ts +7 -0
- package/dist/engine/spec-format/unified-spec-builder.js +202 -0
- package/dist/engine/spec-generator/api-key-resolver.d.ts +1 -1
- package/dist/engine/spec-generator/api-key-resolver.js +3 -24
- package/dist/engine/spec-generators/issue-extractor.js +9 -3
- package/dist/engine/spec-migrator/canonical-deduplicator.d.ts +18 -0
- package/dist/engine/spec-migrator/canonical-deduplicator.js +479 -0
- package/dist/engine/spec-migrator/drift-detector.js +5 -13
- package/dist/engine/spec-migrator/filesystem-import.d.ts +4 -8
- package/dist/engine/spec-migrator/filesystem-import.js +134 -23
- package/dist/engine/spec-migrator/frontmatter-parser.js +32 -15
- package/dist/engine/spec-migrator/index.d.ts +1 -0
- package/dist/engine/spec-migrator/index.js +1 -0
- package/dist/engine/spec-migrator/planu-canonical-policy.js +10 -1
- package/dist/engine/spec-migrator/strict-planu-cleanup.js +24 -25
- package/dist/engine/spec-registry/adapter.d.ts +0 -5
- package/dist/engine/spec-registry/adapter.js +45 -46
- package/dist/engine/spec-registry/client.js +2 -0
- package/dist/engine/spec-source-sync.js +3 -2
- package/dist/engine/spec-state-machine/transition-spec.d.ts +6 -1
- package/dist/engine/spec-state-machine/transition-spec.js +10 -1
- package/dist/engine/spec-templates/custom-loader.js +2 -3
- package/dist/engine/spec-templates/templates-domain-specific.js +8 -5
- package/dist/engine/spec-templates/templates-perf-integration.js +2 -3
- package/dist/engine/stack-auditor/manifest-reader.js +0 -2
- package/dist/engine/staleness/stale-implementing.js +7 -7
- package/dist/engine/tdd-scaffold-generator.js +24 -11
- package/dist/engine/teammate-router/green-phase-verifier.js +2 -1
- package/dist/engine/teammate-router/red-phase-verifier.js +2 -1
- package/dist/engine/technical-enricher/index.js +16 -8
- package/dist/engine/technical-enricher/render-enriched.d.ts +1 -0
- package/dist/engine/technical-enricher/render-enriched.js +42 -14
- package/dist/engine/technology-registry.d.ts +11 -0
- package/dist/engine/technology-registry.js +142 -0
- package/dist/engine/telemetry/error-reporter.d.ts +1 -2
- package/dist/engine/telemetry/error-reporter.js +11 -18
- package/dist/engine/telemetry/health-checker.js +58 -31
- package/dist/engine/telemetry/index.d.ts +0 -1
- package/dist/engine/telemetry/index.js +0 -1
- package/dist/engine/telemetry/stance.js +3 -2
- package/dist/engine/telemetry/telemetry-client.d.ts +1 -5
- package/dist/engine/telemetry/telemetry-client.js +69 -35
- package/dist/engine/telemetry/telemetry-store.d.ts +3 -3
- package/dist/engine/telemetry/telemetry-store.js +30 -23
- package/dist/engine/test-framework-detector/detectors.js +8 -8
- package/dist/engine/test-framework-detector/strategy.js +8 -9
- package/dist/engine/test-generators/agent-test-templates.js +2 -3
- package/dist/engine/test-generators/contract-test-generator.d.ts +1 -1
- package/dist/engine/test-generators/contract-test-generator.js +9 -202
- package/dist/engine/test-generators/platform-test-templates-b.js +2 -3
- package/dist/engine/test-generators/platform-test-templates.js +2 -5
- package/dist/engine/test-mocks-generator.js +4 -3
- package/dist/engine/test-plan-generator.js +30 -12
- package/dist/engine/test-scaffold-generator/advanced-scaffold.js +4 -5
- package/dist/engine/test-scaffold-generator/unit-scaffold.js +5 -6
- package/dist/engine/text-signal-boundaries.d.ts +2 -0
- package/dist/engine/text-signal-boundaries.js +25 -2
- package/dist/engine/time/relative-date.d.ts +3 -0
- package/dist/engine/time/relative-date.js +16 -0
- package/dist/engine/timing/budget.d.ts +17 -17
- package/dist/engine/timing/budget.js +98 -64
- package/dist/engine/token-optimizer/analytics.d.ts +1 -1
- package/dist/engine/token-optimizer/analytics.js +5 -6
- package/dist/engine/tool-groups/group-manager.js +3 -3
- package/dist/engine/universal-rules/installer.js +1 -1
- package/dist/engine/universal-rules/rules/planu-modes.js +2 -0
- package/dist/engine/universal-rules/rules/planu-release-policy.js +1 -0
- package/dist/engine/update-notifier.js +8 -5
- package/dist/engine/usage-tracker/core.d.ts +2 -2
- package/dist/engine/usage-tracker/core.js +1 -2
- package/dist/engine/usage-tracker/index.d.ts +0 -3
- package/dist/engine/usage-tracker/index.js +0 -3
- package/dist/engine/usage-tracker/stats.d.ts +2 -2
- package/dist/engine/usage-tracker/stats.js +1 -28
- package/dist/engine/validation/approved-spec-portability.d.ts +12 -0
- package/dist/engine/validation/approved-spec-portability.js +107 -0
- package/dist/engine/validation/durable-validation.d.ts +36 -0
- package/dist/engine/validation/durable-validation.js +256 -0
- package/dist/engine/validation/validation-freshness.d.ts +46 -0
- package/dist/engine/validation/validation-freshness.js +567 -0
- package/dist/engine/validation/validation-receipt-codec.d.ts +13 -0
- package/dist/engine/validation/validation-receipt-codec.js +182 -0
- package/dist/engine/validation/validation-receipt.d.ts +62 -0
- package/dist/engine/validation/validation-receipt.js +342 -0
- package/dist/engine/validation/validation-source-digest.d.ts +2 -0
- package/dist/engine/validation/validation-source-digest.js +86 -0
- package/dist/engine/validation/validation-source-policy.d.ts +4 -0
- package/dist/engine/validation/validation-source-policy.js +16 -0
- package/dist/engine/validation/validation-submission.d.ts +37 -0
- package/dist/engine/validation/validation-submission.js +142 -0
- package/dist/engine/validation/validation-worktree.d.ts +21 -0
- package/dist/engine/validation/validation-worktree.js +260 -0
- package/dist/engine/validation-evidence-ledger.js +41 -0
- package/dist/engine/validation-impact-planner.d.ts +14 -2
- package/dist/engine/validation-impact-planner.js +23 -10
- package/dist/engine/validator/dor-dod.d.ts +1 -0
- package/dist/engine/validator/dor-dod.js +5 -3
- package/dist/engine/validator/extractors.d.ts +1 -5
- package/dist/engine/validator/extractors.js +24 -69
- package/dist/engine/validator/spec-compliance-runner.d.ts +13 -25
- package/dist/engine/validator/spec-compliance-runner.js +442 -215
- package/dist/engine/validator/validation-report-writer.js +1 -1
- package/dist/engine/validator.js +37 -23
- package/dist/engine/verify-integrations/index.js +1 -1
- package/dist/engine/version-resolver.js +5 -6
- package/dist/engine/web-fetcher/stack-advisor.js +156 -92
- package/dist/engine/web-fetcher/stack-detector.js +114 -54
- package/dist/engine/workspace-manager.js +3 -2
- package/dist/errors/classified-degradation.d.ts +3 -0
- package/dist/errors/classified-degradation.js +10 -0
- package/dist/errors/degradation-sink.d.ts +3 -0
- package/dist/errors/degradation-sink.js +5 -0
- package/dist/errors/error-taxonomy.d.ts +12 -0
- package/dist/errors/error-taxonomy.js +62 -0
- package/dist/hosts/claude-code/ux/mcp-prompts.js +10 -4
- package/dist/hosts/claude-code/ux/mcp-resources.js +4 -2
- package/dist/hosts/codex/config-scaffold.js +4 -3
- package/dist/hosts/gemini/config-scaffold.js +2 -1
- package/dist/hosts/gemini/multimodal-spec-flow.js +7 -4
- package/dist/index.js +23 -20
- package/dist/resources/patterns.js +3 -1
- package/dist/resources/specs.js +3 -1
- package/dist/resources/templates.js +3 -1
- package/dist/resources/usage-stats-resource.js +2 -18
- package/dist/security/adapters/environment.d.ts +12 -0
- package/dist/security/adapters/environment.js +25 -0
- package/dist/security/adapters/linux-secret-service.d.ts +8 -0
- package/dist/security/adapters/linux-secret-service.js +64 -0
- package/dist/security/adapters/macos-keychain.d.ts +18 -0
- package/dist/security/adapters/macos-keychain.js +90 -0
- package/dist/security/adapters/windows-credential-manager.d.ts +8 -0
- package/dist/security/adapters/windows-credential-manager.js +60 -0
- package/dist/security/redactor.d.ts +5 -0
- package/dist/security/redactor.js +58 -0
- package/dist/security/secret-field.d.ts +5 -0
- package/dist/security/secret-field.js +17 -0
- package/dist/security/secret-migration.d.ts +3 -0
- package/dist/security/secret-migration.js +123 -0
- package/dist/security/secret-provider.d.ts +23 -0
- package/dist/security/secret-provider.js +145 -0
- package/dist/security/secure-json.d.ts +3 -0
- package/dist/security/secure-json.js +29 -0
- package/dist/server/routes/specs.js +10 -0
- package/dist/storage/api-surfaces-store.js +2 -2
- package/dist/storage/approval-operation-lock.d.ts +1 -1
- package/dist/storage/approval-operation-lock.js +5 -3
- package/dist/storage/audit-trail-store.d.ts +1 -1
- package/dist/storage/audit-trail-store.js +48 -62
- package/dist/storage/autopilot-log-store.js +12 -5
- package/dist/storage/base-store.d.ts +9 -9
- package/dist/storage/base-store.js +58 -21
- package/dist/storage/checkpoint-store.js +5 -2
- package/dist/storage/comments-store.js +2 -2
- package/dist/storage/compliance-audit-store.js +5 -2
- package/dist/storage/compliance-gate-config-store.js +7 -4
- package/dist/storage/compliance-store.js +2 -2
- package/dist/storage/context-profile-store.js +2 -2
- package/dist/storage/crash-shield-store.js +8 -4
- package/dist/storage/feedback-remote.d.ts +2 -3
- package/dist/storage/feedback-remote.js +45 -31
- package/dist/storage/feedback-store.js +10 -6
- package/dist/storage/figma-store.js +8 -4
- package/dist/storage/file-mutex.js +9 -1
- package/dist/storage/gaps-log.js +7 -4
- package/dist/storage/global-projects-store.js +4 -2
- package/dist/storage/global-store.d.ts +1 -17
- package/dist/storage/global-store.js +1 -42
- package/dist/storage/ideas-store.js +2 -2
- package/dist/storage/index.d.ts +5 -2
- package/dist/storage/index.js +5 -2
- package/dist/storage/knowledge-store/knowledge.js +27 -33
- package/dist/storage/lessons-store.js +2 -2
- package/dist/storage/migrations/canonical-storage.d.ts +15 -0
- package/dist/storage/migrations/canonical-storage.js +712 -0
- package/dist/storage/oauth-store.js +36 -8
- package/dist/storage/path-resolver.js +16 -3
- package/dist/storage/pr-store.js +2 -2
- package/dist/storage/project-drift-store.js +20 -8
- package/dist/storage/project-identity.d.ts +32 -0
- package/dist/storage/project-identity.js +194 -0
- package/dist/storage/project-resolver.js +14 -7
- package/dist/storage/release-notes-store.js +2 -6
- package/dist/storage/runtime-db.d.ts +195 -0
- package/dist/storage/runtime-db.js +1110 -0
- package/dist/storage/schema-registry.d.ts +5 -0
- package/dist/storage/schema-registry.js +74 -0
- package/dist/storage/sentry-store.js +20 -9
- package/dist/storage/session-state-store.js +12 -5
- package/dist/storage/skill-registry-storage.d.ts +1 -1
- package/dist/storage/skill-registry-storage.js +13 -11
- package/dist/storage/slack-store.js +10 -5
- package/dist/storage/spec-store.d.ts +14 -2
- package/dist/storage/spec-store.js +134 -37
- package/dist/storage/status-store/atomic-status-write.d.ts +5 -0
- package/dist/storage/status-store/atomic-status-write.js +57 -0
- package/dist/storage/status-store/file-lock.js +61 -20
- package/dist/storage/status-store/self-healing.js +13 -8
- package/dist/storage/status-store/version-sync.d.ts +2 -1
- package/dist/storage/status-store/version-sync.js +36 -39
- package/dist/storage/steering-store.js +2 -2
- package/dist/storage/storage-bundle.d.ts +5 -0
- package/dist/storage/storage-bundle.js +117 -0
- package/dist/storage/storage-catalog-validation.d.ts +3 -0
- package/dist/storage/storage-catalog-validation.js +20 -0
- package/dist/storage/storage-catalog.d.ts +25 -0
- package/dist/storage/storage-catalog.js +390 -0
- package/dist/storage/storage-layout.d.ts +24 -0
- package/dist/storage/storage-layout.js +101 -0
- package/dist/storage/storybook-store.js +2 -2
- package/dist/storage/supabase-store.js +24 -6
- package/dist/storage/tdd-policy-store.js +8 -6
- package/dist/storage/tech-debt-store.js +3 -3
- package/dist/storage/technology-selection-store.d.ts +1 -1
- package/dist/storage/technology-selection-store.js +6 -3
- package/dist/storage/token-cache-store.js +3 -3
- package/dist/storage/token-ledger-store.js +13 -8
- package/dist/storage/transition-log.js +7 -4
- package/dist/storage/trash-store.js +15 -6
- package/dist/storage/usage-store.d.ts +1 -5
- package/dist/storage/usage-store.js +0 -35
- package/dist/storage/vector-store/migrator.js +7 -2
- package/dist/storage/vector-store/sqlite-adapter.js +4 -1
- package/dist/storage/webhook-server-store.js +2 -2
- package/dist/tools/api-spec-generator-handler.js +3 -2
- package/dist/tools/auto-update-handler.d.ts +4 -4
- package/dist/tools/auto-update-handler.js +4 -4
- package/dist/tools/browser-validate-handler.js +2 -1
- package/dist/tools/challenge-spec/platform-challenge-scenarios-b.js +8 -5
- package/dist/tools/challenge-spec/resilience-challenge-scenarios.d.ts +2 -1
- package/dist/tools/challenge-spec/resilience-challenge-scenarios.js +10 -7
- package/dist/tools/challenge-spec/scenario-collector.js +1 -1
- package/dist/tools/challenge-spec/scenarios-data.js +1 -1
- package/dist/tools/challenge-spec/scenarios-desktop.js +8 -3
- package/dist/tools/challenge-spec/scenarios-failure.js +7 -2
- package/dist/tools/challenge-spec/scenarios-utils.d.ts +1 -1
- package/dist/tools/challenge-spec/scenarios-utils.js +35 -11
- package/dist/tools/challenge-spec/security-challenge-scenarios.js +3 -3
- package/dist/tools/challenge-spec.js +5 -5
- package/dist/tools/check-readiness.js +1 -1
- package/dist/tools/clarify-requirements/multiple-choice.js +53 -41
- package/dist/tools/comments-handler.js +2 -3
- package/dist/tools/compliance-test-handler.js +2 -2
- package/dist/tools/configure-telemetry.js +41 -13
- package/dist/tools/create-spec/auto-pipeline.js +13 -1
- package/dist/tools/create-spec/autopilot-analyzer.d.ts +1 -1
- package/dist/tools/create-spec/autopilot-analyzer.js +2 -4
- package/dist/tools/create-spec/mcp-tool-contract.d.ts +10 -4
- package/dist/tools/create-spec/mcp-tool-contract.js +7 -36
- package/dist/tools/create-spec/post-creation.d.ts +2 -1
- package/dist/tools/create-spec/post-creation.js +56 -54
- package/dist/tools/create-spec/relevance-scorer.d.ts +1 -1
- package/dist/tools/create-spec/relevance-scorer.js +17 -1
- package/dist/tools/create-spec/spec-builder.js +2 -23
- package/dist/tools/create-spec/spec-created-outbox-consumer.d.ts +14 -0
- package/dist/tools/create-spec/spec-created-outbox-consumer.js +176 -0
- package/dist/tools/create-spec.d.ts +1 -0
- package/dist/tools/create-spec.js +802 -732
- package/dist/tools/define-ui-contract/agent-interaction-contract.js +2 -4
- package/dist/tools/define-ui-contract-desktop/desktop-contract.js +12 -4
- package/dist/tools/define-ui-contract-desktop/native-contract.js +7 -3
- package/dist/tools/define-ui-contract-extensions.js +2 -3
- package/dist/tools/define-ui-contract-mobile.js +5 -9
- package/dist/tools/define-ui-contract-web/component-tree.js +4 -3
- package/dist/tools/define-ui-contract.js +7 -4
- package/dist/tools/deploy/deploy-spec.js +2 -4
- package/dist/tools/deploy/deploy-status.js +2 -4
- package/dist/tools/design-schema/nosql-category-schemas.js +2 -3
- package/dist/tools/design-schema-sql/migrations.js +3 -2
- package/dist/tools/design-schema-sql/tables.js +4 -1
- package/dist/tools/design-schema.js +4 -3
- package/dist/tools/feedback-handler.js +2 -4
- package/dist/tools/gc-data-projects.js +5 -5
- package/dist/tools/generate-execution-plan.js +3 -4
- package/dist/tools/generate-sub-agent.js +2 -1
- package/dist/tools/generate-tests/generators/a11y-tests-generator.js +5 -4
- package/dist/tools/generate-tests/generators/advanced-testing-generator.js +5 -4
- package/dist/tools/generate-tests/generators/concurrency-test-generator/js-templates.js +9 -4
- package/dist/tools/generate-tests/generators/concurrency-test-generator.js +8 -4
- package/dist/tools/generate-tests/generators/database/detectors.js +9 -3
- package/dist/tools/generate-tests/generators/database/index.js +2 -4
- package/dist/tools/generate-tests/generators/event-test-generator.js +5 -4
- package/dist/tools/generate-tests/generators/game-tests-generator.js +2 -1
- package/dist/tools/generate-tests/generators/graphql-test-generator.js +11 -5
- package/dist/tools/generate-tests/generators/grpc-test-generator.js +2 -3
- package/dist/tools/generate-tests/generators/llm-security-test-generator.js +4 -3
- package/dist/tools/generate-tests/generators/local-first-test-generator.js +4 -3
- package/dist/tools/generate-tests/generators/mcp-tests-generator.js +11 -9
- package/dist/tools/generate-tests/generators/microservices/index.js +2 -3
- package/dist/tools/generate-tests/generators/otel-test-generator.js +6 -3
- package/dist/tools/generate-tests/generators/security/detectors.js +2 -5
- package/dist/tools/generate-tests/generators/security/index.js +2 -4
- package/dist/tools/generate-tests/generators/supply-chain-test-generator.js +2 -3
- package/dist/tools/generate-tests/generators/visual-regression-generator.js +14 -17
- package/dist/tools/generate-tests/generators/websocket-test-generator.js +2 -3
- package/dist/tools/generate-tests/test-helpers.js +11 -12
- package/dist/tools/generate-tests-content.js +4 -3
- package/dist/tools/generate-tests.js +7 -4
- package/dist/tools/git/branch-ops.d.ts +1 -1
- package/dist/tools/git/branch-ops.js +3 -2
- package/dist/tools/git/git-helpers.d.ts +0 -2
- package/dist/tools/git/git-helpers.js +7 -7
- package/dist/tools/github-pr-handler.js +10 -3
- package/dist/tools/heal-spec-docs.js +6 -53
- package/dist/tools/hook-generator-handler.js +6 -6
- package/dist/tools/init-constitution/platform-principles.js +4 -2
- package/dist/tools/init-project/agents-md-writer.js +14 -5
- package/dist/tools/init-project/claude-md-generator.js +19 -12
- package/dist/tools/init-project/handler.js +165 -75
- package/dist/tools/init-project/host-assets-writer.d.ts +1 -1
- package/dist/tools/init-project/host-assets-writer.js +30 -3
- package/dist/tools/init-project/lifecycle-helpers.js +3 -5
- package/dist/tools/init-project/lint-scaffolder.d.ts +3 -3
- package/dist/tools/init-project/lint-scaffolder.js +6 -2
- package/dist/tools/init-project/migration-runner.d.ts +8 -1
- package/dist/tools/init-project/migration-runner.js +68 -2
- package/dist/tools/init-project/per-client-files-writer.js +14 -4
- package/dist/tools/init-project/portable-index-reconciler.d.ts +4 -0
- package/dist/tools/init-project/portable-index-reconciler.js +14 -0
- package/dist/tools/init-project/result-builder.js +1 -3
- package/dist/tools/init-project/rules-generator.js +10 -2
- package/dist/tools/init-project/scaffold-writer.d.ts +1 -1
- package/dist/tools/init-project/scaffold-writer.js +17 -15
- package/dist/tools/jobs/handlers.d.ts +15 -0
- package/dist/tools/jobs/handlers.js +158 -0
- package/dist/tools/list-specs.js +39 -59
- package/dist/tools/manage-plugins-handler.js +17 -9
- package/dist/tools/merge-risk-handler.js +2 -2
- package/dist/tools/migrate-tech/advanced-handlers.js +3 -2
- package/dist/tools/migrate-tech/build-tool-handlers.js +3 -2
- package/dist/tools/migrate-tech/core-handlers.js +5 -2
- package/dist/tools/migrate-tech/data-handlers.js +6 -3
- package/dist/tools/migrate-tech-advanced/rollback-handlers.js +3 -2
- package/dist/tools/migrate-tech-advanced/service-handlers.js +5 -2
- package/dist/tools/oauth-handler.js +7 -1
- package/dist/tools/package-handoff.js +2 -0
- package/dist/tools/reconcile-spec.js +0 -27
- package/dist/tools/register-agent-squad-tools.js +2 -2
- package/dist/tools/register-platform-tools/design-stack-tools.js +11 -11
- package/dist/tools/register-platform-tools/lifecycle-infra-tools.js +7 -7
- package/dist/tools/register-sdd-tools.d.ts +1 -1
- package/dist/tools/register-sdd-tools.js +2 -24
- package/dist/tools/register-spec-tools/analysis-tools.js +8 -8
- package/dist/tools/register-spec-tools/core-spec-tools.js +48 -8
- package/dist/tools/registry/auth.js +13 -5
- package/dist/tools/registry/publish.js +7 -4
- package/dist/tools/resolve-project-path.d.ts +2 -2
- package/dist/tools/resolve-project-path.js +7 -7
- package/dist/tools/reverse-engineer/analyzer.js +14 -14
- package/dist/tools/rollback-release.js +3 -2
- package/dist/tools/safe-handler.d.ts +5 -13
- package/dist/tools/safe-handler.js +302 -194
- package/dist/tools/schema-generator-handler.js +2 -1
- package/dist/tools/schemas/index.d.ts +1 -1
- package/dist/tools/schemas/index.js +1 -1
- package/dist/tools/schemas/output-schemas.d.ts +88 -105
- package/dist/tools/schemas/output-schemas.js +12 -122
- package/dist/tools/schemas/plugins-schemas.js +0 -2
- package/dist/tools/schemas/registry.js +0 -2
- package/dist/tools/schemas/skill-registry-schemas.js +0 -2
- package/dist/tools/schemas/spec.d.ts +4 -0
- package/dist/tools/schemas/spec.js +3 -0
- package/dist/tools/schemas/validate-output-schema.d.ts +267 -0
- package/dist/tools/schemas/validate-output-schema.js +219 -0
- package/dist/tools/sentry-handler.js +6 -1
- package/dist/tools/skill-bootstrap-handler.js +7 -4
- package/dist/tools/spec-prompt-handler.js +3 -3
- package/dist/tools/status-handler.js +4 -0
- package/dist/tools/storage-bundle-handler.d.ts +9 -0
- package/dist/tools/storage-bundle-handler.js +29 -0
- package/dist/tools/storage-paths-handler.d.ts +9 -0
- package/dist/tools/storage-paths-handler.js +17 -0
- package/dist/tools/suggest-mcp-server.js +11 -5
- package/dist/tools/suggest-mcps.js +29 -9
- package/dist/tools/suggest-tooling/advanced-testing-catalog.js +4 -5
- package/dist/tools/suggest-tooling/build-tool-catalog.js +2 -1
- package/dist/tools/suggest-tooling/css-framework-catalog.js +13 -7
- package/dist/tools/suggest-tooling/framework-catalog.js +3 -5
- package/dist/tools/suggest-tooling/frontend-perf-catalog.js +2 -6
- package/dist/tools/suggest-tooling/handler.js +10 -4
- package/dist/tools/suggest-tooling/hypermedia-catalog.js +11 -3
- package/dist/tools/suggest-tooling/linting-catalog.js +4 -7
- package/dist/tools/suggest-tooling/llm-security-catalog.js +2 -1
- package/dist/tools/suggest-tooling/local-first-catalog.js +7 -5
- package/dist/tools/suggest-tooling/observability-catalog.js +3 -4
- package/dist/tools/suggest-tooling/otel-catalog.js +4 -1
- package/dist/tools/suggest-tooling/resilience-catalog.js +16 -5
- package/dist/tools/suggest-tooling/skills-catalog.js +10 -9
- package/dist/tools/suggest-tooling/supply-chain-catalog.js +2 -3
- package/dist/tools/supabase-handler.js +2 -1
- package/dist/tools/sync-spec-state-handler.d.ts +1 -1
- package/dist/tools/sync-spec-state-handler.js +1 -1
- package/dist/tools/token-intelligence-handler.js +2 -2
- package/dist/tools/token-recording.js +2 -2
- package/dist/tools/token-savings-handler.js +2 -2
- package/dist/tools/tool-entry.d.ts +4 -4
- package/dist/tools/tool-entry.js +3 -3
- package/dist/tools/tool-registry/core-tools.js +162 -15
- package/dist/tools/tool-registry/group-infra.js +37 -122
- package/dist/tools/tool-registry/group-quality-compliance.js +31 -38
- package/dist/tools/tool-registry/inventory.d.ts +2 -0
- package/dist/tools/tool-registry/inventory.js +2 -0
- package/dist/tools/tool-registry-helpers.d.ts +3 -3
- package/dist/tools/tool-registry-helpers.js +3 -3
- package/dist/tools/tool-usage-report/registered-tools.d.ts +1 -1
- package/dist/tools/tool-usage-report/registered-tools.js +3 -15
- package/dist/tools/update-status/approval-gates.d.ts +13 -0
- package/dist/tools/update-status/approval-gates.js +84 -0
- package/dist/tools/update-status/batch.js +4 -2
- package/dist/tools/update-status/dod-gates.d.ts +6 -24
- package/dist/tools/update-status/dod-gates.js +60 -135
- package/dist/tools/update-status/done-receipt-verifier.d.ts +15 -0
- package/dist/tools/update-status/done-receipt-verifier.js +158 -0
- package/dist/tools/update-status/evidence-gate.js +190 -3
- package/dist/tools/update-status/file-sync.d.ts +2 -1
- package/dist/tools/update-status/file-sync.js +80 -18
- package/dist/tools/update-status/gate-harness.d.ts +7 -0
- package/dist/tools/update-status/gate-harness.js +8 -0
- package/dist/tools/update-status/index.d.ts +2 -0
- package/dist/tools/update-status/index.js +307 -367
- package/dist/tools/update-status/qa-gate.d.ts +1 -1
- package/dist/tools/update-status/qa-gate.js +2 -2
- package/dist/tools/update-status/response-builder.js +3 -3
- package/dist/tools/update-status/side-effects.d.ts +2 -0
- package/dist/tools/update-status/side-effects.js +32 -39
- package/dist/tools/update-status/transition-guard.d.ts +4 -2
- package/dist/tools/update-status/transition-guard.js +89 -25
- package/dist/tools/update-status-actions.d.ts +4 -2
- package/dist/tools/update-status-actions.js +16 -14
- package/dist/tools/update-status-convention-gate.js +24 -23
- package/dist/tools/update-status-reconcile.js +2 -2
- package/dist/tools/usage-report.js +1 -16
- package/dist/tools/usage-stats.js +1 -18
- package/dist/tools/usage-tracking.d.ts +4 -0
- package/dist/tools/usage-tracking.js +20 -0
- package/dist/tools/validate-api-contract-handler.js +3 -3
- package/dist/tools/validate-lint.d.ts +1 -0
- package/dist/tools/validate-lint.js +21 -14
- package/dist/tools/validate.d.ts +4 -1
- package/dist/tools/validate.js +319 -31
- package/dist/transports/http-transport.js +87 -66
- package/dist/transports/mcp-types.d.ts +0 -2
- package/dist/transports/middleware/with-telemetry.js +3 -2
- package/dist/transports/session-context.js +1 -1
- package/dist/types/abortable-process.d.ts +2 -0
- package/dist/types/advanced-framework.js +0 -2
- package/dist/types/atomic-upgrade.d.ts +71 -0
- package/dist/types/atomic-upgrade.js +2 -0
- package/dist/types/cascade-hooks.d.ts +1 -1
- package/dist/types/ci.d.ts +0 -4
- package/dist/types/ci.js +0 -2
- package/dist/types/clarification-token.d.ts +1 -1
- package/dist/types/claude-code-runtime.d.ts +0 -27
- package/dist/types/commercial-migration.d.ts +17 -0
- package/dist/types/commercial-migration.js +2 -0
- package/dist/types/common/primitives.d.ts +0 -2
- package/dist/types/core-bridge.d.ts +81 -10
- package/dist/types/crash-shield-framework-rules.d.ts +24 -0
- package/dist/types/crash-shield-framework-rules.js +2 -0
- package/dist/types/dashboard.d.ts +3 -7
- package/dist/types/data-gc.d.ts +16 -0
- package/dist/types/deploy.js +0 -2
- package/dist/types/docs.d.ts +0 -1
- package/dist/types/durable-job.d.ts +78 -0
- package/dist/types/durable-job.js +2 -0
- package/dist/types/durable-validation.d.ts +158 -0
- package/dist/types/durable-validation.js +166 -0
- package/dist/types/errors/structured-error.d.ts +3 -3
- package/dist/types/estimation.d.ts +4 -0
- package/dist/types/evidence-gates.d.ts +17 -1
- package/dist/types/execution.d.ts +45 -0
- package/dist/types/gemini-integration.d.ts +0 -11
- package/dist/types/handoff-artifacts.d.ts +43 -0
- package/dist/types/hooks-advanced.d.ts +0 -13
- package/dist/types/impact-detection.d.ts +2 -2
- package/dist/types/index.d.ts +4 -6
- package/dist/types/index.js +3 -5
- package/dist/types/infrastructure.js +0 -2
- package/dist/types/kiro-integration.d.ts +0 -6
- package/dist/types/lifecycle.js +0 -2
- package/dist/types/migration/canonical-storage.d.ts +37 -0
- package/dist/types/migration/canonical-storage.js +2 -0
- package/dist/types/migration/index.d.ts +1 -1
- package/dist/types/native-worker.d.ts +48 -0
- package/dist/types/native-worker.js +2 -0
- package/dist/types/network-policy.d.ts +12 -0
- package/dist/types/network-policy.js +2 -0
- package/dist/types/oauth.js +0 -2
- package/dist/types/observability.d.ts +32 -0
- package/dist/types/outbox-worker.d.ts +35 -0
- package/dist/types/outbox-worker.js +11 -0
- package/dist/types/permissions-config.d.ts +0 -27
- package/dist/types/permissions-config.js +0 -2
- package/dist/types/plugin-install.d.ts +0 -11
- package/dist/types/plugin-install.js +0 -2
- package/dist/types/portal.d.ts +1 -0
- package/dist/types/product-public.d.ts +75 -0
- package/dist/types/product-public.js +2 -0
- package/dist/types/project/inputs.d.ts +2 -0
- package/dist/types/project/lint-scaffolder.d.ts +1 -1
- package/dist/types/project/mfe-detection.js +0 -2
- package/dist/types/project/platform-mobile.js +0 -2
- package/dist/types/project/platform-specialty.js +0 -2
- package/dist/types/project-knowledge-graph.d.ts +7 -0
- package/dist/types/runtime-database.d.ts +10 -0
- package/dist/types/runtime-database.js +2 -0
- package/dist/types/runtime-policy.d.ts +51 -0
- package/dist/types/runtime-policy.js +2 -0
- package/dist/types/safety.d.ts +4 -5
- package/dist/types/schema-registry.d.ts +12 -0
- package/dist/types/schema-registry.js +2 -0
- package/dist/types/security.d.ts +52 -0
- package/dist/types/session-safeguard.d.ts +0 -31
- package/dist/types/skill-registry.js +0 -2
- package/dist/types/spec/canonical-repair.d.ts +81 -0
- package/dist/types/spec/canonical-repair.js +2 -0
- package/dist/types/spec/core.d.ts +14 -0
- package/dist/types/spec/index.d.ts +1 -0
- package/dist/types/spec/index.js +1 -0
- package/dist/types/spec/inputs.d.ts +31 -0
- package/dist/types/spec-format.d.ts +24 -0
- package/dist/types/spec-lock-v2.d.ts +13 -7
- package/dist/types/spec-lock-v2.js +1 -1
- package/dist/types/spec-registry.js +0 -2
- package/dist/types/storage-bundle.d.ts +13 -0
- package/dist/types/storage-bundle.js +2 -0
- package/dist/types/storage-catalog.d.ts +18 -0
- package/dist/types/storage-catalog.js +2 -0
- package/dist/types/team-planner.js +0 -2
- package/dist/types/technology-registry.d.ts +35 -0
- package/dist/types/technology-registry.js +2 -0
- package/dist/types/technology-symbols.generated.d.ts +117 -0
- package/dist/types/technology-symbols.generated.js +2 -0
- package/dist/types/telemetry.d.ts +7 -4
- package/dist/types/transport.d.ts +2 -2
- package/dist/types/usage.d.ts +1 -36
- package/dist/types/usage.js +1 -1
- package/dist/types/validate-worker.d.ts +50 -0
- package/dist/types/validate-worker.js +2 -0
- package/dist/types/validation-evidence.d.ts +1 -1
- package/dist/types/validation-receipt.d.ts +104 -0
- package/dist/types/validation-receipt.js +2 -0
- package/dist/types/validation.d.ts +2 -2
- package/package.json +36 -21
- package/planu-native.json +1 -1
- package/planu-plugin.json +23 -40
- package/scripts/lib/pending-release-file.mjs +93 -0
- package/src/i18n/messages/en.json +0 -41
- package/src/i18n/messages/es.json +0 -41
- package/src/i18n/messages/pt.json +0 -41
- package/dist/cli/commands/activate.d.ts +0 -14
- package/dist/cli/commands/activate.js +0 -174
- package/dist/config/license-plans.json +0 -244
- package/dist/config/server-instructions.ts +0 -121
- package/dist/config/version-defaults.ts +0 -76
- package/dist/config/version.ts +0 -18
- package/dist/engine/ai-integration/gemini/settings-generator.d.ts +0 -4
- package/dist/engine/ai-integration/gemini/settings-generator.js +0 -195
- package/dist/engine/ai-integration/kiro/hooks-generator.d.ts +0 -6
- package/dist/engine/ai-integration/kiro/hooks-generator.js +0 -75
- package/dist/engine/hooks/full-spectrum-generator.d.ts +0 -32
- package/dist/engine/hooks/full-spectrum-generator.js +0 -117
- package/dist/engine/license-validator/config-loader.d.ts +0 -5
- package/dist/engine/license-validator/config-loader.js +0 -16
- package/dist/engine/license-validator/core.d.ts +0 -15
- package/dist/engine/license-validator/core.js +0 -151
- package/dist/engine/license-validator/fingerprint.d.ts +0 -3
- package/dist/engine/license-validator/fingerprint.js +0 -17
- package/dist/engine/license-validator/lemon-squeezy.d.ts +0 -5
- package/dist/engine/license-validator/lemon-squeezy.js +0 -55
- package/dist/engine/license-validator.d.ts +0 -5
- package/dist/engine/license-validator.js +0 -6
- package/dist/engine/product-intelligence/index.d.ts +0 -7
- package/dist/engine/product-intelligence/index.js +0 -211
- package/dist/engine/session/auto-save.d.ts +0 -18
- package/dist/engine/session/auto-save.js +0 -98
- package/dist/engine/session/context-snapshot.d.ts +0 -8
- package/dist/engine/session/context-snapshot.js +0 -49
- package/dist/engine/session/memory-sync.d.ts +0 -12
- package/dist/engine/session/memory-sync.js +0 -34
- package/dist/engine/session/session-diff.d.ts +0 -11
- package/dist/engine/session/session-diff.js +0 -42
- package/dist/engine/session/session-merge.d.ts +0 -12
- package/dist/engine/session/session-merge.js +0 -55
- package/dist/engine/session-safeguard/checkpoint-runner.d.ts +0 -4
- package/dist/engine/session-safeguard/checkpoint-runner.js +0 -70
- package/dist/engine/session-safeguard/learnings-buffer.d.ts +0 -16
- package/dist/engine/session-safeguard/learnings-buffer.js +0 -114
- package/dist/engine/session-safeguard/precompaction-drain.d.ts +0 -10
- package/dist/engine/session-safeguard/precompaction-drain.js +0 -82
- package/dist/engine/session-safeguard/unpushed-detector.d.ts +0 -7
- package/dist/engine/session-safeguard/unpushed-detector.js +0 -59
- package/dist/engine/spec-changelog/core.d.ts +0 -16
- package/dist/engine/spec-changelog/core.js +0 -176
- package/dist/engine/spec-changelog/diff.d.ts +0 -18
- package/dist/engine/spec-changelog/diff.js +0 -121
- package/dist/engine/spec-changelog/index.d.ts +0 -3
- package/dist/engine/spec-changelog/index.js +0 -4
- package/dist/engine/telemetry/geo-resolver.d.ts +0 -9
- package/dist/engine/telemetry/geo-resolver.js +0 -43
- package/dist/engine/trial-engine.d.ts +0 -5
- package/dist/engine/trial-engine.js +0 -14
- package/dist/engine/usage-tracker/rate-check.d.ts +0 -7
- package/dist/engine/usage-tracker/rate-check.js +0 -18
- package/dist/engine/usage-tracker/rate-limiter.d.ts +0 -14
- package/dist/engine/usage-tracker/rate-limiter.js +0 -73
- package/dist/engine/usage-tracker/trial.d.ts +0 -27
- package/dist/engine/usage-tracker/trial.js +0 -49
- package/dist/engine/webhook/event-handlers.d.ts +0 -25
- package/dist/engine/webhook/event-handlers.js +0 -89
- package/dist/engine/webhook/index.d.ts +0 -4
- package/dist/engine/webhook/index.js +0 -5
- package/dist/engine/webhook/server.d.ts +0 -12
- package/dist/engine/webhook/server.js +0 -249
- package/dist/engine/webhook/signature.d.ts +0 -16
- package/dist/engine/webhook/signature.js +0 -49
- package/dist/storage/data-dir-discovery.d.ts +0 -31
- package/dist/storage/data-dir-discovery.js +0 -140
- package/dist/storage/license-store.d.ts +0 -6
- package/dist/storage/license-store.js +0 -91
- package/dist/storage/migrations/cwd-to-absolute.d.ts +0 -25
- package/dist/storage/migrations/cwd-to-absolute.js +0 -281
- package/dist/storage/session-store.d.ts +0 -20
- package/dist/storage/session-store.js +0 -128
- package/dist/tools/activate-license.d.ts +0 -6
- package/dist/tools/activate-license.js +0 -132
- package/dist/tools/checkpoint-handler.d.ts +0 -3
- package/dist/tools/checkpoint-handler.js +0 -130
- package/dist/tools/create-spec/adapters/prior-decisions-hint.d.ts +0 -14
- package/dist/tools/create-spec/adapters/prior-decisions-hint.js +0 -30
- package/dist/tools/export-session.d.ts +0 -3
- package/dist/tools/export-session.js +0 -90
- package/dist/tools/init-project/ancestor-data-detector.d.ts +0 -22
- package/dist/tools/init-project/ancestor-data-detector.js +0 -81
- package/dist/tools/license-gate.d.ts +0 -18
- package/dist/tools/license-gate.js +0 -222
- package/dist/tools/license-status.d.ts +0 -3
- package/dist/tools/license-status.js +0 -93
- package/dist/tools/list-sessions.d.ts +0 -3
- package/dist/tools/list-sessions.js +0 -46
- package/dist/tools/planu-session-checkpoint.d.ts +0 -6
- package/dist/tools/planu-session-checkpoint.js +0 -42
- package/dist/tools/restore-session.d.ts +0 -3
- package/dist/tools/restore-session.js +0 -71
- package/dist/tools/spec-history.d.ts +0 -3
- package/dist/tools/spec-history.js +0 -59
- package/dist/tools/update-status/force-done-audit.d.ts +0 -2
- package/dist/tools/update-status/force-done-audit.js +0 -23
- package/dist/tools/webhook.d.ts +0 -6
- package/dist/tools/webhook.js +0 -150
- package/dist/types/changelog.d.ts +0 -49
- package/dist/types/changelog.js +0 -3
- package/dist/types/licensing.d.ts +0 -109
- package/dist/types/licensing.js +0 -4
- package/dist/types/migration/cwd-to-absolute.d.ts +0 -8
- package/dist/types/migration/cwd-to-absolute.js +0 -3
- package/dist/types/product-intelligence.d.ts +0 -60
- package/dist/types/product-intelligence.js +0 -3
- package/dist/types/session.d.ts +0 -84
- package/dist/types/session.js +0 -3
- package/dist/types/webhook.d.ts +0 -62
- package/dist/types/webhook.js +0 -4
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ToolResult } from '../../types/index.js';
|
|
2
2
|
import type { Spec } from '../../types/spec/core.js';
|
|
3
3
|
/** SPEC-642 / SPEC-1111 / SPEC-1144: verify canonical QA evidence before done. */
|
|
4
|
-
export declare function checkQaGate(spec: Spec, projectPath: string | undefined, force: boolean): Promise<ToolResult | null>;
|
|
4
|
+
export declare function checkQaGate(spec: Spec, projectPath: string | undefined, force: boolean, canonicalProjectId?: string): Promise<ToolResult | null>;
|
|
5
5
|
//# sourceMappingURL=qa-gate.d.ts.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { getToolExecutionSignal } from '../safe-handler.js';
|
|
2
2
|
/** SPEC-642 / SPEC-1111 / SPEC-1144: verify canonical QA evidence before done. */
|
|
3
|
-
export async function checkQaGate(spec, projectPath, force) {
|
|
3
|
+
export async function checkQaGate(spec, projectPath, force, canonicalProjectId) {
|
|
4
4
|
if (force || !projectPath) {
|
|
5
5
|
return null;
|
|
6
6
|
}
|
|
7
7
|
const specId = spec.id;
|
|
8
8
|
const { runQaGate } = await import('../../engine/qa-gate.js');
|
|
9
9
|
const effectiveResult = await runQaGate(spec, projectPath, {
|
|
10
|
-
projectId:
|
|
10
|
+
projectId: canonicalProjectId,
|
|
11
11
|
signal: getToolExecutionSignal(),
|
|
12
12
|
});
|
|
13
13
|
if (effectiveResult.passed) {
|
|
@@ -84,7 +84,7 @@ export function buildStatusResponse(result, specId, currentStatus, newStatus, re
|
|
|
84
84
|
const toEmoji = STATUS_EMOJIS[newStatus];
|
|
85
85
|
const r = result;
|
|
86
86
|
const lines = [
|
|
87
|
-
|
|
87
|
+
`**${specId}** moved: ${fromEmoji} \`${currentStatus}\` → ${toEmoji} \`${newStatus}\``,
|
|
88
88
|
];
|
|
89
89
|
if (r.committed && r.transitionId) {
|
|
90
90
|
lines.push(`\nTransition committed: \`${r.transitionId}\``);
|
|
@@ -125,7 +125,7 @@ export function buildStatusResponse(result, specId, currentStatus, newStatus, re
|
|
|
125
125
|
lines.push(`\n✅ Validate score: ${String(r.validateScore)}/100${sourceSuffix}`);
|
|
126
126
|
}
|
|
127
127
|
if (r.cascade.affectedSpecs.length > 0) {
|
|
128
|
-
lines.push(`\n🔗 Downstream specs affected: ${r.cascade.affectedSpecs.
|
|
128
|
+
lines.push(`\n🔗 Downstream specs affected: ${r.cascade.affectedSpecs.join(', ')}`);
|
|
129
129
|
}
|
|
130
130
|
if (r.codeRealityWarning) {
|
|
131
131
|
lines.push(`\n${r.codeRealityWarning}`);
|
|
@@ -200,7 +200,7 @@ export function buildStatusResponse(result, specId, currentStatus, newStatus, re
|
|
|
200
200
|
const markdownText = reconciliationMarkdown
|
|
201
201
|
? `${withNextSteps}\n\n${reconciliationMarkdown}`
|
|
202
202
|
: withNextSteps;
|
|
203
|
-
const displayTitle = specTitle ??
|
|
203
|
+
const displayTitle = specTitle ?? specId;
|
|
204
204
|
const humanSummary = buildUpdateStatusSummary(displayTitle, newStatus);
|
|
205
205
|
const warningItems = [
|
|
206
206
|
r.protectedBranchWarning,
|
|
@@ -35,6 +35,7 @@ export declare function fireAndForgetSideEffects(params: {
|
|
|
35
35
|
projectId: string;
|
|
36
36
|
spec: Spec;
|
|
37
37
|
currentStatus: SpecStatus;
|
|
38
|
+
projectPath?: string;
|
|
38
39
|
}): void;
|
|
39
40
|
/**
|
|
40
41
|
* SPEC-772: Run cascade and await fast hooks (fast: true) within a 2s window.
|
|
@@ -50,5 +51,6 @@ export declare function runCascadeForResponse(params: {
|
|
|
50
51
|
projectId: string;
|
|
51
52
|
spec: Spec;
|
|
52
53
|
currentStatus: SpecStatus;
|
|
54
|
+
projectPath?: string;
|
|
53
55
|
}): Promise<RunCascadeResult | null>;
|
|
54
56
|
//# sourceMappingURL=side-effects.d.ts.map
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import { specStore } from '../../storage/index.js';
|
|
2
2
|
import { runCascade } from '../../engine/cascade-hooks/runner.js';
|
|
3
3
|
import { appendAutopilotLogEntry } from '../../storage/autopilot-log-store.js';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const MAX_DEDUPED_TRANSITIONS = 1_000;
|
|
4
|
+
import { redactFailureMessage, reportClassifiedDegradation, } from '../../errors/classified-degradation.js';
|
|
5
|
+
import { getRuntimePolicy } from '../../engine/runtime-policy.js';
|
|
7
6
|
const queuedTransitions = new Map();
|
|
8
7
|
function rememberTransition(transitionKey) {
|
|
9
8
|
if (queuedTransitions.has(transitionKey)) {
|
|
10
9
|
return false;
|
|
11
10
|
}
|
|
12
|
-
if (queuedTransitions.size >=
|
|
11
|
+
if (queuedTransitions.size >= getRuntimePolicy().postCommit.maximumRememberedTransitions) {
|
|
13
12
|
const oldest = queuedTransitions.keys().next().value;
|
|
14
13
|
if (oldest !== undefined) {
|
|
15
14
|
queuedTransitions.delete(oldest);
|
|
@@ -20,8 +19,9 @@ function rememberTransition(transitionKey) {
|
|
|
20
19
|
}
|
|
21
20
|
async function runBoundedPostCommitTask(args) {
|
|
22
21
|
const { projectId, specId, transitionId, task } = args;
|
|
23
|
-
const
|
|
24
|
-
const
|
|
22
|
+
const policy = getRuntimePolicy().postCommit;
|
|
23
|
+
const timeoutMs = task.timeoutMs ?? policy.defaultTaskTimeoutMs;
|
|
24
|
+
const leaseMs = Math.max(policy.minimumLeaseMs, timeoutMs * policy.leaseMultiplier);
|
|
25
25
|
const claim = await specStore.claimPostCommitTask(projectId, specId, transitionId, task.name, {
|
|
26
26
|
leaseMs,
|
|
27
27
|
});
|
|
@@ -39,14 +39,10 @@ async function runBoundedPostCommitTask(args) {
|
|
|
39
39
|
leaseMs,
|
|
40
40
|
})
|
|
41
41
|
.catch((error) => {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
transitionId,
|
|
45
|
-
task: task.name,
|
|
46
|
-
error: error instanceof Error ? error.message : String(error),
|
|
47
|
-
});
|
|
42
|
+
/* reliability-optional: POST_COMMIT_LEASE_RENEW — timeout path settles the durable task */
|
|
43
|
+
reportClassifiedDegradation('POST_COMMIT_LEASE_RENEW', error);
|
|
48
44
|
});
|
|
49
|
-
}, Math.max(
|
|
45
|
+
}, Math.max(policy.minimumHeartbeatMs, Math.floor(leaseMs / policy.leaseMultiplier)));
|
|
50
46
|
heartbeat.unref();
|
|
51
47
|
const runPromise = Promise.resolve().then(() => task.run(controller.signal));
|
|
52
48
|
const timeout = new Promise((resolve) => {
|
|
@@ -71,31 +67,25 @@ async function runBoundedPostCommitTask(args) {
|
|
|
71
67
|
});
|
|
72
68
|
}
|
|
73
69
|
catch (logError) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
transitionId,
|
|
77
|
-
task: task.name,
|
|
78
|
-
error: logError instanceof Error ? logError.message : String(logError),
|
|
79
|
-
});
|
|
70
|
+
/* reliability-optional: LATE_TASK_COMPLETION_LOG — durable task is already settled */
|
|
71
|
+
reportClassifiedDegradation('LATE_TASK_COMPLETION_LOG', logError);
|
|
80
72
|
}
|
|
81
73
|
return;
|
|
82
74
|
}
|
|
83
75
|
await specStore.settlePostCommitTask(projectId, specId, transitionId, task.name, claim.executionId, { status: 'done' });
|
|
84
76
|
}
|
|
85
77
|
catch (error) {
|
|
86
|
-
|
|
78
|
+
/* reliability-optional: POST_COMMIT_TASK_FAILURE — durable failed state is persisted below */
|
|
79
|
+
reportClassifiedDegradation('POST_COMMIT_TASK_FAILURE', error);
|
|
80
|
+
const message = redactFailureMessage(error);
|
|
87
81
|
await specStore
|
|
88
82
|
.settlePostCommitTask(projectId, specId, transitionId, task.name, claim.executionId, {
|
|
89
83
|
status: 'failed',
|
|
90
84
|
error: message,
|
|
91
85
|
})
|
|
92
86
|
.catch((settleError) => {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
transitionId,
|
|
96
|
-
task: task.name,
|
|
97
|
-
error: settleError instanceof Error ? settleError.message : String(settleError),
|
|
98
|
-
});
|
|
87
|
+
/* reliability-optional: TASK_FAILURE_SETTLEMENT — recovery lease remains retryable */
|
|
88
|
+
reportClassifiedDegradation('TASK_FAILURE_SETTLEMENT', settleError);
|
|
99
89
|
});
|
|
100
90
|
try {
|
|
101
91
|
await appendAutopilotLogEntry(projectId, {
|
|
@@ -108,12 +98,8 @@ async function runBoundedPostCommitTask(args) {
|
|
|
108
98
|
});
|
|
109
99
|
}
|
|
110
100
|
catch (logError) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
transitionId,
|
|
114
|
-
task: task.name,
|
|
115
|
-
error: logError instanceof Error ? logError.message : String(logError),
|
|
116
|
-
});
|
|
101
|
+
/* reliability-optional: TASK_FAILURE_LOG — durable failure state remains authoritative */
|
|
102
|
+
reportClassifiedDegradation('TASK_FAILURE_LOG', logError);
|
|
117
103
|
}
|
|
118
104
|
}
|
|
119
105
|
finally {
|
|
@@ -167,7 +153,9 @@ export async function maybeSafePushOnDone(projectPath, newStatus) {
|
|
|
167
153
|
}
|
|
168
154
|
return { label: 'autopush', message: `Not pushed: ${result.reason} — ${result.message}` };
|
|
169
155
|
}
|
|
170
|
-
catch {
|
|
156
|
+
catch (error) {
|
|
157
|
+
/* reliability-optional: AUTOPUSH_RESULT_UNAVAILABLE — optional result is explicitly absent */
|
|
158
|
+
reportClassifiedDegradation('AUTOPUSH_RESULT_UNAVAILABLE', error);
|
|
171
159
|
return null;
|
|
172
160
|
}
|
|
173
161
|
}
|
|
@@ -184,7 +172,9 @@ async function readDisabledByConfig(projectPath) {
|
|
|
184
172
|
const disabled = parsed.cascadeHooks?.disabled;
|
|
185
173
|
return Array.isArray(disabled) ? new Set(disabled) : new Set();
|
|
186
174
|
}
|
|
187
|
-
catch {
|
|
175
|
+
catch (error) {
|
|
176
|
+
/* reliability-optional: CASCADE_CONFIG_UNAVAILABLE — default empty disable set is explicit */
|
|
177
|
+
reportClassifiedDegradation('CASCADE_CONFIG_UNAVAILABLE', error);
|
|
188
178
|
return new Set();
|
|
189
179
|
}
|
|
190
180
|
}
|
|
@@ -203,7 +193,7 @@ function readDisabledByEnv() {
|
|
|
203
193
|
/** Fire-and-forget side effects after a successful status transition. */
|
|
204
194
|
export function fireAndForgetSideEffects(params) {
|
|
205
195
|
const { knowledge, allSpecs, specId, newStatus, validateScore, projectId, spec, currentStatus } = params;
|
|
206
|
-
const projectPath = knowledge?.projectPath;
|
|
196
|
+
const projectPath = params.projectPath ?? knowledge?.projectPath;
|
|
207
197
|
const ctx = {
|
|
208
198
|
specId,
|
|
209
199
|
spec,
|
|
@@ -221,8 +211,9 @@ export function fireAndForgetSideEffects(params) {
|
|
|
221
211
|
Promise.resolve(readDisabledByEnv()),
|
|
222
212
|
]);
|
|
223
213
|
await runCascade(ctx, { disabledByConfig, disabledByEnv });
|
|
224
|
-
})().catch(() => {
|
|
225
|
-
/*
|
|
214
|
+
})().catch((error) => {
|
|
215
|
+
/* reliability-optional: ASYNC_CASCADE_FAILURE — post-commit task ledger captures retry state */
|
|
216
|
+
reportClassifiedDegradation('ASYNC_CASCADE_FAILURE', error);
|
|
226
217
|
});
|
|
227
218
|
}
|
|
228
219
|
/**
|
|
@@ -232,7 +223,7 @@ export function fireAndForgetSideEffects(params) {
|
|
|
232
223
|
*/
|
|
233
224
|
export async function runCascadeForResponse(params) {
|
|
234
225
|
const { knowledge, allSpecs, specId, newStatus, validateScore, projectId, spec, currentStatus } = params;
|
|
235
|
-
const projectPath = knowledge?.projectPath;
|
|
226
|
+
const projectPath = params.projectPath ?? knowledge?.projectPath;
|
|
236
227
|
const ctx = {
|
|
237
228
|
specId,
|
|
238
229
|
spec,
|
|
@@ -250,7 +241,9 @@ export async function runCascadeForResponse(params) {
|
|
|
250
241
|
]);
|
|
251
242
|
return await runCascade(ctx, { disabledByConfig, disabledByEnv });
|
|
252
243
|
}
|
|
253
|
-
catch {
|
|
244
|
+
catch (error) {
|
|
245
|
+
/* reliability-optional: CASCADE_SYNC_FAILURE — explicit null reports unavailable result */
|
|
246
|
+
reportClassifiedDegradation('CASCADE_SYNC_FAILURE', error);
|
|
254
247
|
return null;
|
|
255
248
|
}
|
|
256
249
|
}
|
|
@@ -53,15 +53,17 @@ export declare function checkTransition(currentStatus: SpecStatus, newStatus: Sp
|
|
|
53
53
|
* Returns an error ToolResult if blocked, null if passed.
|
|
54
54
|
*/
|
|
55
55
|
export declare function checkDorGate(spec: Spec, specId: string, projectId: string, newStatus: SpecStatus): ToolResult | null;
|
|
56
|
+
/** Reject implementation until every declared dependency exists and is done. */
|
|
57
|
+
export declare function checkImplementationDependencyGate(spec: Spec, allSpecs: readonly Spec[], newStatus: SpecStatus): ToolResult | null;
|
|
56
58
|
/**
|
|
57
59
|
* SPEC-632: Block transition to 'approved' if ambiguity score < 70.
|
|
58
|
-
*
|
|
60
|
+
* Fails closed when the spec cannot be scored.
|
|
59
61
|
*/
|
|
60
62
|
export declare function checkAmbiguityGate(spec: Spec, newStatus: SpecStatus): Promise<ToolResult | null>;
|
|
61
63
|
/**
|
|
62
64
|
* SPEC-769/SPEC-492: Readiness gate — block 'review'/'approved' when spec
|
|
63
65
|
* quality is too low or the persisted spec document is not English.
|
|
64
|
-
*
|
|
66
|
+
* Fails closed if spec.md cannot be read or evaluated.
|
|
65
67
|
*
|
|
66
68
|
* - 0 criteria → InteractiveQuestion (hard block, no force path)
|
|
67
69
|
* - score < 70 on approved && !forceApprove → InteractiveQuestion with 3 options
|
|
@@ -4,12 +4,14 @@ import { ti } from '../../i18n/index.js';
|
|
|
4
4
|
import { validateDoR } from '../../engine/dor-dod.js';
|
|
5
5
|
import { dispatchFeedbackEvent } from '../learn.js';
|
|
6
6
|
import { scoreAmbiguityFromPath } from '../../engine/ambiguity-scorer.js';
|
|
7
|
-
import {
|
|
7
|
+
import { checkSpecReadiness } from '../../engine/readiness-checker.js';
|
|
8
8
|
import { validateEnglishOnlySpecText } from '../../engine/spec-language/english-only.js';
|
|
9
9
|
import { checkGroundedSpecContract } from '../../engine/spec-grounding/contract.js';
|
|
10
10
|
import { checkGenericSpecOutput } from '../../engine/spec-quality/generic-output-gate.js';
|
|
11
11
|
import { formatKeyValue } from '../output-formatter.js';
|
|
12
12
|
import { getResolvedChallengeEvidence, requiredResolvedChallenges, } from '../challenge-spec/challenge-report.js';
|
|
13
|
+
import { evaluateSpecDependencies } from '../../engine/dependency-evaluator.js';
|
|
14
|
+
import { reportClassifiedDegradation } from '../../errors/classified-degradation.js';
|
|
13
15
|
/**
|
|
14
16
|
* Valid state transitions for spec lifecycle.
|
|
15
17
|
* draft -> review -> approved -> implementing -> done
|
|
@@ -129,7 +131,8 @@ export function checkDorGate(spec, specId, projectId, newStatus) {
|
|
|
129
131
|
delta: { failedCount: dorResult.blockingItems.length },
|
|
130
132
|
timestamp: new Date().toISOString(),
|
|
131
133
|
}).catch((err) => {
|
|
132
|
-
|
|
134
|
+
/* reliability-optional: DOR_FEEDBACK_EVENT — blocking gate result remains authoritative */
|
|
135
|
+
reportClassifiedDegradation('DOR_FEEDBACK_EVENT', err);
|
|
133
136
|
});
|
|
134
137
|
return {
|
|
135
138
|
content: [
|
|
@@ -162,16 +165,47 @@ export function checkDorGate(spec, specId, projectId, newStatus) {
|
|
|
162
165
|
}
|
|
163
166
|
return null;
|
|
164
167
|
}
|
|
168
|
+
/** Reject implementation until every declared dependency exists and is done. */
|
|
169
|
+
export function checkImplementationDependencyGate(spec, allSpecs, newStatus) {
|
|
170
|
+
if (newStatus !== 'implementing' || isReverseTransition(spec.status, newStatus)) {
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
const evaluation = evaluateSpecDependencies(spec, allSpecs);
|
|
174
|
+
if (evaluation.allowed) {
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
const blockingIds = [...new Set(evaluation.blockers.map((blocker) => blocker.specId))];
|
|
178
|
+
return {
|
|
179
|
+
content: [
|
|
180
|
+
{
|
|
181
|
+
type: 'text',
|
|
182
|
+
text: `Dependency gate blocked implementation: ${evaluation.blockers
|
|
183
|
+
.map((blocker) => `${blocker.specId} (${blocker.reason})`)
|
|
184
|
+
.join(', ')}.`,
|
|
185
|
+
},
|
|
186
|
+
],
|
|
187
|
+
isError: true,
|
|
188
|
+
structuredContent: {
|
|
189
|
+
error: 'DEPENDENCY_GATE_BLOCKED',
|
|
190
|
+
code: 'UNMET_DEPENDENCIES',
|
|
191
|
+
blockingIds,
|
|
192
|
+
blockers: evaluation.blockers,
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
}
|
|
165
196
|
/**
|
|
166
197
|
* SPEC-632: Block transition to 'approved' if ambiguity score < 70.
|
|
167
|
-
*
|
|
198
|
+
* Fails closed when the spec cannot be scored.
|
|
168
199
|
*/
|
|
169
200
|
export async function checkAmbiguityGate(spec, newStatus) {
|
|
170
201
|
if (newStatus !== 'approved' || !spec.specPath) {
|
|
171
202
|
return null;
|
|
172
203
|
}
|
|
173
204
|
const report = await scoreAmbiguityFromPath(spec.specPath);
|
|
174
|
-
if (!report
|
|
205
|
+
if (!report) {
|
|
206
|
+
return gateUnavailableResult('AMBIGUITY_GATE_UNAVAILABLE', 'Ambiguity scoring failed.');
|
|
207
|
+
}
|
|
208
|
+
if (report.score >= 70) {
|
|
175
209
|
return null;
|
|
176
210
|
}
|
|
177
211
|
return {
|
|
@@ -201,7 +235,7 @@ export async function checkAmbiguityGate(spec, newStatus) {
|
|
|
201
235
|
/**
|
|
202
236
|
* SPEC-769/SPEC-492: Readiness gate — block 'review'/'approved' when spec
|
|
203
237
|
* quality is too low or the persisted spec document is not English.
|
|
204
|
-
*
|
|
238
|
+
* Fails closed if spec.md cannot be read or evaluated.
|
|
205
239
|
*
|
|
206
240
|
* - 0 criteria → InteractiveQuestion (hard block, no force path)
|
|
207
241
|
* - score < 70 on approved && !forceApprove → InteractiveQuestion with 3 options
|
|
@@ -218,13 +252,14 @@ export async function checkReadinessGate(spec, newStatus, forceApprove) {
|
|
|
218
252
|
try {
|
|
219
253
|
body = await readFile(spec.specPath, 'utf-8');
|
|
220
254
|
}
|
|
221
|
-
catch {
|
|
222
|
-
|
|
223
|
-
|
|
255
|
+
catch (error) {
|
|
256
|
+
/* reliability-optional: READINESS_SPEC_UNREADABLE — transition fails closed below */
|
|
257
|
+
reportClassifiedDegradation('READINESS_SPEC_UNREADABLE', error);
|
|
258
|
+
return readinessUnavailable('READINESS_SPEC_UNREADABLE', error instanceof Error ? error.message : 'spec.md could not be read');
|
|
224
259
|
}
|
|
225
260
|
// Guard: mock environments return undefined; unreadable files return non-string
|
|
226
261
|
if (typeof body !== 'string') {
|
|
227
|
-
return
|
|
262
|
+
return readinessUnavailable('READINESS_SPEC_INVALID', 'spec.md did not return text content');
|
|
228
263
|
}
|
|
229
264
|
const languageValidation = validateEnglishOnlySpecText(body);
|
|
230
265
|
if (!languageValidation.ok) {
|
|
@@ -296,16 +331,21 @@ export async function checkReadinessGate(spec, newStatus, forceApprove) {
|
|
|
296
331
|
qualityWarnings: [],
|
|
297
332
|
};
|
|
298
333
|
}
|
|
299
|
-
let
|
|
300
|
-
let warnings;
|
|
301
|
-
let criteriaCount;
|
|
334
|
+
let readiness;
|
|
302
335
|
try {
|
|
303
|
-
|
|
336
|
+
readiness = await checkSpecReadiness(spec, 'strict');
|
|
304
337
|
}
|
|
305
|
-
catch {
|
|
306
|
-
|
|
338
|
+
catch (error) {
|
|
339
|
+
/* reliability-optional: READINESS_EVALUATION_FAILED — transition fails closed below */
|
|
340
|
+
reportClassifiedDegradation('READINESS_EVALUATION_FAILED', error);
|
|
341
|
+
return readinessUnavailable('READINESS_EVALUATION_FAILED', error instanceof Error ? error.message : 'readiness evaluation failed');
|
|
307
342
|
}
|
|
308
|
-
|
|
343
|
+
const { score } = readiness;
|
|
344
|
+
const blockers = [...readiness.issues.blockers];
|
|
345
|
+
const warnings = [...readiness.issues.warnings];
|
|
346
|
+
const issues = [...blockers, ...warnings];
|
|
347
|
+
const hasNoCriteria = readiness.issues.breakdown.criteria === 0;
|
|
348
|
+
if (hasNoCriteria) {
|
|
309
349
|
if (newStatus === 'review') {
|
|
310
350
|
return {
|
|
311
351
|
blockResult: {
|
|
@@ -320,6 +360,7 @@ export async function checkReadinessGate(spec, newStatus, forceApprove) {
|
|
|
320
360
|
error: 'READINESS_GATE_BLOCKED',
|
|
321
361
|
score,
|
|
322
362
|
threshold: 70,
|
|
363
|
+
blockers,
|
|
323
364
|
warnings,
|
|
324
365
|
fixHint: 'Add at least 3 testable acceptance criteria before moving to review.',
|
|
325
366
|
},
|
|
@@ -351,24 +392,32 @@ export async function checkReadinessGate(spec, newStatus, forceApprove) {
|
|
|
351
392
|
},
|
|
352
393
|
],
|
|
353
394
|
structuredContent: {
|
|
395
|
+
error: 'READINESS_GATE_BLOCKED',
|
|
396
|
+
score,
|
|
397
|
+
threshold: 70,
|
|
398
|
+
blockers,
|
|
399
|
+
warnings,
|
|
354
400
|
interactiveQuestions: [question],
|
|
355
401
|
},
|
|
356
402
|
},
|
|
357
403
|
qualityWarnings: [],
|
|
358
404
|
};
|
|
359
405
|
}
|
|
360
|
-
if (
|
|
406
|
+
if (readiness.ready) {
|
|
361
407
|
return { blockResult: null, qualityWarnings: [] };
|
|
362
408
|
}
|
|
409
|
+
const diagnostic = score < 70
|
|
410
|
+
? `score ${String(score)}/100 is below the 70 threshold`
|
|
411
|
+
: `score ${String(score)}/100 meets the threshold, but ${String(blockers.length)} canonical blocker(s) remain`;
|
|
412
|
+
const issuesSummary = issues.slice(0, 3).join('; ');
|
|
363
413
|
if (newStatus === 'review') {
|
|
364
|
-
const warningsSummary = warnings.slice(0, 3).join('; ');
|
|
365
414
|
return {
|
|
366
415
|
blockResult: {
|
|
367
416
|
content: [
|
|
368
417
|
{
|
|
369
418
|
type: 'text',
|
|
370
|
-
text: `Readiness gate blocked transition to review:
|
|
371
|
-
`
|
|
419
|
+
text: `Readiness gate blocked transition to review: ${diagnostic}. ` +
|
|
420
|
+
`Issues: ${issuesSummary}`,
|
|
372
421
|
},
|
|
373
422
|
],
|
|
374
423
|
isError: true,
|
|
@@ -376,6 +425,7 @@ export async function checkReadinessGate(spec, newStatus, forceApprove) {
|
|
|
376
425
|
error: 'READINESS_GATE_BLOCKED',
|
|
377
426
|
score,
|
|
378
427
|
threshold: 70,
|
|
428
|
+
blockers,
|
|
379
429
|
warnings,
|
|
380
430
|
fixHint: 'Complete the spec before moving from draft to review.',
|
|
381
431
|
},
|
|
@@ -386,12 +436,11 @@ export async function checkReadinessGate(spec, newStatus, forceApprove) {
|
|
|
386
436
|
// Score < 70
|
|
387
437
|
if (forceApprove) {
|
|
388
438
|
// Caller wants to force through — proceed with warnings attached
|
|
389
|
-
return { blockResult: null, qualityWarnings:
|
|
439
|
+
return { blockResult: null, qualityWarnings: issues };
|
|
390
440
|
}
|
|
391
|
-
const warningsSummary = warnings.slice(0, 3).join('; ');
|
|
392
441
|
const question = {
|
|
393
442
|
header: 'Readiness gate',
|
|
394
|
-
question: `Spec readiness
|
|
443
|
+
question: `Spec readiness ${diagnostic}. How to proceed?`,
|
|
395
444
|
multiSelect: false,
|
|
396
445
|
options: [
|
|
397
446
|
{
|
|
@@ -400,7 +449,7 @@ export async function checkReadinessGate(spec, newStatus, forceApprove) {
|
|
|
400
449
|
},
|
|
401
450
|
{
|
|
402
451
|
label: 'view_missing',
|
|
403
|
-
description: `View missing items: ${
|
|
452
|
+
description: `View missing items: ${issuesSummary}`,
|
|
404
453
|
},
|
|
405
454
|
{
|
|
406
455
|
label: 'force_approve',
|
|
@@ -413,16 +462,31 @@ export async function checkReadinessGate(spec, newStatus, forceApprove) {
|
|
|
413
462
|
content: [
|
|
414
463
|
{
|
|
415
464
|
type: 'text',
|
|
416
|
-
text: `Readiness gate:
|
|
465
|
+
text: `Readiness gate: ${diagnostic}. Issues: ${issuesSummary}`,
|
|
417
466
|
},
|
|
418
467
|
],
|
|
419
468
|
structuredContent: {
|
|
469
|
+
error: 'READINESS_GATE_BLOCKED',
|
|
470
|
+
score,
|
|
471
|
+
threshold: 70,
|
|
472
|
+
blockers,
|
|
473
|
+
warnings,
|
|
420
474
|
interactiveQuestions: [question],
|
|
421
475
|
},
|
|
422
476
|
},
|
|
423
477
|
qualityWarnings: [],
|
|
424
478
|
};
|
|
425
479
|
}
|
|
480
|
+
function gateUnavailableResult(code, message) {
|
|
481
|
+
return {
|
|
482
|
+
content: [{ type: 'text', text: `${message} Transition blocked until the gate succeeds.` }],
|
|
483
|
+
isError: true,
|
|
484
|
+
structuredContent: { error: code, message, retryable: true },
|
|
485
|
+
};
|
|
486
|
+
}
|
|
487
|
+
function readinessUnavailable(code, message) {
|
|
488
|
+
return { blockResult: gateUnavailableResult(code, message), qualityWarnings: [] };
|
|
489
|
+
}
|
|
426
490
|
/**
|
|
427
491
|
* SPEC-964: Challenge gate — block 'review' if challenge_spec was never run
|
|
428
492
|
* or does not contain enough explicit resolution evidence.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ConstitutionViolation } from '../types/index.js';
|
|
2
2
|
export declare function runImplementingActions(projectId: string, specId: string, options?: {
|
|
3
3
|
deferSideEffects?: boolean;
|
|
4
|
+
projectPath?: string;
|
|
4
5
|
}): Promise<{
|
|
5
6
|
autoBranch: string | undefined;
|
|
6
7
|
protectedBranchWarning: string | null;
|
|
@@ -8,9 +9,10 @@ export declare function runImplementingActions(projectId: string, specId: string
|
|
|
8
9
|
autopilotSummary: string[];
|
|
9
10
|
}>;
|
|
10
11
|
/** Create the implementation branch and refresh derived context after commit. */
|
|
11
|
-
export declare function runImplementingSideEffects(projectId: string, specId: string): Promise<string | undefined>;
|
|
12
|
+
export declare function runImplementingSideEffects(projectId: string, specId: string, transitionProjectPath?: string): Promise<string | undefined>;
|
|
12
13
|
export declare function runDoneActions(projectId: string, specId: string, gitBranch: string | undefined, options?: {
|
|
13
14
|
deferSideEffects?: boolean;
|
|
15
|
+
projectPath?: string;
|
|
14
16
|
}): Promise<{
|
|
15
17
|
mergeWarning: string | null;
|
|
16
18
|
prSuggestion: {
|
|
@@ -22,7 +24,7 @@ export declare function runDoneActions(projectId: string, specId: string, gitBra
|
|
|
22
24
|
autopilotSummary: string[];
|
|
23
25
|
}>;
|
|
24
26
|
/** Run cleanup and state refreshes only after the done transition is durable. */
|
|
25
|
-
export declare function runDoneSideEffects(projectId: string, specId: string, gitBranch: string | undefined): Promise<void>;
|
|
27
|
+
export declare function runDoneSideEffects(projectId: string, specId: string, gitBranch: string | undefined, transitionProjectPath?: string): Promise<void>;
|
|
26
28
|
/**
|
|
27
29
|
* Best-effort constitution compliance check for status transitions.
|
|
28
30
|
* Returns warnings (never blocks the transition).
|
|
@@ -8,13 +8,17 @@ function normalizeRejectedReasons(results) {
|
|
|
8
8
|
return reason instanceof Error ? reason : new Error(String(reason));
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
|
+
function suppliedProjectPath(value) {
|
|
12
|
+
const trimmed = value?.trim();
|
|
13
|
+
return trimmed && trimmed.length > 0 ? trimmed : undefined;
|
|
14
|
+
}
|
|
11
15
|
export async function runImplementingActions(projectId, specId, options = {}) {
|
|
12
16
|
let autoBranch;
|
|
13
17
|
let protectedBranchWarning = null;
|
|
14
18
|
// Check if on a protected branch
|
|
15
19
|
try {
|
|
16
20
|
const { resolveProjectPath, git: gitCmd } = await import('./git/git-helpers.js');
|
|
17
|
-
const projectPath = await resolveProjectPath(projectId);
|
|
21
|
+
const projectPath = suppliedProjectPath(options.projectPath) ?? (await resolveProjectPath(projectId));
|
|
18
22
|
const { stdout } = await gitCmd(projectPath, ['rev-parse', '--abbrev-ref', 'HEAD']);
|
|
19
23
|
const currentBranch = stdout.trim();
|
|
20
24
|
const protectedBranches = ['main', 'master', 'develop', 'production'];
|
|
@@ -27,7 +31,7 @@ export async function runImplementingActions(projectId, specId, options = {}) {
|
|
|
27
31
|
}
|
|
28
32
|
if (!options.deferSideEffects) {
|
|
29
33
|
try {
|
|
30
|
-
autoBranch = await runImplementingSideEffects(projectId, specId);
|
|
34
|
+
autoBranch = await runImplementingSideEffects(projectId, specId, options.projectPath);
|
|
31
35
|
}
|
|
32
36
|
catch {
|
|
33
37
|
// Legacy direct callers keep best-effort behavior.
|
|
@@ -41,20 +45,20 @@ export async function runImplementingActions(projectId, specId, options = {}) {
|
|
|
41
45
|
};
|
|
42
46
|
}
|
|
43
47
|
/** Create the implementation branch and refresh derived context after commit. */
|
|
44
|
-
export async function runImplementingSideEffects(projectId, specId) {
|
|
48
|
+
export async function runImplementingSideEffects(projectId, specId, transitionProjectPath) {
|
|
49
|
+
const { resolveProjectPath } = await import('./git/git-helpers.js');
|
|
50
|
+
const projectPath = suppliedProjectPath(transitionProjectPath) ?? (await resolveProjectPath(projectId));
|
|
45
51
|
let autoBranch;
|
|
46
52
|
const foundSpec = await specStore.getSpec(projectId, specId);
|
|
47
53
|
if (foundSpec && !foundSpec.gitBranch) {
|
|
48
54
|
let branchResult;
|
|
49
55
|
try {
|
|
50
|
-
const { resolveProjectPath: resolveBranchPath } = await import('./git/git-helpers.js');
|
|
51
56
|
const { handleCreateBranch } = await import('./git/branch-ops.js');
|
|
52
|
-
|
|
53
|
-
branchResult = await withAudit(branchProjectPath, 'update_status(implementing)', 'handleCreateBranch', () => handleCreateBranch(projectId, specId), (r) => ({ isError: r.isError }));
|
|
57
|
+
branchResult = await withAudit(projectPath, 'update_status(implementing)', 'handleCreateBranch', () => handleCreateBranch(projectId, specId, undefined, projectPath), (r) => ({ isError: r.isError }));
|
|
54
58
|
}
|
|
55
59
|
catch {
|
|
56
60
|
const { handleCreateBranch } = await import('./git/branch-ops.js');
|
|
57
|
-
branchResult = await handleCreateBranch(projectId, specId);
|
|
61
|
+
branchResult = await handleCreateBranch(projectId, specId, undefined, projectPath);
|
|
58
62
|
}
|
|
59
63
|
if (!branchResult.isError) {
|
|
60
64
|
try {
|
|
@@ -70,8 +74,6 @@ export async function runImplementingSideEffects(projectId, specId) {
|
|
|
70
74
|
// SPEC-600: Fire-and-forget cascade — recommend_model, orchestration plan, context check
|
|
71
75
|
// -------------------------------------------------------------------------
|
|
72
76
|
try {
|
|
73
|
-
const { resolveProjectPath: resolveCascadePath } = await import('./git/git-helpers.js');
|
|
74
|
-
const projectPath = await resolveCascadePath(projectId);
|
|
75
77
|
const spec = foundSpec ?? (await specStore.getSpec(projectId, specId));
|
|
76
78
|
const results = await Promise.allSettled([
|
|
77
79
|
// SPEC-633: Write session state when spec moves to implementing
|
|
@@ -161,7 +163,7 @@ export async function runDoneActions(projectId, specId, gitBranch, options = {})
|
|
|
161
163
|
(async () => {
|
|
162
164
|
try {
|
|
163
165
|
const { resolveProjectPath, git: gitCmd } = await import('./git/git-helpers.js');
|
|
164
|
-
const projectPath = await resolveProjectPath(projectId);
|
|
166
|
+
const projectPath = suppliedProjectPath(options.projectPath) ?? (await resolveProjectPath(projectId));
|
|
165
167
|
if (process.env.PLANU_ENABLE_AUTOCOMMIT === 'true') {
|
|
166
168
|
await gitCmd(projectPath, ['add', 'planu/']);
|
|
167
169
|
const { planuAutoCommit } = await import('../engine/git/planu-autocommit.js');
|
|
@@ -193,7 +195,7 @@ export async function runDoneActions(projectId, specId, gitBranch, options = {})
|
|
|
193
195
|
const mergeResult = await Promise.resolve((async () => {
|
|
194
196
|
try {
|
|
195
197
|
const { resolveProjectPath, resolveBaseBranch, git: gitCmd, } = await import('./git/git-helpers.js');
|
|
196
|
-
const projectPath = await resolveProjectPath(projectId);
|
|
198
|
+
const projectPath = suppliedProjectPath(options.projectPath) ?? (await resolveProjectPath(projectId));
|
|
197
199
|
await gitCmd(projectPath, ['rev-parse', '--verify', gitBranch]);
|
|
198
200
|
const baseBranch = await resolveBaseBranch(projectPath);
|
|
199
201
|
if (!baseBranch) {
|
|
@@ -213,7 +215,7 @@ export async function runDoneActions(projectId, specId, gitBranch, options = {})
|
|
|
213
215
|
mergeWarning = mergeResult;
|
|
214
216
|
}
|
|
215
217
|
if (!options.deferSideEffects) {
|
|
216
|
-
void runDoneSideEffects(projectId, specId, gitBranch).catch(() => {
|
|
218
|
+
void runDoneSideEffects(projectId, specId, gitBranch, options.projectPath).catch(() => {
|
|
217
219
|
// Legacy direct callers keep best-effort behavior.
|
|
218
220
|
});
|
|
219
221
|
}
|
|
@@ -231,9 +233,9 @@ export async function runDoneActions(projectId, specId, gitBranch, options = {})
|
|
|
231
233
|
};
|
|
232
234
|
}
|
|
233
235
|
/** Run cleanup and state refreshes only after the done transition is durable. */
|
|
234
|
-
export async function runDoneSideEffects(projectId, specId, gitBranch) {
|
|
236
|
+
export async function runDoneSideEffects(projectId, specId, gitBranch, transitionProjectPath) {
|
|
235
237
|
const { resolveProjectPath } = await import('./git/git-helpers.js');
|
|
236
|
-
const projectPath = await resolveProjectPath(projectId);
|
|
238
|
+
const projectPath = suppliedProjectPath(transitionProjectPath) ?? (await resolveProjectPath(projectId));
|
|
237
239
|
const results = await Promise.allSettled([
|
|
238
240
|
(async () => {
|
|
239
241
|
const { cleanupSpecOnDone } = await import('./git/cleanup-ops.js');
|