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
|
@@ -22,46 +22,10 @@
|
|
|
22
22
|
* the body content as UTF-8 bytes. The body MUST be the literal
|
|
23
23
|
* markdown source — no normalization, no trailing-newline padding.
|
|
24
24
|
*/
|
|
25
|
-
import type { Handoff, HandoffProbe } from './handoff-types.js';
|
|
25
|
+
import type { GateEvidence, Handoff, HandoffProbe } from './handoff-types.js';
|
|
26
|
+
export { handoffRelativePath, resolveHandoffPath } from './handoff-path-resolution.js';
|
|
26
27
|
/** Compute the lowercase hex sha256 of a UTF-8 string. */
|
|
27
28
|
export declare function sha256OfBody(body: string): string;
|
|
28
|
-
/**
|
|
29
|
-
* The canonical capsule path for ONE SLICE, relative to the project root.
|
|
30
|
-
*
|
|
31
|
-
* Slice `2026-09-14-prd-capsule-rid-scoping`: the capsule used to be one slot
|
|
32
|
-
* per SESSION (`prd/handoff.md`), so the second slice's handoff silently
|
|
33
|
-
* overwrote the first slice's — and `AUDIT_REQUIRES_HANDOFF` stayed green
|
|
34
|
-
* because it never checked WHOSE rid the file named. Measured on
|
|
35
|
-
* `2026-09-13-session-21878f`: a four-slice job passed that prerequisite on a
|
|
36
|
-
* capsule left by a different line of work.
|
|
37
|
-
*
|
|
38
|
-
* This is the WRITE target, so it always carries the rid — a consumer-side
|
|
39
|
-
* fallback here would leave a rid-scoped requirement with a bare-name writer,
|
|
40
|
-
* which is the defect shape this slice exists to remove. Readers that must
|
|
41
|
-
* tolerate pre-rid-scoping sessions call `resolveHandoffPath` instead.
|
|
42
|
-
*/
|
|
43
|
-
export declare function handoffRelativePath(sessionId: string, requestId: string): string;
|
|
44
|
-
/**
|
|
45
|
-
* The capsule a CONSUMER should read for (session, requestId): the rid-scoped
|
|
46
|
-
* path when it is on disk, else the pre-rid-scoping bare name. Returns null
|
|
47
|
-
* when neither exists.
|
|
48
|
-
*
|
|
49
|
-
* Three sessions on disk still hold only the bare file
|
|
50
|
-
* (`2026-09-06-session-a87ca4`, `2026-09-12-session-e37ef0`,
|
|
51
|
-
* `2026-09-13-session-21878f`), so the legacy tier has to keep resolving for
|
|
52
|
-
* the gate and for every reader below.
|
|
53
|
-
*
|
|
54
|
-
* `requestId` is optional because the detect-only audit surface reaches its
|
|
55
|
-
* service without one. Such a caller can name only the bare path: a session
|
|
56
|
-
* holding nothing but rid-scoped capsules reports missing rather than picking
|
|
57
|
-
* among its siblings' capsules, which would re-open the cross-slice mix-up
|
|
58
|
-
* this scoping exists to close (fail closed, not "some capsule is there").
|
|
59
|
-
*/
|
|
60
|
-
export declare function resolveHandoffPath(opts: {
|
|
61
|
-
projectRoot: string;
|
|
62
|
-
sessionId: string;
|
|
63
|
-
requestId?: string;
|
|
64
|
-
}): string | null;
|
|
65
29
|
/** Pure: produce a Handoff with the frontmatter populated. Hash is
|
|
66
30
|
* computed here; callers MUST NOT pre-populate `handoffHash`. */
|
|
67
31
|
export declare function initHandoff(opts: {
|
|
@@ -74,6 +38,26 @@ export declare function initHandoff(opts: {
|
|
|
74
38
|
preservedBehavior: readonly string[];
|
|
75
39
|
/** Override path; defaults to `.peaks/_runtime/<sid>/prd/handoff-<rid>.md`. */
|
|
76
40
|
handoffPath?: string;
|
|
41
|
+
/** Paths to the gate evidence files, keyed by gate. Omitted field and
|
|
42
|
+
* empty map are equivalent here: neither renders a `gateEvidence` block,
|
|
43
|
+
* so a caller that declares nothing writes bytes identical to a pre-B1
|
|
44
|
+
* capsule.
|
|
45
|
+
*
|
|
46
|
+
* THIS IS NOT A SECOND SOURCE (B2). In production the value reaching this
|
|
47
|
+
* parameter is always `deriveGateEvidence(...)`
|
|
48
|
+
* (`services/prd/gate-evidence-derivation.ts`), which computes it from the
|
|
49
|
+
* request type and the gate table. This function stays pure — it does not
|
|
50
|
+
* read the type itself — so the map can be constructed without touching
|
|
51
|
+
* the disk; that is why the parameter exists rather than an internal call.
|
|
52
|
+
*
|
|
53
|
+
* SHAPE CONTRACT (F2 of `rid-b1-qa`, now enforced in both directions): a
|
|
54
|
+
* map this accepts is EXACTLY what `readHandoffGateEvidence` reports as
|
|
55
|
+
* `evidence` — `classifyGateEvidence` is the one shape rule behind both,
|
|
56
|
+
* and `parseHandoffContent` stores the classified map rather than the raw
|
|
57
|
+
* YAML. A declaration both paths REFUSE (`not-map` / `value-not-string`)
|
|
58
|
+
* is refused here by a throw and there by a status; neither silently
|
|
59
|
+
* produces a map the other cannot. */
|
|
60
|
+
gateEvidence?: GateEvidence;
|
|
77
61
|
}): Handoff;
|
|
78
62
|
/** Write a Handoff to disk. `projectRoot` is the absolute project
|
|
79
63
|
* root (so the `.peaks/_runtime/...` path is resolved absolutely).
|
|
@@ -23,111 +23,30 @@
|
|
|
23
23
|
* markdown source — no normalization, no trailing-newline padding.
|
|
24
24
|
*/
|
|
25
25
|
import { createHash } from 'node:crypto';
|
|
26
|
-
import { existsSync } from 'node:fs';
|
|
27
26
|
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
28
27
|
import { dirname, join } from 'node:path';
|
|
29
28
|
import { parse as parseYaml } from 'yaml';
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
import { classifyGateEvidence } from './handoff-gate-evidence.js';
|
|
30
|
+
import { HANDOFF_SCHEMA_VERSION, isGateEvidence, isSchemaVersion2, serializeHandoff } from './handoff-frontmatter-shape.js';
|
|
31
|
+
import { handoffRelativePath } from './handoff-path-resolution.js';
|
|
32
|
+
// Slice `b1-filesplit-campaign` (wave 3): the capsule PATH layer
|
|
33
|
+
// (`assertSafeHandoffIds` / `handoffRelativePath` / `resolveHandoffPath`) and the
|
|
34
|
+
// frontmatter field primitives (`HANDOFF_SCHEMA_VERSION` / `serializeHandoff` /
|
|
35
|
+
// `isSchemaVersion2` / `isGateEvidence`) moved VERBATIM to
|
|
36
|
+
// `./handoff-path-resolution.ts` and `./handoff-frontmatter-shape.ts` so this
|
|
37
|
+
// file clears the 300 raw-line cap. The public names below are re-exported from
|
|
38
|
+
// this path, so no importer changed; the id->path guard these joins carry is
|
|
39
|
+
// still measured — the new module is named in rule D's scanned set in
|
|
40
|
+
// `tests/unit/runtime/no-runtime-input-guard.test.ts`.
|
|
41
|
+
export { handoffRelativePath, resolveHandoffPath } from './handoff-path-resolution.js';
|
|
35
42
|
/** Compute the lowercase hex sha256 of a UTF-8 string. */
|
|
36
43
|
export function sha256OfBody(body) {
|
|
37
44
|
return createHash('sha256').update(body, 'utf8').digest('hex');
|
|
38
45
|
}
|
|
39
|
-
/**
|
|
40
|
-
* Both ids in a handoff path are caller-supplied path segments, so both are
|
|
41
|
-
* checked at the join. Added 2026-09-14 (repair R1, security audit F2 of
|
|
42
|
-
* `2026-09-14-cli-id-escape-instrumentation`).
|
|
43
|
-
*
|
|
44
|
-
* This function was introduced by `0536d5bd` — the commit that instrumented
|
|
45
|
-
* this defect class — with neither id checked, and it sat outside rule D's
|
|
46
|
-
* scanned layer, so the instrument could not see its own new member.
|
|
47
|
-
* Measured on the pre-fix tree (`prd handoff init --apply`, temp project,
|
|
48
|
-
* `ok: true` both times):
|
|
49
|
-
*
|
|
50
|
-
* --rid '../../../../../../README' replaced the project-root README.md
|
|
51
|
-
* --sid '../../../../SIDOUT' wrote 4 levels above the project root
|
|
52
|
-
*
|
|
53
|
-
* The two axes need two different controls, for a recorded reason: the rid has
|
|
54
|
-
* a pinned format (`REQUEST_ID_PATTERN`, no separator, no dot-dot, no drive)
|
|
55
|
-
* and the sid has none, so it gets the segment check. `isUnsafePathInput`
|
|
56
|
-
* alone is NOT enough for the rid — it admits `a/b` (two non-empty segments),
|
|
57
|
-
* which `request-artifact-service.ts` would reject.
|
|
58
|
-
*
|
|
59
|
-
* Guarding HERE rather than at the three `prd`/`env` flags means every producer
|
|
60
|
-
* that writes through this constructor — `initHandoff`'s default,
|
|
61
|
-
* `handoff-auto-regen.ts`, `evidence-generator.ts` — is covered by the join
|
|
62
|
-
* itself, not by each caller re-deciding.
|
|
63
|
-
*/
|
|
64
|
-
function assertSafeHandoffIds(sessionId, requestId) {
|
|
65
|
-
if (!REQUEST_ID_PATTERN.test(requestId)) {
|
|
66
|
-
throw new Error(`Invalid request id: ${requestId} (expected letters, digits, dots, underscores, or dashes)`);
|
|
67
|
-
}
|
|
68
|
-
if (isUnsafePathInput(sessionId)) {
|
|
69
|
-
throw new Error(`Invalid session id: ${sessionId} (must be a single path segment)`);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* The canonical capsule path for ONE SLICE, relative to the project root.
|
|
74
|
-
*
|
|
75
|
-
* Slice `2026-09-14-prd-capsule-rid-scoping`: the capsule used to be one slot
|
|
76
|
-
* per SESSION (`prd/handoff.md`), so the second slice's handoff silently
|
|
77
|
-
* overwrote the first slice's — and `AUDIT_REQUIRES_HANDOFF` stayed green
|
|
78
|
-
* because it never checked WHOSE rid the file named. Measured on
|
|
79
|
-
* `2026-09-13-session-21878f`: a four-slice job passed that prerequisite on a
|
|
80
|
-
* capsule left by a different line of work.
|
|
81
|
-
*
|
|
82
|
-
* This is the WRITE target, so it always carries the rid — a consumer-side
|
|
83
|
-
* fallback here would leave a rid-scoped requirement with a bare-name writer,
|
|
84
|
-
* which is the defect shape this slice exists to remove. Readers that must
|
|
85
|
-
* tolerate pre-rid-scoping sessions call `resolveHandoffPath` instead.
|
|
86
|
-
*/
|
|
87
|
-
export function handoffRelativePath(sessionId, requestId) {
|
|
88
|
-
assertSafeHandoffIds(sessionId, requestId);
|
|
89
|
-
return join('.peaks', '_runtime', sessionId, 'prd', `handoff-${requestId}.md`);
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* The capsule a CONSUMER should read for (session, requestId): the rid-scoped
|
|
93
|
-
* path when it is on disk, else the pre-rid-scoping bare name. Returns null
|
|
94
|
-
* when neither exists.
|
|
95
|
-
*
|
|
96
|
-
* Three sessions on disk still hold only the bare file
|
|
97
|
-
* (`2026-09-06-session-a87ca4`, `2026-09-12-session-e37ef0`,
|
|
98
|
-
* `2026-09-13-session-21878f`), so the legacy tier has to keep resolving for
|
|
99
|
-
* the gate and for every reader below.
|
|
100
|
-
*
|
|
101
|
-
* `requestId` is optional because the detect-only audit surface reaches its
|
|
102
|
-
* service without one. Such a caller can name only the bare path: a session
|
|
103
|
-
* holding nothing but rid-scoped capsules reports missing rather than picking
|
|
104
|
-
* among its siblings' capsules, which would re-open the cross-slice mix-up
|
|
105
|
-
* this scoping exists to close (fail closed, not "some capsule is there").
|
|
106
|
-
*/
|
|
107
|
-
export function resolveHandoffPath(opts) {
|
|
108
|
-
// The legacy bare-name candidate below is a second join of the same sid, in a
|
|
109
|
-
// second function, so it needs the sid guarded in its own right — the
|
|
110
|
-
// optional-requestId branch reaches `handoffRelativePath` (guarded there), but
|
|
111
|
-
// the branch that is taken when a caller has NO rid reaches this join only.
|
|
112
|
-
if (isUnsafePathInput(opts.sessionId)) {
|
|
113
|
-
throw new Error(`Invalid session id: ${opts.sessionId} (must be a single path segment)`);
|
|
114
|
-
}
|
|
115
|
-
const candidates = [
|
|
116
|
-
...(opts.requestId !== undefined ? [handoffRelativePath(opts.sessionId, opts.requestId)] : []),
|
|
117
|
-
join('.peaks', '_runtime', opts.sessionId, 'prd', 'handoff.md')
|
|
118
|
-
];
|
|
119
|
-
for (const relative of candidates) {
|
|
120
|
-
const absolute = join(opts.projectRoot, relative);
|
|
121
|
-
if (existsSync(absolute))
|
|
122
|
-
return absolute;
|
|
123
|
-
}
|
|
124
|
-
return null;
|
|
125
|
-
}
|
|
126
46
|
/** Pure: produce a Handoff with the frontmatter populated. Hash is
|
|
127
47
|
* computed here; callers MUST NOT pre-populate `handoffHash`. */
|
|
128
48
|
export function initHandoff(opts) {
|
|
129
|
-
const handoffPath = opts.handoffPath ??
|
|
130
|
-
handoffRelativePath(opts.sessionId, opts.requestId);
|
|
49
|
+
const handoffPath = opts.handoffPath ?? handoffRelativePath(opts.sessionId, opts.requestId);
|
|
131
50
|
const handoffHash = sha256OfBody(opts.body);
|
|
132
51
|
const frontmatter = {
|
|
133
52
|
requestId: opts.requestId,
|
|
@@ -139,6 +58,12 @@ export function initHandoff(opts) {
|
|
|
139
58
|
acceptanceCriteria: [...opts.acceptanceCriteria],
|
|
140
59
|
preservedBehavior: [...opts.preservedBehavior],
|
|
141
60
|
handoffPath,
|
|
61
|
+
// Conditionally spread rather than `gateEvidence: undefined`: this
|
|
62
|
+
// tsconfig sets `exactOptionalPropertyTypes`, and an explicit `undefined`
|
|
63
|
+
// would also make `serializeHandoffFrontmatter`'s
|
|
64
|
+
// `frontmatter.gateEvidence` key present-but-undefined for every caller
|
|
65
|
+
// that declares nothing.
|
|
66
|
+
...(opts.gateEvidence === undefined ? {} : { gateEvidence: opts.gateEvidence })
|
|
142
67
|
};
|
|
143
68
|
return { frontmatter, body: opts.body };
|
|
144
69
|
}
|
|
@@ -187,7 +112,7 @@ export async function verifyHandoff(filePath) {
|
|
|
187
112
|
return {
|
|
188
113
|
ok: false,
|
|
189
114
|
reason: 'schema-version-mismatch',
|
|
190
|
-
actualHash: handoff.frontmatter.handoffHash
|
|
115
|
+
actualHash: handoff.frontmatter.handoffHash
|
|
191
116
|
};
|
|
192
117
|
}
|
|
193
118
|
const actualHash = sha256OfBody(handoff.body);
|
|
@@ -196,7 +121,7 @@ export async function verifyHandoff(filePath) {
|
|
|
196
121
|
ok: false,
|
|
197
122
|
reason: 'hash-mismatch',
|
|
198
123
|
actualHash,
|
|
199
|
-
expectedHash: handoff.frontmatter.handoffHash
|
|
124
|
+
expectedHash: handoff.frontmatter.handoffHash
|
|
200
125
|
};
|
|
201
126
|
}
|
|
202
127
|
return { ok: true, actualHash, expectedHash: actualHash };
|
|
@@ -233,39 +158,24 @@ function parseHandoffContent(content) {
|
|
|
233
158
|
// frontmatter is returned with the canonical `'2'` rather than the raw scalar
|
|
234
159
|
// — otherwise every downstream `=== '2'` comparison would depend on which
|
|
235
160
|
// producer wrote the file.
|
|
161
|
+
//
|
|
162
|
+
// F2: `gateEvidence` is normalized the same way, for the same reason. The
|
|
163
|
+
// raw YAML value is not returned: the CLASSIFIED map is. Unknown keys are
|
|
164
|
+
// not part of `GateEvidence`, so storing the raw object made the interface
|
|
165
|
+
// claim a five-key map while holding a six-key one — and made
|
|
166
|
+
// `frontmatter.gateEvidence` disagree with what the field's reader reports
|
|
167
|
+
// for the same bytes. The predicate above has already rejected every shape
|
|
168
|
+
// that is not `absent` or `ok`, so this spread only ever adds a clean map.
|
|
169
|
+
const gateEvidenceShape = classifyGateEvidence(parsed.gateEvidence);
|
|
236
170
|
return {
|
|
237
|
-
frontmatter: {
|
|
171
|
+
frontmatter: {
|
|
172
|
+
...parsed,
|
|
173
|
+
schemaVersion: HANDOFF_SCHEMA_VERSION,
|
|
174
|
+
...(gateEvidenceShape.kind === 'ok' ? { gateEvidence: gateEvidenceShape.evidence } : {})
|
|
175
|
+
},
|
|
238
176
|
body
|
|
239
177
|
};
|
|
240
178
|
}
|
|
241
|
-
function serializeHandoff(handoff) {
|
|
242
|
-
// The one canonical frontmatter rendering, shared with
|
|
243
|
-
// `handoff-auto-regen.ts`. `yaml.stringify` used to render this block and
|
|
244
|
-
// emitted `schemaVersion: "2"` + a bare `handoffHash:`, which the
|
|
245
|
-
// `AUDIT_REQUIRES_HANDOFF` gate and both audit loaders all reject.
|
|
246
|
-
return `${serializeHandoffFrontmatter(handoff.frontmatter)}${handoff.body}`;
|
|
247
|
-
}
|
|
248
|
-
/**
|
|
249
|
-
* N1: accept BOTH shapes of `schemaVersion` — the string `'2'` and the bare
|
|
250
|
-
* YAML number `2` — and reject any other value.
|
|
251
|
-
*
|
|
252
|
-
* The reader used to require `typeof v.schemaVersion === 'string'`. That made
|
|
253
|
-
* `readHandoff` refuse `prd/handoff.md` written by `handoff-auto-regen.ts`,
|
|
254
|
-
* which emits the unquoted `schemaVersion: 2`, while the
|
|
255
|
-
* `AUDIT_REQUIRES_HANDOFF` prereq — a SUBSTRING check for `schemaVersion: 2` —
|
|
256
|
-
* happily passed the same bytes. So the gate that exists to guarantee a
|
|
257
|
-
* readable handoff was satisfied by a handoff the parser would not read, and
|
|
258
|
-
* `peaks prd handoff verify` exited 1 on a healthy file.
|
|
259
|
-
*
|
|
260
|
-
* Slice `2026-09-14-handoff-writer-gate-divergence` then fixed the other half:
|
|
261
|
-
* the writer no longer emits the quoted form at all (see
|
|
262
|
-
* `handoff-frontmatter.ts`). This tolerance stays because handoffs already on
|
|
263
|
-
* disk were written by the old writer and by hand; the writer fix must not
|
|
264
|
-
* retroactively make them unreadable.
|
|
265
|
-
*/
|
|
266
|
-
function isSchemaVersion2(value) {
|
|
267
|
-
return value === HANDOFF_SCHEMA_VERSION || value === 2;
|
|
268
|
-
}
|
|
269
179
|
/**
|
|
270
180
|
* The READER's shape check — deliberately looser than `verifyHandoff`:
|
|
271
181
|
* `handoffHash` must be a string, and nothing about its VALUE is validated here.
|
|
@@ -296,5 +206,6 @@ function isHandoffFrontmatter(value) {
|
|
|
296
206
|
Array.isArray(v.goals) &&
|
|
297
207
|
Array.isArray(v.acceptanceCriteria) &&
|
|
298
208
|
Array.isArray(v.preservedBehavior) &&
|
|
299
|
-
typeof v.handoffPath === 'string'
|
|
209
|
+
typeof v.handoffPath === 'string' &&
|
|
210
|
+
isGateEvidence(v.gateEvidence));
|
|
300
211
|
}
|
|
@@ -24,6 +24,39 @@
|
|
|
24
24
|
* IDs in frontmatter). Every consumer MUST refuse a handoff whose
|
|
25
25
|
* frontmatter is missing or carries `schemaVersion !== '2'`. */
|
|
26
26
|
export type HandoffSchemaVersion = '2';
|
|
27
|
+
/**
|
|
28
|
+
* The FIVE fixed `gateEvidence` keys, in canonical serialization order.
|
|
29
|
+
*
|
|
30
|
+
* This array is the single source of truth for the key set: the
|
|
31
|
+
* `GateEvidenceKey` type is derived from it, the serializer iterates it,
|
|
32
|
+
* and the reader matches against it. Slice B1
|
|
33
|
+
* (`2026-09-17-4-0-51-cleanup`) collapsed four mutually contradictory
|
|
34
|
+
* descriptions of this field (a `string[]` in the reader's code comment,
|
|
35
|
+
* a `string[]` of PATHS in its tests, a map of paths in
|
|
36
|
+
* `skills/bee/peaks-rd/references/writing-handoff-frontmatter.md:35-41`)
|
|
37
|
+
* onto the documented map. Do NOT re-spell these five literals anywhere
|
|
38
|
+
* else — a second copy is how the four descriptions diverged.
|
|
39
|
+
*/
|
|
40
|
+
export declare const GATE_EVIDENCE_KEYS: readonly ["projectScan", "prdHandoff", "codeReview", "securityReview", "perfBaseline"];
|
|
41
|
+
/** One of the five `gateEvidence` keys. Derived, never re-spelled. */
|
|
42
|
+
export type GateEvidenceKey = (typeof GATE_EVIDENCE_KEYS)[number];
|
|
43
|
+
/**
|
|
44
|
+
* Is `key` one of the five? THE membership test — the serializer's
|
|
45
|
+
* unknown-key check, the reader's classifier and the shape predicate all ask
|
|
46
|
+
* this one function, so no caller can disagree about what the key set is.
|
|
47
|
+
*/
|
|
48
|
+
export declare function isGateEvidenceKey(key: string): key is GateEvidenceKey;
|
|
49
|
+
/**
|
|
50
|
+
* `gateEvidence` — a partial map from gate key to the PATH of that gate's
|
|
51
|
+
* evidence file. Partial because a slice may legitimately not have run
|
|
52
|
+
* every gate; the consumer (Gate C, wired in slice B2) fails on a missing
|
|
53
|
+
* key, which is where "did you declare it?" is decided — NOT here.
|
|
54
|
+
*
|
|
55
|
+
* Unknown keys are not expressible in this type. The reader still reports
|
|
56
|
+
* them at runtime (`unknownKeys`) so a typo is diagnosable rather than
|
|
57
|
+
* silently dropped.
|
|
58
|
+
*/
|
|
59
|
+
export type GateEvidence = Readonly<Partial<Record<GateEvidenceKey, string>>>;
|
|
27
60
|
/**
|
|
28
61
|
* Handoff frontmatter — the structured header block between the
|
|
29
62
|
* leading and trailing `---` fences. `readonly` enforces D1's
|
|
@@ -47,6 +80,13 @@ export interface HandoffFrontmatter {
|
|
|
47
80
|
readonly preservedBehavior: readonly string[];
|
|
48
81
|
/** Absolute path to the handoff file on disk (for re-verify). */
|
|
49
82
|
readonly handoffPath: string;
|
|
83
|
+
/** Paths to the evidence files peaks-qa validates at Gate C, keyed by
|
|
84
|
+
* gate. ABSENT (not `{}`) when the slice declared none — the serializer
|
|
85
|
+
* omits the block entirely rather than emitting an empty map, so old
|
|
86
|
+
* handoffs gain no noise line. Read it through
|
|
87
|
+
* `readHandoffGateEvidence`, which reports WHY it is unusable instead of
|
|
88
|
+
* collapsing every failure to `null`. */
|
|
89
|
+
readonly gateEvidence?: GateEvidence;
|
|
50
90
|
}
|
|
51
91
|
/** Handoff — frontmatter + body. The body is the markdown source of
|
|
52
92
|
* truth that sub-agents and downstream consumers parse. */
|
|
@@ -20,4 +20,31 @@
|
|
|
20
20
|
* `.peaks/_runtime/current-change`). NEVER write under
|
|
21
21
|
* `.peaks/_runtime/<change-id>/...` directly (slice 2.8.3 hard ban).
|
|
22
22
|
*/
|
|
23
|
-
|
|
23
|
+
/**
|
|
24
|
+
* The FIVE fixed `gateEvidence` keys, in canonical serialization order.
|
|
25
|
+
*
|
|
26
|
+
* This array is the single source of truth for the key set: the
|
|
27
|
+
* `GateEvidenceKey` type is derived from it, the serializer iterates it,
|
|
28
|
+
* and the reader matches against it. Slice B1
|
|
29
|
+
* (`2026-09-17-4-0-51-cleanup`) collapsed four mutually contradictory
|
|
30
|
+
* descriptions of this field (a `string[]` in the reader's code comment,
|
|
31
|
+
* a `string[]` of PATHS in its tests, a map of paths in
|
|
32
|
+
* `skills/bee/peaks-rd/references/writing-handoff-frontmatter.md:35-41`)
|
|
33
|
+
* onto the documented map. Do NOT re-spell these five literals anywhere
|
|
34
|
+
* else — a second copy is how the four descriptions diverged.
|
|
35
|
+
*/
|
|
36
|
+
export const GATE_EVIDENCE_KEYS = [
|
|
37
|
+
'projectScan',
|
|
38
|
+
'prdHandoff',
|
|
39
|
+
'codeReview',
|
|
40
|
+
'securityReview',
|
|
41
|
+
'perfBaseline'
|
|
42
|
+
];
|
|
43
|
+
/**
|
|
44
|
+
* Is `key` one of the five? THE membership test — the serializer's
|
|
45
|
+
* unknown-key check, the reader's classifier and the shape predicate all ask
|
|
46
|
+
* this one function, so no caller can disagree about what the key set is.
|
|
47
|
+
*/
|
|
48
|
+
export function isGateEvidenceKey(key) {
|
|
49
|
+
return GATE_EVIDENCE_KEYS.includes(key);
|
|
50
|
+
}
|
|
@@ -17,10 +17,30 @@
|
|
|
17
17
|
import { readFileSync, existsSync, readdirSync, statSync } from 'node:fs';
|
|
18
18
|
import { join, resolve } from 'node:path';
|
|
19
19
|
const BLOCK_HEADINGS = [
|
|
20
|
-
{
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
{
|
|
21
|
+
block: 1,
|
|
22
|
+
name: '业务场景',
|
|
23
|
+
pattern: /^#{1,4}\s*(?:\d+\.\s*)?业务场景[^\n]*$/m,
|
|
24
|
+
requiredByDefault: true
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
block: 2,
|
|
28
|
+
name: '边界 case',
|
|
29
|
+
pattern: /^#{1,4}\s*(?:\d+\.\s*)?边界\s*case[^\n]*$/im,
|
|
30
|
+
requiredByDefault: true
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
block: 3,
|
|
34
|
+
name: 'UI 装配意图',
|
|
35
|
+
pattern: /^#{1,4}\s*(?:\d+\.\s*)?UI\s*装配[^\n]*$/im,
|
|
36
|
+
requiredByDefault: true
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
block: 4,
|
|
40
|
+
name: '上游基线',
|
|
41
|
+
pattern: /^#{1,4}\s*(?:\d+\.\s*)?上游基线[^\n]*$/m,
|
|
42
|
+
requiredByDefault: false
|
|
43
|
+
}
|
|
24
44
|
];
|
|
25
45
|
const MIN_CONTENT_LENGTH = 50;
|
|
26
46
|
export function findPrdArtifact(projectRoot, requestId) {
|
|
@@ -75,9 +95,7 @@ export function checkPrdBlocks(projectRoot, requestId) {
|
|
|
75
95
|
required: h.requiredByDefault,
|
|
76
96
|
present: false,
|
|
77
97
|
content: null,
|
|
78
|
-
issues: h.requiredByDefault
|
|
79
|
-
? ['PRD artifact not found — write the prd body first.']
|
|
80
|
-
: []
|
|
98
|
+
issues: h.requiredByDefault ? ['PRD artifact not found — write the prd body first.'] : []
|
|
81
99
|
})),
|
|
82
100
|
ok: false
|
|
83
101
|
};
|
|
@@ -95,7 +113,9 @@ export function checkPrdBlocks(projectRoot, requestId) {
|
|
|
95
113
|
present: false,
|
|
96
114
|
content: null,
|
|
97
115
|
issues: required
|
|
98
|
-
? [
|
|
116
|
+
? [
|
|
117
|
+
`Missing required block: ${h.name}. Add a heading like "## ${h.name}" with at least ${MIN_CONTENT_LENGTH} chars of content.`
|
|
118
|
+
]
|
|
99
119
|
: []
|
|
100
120
|
};
|
|
101
121
|
}
|
|
@@ -42,11 +42,7 @@ const SOURCE_FILE_EXTENSIONS = /\.(tsx?|jsx?|vue|svelte)$/;
|
|
|
42
42
|
* here — those projects should be detected via `package.json`
|
|
43
43
|
* workspaces[] field below.
|
|
44
44
|
*/
|
|
45
|
-
const MONOREPO_ROOT_CONFIGS = [
|
|
46
|
-
'pnpm-workspace.yaml',
|
|
47
|
-
'turbo.json',
|
|
48
|
-
'nx.json'
|
|
49
|
-
];
|
|
45
|
+
const MONOREPO_ROOT_CONFIGS = ['pnpm-workspace.yaml', 'turbo.json', 'nx.json'];
|
|
50
46
|
/** True iff the project root declares pnpm / yarn / npm workspaces. */
|
|
51
47
|
function projectHasWorkspacesInPackageJson(projectRoot) {
|
|
52
48
|
const pkgPath = join(projectRoot, 'package.json');
|
|
@@ -10,6 +10,13 @@
|
|
|
10
10
|
* errors propagate (no silent failures).
|
|
11
11
|
*/
|
|
12
12
|
import type { BusinessKnowledge, ProjectScan } from './project-scan-types.js';
|
|
13
|
+
/**
|
|
14
|
+
* `.peaks/project-scan/project-scan.md`, project-relative. Exported so the
|
|
15
|
+
* gate-evidence derivation (`gate-evidence-derivation.ts`) can declare this
|
|
16
|
+
* path without spelling the literal a fourth time — it was already inlined in
|
|
17
|
+
* `project-commands.ts`, `workspace/init-command.ts` and here.
|
|
18
|
+
*/
|
|
19
|
+
export declare const PROJECT_SCAN_RELATIVE: string;
|
|
13
20
|
/** Read `.peaks/project-scan/project-scan.md`. Returns `null` when the
|
|
14
21
|
* file or its parent dir is absent (fresh project). Throws on other
|
|
15
22
|
* IO failures or malformed YAML. */
|
|
@@ -12,7 +12,13 @@
|
|
|
12
12
|
import { readFile } from 'node:fs/promises';
|
|
13
13
|
import { join } from 'node:path';
|
|
14
14
|
import { parse as parseYaml } from 'yaml';
|
|
15
|
-
|
|
15
|
+
/**
|
|
16
|
+
* `.peaks/project-scan/project-scan.md`, project-relative. Exported so the
|
|
17
|
+
* gate-evidence derivation (`gate-evidence-derivation.ts`) can declare this
|
|
18
|
+
* path without spelling the literal a fourth time — it was already inlined in
|
|
19
|
+
* `project-commands.ts`, `workspace/init-command.ts` and here.
|
|
20
|
+
*/
|
|
21
|
+
export const PROJECT_SCAN_RELATIVE = join('.peaks', 'project-scan', 'project-scan.md');
|
|
16
22
|
const BUSINESS_KNOWLEDGE_RELATIVE = join('.peaks', 'project-scan', 'business-knowledge.md');
|
|
17
23
|
/** Read `.peaks/project-scan/project-scan.md`. Returns `null` when the
|
|
18
24
|
* file or its parent dir is absent (fresh project). Throws on other
|
|
@@ -53,10 +59,7 @@ async function readOptionalFile(projectRoot, relativePath) {
|
|
|
53
59
|
}
|
|
54
60
|
}
|
|
55
61
|
function isEnoent(error) {
|
|
56
|
-
return
|
|
57
|
-
error !== null &&
|
|
58
|
-
'code' in error &&
|
|
59
|
-
error.code === 'ENOENT');
|
|
62
|
+
return typeof error === 'object' && error !== null && 'code' in error && error.code === 'ENOENT';
|
|
60
63
|
}
|
|
61
64
|
function parseProjectScanContent(content) {
|
|
62
65
|
const { frontmatter } = splitFrontmatter(content);
|
|
@@ -397,10 +397,7 @@ async function readOptionalFile(absolutePath) {
|
|
|
397
397
|
}
|
|
398
398
|
}
|
|
399
399
|
function isEnoent(error) {
|
|
400
|
-
return
|
|
401
|
-
error !== null &&
|
|
402
|
-
'code' in error &&
|
|
403
|
-
error.code === 'ENOENT');
|
|
400
|
+
return typeof error === 'object' && error !== null && 'code' in error && error.code === 'ENOENT';
|
|
404
401
|
}
|
|
405
402
|
/** Serialize a `BusinessKnowledge` to the markdown-table body format.
|
|
406
403
|
* Matches the bootstrap template at `.peaks/project-scan/business-knowledge.md`. */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import { dirname, join } from 'node:path';
|
|
3
|
-
import { DEFAULT_PREFERENCES, FANOUT_MODES, isFanoutMode, PREFERENCES_SCHEMA_VERSION
|
|
3
|
+
import { DEFAULT_PREFERENCES, FANOUT_MODES, isFanoutMode, PREFERENCES_SCHEMA_VERSION } from './preferences-types.js';
|
|
4
4
|
const PREFS_REL_PATH = '.peaks/preferences.json';
|
|
5
5
|
export { DEFAULT_PREFERENCES, PREFERENCES_SCHEMA_VERSION };
|
|
6
6
|
export function preferencesPath(projectRoot) {
|
|
@@ -93,7 +93,7 @@ function mergePreferences(base, overrides) {
|
|
|
93
93
|
// that already specified `defaultMode` in their preferences.json.
|
|
94
94
|
const shallow = {
|
|
95
95
|
...base,
|
|
96
|
-
...Object.fromEntries(definedEntries)
|
|
96
|
+
...Object.fromEntries(definedEntries)
|
|
97
97
|
};
|
|
98
98
|
const overrideFanout = overrides.fanout;
|
|
99
99
|
if (overrideFanout !== undefined &&
|
|
@@ -107,7 +107,7 @@ function mergePreferences(base, overrides) {
|
|
|
107
107
|
}
|
|
108
108
|
return {
|
|
109
109
|
...shallow,
|
|
110
|
-
schema_version: PREFERENCES_SCHEMA_VERSION
|
|
110
|
+
schema_version: PREFERENCES_SCHEMA_VERSION
|
|
111
111
|
};
|
|
112
112
|
}
|
|
113
113
|
export function migratePreferences(projectRoot, opts = {}) {
|
|
@@ -122,9 +122,7 @@ export function migratePreferences(projectRoot, opts = {}) {
|
|
|
122
122
|
catch (err) {
|
|
123
123
|
throw new Error(`PREFERENCES_JSON_INVALID: failed to parse ${filePath}: ${err.message}`);
|
|
124
124
|
}
|
|
125
|
-
const fromVersion = typeof raw.schema_version === 'string'
|
|
126
|
-
? raw.schema_version
|
|
127
|
-
: 'unknown';
|
|
125
|
+
const fromVersion = typeof raw.schema_version === 'string' ? raw.schema_version : 'unknown';
|
|
128
126
|
if (fromVersion === PREFERENCES_SCHEMA_VERSION) {
|
|
129
127
|
return {
|
|
130
128
|
fromVersion,
|
|
@@ -158,9 +156,9 @@ export function migratePreferences(projectRoot, opts = {}) {
|
|
|
158
156
|
const migrated = mergePreferences(DEFAULT_PREFERENCES, {
|
|
159
157
|
...raw,
|
|
160
158
|
fanout: typeof raw.fanout === 'object' && raw.fanout !== null && !Array.isArray(raw.fanout)
|
|
161
|
-
?
|
|
159
|
+
? raw.fanout.defaultMode === 'serial'
|
|
162
160
|
? { defaultMode: 'fan-out' }
|
|
163
|
-
: raw.fanout
|
|
161
|
+
: raw.fanout
|
|
164
162
|
: { defaultMode: 'fan-out' }
|
|
165
163
|
});
|
|
166
164
|
let written = false;
|
|
@@ -26,12 +26,12 @@ export const DEFAULT_PREFERENCES = {
|
|
|
26
26
|
classifyRules: {
|
|
27
27
|
feature_threshold_files: 10,
|
|
28
28
|
feature_threshold_lines: 100,
|
|
29
|
-
runtime_clean_grace_hours: 24
|
|
29
|
+
runtime_clean_grace_hours: 24
|
|
30
30
|
},
|
|
31
31
|
swarmSpeculative: {
|
|
32
32
|
enabled: true,
|
|
33
33
|
maxConcurrent: 3,
|
|
34
|
-
minHitRate: 0.5
|
|
34
|
+
minHitRate: 0.5
|
|
35
35
|
},
|
|
36
36
|
loopAutonomousEnabled: false,
|
|
37
37
|
agentShieldEnabled: false,
|
|
@@ -55,6 +55,6 @@ export const DEFAULT_PREFERENCES = {
|
|
|
55
55
|
warmItemCap: 4,
|
|
56
56
|
warmMinTokenHits: 1,
|
|
57
57
|
selectionTimeBudgetMs: 200,
|
|
58
|
-
includeBodies: false
|
|
59
|
-
}
|
|
58
|
+
includeBodies: false
|
|
59
|
+
}
|
|
60
60
|
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `src/services/qa/bdd-test-style-contract.ts`
|
|
3
|
+
*
|
|
4
|
+
* Verdict types and pure string matchers extracted verbatim from
|
|
5
|
+
* `bdd-test-style-verifier.ts` (wave 2, file-size cap campaign) so the
|
|
6
|
+
* verifier stays under the 300 raw-line cap. Mechanical move only —
|
|
7
|
+
* the verifier re-exports every public type from its original path.
|
|
8
|
+
*/
|
|
9
|
+
/** Structured failure reasons the verifier can return. */
|
|
10
|
+
export type BddStyleFailureReason = 'missing-given-when-then' | 'description-no-should-when';
|
|
11
|
+
/** Successful verdict — includes the count of inspected `it`/`test` calls. */
|
|
12
|
+
export interface BddStyleOk {
|
|
13
|
+
readonly ok: true;
|
|
14
|
+
readonly scanned: number;
|
|
15
|
+
}
|
|
16
|
+
/** Structured failure verdict — the file/line makes the rejection actionable. */
|
|
17
|
+
export interface BddStyleFail {
|
|
18
|
+
readonly ok: false;
|
|
19
|
+
readonly reason: BddStyleFailureReason;
|
|
20
|
+
readonly file: string;
|
|
21
|
+
readonly line: number;
|
|
22
|
+
/** For `description-no-should-when`: the original description. */
|
|
23
|
+
readonly description?: string;
|
|
24
|
+
/** For `missing-given-when-then`: a stable string the caller can compare. */
|
|
25
|
+
readonly expected?: string;
|
|
26
|
+
}
|
|
27
|
+
export type BddStyleVerdict = BddStyleOk | BddStyleFail;
|
|
28
|
+
/** Public input surface — keep small so the contract is hard to misuse. */
|
|
29
|
+
export interface VerifyBddStyleInput {
|
|
30
|
+
readonly projectRoot: string;
|
|
31
|
+
readonly testFiles: readonly string[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Match the three leading comments against the BDD triple. Each
|
|
35
|
+
* entry must be a `// <keyword>:` line (with optional trailing
|
|
36
|
+
* whitespace); the keywords must appear in `given`, `when`, `then`
|
|
37
|
+
* order, case-insensitive.
|
|
38
|
+
*/
|
|
39
|
+
export declare function matchesBddTriple(triple: readonly string[]): boolean;
|
|
40
|
+
/** True when `text` contains `when` or `should` as a whole word. */
|
|
41
|
+
export declare function hasWhenOrShould(text: string): boolean;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `src/services/qa/bdd-test-style-contract.ts`
|
|
3
|
+
*
|
|
4
|
+
* Verdict types and pure string matchers extracted verbatim from
|
|
5
|
+
* `bdd-test-style-verifier.ts` (wave 2, file-size cap campaign) so the
|
|
6
|
+
* verifier stays under the 300 raw-line cap. Mechanical move only —
|
|
7
|
+
* the verifier re-exports every public type from its original path.
|
|
8
|
+
*/
|
|
9
|
+
/** Number of comment lines that make up the BDD triple (`given`/`when`/`then`). */
|
|
10
|
+
const BDD_TRIPLE_SIZE = 3;
|
|
11
|
+
/**
|
|
12
|
+
* Match the three leading comments against the BDD triple. Each
|
|
13
|
+
* entry must be a `// <keyword>:` line (with optional trailing
|
|
14
|
+
* whitespace); the keywords must appear in `given`, `when`, `then`
|
|
15
|
+
* order, case-insensitive.
|
|
16
|
+
*/
|
|
17
|
+
export function matchesBddTriple(triple) {
|
|
18
|
+
if (triple.length !== BDD_TRIPLE_SIZE)
|
|
19
|
+
return false;
|
|
20
|
+
// Each entry must be a `// <keyword>:` line, optionally followed
|
|
21
|
+
// by descriptive text. The Slice A migrator's `buildCommentBlock`
|
|
22
|
+
// produces `// given: the test setup` / `// when: the function
|
|
23
|
+
// under test is invoked` / `// then: the result matches the
|
|
24
|
+
// expectation` — the `when` line uses two spaces after the colon
|
|
25
|
+
// for visual alignment with `given:` and `then:`, so the regex
|
|
26
|
+
// is intentionally permissive about trailing text.
|
|
27
|
+
const patterns = [
|
|
28
|
+
/^\s*\/\/\s*given\s*:/i,
|
|
29
|
+
/^\s*\/\/\s*when\s*:/i,
|
|
30
|
+
/^\s*\/\/\s*then\s*:/i
|
|
31
|
+
];
|
|
32
|
+
return patterns.every((pat, i) => pat.test(triple[i] ?? ''));
|
|
33
|
+
}
|
|
34
|
+
/** True when `text` contains `when` or `should` as a whole word. */
|
|
35
|
+
export function hasWhenOrShould(text) {
|
|
36
|
+
return /(\bwhen\b|\bshould\b)/i.test(text);
|
|
37
|
+
}
|