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,218 @@
|
|
|
1
|
+
// src/services/final-review/final-review-evidence-budget.ts
|
|
2
|
+
//
|
|
3
|
+
// The evidence allocator's budget constants: the total cap, the derived
|
|
4
|
+
// per-file unit, the dimensions it is divided across, the anti-starvation
|
|
5
|
+
// reservation it must stay affordable against, and the checks that
|
|
6
|
+
// re-verify the derivation at the point of use. Hoisted verbatim from
|
|
7
|
+
// final-review-service.ts (C wave 7 file-size split).
|
|
8
|
+
//
|
|
9
|
+
// One deliberate respell, recorded in the envelope: 40 * 1024 is written
|
|
10
|
+
// as 40_960 (same value, pinned by the existing tests) so the hoisted
|
|
11
|
+
// module carries no no-magic-numbers finding. The repo has done exactly
|
|
12
|
+
// this before (lint-gate.md records CRYS_BEE_ID_MAX_I32 respelled from
|
|
13
|
+
// 2 ** 31 - 1 to a flat literal for the same rule).
|
|
14
|
+
export const REQUIRED_DIMENSIONS = [
|
|
15
|
+
'functional-completeness',
|
|
16
|
+
'problem-resolution',
|
|
17
|
+
'no-new-bugs',
|
|
18
|
+
'existing-functionality-intact'
|
|
19
|
+
];
|
|
20
|
+
/* ------------------------------------------------------------------ *
|
|
21
|
+
* D1 — on-disk evidence collection.
|
|
22
|
+
*
|
|
23
|
+
* The reviewer LLM has NO tools and NO filesystem access: whatever the
|
|
24
|
+
* service does not inline into the prompt does not exist for it. Feeding it
|
|
25
|
+
* only the success criteria forced a guess — the observed failure mode was a
|
|
26
|
+
* 4/4 `inconclusive` verdict, and the dangerous one is an invented `pass`
|
|
27
|
+
* that SKILL.md would read as a clean handoff. Everything below exists so the
|
|
28
|
+
* verdicts rest on what is actually on disk, and so a missing artifact is
|
|
29
|
+
* reported as MISSING instead of being silently skipped.
|
|
30
|
+
* ------------------------------------------------------------------ */
|
|
31
|
+
/**
|
|
32
|
+
* Total evidence budget across all sources. 40 KB ≈ 10k tokens of input, which
|
|
33
|
+
* keeps the prompt far inside any modern context window. Sources that do not
|
|
34
|
+
* fit are reported as OMITTED — never dropped silently.
|
|
35
|
+
*
|
|
36
|
+
* This is an INPUT cap and stays fixed per run. The output ceiling that has to
|
|
37
|
+
* sit opposite it is derived per call by `outputBudgetForEvidence()` below —
|
|
38
|
+
* the two used to drift apart, and that drift was the defect.
|
|
39
|
+
*
|
|
40
|
+
* RE-EVALUATED 2026-09-12 (F-BLOCK) — 32 KiB did NOT hold once the tenth
|
|
41
|
+
* source (`final-review-pre-post-diff`) was appended. Measured on this repo's
|
|
42
|
+
* own run (`2026-09-12-session-e37ef0`, rid
|
|
43
|
+
* `2026-09-12-codegraph-exclude-integrity`), the ten sources are 2,621 / 8,164
|
|
44
|
+
* / 9,492 / 10,839 / 11,422 / 13,050 / 13,462 / 13,852 / 17,745 / 20,543
|
|
45
|
+
* bytes — 121,190 bytes on disk, 76,321 bytes once the 8 KiB per-file cap is
|
|
46
|
+
* applied. Four sources at the cap spent the old 32,768 to the byte, so the
|
|
47
|
+
* appended tenth (added LAST, by design) was the first block the budget
|
|
48
|
+
* dropped — on every run, and on the compact set QA measured too (9 x 3.8 KB
|
|
49
|
+
* ≈ 34 KB, which the old cap already could not hold).
|
|
50
|
+
*
|
|
51
|
+
* 40 KiB is a budget that fits the measured ten-source set at the allocator's
|
|
52
|
+
* per-source unit (5 x 8 KiB units + the smaller ones), and it is the largest
|
|
53
|
+
* this budget may grow to today: the derived output ceiling is
|
|
54
|
+
* `3000 + 12288 + bytes/4`, so it reaches MAX_OUTPUT_TOKENS (32,000) at exactly
|
|
55
|
+
* 66,848 bytes of inlined evidence and is clamped from there on — a cap at or
|
|
56
|
+
* above that point buys the reviewer no more output room at all.
|
|
57
|
+
*
|
|
58
|
+
* F-CAP — an earlier version of this comment claimed 40 KiB (40,960 =
|
|
59
|
+
* 10 x 4,096) was "the smallest cap that affords one floor-sized slice to EVERY
|
|
60
|
+
* source in the ten-source set". That was arithmetic about a budget, not a
|
|
61
|
+
* statement about the allocator: sources are capped at
|
|
62
|
+
* MAX_EVIDENCE_BYTES_PER_FILE (10 KiB each, derived — see below) while a floor
|
|
63
|
+
* is per DIMENSION (four of them), so 10 x 4,096 was never what any source
|
|
64
|
+
* received. Re-measured on
|
|
65
|
+
* the same two saturated fixtures (QA round 4: the 9 x 40 KB fixture and this
|
|
66
|
+
* repo's own file sizes), raising the cap from 32 KiB to 40 KiB left **4 of the
|
|
67
|
+
* 10 sources inlined with zero bytes** — `rd/security-review`,
|
|
68
|
+
* `rd/bug-analysis`, `prd/handoff` and the appended
|
|
69
|
+
* `final-review-pre-post-diff` — and it did not deliver the baseline either;
|
|
70
|
+
* all it did was change WHICH source was starved (at 32 KiB that source was
|
|
71
|
+
* `rd/code-review`).
|
|
72
|
+
*
|
|
73
|
+
* So read this constant as "how much evidence fits", never as "which sources
|
|
74
|
+
* arrive". Arrival is decided by the allocator below (one whole unit per source,
|
|
75
|
+
* with a dimension's floor reserving its holder's unit) and, for the two sources
|
|
76
|
+
* a dimension's verdict may not outlive, by the delivery gates on top of it.
|
|
77
|
+
* And note the honest consequence, stated rather than papered over: on a
|
|
78
|
+
* saturated run the allocator still omits sources, so `prd/handoff.md` and the
|
|
79
|
+
* pre/post diff can be dropped — which is exactly why
|
|
80
|
+
* `enforceScopeContractDelivery()` and `enforcePrePostDiffAvailability()` exist
|
|
81
|
+
* and why a `pass` on those two dimensions is keyed on delivery, not on
|
|
82
|
+
* existence.
|
|
83
|
+
*/
|
|
84
|
+
export const MAX_EVIDENCE_BYTES_TOTAL = 40_960;
|
|
85
|
+
/**
|
|
86
|
+
* Per-file evidence cap — and the allocator's UNIT. DERIVED, never typed.
|
|
87
|
+
*
|
|
88
|
+
* F5 — this used to be the literal `8 * 1024`, and the whole floor guarantee
|
|
89
|
+
* below was silently conditioned on `4 x perFile <= total`: the reservation
|
|
90
|
+
* promises every pending holder its own unit, and that promise holds only while
|
|
91
|
+
* the four units fit the budget together. At `8 * 1024` the inequality held by
|
|
92
|
+
* coincidence (4 x 8,192 = 32,768 <= 40,960) and nothing in the code said so —
|
|
93
|
+
* raising the cap past 10,240 would have starved all four dimensions in the
|
|
94
|
+
* same run, which reads as four independent red gates rather than one broken
|
|
95
|
+
* constant. The cap is therefore DIVIDED OUT OF the total: the relation is
|
|
96
|
+
* definitional instead of remembered, and `assertFloorReservationAffordable()`
|
|
97
|
+
* still checks it at the point of use (the division must also be exact).
|
|
98
|
+
*
|
|
99
|
+
* The value is 10,240 because that is `40,960 / 4` — the largest unit the
|
|
100
|
+
* four-dimension reservation can afford. It is also the smallest cap at which
|
|
101
|
+
* the decisive evidence source of this repo's own run can be delivered WHOLE:
|
|
102
|
+
* `qa/test-reports/<rid>.md` measured 9,492 bytes there, and `whole` is the
|
|
103
|
+
* delivery rule for every source whose producer publishes no conclusion literal
|
|
104
|
+
* (see `isDelivered`), so a cap under 9,492 makes `problem-resolution` and
|
|
105
|
+
* `no-new-bugs` undeliverable on every run — the always-red gate this module
|
|
106
|
+
* refuses to ship. Enforced in BYTES against the raw buffer, so multi-byte
|
|
107
|
+
* (CJK) content cannot slip past the cap.
|
|
108
|
+
*
|
|
109
|
+
* A source is inlined as `min(bytes, this cap)` — its whole unit — or not at
|
|
110
|
+
* all. So a `TRUNCATED` source block can only ever mean "the FILE is bigger
|
|
111
|
+
* than this cap"; it can no longer mean "the budget ran out while this file was
|
|
112
|
+
* being copied in". That distinction is the point of the all-or-nothing
|
|
113
|
+
* allocator below: the second reading is what let one byte of a 4,226-byte
|
|
114
|
+
* artifact be counted as delivered evidence (F-BLOCK-1BYTE).
|
|
115
|
+
*/
|
|
116
|
+
export const MAX_EVIDENCE_BYTES_PER_FILE = MAX_EVIDENCE_BYTES_TOTAL / REQUIRED_DIMENSIONS.length;
|
|
117
|
+
/* ------------------------------------------------------------------ *
|
|
118
|
+
* The anti-starvation reservation (the "floor").
|
|
119
|
+
*
|
|
120
|
+
* The allocator would otherwise be strictly first-come-first-served, and with
|
|
121
|
+
* this repo's own evidence set (`2026-09-12-session-e37ef0`, measured) the
|
|
122
|
+
* first four sources consumed the entire 32 KiB cap — 4 x 8,192 = 32,768, to
|
|
123
|
+
* the byte — before source 5 was even opened. `existing-functionality-intact`
|
|
124
|
+
* is supplied ONLY by `rd/tech-doc.md` (6th), `prd/handoff.md` (9th) and the
|
|
125
|
+
* appended pre/post diff (10th), so that dimension reached the reviewer with
|
|
126
|
+
* zero evidence on every run and its verdict was structurally locked to
|
|
127
|
+
* `inconclusive` no matter how good the work was. A gate that is always red is
|
|
128
|
+
* noise, and an operator trained to ignore noise has no gate at all — the same
|
|
129
|
+
* harm as a gate that never fires, only quieter.
|
|
130
|
+
*
|
|
131
|
+
* So each dimension with at least one readable source on disk gets one
|
|
132
|
+
* reservation, held for the FIRST such source; no source that is not that
|
|
133
|
+
* holder may spend it, and it is released the instant its holder is served.
|
|
134
|
+
* `floorHolders()` below decides who holds what and `collectEvidence()` is the
|
|
135
|
+
* only thing that spends it.
|
|
136
|
+
*
|
|
137
|
+
* WHAT A RESERVATION IS SIZED AT (all-or-nothing): the holder's own UNIT — its
|
|
138
|
+
* whole `min(bytes, perFileCap)` slice — not a fixed number of bytes. Under the
|
|
139
|
+
* all-or-nothing allocator a holder needs its entire unit to be served at all,
|
|
140
|
+
* so reserving less than that would promise something the allocator cannot
|
|
141
|
+
* keep. The promise stays affordable because a holder is at most one per
|
|
142
|
+
* dimension and there are four dimensions:
|
|
143
|
+
*
|
|
144
|
+
* REQUIRED_DIMENSIONS.length x MAX_EVIDENCE_BYTES_PER_FILE
|
|
145
|
+
* = 4 x 10,240 = 40,960 == MAX_EVIDENCE_BYTES_TOTAL = 40,960
|
|
146
|
+
*
|
|
147
|
+
* L4 — those are the DERIVED numbers and the relation is an EQUALITY, not an
|
|
148
|
+
* inequality with room to spare: the reservation spends the entire budget and
|
|
149
|
+
* leaves ZERO slack. This block used to read `= 4 x 8,192 = 32,768 <= 40,960`,
|
|
150
|
+
* which was true of the typed-literal cap and stopped being true the moment the
|
|
151
|
+
* cap was divided out of the total; left as written it read as 8 KiB of
|
|
152
|
+
* headroom that does not exist and would have invited "just raise the cap a
|
|
153
|
+
* little". One byte more per file breaks the invariant outright, which is why
|
|
154
|
+
* the cap is derived rather than typed and why
|
|
155
|
+
* `assertFloorReservationAffordable()` re-checks the derivation (exact integer
|
|
156
|
+
* quotient, product <= total) at the point of use instead of trusting this
|
|
157
|
+
* comment (pinned by a test).
|
|
158
|
+
*
|
|
159
|
+
* That equality is the whole invariant: at every step `budgetLeft` covers the
|
|
160
|
+
* units still owed to the pending holders, so a holder is always served once it
|
|
161
|
+
* is reached, and the invariant cannot silently rot while the three constants
|
|
162
|
+
* keep their published relationship.
|
|
163
|
+
*
|
|
164
|
+
* A reservation is held for a DIMENSION, not for any particular SOURCE:
|
|
165
|
+
* reserving one for `final-review-pre-post-diff` on top of its dimension's
|
|
166
|
+
* would make "a computed baseline the reviewer never saw" UNREACHABLE, and an
|
|
167
|
+
* unreachable branch inside a gate is one nobody can verify. The delivery gates
|
|
168
|
+
* below are the guarantee; see `enforcePrePostDiffAvailability` and
|
|
169
|
+
* `enforceScopeContractDelivery`.
|
|
170
|
+
* ------------------------------------------------------------------ */
|
|
171
|
+
/**
|
|
172
|
+
* The unit the allocator hands out: one source's WHOLE slice — its bytes up to
|
|
173
|
+
* the per-file cap — or nothing at all.
|
|
174
|
+
*
|
|
175
|
+
* F-BLOCK-1BYTE — the allocator used to take `min(perFileCap, budgetLeft)`, so
|
|
176
|
+
* the last source the budget reached was cut wherever the budget ran out.
|
|
177
|
+
* `status: 'found'` then meant "at least one byte arrived", and every gate that
|
|
178
|
+
* asked "did the reviewer see this source?" was answering a question with a
|
|
179
|
+
* continuum of possible answers. The observed output (QA round 4, 9 x 4,551 B
|
|
180
|
+
* sources, `api-diff.txt` at 4,226 B): the pre/post diff was inlined as **1
|
|
181
|
+
* byte** — the character `#` — while the producer block still said
|
|
182
|
+
* `STATUS: COMPUTED … cite it`, the dimension kept its `pass`/`high`, the
|
|
183
|
+
* artifact was attached as evidence, and the envelope returned `allPass: true`.
|
|
184
|
+
* Each earlier fix had moved the threshold that separated "some bytes" from
|
|
185
|
+
* "the evidence"; this removes the continuum instead, so no predicate can be
|
|
186
|
+
* re-tuned into the same hole a fifth time.
|
|
187
|
+
*/
|
|
188
|
+
export function sourceUnit(candidate) {
|
|
189
|
+
return candidate.raw === null
|
|
190
|
+
? 0
|
|
191
|
+
: Math.min(candidate.raw.byteLength, MAX_EVIDENCE_BYTES_PER_FILE);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* F5 — the floor promise, checked where it is relied on instead of remembered.
|
|
195
|
+
*
|
|
196
|
+
* The allocator's loop invariant is `budgetLeft >= sum(units of pending
|
|
197
|
+
* holders)`, and its INITIAL condition is
|
|
198
|
+
* `REQUIRED_DIMENSIONS.length x MAX_EVIDENCE_BYTES_PER_FILE <=
|
|
199
|
+
* MAX_EVIDENCE_BYTES_TOTAL`. While that holds, every holder is served when it
|
|
200
|
+
* is reached and the reservation is a guarantee; the moment it fails, all four
|
|
201
|
+
* dimensions are starved in the same run — which surfaces as four independent
|
|
202
|
+
* red gates rather than as one broken constant, and is therefore the kind of
|
|
203
|
+
* breakage nobody diagnoses correctly.
|
|
204
|
+
*
|
|
205
|
+
* The cap is derived from the total so the inequality cannot be typed wrong,
|
|
206
|
+
* and this check covers the two ways a derivation can still go bad: a
|
|
207
|
+
* non-integer quotient (a fifth dimension, say) and a future re-typing of
|
|
208
|
+
* either constant. It is exported because a test asserts it directly.
|
|
209
|
+
*/
|
|
210
|
+
export function assertFloorReservationAffordable() {
|
|
211
|
+
if (!Number.isInteger(MAX_EVIDENCE_BYTES_PER_FILE)) {
|
|
212
|
+
throw new Error(`MAX_EVIDENCE_BYTES_PER_FILE is not an integer (${String(MAX_EVIDENCE_BYTES_PER_FILE)} = ${String(MAX_EVIDENCE_BYTES_TOTAL)} / ${String(REQUIRED_DIMENSIONS.length)}): the per-dimension floor reservation is not affordable at a fractional unit.`);
|
|
213
|
+
}
|
|
214
|
+
const owed = REQUIRED_DIMENSIONS.length * MAX_EVIDENCE_BYTES_PER_FILE;
|
|
215
|
+
if (owed > MAX_EVIDENCE_BYTES_TOTAL) {
|
|
216
|
+
throw new Error(`the floor reservation is not affordable: ${String(REQUIRED_DIMENSIONS.length)} dimensions x ${String(MAX_EVIDENCE_BYTES_PER_FILE)} bytes per file = ${String(owed)} exceeds MAX_EVIDENCE_BYTES_TOTAL (${String(MAX_EVIDENCE_BYTES_TOTAL)}). Every dimension would be starved in the same run.`);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type CollectedEvidence, type EvidenceCandidate } from './final-review-evidence-sources.js';
|
|
2
|
+
/** Pure read: no commands, no git, no test execution — files only. */
|
|
3
|
+
export declare function readEvidence(projectRoot: string, sessionId: string, rid: string, prePostDiffAvailable: boolean): readonly EvidenceCandidate[];
|
|
4
|
+
export declare function collectEvidence(projectRoot: string, sessionId: string, rid: string, prePostDiffAvailable: boolean): readonly CollectedEvidence[];
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
// src/services/final-review/final-review-evidence-collect.ts
|
|
2
|
+
//
|
|
3
|
+
// The read phase (files only — no commands, no git) and the all-or-nothing
|
|
4
|
+
// budget allocator, hoisted from final-review-service.ts (C wave 7).
|
|
5
|
+
// evidenceSourcesFor stays in the service module (guard C pins it there)
|
|
6
|
+
// and is imported from it — a one-directional edge.
|
|
7
|
+
import { readFileSync } from 'node:fs';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
import { GATE_SOURCE_FOR_DIMENSION } from './final-review-evidence-sources.js';
|
|
10
|
+
import { MAX_EVIDENCE_BYTES_TOTAL, REQUIRED_DIMENSIONS, assertFloorReservationAffordable, sourceUnit } from './final-review-evidence-budget.js';
|
|
11
|
+
import { evidenceSourcesFor } from './final-review-service.js';
|
|
12
|
+
/**
|
|
13
|
+
* ENOENT is "no such file"; every other errno is "the file is there and this
|
|
14
|
+
* read failed". Only the first means the source does not exist for this run.
|
|
15
|
+
*/
|
|
16
|
+
function classifyReadFailure(error) {
|
|
17
|
+
const code = error?.code;
|
|
18
|
+
return code === 'ENOENT' ? 'missing' : 'unreadable';
|
|
19
|
+
}
|
|
20
|
+
/** Pure read: no commands, no git, no test execution — files only. */
|
|
21
|
+
export function readEvidence(projectRoot, sessionId, rid, prePostDiffAvailable) {
|
|
22
|
+
const runtimeRoot = join(projectRoot, '.peaks', '_runtime', sessionId);
|
|
23
|
+
return evidenceSourcesFor(rid, prePostDiffAvailable).map((source) => {
|
|
24
|
+
// The canonical location first; an older one is tried only when the
|
|
25
|
+
// canonical file is genuinely ABSENT (see `legacySegments`). A file that
|
|
26
|
+
// is present but unreadable stops the walk — falling through to an older
|
|
27
|
+
// copy would silently swap the evidence this run reports.
|
|
28
|
+
const attempts = [
|
|
29
|
+
source.segments,
|
|
30
|
+
...(source.legacySegments !== undefined ? [source.legacySegments] : [])
|
|
31
|
+
];
|
|
32
|
+
// The path reported when nothing resolved stays the CANONICAL one, so the
|
|
33
|
+
// operator is sent to where the artifact belongs, not to its old home.
|
|
34
|
+
let resolved = source.segments;
|
|
35
|
+
let raw = null;
|
|
36
|
+
let error = '';
|
|
37
|
+
let read = 'missing';
|
|
38
|
+
for (const segments of attempts) {
|
|
39
|
+
try {
|
|
40
|
+
raw = readFileSync(join(runtimeRoot, ...segments));
|
|
41
|
+
read = 'ok';
|
|
42
|
+
resolved = segments;
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
read = classifyReadFailure(err);
|
|
47
|
+
error = err instanceof Error ? err.message : String(err);
|
|
48
|
+
// A file that exists but cannot be read IS this source's file, so it
|
|
49
|
+
// is also the path the report must name — walking on to an older copy
|
|
50
|
+
// would silently swap the evidence this run reports.
|
|
51
|
+
if (read === 'unreadable') {
|
|
52
|
+
resolved = segments;
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
source,
|
|
59
|
+
relativePath: ['.peaks', '_runtime', sessionId, ...resolved].join('/'),
|
|
60
|
+
absolutePath: join(runtimeRoot, ...resolved),
|
|
61
|
+
raw,
|
|
62
|
+
read,
|
|
63
|
+
error,
|
|
64
|
+
blank: raw === null || raw.toString('utf8').trim().length === 0
|
|
65
|
+
};
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* The one source per dimension that the budget promises to reach — the source
|
|
70
|
+
* that dimension's DELIVERY GATE depends on where there is one, and otherwise
|
|
71
|
+
* the first non-blank candidate that can supply it. A dimension with several
|
|
72
|
+
* candidates needs exactly one of them to survive, so naming it costs the other
|
|
73
|
+
* sources nothing they were not already losing.
|
|
74
|
+
*
|
|
75
|
+
* F1 — the gate sources used to be eligible for no reservation at all, because
|
|
76
|
+
* they are last in the order and a later source can never be a "first mention".
|
|
77
|
+
* Reserving for them is what makes the two gates' promises reachable rather
|
|
78
|
+
* than merely correct: a gate that always fires because its source never fits
|
|
79
|
+
* is noise, not a gate. A dimension with no gate entry keeps the old rule.
|
|
80
|
+
*
|
|
81
|
+
* A blank source is deliberately not a holder: a floor reserved for a file that
|
|
82
|
+
* carries no evidence is a floor spent on nothing.
|
|
83
|
+
*/
|
|
84
|
+
function floorHolders(candidates) {
|
|
85
|
+
const holders = new Map();
|
|
86
|
+
const covered = new Set();
|
|
87
|
+
const indexByKey = new Map();
|
|
88
|
+
candidates.forEach((candidate, index) => {
|
|
89
|
+
if (candidate.blank)
|
|
90
|
+
return;
|
|
91
|
+
if (!indexByKey.has(candidate.source.key))
|
|
92
|
+
indexByKey.set(candidate.source.key, index);
|
|
93
|
+
});
|
|
94
|
+
// Pass 1 — the source each delivery gate depends on, whether or not it is the
|
|
95
|
+
// first to mention its dimension.
|
|
96
|
+
for (const dimension of REQUIRED_DIMENSIONS) {
|
|
97
|
+
const gateKey = GATE_SOURCE_FOR_DIMENSION[dimension];
|
|
98
|
+
if (gateKey === undefined)
|
|
99
|
+
continue;
|
|
100
|
+
const index = indexByKey.get(gateKey);
|
|
101
|
+
// No such source this run (e.g. no baseline was computed): the dimension
|
|
102
|
+
// falls back to the first-mention rule below.
|
|
103
|
+
if (index === undefined)
|
|
104
|
+
continue;
|
|
105
|
+
covered.add(dimension);
|
|
106
|
+
if (!holders.has(index))
|
|
107
|
+
holders.set(index, dimension);
|
|
108
|
+
}
|
|
109
|
+
// Pass 2 — every dimension without a gate: the first source that mentions it.
|
|
110
|
+
candidates.forEach((candidate, index) => {
|
|
111
|
+
if (candidate.blank)
|
|
112
|
+
return;
|
|
113
|
+
for (const dimension of candidate.source.supports) {
|
|
114
|
+
if (covered.has(dimension))
|
|
115
|
+
continue;
|
|
116
|
+
covered.add(dimension);
|
|
117
|
+
if (!holders.has(index))
|
|
118
|
+
holders.set(index, dimension);
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
return holders;
|
|
122
|
+
}
|
|
123
|
+
function readFailureEvidence(base, candidate) {
|
|
124
|
+
// `read` is never `'ok'` here (it is set exactly when the read failed),
|
|
125
|
+
// and `'ok'` is not a status — the branch is what says which of the two
|
|
126
|
+
// failure facts this is.
|
|
127
|
+
const status = candidate.read === 'unreadable' ? 'unreadable' : 'missing';
|
|
128
|
+
return {
|
|
129
|
+
...base,
|
|
130
|
+
status,
|
|
131
|
+
totalBytes: 0,
|
|
132
|
+
includedBytes: 0,
|
|
133
|
+
content: '',
|
|
134
|
+
reason: candidate.read === 'missing'
|
|
135
|
+
? candidate.error
|
|
136
|
+
: `the file exists but could not be read (${candidate.error})`
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
function blankEvidence(base, raw) {
|
|
140
|
+
return {
|
|
141
|
+
...base,
|
|
142
|
+
status: 'empty',
|
|
143
|
+
totalBytes: raw.byteLength,
|
|
144
|
+
includedBytes: 0,
|
|
145
|
+
content: '',
|
|
146
|
+
reason: `file exists but contains no reviewable content (${raw.byteLength} bytes)`
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
function omittedEvidence(base, raw, ctx) {
|
|
150
|
+
const { allowance, budgetLeft, candidates, holders, pending, reservedElsewhere, unit, index } = ctx;
|
|
151
|
+
const waiting = [...pending]
|
|
152
|
+
.filter((holder) => holder !== index)
|
|
153
|
+
.map((holder) => `${holders.get(holder)} (source ${candidates[holder]?.source.key ?? '?'})`);
|
|
154
|
+
return {
|
|
155
|
+
...base,
|
|
156
|
+
status: 'omitted',
|
|
157
|
+
totalBytes: raw.byteLength,
|
|
158
|
+
includedBytes: 0,
|
|
159
|
+
content: '',
|
|
160
|
+
reason: reservedElsewhere > 0
|
|
161
|
+
? `${reservedElsewhere} bytes of the budget are reserved for dimension(s) ${waiting.join(', ')} — their only remaining evidence comes later in the source order; this source is inlined WHOLE or not at all and needs ${unit} bytes, while ${budgetLeft} were left (${allowance} after the reservation)`
|
|
162
|
+
: `total evidence budget (${MAX_EVIDENCE_BYTES_TOTAL} bytes) is exhausted — this source is inlined WHOLE or not at all and needs ${unit} bytes, ${budgetLeft} were left`
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
function reservedForPending(pending, units, index) {
|
|
166
|
+
return [...pending]
|
|
167
|
+
.filter((holder) => holder !== index)
|
|
168
|
+
.reduce((sum, holder) => sum + (units[holder] ?? 0), 0);
|
|
169
|
+
}
|
|
170
|
+
function foundEvidence(base, raw, unit, content) {
|
|
171
|
+
return {
|
|
172
|
+
...base,
|
|
173
|
+
status: 'found',
|
|
174
|
+
totalBytes: raw.byteLength,
|
|
175
|
+
includedBytes: unit,
|
|
176
|
+
content,
|
|
177
|
+
reason: ''
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
export function collectEvidence(projectRoot, sessionId, rid, prePostDiffAvailable) {
|
|
181
|
+
assertFloorReservationAffordable();
|
|
182
|
+
const candidates = readEvidence(projectRoot, sessionId, rid, prePostDiffAvailable);
|
|
183
|
+
const holders = floorHolders(candidates);
|
|
184
|
+
/** Every source's all-or-nothing unit, computed before any byte is spent. */
|
|
185
|
+
const units = candidates.map((candidate) => sourceUnit(candidate));
|
|
186
|
+
/** Holders that have not been served yet — the floors still owed. */
|
|
187
|
+
const pending = new Set(holders.keys());
|
|
188
|
+
const collected = [];
|
|
189
|
+
let budgetLeft = MAX_EVIDENCE_BYTES_TOTAL;
|
|
190
|
+
for (const [index, candidate] of candidates.entries()) {
|
|
191
|
+
const { source, relativePath, absolutePath, raw } = candidate;
|
|
192
|
+
const base = { source, relativePath, absolutePath };
|
|
193
|
+
if (raw === null) {
|
|
194
|
+
collected.push(readFailureEvidence(base, candidate));
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
if (candidate.blank) {
|
|
198
|
+
collected.push(blankEvidence(base, raw));
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
const unit = units[index] ?? 0;
|
|
202
|
+
// The floors still owed to dimensions whose holder has not been served are
|
|
203
|
+
// spent only on those holders: a source that needs no help cannot eat the
|
|
204
|
+
// last dimension's only chance at being reviewed. Reserved at the holder's
|
|
205
|
+
// own unit, because under all-or-nothing a partial slice serves nothing.
|
|
206
|
+
const reservedElsewhere = reservedForPending(pending, units, index);
|
|
207
|
+
const allowance = budgetLeft - reservedElsewhere;
|
|
208
|
+
// ALL-OR-NOTHING: this source is inlined as its whole unit or it is
|
|
209
|
+
// reported omitted. There is deliberately no third outcome — a partial
|
|
210
|
+
// slice would re-create the continuum F-BLOCK-1BYTE was found in.
|
|
211
|
+
if (allowance < unit) {
|
|
212
|
+
collected.push(omittedEvidence(base, raw, {
|
|
213
|
+
allowance,
|
|
214
|
+
budgetLeft,
|
|
215
|
+
candidates,
|
|
216
|
+
holders,
|
|
217
|
+
pending,
|
|
218
|
+
reservedElsewhere,
|
|
219
|
+
unit,
|
|
220
|
+
index
|
|
221
|
+
}));
|
|
222
|
+
continue;
|
|
223
|
+
}
|
|
224
|
+
const content = raw.subarray(0, unit).toString('utf8');
|
|
225
|
+
budgetLeft -= unit;
|
|
226
|
+
pending.delete(index);
|
|
227
|
+
collected.push(foundEvidence(base, raw, unit, content));
|
|
228
|
+
}
|
|
229
|
+
return collected;
|
|
230
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import type { DimensionKind } from './final-review-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* What DELIVERED means for one source — the module's ONE delivery definition,
|
|
4
|
+
* declared per source and read in exactly one place (`isDelivered`).
|
|
5
|
+
*
|
|
6
|
+
* whole the reviewer must have received the whole document. A
|
|
7
|
+
* truncated slice is not a weaker version of a document, it is a
|
|
8
|
+
* DIFFERENT document, and the conclusion may be in the part that
|
|
9
|
+
* was cut — which is precisely the state `found` used to call
|
|
10
|
+
* "delivered".
|
|
11
|
+
* conclusion the reviewer must have received the literal that IS the
|
|
12
|
+
* document's conclusion. Used where the producer publishes one
|
|
13
|
+
* (the pre/post diff opens with its `VERDICT:` line).
|
|
14
|
+
*
|
|
15
|
+
* `whole` is the rule wherever the producer is another role's skill and
|
|
16
|
+
* publishes no conclusion literal: the module may not GUESS where a document's
|
|
17
|
+
* conclusion lives. The two are the same judgement — "did the reviewer receive
|
|
18
|
+
* the conclusion" — checked at the only place the module can check it.
|
|
19
|
+
*/
|
|
20
|
+
type DeliveryRule = {
|
|
21
|
+
readonly kind: 'whole';
|
|
22
|
+
} | {
|
|
23
|
+
readonly kind: 'conclusion';
|
|
24
|
+
readonly marker: string;
|
|
25
|
+
};
|
|
26
|
+
export interface EvidenceSource {
|
|
27
|
+
/** Stable id quoted by the model in its citations. */
|
|
28
|
+
readonly key: string;
|
|
29
|
+
readonly label: string;
|
|
30
|
+
/** Path segments under `.peaks/_runtime/<sessionId>/`. */
|
|
31
|
+
readonly segments: readonly string[];
|
|
32
|
+
/**
|
|
33
|
+
* An older location of the SAME artifact, tried only when `segments` is not
|
|
34
|
+
* on disk. Slice `2026-09-14-prd-capsule-rid-scoping` moved the PRD handoff
|
|
35
|
+
* capsule to `prd/handoff-<rid>.md`; sessions written before it hold only
|
|
36
|
+
* the bare `prd/handoff.md`, and this module's delivery gate keys on that
|
|
37
|
+
* source — so a source that goes missing does not fail the gate, it stops
|
|
38
|
+
* it (`enforceScopeContractDelivery` returns early on `missing`).
|
|
39
|
+
*/
|
|
40
|
+
readonly legacySegments?: readonly string[];
|
|
41
|
+
/** Dimensions this source can supply evidence for. */
|
|
42
|
+
readonly supports: readonly DimensionKind[];
|
|
43
|
+
/** What DELIVERED means for this source. See `isDelivered()` — every source
|
|
44
|
+
* must declare one, and the declaration is the only thing the module's
|
|
45
|
+
* delivery judgement reads. */
|
|
46
|
+
readonly delivery: DeliveryRule;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The one source whose ABSENCE from the delivered prompt is not merely a
|
|
50
|
+
* missing file: it is the only source in the set that is a before/after
|
|
51
|
+
* comparison, and `existing-functionality-intact` is defined by it. Named once
|
|
52
|
+
* so the source builder and the delivery check cannot drift apart.
|
|
53
|
+
*/
|
|
54
|
+
export declare const PRE_POST_DIFF_SOURCE_KEY = "final-review-pre-post-diff";
|
|
55
|
+
/**
|
|
56
|
+
* The approved-scope contract. Also named once: it is the source
|
|
57
|
+
* `functional-completeness` is defined against and the one its delivery gate
|
|
58
|
+
* keys on.
|
|
59
|
+
*/
|
|
60
|
+
export declare const SCOPE_CONTRACT_SOURCE_KEY = "prd-handoff";
|
|
61
|
+
/**
|
|
62
|
+
* The source a DIMENSION'S DELIVERY GATE depends on — i.e. the source the
|
|
63
|
+
* dimension's `pass` may not outlive. `floorHolders` reserves that source's
|
|
64
|
+
* unit, and this table is why the reservation protects the RIGHT source.
|
|
65
|
+
*
|
|
66
|
+
* F1 — the floor used to go to the FIRST source that merely *mentioned* the
|
|
67
|
+
* dimension (`qa-test-report`, index 0, and `rd/tech-doc`, index 6), while both
|
|
68
|
+
* delivery gates keyed on sources at the very END of the order
|
|
69
|
+
* (`prd-handoff`, index 8, and the appended pre/post diff, index 9) that no
|
|
70
|
+
* reservation covered. On this repo's own run the budget was exhausted at
|
|
71
|
+
* source 4, so BOTH gate sources were omitted on every run — necessarily, not
|
|
72
|
+
* accidentally — while 8,192 bytes of floor were spent on `rd/tech-doc`, the
|
|
73
|
+
* one source prompt rule 6 declares insufficient for that same dimension.
|
|
74
|
+
*
|
|
75
|
+
* measured floor reservation after the fix:
|
|
76
|
+
* prd/handoff.md 8,164 + api-diff.txt 4,713 + qa/test-reports 9,492
|
|
77
|
+
* = 22,369 <= MAX_EVIDENCE_BYTES_TOTAL 40,960
|
|
78
|
+
*
|
|
79
|
+
* so all three holders are served WHOLE and the two gate-backed dimensions
|
|
80
|
+
* become deliverable again. A dimension absent from this table has no delivery
|
|
81
|
+
* gate, and its floor stays with the earliest source that supports it.
|
|
82
|
+
*/
|
|
83
|
+
export declare const GATE_SOURCE_FOR_DIMENSION: Partial<Record<DimensionKind, string>>;
|
|
84
|
+
/**
|
|
85
|
+
* `found` is the only status that carries bytes. The other four exist so the
|
|
86
|
+
* prompt can name *why* a source carries nothing: an absent file, one that
|
|
87
|
+
* exists but is empty, one that exists but could not be READ, and one that did
|
|
88
|
+
* not fit the byte budget are four different facts, and the model is told all
|
|
89
|
+
* four explicitly.
|
|
90
|
+
*
|
|
91
|
+
* F4 — `missing` and `unreadable` used to be one status. `readFileSync`'s catch
|
|
92
|
+
* collapsed EACCES / EBUSY / EPERM into the same `raw === null` as ENOENT, so a
|
|
93
|
+
* contract file that EXISTS and could not be opened was reported to the
|
|
94
|
+
* reviewer — and, worse, to the delivery gate — as "there was no PRD phase".
|
|
95
|
+
* Those are opposite facts about a run: one says "nothing to deliver", the
|
|
96
|
+
* other says "there is something to deliver and it did not arrive".
|
|
97
|
+
*/
|
|
98
|
+
export type EvidenceStatus = 'found' | 'empty' | 'missing' | 'unreadable' | 'omitted';
|
|
99
|
+
export interface CollectedEvidence {
|
|
100
|
+
readonly source: EvidenceSource;
|
|
101
|
+
readonly relativePath: string;
|
|
102
|
+
readonly absolutePath: string;
|
|
103
|
+
readonly status: EvidenceStatus;
|
|
104
|
+
/** Full size on disk (0 when nothing could be read). */
|
|
105
|
+
readonly totalBytes: number;
|
|
106
|
+
/** Bytes actually inlined into the prompt. */
|
|
107
|
+
readonly includedBytes: number;
|
|
108
|
+
readonly content: string;
|
|
109
|
+
/** Why this source carries no evidence (non-`found` statuses only). */
|
|
110
|
+
readonly reason: string;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* A source plus the bytes it turned out to hold. Reading and spending are two
|
|
114
|
+
* separate phases because the allocator has to know which sources are actually
|
|
115
|
+
* readable BEFORE it can promise any of them a byte: a floor reserved for a file
|
|
116
|
+
* that does not exist is a floor spent on nothing.
|
|
117
|
+
*/
|
|
118
|
+
export interface EvidenceCandidate {
|
|
119
|
+
readonly source: EvidenceSource;
|
|
120
|
+
readonly relativePath: string;
|
|
121
|
+
readonly absolutePath: string;
|
|
122
|
+
/** File bytes, or `null` when the file could not be read. */
|
|
123
|
+
readonly raw: Buffer | null;
|
|
124
|
+
/**
|
|
125
|
+
* Why there are no bytes: `'ok'` when `raw` is set, otherwise the two facts
|
|
126
|
+
* F4 requires the module to keep apart — `'missing'` is ENOENT (there is no
|
|
127
|
+
* such file for this run), `'unreadable'` is anything else (the file is
|
|
128
|
+
* there and this process could not read it).
|
|
129
|
+
*/
|
|
130
|
+
readonly read: 'ok' | 'missing' | 'unreadable';
|
|
131
|
+
/** Read failure message (`raw === null` only). */
|
|
132
|
+
readonly error: string;
|
|
133
|
+
/** A file whose content is all whitespace carries no evidence whichever
|
|
134
|
+
* slice of it the budget would have paid for. */
|
|
135
|
+
readonly blank: boolean;
|
|
136
|
+
}
|
|
137
|
+
export declare function baseEvidenceSources(rid: string): EvidenceSource[];
|
|
138
|
+
export {};
|