peaks-loop 4.0.54 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -0
- package/README-en.md +16 -1
- package/README.md +15 -1
- package/config/eslint/.peaks-rules.cjs +158 -13
- package/config/eslint/tsconfig.lint.json +47 -0
- package/dist/cli/cli-envelope.d.ts +114 -0
- package/dist/cli/cli-envelope.js +85 -0
- package/dist/cli/cli-helpers.d.ts +1 -1
- package/dist/cli/cli-helpers.js +8 -4
- package/dist/cli/commands/_cli-error-envelope.js +1 -1
- package/dist/cli/commands/_register.js +85 -38
- package/dist/cli/commands/_super.js +40 -7
- package/dist/cli/commands/adapter-commands-s2a.js +8 -7
- package/dist/cli/commands/adapter-commands.d.ts +2 -2
- package/dist/cli/commands/adapter-commands.js +7 -8
- package/dist/cli/commands/api-diff-commands.js +5 -4
- package/dist/cli/commands/asset-commands.d.ts +2 -2
- package/dist/cli/commands/asset-commands.js +135 -132
- package/dist/cli/commands/audit-commands.d.ts +1 -1
- package/dist/cli/commands/audit-commands.js +75 -32
- package/dist/cli/commands/autonomous-swarm-commands.d.ts +1 -1
- package/dist/cli/commands/autonomous-swarm-commands.js +14 -8
- package/dist/cli/commands/baseline-commands.js +34 -9
- package/dist/cli/commands/bee-commands.d.ts +1 -1
- package/dist/cli/commands/bee-commands.js +18 -21
- package/dist/cli/commands/best-practice-scan-command.js +6 -34
- package/dist/cli/commands/best-practice-scan-helpers.d.ts +12 -0
- package/dist/cli/commands/best-practice-scan-helpers.js +37 -0
- package/dist/cli/commands/capability-commands.d.ts +1 -1
- package/dist/cli/commands/capability-commands.js +14 -4
- package/dist/cli/commands/capability-worker-config-sc-commands.d.ts +1 -1
- package/dist/cli/commands/changeset-commands.js +21 -18
- package/dist/cli/commands/code-gate-command.js +9 -2
- package/dist/cli/commands/code-job-shape-commands-read-job-shape.d.ts +15 -0
- package/dist/cli/commands/code-job-shape-commands-read-job-shape.js +70 -0
- package/dist/cli/commands/code-job-shape-commands.js +21 -45
- package/dist/cli/commands/code-mode-gate-commands.d.ts +15 -1
- package/dist/cli/commands/code-mode-gate-commands.js +19 -199
- package/dist/cli/commands/code-mode-gate-plan-command.d.ts +14 -0
- package/dist/cli/commands/code-mode-gate-plan-command.js +23 -0
- package/dist/cli/commands/code-mode-gate-should-pause-command.d.ts +24 -0
- package/dist/cli/commands/code-mode-gate-should-pause-command.js +137 -0
- package/dist/cli/commands/code-mode-gate-should-pause-envelope.d.ts +59 -0
- package/dist/cli/commands/code-mode-gate-should-pause-envelope.js +144 -0
- package/dist/cli/commands/code-orchestrator-can-do.js +4 -4
- package/dist/cli/commands/code-review-commands.js +18 -3
- package/dist/cli/commands/code-run-command.js +44 -7
- package/dist/cli/commands/code-runtime-commands.d.ts +17 -0
- package/dist/cli/commands/code-runtime-commands.js +105 -73
- package/dist/cli/commands/codegraph-commands.js +11 -6
- package/dist/cli/commands/codegraph-status-command.js +6 -2
- package/dist/cli/commands/compact-command.js +52 -26
- package/dist/cli/commands/complexity-commands.js +6 -7
- package/dist/cli/commands/config-commands.d.ts +1 -1
- package/dist/cli/commands/config-commands.js +33 -9
- package/dist/cli/commands/container-commands.js +39 -15
- package/dist/cli/commands/context-commands.d.ts +1 -1
- package/dist/cli/commands/context-commands.js +40 -13
- package/dist/cli/commands/core/artifacts-command.js +11 -3
- package/dist/cli/commands/core/binding-commands.js +9 -6
- package/dist/cli/commands/core/doctor-command.js +7 -4
- package/dist/cli/commands/core/memory-command.js +47 -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 +31 -16
- package/dist/cli/commands/core/standards-command.js +55 -13
- package/dist/cli/commands/cron-commands-actions.d.ts +43 -0
- package/dist/cli/commands/cron-commands-actions.js +128 -0
- package/dist/cli/commands/cron-commands-schedule.d.ts +86 -0
- package/dist/cli/commands/cron-commands-schedule.js +151 -0
- package/dist/cli/commands/cron-commands.d.ts +35 -32
- package/dist/cli/commands/cron-commands.js +167 -211
- package/dist/cli/commands/cron-scheduler-commands.js +40 -20
- package/dist/cli/commands/cron-scheduler-persist.d.ts +110 -0
- package/dist/cli/commands/cron-scheduler-persist.js +171 -0
- package/dist/cli/commands/dashboard-long-run.js +45 -14
- package/dist/cli/commands/dashboard-summary.js +15 -5
- package/dist/cli/commands/dispatch-commands.js +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 +1 -1
- package/dist/cli/commands/ecc-commands.js +8 -17
- package/dist/cli/commands/evidence-commands.js +10 -6
- package/dist/cli/commands/evolution-commands.d.ts +2 -2
- package/dist/cli/commands/evolution-commands.js +109 -115
- package/dist/cli/commands/feedback-commands-helpers.d.ts +22 -0
- package/dist/cli/commands/feedback-commands-helpers.js +33 -0
- package/dist/cli/commands/feedback-commands.js +15 -38
- package/dist/cli/commands/final-review-commands.d.ts +1 -1
- package/dist/cli/commands/final-review-commands.js +24 -22
- package/dist/cli/commands/fixture-commands.d.ts +1 -1
- package/dist/cli/commands/fixture-commands.js +17 -6
- package/dist/cli/commands/fork-commands-sync-verify.d.ts +12 -0
- package/dist/cli/commands/fork-commands-sync-verify.js +72 -0
- package/dist/cli/commands/fork-commands.js +19 -51
- package/dist/cli/commands/fresh-context-commands.js +3 -1
- package/dist/cli/commands/gate-commands-enforce.d.ts +82 -0
- package/dist/cli/commands/gate-commands-enforce.js +210 -0
- package/dist/cli/commands/gate-commands.d.ts +1 -1
- package/dist/cli/commands/gate-commands.js +85 -205
- package/dist/cli/commands/governance-classify-contract-commands.d.ts +1 -1
- package/dist/cli/commands/governance-classify-contract-commands.js +28 -17
- package/dist/cli/commands/heartbeat-commands-action.d.ts +7 -0
- package/dist/cli/commands/heartbeat-commands-action.js +192 -0
- package/dist/cli/commands/heartbeat-commands-validation.d.ts +57 -0
- package/dist/cli/commands/heartbeat-commands-validation.js +120 -0
- package/dist/cli/commands/heartbeat-commands.d.ts +27 -6
- package/dist/cli/commands/heartbeat-commands.js +19 -198
- package/dist/cli/commands/hook-handle.d.ts +1 -1
- package/dist/cli/commands/hook-handle.js +46 -13
- package/dist/cli/commands/hooks-commands.d.ts +1 -1
- package/dist/cli/commands/hooks-commands.js +18 -6
- package/dist/cli/commands/ide-commands.d.ts +1 -1
- package/dist/cli/commands/ide-commands.js +5 -3
- package/dist/cli/commands/impact-commands.js +8 -2
- package/dist/cli/commands/job-add-slice-command.d.ts +43 -0
- package/dist/cli/commands/job-add-slice-command.js +151 -0
- package/dist/cli/commands/job-commands.d.ts +64 -0
- package/dist/cli/commands/job-commands.js +134 -63
- package/dist/cli/commands/lease-metrics-commands-support.d.ts +73 -0
- package/dist/cli/commands/lease-metrics-commands-support.js +67 -0
- package/dist/cli/commands/lease-metrics-commands.d.ts +3 -44
- package/dist/cli/commands/lease-metrics-commands.js +21 -61
- package/dist/cli/commands/lease-stats-commands.d.ts +1 -1
- package/dist/cli/commands/lease-stats-commands.js +9 -6
- package/dist/cli/commands/lint-commands.d.ts +9 -3
- package/dist/cli/commands/lint-commands.js +15 -8
- package/dist/cli/commands/log-commands.d.ts +1 -1
- package/dist/cli/commands/log-commands.js +8 -6
- package/dist/cli/commands/loop-commands.d.ts +1 -1
- package/dist/cli/commands/loop-commands.js +50 -50
- package/dist/cli/commands/loop-eval-commands.d.ts +1 -1
- package/dist/cli/commands/loop-eval-commands.js +101 -30
- package/dist/cli/commands/memory-commands.js +21 -13
- package/dist/cli/commands/migrate-1-4-1-command.js +1 -1
- package/dist/cli/commands/migrate-v2-10-to-v2-11-command.js +2 -2
- package/dist/cli/commands/mut-commands-helpers.d.ts +30 -0
- package/dist/cli/commands/mut-commands-helpers.js +43 -0
- package/dist/cli/commands/mut-commands.js +16 -58
- package/dist/cli/commands/observability-commands-queries.d.ts +37 -0
- package/dist/cli/commands/observability-commands-queries.js +113 -0
- package/dist/cli/commands/observability-commands.d.ts +1 -1
- package/dist/cli/commands/observability-commands.js +7 -92
- package/dist/cli/commands/openspec-commands.d.ts +1 -1
- package/dist/cli/commands/openspec-commands.js +20 -8
- package/dist/cli/commands/outer-cache-commands.js +18 -7
- package/dist/cli/commands/perf-audit-commands.d.ts +1 -1
- package/dist/cli/commands/perf-audit-commands.js +12 -7
- package/dist/cli/commands/perf-commands.d.ts +1 -1
- package/dist/cli/commands/perf-commands.js +5 -5
- package/dist/cli/commands/playwright-commands.d.ts +1 -1
- package/dist/cli/commands/playwright-commands.js +20 -8
- package/dist/cli/commands/polyrepo-commands.js +21 -19
- package/dist/cli/commands/prd-blocks-commands.js +1 -3
- package/dist/cli/commands/prd-commands.d.ts +1 -1
- package/dist/cli/commands/prd-commands.js +8 -4
- 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/upgrade-commands.d.ts +1 -1
- package/dist/cli/commands/user-touchpoint-commands.js +1 -3
- package/dist/cli/commands/verdict-aggregate-command.d.ts +1 -1
- package/dist/cli/commands/verdict-aggregate-command.js +20 -7
- package/dist/cli/commands/vm-commands.js +48 -19
- package/dist/cli/commands/wave-plan-commands.js +5 -2
- package/dist/cli/commands/web-commands.js +14 -4
- package/dist/cli/commands/web-lifecycle-commands.js +5 -3
- package/dist/cli/commands/workflow-commands.d.ts +1 -1
- package/dist/cli/commands/workflow-commands.js +64 -29
- package/dist/cli/commands/workflow-lifecycle-commands.js +19 -17
- package/dist/cli/commands/workflow-plan-commands-actions.d.ts +20 -0
- package/dist/cli/commands/workflow-plan-commands-actions.js +115 -0
- package/dist/cli/commands/workflow-plan-commands-session.d.ts +17 -0
- package/dist/cli/commands/workflow-plan-commands-session.js +59 -0
- package/dist/cli/commands/workflow-plan-commands.d.ts +10 -21
- package/dist/cli/commands/workflow-plan-commands.js +15 -141
- package/dist/cli/commands/workspace/clean-command.js +4 -1
- package/dist/cli/commands/workspace/helpers.js +2 -1
- package/dist/cli/commands/workspace/init-command.js +80 -20
- package/dist/cli/commands/workspace/reconcile-command.js +3 -1
- package/dist/cli/commands/workspace-commands.d.ts +1 -1
- package/dist/cli/commands/workspace-commands.js +1 -1
- package/dist/cli/commands/worktree-auth-commands.d.ts +1 -1
- package/dist/cli/commands/worktree-auth-commands.js +16 -169
- package/dist/cli/commands/worktree-auth-grant-command.d.ts +14 -0
- package/dist/cli/commands/worktree-auth-grant-command.js +118 -0
- package/dist/cli/commands/worktree-auth-manage-commands.d.ts +17 -0
- package/dist/cli/commands/worktree-auth-manage-commands.js +128 -0
- package/dist/cli/commands/worktree-lease-commands.d.ts +1 -1
- package/dist/cli/commands/worktree-lease-commands.js +65 -37
- package/dist/cli/index.js +6 -2
- package/dist/cli/program.js +6 -3
- package/dist/hooks/pre-tool-use-sub-agent.js +1 -6
- package/dist/reporters/bdd-reporter.js +9 -3
- package/dist/services/24h-mode/auto-engage.d.ts +19 -0
- package/dist/services/24h-mode/auto-engage.js +35 -0
- package/dist/services/24h-mode/decider.js +5 -1
- package/dist/services/24h-mode/store.js +4 -2
- package/dist/services/adapter/adapter-registry.js +20 -8
- package/dist/services/adapter/adapter.d.ts +2 -2
- package/dist/services/adapter/auto-adapter.d.ts +2 -2
- package/dist/services/adapter/auto-adapter.js +1 -1
- package/dist/services/adapter/claude-adapter.d.ts +1 -1
- package/dist/services/adapter/claude-adapter.js +8 -8
- package/dist/services/adapter/codex-adapter.d.ts +2 -2
- package/dist/services/adapter/codex-adapter.js +20 -8
- package/dist/services/adapter/copilot-adapter.d.ts +2 -2
- package/dist/services/adapter/copilot-adapter.js +20 -8
- package/dist/services/artifacts/artifact-prerequisites.js +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 +67 -0
- package/dist/services/code/mode-gate.d.ts +4 -58
- package/dist/services/code/mode-gate.js +24 -60
- package/dist/services/code/orchestrator-can-do-advisories.d.ts +30 -0
- package/dist/services/code/orchestrator-can-do-advisories.js +81 -0
- package/dist/services/code/orchestrator-can-do-probes.d.ts +30 -0
- package/dist/services/code/orchestrator-can-do-probes.js +77 -0
- package/dist/services/code/orchestrator-can-do.d.ts +11 -22
- package/dist/services/code/orchestrator-can-do.js +37 -137
- package/dist/services/code/post-compact-checkpoint.d.ts +28 -0
- package/dist/services/code/post-compact-checkpoint.js +57 -0
- package/dist/services/code/post-compact-detector.js +16 -48
- package/dist/services/code/step-08-gate.d.ts +4 -3
- package/dist/services/code/step-08-gate.js +21 -9
- package/dist/services/code-review/ecc-bridge.js +23 -23
- package/dist/services/codegraph/codegraph-autorefresh.js +56 -39
- package/dist/services/codegraph/codegraph-config-repair-writer.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/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.js +3 -2
- package/dist/services/loop/evaluator-dispatcher.js +78 -42
- package/dist/services/loop/loop-bee-relation-service.d.ts +4 -4
- package/dist/services/loop/loop-bee-relation-service.js +36 -40
- package/dist/services/loop/loop-bee-relation-store.d.ts +3 -3
- package/dist/services/loop/loop-bee-relation-store.js +9 -11
- package/dist/services/loop/loop-bee-relation-types.d.ts +1 -1
- package/dist/services/loop/loop-bee-relation-types.js +14 -25
- package/dist/services/loop/loop-release-service.d.ts +2 -2
- package/dist/services/loop/loop-release-service.js +3 -3
- package/dist/services/loop/loop-release-store.d.ts +2 -2
- package/dist/services/loop/loop-release-store.js +4 -6
- package/dist/services/loop/loop-release-types.d.ts +1 -1
- package/dist/services/loop/loop-release-types.js +21 -31
- package/dist/services/loop/monotonic-guard-types.d.ts +51 -0
- package/dist/services/loop/monotonic-guard-types.js +9 -0
- package/dist/services/loop/monotonic-guard.d.ts +2 -43
- package/dist/services/loop/monotonic-runner-types.d.ts +63 -0
- package/dist/services/loop/monotonic-runner-types.js +17 -0
- package/dist/services/loop/monotonic-runner.d.ts +3 -34
- package/dist/services/loop/monotonic-runner.js +10 -20
- package/dist/services/loop/run-driver.js +16 -8
- package/dist/services/loop/spec-service.d.ts +0 -5
- package/dist/services/loop/spec-service.js +49 -9
- package/dist/services/memory/llm-reranker-core.d.ts +108 -0
- package/dist/services/memory/llm-reranker-core.js +105 -0
- package/dist/services/memory/llm-reranker.d.ts +3 -94
- package/dist/services/memory/llm-reranker.js +13 -102
- package/dist/services/memory/memory-ingest-service.d.ts +1 -22
- package/dist/services/memory/memory-ingest-service.js +29 -76
- package/dist/services/memory/memory-ingest-support.d.ts +23 -0
- package/dist/services/memory/memory-ingest-support.js +81 -0
- package/dist/services/memory/memory-rotate-service.js +41 -8
- package/dist/services/memory/memory-search-service.js +8 -4
- package/dist/services/memory/project-context-service.js +26 -5
- package/dist/services/memory/project-memory-service/index/kind-dispatch.d.ts +2 -7
- package/dist/services/memory/project-memory-service/index/kind-dispatch.js +17 -136
- package/dist/services/memory/project-memory-service/index/project-memory-plan-exec.d.ts +7 -0
- package/dist/services/memory/project-memory-service/index/project-memory-plan-exec.js +150 -0
- package/dist/services/memory/project-memory-service/index/ranking.js +6 -3
- package/dist/services/memory/project-memory-service/index/reindex.js +14 -5
- package/dist/services/memory/project-memory-service/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.js +34 -22
- 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 +1 -1
- 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 +1 -37
- package/dist/services/prd/handoff-service.js +16 -148
- 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/release/release-state.d.ts +2 -2
- package/dist/services/release/release-state.js +44 -15
- package/dist/services/release/version-precheck-layer-changeset.d.ts +2 -0
- package/dist/services/release/version-precheck-layer-changeset.js +43 -0
- package/dist/services/release/version-precheck-service.d.ts +11 -36
- package/dist/services/release/version-precheck-service.js +20 -104
- package/dist/services/release/version-precheck-support.d.ts +53 -0
- package/dist/services/release/version-precheck-support.js +64 -0
- package/dist/services/retrospective/retrospective-index.js +17 -3
- package/dist/services/retrospective/retrospective-search-service.js +6 -2
- package/dist/services/retrospective/retrospective-show.js +4 -1
- package/dist/services/reviewer/model-family.js +7 -1
- package/dist/services/reviewer/providers/anthropic.d.ts +5 -0
- package/dist/services/reviewer/providers/anthropic.js +10 -1
- package/dist/services/reviewer/providers/openai.d.ts +5 -0
- package/dist/services/reviewer/providers/openai.js +10 -1
- package/dist/services/reviewer/reviewer-config.js +4 -2
- package/dist/services/reviewer/reviewer-service.d.ts +2 -36
- package/dist/services/reviewer/reviewer-service.js +2 -1
- package/dist/services/reviewer/reviewer-types.d.ts +43 -0
- package/dist/services/reviewer/reviewer-types.js +1 -0
- package/dist/services/role/role-registry.js +9 -1
- package/dist/services/runtime/runtime-detector.js +4 -1
- package/dist/services/runtime/vendors/claude-code.js +14 -6
- package/dist/services/runtime/vendors/codex.js +11 -3
- package/dist/services/runtime/vendors/copilot.js +11 -3
- package/dist/services/sc/sc-service.js +28 -15
- package/dist/services/scan/acceptance-coverage-service.js +4 -1
- package/dist/services/scan/api-diff-openapi-schema-read.d.ts +67 -0
- package/dist/services/scan/api-diff-openapi-schema-read.js +154 -0
- package/dist/services/scan/api-diff-openapi.d.ts +16 -2
- package/dist/services/scan/api-diff-openapi.js +19 -123
- package/dist/services/scan/api-diff-recorded.js +16 -3
- package/dist/services/scan/api-diff-service.js +49 -16
- package/dist/services/scan/api-diff-types.js +12 -3
- package/dist/services/scan/api-surface-helpers.d.ts +13 -0
- package/dist/services/scan/api-surface-helpers.js +31 -0
- package/dist/services/scan/api-surface-service.d.ts +2 -45
- package/dist/services/scan/api-surface-service.js +15 -26
- package/dist/services/scan/api-surface-types.d.ts +54 -0
- package/dist/services/scan/api-surface-types.js +10 -0
- package/dist/services/scan/archetype-detection.d.ts +37 -0
- package/dist/services/scan/archetype-detection.js +142 -0
- package/dist/services/scan/archetype-service.js +36 -125
- package/dist/services/scan/diff-scope-service.js +35 -15
- package/dist/services/scan/existing-system-service.js +16 -99
- package/dist/services/scan/existing-system-visual-tokens.d.ts +20 -0
- package/dist/services/scan/existing-system-visual-tokens.js +123 -0
- package/dist/services/scan/file-size-policy.d.ts +86 -0
- package/dist/services/scan/file-size-policy.js +184 -0
- package/dist/services/scan/file-size-scan.d.ts +30 -3
- package/dist/services/scan/file-size-scan.js +47 -9
- package/dist/services/scan/karpathy-service.js +6 -1
- package/dist/services/scan/orphan-service.js +86 -20
- package/dist/services/scan/type-sanity-service.js +104 -10
- package/dist/services/sediment/dispose-confirm.d.ts +2 -2
- package/dist/services/sediment/dispose-confirm.js +2 -2
- package/dist/services/sediment/json-schema.d.ts +1 -1
- package/dist/services/sediment/json-schema.js +25 -13
- package/dist/services/sediment/manifest-lint.d.ts +1 -12
- package/dist/services/sediment/manifest-lint.js +1 -7
- package/dist/services/sediment/pool-paths.js +13 -9
- package/dist/services/sediment/pool-read.d.ts +1 -1
- package/dist/services/sediment/pool-read.js +42 -18
- package/dist/services/sediment/pool-rebuild-index.d.ts +1 -1
- package/dist/services/sediment/pool-rebuild-index.js +5 -5
- package/dist/services/sediment/pool-write.d.ts +1 -1
- package/dist/services/sediment/pool-write.js +7 -7
- package/dist/services/sediment/promotion-gate.d.ts +1 -1
- package/dist/services/sediment/promotion-gate.js +9 -9
- package/dist/services/sediment/types.d.ts +8 -8
- package/dist/services/session/binding-status-service.js +14 -4
- package/dist/services/session/caller-binding-service.js +2 -1
- package/dist/services/session/getSessionDir.js +4 -1
- package/dist/services/session/index.d.ts +1 -1
- package/dist/services/session/index.js +1 -1
- package/dist/services/session/resolve-caller-id.js +7 -5
- package/dist/services/session/session-binding-bridge.js +26 -25
- package/dist/services/session/session-checkpoint-service.js +1 -1
- package/dist/services/session/session-file-schema.d.ts +70 -0
- package/dist/services/session/session-file-schema.js +68 -0
- package/dist/services/session/session-manager.d.ts +6 -6
- package/dist/services/session/session-manager.js +30 -29
- package/dist/services/session/session-resume-service.js +2 -1
- package/dist/services/share/bundle-format-constants.d.ts +85 -0
- package/dist/services/share/bundle-format-constants.js +100 -0
- package/dist/services/share/bundle-reader.d.ts +3 -3
- package/dist/services/share/bundle-reader.js +75 -68
- package/dist/services/share/bundle-types.d.ts +3 -70
- package/dist/services/share/bundle-types.js +38 -107
- package/dist/services/share/bundle-writer.d.ts +3 -3
- package/dist/services/share/bundle-writer.js +101 -91
- package/dist/services/share/run-state-contract.d.ts +1 -1
- package/dist/services/share/run-state-contract.js +7 -13
- package/dist/services/signal/cancel-handler.js +2 -1
- package/dist/services/skill/resume-detector.js +6 -4
- package/dist/services/skill/skill-scheduler.js +3 -1
- package/dist/services/skill/skill-search-service.js +4 -4
- package/dist/services/skillhub/release-diff.d.ts +2 -2
- package/dist/services/skillhub/release-diff.js +6 -10
- package/dist/services/skillhub/release-export.d.ts +2 -2
- package/dist/services/skillhub/release-export.js +15 -17
- package/dist/services/skillhub/release-gc-blobs.d.ts +2 -2
- package/dist/services/skillhub/release-gc-blobs.js +4 -4
- package/dist/services/skillhub/release-import.d.ts +2 -2
- package/dist/services/skillhub/release-import.js +13 -12
- package/dist/services/skillhub/release-retain.d.ts +3 -3
- package/dist/services/skillhub/release-retain.js +22 -22
- package/dist/services/skillhub/sqlite-store.d.ts +1 -1
- package/dist/services/skillhub/sqlite-store.js +12 -11
- package/dist/services/skillhub/tar-runtime.js +15 -15
- package/dist/services/skillhub/types.d.ts +4 -4
- package/dist/services/skills/hooks-codegate-superpowers.js +16 -7
- package/dist/services/skills/hooks-settings-service.js +61 -19
- package/dist/services/skills/presence-lease-service.js +26 -16
- package/dist/services/skills/presence-lease-types.d.ts +1 -1
- package/dist/services/skills/presence-lease-types.js +1 -1
- package/dist/services/skills/skill-conformance-service.js +40 -8
- package/dist/services/skills/skill-presence-service.js +16 -14
- package/dist/services/skills/skill-runbook-service.js +2 -1
- package/dist/services/skills/skill-statusline-model.d.ts +128 -0
- package/dist/services/skills/skill-statusline-model.js +163 -0
- package/dist/services/skills/skill-statusline-renderer.js +4 -3
- package/dist/services/skills/skill-statusline-service.d.ts +3 -100
- package/dist/services/skills/skill-statusline-service.js +56 -163
- package/dist/services/skills/statusline-palette.js +11 -6
- package/dist/services/skills/statusline-settings-service.js +2 -1
- package/dist/services/skills/sync-service-support.d.ts +65 -0
- package/dist/services/skills/sync-service-support.js +50 -0
- package/dist/services/skills/sync-service.d.ts +3 -66
- package/dist/services/skills/sync-service.js +15 -53
- package/dist/services/slice/calibration-store.js +8 -2
- package/dist/services/slice/cross-pass-edge-merger.d.ts +3 -28
- package/dist/services/slice/cross-pass-edge-merger.js +13 -63
- package/dist/services/slice/cross-pass-edge-static-scan-support.d.ts +69 -0
- package/dist/services/slice/cross-pass-edge-static-scan-support.js +74 -0
- package/dist/services/slice/granularity-decider.js +2 -2
- package/dist/services/slice/slice-archive-service.js +8 -3
- package/dist/services/slice/slice-check-service.js +19 -8
- package/dist/services/slice/slice-decompose-runners.js +61 -23
- package/dist/services/slice/slice-decompose-service.js +4 -4
- package/dist/services/slice/slice-review-state.js +8 -2
- package/dist/services/smoke/smoke-paths-state.js +9 -2
- package/dist/services/sop/gate-enforce-service.js +9 -2
- package/dist/services/sop/sop-advance-service.js +14 -2
- package/dist/services/sop/sop-check-service.js +16 -4
- package/dist/services/sop/sop-paths.js +3 -1
- package/dist/services/sop/sop-registry-service.js +5 -1
- package/dist/services/sop/sop-service.js +29 -7
- package/dist/services/sop/sop-types.js +5 -1
- package/dist/services/standards/ide-aware-standards-service.js +2 -2
- package/dist/services/standards/loop-engineering-lint.js +12 -5
- package/dist/services/standards/loop-engineering-readiness-lint.js +5 -5
- package/dist/services/standards/migrate-claude-rules-service.js +9 -7
- package/dist/services/standards/missing-standards-detector.js +1 -3
- package/dist/services/standards/project-context-support.d.ts +50 -0
- package/dist/services/standards/project-context-support.js +244 -0
- package/dist/services/standards/project-context-types.d.ts +30 -0
- package/dist/services/standards/project-context-types.js +11 -0
- package/dist/services/standards/project-context.d.ts +10 -22
- package/dist/services/standards/project-context.js +27 -214
- package/dist/services/standards/project-standards-service.js +43 -12
- package/dist/services/standards/standards-render-common.d.ts +15 -0
- package/dist/services/standards/standards-render-common.js +49 -0
- package/dist/services/standards/standards-render.d.ts +1 -2
- package/dist/services/standards/standards-render.js +31 -58
- package/dist/services/standards/ui-library-dispatch-block.js +1 -1
- package/dist/services/tech/tech-change-id-service.js +7 -7
- package/dist/services/tech/tech-service.js +73 -26
- package/dist/services/test-cache/test-cache-service.js +8 -3
- package/dist/services/upgrade/1x-detector-service.js +5 -3
- package/dist/services/upgrade/gitignore-migrate-service.js +5 -5
- package/dist/services/upgrade/upgrade-service.js +36 -13
- package/dist/services/verdict/envelope-parsers.d.ts +84 -0
- package/dist/services/verdict/envelope-parsers.js +146 -0
- package/dist/services/verdict/envelopes.d.ts +50 -60
- package/dist/services/verdict/envelopes.js +18 -156
- package/dist/services/verdict/verdict-aggregator.js +27 -3
- package/dist/services/vm/vm-lease.js +15 -3
- package/dist/services/web/aria-node.d.ts +27 -0
- package/dist/services/web/aria-node.js +1 -0
- package/dist/services/web/browser-acquire.js +3 -1
- package/dist/services/web/browser-cache-probe.d.ts +18 -0
- package/dist/services/web/browser-cache-probe.js +110 -0
- package/dist/services/web/browser-session-manager.js +6 -2
- package/dist/services/web/daemon-registry.js +4 -1
- package/dist/services/web/playwright-loader.d.ts +2 -70
- package/dist/services/web/playwright-types.d.ts +75 -0
- package/dist/services/web/playwright-types.js +1 -0
- package/dist/services/web/snapshot-pruner.d.ts +2 -23
- package/dist/services/web/snapshot-pruner.js +8 -3
- package/dist/services/web/web-daemon-service.js +1 -3
- package/dist/services/web/web-install-service.d.ts +3 -32
- package/dist/services/web/web-install-service.js +21 -100
- package/dist/services/web/web-install-types.d.ts +31 -0
- package/dist/services/web/web-install-types.js +13 -0
- package/dist/services/web/web-login-profile.js +7 -5
- package/dist/services/web/web-protocol.js +3 -1
- package/dist/services/workflow/pipeline-verify-gate-support.js +63 -17
- package/dist/services/workflow/pipeline-verify-service.js +17 -6
- package/dist/services/workflow/plan-reader.js +5 -1
- package/dist/services/workflow/plan-refresher.js +20 -6
- package/dist/services/workflow/plan-trigger-detector.js +31 -8
- package/dist/services/workflow/provision-dispatch-node.js +8 -3
- package/dist/services/workflow/workflow-autonomous-resume-helpers.d.ts +3 -1
- package/dist/services/workflow/workflow-autonomous-resume-helpers.js +35 -144
- package/dist/services/workflow/workflow-autonomous-resume-validation.d.ts +16 -0
- package/dist/services/workflow/workflow-autonomous-resume-validation.js +155 -0
- package/dist/services/workflow/workflow-autonomous-service.js +25 -13
- package/dist/services/workflow/workflow-graph-store-helpers.d.ts +51 -0
- package/dist/services/workflow/workflow-graph-store-helpers.js +111 -0
- package/dist/services/workflow/workflow-graph-store.d.ts +2 -35
- package/dist/services/workflow/workflow-graph-store.js +30 -107
- package/dist/services/workflow/workflow-graph-types.js +3 -3
- package/dist/services/workflow/workflow-inflight-probe.js +14 -7
- package/dist/services/workflow/workflow-loader.js +5 -1
- package/dist/services/workflow/workflow-node-lifecycle.js +22 -21
- package/dist/services/workflow/workflow-presence-lifecycle-types.d.ts +50 -0
- package/dist/services/workflow/workflow-presence-lifecycle-types.js +1 -0
- package/dist/services/workflow/workflow-presence-lifecycle.d.ts +2 -42
- package/dist/services/workflow/workflow-presence-lifecycle.js +19 -21
- package/dist/services/workflow/workflow-router-service.js +169 -27
- package/dist/services/workflow/workflow-skip-service.js +14 -4
- package/dist/services/workflow/workflow-spec-builders.d.ts +15 -0
- package/dist/services/workflow/workflow-spec-builders.js +121 -0
- package/dist/services/workflow/workflow-spec.d.ts +7 -6
- package/dist/services/workflow/workflow-spec.js +22 -116
- package/dist/services/workflow/workflow-state-store.js +2 -1
- package/dist/services/workspace/migrate-1-4-1-service.js +80 -14
- package/dist/services/workspace/migrate-service.js +66 -16
- package/dist/services/workspace/reconcile-migrate.js +6 -2
- package/dist/services/workspace/reconcile-service.js +37 -16
- package/dist/services/workspace/workspace-claude-settings-materializer.js +7 -5
- package/dist/services/workspace/workspace-clean-service.js +4 -1
- package/dist/services/workspace/workspace-service.js +11 -3
- package/dist/services/workspace/workspace-state-service.js +1 -1
- package/dist/services/worktree/git-worktree-parser.js +13 -3
- package/dist/services/worktree/host-worktree-reconciler.js +8 -4
- package/dist/services/worktree/long-path-cleanup.js +23 -6
- package/dist/services/worktree/worktree-gc-guard.js +3 -1
- package/dist/services/worktree/worktree-lease-types.d.ts +53 -0
- package/dist/services/worktree/worktree-lease-types.js +10 -0
- package/dist/services/worktree/worktree-lease.d.ts +2 -44
- package/dist/shared/array-guards.d.ts +30 -0
- package/dist/shared/array-guards.js +32 -0
- package/dist/shared/format-md-compact-internals.d.ts +26 -0
- package/dist/shared/format-md-compact-internals.js +125 -0
- package/dist/shared/format-md-compact.js +1 -117
- package/dist/shared/fs-utils.js +2 -1
- package/dist/shared/incrementing-number.js +3 -3
- package/dist/shared/json-parse.d.ts +71 -0
- package/dist/shared/json-parse.js +32 -0
- package/dist/shared/json-schema-mini.js +3 -1
- package/dist/shared/path-safety.js +3 -1
- package/dist/shared/path-utils.d.ts +20 -0
- package/dist/shared/path-utils.js +26 -0
- package/dist/shared/planner-response.js +3 -3
- package/dist/shared/stale-policy.js +1 -3
- package/dist/skills/peaks-maker/index.js +11 -11
- package/package.json +31 -8
- package/scripts/clean-dist.mjs +1 -2
- package/scripts/copy-templates.mjs +2 -4
- package/scripts/install-skills.mjs +305 -125
- package/scripts/sync-version.mjs +25 -8
- package/scripts/watch.mjs +8 -2
- package/skills/peaks-code/SKILL.md +1 -1
|
@@ -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
|
+
}
|
|
@@ -23,45 +23,9 @@
|
|
|
23
23
|
* markdown source — no normalization, no trailing-newline padding.
|
|
24
24
|
*/
|
|
25
25
|
import type { GateEvidence, Handoff, HandoffProbe } from './handoff-types.js';
|
|
26
|
+
export { handoffRelativePath, resolveHandoffPath } from './handoff-path-resolution.js';
|
|
26
27
|
/** Compute the lowercase hex sha256 of a UTF-8 string. */
|
|
27
28
|
export declare function sha256OfBody(body: string): string;
|
|
28
|
-
/**
|
|
29
|
-
* The canonical capsule path for ONE SLICE, relative to the project root.
|
|
30
|
-
*
|
|
31
|
-
* Slice `2026-09-14-prd-capsule-rid-scoping`: the capsule used to be one slot
|
|
32
|
-
* per SESSION (`prd/handoff.md`), so the second slice's handoff silently
|
|
33
|
-
* overwrote the first slice's — and `AUDIT_REQUIRES_HANDOFF` stayed green
|
|
34
|
-
* because it never checked WHOSE rid the file named. Measured on
|
|
35
|
-
* `2026-09-13-session-21878f`: a four-slice job passed that prerequisite on a
|
|
36
|
-
* capsule left by a different line of work.
|
|
37
|
-
*
|
|
38
|
-
* This is the WRITE target, so it always carries the rid — a consumer-side
|
|
39
|
-
* fallback here would leave a rid-scoped requirement with a bare-name writer,
|
|
40
|
-
* which is the defect shape this slice exists to remove. Readers that must
|
|
41
|
-
* tolerate pre-rid-scoping sessions call `resolveHandoffPath` instead.
|
|
42
|
-
*/
|
|
43
|
-
export declare function handoffRelativePath(sessionId: string, requestId: string): string;
|
|
44
|
-
/**
|
|
45
|
-
* The capsule a CONSUMER should read for (session, requestId): the rid-scoped
|
|
46
|
-
* path when it is on disk, else the pre-rid-scoping bare name. Returns null
|
|
47
|
-
* when neither exists.
|
|
48
|
-
*
|
|
49
|
-
* Three sessions on disk still hold only the bare file
|
|
50
|
-
* (`2026-09-06-session-a87ca4`, `2026-09-12-session-e37ef0`,
|
|
51
|
-
* `2026-09-13-session-21878f`), so the legacy tier has to keep resolving for
|
|
52
|
-
* the gate and for every reader below.
|
|
53
|
-
*
|
|
54
|
-
* `requestId` is optional because the detect-only audit surface reaches its
|
|
55
|
-
* service without one. Such a caller can name only the bare path: a session
|
|
56
|
-
* holding nothing but rid-scoped capsules reports missing rather than picking
|
|
57
|
-
* among its siblings' capsules, which would re-open the cross-slice mix-up
|
|
58
|
-
* this scoping exists to close (fail closed, not "some capsule is there").
|
|
59
|
-
*/
|
|
60
|
-
export declare function resolveHandoffPath(opts: {
|
|
61
|
-
projectRoot: string;
|
|
62
|
-
sessionId: string;
|
|
63
|
-
requestId?: string;
|
|
64
|
-
}): string | null;
|
|
65
29
|
/** Pure: produce a Handoff with the frontmatter populated. Hash is
|
|
66
30
|
* computed here; callers MUST NOT pre-populate `handoffHash`. */
|
|
67
31
|
export declare function initHandoff(opts: {
|
|
@@ -23,112 +23,30 @@
|
|
|
23
23
|
* markdown source — no normalization, no trailing-newline padding.
|
|
24
24
|
*/
|
|
25
25
|
import { createHash } from 'node:crypto';
|
|
26
|
-
import { existsSync } from 'node:fs';
|
|
27
26
|
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
28
27
|
import { dirname, join } from 'node:path';
|
|
29
28
|
import { parse as parseYaml } from 'yaml';
|
|
30
|
-
import { isUnsafePathInput } from '../../shared/path-safety.js';
|
|
31
|
-
import { REQUEST_ID_PATTERN } from '../artifacts/request-artifact-service.js';
|
|
32
|
-
import { serializeHandoffFrontmatter } from './handoff-frontmatter.js';
|
|
33
29
|
import { classifyGateEvidence } from './handoff-gate-evidence.js';
|
|
34
|
-
|
|
35
|
-
|
|
30
|
+
import { HANDOFF_SCHEMA_VERSION, isGateEvidence, isSchemaVersion2, serializeHandoff } from './handoff-frontmatter-shape.js';
|
|
31
|
+
import { handoffRelativePath } from './handoff-path-resolution.js';
|
|
32
|
+
// Slice `b1-filesplit-campaign` (wave 3): the capsule PATH layer
|
|
33
|
+
// (`assertSafeHandoffIds` / `handoffRelativePath` / `resolveHandoffPath`) and the
|
|
34
|
+
// frontmatter field primitives (`HANDOFF_SCHEMA_VERSION` / `serializeHandoff` /
|
|
35
|
+
// `isSchemaVersion2` / `isGateEvidence`) moved VERBATIM to
|
|
36
|
+
// `./handoff-path-resolution.ts` and `./handoff-frontmatter-shape.ts` so this
|
|
37
|
+
// file clears the 300 raw-line cap. The public names below are re-exported from
|
|
38
|
+
// this path, so no importer changed; the id->path guard these joins carry is
|
|
39
|
+
// still measured — the new module is named in rule D's scanned set in
|
|
40
|
+
// `tests/unit/runtime/no-runtime-input-guard.test.ts`.
|
|
41
|
+
export { handoffRelativePath, resolveHandoffPath } from './handoff-path-resolution.js';
|
|
36
42
|
/** Compute the lowercase hex sha256 of a UTF-8 string. */
|
|
37
43
|
export function sha256OfBody(body) {
|
|
38
44
|
return createHash('sha256').update(body, 'utf8').digest('hex');
|
|
39
45
|
}
|
|
40
|
-
/**
|
|
41
|
-
* Both ids in a handoff path are caller-supplied path segments, so both are
|
|
42
|
-
* checked at the join. Added 2026-09-14 (repair R1, security audit F2 of
|
|
43
|
-
* `2026-09-14-cli-id-escape-instrumentation`).
|
|
44
|
-
*
|
|
45
|
-
* This function was introduced by `0536d5bd` — the commit that instrumented
|
|
46
|
-
* this defect class — with neither id checked, and it sat outside rule D's
|
|
47
|
-
* scanned layer, so the instrument could not see its own new member.
|
|
48
|
-
* Measured on the pre-fix tree (`prd handoff init --apply`, temp project,
|
|
49
|
-
* `ok: true` both times):
|
|
50
|
-
*
|
|
51
|
-
* --rid '../../../../../../README' replaced the project-root README.md
|
|
52
|
-
* --sid '../../../../SIDOUT' wrote 4 levels above the project root
|
|
53
|
-
*
|
|
54
|
-
* The two axes need two different controls, for a recorded reason: the rid has
|
|
55
|
-
* a pinned format (`REQUEST_ID_PATTERN`, no separator, no dot-dot, no drive)
|
|
56
|
-
* and the sid has none, so it gets the segment check. `isUnsafePathInput`
|
|
57
|
-
* alone is NOT enough for the rid — it admits `a/b` (two non-empty segments),
|
|
58
|
-
* which `request-artifact-service.ts` would reject.
|
|
59
|
-
*
|
|
60
|
-
* Guarding HERE rather than at the three `prd`/`env` flags means every producer
|
|
61
|
-
* that writes through this constructor — `initHandoff`'s default,
|
|
62
|
-
* `handoff-auto-regen.ts`, `evidence-generator.ts` — is covered by the join
|
|
63
|
-
* itself, not by each caller re-deciding.
|
|
64
|
-
*/
|
|
65
|
-
function assertSafeHandoffIds(sessionId, requestId) {
|
|
66
|
-
if (!REQUEST_ID_PATTERN.test(requestId)) {
|
|
67
|
-
throw new Error(`Invalid request id: ${requestId} (expected letters, digits, dots, underscores, or dashes)`);
|
|
68
|
-
}
|
|
69
|
-
if (isUnsafePathInput(sessionId)) {
|
|
70
|
-
throw new Error(`Invalid session id: ${sessionId} (must be a single path segment)`);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* The canonical capsule path for ONE SLICE, relative to the project root.
|
|
75
|
-
*
|
|
76
|
-
* Slice `2026-09-14-prd-capsule-rid-scoping`: the capsule used to be one slot
|
|
77
|
-
* per SESSION (`prd/handoff.md`), so the second slice's handoff silently
|
|
78
|
-
* overwrote the first slice's — and `AUDIT_REQUIRES_HANDOFF` stayed green
|
|
79
|
-
* because it never checked WHOSE rid the file named. Measured on
|
|
80
|
-
* `2026-09-13-session-21878f`: a four-slice job passed that prerequisite on a
|
|
81
|
-
* capsule left by a different line of work.
|
|
82
|
-
*
|
|
83
|
-
* This is the WRITE target, so it always carries the rid — a consumer-side
|
|
84
|
-
* fallback here would leave a rid-scoped requirement with a bare-name writer,
|
|
85
|
-
* which is the defect shape this slice exists to remove. Readers that must
|
|
86
|
-
* tolerate pre-rid-scoping sessions call `resolveHandoffPath` instead.
|
|
87
|
-
*/
|
|
88
|
-
export function handoffRelativePath(sessionId, requestId) {
|
|
89
|
-
assertSafeHandoffIds(sessionId, requestId);
|
|
90
|
-
return join('.peaks', '_runtime', sessionId, 'prd', `handoff-${requestId}.md`);
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* The capsule a CONSUMER should read for (session, requestId): the rid-scoped
|
|
94
|
-
* path when it is on disk, else the pre-rid-scoping bare name. Returns null
|
|
95
|
-
* when neither exists.
|
|
96
|
-
*
|
|
97
|
-
* Three sessions on disk still hold only the bare file
|
|
98
|
-
* (`2026-09-06-session-a87ca4`, `2026-09-12-session-e37ef0`,
|
|
99
|
-
* `2026-09-13-session-21878f`), so the legacy tier has to keep resolving for
|
|
100
|
-
* the gate and for every reader below.
|
|
101
|
-
*
|
|
102
|
-
* `requestId` is optional because the detect-only audit surface reaches its
|
|
103
|
-
* service without one. Such a caller can name only the bare path: a session
|
|
104
|
-
* holding nothing but rid-scoped capsules reports missing rather than picking
|
|
105
|
-
* among its siblings' capsules, which would re-open the cross-slice mix-up
|
|
106
|
-
* this scoping exists to close (fail closed, not "some capsule is there").
|
|
107
|
-
*/
|
|
108
|
-
export function resolveHandoffPath(opts) {
|
|
109
|
-
// The legacy bare-name candidate below is a second join of the same sid, in a
|
|
110
|
-
// second function, so it needs the sid guarded in its own right — the
|
|
111
|
-
// optional-requestId branch reaches `handoffRelativePath` (guarded there), but
|
|
112
|
-
// the branch that is taken when a caller has NO rid reaches this join only.
|
|
113
|
-
if (isUnsafePathInput(opts.sessionId)) {
|
|
114
|
-
throw new Error(`Invalid session id: ${opts.sessionId} (must be a single path segment)`);
|
|
115
|
-
}
|
|
116
|
-
const candidates = [
|
|
117
|
-
...(opts.requestId !== undefined ? [handoffRelativePath(opts.sessionId, opts.requestId)] : []),
|
|
118
|
-
join('.peaks', '_runtime', opts.sessionId, 'prd', 'handoff.md')
|
|
119
|
-
];
|
|
120
|
-
for (const relative of candidates) {
|
|
121
|
-
const absolute = join(opts.projectRoot, relative);
|
|
122
|
-
if (existsSync(absolute))
|
|
123
|
-
return absolute;
|
|
124
|
-
}
|
|
125
|
-
return null;
|
|
126
|
-
}
|
|
127
46
|
/** Pure: produce a Handoff with the frontmatter populated. Hash is
|
|
128
47
|
* computed here; callers MUST NOT pre-populate `handoffHash`. */
|
|
129
48
|
export function initHandoff(opts) {
|
|
130
|
-
const handoffPath = opts.handoffPath ??
|
|
131
|
-
handoffRelativePath(opts.sessionId, opts.requestId);
|
|
49
|
+
const handoffPath = opts.handoffPath ?? handoffRelativePath(opts.sessionId, opts.requestId);
|
|
132
50
|
const handoffHash = sha256OfBody(opts.body);
|
|
133
51
|
const frontmatter = {
|
|
134
52
|
requestId: opts.requestId,
|
|
@@ -145,7 +63,7 @@ export function initHandoff(opts) {
|
|
|
145
63
|
// would also make `serializeHandoffFrontmatter`'s
|
|
146
64
|
// `frontmatter.gateEvidence` key present-but-undefined for every caller
|
|
147
65
|
// that declares nothing.
|
|
148
|
-
...(opts.gateEvidence === undefined ? {} : { gateEvidence: opts.gateEvidence })
|
|
66
|
+
...(opts.gateEvidence === undefined ? {} : { gateEvidence: opts.gateEvidence })
|
|
149
67
|
};
|
|
150
68
|
return { frontmatter, body: opts.body };
|
|
151
69
|
}
|
|
@@ -194,7 +112,7 @@ export async function verifyHandoff(filePath) {
|
|
|
194
112
|
return {
|
|
195
113
|
ok: false,
|
|
196
114
|
reason: 'schema-version-mismatch',
|
|
197
|
-
actualHash: handoff.frontmatter.handoffHash
|
|
115
|
+
actualHash: handoff.frontmatter.handoffHash
|
|
198
116
|
};
|
|
199
117
|
}
|
|
200
118
|
const actualHash = sha256OfBody(handoff.body);
|
|
@@ -203,7 +121,7 @@ export async function verifyHandoff(filePath) {
|
|
|
203
121
|
ok: false,
|
|
204
122
|
reason: 'hash-mismatch',
|
|
205
123
|
actualHash,
|
|
206
|
-
expectedHash: handoff.frontmatter.handoffHash
|
|
124
|
+
expectedHash: handoff.frontmatter.handoffHash
|
|
207
125
|
};
|
|
208
126
|
}
|
|
209
127
|
return { ok: true, actualHash, expectedHash: actualHash };
|
|
@@ -258,34 +176,6 @@ function parseHandoffContent(content) {
|
|
|
258
176
|
body
|
|
259
177
|
};
|
|
260
178
|
}
|
|
261
|
-
function serializeHandoff(handoff) {
|
|
262
|
-
// The one canonical frontmatter rendering, shared with
|
|
263
|
-
// `handoff-auto-regen.ts`. `yaml.stringify` used to render this block and
|
|
264
|
-
// emitted `schemaVersion: "2"` + a bare `handoffHash:`, which the
|
|
265
|
-
// `AUDIT_REQUIRES_HANDOFF` gate and both audit loaders all reject.
|
|
266
|
-
return `${serializeHandoffFrontmatter(handoff.frontmatter)}${handoff.body}`;
|
|
267
|
-
}
|
|
268
|
-
/**
|
|
269
|
-
* N1: accept BOTH shapes of `schemaVersion` — the string `'2'` and the bare
|
|
270
|
-
* YAML number `2` — and reject any other value.
|
|
271
|
-
*
|
|
272
|
-
* The reader used to require `typeof v.schemaVersion === 'string'`. That made
|
|
273
|
-
* `readHandoff` refuse `prd/handoff.md` written by `handoff-auto-regen.ts`,
|
|
274
|
-
* which emits the unquoted `schemaVersion: 2`, while the
|
|
275
|
-
* `AUDIT_REQUIRES_HANDOFF` prereq — a SUBSTRING check for `schemaVersion: 2` —
|
|
276
|
-
* happily passed the same bytes. So the gate that exists to guarantee a
|
|
277
|
-
* readable handoff was satisfied by a handoff the parser would not read, and
|
|
278
|
-
* `peaks prd handoff verify` exited 1 on a healthy file.
|
|
279
|
-
*
|
|
280
|
-
* Slice `2026-09-14-handoff-writer-gate-divergence` then fixed the other half:
|
|
281
|
-
* the writer no longer emits the quoted form at all (see
|
|
282
|
-
* `handoff-frontmatter.ts`). This tolerance stays because handoffs already on
|
|
283
|
-
* disk were written by the old writer and by hand; the writer fix must not
|
|
284
|
-
* retroactively make them unreadable.
|
|
285
|
-
*/
|
|
286
|
-
function isSchemaVersion2(value) {
|
|
287
|
-
return value === HANDOFF_SCHEMA_VERSION || value === 2;
|
|
288
|
-
}
|
|
289
179
|
/**
|
|
290
180
|
* The READER's shape check — deliberately looser than `verifyHandoff`:
|
|
291
181
|
* `handoffHash` must be a string, and nothing about its VALUE is validated here.
|
|
@@ -319,25 +209,3 @@ function isHandoffFrontmatter(value) {
|
|
|
319
209
|
typeof v.handoffPath === 'string' &&
|
|
320
210
|
isGateEvidence(v.gateEvidence));
|
|
321
211
|
}
|
|
322
|
-
/**
|
|
323
|
-
* B1: `gateEvidence` is optional, but when present it MUST be a map of
|
|
324
|
-
* strings — an ARRAY here is the pre-B1 shape its own test file used to
|
|
325
|
-
* write, and it is a broken declaration, not a claim.
|
|
326
|
-
*
|
|
327
|
-
* F2 of `rid-b1-qa` removed this function's own copy of the shape rule. It
|
|
328
|
-
* used to be a second predicate (same boundary, different downstream result)
|
|
329
|
-
* that let the same bytes read one way here and another way through
|
|
330
|
-
* `readHandoffGateEvidence`; both now ask `classifyGateEvidence`. Only
|
|
331
|
-
* `absent` and `ok` are accepted: a malformed declaration must be refused by
|
|
332
|
-
* `readHandoff` (which is documented to throw on malformed input) exactly as
|
|
333
|
-
* the reader refuses it, so the two can never disagree about the same file.
|
|
334
|
-
*
|
|
335
|
-
* Unknown keys are still accepted HERE — the map is normalized to the five
|
|
336
|
-
* known keys by the caller — because refusing them would make a typo render
|
|
337
|
-
* a whole capsule unreadable, and the reader's `unknownKeys` is the surface
|
|
338
|
-
* that makes the typo diagnosable instead.
|
|
339
|
-
*/
|
|
340
|
-
function isGateEvidence(value) {
|
|
341
|
-
const kind = classifyGateEvidence(value).kind;
|
|
342
|
-
return kind === 'absent' || kind === 'ok';
|
|
343
|
-
}
|
|
@@ -17,10 +17,30 @@
|
|
|
17
17
|
import { readFileSync, existsSync, readdirSync, statSync } from 'node:fs';
|
|
18
18
|
import { join, resolve } from 'node:path';
|
|
19
19
|
const BLOCK_HEADINGS = [
|
|
20
|
-
{
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
{
|
|
21
|
+
block: 1,
|
|
22
|
+
name: '业务场景',
|
|
23
|
+
pattern: /^#{1,4}\s*(?:\d+\.\s*)?业务场景[^\n]*$/m,
|
|
24
|
+
requiredByDefault: true
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
block: 2,
|
|
28
|
+
name: '边界 case',
|
|
29
|
+
pattern: /^#{1,4}\s*(?:\d+\.\s*)?边界\s*case[^\n]*$/im,
|
|
30
|
+
requiredByDefault: true
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
block: 3,
|
|
34
|
+
name: 'UI 装配意图',
|
|
35
|
+
pattern: /^#{1,4}\s*(?:\d+\.\s*)?UI\s*装配[^\n]*$/im,
|
|
36
|
+
requiredByDefault: true
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
block: 4,
|
|
40
|
+
name: '上游基线',
|
|
41
|
+
pattern: /^#{1,4}\s*(?:\d+\.\s*)?上游基线[^\n]*$/m,
|
|
42
|
+
requiredByDefault: false
|
|
43
|
+
}
|
|
24
44
|
];
|
|
25
45
|
const MIN_CONTENT_LENGTH = 50;
|
|
26
46
|
export function findPrdArtifact(projectRoot, requestId) {
|
|
@@ -75,9 +95,7 @@ export function checkPrdBlocks(projectRoot, requestId) {
|
|
|
75
95
|
required: h.requiredByDefault,
|
|
76
96
|
present: false,
|
|
77
97
|
content: null,
|
|
78
|
-
issues: h.requiredByDefault
|
|
79
|
-
? ['PRD artifact not found — write the prd body first.']
|
|
80
|
-
: []
|
|
98
|
+
issues: h.requiredByDefault ? ['PRD artifact not found — write the prd body first.'] : []
|
|
81
99
|
})),
|
|
82
100
|
ok: false
|
|
83
101
|
};
|
|
@@ -95,7 +113,9 @@ export function checkPrdBlocks(projectRoot, requestId) {
|
|
|
95
113
|
present: false,
|
|
96
114
|
content: null,
|
|
97
115
|
issues: required
|
|
98
|
-
? [
|
|
116
|
+
? [
|
|
117
|
+
`Missing required block: ${h.name}. Add a heading like "## ${h.name}" with at least ${MIN_CONTENT_LENGTH} chars of content.`
|
|
118
|
+
]
|
|
99
119
|
: []
|
|
100
120
|
};
|
|
101
121
|
}
|
|
@@ -42,11 +42,7 @@ const SOURCE_FILE_EXTENSIONS = /\.(tsx?|jsx?|vue|svelte)$/;
|
|
|
42
42
|
* here — those projects should be detected via `package.json`
|
|
43
43
|
* workspaces[] field below.
|
|
44
44
|
*/
|
|
45
|
-
const MONOREPO_ROOT_CONFIGS = [
|
|
46
|
-
'pnpm-workspace.yaml',
|
|
47
|
-
'turbo.json',
|
|
48
|
-
'nx.json'
|
|
49
|
-
];
|
|
45
|
+
const MONOREPO_ROOT_CONFIGS = ['pnpm-workspace.yaml', 'turbo.json', 'nx.json'];
|
|
50
46
|
/** True iff the project root declares pnpm / yarn / npm workspaces. */
|
|
51
47
|
function projectHasWorkspacesInPackageJson(projectRoot) {
|
|
52
48
|
const pkgPath = join(projectRoot, 'package.json');
|
|
@@ -59,10 +59,7 @@ async function readOptionalFile(projectRoot, relativePath) {
|
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
function isEnoent(error) {
|
|
62
|
-
return
|
|
63
|
-
error !== null &&
|
|
64
|
-
'code' in error &&
|
|
65
|
-
error.code === 'ENOENT');
|
|
62
|
+
return typeof error === 'object' && error !== null && 'code' in error && error.code === 'ENOENT';
|
|
66
63
|
}
|
|
67
64
|
function parseProjectScanContent(content) {
|
|
68
65
|
const { frontmatter } = splitFrontmatter(content);
|
|
@@ -397,10 +397,7 @@ async function readOptionalFile(absolutePath) {
|
|
|
397
397
|
}
|
|
398
398
|
}
|
|
399
399
|
function isEnoent(error) {
|
|
400
|
-
return
|
|
401
|
-
error !== null &&
|
|
402
|
-
'code' in error &&
|
|
403
|
-
error.code === 'ENOENT');
|
|
400
|
+
return typeof error === 'object' && error !== null && 'code' in error && error.code === 'ENOENT';
|
|
404
401
|
}
|
|
405
402
|
/** Serialize a `BusinessKnowledge` to the markdown-table body format.
|
|
406
403
|
* Matches the bootstrap template at `.peaks/project-scan/business-knowledge.md`. */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import { dirname, join } from 'node:path';
|
|
3
|
-
import { DEFAULT_PREFERENCES, FANOUT_MODES, isFanoutMode, PREFERENCES_SCHEMA_VERSION
|
|
3
|
+
import { DEFAULT_PREFERENCES, FANOUT_MODES, isFanoutMode, PREFERENCES_SCHEMA_VERSION } from './preferences-types.js';
|
|
4
4
|
const PREFS_REL_PATH = '.peaks/preferences.json';
|
|
5
5
|
export { DEFAULT_PREFERENCES, PREFERENCES_SCHEMA_VERSION };
|
|
6
6
|
export function preferencesPath(projectRoot) {
|
|
@@ -93,7 +93,7 @@ function mergePreferences(base, overrides) {
|
|
|
93
93
|
// that already specified `defaultMode` in their preferences.json.
|
|
94
94
|
const shallow = {
|
|
95
95
|
...base,
|
|
96
|
-
...Object.fromEntries(definedEntries)
|
|
96
|
+
...Object.fromEntries(definedEntries)
|
|
97
97
|
};
|
|
98
98
|
const overrideFanout = overrides.fanout;
|
|
99
99
|
if (overrideFanout !== undefined &&
|
|
@@ -107,7 +107,7 @@ function mergePreferences(base, overrides) {
|
|
|
107
107
|
}
|
|
108
108
|
return {
|
|
109
109
|
...shallow,
|
|
110
|
-
schema_version: PREFERENCES_SCHEMA_VERSION
|
|
110
|
+
schema_version: PREFERENCES_SCHEMA_VERSION
|
|
111
111
|
};
|
|
112
112
|
}
|
|
113
113
|
export function migratePreferences(projectRoot, opts = {}) {
|
|
@@ -122,9 +122,7 @@ export function migratePreferences(projectRoot, opts = {}) {
|
|
|
122
122
|
catch (err) {
|
|
123
123
|
throw new Error(`PREFERENCES_JSON_INVALID: failed to parse ${filePath}: ${err.message}`);
|
|
124
124
|
}
|
|
125
|
-
const fromVersion = typeof raw.schema_version === 'string'
|
|
126
|
-
? raw.schema_version
|
|
127
|
-
: 'unknown';
|
|
125
|
+
const fromVersion = typeof raw.schema_version === 'string' ? raw.schema_version : 'unknown';
|
|
128
126
|
if (fromVersion === PREFERENCES_SCHEMA_VERSION) {
|
|
129
127
|
return {
|
|
130
128
|
fromVersion,
|
|
@@ -158,9 +156,9 @@ export function migratePreferences(projectRoot, opts = {}) {
|
|
|
158
156
|
const migrated = mergePreferences(DEFAULT_PREFERENCES, {
|
|
159
157
|
...raw,
|
|
160
158
|
fanout: typeof raw.fanout === 'object' && raw.fanout !== null && !Array.isArray(raw.fanout)
|
|
161
|
-
?
|
|
159
|
+
? raw.fanout.defaultMode === 'serial'
|
|
162
160
|
? { defaultMode: 'fan-out' }
|
|
163
|
-
: raw.fanout
|
|
161
|
+
: raw.fanout
|
|
164
162
|
: { defaultMode: 'fan-out' }
|
|
165
163
|
});
|
|
166
164
|
let written = false;
|
|
@@ -26,12 +26,12 @@ export const DEFAULT_PREFERENCES = {
|
|
|
26
26
|
classifyRules: {
|
|
27
27
|
feature_threshold_files: 10,
|
|
28
28
|
feature_threshold_lines: 100,
|
|
29
|
-
runtime_clean_grace_hours: 24
|
|
29
|
+
runtime_clean_grace_hours: 24
|
|
30
30
|
},
|
|
31
31
|
swarmSpeculative: {
|
|
32
32
|
enabled: true,
|
|
33
33
|
maxConcurrent: 3,
|
|
34
|
-
minHitRate: 0.5
|
|
34
|
+
minHitRate: 0.5
|
|
35
35
|
},
|
|
36
36
|
loopAutonomousEnabled: false,
|
|
37
37
|
agentShieldEnabled: false,
|
|
@@ -55,6 +55,6 @@ export const DEFAULT_PREFERENCES = {
|
|
|
55
55
|
warmItemCap: 4,
|
|
56
56
|
warmMinTokenHits: 1,
|
|
57
57
|
selectionTimeBudgetMs: 200,
|
|
58
|
-
includeBodies: false
|
|
59
|
-
}
|
|
58
|
+
includeBodies: false
|
|
59
|
+
}
|
|
60
60
|
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `src/services/qa/bdd-test-style-contract.ts`
|
|
3
|
+
*
|
|
4
|
+
* Verdict types and pure string matchers extracted verbatim from
|
|
5
|
+
* `bdd-test-style-verifier.ts` (wave 2, file-size cap campaign) so the
|
|
6
|
+
* verifier stays under the 300 raw-line cap. Mechanical move only —
|
|
7
|
+
* the verifier re-exports every public type from its original path.
|
|
8
|
+
*/
|
|
9
|
+
/** Structured failure reasons the verifier can return. */
|
|
10
|
+
export type BddStyleFailureReason = 'missing-given-when-then' | 'description-no-should-when';
|
|
11
|
+
/** Successful verdict — includes the count of inspected `it`/`test` calls. */
|
|
12
|
+
export interface BddStyleOk {
|
|
13
|
+
readonly ok: true;
|
|
14
|
+
readonly scanned: number;
|
|
15
|
+
}
|
|
16
|
+
/** Structured failure verdict — the file/line makes the rejection actionable. */
|
|
17
|
+
export interface BddStyleFail {
|
|
18
|
+
readonly ok: false;
|
|
19
|
+
readonly reason: BddStyleFailureReason;
|
|
20
|
+
readonly file: string;
|
|
21
|
+
readonly line: number;
|
|
22
|
+
/** For `description-no-should-when`: the original description. */
|
|
23
|
+
readonly description?: string;
|
|
24
|
+
/** For `missing-given-when-then`: a stable string the caller can compare. */
|
|
25
|
+
readonly expected?: string;
|
|
26
|
+
}
|
|
27
|
+
export type BddStyleVerdict = BddStyleOk | BddStyleFail;
|
|
28
|
+
/** Public input surface — keep small so the contract is hard to misuse. */
|
|
29
|
+
export interface VerifyBddStyleInput {
|
|
30
|
+
readonly projectRoot: string;
|
|
31
|
+
readonly testFiles: readonly string[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Match the three leading comments against the BDD triple. Each
|
|
35
|
+
* entry must be a `// <keyword>:` line (with optional trailing
|
|
36
|
+
* whitespace); the keywords must appear in `given`, `when`, `then`
|
|
37
|
+
* order, case-insensitive.
|
|
38
|
+
*/
|
|
39
|
+
export declare function matchesBddTriple(triple: readonly string[]): boolean;
|
|
40
|
+
/** True when `text` contains `when` or `should` as a whole word. */
|
|
41
|
+
export declare function hasWhenOrShould(text: string): boolean;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `src/services/qa/bdd-test-style-contract.ts`
|
|
3
|
+
*
|
|
4
|
+
* Verdict types and pure string matchers extracted verbatim from
|
|
5
|
+
* `bdd-test-style-verifier.ts` (wave 2, file-size cap campaign) so the
|
|
6
|
+
* verifier stays under the 300 raw-line cap. Mechanical move only —
|
|
7
|
+
* the verifier re-exports every public type from its original path.
|
|
8
|
+
*/
|
|
9
|
+
/** Number of comment lines that make up the BDD triple (`given`/`when`/`then`). */
|
|
10
|
+
const BDD_TRIPLE_SIZE = 3;
|
|
11
|
+
/**
|
|
12
|
+
* Match the three leading comments against the BDD triple. Each
|
|
13
|
+
* entry must be a `// <keyword>:` line (with optional trailing
|
|
14
|
+
* whitespace); the keywords must appear in `given`, `when`, `then`
|
|
15
|
+
* order, case-insensitive.
|
|
16
|
+
*/
|
|
17
|
+
export function matchesBddTriple(triple) {
|
|
18
|
+
if (triple.length !== BDD_TRIPLE_SIZE)
|
|
19
|
+
return false;
|
|
20
|
+
// Each entry must be a `// <keyword>:` line, optionally followed
|
|
21
|
+
// by descriptive text. The Slice A migrator's `buildCommentBlock`
|
|
22
|
+
// produces `// given: the test setup` / `// when: the function
|
|
23
|
+
// under test is invoked` / `// then: the result matches the
|
|
24
|
+
// expectation` — the `when` line uses two spaces after the colon
|
|
25
|
+
// for visual alignment with `given:` and `then:`, so the regex
|
|
26
|
+
// is intentionally permissive about trailing text.
|
|
27
|
+
const patterns = [
|
|
28
|
+
/^\s*\/\/\s*given\s*:/i,
|
|
29
|
+
/^\s*\/\/\s*when\s*:/i,
|
|
30
|
+
/^\s*\/\/\s*then\s*:/i
|
|
31
|
+
];
|
|
32
|
+
return patterns.every((pat, i) => pat.test(triple[i] ?? ''));
|
|
33
|
+
}
|
|
34
|
+
/** True when `text` contains `when` or `should` as a whole word. */
|
|
35
|
+
export function hasWhenOrShould(text) {
|
|
36
|
+
return /(\bwhen\b|\bshould\b)/i.test(text);
|
|
37
|
+
}
|