peaks-loop 4.0.53 → 4.1.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 +85 -0
- package/README-en.md +16 -1
- package/README.md +15 -1
- package/config/eslint/.peaks-rules.cjs +158 -13
- package/config/eslint/tsconfig.lint.json +47 -0
- package/dist/cli/cli-envelope.d.ts +114 -0
- package/dist/cli/cli-envelope.js +85 -0
- package/dist/cli/cli-helpers.d.ts +1 -1
- package/dist/cli/cli-helpers.js +8 -4
- package/dist/cli/commands/_cli-error-envelope.js +1 -1
- package/dist/cli/commands/_register.js +85 -38
- package/dist/cli/commands/_super.js +40 -7
- package/dist/cli/commands/adapter-commands-s2a.js +8 -7
- package/dist/cli/commands/adapter-commands.d.ts +2 -2
- package/dist/cli/commands/adapter-commands.js +7 -8
- package/dist/cli/commands/api-diff-commands.js +5 -4
- package/dist/cli/commands/asset-commands.d.ts +2 -2
- package/dist/cli/commands/asset-commands.js +135 -132
- package/dist/cli/commands/audit-commands.d.ts +1 -1
- package/dist/cli/commands/audit-commands.js +75 -32
- package/dist/cli/commands/autonomous-swarm-commands.d.ts +1 -1
- package/dist/cli/commands/autonomous-swarm-commands.js +14 -8
- package/dist/cli/commands/baseline-commands.js +34 -9
- package/dist/cli/commands/bee-commands.d.ts +1 -1
- package/dist/cli/commands/bee-commands.js +18 -21
- package/dist/cli/commands/best-practice-scan-command.js +6 -34
- package/dist/cli/commands/best-practice-scan-helpers.d.ts +12 -0
- package/dist/cli/commands/best-practice-scan-helpers.js +37 -0
- package/dist/cli/commands/capability-commands.d.ts +1 -1
- package/dist/cli/commands/capability-commands.js +14 -4
- package/dist/cli/commands/capability-worker-config-sc-commands.d.ts +1 -1
- package/dist/cli/commands/changeset-commands.js +21 -18
- package/dist/cli/commands/code-gate-command.js +9 -2
- package/dist/cli/commands/code-job-shape-commands-read-job-shape.d.ts +15 -0
- package/dist/cli/commands/code-job-shape-commands-read-job-shape.js +70 -0
- package/dist/cli/commands/code-job-shape-commands.js +21 -45
- package/dist/cli/commands/code-mode-gate-commands.d.ts +15 -1
- package/dist/cli/commands/code-mode-gate-commands.js +19 -199
- package/dist/cli/commands/code-mode-gate-plan-command.d.ts +14 -0
- package/dist/cli/commands/code-mode-gate-plan-command.js +23 -0
- package/dist/cli/commands/code-mode-gate-should-pause-command.d.ts +24 -0
- package/dist/cli/commands/code-mode-gate-should-pause-command.js +137 -0
- package/dist/cli/commands/code-mode-gate-should-pause-envelope.d.ts +59 -0
- package/dist/cli/commands/code-mode-gate-should-pause-envelope.js +144 -0
- package/dist/cli/commands/code-orchestrator-can-do.js +4 -4
- package/dist/cli/commands/code-review-commands.js +18 -3
- package/dist/cli/commands/code-run-command.js +44 -7
- package/dist/cli/commands/code-runtime-commands.d.ts +17 -0
- package/dist/cli/commands/code-runtime-commands.js +105 -73
- package/dist/cli/commands/codegraph-commands.js +175 -11
- package/dist/cli/commands/codegraph-status-command.js +6 -2
- package/dist/cli/commands/compact-command.js +52 -26
- package/dist/cli/commands/complexity-commands.js +6 -7
- package/dist/cli/commands/config-commands.d.ts +1 -1
- package/dist/cli/commands/config-commands.js +33 -9
- package/dist/cli/commands/container-commands.js +39 -15
- package/dist/cli/commands/context-commands.d.ts +1 -1
- package/dist/cli/commands/context-commands.js +40 -13
- package/dist/cli/commands/core/artifacts-command.js +11 -3
- package/dist/cli/commands/core/binding-commands.js +9 -6
- package/dist/cli/commands/core/doctor-command.js +7 -4
- package/dist/cli/commands/core/memory-command.js +81 -22
- package/dist/cli/commands/core/proxy-command.js +3 -1
- package/dist/cli/commands/core/session-command.js +16 -8
- package/dist/cli/commands/core/skill-command.js +31 -16
- package/dist/cli/commands/core/standards-command.js +55 -13
- package/dist/cli/commands/cron-commands-actions.d.ts +43 -0
- package/dist/cli/commands/cron-commands-actions.js +128 -0
- package/dist/cli/commands/cron-commands-schedule.d.ts +86 -0
- package/dist/cli/commands/cron-commands-schedule.js +151 -0
- package/dist/cli/commands/cron-commands.d.ts +35 -32
- package/dist/cli/commands/cron-commands.js +167 -211
- package/dist/cli/commands/cron-scheduler-commands.js +40 -20
- package/dist/cli/commands/cron-scheduler-persist.d.ts +110 -0
- package/dist/cli/commands/cron-scheduler-persist.js +171 -0
- package/dist/cli/commands/dashboard-long-run.js +45 -14
- package/dist/cli/commands/dashboard-summary.js +15 -5
- package/dist/cli/commands/dispatch-commands.js +69 -34
- package/dist/cli/commands/dispatch-from-dag.js +9 -10
- package/dist/cli/commands/doc-commands.js +8 -9
- package/dist/cli/commands/doctor/invoke-from-code.js +1 -1
- package/dist/cli/commands/e2e-verify-env.d.ts +19 -0
- package/dist/cli/commands/e2e-verify-env.js +19 -0
- package/dist/cli/commands/e2e-verify.d.ts +3 -14
- package/dist/cli/commands/e2e-verify.js +49 -29
- package/dist/cli/commands/ecc-commands.d.ts +1 -1
- package/dist/cli/commands/ecc-commands.js +8 -17
- package/dist/cli/commands/evidence-commands.js +10 -6
- package/dist/cli/commands/evolution-commands.d.ts +2 -2
- package/dist/cli/commands/evolution-commands.js +109 -115
- package/dist/cli/commands/feedback-commands-helpers.d.ts +22 -0
- package/dist/cli/commands/feedback-commands-helpers.js +33 -0
- package/dist/cli/commands/feedback-commands.js +15 -38
- package/dist/cli/commands/final-review-commands.d.ts +1 -1
- package/dist/cli/commands/final-review-commands.js +24 -22
- package/dist/cli/commands/fixture-commands.d.ts +1 -1
- package/dist/cli/commands/fixture-commands.js +17 -6
- package/dist/cli/commands/fork-commands-sync-verify.d.ts +12 -0
- package/dist/cli/commands/fork-commands-sync-verify.js +72 -0
- package/dist/cli/commands/fork-commands.js +19 -51
- package/dist/cli/commands/fresh-context-commands.js +3 -1
- package/dist/cli/commands/gate-commands-enforce.d.ts +82 -0
- package/dist/cli/commands/gate-commands-enforce.js +210 -0
- package/dist/cli/commands/gate-commands.d.ts +1 -1
- package/dist/cli/commands/gate-commands.js +85 -205
- package/dist/cli/commands/governance-classify-contract-commands.d.ts +1 -1
- package/dist/cli/commands/governance-classify-contract-commands.js +28 -17
- package/dist/cli/commands/heartbeat-commands-action.d.ts +7 -0
- package/dist/cli/commands/heartbeat-commands-action.js +192 -0
- package/dist/cli/commands/heartbeat-commands-validation.d.ts +57 -0
- package/dist/cli/commands/heartbeat-commands-validation.js +120 -0
- package/dist/cli/commands/heartbeat-commands.d.ts +27 -6
- package/dist/cli/commands/heartbeat-commands.js +19 -198
- package/dist/cli/commands/hook-handle.d.ts +1 -1
- package/dist/cli/commands/hook-handle.js +46 -13
- package/dist/cli/commands/hooks-commands.d.ts +1 -1
- package/dist/cli/commands/hooks-commands.js +18 -6
- package/dist/cli/commands/ide-commands.d.ts +1 -1
- package/dist/cli/commands/ide-commands.js +5 -3
- package/dist/cli/commands/impact-commands.js +8 -2
- package/dist/cli/commands/job-add-slice-command.d.ts +43 -0
- package/dist/cli/commands/job-add-slice-command.js +151 -0
- package/dist/cli/commands/job-commands.d.ts +64 -0
- package/dist/cli/commands/job-commands.js +134 -63
- package/dist/cli/commands/lease-metrics-commands-support.d.ts +73 -0
- package/dist/cli/commands/lease-metrics-commands-support.js +67 -0
- package/dist/cli/commands/lease-metrics-commands.d.ts +3 -44
- package/dist/cli/commands/lease-metrics-commands.js +21 -61
- package/dist/cli/commands/lease-stats-commands.d.ts +1 -1
- package/dist/cli/commands/lease-stats-commands.js +9 -6
- package/dist/cli/commands/lint-commands.d.ts +9 -3
- package/dist/cli/commands/lint-commands.js +15 -8
- package/dist/cli/commands/log-commands.d.ts +1 -1
- package/dist/cli/commands/log-commands.js +8 -6
- package/dist/cli/commands/loop-commands.d.ts +1 -1
- package/dist/cli/commands/loop-commands.js +50 -50
- package/dist/cli/commands/loop-eval-commands.d.ts +1 -1
- package/dist/cli/commands/loop-eval-commands.js +101 -30
- package/dist/cli/commands/memory-commands.js +21 -13
- package/dist/cli/commands/migrate-1-4-1-command.js +1 -1
- package/dist/cli/commands/migrate-v2-10-to-v2-11-command.js +2 -2
- package/dist/cli/commands/mut-commands-helpers.d.ts +30 -0
- package/dist/cli/commands/mut-commands-helpers.js +43 -0
- package/dist/cli/commands/mut-commands.js +16 -58
- package/dist/cli/commands/observability-commands-queries.d.ts +37 -0
- package/dist/cli/commands/observability-commands-queries.js +113 -0
- package/dist/cli/commands/observability-commands.d.ts +1 -1
- package/dist/cli/commands/observability-commands.js +7 -92
- package/dist/cli/commands/openspec-commands.d.ts +1 -1
- package/dist/cli/commands/openspec-commands.js +20 -8
- package/dist/cli/commands/outer-cache-commands.js +18 -7
- package/dist/cli/commands/perf-audit-commands.d.ts +1 -1
- package/dist/cli/commands/perf-audit-commands.js +12 -7
- package/dist/cli/commands/perf-commands.d.ts +1 -1
- package/dist/cli/commands/perf-commands.js +5 -5
- package/dist/cli/commands/playwright-commands.d.ts +1 -1
- package/dist/cli/commands/playwright-commands.js +20 -8
- package/dist/cli/commands/polyrepo-commands.js +21 -19
- package/dist/cli/commands/prd-blocks-commands.js +1 -3
- package/dist/cli/commands/prd-commands.d.ts +1 -1
- package/dist/cli/commands/prd-commands.js +21 -2
- package/dist/cli/commands/preferences-commands.js +13 -12
- package/dist/cli/commands/primer-command.js +5 -5
- package/dist/cli/commands/project-commands.d.ts +1 -1
- package/dist/cli/commands/project-commands.js +33 -9
- package/dist/cli/commands/qa-business-review-commands.js +16 -12
- package/dist/cli/commands/qa-commands.d.ts +1 -1
- package/dist/cli/commands/qa-commands.js +3 -5
- package/dist/cli/commands/release-commands.d.ts +3 -1
- package/dist/cli/commands/release-commands.js +33 -22
- package/dist/cli/commands/request-commands.js +47 -30
- package/dist/cli/commands/request-format-helpers.js +1 -1
- package/dist/cli/commands/retrospective-commands.d.ts +18 -11
- package/dist/cli/commands/retrospective-commands.js +24 -173
- package/dist/cli/commands/retrospective-index-command.d.ts +26 -0
- package/dist/cli/commands/retrospective-index-command.js +99 -0
- package/dist/cli/commands/retrospective-project-root.d.ts +9 -0
- package/dist/cli/commands/retrospective-project-root.js +15 -0
- package/dist/cli/commands/retrospective-search-command.d.ts +27 -0
- package/dist/cli/commands/retrospective-search-command.js +97 -0
- package/dist/cli/commands/retrospective-show-command.d.ts +23 -0
- package/dist/cli/commands/retrospective-show-command.js +80 -0
- package/dist/cli/commands/reviewer-commands.d.ts +1 -1
- package/dist/cli/commands/role-commands.js +14 -9
- package/dist/cli/commands/runtime-commands.js +14 -7
- package/dist/cli/commands/sc-commands.d.ts +1 -1
- package/dist/cli/commands/sc-commands.js +39 -6
- package/dist/cli/commands/scan-commands.js +36 -13
- package/dist/cli/commands/security-audit-commands.d.ts +1 -1
- package/dist/cli/commands/security-audit-commands.js +12 -7
- package/dist/cli/commands/sediment-commands.d.ts +2 -2
- package/dist/cli/commands/sediment-commands.js +146 -139
- package/dist/cli/commands/session-24h-mode.js +15 -2
- package/dist/cli/commands/session-checkpoint-command.js +1 -1
- package/dist/cli/commands/session-migrate-skill-name.js +1 -1
- package/dist/cli/commands/shadcn-commands.d.ts +1 -1
- package/dist/cli/commands/shadcn-commands.js +3 -1
- package/dist/cli/commands/share-commands.js +38 -39
- package/dist/cli/commands/skill-conformance-commands.d.ts +1 -1
- package/dist/cli/commands/skill-conformance-commands.js +1 -1
- package/dist/cli/commands/skill-loop-engineering-readiness-commands.js +16 -17
- package/dist/cli/commands/skill-visibility.js +2 -2
- package/dist/cli/commands/slice-commands.d.ts +1 -1
- package/dist/cli/commands/slice-commands.js +36 -12
- package/dist/cli/commands/slice-integrate-commands.js +6 -7
- package/dist/cli/commands/slice-review-commands-helpers.d.ts +26 -0
- package/dist/cli/commands/slice-review-commands-helpers.js +26 -0
- package/dist/cli/commands/slice-review-commands.js +16 -24
- package/dist/cli/commands/smoke-commands-add-path.d.ts +14 -0
- package/dist/cli/commands/smoke-commands-add-path.js +39 -0
- package/dist/cli/commands/smoke-commands-define.d.ts +18 -0
- package/dist/cli/commands/smoke-commands-define.js +97 -0
- package/dist/cli/commands/smoke-commands-run.d.ts +18 -0
- package/dist/cli/commands/smoke-commands-run.js +119 -0
- package/dist/cli/commands/smoke-commands.d.ts +10 -1
- package/dist/cli/commands/smoke-commands.js +17 -179
- package/dist/cli/commands/sop-commands.d.ts +1 -1
- package/dist/cli/commands/sop-commands.js +38 -10
- package/dist/cli/commands/statusline-commands.d.ts +1 -1
- package/dist/cli/commands/statusline-commands.js +21 -10
- package/dist/cli/commands/sub-agent/detached.js +3 -3
- package/dist/cli/commands/sub-agent-dispatch-guard.d.ts +1 -1
- package/dist/cli/commands/sub-agent-shared.d.ts +23 -0
- package/dist/cli/commands/sub-agent-shared.js +40 -1
- package/dist/cli/commands/sub-agent-shutdown-commands.js +17 -9
- package/dist/cli/commands/swarm-commands.d.ts +1 -1
- package/dist/cli/commands/swarm-commands.js +13 -6
- package/dist/cli/commands/tech-commands-helpers.d.ts +37 -0
- package/dist/cli/commands/tech-commands-helpers.js +24 -0
- package/dist/cli/commands/tech-commands.d.ts +2 -29
- package/dist/cli/commands/tech-commands.js +15 -28
- package/dist/cli/commands/test-commands.js +27 -7
- package/dist/cli/commands/upgrade-commands.d.ts +1 -1
- package/dist/cli/commands/user-touchpoint-commands.js +1 -3
- package/dist/cli/commands/verdict-aggregate-command.d.ts +1 -1
- package/dist/cli/commands/verdict-aggregate-command.js +20 -7
- package/dist/cli/commands/vm-commands.js +48 -19
- package/dist/cli/commands/wave-plan-commands.js +5 -2
- package/dist/cli/commands/web-commands.js +14 -4
- package/dist/cli/commands/web-lifecycle-commands.js +5 -3
- package/dist/cli/commands/workflow-commands.d.ts +1 -1
- package/dist/cli/commands/workflow-commands.js +64 -29
- package/dist/cli/commands/workflow-lifecycle-commands.js +19 -17
- package/dist/cli/commands/workflow-plan-commands-actions.d.ts +20 -0
- package/dist/cli/commands/workflow-plan-commands-actions.js +115 -0
- package/dist/cli/commands/workflow-plan-commands-session.d.ts +17 -0
- package/dist/cli/commands/workflow-plan-commands-session.js +59 -0
- package/dist/cli/commands/workflow-plan-commands.d.ts +10 -21
- package/dist/cli/commands/workflow-plan-commands.js +15 -141
- package/dist/cli/commands/workspace/clean-command.js +4 -1
- package/dist/cli/commands/workspace/helpers.js +2 -1
- package/dist/cli/commands/workspace/init-command.js +80 -20
- package/dist/cli/commands/workspace/reconcile-command.js +3 -1
- package/dist/cli/commands/workspace-commands.d.ts +1 -1
- package/dist/cli/commands/workspace-commands.js +1 -1
- package/dist/cli/commands/worktree-auth-commands.d.ts +1 -1
- package/dist/cli/commands/worktree-auth-commands.js +16 -169
- package/dist/cli/commands/worktree-auth-grant-command.d.ts +14 -0
- package/dist/cli/commands/worktree-auth-grant-command.js +118 -0
- package/dist/cli/commands/worktree-auth-manage-commands.d.ts +17 -0
- package/dist/cli/commands/worktree-auth-manage-commands.js +128 -0
- package/dist/cli/commands/worktree-lease-commands.d.ts +1 -1
- package/dist/cli/commands/worktree-lease-commands.js +65 -37
- package/dist/cli/index.js +6 -2
- package/dist/cli/program.js +6 -3
- package/dist/hooks/pre-tool-use-sub-agent.js +1 -6
- package/dist/reporters/bdd-reporter.js +9 -3
- package/dist/services/24h-mode/auto-engage.d.ts +19 -0
- package/dist/services/24h-mode/auto-engage.js +35 -0
- package/dist/services/24h-mode/decider.js +5 -1
- package/dist/services/24h-mode/store.js +4 -2
- package/dist/services/adapter/adapter-registry.js +20 -8
- package/dist/services/adapter/adapter.d.ts +2 -2
- package/dist/services/adapter/auto-adapter.d.ts +2 -2
- package/dist/services/adapter/auto-adapter.js +1 -1
- package/dist/services/adapter/claude-adapter.d.ts +1 -1
- package/dist/services/adapter/claude-adapter.js +8 -8
- package/dist/services/adapter/codex-adapter.d.ts +2 -2
- package/dist/services/adapter/codex-adapter.js +20 -8
- package/dist/services/adapter/copilot-adapter.d.ts +2 -2
- package/dist/services/adapter/copilot-adapter.js +20 -8
- package/dist/services/artifacts/artifact-prerequisites.js +44 -8
- package/dist/services/artifacts/artifact-service.js +3 -1
- package/dist/services/artifacts/artifact-template-bodies.d.ts +12 -0
- package/dist/services/artifacts/artifact-template-bodies.js +165 -0
- package/dist/services/artifacts/artifact-templates.js +26 -168
- package/dist/services/artifacts/request-artifact-service.js +14 -7
- package/dist/services/artifacts/request-artifact-state-helpers.d.ts +3 -2
- package/dist/services/artifacts/request-artifact-state-helpers.js +3 -5
- package/dist/services/artifacts/workspace-artifact-helpers.d.ts +28 -0
- package/dist/services/artifacts/workspace-artifact-helpers.js +54 -0
- package/dist/services/artifacts/workspace-service.d.ts +3 -22
- package/dist/services/artifacts/workspace-service.js +10 -60
- package/dist/services/audit/artifact-writer.js +21 -21
- package/dist/services/audit/audit-goal-service.js +2 -2
- package/dist/services/audit/backing-detector.js +7 -4
- package/dist/services/audit/classifier.js +3 -3
- package/dist/services/audit/decision-writer.js +13 -9
- package/dist/services/audit/enforcer-liveness.js +1 -1
- package/dist/services/audit/enforcers/active-skill-resolver.js +15 -7
- package/dist/services/audit/enforcers/design-draft-confirm.js +4 -4
- package/dist/services/audit/enforcers/lint-audit-regression.js +10 -5
- package/dist/services/audit/enforcers/lint-bee-runtime-contract.js +16 -8
- package/dist/services/audit/enforcers/lint-catalog-governance.js +8 -4
- package/dist/services/audit/enforcers/lint-output-style.js +4 -2
- package/dist/services/audit/enforcers/lint-peaks-code-runtime.js +8 -3
- package/dist/services/audit/enforcers/lint-peaks-skill-runtime.js +8 -3
- package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.js +20 -20
- package/dist/services/audit/enforcers/lint-prd-artifact-handoff.js +5 -5
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.d.ts +1 -1
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.js +5 -5
- package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.js +10 -10
- package/dist/services/audit/enforcers/lint-rd-handoff-coverage.js +10 -8
- package/dist/services/audit/enforcers/lint-reference-shape.js +50 -18
- package/dist/services/audit/enforcers/lint-skill-presence-mandatory.js +5 -5
- package/dist/services/audit/enforcers/lint-style.js +44 -11
- package/dist/services/audit/enforcers/lint-workflow-shape.js +4 -2
- package/dist/services/audit/enforcers/login-gate.js +2 -6
- package/dist/services/audit/enforcers/mock-placement.js +2 -2
- package/dist/services/audit/enforcers/no-root-pollution.js +38 -9
- package/dist/services/audit/enforcers/pre-rd-scan.js +1 -1
- package/dist/services/audit/enforcers/prototype-fidelity.js +1 -1
- package/dist/services/audit/enforcers/resume-detection.js +5 -4
- package/dist/services/audit/prose-ratio-calculator.js +1 -1
- package/dist/services/audit/red-line-catalog-p2-a-bee-runtime.d.ts +39 -0
- package/dist/services/audit/red-line-catalog-p2-a-bee-runtime.js +205 -0
- package/dist/services/audit/red-line-catalog-p2-a-lint-style.d.ts +52 -0
- package/dist/services/audit/red-line-catalog-p2-a-lint-style.js +205 -0
- package/dist/services/audit/red-line-catalog-p2-a.js +3 -374
- package/dist/services/audit/red-line-catalog-p2-b.js +26 -26
- package/dist/services/audit/red-line-catalog.js +26 -38
- package/dist/services/audit/red-lines-service.js +64 -49
- package/dist/services/audit/scanners/openspec-scanner.js +2 -2
- package/dist/services/audit/scanners/rules-tree-scanner.js +2 -2
- package/dist/services/audit/scanners/skills-tree-scanner.js +2 -2
- package/dist/services/audit/static-service.js +3 -3
- package/dist/services/audit-independent/index.d.ts +2 -2
- package/dist/services/audit-independent/index.js +2 -2
- package/dist/services/audit-independent/perf-audit-service.js +19 -8
- package/dist/services/audit-independent/security-audit-service.js +31 -16
- package/dist/services/autonomous-swarm/autonomous-swarm-service.js +75 -46
- package/dist/services/best-practice/output-formatter.js +7 -1
- package/dist/services/capability-audit-service/cross-check.js +11 -5
- package/dist/services/capability-audit-service/runner.js +15 -7
- package/dist/services/capability-baseline/store.js +16 -4
- package/dist/services/capability-baseline/types.js +15 -3
- package/dist/services/capability-baseline/validator.js +43 -7
- package/dist/services/capability-guard-runner/contracts/J02.js +36 -6
- package/dist/services/capability-guard-runner/contracts/J03.js +20 -11
- package/dist/services/capability-guard-runner/contracts/J04.js +24 -15
- package/dist/services/capability-guard-runner/contracts/J05.js +26 -10
- package/dist/services/capability-guard-runner/contracts/J07.js +8 -2
- package/dist/services/capability-guard-runner/contracts/J08.js +22 -5
- package/dist/services/capability-guard-runner/contracts/J10.js +6 -2
- package/dist/services/capability-guard-runner/contracts/J11.d.ts +5 -0
- package/dist/services/capability-guard-runner/contracts/J11.js +14 -2
- package/dist/services/capability-guard-runner/contracts/J12.js +12 -3
- package/dist/services/capability-guard-runner/diff.js +1 -5
- package/dist/services/changeset/changeset-check-service.js +1 -3
- package/dist/services/classify/classify-service.js +20 -8
- package/dist/services/classify/classify-types.js +22 -9
- package/dist/services/code/auto-compact-lifecycle.js +62 -39
- package/dist/services/code/auto-compact-modes.js +2 -2
- package/dist/services/code/auto-compact-orchestrator.js +14 -9
- package/dist/services/code/batch-heartbeat-poller.d.ts +10 -0
- package/dist/services/code/batch-heartbeat-poller.js +17 -1
- package/dist/services/code/compact-event-settle-types.d.ts +80 -0
- package/dist/services/code/compact-event-settle-types.js +20 -0
- package/dist/services/code/compact-event-settle.d.ts +3 -68
- package/dist/services/code/compact-event-settle.js +14 -10
- package/dist/services/code/dag-orchestrator.js +32 -26
- package/dist/services/code/job-shape-decision.js +3 -1
- package/dist/services/code/mode-gate-types.d.ts +57 -0
- package/dist/services/code/mode-gate-types.js +67 -0
- package/dist/services/code/mode-gate.d.ts +4 -58
- package/dist/services/code/mode-gate.js +24 -60
- package/dist/services/code/orchestrator-can-do-advisories.d.ts +30 -0
- package/dist/services/code/orchestrator-can-do-advisories.js +81 -0
- package/dist/services/code/orchestrator-can-do-probes.d.ts +30 -0
- package/dist/services/code/orchestrator-can-do-probes.js +77 -0
- package/dist/services/code/orchestrator-can-do.d.ts +11 -22
- package/dist/services/code/orchestrator-can-do.js +37 -137
- package/dist/services/code/post-compact-checkpoint.d.ts +28 -0
- package/dist/services/code/post-compact-checkpoint.js +57 -0
- package/dist/services/code/post-compact-detector.js +16 -48
- package/dist/services/code/step-08-gate.d.ts +4 -3
- package/dist/services/code/step-08-gate.js +21 -9
- package/dist/services/code-review/ecc-bridge.js +23 -23
- package/dist/services/codegraph/codegraph-autorefresh.js +56 -39
- package/dist/services/codegraph/codegraph-config-repair-writer.d.ts +44 -0
- package/dist/services/codegraph/codegraph-config-repair-writer.js +116 -14
- package/dist/services/codegraph/codegraph-exclude-integrity.js +4 -1
- package/dist/services/codegraph/codegraph-exclude-repair.d.ts +23 -1
- package/dist/services/codegraph/codegraph-exclude-repair.js +7 -2
- package/dist/services/codegraph/codegraph-index-integrity.js +1 -1
- package/dist/services/codegraph/codegraph-preflight-service.d.ts +3 -26
- package/dist/services/codegraph/codegraph-preflight-service.js +16 -37
- package/dist/services/codegraph/codegraph-preflight-structure.d.ts +32 -0
- package/dist/services/codegraph/codegraph-preflight-structure.js +33 -0
- package/dist/services/codegraph/codegraph-process-runner.js +12 -1
- package/dist/services/codegraph/codegraph-service.js +9 -1
- package/dist/services/compact/request-transition-hook.js +2 -1
- package/dist/services/compact/suggest-service.d.ts +3 -61
- package/dist/services/compact/suggest-service.js +9 -12
- package/dist/services/compact/suggest-types.d.ts +76 -0
- package/dist/services/compact/suggest-types.js +10 -0
- package/dist/services/compact-history/compact-history-service.js +2 -2
- package/dist/services/compact-statusline/compact-lifecycle-store.d.ts +2 -32
- package/dist/services/compact-statusline/compact-lifecycle-store.js +7 -12
- package/dist/services/compact-statusline/compact-lifecycle-types.d.ts +32 -0
- package/dist/services/compact-statusline/compact-lifecycle-types.js +8 -0
- package/dist/services/compact-statusline/compact-statusline-cell-table.d.ts +42 -0
- package/dist/services/compact-statusline/compact-statusline-cell-table.js +63 -0
- package/dist/services/compact-statusline/compact-statusline-service.d.ts +4 -21
- package/dist/services/compact-statusline/compact-statusline-service.js +9 -101
- package/dist/services/compact-statusline/compact-statusline-state.d.ts +4 -0
- package/dist/services/compact-statusline/compact-statusline-state.js +50 -0
- package/dist/services/config/config-migration.js +2 -2
- package/dist/services/config/config-restore.js +1 -1
- package/dist/services/config/config-rollback.js +1 -1
- package/dist/services/config/config-safety.js +28 -10
- package/dist/services/config/config-service.js +114 -31
- package/dist/services/config/model-routing.js +5 -2
- package/dist/services/config/proxy-service.js +6 -1
- package/dist/services/config/workspace-state-service.js +17 -5
- package/dist/services/context/auto-compact-dispatcher-input.d.ts +38 -0
- package/dist/services/context/auto-compact-dispatcher-input.js +9 -0
- package/dist/services/context/auto-compact-dispatcher.d.ts +2 -30
- package/dist/services/context/auto-compact-reader-input.d.ts +30 -0
- package/dist/services/context/auto-compact-reader-input.js +8 -0
- package/dist/services/context/auto-compact-reader.d.ts +2 -24
- package/dist/services/context/auto-compact-reader.js +4 -1
- package/dist/services/context/auto-compact-thresholds.d.ts +54 -0
- package/dist/services/context/auto-compact-thresholds.js +19 -0
- package/dist/services/context/auto-compact-types.d.ts +2 -46
- package/dist/services/context/auto-compact-types.js +1 -11
- package/dist/services/context/build-dispatch-system-prompt.js +2 -2
- package/dist/services/context/collector.js +8 -10
- package/dist/services/context/context-audit-hint.js +7 -5
- package/dist/services/context/context-audit-keys.d.ts +15 -0
- package/dist/services/context/context-audit-keys.js +77 -0
- package/dist/services/context/context-audit-limits.d.ts +20 -0
- package/dist/services/context/context-audit-limits.js +31 -0
- package/dist/services/context/context-audit-scan.d.ts +19 -0
- package/dist/services/context/context-audit-scan.js +246 -0
- package/dist/services/context/context-audit-types.d.ts +65 -0
- package/dist/services/context/context-audit-types.js +10 -0
- package/dist/services/context/context-audit.d.ts +13 -59
- package/dist/services/context/context-audit.js +38 -254
- package/dist/services/context/context-builder.js +4 -4
- package/dist/services/context/context-schema.d.ts +1 -1
- package/dist/services/context/context-schema.js +13 -13
- package/dist/services/context/doc-retriever.js +2 -2
- package/dist/services/context/harness-context-witness.js +43 -24
- package/dist/services/context/harness-window-config.js +27 -7
- package/dist/services/context/ide-detect.js +2 -1
- package/dist/services/context/index.d.ts +1 -1
- package/dist/services/context/memory-index-reader.js +3 -9
- package/dist/services/context/memory-preflight-config.js +3 -5
- package/dist/services/context/memory-preflight-service.d.ts +2 -20
- package/dist/services/context/memory-preflight-service.js +37 -68
- package/dist/services/context/memory-preflight-support.d.ts +48 -0
- package/dist/services/context/memory-preflight-support.js +56 -0
- package/dist/services/context/post-compact-reinjection.js +3 -3
- package/dist/services/context/renderer.js +7 -3
- package/dist/services/context/spillover-store.js +3 -1
- package/dist/services/context/summary-view.js +1 -1
- package/dist/services/context/threshold.js +2 -2
- package/dist/services/context/tokenizer.js +3 -3
- package/dist/services/crystallization/crystallization-brief-schema.d.ts +80 -0
- package/dist/services/crystallization/crystallization-brief-schema.js +159 -0
- package/dist/services/crystallization/crystallization-service.d.ts +7 -7
- package/dist/services/crystallization/crystallization-service.js +56 -55
- package/dist/services/crystallization/crystallization-store.d.ts +2 -2
- package/dist/services/crystallization/crystallization-store.js +37 -20
- package/dist/services/crystallization/crystallization-types.d.ts +4 -56
- package/dist/services/crystallization/crystallization-types.js +31 -184
- package/dist/services/crystallization/evidence-brief-builder.d.ts +3 -3
- package/dist/services/crystallization/evidence-brief-builder.js +32 -38
- package/dist/services/crystallization/index.d.ts +4 -4
- package/dist/services/crystallization/index.js +4 -4
- package/dist/services/dashboard/project-dashboard-service.js +7 -1
- package/dist/services/dispatch/await-batch-helpers.d.ts +55 -0
- package/dist/services/dispatch/await-batch-helpers.js +206 -0
- package/dist/services/dispatch/await-batch.d.ts +50 -7
- package/dist/services/dispatch/await-batch.js +97 -194
- package/dist/services/dispatch/batch-counter.js +2 -1
- package/dist/services/dispatch/conflict-replay.js +2 -2
- package/dist/services/dispatch/contract-store.js +5 -2
- package/dist/services/dispatch/dispatch-record-input-types.d.ts +81 -0
- package/dist/services/dispatch/dispatch-record-input-types.js +1 -0
- package/dist/services/dispatch/dispatch-record-types.d.ts +6 -73
- package/dist/services/dispatch/dispatch-record-upgrade-fields.d.ts +72 -0
- package/dist/services/dispatch/dispatch-record-upgrade-fields.js +242 -0
- package/dist/services/dispatch/dispatch-record-upgrade-guards.d.ts +15 -0
- package/dist/services/dispatch/dispatch-record-upgrade-guards.js +55 -0
- package/dist/services/dispatch/dispatch-record-upgrade.d.ts +2 -4
- package/dist/services/dispatch/dispatch-record-upgrade.js +21 -213
- package/dist/services/dispatch/dispatch-record-writer.js +54 -26
- package/dist/services/dispatch/dispatch-sub-agent.js +7 -2
- package/dist/services/dispatch/e2e-fixtures.js +1 -1
- package/dist/services/dispatch/isolation-lease.js +39 -17
- package/dist/services/dispatch/merge-back-runner.js +51 -11
- package/dist/services/dispatch/service-shutdown.js +4 -1
- package/dist/services/dispatch/slice-dag-types.d.ts +116 -0
- package/dist/services/dispatch/slice-dag-types.js +41 -0
- package/dist/services/dispatch/slice-dag.d.ts +3 -109
- package/dist/services/dispatch/slice-dag.js +13 -36
- package/dist/services/dispatch/sub-agent-batch-await.d.ts +47 -0
- package/dist/services/dispatch/sub-agent-batch-await.js +73 -0
- package/dist/services/dispatch/sub-agent-dispatcher-types.d.ts +122 -0
- package/dist/services/dispatch/sub-agent-dispatcher-types.js +12 -0
- package/dist/services/dispatch/sub-agent-dispatcher.d.ts +3 -145
- package/dist/services/dispatch/sub-agent-dispatcher.js +14 -70
- package/dist/services/dispatch/test-tool-detection.js +12 -1
- package/dist/services/doc/doc-generator.js +19 -4
- package/dist/services/doctor/doctor-service/checks/check-id-schema.js +16 -8
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.d.ts +7 -2
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.js +26 -8
- package/dist/services/doctor/doctor-service/checks/codegraph-exclude-integrity.js +16 -8
- package/dist/services/doctor/doctor-service/checks/codegraph-index-integrity.js +16 -8
- package/dist/services/doctor/doctor-service/checks/dist-source-version.js +18 -9
- package/dist/services/doctor/doctor-service/checks/ecc-hooks-schema-drift.js +20 -10
- package/dist/services/doctor/doctor-service/checks/gateguard-conflict.js +18 -9
- package/dist/services/doctor/doctor-service/checks/l3-memory-health.js +25 -11
- package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.js +12 -6
- package/dist/services/doctor/doctor-service/checks/multi-binary-drift.d.ts +7 -16
- package/dist/services/doctor/doctor-service/checks/multi-binary-drift.js +50 -70
- package/dist/services/doctor/doctor-service/checks/schema-validity.js +5 -1
- package/dist/services/doctor/doctor-service/checks/skill-presence.js +4 -2
- package/dist/services/doctor/doctor-service/checks/statusline-install.js +8 -4
- package/dist/services/doctor/doctor-service/checks/statusline-runtime.js +8 -4
- package/dist/services/doctor/doctor-service/checks/user-config.js +4 -2
- package/dist/services/doctor/doctor-service/checks/workspace-init.js +8 -4
- package/dist/services/doctor/doctor-service/checks/workspace-layout.js +19 -11
- package/dist/services/doctor/doctor-service/index.js +4 -2
- package/dist/services/doctor/doctor-service/multi-binary-drift-helpers.d.ts +40 -0
- package/dist/services/doctor/doctor-service/multi-binary-drift-helpers.js +49 -0
- package/dist/services/doctor/doctor-service/plugin-registry.js +1 -1
- package/dist/services/doctor/doctor-service/probe-types.d.ts +210 -0
- package/dist/services/doctor/doctor-service/probe-types.js +14 -0
- package/dist/services/doctor/doctor-service/types.d.ts +7 -197
- package/dist/services/doctor/index.d.ts +1 -1
- package/dist/services/doctor/index.js +1 -1
- package/dist/services/env/shell-probe.js +8 -2
- package/dist/services/evidence/evidence-body-builders.d.ts +23 -0
- package/dist/services/evidence/evidence-body-builders.js +197 -0
- package/dist/services/evidence/evidence-generator.js +16 -189
- package/dist/services/evolution/evolution-constraints.d.ts +43 -0
- package/dist/services/evolution/evolution-constraints.js +54 -0
- package/dist/services/evolution/evolution-evaluation-schema.d.ts +43 -0
- package/dist/services/evolution/evolution-evaluation-schema.js +43 -0
- package/dist/services/evolution/evolution-service.d.ts +6 -6
- package/dist/services/evolution/evolution-service.js +58 -58
- package/dist/services/evolution/evolution-store.d.ts +2 -2
- package/dist/services/evolution/evolution-store.js +37 -51
- package/dist/services/evolution/evolution-types.d.ts +2 -22
- package/dist/services/evolution/evolution-types.js +41 -101
- package/dist/services/evolution/independent-evaluator-runner.d.ts +3 -3
- package/dist/services/evolution/independent-evaluator-runner.js +20 -22
- package/dist/services/evolution/regression-skeptic-runner.d.ts +2 -2
- package/dist/services/evolution/regression-skeptic-runner.js +18 -18
- package/dist/services/feedback/feedback-promotion-service.js +48 -12
- package/dist/services/feedback/promotion-artifact-evidence.d.ts +2 -16
- package/dist/services/feedback/promotion-artifact-evidence.js +6 -83
- package/dist/services/feedback/promotion-artifact-json-evidence.d.ts +29 -0
- package/dist/services/feedback/promotion-artifact-json-evidence.js +39 -0
- package/dist/services/feedback/promotion-source-comments.d.ts +47 -0
- package/dist/services/feedback/promotion-source-comments.js +61 -0
- package/dist/services/final-review/final-review-contract.d.ts +26 -0
- package/dist/services/final-review/final-review-contract.js +14 -0
- package/dist/services/final-review/final-review-delivery.d.ts +63 -0
- package/dist/services/final-review/final-review-delivery.js +124 -0
- package/dist/services/final-review/final-review-evidence-budget.d.ts +125 -0
- package/dist/services/final-review/final-review-evidence-budget.js +218 -0
- package/dist/services/final-review/final-review-evidence-collect.d.ts +4 -0
- package/dist/services/final-review/final-review-evidence-collect.js +230 -0
- package/dist/services/final-review/final-review-evidence-sources.d.ts +138 -0
- package/dist/services/final-review/final-review-evidence-sources.js +139 -0
- package/dist/services/final-review/final-review-fifth-dim.d.ts +8 -0
- package/dist/services/final-review/final-review-fifth-dim.js +20 -0
- package/dist/services/final-review/final-review-gates.d.ts +119 -0
- package/dist/services/final-review/final-review-gates.js +214 -0
- package/dist/services/final-review/final-review-output-budget.d.ts +88 -0
- package/dist/services/final-review/final-review-output-budget.js +161 -0
- package/dist/services/final-review/final-review-prompt.d.ts +35 -0
- package/dist/services/final-review/final-review-prompt.js +112 -0
- package/dist/services/final-review/final-review-reviewer.d.ts +57 -0
- package/dist/services/final-review/final-review-reviewer.js +95 -0
- package/dist/services/final-review/final-review-runner.d.ts +3 -0
- package/dist/services/final-review/final-review-runner.js +158 -0
- package/dist/services/final-review/final-review-service.d.ts +119 -373
- package/dist/services/final-review/final-review-service.js +48 -1380
- package/dist/services/final-review/final-review-verdicts.d.ts +60 -0
- package/dist/services/final-review/final-review-verdicts.js +91 -0
- package/dist/services/final-review/index.d.ts +3 -3
- package/dist/services/final-review/index.js +2 -2
- package/dist/services/final-review/pre-post-diff.js +32 -29
- package/dist/services/fixture/fixture-capture-service.js +14 -6
- package/dist/services/fresh-context/trigger-scan.js +13 -2
- package/dist/services/fuzzy-matching/fuzzy-match-service.js +1 -1
- package/dist/services/fuzzy-matching/fzf-pick-service.js +6 -1
- package/dist/services/hooks/pre-tool-code-gate.js +2 -2
- package/dist/services/hooks/presence-marker-detector.js +12 -2
- package/dist/services/hooks/worktree-authorization-gate.js +21 -7
- package/dist/services/ide/adapters/claude-code-adapter.js +30 -17
- package/dist/services/ide/adapters/codex-adapter.js +3 -5
- package/dist/services/ide/adapters/cursor-adapter.js +3 -5
- package/dist/services/ide/adapters/hermes-adapter.js +2 -4
- package/dist/services/ide/adapters/openclaw-adapter.js +2 -4
- package/dist/services/ide/adapters/qoder-adapter.js +2 -4
- package/dist/services/ide/adapters/tongyi-lingma-adapter.js +1 -1
- package/dist/services/ide/adapters/trae-adapter.js +3 -5
- package/dist/services/ide/adapters/zcode-adapter.js +8 -7
- package/dist/services/ide/current-model-detector.js +2 -1
- package/dist/services/ide/ide-compact-types.d.ts +153 -0
- package/dist/services/ide/ide-compact-types.js +1 -0
- package/dist/services/ide/ide-registry.js +1 -1
- package/dist/services/ide/ide-types.d.ts +7 -145
- package/dist/services/ide/resource-profile.js +1 -1
- package/dist/services/ide/shared/atomic-json.js +2 -1
- package/dist/services/impact/impact-scan-service.js +12 -5
- package/dist/services/job/job-commit-verification.d.ts +73 -0
- package/dist/services/job/job-commit-verification.js +72 -0
- package/dist/services/job/job-orchestrator.d.ts +42 -0
- package/dist/services/job/job-orchestrator.js +110 -10
- package/dist/services/job/job-progress-store.d.ts +75 -5
- package/dist/services/job/job-progress-store.js +83 -6
- package/dist/services/job/job-rotation.d.ts +1 -1
- package/dist/services/job/job-rotation.js +5 -1
- package/dist/services/job/job-state-store.js +2 -2
- package/dist/services/job/job-types.js +49 -20
- package/dist/services/job/subagent-job-wrapper.d.ts +1 -1
- package/dist/services/job/subagent-job-wrapper.js +5 -1
- package/dist/services/job-snapshot/snapshot.js +2 -2
- package/dist/services/karpathy-cost/karpathy-cost-check-service.js +23 -13
- package/dist/services/legacy/legacy-detector.js +51 -5
- package/dist/services/lint/detect-eslint.js +10 -4
- package/dist/services/lint/detect-ocr-18.js +11 -3
- package/dist/services/lint/eslint-runner-support.d.ts +22 -0
- package/dist/services/lint/eslint-runner-support.js +185 -0
- package/dist/services/lint/eslint-runner-types.d.ts +69 -0
- package/dist/services/lint/eslint-runner-types.js +11 -0
- package/dist/services/lint/eslint-runner.d.ts +4 -56
- package/dist/services/lint/eslint-runner.js +24 -178
- package/dist/services/lint/npx-resolver.js +1 -3
- package/dist/services/lint/ocr-18-acquire.js +15 -4
- package/dist/services/lint/ocr-multilang-adapter.js +4 -5
- package/dist/services/llm/anthropic-runner.js +4 -1
- package/dist/services/log/log-commands-service.js +2 -6
- package/dist/services/log/logger.js +15 -12
- package/dist/services/log/retention.js +3 -2
- package/dist/services/loop/evaluator-dispatcher.js +78 -42
- package/dist/services/loop/loop-bee-relation-service.d.ts +4 -4
- package/dist/services/loop/loop-bee-relation-service.js +36 -40
- package/dist/services/loop/loop-bee-relation-store.d.ts +3 -3
- package/dist/services/loop/loop-bee-relation-store.js +9 -11
- package/dist/services/loop/loop-bee-relation-types.d.ts +1 -1
- package/dist/services/loop/loop-bee-relation-types.js +14 -25
- package/dist/services/loop/loop-release-service.d.ts +2 -2
- package/dist/services/loop/loop-release-service.js +3 -3
- package/dist/services/loop/loop-release-store.d.ts +2 -2
- package/dist/services/loop/loop-release-store.js +4 -6
- package/dist/services/loop/loop-release-types.d.ts +1 -1
- package/dist/services/loop/loop-release-types.js +21 -31
- package/dist/services/loop/monotonic-guard-types.d.ts +51 -0
- package/dist/services/loop/monotonic-guard-types.js +9 -0
- package/dist/services/loop/monotonic-guard.d.ts +2 -43
- package/dist/services/loop/monotonic-runner-types.d.ts +63 -0
- package/dist/services/loop/monotonic-runner-types.js +17 -0
- package/dist/services/loop/monotonic-runner.d.ts +3 -34
- package/dist/services/loop/monotonic-runner.js +10 -20
- package/dist/services/loop/run-driver.js +16 -8
- package/dist/services/loop/spec-service.d.ts +0 -5
- package/dist/services/loop/spec-service.js +49 -9
- package/dist/services/memory/llm-reranker-core.d.ts +108 -0
- package/dist/services/memory/llm-reranker-core.js +105 -0
- package/dist/services/memory/llm-reranker.d.ts +3 -94
- package/dist/services/memory/llm-reranker.js +13 -102
- package/dist/services/memory/memory-ingest-service.d.ts +1 -22
- package/dist/services/memory/memory-ingest-service.js +29 -76
- package/dist/services/memory/memory-ingest-support.d.ts +23 -0
- package/dist/services/memory/memory-ingest-support.js +81 -0
- package/dist/services/memory/memory-rotate-service.js +41 -8
- package/dist/services/memory/memory-search-service.js +8 -4
- package/dist/services/memory/project-context-service.js +26 -5
- package/dist/services/memory/project-memory-service/index/kind-dispatch.d.ts +2 -7
- package/dist/services/memory/project-memory-service/index/kind-dispatch.js +17 -136
- package/dist/services/memory/project-memory-service/index/project-memory-plan-exec.d.ts +7 -0
- package/dist/services/memory/project-memory-service/index/project-memory-plan-exec.js +150 -0
- package/dist/services/memory/project-memory-service/index/ranking.js +6 -3
- package/dist/services/memory/project-memory-service/index/reindex.js +14 -5
- package/dist/services/memory/project-memory-service/index.d.ts +1 -1
- package/dist/services/memory/project-memory-service/index.js +1 -1
- package/dist/services/memory/project-memory-service/memory-kinds.d.ts +31 -0
- package/dist/services/memory/project-memory-service/memory-kinds.js +87 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter-parse.d.ts +24 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter-parse.js +104 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter.d.ts +2 -24
- package/dist/services/memory/project-memory-service/parsers/frontmatter.js +28 -79
- package/dist/services/memory/project-memory-service/parsers/markdown-pure.js +15 -3
- package/dist/services/memory/project-memory-service/store/atomic-write.d.ts +59 -0
- package/dist/services/memory/project-memory-service/store/atomic-write.js +189 -17
- package/dist/services/memory/project-memory-service/store/paths.js +2 -1
- package/dist/services/memory/project-memory-service/types.d.ts +3 -31
- package/dist/services/memory/project-memory-service/types.js +1 -76
- package/dist/services/migrate-skill-name/migrate.js +1 -1
- package/dist/services/migrate-skill-name/schema.js +1 -1
- package/dist/services/mode/mode-enforcement.js +4 -2
- package/dist/services/mode/mode-status-service.d.ts +27 -9
- package/dist/services/mode/mode-status-service.js +64 -12
- package/dist/services/observability/aggregation-helpers.d.ts +22 -0
- package/dist/services/observability/aggregation-helpers.js +65 -0
- package/dist/services/observability/aggregation-types.d.ts +66 -0
- package/dist/services/observability/aggregation-types.js +34 -0
- package/dist/services/observability/aggregation.d.ts +5 -53
- package/dist/services/observability/aggregation.js +17 -80
- package/dist/services/observability/jsonl-store.js +2 -1
- package/dist/services/observability/observability-schema.d.ts +71 -0
- package/dist/services/observability/observability-schema.js +64 -0
- package/dist/services/observability/observability-service.d.ts +3 -56
- package/dist/services/observability/observability-service.js +9 -49
- package/dist/services/openspec/coverage-evidence-reader.js +18 -11
- package/dist/services/openspec/openspec-archive-service.js +31 -24
- package/dist/services/openspec/openspec-init-service.js +8 -2
- package/dist/services/openspec/openspec-propose-from-doctor-service.js +1 -1
- package/dist/services/openspec/openspec-scan-service.js +4 -1
- package/dist/services/openspec/openspec-validate-service.js +26 -5
- package/dist/services/perf/perf-baseline-service.js +2 -6
- package/dist/services/polyrepo/polyrepo-dispatcher.js +2 -1
- package/dist/services/polyrepo/polyrepo-scanner.js +4 -1
- package/dist/services/prd/gate-evidence-derivation.d.ts +160 -0
- package/dist/services/prd/gate-evidence-derivation.js +270 -0
- package/dist/services/prd/handoff-auto-regen.js +13 -1
- package/dist/services/prd/handoff-frontmatter-shape.d.ts +42 -0
- package/dist/services/prd/handoff-frontmatter-shape.js +67 -0
- package/dist/services/prd/handoff-frontmatter.d.ts +1 -1
- package/dist/services/prd/handoff-frontmatter.js +63 -1
- package/dist/services/prd/handoff-gate-evidence.d.ts +95 -1
- package/dist/services/prd/handoff-gate-evidence.js +125 -57
- package/dist/services/prd/handoff-path-resolution.d.ts +37 -0
- package/dist/services/prd/handoff-path-resolution.js +101 -0
- package/dist/services/prd/handoff-service.d.ts +22 -38
- package/dist/services/prd/handoff-service.js +38 -127
- package/dist/services/prd/handoff-types.d.ts +40 -0
- package/dist/services/prd/handoff-types.js +28 -1
- package/dist/services/prd/prd-blocks-checker.js +28 -8
- package/dist/services/prd/project-scan-bootstrap-service.js +1 -5
- package/dist/services/prd/project-scan-reader.d.ts +7 -0
- package/dist/services/prd/project-scan-reader.js +8 -5
- package/dist/services/prd/project-scan-sediment.js +1 -4
- package/dist/services/preferences/preferences-service.js +6 -8
- package/dist/services/preferences/preferences-types.js +4 -4
- package/dist/services/qa/bdd-test-style-contract.d.ts +41 -0
- package/dist/services/qa/bdd-test-style-contract.js +37 -0
- package/dist/services/qa/bdd-test-style-verifier.d.ts +2 -24
- package/dist/services/qa/bdd-test-style-verifier.js +5 -31
- package/dist/services/qa/browser-event-logger.js +2 -1
- package/dist/services/qa/qa-business-review-state.js +20 -5
- package/dist/services/qa/screenshot-archive-service.js +1 -3
- package/dist/services/rd/ast-gate.js +2 -2
- package/dist/services/rd/impl.js +1 -1
- package/dist/services/rd/rd-service.js +117 -43
- package/dist/services/rd/reviewer-dispatch-policy.d.ts +36 -8
- package/dist/services/rd/reviewer-dispatch-policy.js +40 -15
- package/dist/services/rd/standards-diagnostic.js +4 -1
- package/dist/services/rd/strategy.js +10 -3
- package/dist/services/rd/tactical-stage.js +2 -2
- package/dist/services/rd/types.js +9 -7
- package/dist/services/rd-swarm/rd-swarm-service.d.ts +2 -45
- package/dist/services/rd-swarm/rd-swarm-service.js +140 -21
- package/dist/services/rd-swarm/rd-swarm-types.d.ts +54 -0
- package/dist/services/rd-swarm/rd-swarm-types.js +10 -0
- package/dist/services/recommendations/capability-map-service.js +10 -2
- package/dist/services/recommendations/capability-seed-items.js +81 -14
- package/dist/services/recommendations/capability-seed-mappings.js +420 -48
- package/dist/services/recommendations/capability-seed-sources-mcp-server.d.ts +9 -0
- package/dist/services/recommendations/capability-seed-sources-mcp-server.js +233 -0
- package/dist/services/recommendations/capability-seed-sources.js +127 -32
- package/dist/services/release/release-state.d.ts +2 -2
- package/dist/services/release/release-state.js +44 -15
- package/dist/services/release/version-precheck-layer-changeset.d.ts +2 -0
- package/dist/services/release/version-precheck-layer-changeset.js +43 -0
- package/dist/services/release/version-precheck-service.d.ts +11 -36
- package/dist/services/release/version-precheck-service.js +20 -104
- package/dist/services/release/version-precheck-support.d.ts +53 -0
- package/dist/services/release/version-precheck-support.js +64 -0
- package/dist/services/retrospective/retrospective-index.js +17 -3
- package/dist/services/retrospective/retrospective-search-service.js +6 -2
- package/dist/services/retrospective/retrospective-show.js +4 -1
- package/dist/services/reviewer/model-family.js +7 -1
- package/dist/services/reviewer/providers/anthropic.d.ts +5 -0
- package/dist/services/reviewer/providers/anthropic.js +10 -1
- package/dist/services/reviewer/providers/openai.d.ts +5 -0
- package/dist/services/reviewer/providers/openai.js +10 -1
- package/dist/services/reviewer/reviewer-config.js +4 -2
- package/dist/services/reviewer/reviewer-service.d.ts +2 -36
- package/dist/services/reviewer/reviewer-service.js +2 -1
- package/dist/services/reviewer/reviewer-types.d.ts +43 -0
- package/dist/services/reviewer/reviewer-types.js +1 -0
- package/dist/services/role/role-registry.js +9 -1
- package/dist/services/runtime/runtime-detector.js +4 -1
- package/dist/services/runtime/vendors/claude-code.js +14 -6
- package/dist/services/runtime/vendors/codex.js +11 -3
- package/dist/services/runtime/vendors/copilot.js +11 -3
- package/dist/services/sc/sc-service.js +28 -15
- package/dist/services/scan/acceptance-coverage-service.js +4 -1
- package/dist/services/scan/api-diff-openapi-schema-read.d.ts +67 -0
- package/dist/services/scan/api-diff-openapi-schema-read.js +154 -0
- package/dist/services/scan/api-diff-openapi.d.ts +16 -2
- package/dist/services/scan/api-diff-openapi.js +19 -123
- package/dist/services/scan/api-diff-recorded.js +16 -3
- package/dist/services/scan/api-diff-service.js +49 -16
- package/dist/services/scan/api-diff-types.js +12 -3
- package/dist/services/scan/api-surface-helpers.d.ts +13 -0
- package/dist/services/scan/api-surface-helpers.js +31 -0
- package/dist/services/scan/api-surface-service.d.ts +2 -45
- package/dist/services/scan/api-surface-service.js +15 -26
- package/dist/services/scan/api-surface-types.d.ts +54 -0
- package/dist/services/scan/api-surface-types.js +10 -0
- package/dist/services/scan/archetype-detection.d.ts +37 -0
- package/dist/services/scan/archetype-detection.js +142 -0
- package/dist/services/scan/archetype-service.js +36 -125
- package/dist/services/scan/diff-scope-service.js +35 -15
- package/dist/services/scan/existing-system-service.js +16 -99
- package/dist/services/scan/existing-system-visual-tokens.d.ts +20 -0
- package/dist/services/scan/existing-system-visual-tokens.js +123 -0
- package/dist/services/scan/file-size-policy.d.ts +86 -0
- package/dist/services/scan/file-size-policy.js +184 -0
- package/dist/services/scan/file-size-scan.d.ts +30 -3
- package/dist/services/scan/file-size-scan.js +47 -9
- package/dist/services/scan/karpathy-service.js +6 -1
- package/dist/services/scan/orphan-service.js +86 -20
- package/dist/services/scan/type-sanity-service.js +104 -10
- package/dist/services/sediment/dispose-confirm.d.ts +2 -2
- package/dist/services/sediment/dispose-confirm.js +2 -2
- package/dist/services/sediment/json-schema.d.ts +1 -1
- package/dist/services/sediment/json-schema.js +25 -13
- package/dist/services/sediment/manifest-lint.d.ts +1 -12
- package/dist/services/sediment/manifest-lint.js +1 -7
- package/dist/services/sediment/pool-paths.js +13 -9
- package/dist/services/sediment/pool-read.d.ts +1 -1
- package/dist/services/sediment/pool-read.js +42 -18
- package/dist/services/sediment/pool-rebuild-index.d.ts +1 -1
- package/dist/services/sediment/pool-rebuild-index.js +5 -5
- package/dist/services/sediment/pool-write.d.ts +1 -1
- package/dist/services/sediment/pool-write.js +7 -7
- package/dist/services/sediment/promotion-gate.d.ts +1 -1
- package/dist/services/sediment/promotion-gate.js +9 -9
- package/dist/services/sediment/types.d.ts +8 -8
- package/dist/services/session/binding-status-service.js +14 -4
- package/dist/services/session/caller-binding-service.js +2 -1
- package/dist/services/session/getSessionDir.js +4 -1
- package/dist/services/session/index.d.ts +1 -1
- package/dist/services/session/index.js +1 -1
- package/dist/services/session/resolve-caller-id.js +7 -5
- package/dist/services/session/session-binding-bridge.js +26 -25
- package/dist/services/session/session-checkpoint-service.js +1 -1
- package/dist/services/session/session-file-schema.d.ts +70 -0
- package/dist/services/session/session-file-schema.js +68 -0
- package/dist/services/session/session-manager.d.ts +6 -6
- package/dist/services/session/session-manager.js +30 -29
- package/dist/services/session/session-resume-service.js +2 -1
- package/dist/services/share/bundle-format-constants.d.ts +85 -0
- package/dist/services/share/bundle-format-constants.js +100 -0
- package/dist/services/share/bundle-reader.d.ts +3 -3
- package/dist/services/share/bundle-reader.js +75 -68
- package/dist/services/share/bundle-types.d.ts +3 -70
- package/dist/services/share/bundle-types.js +38 -107
- package/dist/services/share/bundle-writer.d.ts +3 -3
- package/dist/services/share/bundle-writer.js +101 -91
- package/dist/services/share/run-state-contract.d.ts +1 -1
- package/dist/services/share/run-state-contract.js +7 -13
- package/dist/services/signal/cancel-handler.js +2 -1
- package/dist/services/skill/resume-detector.js +6 -4
- package/dist/services/skill/skill-scheduler.js +3 -1
- package/dist/services/skill/skill-search-service.js +4 -4
- package/dist/services/skillhub/release-diff.d.ts +2 -2
- package/dist/services/skillhub/release-diff.js +6 -10
- package/dist/services/skillhub/release-export.d.ts +2 -2
- package/dist/services/skillhub/release-export.js +15 -17
- package/dist/services/skillhub/release-gc-blobs.d.ts +2 -2
- package/dist/services/skillhub/release-gc-blobs.js +4 -4
- package/dist/services/skillhub/release-import.d.ts +2 -2
- package/dist/services/skillhub/release-import.js +13 -12
- package/dist/services/skillhub/release-retain.d.ts +3 -3
- package/dist/services/skillhub/release-retain.js +22 -22
- package/dist/services/skillhub/sqlite-store.d.ts +1 -1
- package/dist/services/skillhub/sqlite-store.js +12 -11
- package/dist/services/skillhub/tar-runtime.js +15 -15
- package/dist/services/skillhub/types.d.ts +4 -4
- package/dist/services/skills/hooks-codegate-superpowers.js +16 -7
- package/dist/services/skills/hooks-settings-service.js +61 -19
- package/dist/services/skills/presence-lease-service.js +26 -16
- package/dist/services/skills/presence-lease-types.d.ts +1 -1
- package/dist/services/skills/presence-lease-types.js +1 -1
- package/dist/services/skills/skill-conformance-service.js +40 -8
- package/dist/services/skills/skill-presence-service.js +16 -14
- package/dist/services/skills/skill-runbook-service.js +2 -1
- package/dist/services/skills/skill-statusline-model.d.ts +128 -0
- package/dist/services/skills/skill-statusline-model.js +163 -0
- package/dist/services/skills/skill-statusline-renderer.js +4 -3
- package/dist/services/skills/skill-statusline-service.d.ts +3 -100
- package/dist/services/skills/skill-statusline-service.js +56 -163
- package/dist/services/skills/statusline-palette.js +11 -6
- package/dist/services/skills/statusline-settings-service.js +2 -1
- package/dist/services/skills/sync-service-support.d.ts +65 -0
- package/dist/services/skills/sync-service-support.js +50 -0
- package/dist/services/skills/sync-service.d.ts +3 -66
- package/dist/services/skills/sync-service.js +15 -53
- package/dist/services/slice/calibration-store.js +8 -2
- package/dist/services/slice/cross-pass-edge-merger.d.ts +3 -28
- package/dist/services/slice/cross-pass-edge-merger.js +13 -63
- package/dist/services/slice/cross-pass-edge-static-scan-support.d.ts +69 -0
- package/dist/services/slice/cross-pass-edge-static-scan-support.js +74 -0
- package/dist/services/slice/granularity-decider.js +2 -2
- package/dist/services/slice/slice-archive-service.js +8 -3
- package/dist/services/slice/slice-check-service.js +19 -8
- package/dist/services/slice/slice-decompose-runners.js +61 -23
- package/dist/services/slice/slice-decompose-service.js +4 -4
- package/dist/services/slice/slice-review-state.js +8 -2
- package/dist/services/smoke/smoke-paths-state.js +9 -2
- package/dist/services/sop/gate-enforce-service.js +9 -2
- package/dist/services/sop/sop-advance-service.js +14 -2
- package/dist/services/sop/sop-check-service.js +16 -4
- package/dist/services/sop/sop-paths.js +3 -1
- package/dist/services/sop/sop-registry-service.js +5 -1
- package/dist/services/sop/sop-service.js +29 -7
- package/dist/services/sop/sop-types.js +5 -1
- package/dist/services/standards/ide-aware-standards-service.js +2 -2
- package/dist/services/standards/loop-engineering-lint.js +12 -5
- package/dist/services/standards/loop-engineering-readiness-lint.js +5 -5
- package/dist/services/standards/migrate-claude-rules-service.js +9 -7
- package/dist/services/standards/missing-standards-detector.js +1 -3
- package/dist/services/standards/project-context-support.d.ts +50 -0
- package/dist/services/standards/project-context-support.js +244 -0
- package/dist/services/standards/project-context-types.d.ts +30 -0
- package/dist/services/standards/project-context-types.js +11 -0
- package/dist/services/standards/project-context.d.ts +10 -22
- package/dist/services/standards/project-context.js +27 -214
- package/dist/services/standards/project-standards-service.js +43 -12
- package/dist/services/standards/standards-render-common.d.ts +15 -0
- package/dist/services/standards/standards-render-common.js +49 -0
- package/dist/services/standards/standards-render.d.ts +1 -2
- package/dist/services/standards/standards-render.js +31 -58
- package/dist/services/standards/ui-library-dispatch-block.js +1 -1
- package/dist/services/tech/tech-change-id-service.js +7 -7
- package/dist/services/tech/tech-service.js +73 -26
- package/dist/services/test-cache/test-cache-service.js +8 -3
- package/dist/services/upgrade/1x-detector-service.js +5 -3
- package/dist/services/upgrade/gitignore-migrate-service.js +5 -5
- package/dist/services/upgrade/upgrade-service.js +36 -13
- package/dist/services/verdict/envelope-parsers.d.ts +84 -0
- package/dist/services/verdict/envelope-parsers.js +146 -0
- package/dist/services/verdict/envelopes.d.ts +50 -60
- package/dist/services/verdict/envelopes.js +18 -156
- package/dist/services/verdict/verdict-aggregator.js +27 -3
- package/dist/services/vm/vm-lease.js +15 -3
- package/dist/services/web/aria-node.d.ts +27 -0
- package/dist/services/web/aria-node.js +1 -0
- package/dist/services/web/browser-acquire.js +3 -1
- package/dist/services/web/browser-cache-probe.d.ts +18 -0
- package/dist/services/web/browser-cache-probe.js +110 -0
- package/dist/services/web/browser-session-manager.js +6 -2
- package/dist/services/web/daemon-registry.js +4 -1
- package/dist/services/web/playwright-loader.d.ts +2 -70
- package/dist/services/web/playwright-types.d.ts +75 -0
- package/dist/services/web/playwright-types.js +1 -0
- package/dist/services/web/snapshot-pruner.d.ts +2 -23
- package/dist/services/web/snapshot-pruner.js +8 -3
- package/dist/services/web/web-daemon-service.js +1 -3
- package/dist/services/web/web-install-service.d.ts +3 -32
- package/dist/services/web/web-install-service.js +21 -100
- package/dist/services/web/web-install-types.d.ts +31 -0
- package/dist/services/web/web-install-types.js +13 -0
- package/dist/services/web/web-login-profile.js +7 -5
- package/dist/services/web/web-protocol.js +3 -1
- package/dist/services/workflow/pipeline-verify-gate-support.js +63 -17
- package/dist/services/workflow/pipeline-verify-service.js +17 -6
- package/dist/services/workflow/plan-reader.js +5 -1
- package/dist/services/workflow/plan-refresher.js +20 -6
- package/dist/services/workflow/plan-trigger-detector.js +31 -8
- package/dist/services/workflow/provision-dispatch-node.js +8 -3
- package/dist/services/workflow/workflow-autonomous-resume-helpers.d.ts +3 -1
- package/dist/services/workflow/workflow-autonomous-resume-helpers.js +35 -144
- package/dist/services/workflow/workflow-autonomous-resume-validation.d.ts +16 -0
- package/dist/services/workflow/workflow-autonomous-resume-validation.js +155 -0
- package/dist/services/workflow/workflow-autonomous-service.js +25 -13
- package/dist/services/workflow/workflow-graph-store-helpers.d.ts +51 -0
- package/dist/services/workflow/workflow-graph-store-helpers.js +111 -0
- package/dist/services/workflow/workflow-graph-store.d.ts +2 -35
- package/dist/services/workflow/workflow-graph-store.js +30 -107
- package/dist/services/workflow/workflow-graph-types.js +3 -3
- package/dist/services/workflow/workflow-inflight-probe.js +14 -7
- package/dist/services/workflow/workflow-loader.js +5 -1
- package/dist/services/workflow/workflow-node-lifecycle.js +22 -21
- package/dist/services/workflow/workflow-presence-lifecycle-types.d.ts +50 -0
- package/dist/services/workflow/workflow-presence-lifecycle-types.js +1 -0
- package/dist/services/workflow/workflow-presence-lifecycle.d.ts +2 -42
- package/dist/services/workflow/workflow-presence-lifecycle.js +19 -21
- package/dist/services/workflow/workflow-router-service.js +169 -27
- package/dist/services/workflow/workflow-skip-service.js +14 -4
- package/dist/services/workflow/workflow-spec-builders.d.ts +15 -0
- package/dist/services/workflow/workflow-spec-builders.js +121 -0
- package/dist/services/workflow/workflow-spec.d.ts +7 -6
- package/dist/services/workflow/workflow-spec.js +22 -116
- package/dist/services/workflow/workflow-state-store.js +2 -1
- package/dist/services/workspace/migrate-1-4-1-service.js +80 -14
- package/dist/services/workspace/migrate-service.js +66 -16
- package/dist/services/workspace/reconcile-migrate.js +6 -2
- package/dist/services/workspace/reconcile-service.js +37 -16
- package/dist/services/workspace/workspace-claude-settings-materializer.js +7 -5
- package/dist/services/workspace/workspace-clean-service.js +4 -1
- package/dist/services/workspace/workspace-service.js +11 -3
- package/dist/services/workspace/workspace-state-service.js +1 -1
- package/dist/services/worktree/git-worktree-parser.js +13 -3
- package/dist/services/worktree/host-worktree-reconciler.js +8 -4
- package/dist/services/worktree/long-path-cleanup.js +23 -6
- package/dist/services/worktree/worktree-gc-guard.js +3 -1
- package/dist/services/worktree/worktree-lease-types.d.ts +53 -0
- package/dist/services/worktree/worktree-lease-types.js +10 -0
- package/dist/services/worktree/worktree-lease.d.ts +2 -44
- package/dist/shared/array-guards.d.ts +30 -0
- package/dist/shared/array-guards.js +32 -0
- package/dist/shared/format-md-compact-internals.d.ts +26 -0
- package/dist/shared/format-md-compact-internals.js +125 -0
- package/dist/shared/format-md-compact.js +1 -117
- package/dist/shared/fs-utils.js +2 -1
- package/dist/shared/incrementing-number.js +3 -3
- package/dist/shared/json-parse.d.ts +71 -0
- package/dist/shared/json-parse.js +32 -0
- package/dist/shared/json-schema-mini.js +3 -1
- package/dist/shared/path-safety.js +3 -1
- package/dist/shared/path-utils.d.ts +20 -0
- package/dist/shared/path-utils.js +26 -0
- package/dist/shared/planner-response.js +3 -3
- package/dist/shared/stale-policy.js +1 -3
- package/dist/skills/peaks-maker/index.js +11 -11
- package/package.json +32 -9
- package/scripts/clean-dist.mjs +1 -2
- package/scripts/copy-templates.mjs +2 -4
- package/scripts/install-skills.mjs +305 -125
- package/scripts/sync-version.mjs +25 -8
- package/scripts/watch.mjs +8 -2
- package/skills/bee/peaks-rd/SKILL.md +1 -1
- package/skills/bee/peaks-rd/references/rd-fanout-contracts.md +26 -10
- package/skills/bee/peaks-rd/references/rd-sub-agent-dispatch.md +1 -1
- package/skills/bee/peaks-rd/references/writing-handoff-frontmatter.md +6 -1
- package/skills/peaks-code/SKILL.md +1 -1
- package/skills/peaks-code/references/periodic-checkpoint.md +7 -5
- package/skills/peaks-code/references/startup-sequence.md +1 -1
- package/skills/peaks-final-review/SKILL.md +1 -1
- /package/{docs → contracts}/test-style-contract.md +0 -0
|
@@ -27,10 +27,18 @@ function buildInternalIssues(changeId, detail) {
|
|
|
27
27
|
issues.push({ level: 'warning', rule: 'why-non-empty', message: 'Why section is empty' });
|
|
28
28
|
}
|
|
29
29
|
if (proposal.whatChanges.length === 0) {
|
|
30
|
-
issues.push({
|
|
30
|
+
issues.push({
|
|
31
|
+
level: 'error',
|
|
32
|
+
rule: 'what-changes-non-empty',
|
|
33
|
+
message: 'What Changes section has no bullets'
|
|
34
|
+
});
|
|
31
35
|
}
|
|
32
36
|
if (proposal.acceptanceCriteria.length === 0) {
|
|
33
|
-
issues.push({
|
|
37
|
+
issues.push({
|
|
38
|
+
level: 'error',
|
|
39
|
+
rule: 'acceptance-non-empty',
|
|
40
|
+
message: 'Acceptance Criteria section has no bullets'
|
|
41
|
+
});
|
|
34
42
|
}
|
|
35
43
|
return issues;
|
|
36
44
|
}
|
|
@@ -57,11 +65,20 @@ export async function validateOpenSpecChange(changeId, options = {}) {
|
|
|
57
65
|
if (options.preferExternal === true) {
|
|
58
66
|
const outcome = await runner('openspec', ['validate', changeId]);
|
|
59
67
|
if (outcome.available) {
|
|
60
|
-
const cliOutput = [outcome.stdout, outcome.stderr]
|
|
68
|
+
const cliOutput = [outcome.stdout, outcome.stderr]
|
|
69
|
+
.filter((part) => part.length > 0)
|
|
70
|
+
.join('\n')
|
|
71
|
+
.trim();
|
|
61
72
|
const passed = outcome.exitCode === 0;
|
|
62
73
|
const issues = passed
|
|
63
74
|
? []
|
|
64
|
-
: [
|
|
75
|
+
: [
|
|
76
|
+
{
|
|
77
|
+
level: 'error',
|
|
78
|
+
rule: 'openspec-cli-failed',
|
|
79
|
+
message: `openspec validate exited with code ${outcome.exitCode ?? 'null'}`
|
|
80
|
+
}
|
|
81
|
+
];
|
|
65
82
|
return { changeId, valid: passed, source: 'openspec-cli', issues, cliOutput };
|
|
66
83
|
}
|
|
67
84
|
const internal = await runInternal(changeId, openspecRoot);
|
|
@@ -69,7 +86,11 @@ export async function validateOpenSpecChange(changeId, options = {}) {
|
|
|
69
86
|
return null;
|
|
70
87
|
}
|
|
71
88
|
internal.issues = [
|
|
72
|
-
{
|
|
89
|
+
{
|
|
90
|
+
level: 'warning',
|
|
91
|
+
rule: 'openspec-cli-unavailable',
|
|
92
|
+
message: 'openspec CLI not found, fell back to internal lint'
|
|
93
|
+
},
|
|
73
94
|
...internal.issues
|
|
74
95
|
];
|
|
75
96
|
return internal;
|
|
@@ -117,12 +117,8 @@ function renderBaselineTemplate() {
|
|
|
117
117
|
}
|
|
118
118
|
function buildPlan(projectRoot, apply) {
|
|
119
119
|
const sessionId = getSessionId(projectRoot);
|
|
120
|
-
const sessionRoot = sessionId !== null
|
|
121
|
-
|
|
122
|
-
: null;
|
|
123
|
-
const perfBaselinePath = sessionRoot !== null
|
|
124
|
-
? join(sessionRoot, 'rd', 'perf-baseline.md')
|
|
125
|
-
: null;
|
|
120
|
+
const sessionRoot = sessionId !== null ? getSessionDir(projectRoot, sessionId) : null;
|
|
121
|
+
const perfBaselinePath = sessionRoot !== null ? join(sessionRoot, 'rd', 'perf-baseline.md') : null;
|
|
126
122
|
const plannedWrites = [];
|
|
127
123
|
if (sessionRoot !== null && perfBaselinePath !== null) {
|
|
128
124
|
plannedWrites.push({
|
|
@@ -118,7 +118,8 @@ export function readManifest(root) {
|
|
|
118
118
|
const raw = readFileSync(p, 'utf8');
|
|
119
119
|
return JSON.parse(raw);
|
|
120
120
|
}
|
|
121
|
-
catch {
|
|
121
|
+
catch {
|
|
122
|
+
// TODO(g2): fail-closed JSON parse — null is the documented contract, caller checks via existsSync
|
|
122
123
|
return null;
|
|
123
124
|
}
|
|
124
125
|
}
|
|
@@ -29,7 +29,10 @@ function childHasPeaks(dir) {
|
|
|
29
29
|
* leading dots or dashes. Used when the dir name itself is the id
|
|
30
30
|
* (the common case). */
|
|
31
31
|
function sanitizeId(name) {
|
|
32
|
-
return name
|
|
32
|
+
return name
|
|
33
|
+
.toLowerCase()
|
|
34
|
+
.replace(/[^a-z0-9._-]+/g, '-')
|
|
35
|
+
.replace(/^[-.]+|[-.]+$/g, '');
|
|
33
36
|
}
|
|
34
37
|
/** Walk the parent root at depth 1 and return discovered children. */
|
|
35
38
|
export function scanPolyrepo(root, opts = {}) {
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where `gateEvidence` comes FROM, and where its promise is checked.
|
|
3
|
+
*
|
|
4
|
+
* B2 (merged with the B1 repair), rid `rid-b2-gate-evidence-wiring`.
|
|
5
|
+
*
|
|
6
|
+
* B1 made the field real at the SERVICE layer and QA found the hole that
|
|
7
|
+
* mattered (F1 of `rid-b1-qa`): all three frontmatter producers passed
|
|
8
|
+
* nothing, so no capsule on disk ever carried the field — the dead surface
|
|
9
|
+
* had moved one layer out, from "no producer function" to "no production
|
|
10
|
+
* caller". This module closes that by DERIVING the map instead of accepting
|
|
11
|
+
* it from a caller.
|
|
12
|
+
*
|
|
13
|
+
* WHY DERIVED, NOT PASSED IN. Every path in the map is a function of the
|
|
14
|
+
* session id, the request id and the REQUEST TYPE, all of which the producer
|
|
15
|
+
* already has. Asking the caller to supply the map would put a second source
|
|
16
|
+
* next to the derivation, and a CLI flag (`--gate-evidence <json>`) would
|
|
17
|
+
* additionally require the user to hand-author JSON, which the project's
|
|
18
|
+
* Human-NL-Choice-Only rule forbids. So: one function, computed, no flag.
|
|
19
|
+
*
|
|
20
|
+
* THE TYPE-AWARE TENSION, AND HOW IT IS RESOLVED. The schema doc
|
|
21
|
+
* (`skills/bee/peaks-rd/references/writing-handoff-frontmatter.md:53`) calls
|
|
22
|
+
* the five keys a schema and says "Missing keys → Gate C failure". Taken
|
|
23
|
+
* literally that demands all five paths in every capsule — and then a `docs`
|
|
24
|
+
* slice, which Gate C requires NO evidence from, would fail the gate for
|
|
25
|
+
* "declaring" `audit/perf-<rid>.md` and `audit/security-<rid>.md`, two files
|
|
26
|
+
* its type is not supposed to produce. Declaring evidence that does not and
|
|
27
|
+
* should not exist is a false claim, and a gate that fails on a false claim
|
|
28
|
+
* the writer invented is worse than useless.
|
|
29
|
+
*
|
|
30
|
+
* Resolution, and the reason it is not a special case: the map declares
|
|
31
|
+
* EXACTLY what this request type's transition gate requires, read from
|
|
32
|
+
* `PREREQUISITES_BY_TYPE` — the same table `checkPrerequisites` enforces at
|
|
33
|
+
* `rd:qa-handoff`. So:
|
|
34
|
+
*
|
|
35
|
+
* - feature / refactor → projectScan, prdHandoff, codeReview,
|
|
36
|
+
* securityReview, perfBaseline (all five)
|
|
37
|
+
* - bugfix → the same five
|
|
38
|
+
* - config → projectScan, securityReview (TWO keys, verified
|
|
39
|
+
* against the table rather than assumed — `CONFIG_TABLE['rd:qa-handoff']`
|
|
40
|
+
* is `[SECURITY_REVIEW]` alone, so there is no `prdHandoff`: config has no
|
|
41
|
+
* `AUDIT_REQUIRES_HANDOFF` row. An earlier revision of this comment
|
|
42
|
+
* claimed three, and QA caught prose that disagreed with the code, which
|
|
43
|
+
* is the defect this module exists to end. The security path declared is
|
|
44
|
+
* the config-specific `rd/security-review.md` — genuinely ridless, per its
|
|
45
|
+
* own row — not the documented `audit/security-<rid>.md`, which no config
|
|
46
|
+
* slice writes)
|
|
47
|
+
* - docs / chore → NOTHING. No `rd:qa-handoff` row ⇒ nothing for Gate C
|
|
48
|
+
* to validate ⇒ nothing declared (see below)
|
|
49
|
+
*
|
|
50
|
+
* WHY `projectScan` IS DECLARED, AND WHY ONLY FOR GATED TYPES. It is not read
|
|
51
|
+
* from the table — it is Gate A's artifact, and Gate A is type-independent
|
|
52
|
+
* ("After workspace init + project scan", step 0.6 of every workflow). But a
|
|
53
|
+
* declaration is only worth making when something VERIFIES it, and the only
|
|
54
|
+
* verifier is `checkDeclaredGateEvidence`, which runs on `rd:qa-handoff`. For a
|
|
55
|
+
* type with a gate row, Gate C therefore does check this path like any other.
|
|
56
|
+
* For `docs`/`chore` nothing ever reads it, so it is not declared: keeping an
|
|
57
|
+
* inert statement in every docs capsule would recreate, in miniature, the exact
|
|
58
|
+
* defect this whole line of work exists to remove — a claim no one reads, which
|
|
59
|
+
* is how the field was dead in the first place (F1 of `rid-b2-qa`). Scope, in
|
|
60
|
+
* one sentence: **this map declares the evidence paths Gate C will check for
|
|
61
|
+
* this slice**, so an empty declaration is the honest one when there is no such
|
|
62
|
+
* gate.
|
|
63
|
+
*
|
|
64
|
+
* THE REJECTED ALTERNATIVE, named so it is not silently revisited: declaring
|
|
65
|
+
* all five unconditionally and teaching Gate C to check only the
|
|
66
|
+
* type-required subset. Rejected because the capsule would then carry
|
|
67
|
+
* permanent false statements about files that must never exist, and every
|
|
68
|
+
* reader of the frontmatter (peaks-qa's own checklist among them) would need
|
|
69
|
+
* the same type-conditioned filter to avoid mis-reading them.
|
|
70
|
+
*
|
|
71
|
+
* NO DERIVATION → NO DECLARATION. When there is no request artifact to read
|
|
72
|
+
* the type off, this returns `undefined` and the producers write no
|
|
73
|
+
* `gateEvidence` block at all. Never a partial map: a half-derived declaration
|
|
74
|
+
* is a false statement about the missing half's keys, and the pre-B2 bytes are
|
|
75
|
+
* the honest fallback. An id the artifact service REFUSES is not this case and
|
|
76
|
+
* is not reported as `undefined` — see `deriveGateEvidenceForRequest`.
|
|
77
|
+
*/
|
|
78
|
+
import { type RequestType } from '../artifacts/artifact-prerequisites.js';
|
|
79
|
+
import { type GateEvidence } from './handoff-types.js';
|
|
80
|
+
/**
|
|
81
|
+
* The `gateEvidence` map for a slice of `requestType` — the evidence paths
|
|
82
|
+
* Gate C will check for it. Pure: no disk access, so a caller can compute it
|
|
83
|
+
* without side effects. Empty (`{}`) — never a partial map — when the type has
|
|
84
|
+
* no `rd:qa-handoff` row, because then there is no gate to declare anything to.
|
|
85
|
+
*/
|
|
86
|
+
export declare function deriveGateEvidence(opts: {
|
|
87
|
+
readonly sessionId: string;
|
|
88
|
+
readonly requestId: string;
|
|
89
|
+
readonly requestType: RequestType;
|
|
90
|
+
}): GateEvidence;
|
|
91
|
+
/**
|
|
92
|
+
* Derive for a request by reading its PRD artifact — the only place the
|
|
93
|
+
* request TYPE is recorded (`- type: <t>`, written by `peaks request init`
|
|
94
|
+
* and read back by `request-artifact-service.extractMetadata`).
|
|
95
|
+
*
|
|
96
|
+
* Returns `undefined` when there is NO artifact to read — the one case the
|
|
97
|
+
* producers turn into "write no block" (see the header). That is now the ONLY
|
|
98
|
+
* `undefined`: a `showRequestArtifact` that THROWS is deliberately not caught,
|
|
99
|
+
* so a caller can tell "this slice has nothing to declare" apart from "the
|
|
100
|
+
* artifact could not be read".
|
|
101
|
+
*
|
|
102
|
+
* F4 (`rid-f4-ceiling-breach`). This used to be `catch { return undefined }`,
|
|
103
|
+
* which folded those two into one value — and the repository's own ratchet
|
|
104
|
+
* caught it (`capability-guard-runner/contracts/J03.ts`, rule
|
|
105
|
+
* `catch-return-null`; the ceiling was written for exactly this shape). Nothing
|
|
106
|
+
* is lost by letting the throw through. The refusals `showRequestArtifact` can
|
|
107
|
+
* raise are the rid/sid ones, and BOTH callers reach a byte-identical message
|
|
108
|
+
* on the next statement anyway — `assertSafeHandoffIds` (`handoff-service.ts`)
|
|
109
|
+
* for `prd handoff init`, `generateEvidence`'s own guard for the evidence
|
|
110
|
+
* generator — so the user-visible failure is unchanged; only its origin moves
|
|
111
|
+
* two lines earlier. What the catch DID cover in practice was an I/O failure
|
|
112
|
+
* while reading the artifact file, and swallowing that writes a capsule with no
|
|
113
|
+
* declaration at all, which Gate C reads as "nothing declared, nothing to
|
|
114
|
+
* check" (`field-absent` is not this check's business, below). A silent hole is
|
|
115
|
+
* worse than a loud, already-duplicated one.
|
|
116
|
+
*/
|
|
117
|
+
export declare function deriveGateEvidenceForRequest(opts: {
|
|
118
|
+
readonly projectRoot: string;
|
|
119
|
+
readonly sessionId: string;
|
|
120
|
+
readonly requestId: string;
|
|
121
|
+
}): Promise<GateEvidence | undefined>;
|
|
122
|
+
/** `missing` / `warnings` in the same shape `checkPrerequisites` reports. */
|
|
123
|
+
export interface GateEvidenceDeclarationCheck {
|
|
124
|
+
readonly ok: boolean;
|
|
125
|
+
readonly missing: ReadonlyArray<{
|
|
126
|
+
path: string;
|
|
127
|
+
description: string;
|
|
128
|
+
}>;
|
|
129
|
+
readonly warnings: ReadonlyArray<{
|
|
130
|
+
path: string;
|
|
131
|
+
code: string;
|
|
132
|
+
message: string;
|
|
133
|
+
}>;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* GATE C — is the capsule's OWN declaration true?
|
|
137
|
+
*
|
|
138
|
+
* The division of labour, stated so the two checks cannot drift: the
|
|
139
|
+
* prerequisite table says which artifacts this type MUST produce (it owns the
|
|
140
|
+
* requirement and its file existence); this function says the capsule must
|
|
141
|
+
* not CLAIM evidence it does not have (it owns the declaration). Neither
|
|
142
|
+
* re-implements the other, and both read their paths from wherever the path
|
|
143
|
+
* really comes from.
|
|
144
|
+
*
|
|
145
|
+
* A missing declared path FAILS and names the key, because a declaration the
|
|
146
|
+
* gate cannot verify is exactly the "prose pretending to be data" state this
|
|
147
|
+
* field was created to end. Outcomes that are not failures, each for its own
|
|
148
|
+
* reason:
|
|
149
|
+
* - no capsule → not this check's business (`AUDIT_REQUIRES_HANDOFF` owns it)
|
|
150
|
+
* - `field-absent` → the capsule declares nothing; every pre-B1 capsule,
|
|
151
|
+
* and every slice whose producer could not derive a type
|
|
152
|
+
* - an unknown key → a WARNING: the five-key vocabulary is a typo trap, and
|
|
153
|
+
* the type's real requirement is still enforced by the table, so this
|
|
154
|
+
* informs without blocking
|
|
155
|
+
*/
|
|
156
|
+
export declare function checkDeclaredGateEvidence(opts: {
|
|
157
|
+
readonly projectRoot: string;
|
|
158
|
+
readonly sessionId: string;
|
|
159
|
+
readonly requestId: string;
|
|
160
|
+
}): Promise<GateEvidenceDeclarationCheck>;
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where `gateEvidence` comes FROM, and where its promise is checked.
|
|
3
|
+
*
|
|
4
|
+
* B2 (merged with the B1 repair), rid `rid-b2-gate-evidence-wiring`.
|
|
5
|
+
*
|
|
6
|
+
* B1 made the field real at the SERVICE layer and QA found the hole that
|
|
7
|
+
* mattered (F1 of `rid-b1-qa`): all three frontmatter producers passed
|
|
8
|
+
* nothing, so no capsule on disk ever carried the field — the dead surface
|
|
9
|
+
* had moved one layer out, from "no producer function" to "no production
|
|
10
|
+
* caller". This module closes that by DERIVING the map instead of accepting
|
|
11
|
+
* it from a caller.
|
|
12
|
+
*
|
|
13
|
+
* WHY DERIVED, NOT PASSED IN. Every path in the map is a function of the
|
|
14
|
+
* session id, the request id and the REQUEST TYPE, all of which the producer
|
|
15
|
+
* already has. Asking the caller to supply the map would put a second source
|
|
16
|
+
* next to the derivation, and a CLI flag (`--gate-evidence <json>`) would
|
|
17
|
+
* additionally require the user to hand-author JSON, which the project's
|
|
18
|
+
* Human-NL-Choice-Only rule forbids. So: one function, computed, no flag.
|
|
19
|
+
*
|
|
20
|
+
* THE TYPE-AWARE TENSION, AND HOW IT IS RESOLVED. The schema doc
|
|
21
|
+
* (`skills/bee/peaks-rd/references/writing-handoff-frontmatter.md:53`) calls
|
|
22
|
+
* the five keys a schema and says "Missing keys → Gate C failure". Taken
|
|
23
|
+
* literally that demands all five paths in every capsule — and then a `docs`
|
|
24
|
+
* slice, which Gate C requires NO evidence from, would fail the gate for
|
|
25
|
+
* "declaring" `audit/perf-<rid>.md` and `audit/security-<rid>.md`, two files
|
|
26
|
+
* its type is not supposed to produce. Declaring evidence that does not and
|
|
27
|
+
* should not exist is a false claim, and a gate that fails on a false claim
|
|
28
|
+
* the writer invented is worse than useless.
|
|
29
|
+
*
|
|
30
|
+
* Resolution, and the reason it is not a special case: the map declares
|
|
31
|
+
* EXACTLY what this request type's transition gate requires, read from
|
|
32
|
+
* `PREREQUISITES_BY_TYPE` — the same table `checkPrerequisites` enforces at
|
|
33
|
+
* `rd:qa-handoff`. So:
|
|
34
|
+
*
|
|
35
|
+
* - feature / refactor → projectScan, prdHandoff, codeReview,
|
|
36
|
+
* securityReview, perfBaseline (all five)
|
|
37
|
+
* - bugfix → the same five
|
|
38
|
+
* - config → projectScan, securityReview (TWO keys, verified
|
|
39
|
+
* against the table rather than assumed — `CONFIG_TABLE['rd:qa-handoff']`
|
|
40
|
+
* is `[SECURITY_REVIEW]` alone, so there is no `prdHandoff`: config has no
|
|
41
|
+
* `AUDIT_REQUIRES_HANDOFF` row. An earlier revision of this comment
|
|
42
|
+
* claimed three, and QA caught prose that disagreed with the code, which
|
|
43
|
+
* is the defect this module exists to end. The security path declared is
|
|
44
|
+
* the config-specific `rd/security-review.md` — genuinely ridless, per its
|
|
45
|
+
* own row — not the documented `audit/security-<rid>.md`, which no config
|
|
46
|
+
* slice writes)
|
|
47
|
+
* - docs / chore → NOTHING. No `rd:qa-handoff` row ⇒ nothing for Gate C
|
|
48
|
+
* to validate ⇒ nothing declared (see below)
|
|
49
|
+
*
|
|
50
|
+
* WHY `projectScan` IS DECLARED, AND WHY ONLY FOR GATED TYPES. It is not read
|
|
51
|
+
* from the table — it is Gate A's artifact, and Gate A is type-independent
|
|
52
|
+
* ("After workspace init + project scan", step 0.6 of every workflow). But a
|
|
53
|
+
* declaration is only worth making when something VERIFIES it, and the only
|
|
54
|
+
* verifier is `checkDeclaredGateEvidence`, which runs on `rd:qa-handoff`. For a
|
|
55
|
+
* type with a gate row, Gate C therefore does check this path like any other.
|
|
56
|
+
* For `docs`/`chore` nothing ever reads it, so it is not declared: keeping an
|
|
57
|
+
* inert statement in every docs capsule would recreate, in miniature, the exact
|
|
58
|
+
* defect this whole line of work exists to remove — a claim no one reads, which
|
|
59
|
+
* is how the field was dead in the first place (F1 of `rid-b2-qa`). Scope, in
|
|
60
|
+
* one sentence: **this map declares the evidence paths Gate C will check for
|
|
61
|
+
* this slice**, so an empty declaration is the honest one when there is no such
|
|
62
|
+
* gate.
|
|
63
|
+
*
|
|
64
|
+
* THE REJECTED ALTERNATIVE, named so it is not silently revisited: declaring
|
|
65
|
+
* all five unconditionally and teaching Gate C to check only the
|
|
66
|
+
* type-required subset. Rejected because the capsule would then carry
|
|
67
|
+
* permanent false statements about files that must never exist, and every
|
|
68
|
+
* reader of the frontmatter (peaks-qa's own checklist among them) would need
|
|
69
|
+
* the same type-conditioned filter to avoid mis-reading them.
|
|
70
|
+
*
|
|
71
|
+
* NO DERIVATION → NO DECLARATION. When there is no request artifact to read
|
|
72
|
+
* the type off, this returns `undefined` and the producers write no
|
|
73
|
+
* `gateEvidence` block at all. Never a partial map: a half-derived declaration
|
|
74
|
+
* is a false statement about the missing half's keys, and the pre-B2 bytes are
|
|
75
|
+
* the honest fallback. An id the artifact service REFUSES is not this case and
|
|
76
|
+
* is not reported as `undefined` — see `deriveGateEvidenceForRequest`.
|
|
77
|
+
*/
|
|
78
|
+
import { join } from 'node:path';
|
|
79
|
+
import { pathExists } from 'peaks-loop-shared/fs';
|
|
80
|
+
import { getPrerequisitesFor } from '../artifacts/artifact-prerequisites.js';
|
|
81
|
+
import { showRequestArtifact } from '../artifacts/request-artifact-service.js';
|
|
82
|
+
import { readHandoffGateEvidence } from './handoff-gate-evidence.js';
|
|
83
|
+
import { resolveHandoffPath } from './handoff-service.js';
|
|
84
|
+
import { GATE_EVIDENCE_KEYS } from './handoff-types.js';
|
|
85
|
+
import { PROJECT_SCAN_RELATIVE } from './project-scan-reader.js';
|
|
86
|
+
/**
|
|
87
|
+
* Map ONE prerequisite of the `rd:qa-handoff` table onto the five-key
|
|
88
|
+
* vocabulary. The PATHS come from the table (single source); this function
|
|
89
|
+
* only names which key each required artifact answers to, so a change to a
|
|
90
|
+
* prerequisite's path moves the declared path with it.
|
|
91
|
+
*
|
|
92
|
+
* `mut/mut-report.json`, `rd/karpathy-review-<rid>.md`,
|
|
93
|
+
* `rd/third-party-review.md`, `qa/test-cases/<rid>.md` and the unit-test
|
|
94
|
+
* marker have no key — the vocabulary is five keys, and those artifacts are
|
|
95
|
+
* already enforced by the table itself, so they are deliberately not
|
|
96
|
+
* declared here rather than being forced into a key that does not mean them.
|
|
97
|
+
*/
|
|
98
|
+
function gateKeyOfPrerequisitePath(relativePath) {
|
|
99
|
+
if (relativePath.startsWith('prd/handoff'))
|
|
100
|
+
return 'prdHandoff';
|
|
101
|
+
if (relativePath.startsWith('rd/code-review'))
|
|
102
|
+
return 'codeReview';
|
|
103
|
+
if (relativePath.startsWith('audit/security') || relativePath.startsWith('rd/security-review')) {
|
|
104
|
+
return 'securityReview';
|
|
105
|
+
}
|
|
106
|
+
if (relativePath.startsWith('audit/perf'))
|
|
107
|
+
return 'perfBaseline';
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* The `gateEvidence` map for a slice of `requestType` — the evidence paths
|
|
112
|
+
* Gate C will check for it. Pure: no disk access, so a caller can compute it
|
|
113
|
+
* without side effects. Empty (`{}`) — never a partial map — when the type has
|
|
114
|
+
* no `rd:qa-handoff` row, because then there is no gate to declare anything to.
|
|
115
|
+
*/
|
|
116
|
+
export function deriveGateEvidence(opts) {
|
|
117
|
+
const requirements = getPrerequisitesFor('rd', 'qa-handoff', opts.requestType);
|
|
118
|
+
// docs / chore land here: `MINIMAL_TABLE` has no row at that transition, so
|
|
119
|
+
// nothing is required and nothing is declared. An empty map renders no block
|
|
120
|
+
// at all (`handoff-frontmatter.ts`), so such a capsule is byte-identical to a
|
|
121
|
+
// pre-B2 one and carries no statement that nothing verifies.
|
|
122
|
+
if (requirements.length === 0)
|
|
123
|
+
return {};
|
|
124
|
+
const sessionRoot = join('.peaks', '_runtime', opts.sessionId);
|
|
125
|
+
const evidence = {
|
|
126
|
+
projectScan: PROJECT_SCAN_RELATIVE
|
|
127
|
+
};
|
|
128
|
+
for (const prerequisite of requirements) {
|
|
129
|
+
const key = gateKeyOfPrerequisitePath(prerequisite.relativePath);
|
|
130
|
+
if (key === null)
|
|
131
|
+
continue;
|
|
132
|
+
// `<rid>` is the table's own placeholder, resolved the way the table's
|
|
133
|
+
// resolver resolves it, so the declaration names the file the gate looks
|
|
134
|
+
// for.
|
|
135
|
+
evidence[key] = join(sessionRoot, prerequisite.relativePath.replace('<rid>', opts.requestId));
|
|
136
|
+
}
|
|
137
|
+
return evidence;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Derive for a request by reading its PRD artifact — the only place the
|
|
141
|
+
* request TYPE is recorded (`- type: <t>`, written by `peaks request init`
|
|
142
|
+
* and read back by `request-artifact-service.extractMetadata`).
|
|
143
|
+
*
|
|
144
|
+
* Returns `undefined` when there is NO artifact to read — the one case the
|
|
145
|
+
* producers turn into "write no block" (see the header). That is now the ONLY
|
|
146
|
+
* `undefined`: a `showRequestArtifact` that THROWS is deliberately not caught,
|
|
147
|
+
* so a caller can tell "this slice has nothing to declare" apart from "the
|
|
148
|
+
* artifact could not be read".
|
|
149
|
+
*
|
|
150
|
+
* F4 (`rid-f4-ceiling-breach`). This used to be `catch { return undefined }`,
|
|
151
|
+
* which folded those two into one value — and the repository's own ratchet
|
|
152
|
+
* caught it (`capability-guard-runner/contracts/J03.ts`, rule
|
|
153
|
+
* `catch-return-null`; the ceiling was written for exactly this shape). Nothing
|
|
154
|
+
* is lost by letting the throw through. The refusals `showRequestArtifact` can
|
|
155
|
+
* raise are the rid/sid ones, and BOTH callers reach a byte-identical message
|
|
156
|
+
* on the next statement anyway — `assertSafeHandoffIds` (`handoff-service.ts`)
|
|
157
|
+
* for `prd handoff init`, `generateEvidence`'s own guard for the evidence
|
|
158
|
+
* generator — so the user-visible failure is unchanged; only its origin moves
|
|
159
|
+
* two lines earlier. What the catch DID cover in practice was an I/O failure
|
|
160
|
+
* while reading the artifact file, and swallowing that writes a capsule with no
|
|
161
|
+
* declaration at all, which Gate C reads as "nothing declared, nothing to
|
|
162
|
+
* check" (`field-absent` is not this check's business, below). A silent hole is
|
|
163
|
+
* worse than a loud, already-duplicated one.
|
|
164
|
+
*/
|
|
165
|
+
export async function deriveGateEvidenceForRequest(opts) {
|
|
166
|
+
// F4 (`rid-f4-ceiling-breach`). The throw from `showRequestArtifact` is
|
|
167
|
+
// propagated, so a caller can tell "this slice has nothing to declare"
|
|
168
|
+
// (artifact missing → `artifact === null` → `requestType === null` →
|
|
169
|
+
// `undefined`) apart from "the artifact could not be read" (an id the
|
|
170
|
+
// service refuses → rejected with `Invalid request id: ...`). The old
|
|
171
|
+
// `catch { return undefined }` collapsed both into the same value, and the
|
|
172
|
+
// `catch-return-null` ratchet caught it. The refusals `showRequestArtifact`
|
|
173
|
+
// raises are the rid / sid ones, and both callers reach a byte-identical
|
|
174
|
+
// guard a few lines up — `assertSafeHandoffIds` for `prd handoff init`,
|
|
175
|
+
// `generateEvidence`'s own guard for the evidence generator — so the
|
|
176
|
+
// user-visible failure is unchanged; only its origin moves earlier.
|
|
177
|
+
const artifact = await showRequestArtifact({
|
|
178
|
+
projectRoot: opts.projectRoot,
|
|
179
|
+
role: 'prd',
|
|
180
|
+
requestId: opts.requestId,
|
|
181
|
+
sessionId: opts.sessionId
|
|
182
|
+
});
|
|
183
|
+
const requestType = artifact?.requestType ?? null;
|
|
184
|
+
if (requestType === null)
|
|
185
|
+
return undefined;
|
|
186
|
+
return deriveGateEvidence({
|
|
187
|
+
sessionId: opts.sessionId,
|
|
188
|
+
requestId: opts.requestId,
|
|
189
|
+
requestType
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* GATE C — is the capsule's OWN declaration true?
|
|
194
|
+
*
|
|
195
|
+
* The division of labour, stated so the two checks cannot drift: the
|
|
196
|
+
* prerequisite table says which artifacts this type MUST produce (it owns the
|
|
197
|
+
* requirement and its file existence); this function says the capsule must
|
|
198
|
+
* not CLAIM evidence it does not have (it owns the declaration). Neither
|
|
199
|
+
* re-implements the other, and both read their paths from wherever the path
|
|
200
|
+
* really comes from.
|
|
201
|
+
*
|
|
202
|
+
* A missing declared path FAILS and names the key, because a declaration the
|
|
203
|
+
* gate cannot verify is exactly the "prose pretending to be data" state this
|
|
204
|
+
* field was created to end. Outcomes that are not failures, each for its own
|
|
205
|
+
* reason:
|
|
206
|
+
* - no capsule → not this check's business (`AUDIT_REQUIRES_HANDOFF` owns it)
|
|
207
|
+
* - `field-absent` → the capsule declares nothing; every pre-B1 capsule,
|
|
208
|
+
* and every slice whose producer could not derive a type
|
|
209
|
+
* - an unknown key → a WARNING: the five-key vocabulary is a typo trap, and
|
|
210
|
+
* the type's real requirement is still enforced by the table, so this
|
|
211
|
+
* informs without blocking
|
|
212
|
+
*/
|
|
213
|
+
export async function checkDeclaredGateEvidence(opts) {
|
|
214
|
+
const capsule = resolveHandoffPath({
|
|
215
|
+
projectRoot: opts.projectRoot,
|
|
216
|
+
sessionId: opts.sessionId,
|
|
217
|
+
requestId: opts.requestId
|
|
218
|
+
});
|
|
219
|
+
if (capsule === null)
|
|
220
|
+
return { ok: true, missing: [], warnings: [] };
|
|
221
|
+
const declared = await readHandoffGateEvidence(capsule);
|
|
222
|
+
if (declared.status === 'field-absent' || declared.status === 'file-missing') {
|
|
223
|
+
return { ok: true, missing: [], warnings: [] };
|
|
224
|
+
}
|
|
225
|
+
// A capsule with NO frontmatter block cannot declare anything, and
|
|
226
|
+
// `AUDIT_REQUIRES_HANDOFF` — the prereq that owns capsule validity — accepts
|
|
227
|
+
// that shape on a substring check (`schemaVersion: 2` + `sha256:` appearing
|
|
228
|
+
// anywhere). Failing it here would make Gate C refuse capsules the gate next
|
|
229
|
+
// to it accepts, breaking the "the checker and `request transition` agree"
|
|
230
|
+
// property that `pipeline-verify-contract-drift.test.ts` pins. So the line is
|
|
231
|
+
// drawn at the fence, not at readability: no fence ⇒ nothing declared;
|
|
232
|
+
// a fence whose YAML will not parse ⇒ a declaration that may be inside and
|
|
233
|
+
// unreadable, and THAT fails below.
|
|
234
|
+
if (declared.status === 'frontmatter-malformed' && declared.reason === 'no-frontmatter-fence') {
|
|
235
|
+
return { ok: true, missing: [], warnings: [] };
|
|
236
|
+
}
|
|
237
|
+
if (declared.status !== 'ok') {
|
|
238
|
+
return {
|
|
239
|
+
ok: false,
|
|
240
|
+
missing: [
|
|
241
|
+
{
|
|
242
|
+
path: `gateEvidence(${declared.status})`,
|
|
243
|
+
description: `the handoff's gateEvidence declaration is unusable (${declared.status}) — ` +
|
|
244
|
+
'a declaration that cannot be read is not the same as no declaration'
|
|
245
|
+
}
|
|
246
|
+
],
|
|
247
|
+
warnings: []
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
const missing = [];
|
|
251
|
+
for (const key of GATE_EVIDENCE_KEYS) {
|
|
252
|
+
const declaredPath = declared.evidence[key];
|
|
253
|
+
if (declaredPath === undefined)
|
|
254
|
+
continue;
|
|
255
|
+
if (await pathExists(join(opts.projectRoot, declaredPath)))
|
|
256
|
+
continue;
|
|
257
|
+
missing.push({
|
|
258
|
+
path: `gateEvidence.${key}`,
|
|
259
|
+
description: `gateEvidence.${key} declares "${declaredPath}", which does not exist`
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
const warnings = declared.unknownKeys.map((key) => ({
|
|
263
|
+
path: `gateEvidence.${key}`,
|
|
264
|
+
code: 'gate-evidence-unknown-key',
|
|
265
|
+
message: `gateEvidence declares "${key}", which is not one of the five keys ` +
|
|
266
|
+
`(${GATE_EVIDENCE_KEYS.join(', ')}) — a misspelled key is why a required gate ` +
|
|
267
|
+
'can read as undeclared'
|
|
268
|
+
}));
|
|
269
|
+
return { ok: missing.length === 0, missing, warnings };
|
|
270
|
+
}
|
|
@@ -21,6 +21,7 @@ import { dirname, join } from 'node:path';
|
|
|
21
21
|
import { createHash } from 'node:crypto';
|
|
22
22
|
import { showRequestArtifact } from '../artifacts/request-artifact-service.js';
|
|
23
23
|
import { serializeHandoffFrontmatter } from './handoff-frontmatter.js';
|
|
24
|
+
import { deriveGateEvidence } from './gate-evidence-derivation.js';
|
|
24
25
|
import { handoffRelativePath, sha256OfBody } from './handoff-service.js';
|
|
25
26
|
import { normalizePath } from '../../shared/path-utils.js';
|
|
26
27
|
/**
|
|
@@ -64,7 +65,18 @@ export async function autoRegenPrdHandoff(opts) {
|
|
|
64
65
|
goals: [],
|
|
65
66
|
acceptanceCriteria: [],
|
|
66
67
|
preservedBehavior: [],
|
|
67
|
-
handoffPath: normalizePath(handoffPath.replace(opts.projectRoot, '')).replace(/^\//, '')
|
|
68
|
+
handoffPath: normalizePath(handoffPath.replace(opts.projectRoot, '')).replace(/^\//, ''),
|
|
69
|
+
// B2: DERIVED from the request type of the artifact this producer just
|
|
70
|
+
// read. B1 gave this function an optional caller-supplied map instead;
|
|
71
|
+
// with a single-source derivation available that option was the wrong
|
|
72
|
+
// shape — it left the one production caller (`request-commands.ts`) able
|
|
73
|
+
// to pass nothing, which is exactly the F1 hole. There is no input to
|
|
74
|
+
// forget now.
|
|
75
|
+
gateEvidence: deriveGateEvidence({
|
|
76
|
+
sessionId: opts.sessionId,
|
|
77
|
+
requestId: opts.requestId,
|
|
78
|
+
requestType: artifact.requestType
|
|
79
|
+
})
|
|
68
80
|
};
|
|
69
81
|
const content = `${serializeHandoffFrontmatter(frontmatter)}${body}`;
|
|
70
82
|
mkdirSync(dirname(handoffPath), { recursive: true });
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { Handoff, HandoffSchemaVersion } from './handoff-types.js';
|
|
2
|
+
/** Required schema version for new handoffs. */
|
|
3
|
+
export declare const HANDOFF_SCHEMA_VERSION: HandoffSchemaVersion;
|
|
4
|
+
export declare function serializeHandoff(handoff: Handoff): string;
|
|
5
|
+
/**
|
|
6
|
+
* N1: accept BOTH shapes of `schemaVersion` — the string `'2'` and the bare
|
|
7
|
+
* YAML number `2` — and reject any other value.
|
|
8
|
+
*
|
|
9
|
+
* The reader used to require `typeof v.schemaVersion === 'string'`. That made
|
|
10
|
+
* `readHandoff` refuse `prd/handoff.md` written by `handoff-auto-regen.ts`,
|
|
11
|
+
* which emits the unquoted `schemaVersion: 2`, while the
|
|
12
|
+
* `AUDIT_REQUIRES_HANDOFF` prereq — a SUBSTRING check for `schemaVersion: 2` —
|
|
13
|
+
* happily passed the same bytes. So the gate that exists to guarantee a
|
|
14
|
+
* readable handoff was satisfied by a handoff the parser would not read, and
|
|
15
|
+
* `peaks prd handoff verify` exited 1 on a healthy file.
|
|
16
|
+
*
|
|
17
|
+
* Slice `2026-09-14-handoff-writer-gate-divergence` then fixed the other half:
|
|
18
|
+
* the writer no longer emits the quoted form at all (see
|
|
19
|
+
* `handoff-frontmatter.ts`). This tolerance stays because handoffs already on
|
|
20
|
+
* disk were written by the old writer and by hand; the writer fix must not
|
|
21
|
+
* retroactively make them unreadable.
|
|
22
|
+
*/
|
|
23
|
+
export declare function isSchemaVersion2(value: unknown): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* B1: `gateEvidence` is optional, but when present it MUST be a map of
|
|
26
|
+
* strings — an ARRAY here is the pre-B1 shape its own test file used to
|
|
27
|
+
* write, and it is a broken declaration, not a claim.
|
|
28
|
+
*
|
|
29
|
+
* F2 of `rid-b1-qa` removed this function's own copy of the shape rule. It
|
|
30
|
+
* used to be a second predicate (same boundary, different downstream result)
|
|
31
|
+
* that let the same bytes read one way here and another way through
|
|
32
|
+
* `readHandoffGateEvidence`; both now ask `classifyGateEvidence`. Only
|
|
33
|
+
* `absent` and `ok` are accepted: a malformed declaration must be refused by
|
|
34
|
+
* `readHandoff` (which is documented to throw on malformed input) exactly as
|
|
35
|
+
* the reader refuses it, so the two can never disagree about the same file.
|
|
36
|
+
*
|
|
37
|
+
* Unknown keys are still accepted HERE — the map is normalized to the five
|
|
38
|
+
* known keys by the caller — because refusing them would make a typo render
|
|
39
|
+
* a whole capsule unreadable, and the reader's `unknownKeys` is the surface
|
|
40
|
+
* that makes the typo diagnosable instead.
|
|
41
|
+
*/
|
|
42
|
+
export declare function isGateEvidence(value: unknown): boolean;
|