peaks-loop 4.0.54 → 4.1.1
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 +61 -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 +86 -39
- 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 +11 -6
- package/dist/cli/commands/codegraph-status-command.js +6 -2
- package/dist/cli/commands/comments-commands.d.ts +14 -0
- package/dist/cli/commands/comments-commands.js +96 -0
- 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 +57 -21
- 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 +32 -17
- package/dist/cli/commands/core/standards-command.js +56 -14
- 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 +65 -32
- 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 +18 -23
- package/dist/cli/commands/ecc-commands.js +39 -36
- 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 +16 -6
- 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.js +1 -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/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 +8 -10
- 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 +10 -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/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 +66 -0
- package/dist/services/code/mode-gate.d.ts +4 -58
- package/dist/services/code/mode-gate.js +25 -69
- 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/user-touchpoint-classifier.js +0 -7
- package/dist/services/code-review/ecc-bridge.d.ts +6 -6
- 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.js +4 -1
- package/dist/services/codegraph/codegraph-exclude-integrity.js +4 -1
- package/dist/services/codegraph/codegraph-exclude-repair.js +1 -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/comments/citation-rules.d.ts +154 -0
- package/dist/services/comments/citation-rules.js +241 -0
- package/dist/services/comments/comment-audit.d.ts +57 -0
- package/dist/services/comments/comment-audit.js +100 -0
- package/dist/services/comments/comment-citations.d.ts +60 -0
- package/dist/services/comments/comment-citations.js +186 -0
- package/dist/services/comments/comment-hygiene.d.ts +79 -0
- package/dist/services/comments/comment-hygiene.js +133 -0
- package/dist/services/comments/comment-prune.d.ts +88 -0
- package/dist/services/comments/comment-prune.js +148 -0
- package/dist/services/comments/prune-apply.d.ts +60 -0
- package/dist/services/comments/prune-apply.js +150 -0
- package/dist/services/comments/repo-path-probe.d.ts +43 -0
- package/dist/services/comments/repo-path-probe.js +78 -0
- 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 +6 -187
- 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.d.ts +0 -16
- package/dist/services/log/retention.js +2 -18
- 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 +19 -7
- package/dist/services/memory/project-memory-service/store/atomic-write.js +144 -38
- 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/handoff-frontmatter-shape.d.ts +42 -0
- package/dist/services/prd/handoff-frontmatter-shape.js +67 -0
- package/dist/services/prd/handoff-frontmatter.js +62 -1
- package/dist/services/prd/handoff-gate-evidence.js +14 -10
- 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 +12 -38
- package/dist/services/prd/handoff-service.js +25 -147
- package/dist/services/prd/handoff-types.d.ts +33 -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.js +1 -4
- 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.js +4 -7
- 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/recommendations/installed-capability-detector.d.ts +5 -5
- package/dist/services/recommendations/installed-capability-detector.js +11 -10
- 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 +74 -0
- package/dist/services/scan/archetype-detection.js +315 -0
- package/dist/services/scan/archetype-service.js +58 -133
- 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/scan-types.d.ts +9 -0
- 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/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/generated-artifacts-stamp.d.ts +2 -2
- package/dist/services/workspace/generated-artifacts-stamp.js +2 -2
- 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 +12 -4
- 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 +31 -8
- package/scripts/clean-dist.mjs +1 -2
- package/scripts/copy-templates.mjs +2 -4
- package/scripts/install-skills.mjs +286 -283
- package/scripts/sync-version.mjs +25 -8
- package/scripts/watch.mjs +8 -2
- package/skills/bee/peaks-qa/references/reading-handoff-frontmatter.md +3 -1
- package/skills/bee/peaks-rd/references/parallel-review-fanout.md +1 -1
- package/skills/bee/peaks-rd/references/rd-fanout-contracts.md +3 -2
- package/skills/bee/peaks-rd/references/writing-handoff-frontmatter.md +29 -7
- package/skills/peaks-code/SKILL.md +1 -1
- package/skills/peaks-code/references/frontend-only-mode.md +2 -2
- package/skills/peaks-code/references/startup-sequence.md +0 -4
- package/dist/cli/commands/upgrade-commands.d.ts +0 -25
- package/dist/cli/commands/upgrade-commands.js +0 -154
- package/dist/services/upgrade/1x-detector-service.d.ts +0 -7
- package/dist/services/upgrade/1x-detector-service.js +0 -94
- package/dist/services/upgrade/gitignore-migrate-service.d.ts +0 -56
- package/dist/services/upgrade/gitignore-migrate-service.js +0 -170
- package/dist/services/upgrade/upgrade-service.d.ts +0 -81
- package/dist/services/upgrade/upgrade-service.js +0 -405
- package/skills/peaks-code/references/step-0-55-1x-detection.md +0 -83
|
@@ -27,10 +27,18 @@ function buildInternalIssues(changeId, detail) {
|
|
|
27
27
|
issues.push({ level: 'warning', rule: 'why-non-empty', message: 'Why section is empty' });
|
|
28
28
|
}
|
|
29
29
|
if (proposal.whatChanges.length === 0) {
|
|
30
|
-
issues.push({
|
|
30
|
+
issues.push({
|
|
31
|
+
level: 'error',
|
|
32
|
+
rule: 'what-changes-non-empty',
|
|
33
|
+
message: 'What Changes section has no bullets'
|
|
34
|
+
});
|
|
31
35
|
}
|
|
32
36
|
if (proposal.acceptanceCriteria.length === 0) {
|
|
33
|
-
issues.push({
|
|
37
|
+
issues.push({
|
|
38
|
+
level: 'error',
|
|
39
|
+
rule: 'acceptance-non-empty',
|
|
40
|
+
message: 'Acceptance Criteria section has no bullets'
|
|
41
|
+
});
|
|
34
42
|
}
|
|
35
43
|
return issues;
|
|
36
44
|
}
|
|
@@ -57,11 +65,20 @@ export async function validateOpenSpecChange(changeId, options = {}) {
|
|
|
57
65
|
if (options.preferExternal === true) {
|
|
58
66
|
const outcome = await runner('openspec', ['validate', changeId]);
|
|
59
67
|
if (outcome.available) {
|
|
60
|
-
const cliOutput = [outcome.stdout, outcome.stderr]
|
|
68
|
+
const cliOutput = [outcome.stdout, outcome.stderr]
|
|
69
|
+
.filter((part) => part.length > 0)
|
|
70
|
+
.join('\n')
|
|
71
|
+
.trim();
|
|
61
72
|
const passed = outcome.exitCode === 0;
|
|
62
73
|
const issues = passed
|
|
63
74
|
? []
|
|
64
|
-
: [
|
|
75
|
+
: [
|
|
76
|
+
{
|
|
77
|
+
level: 'error',
|
|
78
|
+
rule: 'openspec-cli-failed',
|
|
79
|
+
message: `openspec validate exited with code ${outcome.exitCode ?? 'null'}`
|
|
80
|
+
}
|
|
81
|
+
];
|
|
65
82
|
return { changeId, valid: passed, source: 'openspec-cli', issues, cliOutput };
|
|
66
83
|
}
|
|
67
84
|
const internal = await runInternal(changeId, openspecRoot);
|
|
@@ -69,7 +86,11 @@ export async function validateOpenSpecChange(changeId, options = {}) {
|
|
|
69
86
|
return null;
|
|
70
87
|
}
|
|
71
88
|
internal.issues = [
|
|
72
|
-
{
|
|
89
|
+
{
|
|
90
|
+
level: 'warning',
|
|
91
|
+
rule: 'openspec-cli-unavailable',
|
|
92
|
+
message: 'openspec CLI not found, fell back to internal lint'
|
|
93
|
+
},
|
|
73
94
|
...internal.issues
|
|
74
95
|
];
|
|
75
96
|
return internal;
|
|
@@ -117,12 +117,8 @@ function renderBaselineTemplate() {
|
|
|
117
117
|
}
|
|
118
118
|
function buildPlan(projectRoot, apply) {
|
|
119
119
|
const sessionId = getSessionId(projectRoot);
|
|
120
|
-
const sessionRoot = sessionId !== null
|
|
121
|
-
|
|
122
|
-
: null;
|
|
123
|
-
const perfBaselinePath = sessionRoot !== null
|
|
124
|
-
? join(sessionRoot, 'rd', 'perf-baseline.md')
|
|
125
|
-
: null;
|
|
120
|
+
const sessionRoot = sessionId !== null ? getSessionDir(projectRoot, sessionId) : null;
|
|
121
|
+
const perfBaselinePath = sessionRoot !== null ? join(sessionRoot, 'rd', 'perf-baseline.md') : null;
|
|
126
122
|
const plannedWrites = [];
|
|
127
123
|
if (sessionRoot !== null && perfBaselinePath !== null) {
|
|
128
124
|
plannedWrites.push({
|
|
@@ -118,7 +118,8 @@ export function readManifest(root) {
|
|
|
118
118
|
const raw = readFileSync(p, 'utf8');
|
|
119
119
|
return JSON.parse(raw);
|
|
120
120
|
}
|
|
121
|
-
catch {
|
|
121
|
+
catch {
|
|
122
|
+
// TODO(g2): fail-closed JSON parse — null is the documented contract, caller checks via existsSync
|
|
122
123
|
return null;
|
|
123
124
|
}
|
|
124
125
|
}
|
|
@@ -29,7 +29,10 @@ function childHasPeaks(dir) {
|
|
|
29
29
|
* leading dots or dashes. Used when the dir name itself is the id
|
|
30
30
|
* (the common case). */
|
|
31
31
|
function sanitizeId(name) {
|
|
32
|
-
return name
|
|
32
|
+
return name
|
|
33
|
+
.toLowerCase()
|
|
34
|
+
.replace(/[^a-z0-9._-]+/g, '-')
|
|
35
|
+
.replace(/^[-.]+|[-.]+$/g, '');
|
|
33
36
|
}
|
|
34
37
|
/** Walk the parent root at depth 1 and return discovered children. */
|
|
35
38
|
export function scanPolyrepo(root, opts = {}) {
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { Handoff, HandoffSchemaVersion } from './handoff-types.js';
|
|
2
|
+
/** Required schema version for new handoffs. */
|
|
3
|
+
export declare const HANDOFF_SCHEMA_VERSION: HandoffSchemaVersion;
|
|
4
|
+
export declare function serializeHandoff(handoff: Handoff): string;
|
|
5
|
+
/**
|
|
6
|
+
* N1: accept BOTH shapes of `schemaVersion` — the string `'2'` and the bare
|
|
7
|
+
* YAML number `2` — and reject any other value.
|
|
8
|
+
*
|
|
9
|
+
* The reader used to require `typeof v.schemaVersion === 'string'`. That made
|
|
10
|
+
* `readHandoff` refuse `prd/handoff.md` written by `handoff-auto-regen.ts`,
|
|
11
|
+
* which emits the unquoted `schemaVersion: 2`, while the
|
|
12
|
+
* `AUDIT_REQUIRES_HANDOFF` prereq — a SUBSTRING check for `schemaVersion: 2` —
|
|
13
|
+
* happily passed the same bytes. So the gate that exists to guarantee a
|
|
14
|
+
* readable handoff was satisfied by a handoff the parser would not read, and
|
|
15
|
+
* `peaks prd handoff verify` exited 1 on a healthy file.
|
|
16
|
+
*
|
|
17
|
+
* Slice `2026-09-14-handoff-writer-gate-divergence` then fixed the other half:
|
|
18
|
+
* the writer no longer emits the quoted form at all (see
|
|
19
|
+
* `handoff-frontmatter.ts`). This tolerance stays because handoffs already on
|
|
20
|
+
* disk were written by the old writer and by hand; the writer fix must not
|
|
21
|
+
* retroactively make them unreadable.
|
|
22
|
+
*/
|
|
23
|
+
export declare function isSchemaVersion2(value: unknown): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* B1: `gateEvidence` is optional, but when present it MUST be a map of
|
|
26
|
+
* strings — an ARRAY here is the pre-B1 shape its own test file used to
|
|
27
|
+
* write, and it is a broken declaration, not a claim.
|
|
28
|
+
*
|
|
29
|
+
* F2 of `rid-b1-qa` removed this function's own copy of the shape rule. It
|
|
30
|
+
* used to be a second predicate (same boundary, different downstream result)
|
|
31
|
+
* that let the same bytes read one way here and another way through
|
|
32
|
+
* `readHandoffGateEvidence`; both now ask `classifyGateEvidence`. Only
|
|
33
|
+
* `absent` and `ok` are accepted: a malformed declaration must be refused by
|
|
34
|
+
* `readHandoff` (which is documented to throw on malformed input) exactly as
|
|
35
|
+
* the reader refuses it, so the two can never disagree about the same file.
|
|
36
|
+
*
|
|
37
|
+
* Unknown keys are still accepted HERE — the map is normalized to the five
|
|
38
|
+
* known keys by the caller — because refusing them would make a typo render
|
|
39
|
+
* a whole capsule unreadable, and the reader's `unknownKeys` is the surface
|
|
40
|
+
* that makes the typo diagnosable instead.
|
|
41
|
+
*/
|
|
42
|
+
export declare function isGateEvidence(value: unknown): boolean;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slice `b1-filesplit-campaign` (wave 3) — verbatim extraction of the handoff
|
|
3
|
+
* frontmatter's FIELD-level primitives from `./handoff-service.ts`: the required
|
|
4
|
+
* schema version, the one canonical frontmatter rendering, and the two
|
|
5
|
+
* per-field acceptance rules (`schemaVersion`, `gateEvidence`). The composite
|
|
6
|
+
* predicate that calls them, `isHandoffFrontmatter`, stays in
|
|
7
|
+
* `handoff-service.ts` — it carries an existing `complexity` finding, and a new
|
|
8
|
+
* module must start clean, so only what it calls moved.
|
|
9
|
+
*
|
|
10
|
+
* Bodies, doc comments and thrown strings are unchanged; `handoff-service.ts`
|
|
11
|
+
* imports these and keeps exporting its own public surface, so no importer
|
|
12
|
+
* changed.
|
|
13
|
+
*/
|
|
14
|
+
import { serializeHandoffFrontmatter } from './handoff-frontmatter.js';
|
|
15
|
+
import { classifyGateEvidence } from './handoff-gate-evidence.js';
|
|
16
|
+
/** Required schema version for new handoffs. */
|
|
17
|
+
export const HANDOFF_SCHEMA_VERSION = '2';
|
|
18
|
+
export function serializeHandoff(handoff) {
|
|
19
|
+
// The one canonical frontmatter rendering, shared with
|
|
20
|
+
// `handoff-auto-regen.ts`. `yaml.stringify` used to render this block and
|
|
21
|
+
// emitted `schemaVersion: "2"` + a bare `handoffHash:`, which the
|
|
22
|
+
// `AUDIT_REQUIRES_HANDOFF` gate and both audit loaders all reject.
|
|
23
|
+
return `${serializeHandoffFrontmatter(handoff.frontmatter)}${handoff.body}`;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* N1: accept BOTH shapes of `schemaVersion` — the string `'2'` and the bare
|
|
27
|
+
* YAML number `2` — and reject any other value.
|
|
28
|
+
*
|
|
29
|
+
* The reader used to require `typeof v.schemaVersion === 'string'`. That made
|
|
30
|
+
* `readHandoff` refuse `prd/handoff.md` written by `handoff-auto-regen.ts`,
|
|
31
|
+
* which emits the unquoted `schemaVersion: 2`, while the
|
|
32
|
+
* `AUDIT_REQUIRES_HANDOFF` prereq — a SUBSTRING check for `schemaVersion: 2` —
|
|
33
|
+
* happily passed the same bytes. So the gate that exists to guarantee a
|
|
34
|
+
* readable handoff was satisfied by a handoff the parser would not read, and
|
|
35
|
+
* `peaks prd handoff verify` exited 1 on a healthy file.
|
|
36
|
+
*
|
|
37
|
+
* Slice `2026-09-14-handoff-writer-gate-divergence` then fixed the other half:
|
|
38
|
+
* the writer no longer emits the quoted form at all (see
|
|
39
|
+
* `handoff-frontmatter.ts`). This tolerance stays because handoffs already on
|
|
40
|
+
* disk were written by the old writer and by hand; the writer fix must not
|
|
41
|
+
* retroactively make them unreadable.
|
|
42
|
+
*/
|
|
43
|
+
export function isSchemaVersion2(value) {
|
|
44
|
+
return value === HANDOFF_SCHEMA_VERSION || value === 2;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* B1: `gateEvidence` is optional, but when present it MUST be a map of
|
|
48
|
+
* strings — an ARRAY here is the pre-B1 shape its own test file used to
|
|
49
|
+
* write, and it is a broken declaration, not a claim.
|
|
50
|
+
*
|
|
51
|
+
* F2 of `rid-b1-qa` removed this function's own copy of the shape rule. It
|
|
52
|
+
* used to be a second predicate (same boundary, different downstream result)
|
|
53
|
+
* that let the same bytes read one way here and another way through
|
|
54
|
+
* `readHandoffGateEvidence`; both now ask `classifyGateEvidence`. Only
|
|
55
|
+
* `absent` and `ok` are accepted: a malformed declaration must be refused by
|
|
56
|
+
* `readHandoff` (which is documented to throw on malformed input) exactly as
|
|
57
|
+
* the reader refuses it, so the two can never disagree about the same file.
|
|
58
|
+
*
|
|
59
|
+
* Unknown keys are still accepted HERE — the map is normalized to the five
|
|
60
|
+
* known keys by the caller — because refusing them would make a typo render
|
|
61
|
+
* a whole capsule unreadable, and the reader's `unknownKeys` is the surface
|
|
62
|
+
* that makes the typo diagnosable instead.
|
|
63
|
+
*/
|
|
64
|
+
export function isGateEvidence(value) {
|
|
65
|
+
const kind = classifyGateEvidence(value).kind;
|
|
66
|
+
return kind === 'absent' || kind === 'ok';
|
|
67
|
+
}
|
|
@@ -48,6 +48,20 @@ function blockSequence(key, values) {
|
|
|
48
48
|
return [`${key}: []`];
|
|
49
49
|
return [`${key}:`, ...values.map((value) => ` - ${yamlScalar(value)}`)];
|
|
50
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* The OPTIONAL form: no line at all when the field is absent or empty.
|
|
53
|
+
*
|
|
54
|
+
* `goals` and its siblings cannot use this — `isHandoffFrontmatter` requires an
|
|
55
|
+
* ARRAY there, so an omitted line would fail the shape check on read, and `[]` is
|
|
56
|
+
* the honest rendering of "declared, none". The authored fields have no such
|
|
57
|
+
* requirement: a capsule that names no files declares nothing, and a `files: []`
|
|
58
|
+
* line would read as a claim that the slice touches no file.
|
|
59
|
+
*/
|
|
60
|
+
function blockOptionalSequence(key, values) {
|
|
61
|
+
if (values === undefined || values.length === 0)
|
|
62
|
+
return [];
|
|
63
|
+
return [`${key}:`, ...values.map((value) => ` - ${yamlScalar(value)}`)];
|
|
64
|
+
}
|
|
51
65
|
/**
|
|
52
66
|
* Render `gateEvidence` as a YAML map of quoted path scalars, or as NOTHING.
|
|
53
67
|
*
|
|
@@ -103,6 +117,44 @@ function gateEvidenceBlock(evidence) {
|
|
|
103
117
|
});
|
|
104
118
|
return entries.length === 0 ? [] : ['gateEvidence:', ...entries];
|
|
105
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Render a sequence of records (`decisions`, `risks`) as a YAML block list, or
|
|
122
|
+
* as NOTHING when the list is absent or empty — the same omission policy as
|
|
123
|
+
* `gateEvidence`, so a capsule that declares no risks gains no noise line.
|
|
124
|
+
*
|
|
125
|
+
* The field names are rendered in the order given, and every value is validated
|
|
126
|
+
* as a string HERE rather than dropped later. That is deliberate: the bug these
|
|
127
|
+
* fields fix was a serializer that rendered from the type and so discarded
|
|
128
|
+
* anything the type did not name, silently, on every rewrite. A record missing a
|
|
129
|
+
* required field therefore has to stop the write, not vanish from it.
|
|
130
|
+
*/
|
|
131
|
+
function blockRecords(key, items, requiredFields) {
|
|
132
|
+
if (items === undefined || items.length === 0)
|
|
133
|
+
return [];
|
|
134
|
+
const lines = [`${key}:`];
|
|
135
|
+
items.forEach((rawItem, index) => {
|
|
136
|
+
// The values are checked at RUNTIME, not trusted from the type, because a
|
|
137
|
+
// capsule reaches here from `readHandoff` as well as from a producer: the
|
|
138
|
+
// spread that makes an authored field survive a read also makes it survive
|
|
139
|
+
// unvalidated. A record missing a required field stops the write rather than
|
|
140
|
+
// vanishing from it — which is precisely how the old serializer made a
|
|
141
|
+
// declared risk look satisfied.
|
|
142
|
+
const record = rawItem !== null && typeof rawItem === 'object' ? { ...rawItem } : {};
|
|
143
|
+
const missing = requiredFields.filter((field) => typeof record[field] !== 'string' || record[field] === '');
|
|
144
|
+
if (missing.length > 0) {
|
|
145
|
+
throw new Error(`handoff: ${key}[${index}] is missing ${missing.join(', ')} — refusing to write a ` +
|
|
146
|
+
`record the next role cannot read (a risk without a mitigation is a red line, and ` +
|
|
147
|
+
'dropping the field is how it looked satisfied)');
|
|
148
|
+
}
|
|
149
|
+
requiredFields.forEach((field, fieldIndex) => {
|
|
150
|
+
const value = record[field];
|
|
151
|
+
lines.push(fieldIndex === 0
|
|
152
|
+
? ` - ${field}: ${yamlScalar(value)}`
|
|
153
|
+
: ` ${field}: ${yamlScalar(value)}`);
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
return lines;
|
|
157
|
+
}
|
|
106
158
|
/**
|
|
107
159
|
* Serialize `frontmatter` into the fenced block, terminated by the closing
|
|
108
160
|
* `---` and a trailing newline. Callers append the body verbatim, which keeps
|
|
@@ -125,13 +177,22 @@ export function serializeHandoffFrontmatter(frontmatter) {
|
|
|
125
177
|
...blockSequence('acceptanceCriteria', frontmatter.acceptanceCriteria),
|
|
126
178
|
...blockSequence('preservedBehavior', frontmatter.preservedBehavior),
|
|
127
179
|
`handoffPath: ${yamlScalar(frontmatter.handoffPath)}`,
|
|
180
|
+
// The authored fields: written by peaks-prd / peaks-rd, read by peaks-qa's
|
|
181
|
+
// mechanical cross-checks, and PRESERVED by every rewrite. They sit after
|
|
182
|
+
// `handoffPath` because `schemaVersion` and `sha256` must stay first-parsed,
|
|
183
|
+
// and before `gateEvidence` because that block is last by contract.
|
|
184
|
+
...blockOptionalSequence('scope', frontmatter.scope),
|
|
185
|
+
...blockOptionalSequence('files', frontmatter.files),
|
|
186
|
+
...blockRecords('decisions', frontmatter.decisions, ['id', 'summary', 'rationale']),
|
|
187
|
+
...blockRecords('risks', frontmatter.risks, ['id', 'description', 'mitigation']),
|
|
188
|
+
...blockOptionalSequence('nextActions', frontmatter.nextActions),
|
|
128
189
|
// LAST, after every anchored field: `schemaVersion` / `sha256` are
|
|
129
190
|
// matched as `^`-anchored lines by the gate and both audit loaders, so
|
|
130
191
|
// nothing new may be inserted before them. A nested map also renders
|
|
131
192
|
// indented lines only, leaving the top-level key set exactly as it was
|
|
132
193
|
// for every capsule that declares no evidence.
|
|
133
194
|
...gateEvidenceBlock(frontmatter.gateEvidence),
|
|
134
|
-
'---'
|
|
195
|
+
'---'
|
|
135
196
|
];
|
|
136
197
|
return `${lines.join('\n')}\n`;
|
|
137
198
|
}
|
|
@@ -8,16 +8,8 @@
|
|
|
8
8
|
// `skills/bee/peaks-rd/references/writing-handoff-frontmatter.md:35-41`; the
|
|
9
9
|
// key set is `GATE_EVIDENCE_KEYS` in `./handoff-types.js`.
|
|
10
10
|
//
|
|
11
|
-
// WHAT THIS FILE USED TO SAY, AND WHY THAT WAS FALSE: its header claimed the
|
|
12
|
-
// field was a `string[]` of "gate names" and that `initHandoff` wrote it.
|
|
13
|
-
// Neither held. `grep -rn gateEvidence src/` hit this file and nothing else —
|
|
14
|
-
// there was no producer (`HandoffFrontmatter` had no such field,
|
|
15
|
-
// `serializeHandoffFrontmatter` never emitted it, `initHandoff` rejected it)
|
|
16
|
-
// and no consumer. The field was prose describing data that did not exist,
|
|
17
|
-
// and the comment asserting a producer was the reason nobody noticed.
|
|
18
|
-
//
|
|
19
11
|
// WHAT IS ON DISK NOW, stated precisely because a header that overclaims is
|
|
20
|
-
// the defect
|
|
12
|
+
// the defect below. B1 added the producer FUNCTIONS; B2 wired their callers,
|
|
21
13
|
// which is what made the difference — until then every producer passed
|
|
22
14
|
// nothing, so no capsule carried the field and saying otherwise would have
|
|
23
15
|
// described a fact that held only inside tests (F1 of `rid-b1-qa`). At
|
|
@@ -28,7 +20,19 @@
|
|
|
28
20
|
// artifact is readable — and carries no `gateEvidence` block at all when it
|
|
29
21
|
// is not. Gate C (`checkPrerequisites` at `rd:qa-handoff`) fails a declared
|
|
30
22
|
// path that is not on disk. Every clause above is asserted end-to-end in
|
|
31
|
-
// `tests/unit/prd/gate-evidence-derivation.test.ts`.
|
|
23
|
+
// `tests/unit/prd/gate-evidence-derivation.test.ts`. The derived map is also
|
|
24
|
+
// printed by `peaks prd handoff init` (dry-run and applied), so the key set
|
|
25
|
+
// does not have to be read out of this source file.
|
|
26
|
+
//
|
|
27
|
+
// WHAT THIS FILE USED TO SAY, AND WHY THAT WAS FALSE: its header claimed the
|
|
28
|
+
// field was a `string[]` of "gate names" and that `initHandoff` wrote it.
|
|
29
|
+
// Neither held. `grep -rn gateEvidence src/` hit this file and nothing else —
|
|
30
|
+
// there was no producer (`HandoffFrontmatter` had no such field,
|
|
31
|
+
// `serializeHandoffFrontmatter` never emitted it, `initHandoff` rejected it)
|
|
32
|
+
// and no consumer. The field was prose describing data that did not exist,
|
|
33
|
+
// and the comment asserting a producer was the reason nobody noticed. That
|
|
34
|
+
// paragraph describes the PRE-B1 state; reading it as the current state is
|
|
35
|
+
// the exact misreading that put it here.
|
|
32
36
|
//
|
|
33
37
|
// WHY IT IS STILL STAND-ALONE: keeping the typed-value logic here, rather
|
|
34
38
|
// than in `handoff-service.ts`, keeps `HandoffFrontmatter` a pure data shape
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The canonical capsule path for ONE SLICE, relative to the project root.
|
|
3
|
+
*
|
|
4
|
+
* Slice `2026-09-14-prd-capsule-rid-scoping`: the capsule used to be one slot
|
|
5
|
+
* per SESSION (`prd/handoff.md`), so the second slice's handoff silently
|
|
6
|
+
* overwrote the first slice's — and `AUDIT_REQUIRES_HANDOFF` stayed green
|
|
7
|
+
* because it never checked WHOSE rid the file named. Measured on
|
|
8
|
+
* `2026-09-13-session-21878f`: a four-slice job passed that prerequisite on a
|
|
9
|
+
* capsule left by a different line of work.
|
|
10
|
+
*
|
|
11
|
+
* This is the WRITE target, so it always carries the rid — a consumer-side
|
|
12
|
+
* fallback here would leave a rid-scoped requirement with a bare-name writer,
|
|
13
|
+
* which is the defect shape this slice exists to remove. Readers that must
|
|
14
|
+
* tolerate pre-rid-scoping sessions call `resolveHandoffPath` instead.
|
|
15
|
+
*/
|
|
16
|
+
export declare function handoffRelativePath(sessionId: string, requestId: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* The capsule a CONSUMER should read for (session, requestId): the rid-scoped
|
|
19
|
+
* path when it is on disk, else the pre-rid-scoping bare name. Returns null
|
|
20
|
+
* when neither exists.
|
|
21
|
+
*
|
|
22
|
+
* Three sessions on disk still hold only the bare file
|
|
23
|
+
* (`2026-09-06-session-a87ca4`, `2026-09-12-session-e37ef0`,
|
|
24
|
+
* `2026-09-13-session-21878f`), so the legacy tier has to keep resolving for
|
|
25
|
+
* the gate and for every reader below.
|
|
26
|
+
*
|
|
27
|
+
* `requestId` is optional because the detect-only audit surface reaches its
|
|
28
|
+
* service without one. Such a caller can name only the bare path: a session
|
|
29
|
+
* holding nothing but rid-scoped capsules reports missing rather than picking
|
|
30
|
+
* among its siblings' capsules, which would re-open the cross-slice mix-up
|
|
31
|
+
* this scoping exists to close (fail closed, not "some capsule is there").
|
|
32
|
+
*/
|
|
33
|
+
export declare function resolveHandoffPath(opts: {
|
|
34
|
+
projectRoot: string;
|
|
35
|
+
sessionId: string;
|
|
36
|
+
requestId?: string;
|
|
37
|
+
}): string | null;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slice `b1-filesplit-campaign` (wave 3) — verbatim extraction of the handoff
|
|
3
|
+
* capsule PATH layer from `./handoff-service.ts` (the id guard, the rid-scoped
|
|
4
|
+
* write path and the consumer-side resolver) so that module clears the 300
|
|
5
|
+
* raw-line cap. No guard, no message string and no join changed;
|
|
6
|
+
* `handoff-service.ts` re-exports both public names from its own path, so no
|
|
7
|
+
* importer changed. The id->path escape this module guards is measured by
|
|
8
|
+
* `tests/unit/runtime/no-runtime-input-guard.test.ts` rule D, whose scanned
|
|
9
|
+
* module list now names this file next to `handoff-service.ts`.
|
|
10
|
+
*/
|
|
11
|
+
import { existsSync } from 'node:fs';
|
|
12
|
+
import { join } from 'node:path';
|
|
13
|
+
import { isUnsafePathInput } from '../../shared/path-safety.js';
|
|
14
|
+
import { REQUEST_ID_PATTERN } from '../artifacts/request-artifact-service.js';
|
|
15
|
+
/**
|
|
16
|
+
* Both ids in a handoff path are caller-supplied path segments, so both are
|
|
17
|
+
* checked at the join. Added 2026-09-14 (repair R1, security audit F2 of
|
|
18
|
+
* `2026-09-14-cli-id-escape-instrumentation`).
|
|
19
|
+
*
|
|
20
|
+
* This function was introduced by `0536d5bd` — the commit that instrumented
|
|
21
|
+
* this defect class — with neither id checked, and it sat outside rule D's
|
|
22
|
+
* scanned layer, so the instrument could not see its own new member.
|
|
23
|
+
* Measured on the pre-fix tree (`prd handoff init --apply`, temp project,
|
|
24
|
+
* `ok: true` both times):
|
|
25
|
+
*
|
|
26
|
+
* --rid '../../../../../../README' replaced the project-root README.md
|
|
27
|
+
* --sid '../../../../SIDOUT' wrote 4 levels above the project root
|
|
28
|
+
*
|
|
29
|
+
* The two axes need two different controls, for a recorded reason: the rid has
|
|
30
|
+
* a pinned format (`REQUEST_ID_PATTERN`, no separator, no dot-dot, no drive)
|
|
31
|
+
* and the sid has none, so it gets the segment check. `isUnsafePathInput`
|
|
32
|
+
* alone is NOT enough for the rid — it admits `a/b` (two non-empty segments),
|
|
33
|
+
* which `request-artifact-service.ts` would reject.
|
|
34
|
+
*
|
|
35
|
+
* Guarding HERE rather than at the three `prd`/`env` flags means every producer
|
|
36
|
+
* that writes through this constructor — `initHandoff`'s default,
|
|
37
|
+
* `handoff-auto-regen.ts`, `evidence-generator.ts` — is covered by the join
|
|
38
|
+
* itself, not by each caller re-deciding.
|
|
39
|
+
*/
|
|
40
|
+
function assertSafeHandoffIds(sessionId, requestId) {
|
|
41
|
+
if (!REQUEST_ID_PATTERN.test(requestId)) {
|
|
42
|
+
throw new Error(`Invalid request id: ${requestId} (expected letters, digits, dots, underscores, or dashes)`);
|
|
43
|
+
}
|
|
44
|
+
if (isUnsafePathInput(sessionId)) {
|
|
45
|
+
throw new Error(`Invalid session id: ${sessionId} (must be a single path segment)`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The canonical capsule path for ONE SLICE, relative to the project root.
|
|
50
|
+
*
|
|
51
|
+
* Slice `2026-09-14-prd-capsule-rid-scoping`: the capsule used to be one slot
|
|
52
|
+
* per SESSION (`prd/handoff.md`), so the second slice's handoff silently
|
|
53
|
+
* overwrote the first slice's — and `AUDIT_REQUIRES_HANDOFF` stayed green
|
|
54
|
+
* because it never checked WHOSE rid the file named. Measured on
|
|
55
|
+
* `2026-09-13-session-21878f`: a four-slice job passed that prerequisite on a
|
|
56
|
+
* capsule left by a different line of work.
|
|
57
|
+
*
|
|
58
|
+
* This is the WRITE target, so it always carries the rid — a consumer-side
|
|
59
|
+
* fallback here would leave a rid-scoped requirement with a bare-name writer,
|
|
60
|
+
* which is the defect shape this slice exists to remove. Readers that must
|
|
61
|
+
* tolerate pre-rid-scoping sessions call `resolveHandoffPath` instead.
|
|
62
|
+
*/
|
|
63
|
+
export function handoffRelativePath(sessionId, requestId) {
|
|
64
|
+
assertSafeHandoffIds(sessionId, requestId);
|
|
65
|
+
return join('.peaks', '_runtime', sessionId, 'prd', `handoff-${requestId}.md`);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* The capsule a CONSUMER should read for (session, requestId): the rid-scoped
|
|
69
|
+
* path when it is on disk, else the pre-rid-scoping bare name. Returns null
|
|
70
|
+
* when neither exists.
|
|
71
|
+
*
|
|
72
|
+
* Three sessions on disk still hold only the bare file
|
|
73
|
+
* (`2026-09-06-session-a87ca4`, `2026-09-12-session-e37ef0`,
|
|
74
|
+
* `2026-09-13-session-21878f`), so the legacy tier has to keep resolving for
|
|
75
|
+
* the gate and for every reader below.
|
|
76
|
+
*
|
|
77
|
+
* `requestId` is optional because the detect-only audit surface reaches its
|
|
78
|
+
* service without one. Such a caller can name only the bare path: a session
|
|
79
|
+
* holding nothing but rid-scoped capsules reports missing rather than picking
|
|
80
|
+
* among its siblings' capsules, which would re-open the cross-slice mix-up
|
|
81
|
+
* this scoping exists to close (fail closed, not "some capsule is there").
|
|
82
|
+
*/
|
|
83
|
+
export function resolveHandoffPath(opts) {
|
|
84
|
+
// The legacy bare-name candidate below is a second join of the same sid, in a
|
|
85
|
+
// second function, so it needs the sid guarded in its own right — the
|
|
86
|
+
// optional-requestId branch reaches `handoffRelativePath` (guarded there), but
|
|
87
|
+
// the branch that is taken when a caller has NO rid reaches this join only.
|
|
88
|
+
if (isUnsafePathInput(opts.sessionId)) {
|
|
89
|
+
throw new Error(`Invalid session id: ${opts.sessionId} (must be a single path segment)`);
|
|
90
|
+
}
|
|
91
|
+
const candidates = [
|
|
92
|
+
...(opts.requestId !== undefined ? [handoffRelativePath(opts.sessionId, opts.requestId)] : []),
|
|
93
|
+
join('.peaks', '_runtime', opts.sessionId, 'prd', 'handoff.md')
|
|
94
|
+
];
|
|
95
|
+
for (const relative of candidates) {
|
|
96
|
+
const absolute = join(opts.projectRoot, relative);
|
|
97
|
+
if (existsSync(absolute))
|
|
98
|
+
return absolute;
|
|
99
|
+
}
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
@@ -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 { GateEvidence, Handoff, HandoffProbe } from './handoff-types.js';
|
|
25
|
+
import type { GateEvidence, Handoff, HandoffDecision, HandoffProbe, HandoffRisk } 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: {
|
|
@@ -94,6 +58,16 @@ export declare function initHandoff(opts: {
|
|
|
94
58
|
* is refused here by a throw and there by a status; neither silently
|
|
95
59
|
* produces a map the other cannot. */
|
|
96
60
|
gateEvidence?: GateEvidence;
|
|
61
|
+
/** The authored fields peaks-qa cross-checks (`decisions[] ↔ tests`,
|
|
62
|
+
* `risks[] ↔ security tests`, `files[] ↔ git diff`). They are OPTIONAL and
|
|
63
|
+
* pass through verbatim: unlike `gateEvidence`, nothing derives them — they
|
|
64
|
+
* are a writer's judgement about the slice, so a producer that has not made
|
|
65
|
+
* that judgement declares nothing rather than an empty claim. */
|
|
66
|
+
scope?: readonly string[];
|
|
67
|
+
files?: readonly string[];
|
|
68
|
+
decisions?: readonly HandoffDecision[];
|
|
69
|
+
risks?: readonly HandoffRisk[];
|
|
70
|
+
nextActions?: readonly string[];
|
|
97
71
|
}): Handoff;
|
|
98
72
|
/** Write a Handoff to disk. `projectRoot` is the absolute project
|
|
99
73
|
* root (so the `.peaks/_runtime/...` path is resolved absolutely).
|