peaks-loop 4.0.53 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +85 -0
- package/README-en.md +16 -1
- package/README.md +15 -1
- package/config/eslint/.peaks-rules.cjs +158 -13
- package/config/eslint/tsconfig.lint.json +47 -0
- package/dist/cli/cli-envelope.d.ts +114 -0
- package/dist/cli/cli-envelope.js +85 -0
- package/dist/cli/cli-helpers.d.ts +1 -1
- package/dist/cli/cli-helpers.js +8 -4
- package/dist/cli/commands/_cli-error-envelope.js +1 -1
- package/dist/cli/commands/_register.js +85 -38
- package/dist/cli/commands/_super.js +40 -7
- package/dist/cli/commands/adapter-commands-s2a.js +8 -7
- package/dist/cli/commands/adapter-commands.d.ts +2 -2
- package/dist/cli/commands/adapter-commands.js +7 -8
- package/dist/cli/commands/api-diff-commands.js +5 -4
- package/dist/cli/commands/asset-commands.d.ts +2 -2
- package/dist/cli/commands/asset-commands.js +135 -132
- package/dist/cli/commands/audit-commands.d.ts +1 -1
- package/dist/cli/commands/audit-commands.js +75 -32
- package/dist/cli/commands/autonomous-swarm-commands.d.ts +1 -1
- package/dist/cli/commands/autonomous-swarm-commands.js +14 -8
- package/dist/cli/commands/baseline-commands.js +34 -9
- package/dist/cli/commands/bee-commands.d.ts +1 -1
- package/dist/cli/commands/bee-commands.js +18 -21
- package/dist/cli/commands/best-practice-scan-command.js +6 -34
- package/dist/cli/commands/best-practice-scan-helpers.d.ts +12 -0
- package/dist/cli/commands/best-practice-scan-helpers.js +37 -0
- package/dist/cli/commands/capability-commands.d.ts +1 -1
- package/dist/cli/commands/capability-commands.js +14 -4
- package/dist/cli/commands/capability-worker-config-sc-commands.d.ts +1 -1
- package/dist/cli/commands/changeset-commands.js +21 -18
- package/dist/cli/commands/code-gate-command.js +9 -2
- package/dist/cli/commands/code-job-shape-commands-read-job-shape.d.ts +15 -0
- package/dist/cli/commands/code-job-shape-commands-read-job-shape.js +70 -0
- package/dist/cli/commands/code-job-shape-commands.js +21 -45
- package/dist/cli/commands/code-mode-gate-commands.d.ts +15 -1
- package/dist/cli/commands/code-mode-gate-commands.js +19 -199
- package/dist/cli/commands/code-mode-gate-plan-command.d.ts +14 -0
- package/dist/cli/commands/code-mode-gate-plan-command.js +23 -0
- package/dist/cli/commands/code-mode-gate-should-pause-command.d.ts +24 -0
- package/dist/cli/commands/code-mode-gate-should-pause-command.js +137 -0
- package/dist/cli/commands/code-mode-gate-should-pause-envelope.d.ts +59 -0
- package/dist/cli/commands/code-mode-gate-should-pause-envelope.js +144 -0
- package/dist/cli/commands/code-orchestrator-can-do.js +4 -4
- package/dist/cli/commands/code-review-commands.js +18 -3
- package/dist/cli/commands/code-run-command.js +44 -7
- package/dist/cli/commands/code-runtime-commands.d.ts +17 -0
- package/dist/cli/commands/code-runtime-commands.js +105 -73
- package/dist/cli/commands/codegraph-commands.js +175 -11
- package/dist/cli/commands/codegraph-status-command.js +6 -2
- package/dist/cli/commands/compact-command.js +52 -26
- package/dist/cli/commands/complexity-commands.js +6 -7
- package/dist/cli/commands/config-commands.d.ts +1 -1
- package/dist/cli/commands/config-commands.js +33 -9
- package/dist/cli/commands/container-commands.js +39 -15
- package/dist/cli/commands/context-commands.d.ts +1 -1
- package/dist/cli/commands/context-commands.js +40 -13
- package/dist/cli/commands/core/artifacts-command.js +11 -3
- package/dist/cli/commands/core/binding-commands.js +9 -6
- package/dist/cli/commands/core/doctor-command.js +7 -4
- package/dist/cli/commands/core/memory-command.js +81 -22
- package/dist/cli/commands/core/proxy-command.js +3 -1
- package/dist/cli/commands/core/session-command.js +16 -8
- package/dist/cli/commands/core/skill-command.js +31 -16
- package/dist/cli/commands/core/standards-command.js +55 -13
- package/dist/cli/commands/cron-commands-actions.d.ts +43 -0
- package/dist/cli/commands/cron-commands-actions.js +128 -0
- package/dist/cli/commands/cron-commands-schedule.d.ts +86 -0
- package/dist/cli/commands/cron-commands-schedule.js +151 -0
- package/dist/cli/commands/cron-commands.d.ts +35 -32
- package/dist/cli/commands/cron-commands.js +167 -211
- package/dist/cli/commands/cron-scheduler-commands.js +40 -20
- package/dist/cli/commands/cron-scheduler-persist.d.ts +110 -0
- package/dist/cli/commands/cron-scheduler-persist.js +171 -0
- package/dist/cli/commands/dashboard-long-run.js +45 -14
- package/dist/cli/commands/dashboard-summary.js +15 -5
- package/dist/cli/commands/dispatch-commands.js +69 -34
- package/dist/cli/commands/dispatch-from-dag.js +9 -10
- package/dist/cli/commands/doc-commands.js +8 -9
- package/dist/cli/commands/doctor/invoke-from-code.js +1 -1
- package/dist/cli/commands/e2e-verify-env.d.ts +19 -0
- package/dist/cli/commands/e2e-verify-env.js +19 -0
- package/dist/cli/commands/e2e-verify.d.ts +3 -14
- package/dist/cli/commands/e2e-verify.js +49 -29
- package/dist/cli/commands/ecc-commands.d.ts +1 -1
- package/dist/cli/commands/ecc-commands.js +8 -17
- package/dist/cli/commands/evidence-commands.js +10 -6
- package/dist/cli/commands/evolution-commands.d.ts +2 -2
- package/dist/cli/commands/evolution-commands.js +109 -115
- package/dist/cli/commands/feedback-commands-helpers.d.ts +22 -0
- package/dist/cli/commands/feedback-commands-helpers.js +33 -0
- package/dist/cli/commands/feedback-commands.js +15 -38
- package/dist/cli/commands/final-review-commands.d.ts +1 -1
- package/dist/cli/commands/final-review-commands.js +24 -22
- package/dist/cli/commands/fixture-commands.d.ts +1 -1
- package/dist/cli/commands/fixture-commands.js +17 -6
- package/dist/cli/commands/fork-commands-sync-verify.d.ts +12 -0
- package/dist/cli/commands/fork-commands-sync-verify.js +72 -0
- package/dist/cli/commands/fork-commands.js +19 -51
- package/dist/cli/commands/fresh-context-commands.js +3 -1
- package/dist/cli/commands/gate-commands-enforce.d.ts +82 -0
- package/dist/cli/commands/gate-commands-enforce.js +210 -0
- package/dist/cli/commands/gate-commands.d.ts +1 -1
- package/dist/cli/commands/gate-commands.js +85 -205
- package/dist/cli/commands/governance-classify-contract-commands.d.ts +1 -1
- package/dist/cli/commands/governance-classify-contract-commands.js +28 -17
- package/dist/cli/commands/heartbeat-commands-action.d.ts +7 -0
- package/dist/cli/commands/heartbeat-commands-action.js +192 -0
- package/dist/cli/commands/heartbeat-commands-validation.d.ts +57 -0
- package/dist/cli/commands/heartbeat-commands-validation.js +120 -0
- package/dist/cli/commands/heartbeat-commands.d.ts +27 -6
- package/dist/cli/commands/heartbeat-commands.js +19 -198
- package/dist/cli/commands/hook-handle.d.ts +1 -1
- package/dist/cli/commands/hook-handle.js +46 -13
- package/dist/cli/commands/hooks-commands.d.ts +1 -1
- package/dist/cli/commands/hooks-commands.js +18 -6
- package/dist/cli/commands/ide-commands.d.ts +1 -1
- package/dist/cli/commands/ide-commands.js +5 -3
- package/dist/cli/commands/impact-commands.js +8 -2
- package/dist/cli/commands/job-add-slice-command.d.ts +43 -0
- package/dist/cli/commands/job-add-slice-command.js +151 -0
- package/dist/cli/commands/job-commands.d.ts +64 -0
- package/dist/cli/commands/job-commands.js +134 -63
- package/dist/cli/commands/lease-metrics-commands-support.d.ts +73 -0
- package/dist/cli/commands/lease-metrics-commands-support.js +67 -0
- package/dist/cli/commands/lease-metrics-commands.d.ts +3 -44
- package/dist/cli/commands/lease-metrics-commands.js +21 -61
- package/dist/cli/commands/lease-stats-commands.d.ts +1 -1
- package/dist/cli/commands/lease-stats-commands.js +9 -6
- package/dist/cli/commands/lint-commands.d.ts +9 -3
- package/dist/cli/commands/lint-commands.js +15 -8
- package/dist/cli/commands/log-commands.d.ts +1 -1
- package/dist/cli/commands/log-commands.js +8 -6
- package/dist/cli/commands/loop-commands.d.ts +1 -1
- package/dist/cli/commands/loop-commands.js +50 -50
- package/dist/cli/commands/loop-eval-commands.d.ts +1 -1
- package/dist/cli/commands/loop-eval-commands.js +101 -30
- package/dist/cli/commands/memory-commands.js +21 -13
- package/dist/cli/commands/migrate-1-4-1-command.js +1 -1
- package/dist/cli/commands/migrate-v2-10-to-v2-11-command.js +2 -2
- package/dist/cli/commands/mut-commands-helpers.d.ts +30 -0
- package/dist/cli/commands/mut-commands-helpers.js +43 -0
- package/dist/cli/commands/mut-commands.js +16 -58
- package/dist/cli/commands/observability-commands-queries.d.ts +37 -0
- package/dist/cli/commands/observability-commands-queries.js +113 -0
- package/dist/cli/commands/observability-commands.d.ts +1 -1
- package/dist/cli/commands/observability-commands.js +7 -92
- package/dist/cli/commands/openspec-commands.d.ts +1 -1
- package/dist/cli/commands/openspec-commands.js +20 -8
- package/dist/cli/commands/outer-cache-commands.js +18 -7
- package/dist/cli/commands/perf-audit-commands.d.ts +1 -1
- package/dist/cli/commands/perf-audit-commands.js +12 -7
- package/dist/cli/commands/perf-commands.d.ts +1 -1
- package/dist/cli/commands/perf-commands.js +5 -5
- package/dist/cli/commands/playwright-commands.d.ts +1 -1
- package/dist/cli/commands/playwright-commands.js +20 -8
- package/dist/cli/commands/polyrepo-commands.js +21 -19
- package/dist/cli/commands/prd-blocks-commands.js +1 -3
- package/dist/cli/commands/prd-commands.d.ts +1 -1
- package/dist/cli/commands/prd-commands.js +21 -2
- package/dist/cli/commands/preferences-commands.js +13 -12
- package/dist/cli/commands/primer-command.js +5 -5
- package/dist/cli/commands/project-commands.d.ts +1 -1
- package/dist/cli/commands/project-commands.js +33 -9
- package/dist/cli/commands/qa-business-review-commands.js +16 -12
- package/dist/cli/commands/qa-commands.d.ts +1 -1
- package/dist/cli/commands/qa-commands.js +3 -5
- package/dist/cli/commands/release-commands.d.ts +3 -1
- package/dist/cli/commands/release-commands.js +33 -22
- package/dist/cli/commands/request-commands.js +47 -30
- package/dist/cli/commands/request-format-helpers.js +1 -1
- package/dist/cli/commands/retrospective-commands.d.ts +18 -11
- package/dist/cli/commands/retrospective-commands.js +24 -173
- package/dist/cli/commands/retrospective-index-command.d.ts +26 -0
- package/dist/cli/commands/retrospective-index-command.js +99 -0
- package/dist/cli/commands/retrospective-project-root.d.ts +9 -0
- package/dist/cli/commands/retrospective-project-root.js +15 -0
- package/dist/cli/commands/retrospective-search-command.d.ts +27 -0
- package/dist/cli/commands/retrospective-search-command.js +97 -0
- package/dist/cli/commands/retrospective-show-command.d.ts +23 -0
- package/dist/cli/commands/retrospective-show-command.js +80 -0
- package/dist/cli/commands/reviewer-commands.d.ts +1 -1
- package/dist/cli/commands/role-commands.js +14 -9
- package/dist/cli/commands/runtime-commands.js +14 -7
- package/dist/cli/commands/sc-commands.d.ts +1 -1
- package/dist/cli/commands/sc-commands.js +39 -6
- package/dist/cli/commands/scan-commands.js +36 -13
- package/dist/cli/commands/security-audit-commands.d.ts +1 -1
- package/dist/cli/commands/security-audit-commands.js +12 -7
- package/dist/cli/commands/sediment-commands.d.ts +2 -2
- package/dist/cli/commands/sediment-commands.js +146 -139
- package/dist/cli/commands/session-24h-mode.js +15 -2
- package/dist/cli/commands/session-checkpoint-command.js +1 -1
- package/dist/cli/commands/session-migrate-skill-name.js +1 -1
- package/dist/cli/commands/shadcn-commands.d.ts +1 -1
- package/dist/cli/commands/shadcn-commands.js +3 -1
- package/dist/cli/commands/share-commands.js +38 -39
- package/dist/cli/commands/skill-conformance-commands.d.ts +1 -1
- package/dist/cli/commands/skill-conformance-commands.js +1 -1
- package/dist/cli/commands/skill-loop-engineering-readiness-commands.js +16 -17
- package/dist/cli/commands/skill-visibility.js +2 -2
- package/dist/cli/commands/slice-commands.d.ts +1 -1
- package/dist/cli/commands/slice-commands.js +36 -12
- package/dist/cli/commands/slice-integrate-commands.js +6 -7
- package/dist/cli/commands/slice-review-commands-helpers.d.ts +26 -0
- package/dist/cli/commands/slice-review-commands-helpers.js +26 -0
- package/dist/cli/commands/slice-review-commands.js +16 -24
- package/dist/cli/commands/smoke-commands-add-path.d.ts +14 -0
- package/dist/cli/commands/smoke-commands-add-path.js +39 -0
- package/dist/cli/commands/smoke-commands-define.d.ts +18 -0
- package/dist/cli/commands/smoke-commands-define.js +97 -0
- package/dist/cli/commands/smoke-commands-run.d.ts +18 -0
- package/dist/cli/commands/smoke-commands-run.js +119 -0
- package/dist/cli/commands/smoke-commands.d.ts +10 -1
- package/dist/cli/commands/smoke-commands.js +17 -179
- package/dist/cli/commands/sop-commands.d.ts +1 -1
- package/dist/cli/commands/sop-commands.js +38 -10
- package/dist/cli/commands/statusline-commands.d.ts +1 -1
- package/dist/cli/commands/statusline-commands.js +21 -10
- package/dist/cli/commands/sub-agent/detached.js +3 -3
- package/dist/cli/commands/sub-agent-dispatch-guard.d.ts +1 -1
- package/dist/cli/commands/sub-agent-shared.d.ts +23 -0
- package/dist/cli/commands/sub-agent-shared.js +40 -1
- package/dist/cli/commands/sub-agent-shutdown-commands.js +17 -9
- package/dist/cli/commands/swarm-commands.d.ts +1 -1
- package/dist/cli/commands/swarm-commands.js +13 -6
- package/dist/cli/commands/tech-commands-helpers.d.ts +37 -0
- package/dist/cli/commands/tech-commands-helpers.js +24 -0
- package/dist/cli/commands/tech-commands.d.ts +2 -29
- package/dist/cli/commands/tech-commands.js +15 -28
- package/dist/cli/commands/test-commands.js +27 -7
- package/dist/cli/commands/upgrade-commands.d.ts +1 -1
- package/dist/cli/commands/user-touchpoint-commands.js +1 -3
- package/dist/cli/commands/verdict-aggregate-command.d.ts +1 -1
- package/dist/cli/commands/verdict-aggregate-command.js +20 -7
- package/dist/cli/commands/vm-commands.js +48 -19
- package/dist/cli/commands/wave-plan-commands.js +5 -2
- package/dist/cli/commands/web-commands.js +14 -4
- package/dist/cli/commands/web-lifecycle-commands.js +5 -3
- package/dist/cli/commands/workflow-commands.d.ts +1 -1
- package/dist/cli/commands/workflow-commands.js +64 -29
- package/dist/cli/commands/workflow-lifecycle-commands.js +19 -17
- package/dist/cli/commands/workflow-plan-commands-actions.d.ts +20 -0
- package/dist/cli/commands/workflow-plan-commands-actions.js +115 -0
- package/dist/cli/commands/workflow-plan-commands-session.d.ts +17 -0
- package/dist/cli/commands/workflow-plan-commands-session.js +59 -0
- package/dist/cli/commands/workflow-plan-commands.d.ts +10 -21
- package/dist/cli/commands/workflow-plan-commands.js +15 -141
- package/dist/cli/commands/workspace/clean-command.js +4 -1
- package/dist/cli/commands/workspace/helpers.js +2 -1
- package/dist/cli/commands/workspace/init-command.js +80 -20
- package/dist/cli/commands/workspace/reconcile-command.js +3 -1
- package/dist/cli/commands/workspace-commands.d.ts +1 -1
- package/dist/cli/commands/workspace-commands.js +1 -1
- package/dist/cli/commands/worktree-auth-commands.d.ts +1 -1
- package/dist/cli/commands/worktree-auth-commands.js +16 -169
- package/dist/cli/commands/worktree-auth-grant-command.d.ts +14 -0
- package/dist/cli/commands/worktree-auth-grant-command.js +118 -0
- package/dist/cli/commands/worktree-auth-manage-commands.d.ts +17 -0
- package/dist/cli/commands/worktree-auth-manage-commands.js +128 -0
- package/dist/cli/commands/worktree-lease-commands.d.ts +1 -1
- package/dist/cli/commands/worktree-lease-commands.js +65 -37
- package/dist/cli/index.js +6 -2
- package/dist/cli/program.js +6 -3
- package/dist/hooks/pre-tool-use-sub-agent.js +1 -6
- package/dist/reporters/bdd-reporter.js +9 -3
- package/dist/services/24h-mode/auto-engage.d.ts +19 -0
- package/dist/services/24h-mode/auto-engage.js +35 -0
- package/dist/services/24h-mode/decider.js +5 -1
- package/dist/services/24h-mode/store.js +4 -2
- package/dist/services/adapter/adapter-registry.js +20 -8
- package/dist/services/adapter/adapter.d.ts +2 -2
- package/dist/services/adapter/auto-adapter.d.ts +2 -2
- package/dist/services/adapter/auto-adapter.js +1 -1
- package/dist/services/adapter/claude-adapter.d.ts +1 -1
- package/dist/services/adapter/claude-adapter.js +8 -8
- package/dist/services/adapter/codex-adapter.d.ts +2 -2
- package/dist/services/adapter/codex-adapter.js +20 -8
- package/dist/services/adapter/copilot-adapter.d.ts +2 -2
- package/dist/services/adapter/copilot-adapter.js +20 -8
- package/dist/services/artifacts/artifact-prerequisites.js +44 -8
- package/dist/services/artifacts/artifact-service.js +3 -1
- package/dist/services/artifacts/artifact-template-bodies.d.ts +12 -0
- package/dist/services/artifacts/artifact-template-bodies.js +165 -0
- package/dist/services/artifacts/artifact-templates.js +26 -168
- package/dist/services/artifacts/request-artifact-service.js +14 -7
- package/dist/services/artifacts/request-artifact-state-helpers.d.ts +3 -2
- package/dist/services/artifacts/request-artifact-state-helpers.js +3 -5
- package/dist/services/artifacts/workspace-artifact-helpers.d.ts +28 -0
- package/dist/services/artifacts/workspace-artifact-helpers.js +54 -0
- package/dist/services/artifacts/workspace-service.d.ts +3 -22
- package/dist/services/artifacts/workspace-service.js +10 -60
- package/dist/services/audit/artifact-writer.js +21 -21
- package/dist/services/audit/audit-goal-service.js +2 -2
- package/dist/services/audit/backing-detector.js +7 -4
- package/dist/services/audit/classifier.js +3 -3
- package/dist/services/audit/decision-writer.js +13 -9
- package/dist/services/audit/enforcer-liveness.js +1 -1
- package/dist/services/audit/enforcers/active-skill-resolver.js +15 -7
- package/dist/services/audit/enforcers/design-draft-confirm.js +4 -4
- package/dist/services/audit/enforcers/lint-audit-regression.js +10 -5
- package/dist/services/audit/enforcers/lint-bee-runtime-contract.js +16 -8
- package/dist/services/audit/enforcers/lint-catalog-governance.js +8 -4
- package/dist/services/audit/enforcers/lint-output-style.js +4 -2
- package/dist/services/audit/enforcers/lint-peaks-code-runtime.js +8 -3
- package/dist/services/audit/enforcers/lint-peaks-skill-runtime.js +8 -3
- package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.js +20 -20
- package/dist/services/audit/enforcers/lint-prd-artifact-handoff.js +5 -5
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.d.ts +1 -1
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.js +5 -5
- package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.js +10 -10
- package/dist/services/audit/enforcers/lint-rd-handoff-coverage.js +10 -8
- package/dist/services/audit/enforcers/lint-reference-shape.js +50 -18
- package/dist/services/audit/enforcers/lint-skill-presence-mandatory.js +5 -5
- package/dist/services/audit/enforcers/lint-style.js +44 -11
- package/dist/services/audit/enforcers/lint-workflow-shape.js +4 -2
- package/dist/services/audit/enforcers/login-gate.js +2 -6
- package/dist/services/audit/enforcers/mock-placement.js +2 -2
- package/dist/services/audit/enforcers/no-root-pollution.js +38 -9
- package/dist/services/audit/enforcers/pre-rd-scan.js +1 -1
- package/dist/services/audit/enforcers/prototype-fidelity.js +1 -1
- package/dist/services/audit/enforcers/resume-detection.js +5 -4
- package/dist/services/audit/prose-ratio-calculator.js +1 -1
- package/dist/services/audit/red-line-catalog-p2-a-bee-runtime.d.ts +39 -0
- package/dist/services/audit/red-line-catalog-p2-a-bee-runtime.js +205 -0
- package/dist/services/audit/red-line-catalog-p2-a-lint-style.d.ts +52 -0
- package/dist/services/audit/red-line-catalog-p2-a-lint-style.js +205 -0
- package/dist/services/audit/red-line-catalog-p2-a.js +3 -374
- package/dist/services/audit/red-line-catalog-p2-b.js +26 -26
- package/dist/services/audit/red-line-catalog.js +26 -38
- package/dist/services/audit/red-lines-service.js +64 -49
- package/dist/services/audit/scanners/openspec-scanner.js +2 -2
- package/dist/services/audit/scanners/rules-tree-scanner.js +2 -2
- package/dist/services/audit/scanners/skills-tree-scanner.js +2 -2
- package/dist/services/audit/static-service.js +3 -3
- package/dist/services/audit-independent/index.d.ts +2 -2
- package/dist/services/audit-independent/index.js +2 -2
- package/dist/services/audit-independent/perf-audit-service.js +19 -8
- package/dist/services/audit-independent/security-audit-service.js +31 -16
- package/dist/services/autonomous-swarm/autonomous-swarm-service.js +75 -46
- package/dist/services/best-practice/output-formatter.js +7 -1
- package/dist/services/capability-audit-service/cross-check.js +11 -5
- package/dist/services/capability-audit-service/runner.js +15 -7
- package/dist/services/capability-baseline/store.js +16 -4
- package/dist/services/capability-baseline/types.js +15 -3
- package/dist/services/capability-baseline/validator.js +43 -7
- package/dist/services/capability-guard-runner/contracts/J02.js +36 -6
- package/dist/services/capability-guard-runner/contracts/J03.js +20 -11
- package/dist/services/capability-guard-runner/contracts/J04.js +24 -15
- package/dist/services/capability-guard-runner/contracts/J05.js +26 -10
- package/dist/services/capability-guard-runner/contracts/J07.js +8 -2
- package/dist/services/capability-guard-runner/contracts/J08.js +22 -5
- package/dist/services/capability-guard-runner/contracts/J10.js +6 -2
- package/dist/services/capability-guard-runner/contracts/J11.d.ts +5 -0
- package/dist/services/capability-guard-runner/contracts/J11.js +14 -2
- package/dist/services/capability-guard-runner/contracts/J12.js +12 -3
- package/dist/services/capability-guard-runner/diff.js +1 -5
- package/dist/services/changeset/changeset-check-service.js +1 -3
- package/dist/services/classify/classify-service.js +20 -8
- package/dist/services/classify/classify-types.js +22 -9
- package/dist/services/code/auto-compact-lifecycle.js +62 -39
- package/dist/services/code/auto-compact-modes.js +2 -2
- package/dist/services/code/auto-compact-orchestrator.js +14 -9
- package/dist/services/code/batch-heartbeat-poller.d.ts +10 -0
- package/dist/services/code/batch-heartbeat-poller.js +17 -1
- package/dist/services/code/compact-event-settle-types.d.ts +80 -0
- package/dist/services/code/compact-event-settle-types.js +20 -0
- package/dist/services/code/compact-event-settle.d.ts +3 -68
- package/dist/services/code/compact-event-settle.js +14 -10
- package/dist/services/code/dag-orchestrator.js +32 -26
- package/dist/services/code/job-shape-decision.js +3 -1
- package/dist/services/code/mode-gate-types.d.ts +57 -0
- package/dist/services/code/mode-gate-types.js +67 -0
- package/dist/services/code/mode-gate.d.ts +4 -58
- package/dist/services/code/mode-gate.js +24 -60
- package/dist/services/code/orchestrator-can-do-advisories.d.ts +30 -0
- package/dist/services/code/orchestrator-can-do-advisories.js +81 -0
- package/dist/services/code/orchestrator-can-do-probes.d.ts +30 -0
- package/dist/services/code/orchestrator-can-do-probes.js +77 -0
- package/dist/services/code/orchestrator-can-do.d.ts +11 -22
- package/dist/services/code/orchestrator-can-do.js +37 -137
- package/dist/services/code/post-compact-checkpoint.d.ts +28 -0
- package/dist/services/code/post-compact-checkpoint.js +57 -0
- package/dist/services/code/post-compact-detector.js +16 -48
- package/dist/services/code/step-08-gate.d.ts +4 -3
- package/dist/services/code/step-08-gate.js +21 -9
- package/dist/services/code-review/ecc-bridge.js +23 -23
- package/dist/services/codegraph/codegraph-autorefresh.js +56 -39
- package/dist/services/codegraph/codegraph-config-repair-writer.d.ts +44 -0
- package/dist/services/codegraph/codegraph-config-repair-writer.js +116 -14
- package/dist/services/codegraph/codegraph-exclude-integrity.js +4 -1
- package/dist/services/codegraph/codegraph-exclude-repair.d.ts +23 -1
- package/dist/services/codegraph/codegraph-exclude-repair.js +7 -2
- package/dist/services/codegraph/codegraph-index-integrity.js +1 -1
- package/dist/services/codegraph/codegraph-preflight-service.d.ts +3 -26
- package/dist/services/codegraph/codegraph-preflight-service.js +16 -37
- package/dist/services/codegraph/codegraph-preflight-structure.d.ts +32 -0
- package/dist/services/codegraph/codegraph-preflight-structure.js +33 -0
- package/dist/services/codegraph/codegraph-process-runner.js +12 -1
- package/dist/services/codegraph/codegraph-service.js +9 -1
- package/dist/services/compact/request-transition-hook.js +2 -1
- package/dist/services/compact/suggest-service.d.ts +3 -61
- package/dist/services/compact/suggest-service.js +9 -12
- package/dist/services/compact/suggest-types.d.ts +76 -0
- package/dist/services/compact/suggest-types.js +10 -0
- package/dist/services/compact-history/compact-history-service.js +2 -2
- package/dist/services/compact-statusline/compact-lifecycle-store.d.ts +2 -32
- package/dist/services/compact-statusline/compact-lifecycle-store.js +7 -12
- package/dist/services/compact-statusline/compact-lifecycle-types.d.ts +32 -0
- package/dist/services/compact-statusline/compact-lifecycle-types.js +8 -0
- package/dist/services/compact-statusline/compact-statusline-cell-table.d.ts +42 -0
- package/dist/services/compact-statusline/compact-statusline-cell-table.js +63 -0
- package/dist/services/compact-statusline/compact-statusline-service.d.ts +4 -21
- package/dist/services/compact-statusline/compact-statusline-service.js +9 -101
- package/dist/services/compact-statusline/compact-statusline-state.d.ts +4 -0
- package/dist/services/compact-statusline/compact-statusline-state.js +50 -0
- package/dist/services/config/config-migration.js +2 -2
- package/dist/services/config/config-restore.js +1 -1
- package/dist/services/config/config-rollback.js +1 -1
- package/dist/services/config/config-safety.js +28 -10
- package/dist/services/config/config-service.js +114 -31
- package/dist/services/config/model-routing.js +5 -2
- package/dist/services/config/proxy-service.js +6 -1
- package/dist/services/config/workspace-state-service.js +17 -5
- package/dist/services/context/auto-compact-dispatcher-input.d.ts +38 -0
- package/dist/services/context/auto-compact-dispatcher-input.js +9 -0
- package/dist/services/context/auto-compact-dispatcher.d.ts +2 -30
- package/dist/services/context/auto-compact-reader-input.d.ts +30 -0
- package/dist/services/context/auto-compact-reader-input.js +8 -0
- package/dist/services/context/auto-compact-reader.d.ts +2 -24
- package/dist/services/context/auto-compact-reader.js +4 -1
- package/dist/services/context/auto-compact-thresholds.d.ts +54 -0
- package/dist/services/context/auto-compact-thresholds.js +19 -0
- package/dist/services/context/auto-compact-types.d.ts +2 -46
- package/dist/services/context/auto-compact-types.js +1 -11
- package/dist/services/context/build-dispatch-system-prompt.js +2 -2
- package/dist/services/context/collector.js +8 -10
- package/dist/services/context/context-audit-hint.js +7 -5
- package/dist/services/context/context-audit-keys.d.ts +15 -0
- package/dist/services/context/context-audit-keys.js +77 -0
- package/dist/services/context/context-audit-limits.d.ts +20 -0
- package/dist/services/context/context-audit-limits.js +31 -0
- package/dist/services/context/context-audit-scan.d.ts +19 -0
- package/dist/services/context/context-audit-scan.js +246 -0
- package/dist/services/context/context-audit-types.d.ts +65 -0
- package/dist/services/context/context-audit-types.js +10 -0
- package/dist/services/context/context-audit.d.ts +13 -59
- package/dist/services/context/context-audit.js +38 -254
- package/dist/services/context/context-builder.js +4 -4
- package/dist/services/context/context-schema.d.ts +1 -1
- package/dist/services/context/context-schema.js +13 -13
- package/dist/services/context/doc-retriever.js +2 -2
- package/dist/services/context/harness-context-witness.js +43 -24
- package/dist/services/context/harness-window-config.js +27 -7
- package/dist/services/context/ide-detect.js +2 -1
- package/dist/services/context/index.d.ts +1 -1
- package/dist/services/context/memory-index-reader.js +3 -9
- package/dist/services/context/memory-preflight-config.js +3 -5
- package/dist/services/context/memory-preflight-service.d.ts +2 -20
- package/dist/services/context/memory-preflight-service.js +37 -68
- package/dist/services/context/memory-preflight-support.d.ts +48 -0
- package/dist/services/context/memory-preflight-support.js +56 -0
- package/dist/services/context/post-compact-reinjection.js +3 -3
- package/dist/services/context/renderer.js +7 -3
- package/dist/services/context/spillover-store.js +3 -1
- package/dist/services/context/summary-view.js +1 -1
- package/dist/services/context/threshold.js +2 -2
- package/dist/services/context/tokenizer.js +3 -3
- package/dist/services/crystallization/crystallization-brief-schema.d.ts +80 -0
- package/dist/services/crystallization/crystallization-brief-schema.js +159 -0
- package/dist/services/crystallization/crystallization-service.d.ts +7 -7
- package/dist/services/crystallization/crystallization-service.js +56 -55
- package/dist/services/crystallization/crystallization-store.d.ts +2 -2
- package/dist/services/crystallization/crystallization-store.js +37 -20
- package/dist/services/crystallization/crystallization-types.d.ts +4 -56
- package/dist/services/crystallization/crystallization-types.js +31 -184
- package/dist/services/crystallization/evidence-brief-builder.d.ts +3 -3
- package/dist/services/crystallization/evidence-brief-builder.js +32 -38
- package/dist/services/crystallization/index.d.ts +4 -4
- package/dist/services/crystallization/index.js +4 -4
- package/dist/services/dashboard/project-dashboard-service.js +7 -1
- package/dist/services/dispatch/await-batch-helpers.d.ts +55 -0
- package/dist/services/dispatch/await-batch-helpers.js +206 -0
- package/dist/services/dispatch/await-batch.d.ts +50 -7
- package/dist/services/dispatch/await-batch.js +97 -194
- package/dist/services/dispatch/batch-counter.js +2 -1
- package/dist/services/dispatch/conflict-replay.js +2 -2
- package/dist/services/dispatch/contract-store.js +5 -2
- package/dist/services/dispatch/dispatch-record-input-types.d.ts +81 -0
- package/dist/services/dispatch/dispatch-record-input-types.js +1 -0
- package/dist/services/dispatch/dispatch-record-types.d.ts +6 -73
- package/dist/services/dispatch/dispatch-record-upgrade-fields.d.ts +72 -0
- package/dist/services/dispatch/dispatch-record-upgrade-fields.js +242 -0
- package/dist/services/dispatch/dispatch-record-upgrade-guards.d.ts +15 -0
- package/dist/services/dispatch/dispatch-record-upgrade-guards.js +55 -0
- package/dist/services/dispatch/dispatch-record-upgrade.d.ts +2 -4
- package/dist/services/dispatch/dispatch-record-upgrade.js +21 -213
- package/dist/services/dispatch/dispatch-record-writer.js +54 -26
- package/dist/services/dispatch/dispatch-sub-agent.js +7 -2
- package/dist/services/dispatch/e2e-fixtures.js +1 -1
- package/dist/services/dispatch/isolation-lease.js +39 -17
- package/dist/services/dispatch/merge-back-runner.js +51 -11
- package/dist/services/dispatch/service-shutdown.js +4 -1
- package/dist/services/dispatch/slice-dag-types.d.ts +116 -0
- package/dist/services/dispatch/slice-dag-types.js +41 -0
- package/dist/services/dispatch/slice-dag.d.ts +3 -109
- package/dist/services/dispatch/slice-dag.js +13 -36
- package/dist/services/dispatch/sub-agent-batch-await.d.ts +47 -0
- package/dist/services/dispatch/sub-agent-batch-await.js +73 -0
- package/dist/services/dispatch/sub-agent-dispatcher-types.d.ts +122 -0
- package/dist/services/dispatch/sub-agent-dispatcher-types.js +12 -0
- package/dist/services/dispatch/sub-agent-dispatcher.d.ts +3 -145
- package/dist/services/dispatch/sub-agent-dispatcher.js +14 -70
- package/dist/services/dispatch/test-tool-detection.js +12 -1
- package/dist/services/doc/doc-generator.js +19 -4
- package/dist/services/doctor/doctor-service/checks/check-id-schema.js +16 -8
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.d.ts +7 -2
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.js +26 -8
- package/dist/services/doctor/doctor-service/checks/codegraph-exclude-integrity.js +16 -8
- package/dist/services/doctor/doctor-service/checks/codegraph-index-integrity.js +16 -8
- package/dist/services/doctor/doctor-service/checks/dist-source-version.js +18 -9
- package/dist/services/doctor/doctor-service/checks/ecc-hooks-schema-drift.js +20 -10
- package/dist/services/doctor/doctor-service/checks/gateguard-conflict.js +18 -9
- package/dist/services/doctor/doctor-service/checks/l3-memory-health.js +25 -11
- package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.js +12 -6
- package/dist/services/doctor/doctor-service/checks/multi-binary-drift.d.ts +7 -16
- package/dist/services/doctor/doctor-service/checks/multi-binary-drift.js +50 -70
- package/dist/services/doctor/doctor-service/checks/schema-validity.js +5 -1
- package/dist/services/doctor/doctor-service/checks/skill-presence.js +4 -2
- package/dist/services/doctor/doctor-service/checks/statusline-install.js +8 -4
- package/dist/services/doctor/doctor-service/checks/statusline-runtime.js +8 -4
- package/dist/services/doctor/doctor-service/checks/user-config.js +4 -2
- package/dist/services/doctor/doctor-service/checks/workspace-init.js +8 -4
- package/dist/services/doctor/doctor-service/checks/workspace-layout.js +19 -11
- package/dist/services/doctor/doctor-service/index.js +4 -2
- package/dist/services/doctor/doctor-service/multi-binary-drift-helpers.d.ts +40 -0
- package/dist/services/doctor/doctor-service/multi-binary-drift-helpers.js +49 -0
- package/dist/services/doctor/doctor-service/plugin-registry.js +1 -1
- package/dist/services/doctor/doctor-service/probe-types.d.ts +210 -0
- package/dist/services/doctor/doctor-service/probe-types.js +14 -0
- package/dist/services/doctor/doctor-service/types.d.ts +7 -197
- package/dist/services/doctor/index.d.ts +1 -1
- package/dist/services/doctor/index.js +1 -1
- package/dist/services/env/shell-probe.js +8 -2
- package/dist/services/evidence/evidence-body-builders.d.ts +23 -0
- package/dist/services/evidence/evidence-body-builders.js +197 -0
- package/dist/services/evidence/evidence-generator.js +16 -189
- package/dist/services/evolution/evolution-constraints.d.ts +43 -0
- package/dist/services/evolution/evolution-constraints.js +54 -0
- package/dist/services/evolution/evolution-evaluation-schema.d.ts +43 -0
- package/dist/services/evolution/evolution-evaluation-schema.js +43 -0
- package/dist/services/evolution/evolution-service.d.ts +6 -6
- package/dist/services/evolution/evolution-service.js +58 -58
- package/dist/services/evolution/evolution-store.d.ts +2 -2
- package/dist/services/evolution/evolution-store.js +37 -51
- package/dist/services/evolution/evolution-types.d.ts +2 -22
- package/dist/services/evolution/evolution-types.js +41 -101
- package/dist/services/evolution/independent-evaluator-runner.d.ts +3 -3
- package/dist/services/evolution/independent-evaluator-runner.js +20 -22
- package/dist/services/evolution/regression-skeptic-runner.d.ts +2 -2
- package/dist/services/evolution/regression-skeptic-runner.js +18 -18
- package/dist/services/feedback/feedback-promotion-service.js +48 -12
- package/dist/services/feedback/promotion-artifact-evidence.d.ts +2 -16
- package/dist/services/feedback/promotion-artifact-evidence.js +6 -83
- package/dist/services/feedback/promotion-artifact-json-evidence.d.ts +29 -0
- package/dist/services/feedback/promotion-artifact-json-evidence.js +39 -0
- package/dist/services/feedback/promotion-source-comments.d.ts +47 -0
- package/dist/services/feedback/promotion-source-comments.js +61 -0
- package/dist/services/final-review/final-review-contract.d.ts +26 -0
- package/dist/services/final-review/final-review-contract.js +14 -0
- package/dist/services/final-review/final-review-delivery.d.ts +63 -0
- package/dist/services/final-review/final-review-delivery.js +124 -0
- package/dist/services/final-review/final-review-evidence-budget.d.ts +125 -0
- package/dist/services/final-review/final-review-evidence-budget.js +218 -0
- package/dist/services/final-review/final-review-evidence-collect.d.ts +4 -0
- package/dist/services/final-review/final-review-evidence-collect.js +230 -0
- package/dist/services/final-review/final-review-evidence-sources.d.ts +138 -0
- package/dist/services/final-review/final-review-evidence-sources.js +139 -0
- package/dist/services/final-review/final-review-fifth-dim.d.ts +8 -0
- package/dist/services/final-review/final-review-fifth-dim.js +20 -0
- package/dist/services/final-review/final-review-gates.d.ts +119 -0
- package/dist/services/final-review/final-review-gates.js +214 -0
- package/dist/services/final-review/final-review-output-budget.d.ts +88 -0
- package/dist/services/final-review/final-review-output-budget.js +161 -0
- package/dist/services/final-review/final-review-prompt.d.ts +35 -0
- package/dist/services/final-review/final-review-prompt.js +112 -0
- package/dist/services/final-review/final-review-reviewer.d.ts +57 -0
- package/dist/services/final-review/final-review-reviewer.js +95 -0
- package/dist/services/final-review/final-review-runner.d.ts +3 -0
- package/dist/services/final-review/final-review-runner.js +158 -0
- package/dist/services/final-review/final-review-service.d.ts +119 -373
- package/dist/services/final-review/final-review-service.js +48 -1380
- package/dist/services/final-review/final-review-verdicts.d.ts +60 -0
- package/dist/services/final-review/final-review-verdicts.js +91 -0
- package/dist/services/final-review/index.d.ts +3 -3
- package/dist/services/final-review/index.js +2 -2
- package/dist/services/final-review/pre-post-diff.js +32 -29
- package/dist/services/fixture/fixture-capture-service.js +14 -6
- package/dist/services/fresh-context/trigger-scan.js +13 -2
- package/dist/services/fuzzy-matching/fuzzy-match-service.js +1 -1
- package/dist/services/fuzzy-matching/fzf-pick-service.js +6 -1
- package/dist/services/hooks/pre-tool-code-gate.js +2 -2
- package/dist/services/hooks/presence-marker-detector.js +12 -2
- package/dist/services/hooks/worktree-authorization-gate.js +21 -7
- package/dist/services/ide/adapters/claude-code-adapter.js +30 -17
- package/dist/services/ide/adapters/codex-adapter.js +3 -5
- package/dist/services/ide/adapters/cursor-adapter.js +3 -5
- package/dist/services/ide/adapters/hermes-adapter.js +2 -4
- package/dist/services/ide/adapters/openclaw-adapter.js +2 -4
- package/dist/services/ide/adapters/qoder-adapter.js +2 -4
- package/dist/services/ide/adapters/tongyi-lingma-adapter.js +1 -1
- package/dist/services/ide/adapters/trae-adapter.js +3 -5
- package/dist/services/ide/adapters/zcode-adapter.js +8 -7
- package/dist/services/ide/current-model-detector.js +2 -1
- package/dist/services/ide/ide-compact-types.d.ts +153 -0
- package/dist/services/ide/ide-compact-types.js +1 -0
- package/dist/services/ide/ide-registry.js +1 -1
- package/dist/services/ide/ide-types.d.ts +7 -145
- package/dist/services/ide/resource-profile.js +1 -1
- package/dist/services/ide/shared/atomic-json.js +2 -1
- package/dist/services/impact/impact-scan-service.js +12 -5
- package/dist/services/job/job-commit-verification.d.ts +73 -0
- package/dist/services/job/job-commit-verification.js +72 -0
- package/dist/services/job/job-orchestrator.d.ts +42 -0
- package/dist/services/job/job-orchestrator.js +110 -10
- package/dist/services/job/job-progress-store.d.ts +75 -5
- package/dist/services/job/job-progress-store.js +83 -6
- package/dist/services/job/job-rotation.d.ts +1 -1
- package/dist/services/job/job-rotation.js +5 -1
- package/dist/services/job/job-state-store.js +2 -2
- package/dist/services/job/job-types.js +49 -20
- package/dist/services/job/subagent-job-wrapper.d.ts +1 -1
- package/dist/services/job/subagent-job-wrapper.js +5 -1
- package/dist/services/job-snapshot/snapshot.js +2 -2
- package/dist/services/karpathy-cost/karpathy-cost-check-service.js +23 -13
- package/dist/services/legacy/legacy-detector.js +51 -5
- package/dist/services/lint/detect-eslint.js +10 -4
- package/dist/services/lint/detect-ocr-18.js +11 -3
- package/dist/services/lint/eslint-runner-support.d.ts +22 -0
- package/dist/services/lint/eslint-runner-support.js +185 -0
- package/dist/services/lint/eslint-runner-types.d.ts +69 -0
- package/dist/services/lint/eslint-runner-types.js +11 -0
- package/dist/services/lint/eslint-runner.d.ts +4 -56
- package/dist/services/lint/eslint-runner.js +24 -178
- package/dist/services/lint/npx-resolver.js +1 -3
- package/dist/services/lint/ocr-18-acquire.js +15 -4
- package/dist/services/lint/ocr-multilang-adapter.js +4 -5
- package/dist/services/llm/anthropic-runner.js +4 -1
- package/dist/services/log/log-commands-service.js +2 -6
- package/dist/services/log/logger.js +15 -12
- package/dist/services/log/retention.js +3 -2
- package/dist/services/loop/evaluator-dispatcher.js +78 -42
- package/dist/services/loop/loop-bee-relation-service.d.ts +4 -4
- package/dist/services/loop/loop-bee-relation-service.js +36 -40
- package/dist/services/loop/loop-bee-relation-store.d.ts +3 -3
- package/dist/services/loop/loop-bee-relation-store.js +9 -11
- package/dist/services/loop/loop-bee-relation-types.d.ts +1 -1
- package/dist/services/loop/loop-bee-relation-types.js +14 -25
- package/dist/services/loop/loop-release-service.d.ts +2 -2
- package/dist/services/loop/loop-release-service.js +3 -3
- package/dist/services/loop/loop-release-store.d.ts +2 -2
- package/dist/services/loop/loop-release-store.js +4 -6
- package/dist/services/loop/loop-release-types.d.ts +1 -1
- package/dist/services/loop/loop-release-types.js +21 -31
- package/dist/services/loop/monotonic-guard-types.d.ts +51 -0
- package/dist/services/loop/monotonic-guard-types.js +9 -0
- package/dist/services/loop/monotonic-guard.d.ts +2 -43
- package/dist/services/loop/monotonic-runner-types.d.ts +63 -0
- package/dist/services/loop/monotonic-runner-types.js +17 -0
- package/dist/services/loop/monotonic-runner.d.ts +3 -34
- package/dist/services/loop/monotonic-runner.js +10 -20
- package/dist/services/loop/run-driver.js +16 -8
- package/dist/services/loop/spec-service.d.ts +0 -5
- package/dist/services/loop/spec-service.js +49 -9
- package/dist/services/memory/llm-reranker-core.d.ts +108 -0
- package/dist/services/memory/llm-reranker-core.js +105 -0
- package/dist/services/memory/llm-reranker.d.ts +3 -94
- package/dist/services/memory/llm-reranker.js +13 -102
- package/dist/services/memory/memory-ingest-service.d.ts +1 -22
- package/dist/services/memory/memory-ingest-service.js +29 -76
- package/dist/services/memory/memory-ingest-support.d.ts +23 -0
- package/dist/services/memory/memory-ingest-support.js +81 -0
- package/dist/services/memory/memory-rotate-service.js +41 -8
- package/dist/services/memory/memory-search-service.js +8 -4
- package/dist/services/memory/project-context-service.js +26 -5
- package/dist/services/memory/project-memory-service/index/kind-dispatch.d.ts +2 -7
- package/dist/services/memory/project-memory-service/index/kind-dispatch.js +17 -136
- package/dist/services/memory/project-memory-service/index/project-memory-plan-exec.d.ts +7 -0
- package/dist/services/memory/project-memory-service/index/project-memory-plan-exec.js +150 -0
- package/dist/services/memory/project-memory-service/index/ranking.js +6 -3
- package/dist/services/memory/project-memory-service/index/reindex.js +14 -5
- package/dist/services/memory/project-memory-service/index.d.ts +1 -1
- package/dist/services/memory/project-memory-service/index.js +1 -1
- package/dist/services/memory/project-memory-service/memory-kinds.d.ts +31 -0
- package/dist/services/memory/project-memory-service/memory-kinds.js +87 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter-parse.d.ts +24 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter-parse.js +104 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter.d.ts +2 -24
- package/dist/services/memory/project-memory-service/parsers/frontmatter.js +28 -79
- package/dist/services/memory/project-memory-service/parsers/markdown-pure.js +15 -3
- package/dist/services/memory/project-memory-service/store/atomic-write.d.ts +59 -0
- package/dist/services/memory/project-memory-service/store/atomic-write.js +189 -17
- package/dist/services/memory/project-memory-service/store/paths.js +2 -1
- package/dist/services/memory/project-memory-service/types.d.ts +3 -31
- package/dist/services/memory/project-memory-service/types.js +1 -76
- package/dist/services/migrate-skill-name/migrate.js +1 -1
- package/dist/services/migrate-skill-name/schema.js +1 -1
- package/dist/services/mode/mode-enforcement.js +4 -2
- package/dist/services/mode/mode-status-service.d.ts +27 -9
- package/dist/services/mode/mode-status-service.js +64 -12
- package/dist/services/observability/aggregation-helpers.d.ts +22 -0
- package/dist/services/observability/aggregation-helpers.js +65 -0
- package/dist/services/observability/aggregation-types.d.ts +66 -0
- package/dist/services/observability/aggregation-types.js +34 -0
- package/dist/services/observability/aggregation.d.ts +5 -53
- package/dist/services/observability/aggregation.js +17 -80
- package/dist/services/observability/jsonl-store.js +2 -1
- package/dist/services/observability/observability-schema.d.ts +71 -0
- package/dist/services/observability/observability-schema.js +64 -0
- package/dist/services/observability/observability-service.d.ts +3 -56
- package/dist/services/observability/observability-service.js +9 -49
- package/dist/services/openspec/coverage-evidence-reader.js +18 -11
- package/dist/services/openspec/openspec-archive-service.js +31 -24
- package/dist/services/openspec/openspec-init-service.js +8 -2
- package/dist/services/openspec/openspec-propose-from-doctor-service.js +1 -1
- package/dist/services/openspec/openspec-scan-service.js +4 -1
- package/dist/services/openspec/openspec-validate-service.js +26 -5
- package/dist/services/perf/perf-baseline-service.js +2 -6
- package/dist/services/polyrepo/polyrepo-dispatcher.js +2 -1
- package/dist/services/polyrepo/polyrepo-scanner.js +4 -1
- package/dist/services/prd/gate-evidence-derivation.d.ts +160 -0
- package/dist/services/prd/gate-evidence-derivation.js +270 -0
- package/dist/services/prd/handoff-auto-regen.js +13 -1
- package/dist/services/prd/handoff-frontmatter-shape.d.ts +42 -0
- package/dist/services/prd/handoff-frontmatter-shape.js +67 -0
- package/dist/services/prd/handoff-frontmatter.d.ts +1 -1
- package/dist/services/prd/handoff-frontmatter.js +63 -1
- package/dist/services/prd/handoff-gate-evidence.d.ts +95 -1
- package/dist/services/prd/handoff-gate-evidence.js +125 -57
- package/dist/services/prd/handoff-path-resolution.d.ts +37 -0
- package/dist/services/prd/handoff-path-resolution.js +101 -0
- package/dist/services/prd/handoff-service.d.ts +22 -38
- package/dist/services/prd/handoff-service.js +38 -127
- package/dist/services/prd/handoff-types.d.ts +40 -0
- package/dist/services/prd/handoff-types.js +28 -1
- package/dist/services/prd/prd-blocks-checker.js +28 -8
- package/dist/services/prd/project-scan-bootstrap-service.js +1 -5
- package/dist/services/prd/project-scan-reader.d.ts +7 -0
- package/dist/services/prd/project-scan-reader.js +8 -5
- package/dist/services/prd/project-scan-sediment.js +1 -4
- package/dist/services/preferences/preferences-service.js +6 -8
- package/dist/services/preferences/preferences-types.js +4 -4
- package/dist/services/qa/bdd-test-style-contract.d.ts +41 -0
- package/dist/services/qa/bdd-test-style-contract.js +37 -0
- package/dist/services/qa/bdd-test-style-verifier.d.ts +2 -24
- package/dist/services/qa/bdd-test-style-verifier.js +5 -31
- package/dist/services/qa/browser-event-logger.js +2 -1
- package/dist/services/qa/qa-business-review-state.js +20 -5
- package/dist/services/qa/screenshot-archive-service.js +1 -3
- package/dist/services/rd/ast-gate.js +2 -2
- package/dist/services/rd/impl.js +1 -1
- package/dist/services/rd/rd-service.js +117 -43
- package/dist/services/rd/reviewer-dispatch-policy.d.ts +36 -8
- package/dist/services/rd/reviewer-dispatch-policy.js +40 -15
- package/dist/services/rd/standards-diagnostic.js +4 -1
- package/dist/services/rd/strategy.js +10 -3
- package/dist/services/rd/tactical-stage.js +2 -2
- package/dist/services/rd/types.js +9 -7
- package/dist/services/rd-swarm/rd-swarm-service.d.ts +2 -45
- package/dist/services/rd-swarm/rd-swarm-service.js +140 -21
- package/dist/services/rd-swarm/rd-swarm-types.d.ts +54 -0
- package/dist/services/rd-swarm/rd-swarm-types.js +10 -0
- package/dist/services/recommendations/capability-map-service.js +10 -2
- package/dist/services/recommendations/capability-seed-items.js +81 -14
- package/dist/services/recommendations/capability-seed-mappings.js +420 -48
- package/dist/services/recommendations/capability-seed-sources-mcp-server.d.ts +9 -0
- package/dist/services/recommendations/capability-seed-sources-mcp-server.js +233 -0
- package/dist/services/recommendations/capability-seed-sources.js +127 -32
- package/dist/services/release/release-state.d.ts +2 -2
- package/dist/services/release/release-state.js +44 -15
- package/dist/services/release/version-precheck-layer-changeset.d.ts +2 -0
- package/dist/services/release/version-precheck-layer-changeset.js +43 -0
- package/dist/services/release/version-precheck-service.d.ts +11 -36
- package/dist/services/release/version-precheck-service.js +20 -104
- package/dist/services/release/version-precheck-support.d.ts +53 -0
- package/dist/services/release/version-precheck-support.js +64 -0
- package/dist/services/retrospective/retrospective-index.js +17 -3
- package/dist/services/retrospective/retrospective-search-service.js +6 -2
- package/dist/services/retrospective/retrospective-show.js +4 -1
- package/dist/services/reviewer/model-family.js +7 -1
- package/dist/services/reviewer/providers/anthropic.d.ts +5 -0
- package/dist/services/reviewer/providers/anthropic.js +10 -1
- package/dist/services/reviewer/providers/openai.d.ts +5 -0
- package/dist/services/reviewer/providers/openai.js +10 -1
- package/dist/services/reviewer/reviewer-config.js +4 -2
- package/dist/services/reviewer/reviewer-service.d.ts +2 -36
- package/dist/services/reviewer/reviewer-service.js +2 -1
- package/dist/services/reviewer/reviewer-types.d.ts +43 -0
- package/dist/services/reviewer/reviewer-types.js +1 -0
- package/dist/services/role/role-registry.js +9 -1
- package/dist/services/runtime/runtime-detector.js +4 -1
- package/dist/services/runtime/vendors/claude-code.js +14 -6
- package/dist/services/runtime/vendors/codex.js +11 -3
- package/dist/services/runtime/vendors/copilot.js +11 -3
- package/dist/services/sc/sc-service.js +28 -15
- package/dist/services/scan/acceptance-coverage-service.js +4 -1
- package/dist/services/scan/api-diff-openapi-schema-read.d.ts +67 -0
- package/dist/services/scan/api-diff-openapi-schema-read.js +154 -0
- package/dist/services/scan/api-diff-openapi.d.ts +16 -2
- package/dist/services/scan/api-diff-openapi.js +19 -123
- package/dist/services/scan/api-diff-recorded.js +16 -3
- package/dist/services/scan/api-diff-service.js +49 -16
- package/dist/services/scan/api-diff-types.js +12 -3
- package/dist/services/scan/api-surface-helpers.d.ts +13 -0
- package/dist/services/scan/api-surface-helpers.js +31 -0
- package/dist/services/scan/api-surface-service.d.ts +2 -45
- package/dist/services/scan/api-surface-service.js +15 -26
- package/dist/services/scan/api-surface-types.d.ts +54 -0
- package/dist/services/scan/api-surface-types.js +10 -0
- package/dist/services/scan/archetype-detection.d.ts +37 -0
- package/dist/services/scan/archetype-detection.js +142 -0
- package/dist/services/scan/archetype-service.js +36 -125
- package/dist/services/scan/diff-scope-service.js +35 -15
- package/dist/services/scan/existing-system-service.js +16 -99
- package/dist/services/scan/existing-system-visual-tokens.d.ts +20 -0
- package/dist/services/scan/existing-system-visual-tokens.js +123 -0
- package/dist/services/scan/file-size-policy.d.ts +86 -0
- package/dist/services/scan/file-size-policy.js +184 -0
- package/dist/services/scan/file-size-scan.d.ts +30 -3
- package/dist/services/scan/file-size-scan.js +47 -9
- package/dist/services/scan/karpathy-service.js +6 -1
- package/dist/services/scan/orphan-service.js +86 -20
- package/dist/services/scan/type-sanity-service.js +104 -10
- package/dist/services/sediment/dispose-confirm.d.ts +2 -2
- package/dist/services/sediment/dispose-confirm.js +2 -2
- package/dist/services/sediment/json-schema.d.ts +1 -1
- package/dist/services/sediment/json-schema.js +25 -13
- package/dist/services/sediment/manifest-lint.d.ts +1 -12
- package/dist/services/sediment/manifest-lint.js +1 -7
- package/dist/services/sediment/pool-paths.js +13 -9
- package/dist/services/sediment/pool-read.d.ts +1 -1
- package/dist/services/sediment/pool-read.js +42 -18
- package/dist/services/sediment/pool-rebuild-index.d.ts +1 -1
- package/dist/services/sediment/pool-rebuild-index.js +5 -5
- package/dist/services/sediment/pool-write.d.ts +1 -1
- package/dist/services/sediment/pool-write.js +7 -7
- package/dist/services/sediment/promotion-gate.d.ts +1 -1
- package/dist/services/sediment/promotion-gate.js +9 -9
- package/dist/services/sediment/types.d.ts +8 -8
- package/dist/services/session/binding-status-service.js +14 -4
- package/dist/services/session/caller-binding-service.js +2 -1
- package/dist/services/session/getSessionDir.js +4 -1
- package/dist/services/session/index.d.ts +1 -1
- package/dist/services/session/index.js +1 -1
- package/dist/services/session/resolve-caller-id.js +7 -5
- package/dist/services/session/session-binding-bridge.js +26 -25
- package/dist/services/session/session-checkpoint-service.js +1 -1
- package/dist/services/session/session-file-schema.d.ts +70 -0
- package/dist/services/session/session-file-schema.js +68 -0
- package/dist/services/session/session-manager.d.ts +6 -6
- package/dist/services/session/session-manager.js +30 -29
- package/dist/services/session/session-resume-service.js +2 -1
- package/dist/services/share/bundle-format-constants.d.ts +85 -0
- package/dist/services/share/bundle-format-constants.js +100 -0
- package/dist/services/share/bundle-reader.d.ts +3 -3
- package/dist/services/share/bundle-reader.js +75 -68
- package/dist/services/share/bundle-types.d.ts +3 -70
- package/dist/services/share/bundle-types.js +38 -107
- package/dist/services/share/bundle-writer.d.ts +3 -3
- package/dist/services/share/bundle-writer.js +101 -91
- package/dist/services/share/run-state-contract.d.ts +1 -1
- package/dist/services/share/run-state-contract.js +7 -13
- package/dist/services/signal/cancel-handler.js +2 -1
- package/dist/services/skill/resume-detector.js +6 -4
- package/dist/services/skill/skill-scheduler.js +3 -1
- package/dist/services/skill/skill-search-service.js +4 -4
- package/dist/services/skillhub/release-diff.d.ts +2 -2
- package/dist/services/skillhub/release-diff.js +6 -10
- package/dist/services/skillhub/release-export.d.ts +2 -2
- package/dist/services/skillhub/release-export.js +15 -17
- package/dist/services/skillhub/release-gc-blobs.d.ts +2 -2
- package/dist/services/skillhub/release-gc-blobs.js +4 -4
- package/dist/services/skillhub/release-import.d.ts +2 -2
- package/dist/services/skillhub/release-import.js +13 -12
- package/dist/services/skillhub/release-retain.d.ts +3 -3
- package/dist/services/skillhub/release-retain.js +22 -22
- package/dist/services/skillhub/sqlite-store.d.ts +1 -1
- package/dist/services/skillhub/sqlite-store.js +12 -11
- package/dist/services/skillhub/tar-runtime.js +15 -15
- package/dist/services/skillhub/types.d.ts +4 -4
- package/dist/services/skills/hooks-codegate-superpowers.js +16 -7
- package/dist/services/skills/hooks-settings-service.js +61 -19
- package/dist/services/skills/presence-lease-service.js +26 -16
- package/dist/services/skills/presence-lease-types.d.ts +1 -1
- package/dist/services/skills/presence-lease-types.js +1 -1
- package/dist/services/skills/skill-conformance-service.js +40 -8
- package/dist/services/skills/skill-presence-service.js +16 -14
- package/dist/services/skills/skill-runbook-service.js +2 -1
- package/dist/services/skills/skill-statusline-model.d.ts +128 -0
- package/dist/services/skills/skill-statusline-model.js +163 -0
- package/dist/services/skills/skill-statusline-renderer.js +4 -3
- package/dist/services/skills/skill-statusline-service.d.ts +3 -100
- package/dist/services/skills/skill-statusline-service.js +56 -163
- package/dist/services/skills/statusline-palette.js +11 -6
- package/dist/services/skills/statusline-settings-service.js +2 -1
- package/dist/services/skills/sync-service-support.d.ts +65 -0
- package/dist/services/skills/sync-service-support.js +50 -0
- package/dist/services/skills/sync-service.d.ts +3 -66
- package/dist/services/skills/sync-service.js +15 -53
- package/dist/services/slice/calibration-store.js +8 -2
- package/dist/services/slice/cross-pass-edge-merger.d.ts +3 -28
- package/dist/services/slice/cross-pass-edge-merger.js +13 -63
- package/dist/services/slice/cross-pass-edge-static-scan-support.d.ts +69 -0
- package/dist/services/slice/cross-pass-edge-static-scan-support.js +74 -0
- package/dist/services/slice/granularity-decider.js +2 -2
- package/dist/services/slice/slice-archive-service.js +8 -3
- package/dist/services/slice/slice-check-service.js +19 -8
- package/dist/services/slice/slice-decompose-runners.js +61 -23
- package/dist/services/slice/slice-decompose-service.js +4 -4
- package/dist/services/slice/slice-review-state.js +8 -2
- package/dist/services/smoke/smoke-paths-state.js +9 -2
- package/dist/services/sop/gate-enforce-service.js +9 -2
- package/dist/services/sop/sop-advance-service.js +14 -2
- package/dist/services/sop/sop-check-service.js +16 -4
- package/dist/services/sop/sop-paths.js +3 -1
- package/dist/services/sop/sop-registry-service.js +5 -1
- package/dist/services/sop/sop-service.js +29 -7
- package/dist/services/sop/sop-types.js +5 -1
- package/dist/services/standards/ide-aware-standards-service.js +2 -2
- package/dist/services/standards/loop-engineering-lint.js +12 -5
- package/dist/services/standards/loop-engineering-readiness-lint.js +5 -5
- package/dist/services/standards/migrate-claude-rules-service.js +9 -7
- package/dist/services/standards/missing-standards-detector.js +1 -3
- package/dist/services/standards/project-context-support.d.ts +50 -0
- package/dist/services/standards/project-context-support.js +244 -0
- package/dist/services/standards/project-context-types.d.ts +30 -0
- package/dist/services/standards/project-context-types.js +11 -0
- package/dist/services/standards/project-context.d.ts +10 -22
- package/dist/services/standards/project-context.js +27 -214
- package/dist/services/standards/project-standards-service.js +43 -12
- package/dist/services/standards/standards-render-common.d.ts +15 -0
- package/dist/services/standards/standards-render-common.js +49 -0
- package/dist/services/standards/standards-render.d.ts +1 -2
- package/dist/services/standards/standards-render.js +31 -58
- package/dist/services/standards/ui-library-dispatch-block.js +1 -1
- package/dist/services/tech/tech-change-id-service.js +7 -7
- package/dist/services/tech/tech-service.js +73 -26
- package/dist/services/test-cache/test-cache-service.js +8 -3
- package/dist/services/upgrade/1x-detector-service.js +5 -3
- package/dist/services/upgrade/gitignore-migrate-service.js +5 -5
- package/dist/services/upgrade/upgrade-service.js +36 -13
- package/dist/services/verdict/envelope-parsers.d.ts +84 -0
- package/dist/services/verdict/envelope-parsers.js +146 -0
- package/dist/services/verdict/envelopes.d.ts +50 -60
- package/dist/services/verdict/envelopes.js +18 -156
- package/dist/services/verdict/verdict-aggregator.js +27 -3
- package/dist/services/vm/vm-lease.js +15 -3
- package/dist/services/web/aria-node.d.ts +27 -0
- package/dist/services/web/aria-node.js +1 -0
- package/dist/services/web/browser-acquire.js +3 -1
- package/dist/services/web/browser-cache-probe.d.ts +18 -0
- package/dist/services/web/browser-cache-probe.js +110 -0
- package/dist/services/web/browser-session-manager.js +6 -2
- package/dist/services/web/daemon-registry.js +4 -1
- package/dist/services/web/playwright-loader.d.ts +2 -70
- package/dist/services/web/playwright-types.d.ts +75 -0
- package/dist/services/web/playwright-types.js +1 -0
- package/dist/services/web/snapshot-pruner.d.ts +2 -23
- package/dist/services/web/snapshot-pruner.js +8 -3
- package/dist/services/web/web-daemon-service.js +1 -3
- package/dist/services/web/web-install-service.d.ts +3 -32
- package/dist/services/web/web-install-service.js +21 -100
- package/dist/services/web/web-install-types.d.ts +31 -0
- package/dist/services/web/web-install-types.js +13 -0
- package/dist/services/web/web-login-profile.js +7 -5
- package/dist/services/web/web-protocol.js +3 -1
- package/dist/services/workflow/pipeline-verify-gate-support.js +63 -17
- package/dist/services/workflow/pipeline-verify-service.js +17 -6
- package/dist/services/workflow/plan-reader.js +5 -1
- package/dist/services/workflow/plan-refresher.js +20 -6
- package/dist/services/workflow/plan-trigger-detector.js +31 -8
- package/dist/services/workflow/provision-dispatch-node.js +8 -3
- package/dist/services/workflow/workflow-autonomous-resume-helpers.d.ts +3 -1
- package/dist/services/workflow/workflow-autonomous-resume-helpers.js +35 -144
- package/dist/services/workflow/workflow-autonomous-resume-validation.d.ts +16 -0
- package/dist/services/workflow/workflow-autonomous-resume-validation.js +155 -0
- package/dist/services/workflow/workflow-autonomous-service.js +25 -13
- package/dist/services/workflow/workflow-graph-store-helpers.d.ts +51 -0
- package/dist/services/workflow/workflow-graph-store-helpers.js +111 -0
- package/dist/services/workflow/workflow-graph-store.d.ts +2 -35
- package/dist/services/workflow/workflow-graph-store.js +30 -107
- package/dist/services/workflow/workflow-graph-types.js +3 -3
- package/dist/services/workflow/workflow-inflight-probe.js +14 -7
- package/dist/services/workflow/workflow-loader.js +5 -1
- package/dist/services/workflow/workflow-node-lifecycle.js +22 -21
- package/dist/services/workflow/workflow-presence-lifecycle-types.d.ts +50 -0
- package/dist/services/workflow/workflow-presence-lifecycle-types.js +1 -0
- package/dist/services/workflow/workflow-presence-lifecycle.d.ts +2 -42
- package/dist/services/workflow/workflow-presence-lifecycle.js +19 -21
- package/dist/services/workflow/workflow-router-service.js +169 -27
- package/dist/services/workflow/workflow-skip-service.js +14 -4
- package/dist/services/workflow/workflow-spec-builders.d.ts +15 -0
- package/dist/services/workflow/workflow-spec-builders.js +121 -0
- package/dist/services/workflow/workflow-spec.d.ts +7 -6
- package/dist/services/workflow/workflow-spec.js +22 -116
- package/dist/services/workflow/workflow-state-store.js +2 -1
- package/dist/services/workspace/migrate-1-4-1-service.js +80 -14
- package/dist/services/workspace/migrate-service.js +66 -16
- package/dist/services/workspace/reconcile-migrate.js +6 -2
- package/dist/services/workspace/reconcile-service.js +37 -16
- package/dist/services/workspace/workspace-claude-settings-materializer.js +7 -5
- package/dist/services/workspace/workspace-clean-service.js +4 -1
- package/dist/services/workspace/workspace-service.js +11 -3
- package/dist/services/workspace/workspace-state-service.js +1 -1
- package/dist/services/worktree/git-worktree-parser.js +13 -3
- package/dist/services/worktree/host-worktree-reconciler.js +8 -4
- package/dist/services/worktree/long-path-cleanup.js +23 -6
- package/dist/services/worktree/worktree-gc-guard.js +3 -1
- package/dist/services/worktree/worktree-lease-types.d.ts +53 -0
- package/dist/services/worktree/worktree-lease-types.js +10 -0
- package/dist/services/worktree/worktree-lease.d.ts +2 -44
- package/dist/shared/array-guards.d.ts +30 -0
- package/dist/shared/array-guards.js +32 -0
- package/dist/shared/format-md-compact-internals.d.ts +26 -0
- package/dist/shared/format-md-compact-internals.js +125 -0
- package/dist/shared/format-md-compact.js +1 -117
- package/dist/shared/fs-utils.js +2 -1
- package/dist/shared/incrementing-number.js +3 -3
- package/dist/shared/json-parse.d.ts +71 -0
- package/dist/shared/json-parse.js +32 -0
- package/dist/shared/json-schema-mini.js +3 -1
- package/dist/shared/path-safety.js +3 -1
- package/dist/shared/path-utils.d.ts +20 -0
- package/dist/shared/path-utils.js +26 -0
- package/dist/shared/planner-response.js +3 -3
- package/dist/shared/stale-policy.js +1 -3
- package/dist/skills/peaks-maker/index.js +11 -11
- package/package.json +32 -9
- package/scripts/clean-dist.mjs +1 -2
- package/scripts/copy-templates.mjs +2 -4
- package/scripts/install-skills.mjs +305 -125
- package/scripts/sync-version.mjs +25 -8
- package/scripts/watch.mjs +8 -2
- package/skills/bee/peaks-rd/SKILL.md +1 -1
- package/skills/bee/peaks-rd/references/rd-fanout-contracts.md +26 -10
- package/skills/bee/peaks-rd/references/rd-sub-agent-dispatch.md +1 -1
- package/skills/bee/peaks-rd/references/writing-handoff-frontmatter.md +6 -1
- package/skills/peaks-code/SKILL.md +1 -1
- package/skills/peaks-code/references/periodic-checkpoint.md +7 -5
- package/skills/peaks-code/references/startup-sequence.md +1 -1
- package/skills/peaks-final-review/SKILL.md +1 -1
- /package/{docs → contracts}/test-style-contract.md +0 -0
|
@@ -46,37 +46,12 @@
|
|
|
46
46
|
* to the category, and this repo documents `commit-boundary-side-effect` beside
|
|
47
47
|
* the union member while the array enforces it.
|
|
48
48
|
*/
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
return 'not a JSON object';
|
|
56
|
-
if (parsed.id !== id)
|
|
57
|
-
return `does not declare id "${id}"`;
|
|
58
|
-
if (!Array.isArray(parsed.gates))
|
|
59
|
-
return 'has no "gates" array';
|
|
60
|
-
return null;
|
|
61
|
-
}
|
|
62
|
-
function registryFailure(parsed, id) {
|
|
63
|
-
if (!isRecord(parsed))
|
|
64
|
-
return 'not a JSON object';
|
|
65
|
-
if (!Array.isArray(parsed.sops))
|
|
66
|
-
return 'has no "sops" array';
|
|
67
|
-
const registered = parsed.sops.some((entry) => isRecord(entry) && entry.id === id);
|
|
68
|
-
return registered ? null : `registry has no SOP entry with id "${id}"`;
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* A tool selector: `Name` or `Name(pattern)`, one or more separated by `|` —
|
|
72
|
-
* `Bash`, `Write|Edit|MultiEdit`, `Bash(git push:*)`. A segment that is not a
|
|
73
|
-
* tool-name token (a hyphenated rule name, say) makes the selector malformed.
|
|
74
|
-
*/
|
|
75
|
-
const MATCHER_SEGMENT_RE = /^[A-Za-z_][A-Za-z0-9_]*\s*(\(.*\))?$/;
|
|
76
|
-
function isToolMatcher(matcher) {
|
|
77
|
-
const segments = matcher.split('|');
|
|
78
|
-
return segments.every((segment) => MATCHER_SEGMENT_RE.test(segment.trim()));
|
|
79
|
-
}
|
|
49
|
+
// Slice `b1-filesplit-campaign` (wave 3): the JSON-artifact shape predicates and
|
|
50
|
+
// the comment / vocabulary-member machinery moved VERBATIM into two sibling
|
|
51
|
+
// modules so this file clears the 300 raw-line cap. The two public type names are
|
|
52
|
+
// re-exported from here, so no importer changed.
|
|
53
|
+
import { isRecord, isToolMatcher, manifestFailure, registryFailure } from './promotion-artifact-json-evidence.js';
|
|
54
|
+
import { citedMemories, commentSpans, maskComments, mergeByLiteral } from './promotion-source-comments.js';
|
|
80
55
|
/**
|
|
81
56
|
* Split a hook command the way a shell does: whitespace separates words, and
|
|
82
57
|
* quotes group whitespace INTO a word rather than ending it. So a phrase inside
|
|
@@ -175,24 +150,6 @@ function hookFailure(parsed, id) {
|
|
|
175
150
|
}
|
|
176
151
|
return `no hook registration runs anything named "${id}" (a hook command must invoke a file named after the rule)`;
|
|
177
152
|
}
|
|
178
|
-
/**
|
|
179
|
-
* One pattern, used by BOTH the masker and the doc reader, so a comment can
|
|
180
|
-
* never be blanked by one and read as a doc by the other.
|
|
181
|
-
*/
|
|
182
|
-
const COMMENT_RE = /\/\*[\s\S]*?\*\/|\/\/[^\n]*/g;
|
|
183
|
-
/** Comments are blanked to spaces, which keeps every offset in the file valid. */
|
|
184
|
-
function maskComments(text) {
|
|
185
|
-
return text.replace(COMMENT_RE, (comment) => ' '.repeat(comment.length));
|
|
186
|
-
}
|
|
187
|
-
function commentSpans(source) {
|
|
188
|
-
const spans = [];
|
|
189
|
-
COMMENT_RE.lastIndex = 0;
|
|
190
|
-
let match;
|
|
191
|
-
while ((match = COMMENT_RE.exec(source)) !== null) {
|
|
192
|
-
spans.push({ start: match.index, end: match.index + match[0].length, text: match[0] });
|
|
193
|
-
}
|
|
194
|
-
return spans;
|
|
195
|
-
}
|
|
196
153
|
/**
|
|
197
154
|
* Collect the members of the hard-floor vocabulary, each with the comment text
|
|
198
155
|
* that governs it. `masked` decides where a member STARTS (so a quoted string
|
|
@@ -253,40 +210,6 @@ function vocabularyMembers(source) {
|
|
|
253
210
|
}
|
|
254
211
|
return mergeByLiteral(raw);
|
|
255
212
|
}
|
|
256
|
-
/**
|
|
257
|
-
* R10 — one entry per literal, and `enforcing` is only ever set by the array.
|
|
258
|
-
*
|
|
259
|
-
* Reading the two declarations as one flat member list let a member of the
|
|
260
|
-
* `HardFloorCategory` union ALONE satisfy this check while
|
|
261
|
-
* `isHardFloorCategory` — and therefore `shouldPauseAtGate` — did not recognise
|
|
262
|
-
* it. The gate reported BACKED for a hard floor that paused nothing. Splitting
|
|
263
|
-
* the provenance of `enforcing` out of the member list is what makes the two
|
|
264
|
-
* agree: what the predicate accepts is exactly what the array contains.
|
|
265
|
-
*
|
|
266
|
-
* The docs are joined across occurrences rather than kept per-declaration,
|
|
267
|
-
* because a category's doc belongs to the CATEGORY. This repo's own layer-C
|
|
268
|
-
* promotion cites `.peaks/memory/2026-06-28-full-auto-boundary.md` from the
|
|
269
|
-
* comment beside the UNION member of `commit-boundary-side-effect`, while the
|
|
270
|
-
* ARRAY is what enforces it; reading the doc from one declaration only would
|
|
271
|
-
* make that citation unreadable — a false negative on a file already known good.
|
|
272
|
-
*/
|
|
273
|
-
function mergeByLiteral(members) {
|
|
274
|
-
const merged = new Map();
|
|
275
|
-
for (const member of members) {
|
|
276
|
-
const previous = merged.get(member.literal);
|
|
277
|
-
merged.set(member.literal, {
|
|
278
|
-
literal: member.literal,
|
|
279
|
-
doc: [previous?.doc, member.doc].filter((doc) => doc !== undefined && doc !== '').join('\n'),
|
|
280
|
-
enforcing: (previous?.enforcing ?? false) || member.enforcing
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
return [...merged.values()];
|
|
284
|
-
}
|
|
285
|
-
/** A memory cited by path, the way this repo cites one (`mode-gate.ts:41`). */
|
|
286
|
-
const MEMORY_CITATION_RE = /\.peaks\/memory\/([A-Za-z0-9._-]+)\.md/g;
|
|
287
|
-
function citedMemories(doc) {
|
|
288
|
-
return Array.from(doc.matchAll(MEMORY_CITATION_RE), (match) => match[1]);
|
|
289
|
-
}
|
|
290
213
|
/**
|
|
291
214
|
* Layer C. The rule counts when it IS a member of `HARD_FLOOR_CATEGORIES`, or
|
|
292
215
|
* when one of THAT ARRAY's members has a doc block that CITES it the way this
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slice `b1-filesplit-campaign` (wave 3) — verbatim extraction of the JSON-artifact
|
|
3
|
+
* half of `./promotion-artifact-evidence.ts` (the evidence vocabulary and the three
|
|
4
|
+
* layer-A / layer-B shape predicates) so that module clears the 300 raw-line cap.
|
|
5
|
+
* No predicate body, no doc comment and no message string changed; the original
|
|
6
|
+
* module re-exports the two public type names from its own path, so importers are
|
|
7
|
+
* untouched.
|
|
8
|
+
*/
|
|
9
|
+
export type PromotionEvidence =
|
|
10
|
+
/** A SOP manifest: a JSON object whose `id` is the SOP's and whose `gates` is an array. */
|
|
11
|
+
'sop-manifest'
|
|
12
|
+
/** An entry with the SOP's `id` inside `<registry>.sops[]` — what `readRegistry()` enumerates. */
|
|
13
|
+
| 'sop-registry-entry'
|
|
14
|
+
/** A hook registration (hook command) inside `hooks` that runs something named after the rule. */
|
|
15
|
+
| 'hook-registration'
|
|
16
|
+
/** A member of `HARD_FLOOR_CATEGORIES` — the array `isHardFloorCategory` reads — that names the rule. */
|
|
17
|
+
| 'hard-floor-category';
|
|
18
|
+
export type PromotionArtifactCheck = {
|
|
19
|
+
/** Project-relative POSIX path whose CONTENT must carry the evidence. */
|
|
20
|
+
path: string;
|
|
21
|
+
evidence: PromotionEvidence;
|
|
22
|
+
/** The rule id the evidence must name (a SOP id for layer A, a memory name for B and C). */
|
|
23
|
+
id: string;
|
|
24
|
+
};
|
|
25
|
+
/** Is `value` a JSON object (not null, not an array)? */
|
|
26
|
+
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
27
|
+
export declare function manifestFailure(parsed: unknown, id: string): string | null;
|
|
28
|
+
export declare function registryFailure(parsed: unknown, id: string): string | null;
|
|
29
|
+
export declare function isToolMatcher(matcher: string): boolean;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slice `b1-filesplit-campaign` (wave 3) — verbatim extraction of the JSON-artifact
|
|
3
|
+
* half of `./promotion-artifact-evidence.ts` (the evidence vocabulary and the three
|
|
4
|
+
* layer-A / layer-B shape predicates) so that module clears the 300 raw-line cap.
|
|
5
|
+
* No predicate body, no doc comment and no message string changed; the original
|
|
6
|
+
* module re-exports the two public type names from its own path, so importers are
|
|
7
|
+
* untouched.
|
|
8
|
+
*/
|
|
9
|
+
/** Is `value` a JSON object (not null, not an array)? */
|
|
10
|
+
export function isRecord(value) {
|
|
11
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
12
|
+
}
|
|
13
|
+
export function manifestFailure(parsed, id) {
|
|
14
|
+
if (!isRecord(parsed))
|
|
15
|
+
return 'not a JSON object';
|
|
16
|
+
if (parsed.id !== id)
|
|
17
|
+
return `does not declare id "${id}"`;
|
|
18
|
+
if (!Array.isArray(parsed.gates))
|
|
19
|
+
return 'has no "gates" array';
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
export function registryFailure(parsed, id) {
|
|
23
|
+
if (!isRecord(parsed))
|
|
24
|
+
return 'not a JSON object';
|
|
25
|
+
if (!Array.isArray(parsed.sops))
|
|
26
|
+
return 'has no "sops" array';
|
|
27
|
+
const registered = parsed.sops.some((entry) => isRecord(entry) && entry.id === id);
|
|
28
|
+
return registered ? null : `registry has no SOP entry with id "${id}"`;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* A tool selector: `Name` or `Name(pattern)`, one or more separated by `|` —
|
|
32
|
+
* `Bash`, `Write|Edit|MultiEdit`, `Bash(git push:*)`. A segment that is not a
|
|
33
|
+
* tool-name token (a hyphenated rule name, say) makes the selector malformed.
|
|
34
|
+
*/
|
|
35
|
+
const MATCHER_SEGMENT_RE = /^[A-Za-z_][A-Za-z0-9_]*\s*(\(.*\))?$/;
|
|
36
|
+
export function isToolMatcher(matcher) {
|
|
37
|
+
const segments = matcher.split('|');
|
|
38
|
+
return segments.every((segment) => MATCHER_SEGMENT_RE.test(segment.trim()));
|
|
39
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slice `b1-filesplit-campaign` (wave 3) — verbatim extraction of the comment /
|
|
3
|
+
* vocabulary-member machinery from `./promotion-artifact-evidence.ts` so that
|
|
4
|
+
* module clears the 300 raw-line cap. These are the declarations the hard-floor
|
|
5
|
+
* reader is built ON (comment masking, comment spans, the member shape, the
|
|
6
|
+
* by-literal merge and the memory-citation pattern); the reader itself
|
|
7
|
+
* (`collectMembers` / `vocabularyMembers` / `hardFloorFailure`) stays where it
|
|
8
|
+
* was, importing these. No body, doc comment or regex changed.
|
|
9
|
+
*/
|
|
10
|
+
/** Comments are blanked to spaces, which keeps every offset in the file valid. */
|
|
11
|
+
export declare function maskComments(text: string): string;
|
|
12
|
+
export type CommentSpan = {
|
|
13
|
+
start: number;
|
|
14
|
+
end: number;
|
|
15
|
+
text: string;
|
|
16
|
+
};
|
|
17
|
+
export declare function commentSpans(source: string): CommentSpan[];
|
|
18
|
+
export type VocabularyMember = {
|
|
19
|
+
literal: string;
|
|
20
|
+
doc: string;
|
|
21
|
+
/**
|
|
22
|
+
* R10: does this member sit in the declaration that ENFORCES — the
|
|
23
|
+
* `HARD_FLOOR_CATEGORIES` array `isHardFloorCategory` reads? A member of the
|
|
24
|
+
* `HardFloorCategory` union alone is a type; it pauses nothing, so it is not
|
|
25
|
+
* evidence that a rule is a hard floor.
|
|
26
|
+
*/
|
|
27
|
+
enforcing: boolean;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* R10 — one entry per literal, and `enforcing` is only ever set by the array.
|
|
31
|
+
*
|
|
32
|
+
* Reading the two declarations as one flat member list let a member of the
|
|
33
|
+
* `HardFloorCategory` union ALONE satisfy this check while
|
|
34
|
+
* `isHardFloorCategory` — and therefore `shouldPauseAtGate` — did not recognise
|
|
35
|
+
* it. The gate reported BACKED for a hard floor that paused nothing. Splitting
|
|
36
|
+
* the provenance of `enforcing` out of the member list is what makes the two
|
|
37
|
+
* agree: what the predicate accepts is exactly what the array contains.
|
|
38
|
+
*
|
|
39
|
+
* The docs are joined across occurrences rather than kept per-declaration,
|
|
40
|
+
* because a category's doc belongs to the CATEGORY. This repo's own layer-C
|
|
41
|
+
* promotion cites `.peaks/memory/2026-06-28-full-auto-boundary.md` from the
|
|
42
|
+
* comment beside the UNION member of `commit-boundary-side-effect`, while the
|
|
43
|
+
* ARRAY is what enforces it; reading the doc from one declaration only would
|
|
44
|
+
* make that citation unreadable — a false negative on a file already known good.
|
|
45
|
+
*/
|
|
46
|
+
export declare function mergeByLiteral(members: readonly VocabularyMember[]): VocabularyMember[];
|
|
47
|
+
export declare function citedMemories(doc: string): string[];
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slice `b1-filesplit-campaign` (wave 3) — verbatim extraction of the comment /
|
|
3
|
+
* vocabulary-member machinery from `./promotion-artifact-evidence.ts` so that
|
|
4
|
+
* module clears the 300 raw-line cap. These are the declarations the hard-floor
|
|
5
|
+
* reader is built ON (comment masking, comment spans, the member shape, the
|
|
6
|
+
* by-literal merge and the memory-citation pattern); the reader itself
|
|
7
|
+
* (`collectMembers` / `vocabularyMembers` / `hardFloorFailure`) stays where it
|
|
8
|
+
* was, importing these. No body, doc comment or regex changed.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* One pattern, used by BOTH the masker and the doc reader, so a comment can
|
|
12
|
+
* never be blanked by one and read as a doc by the other.
|
|
13
|
+
*/
|
|
14
|
+
const COMMENT_RE = /\/\*[\s\S]*?\*\/|\/\/[^\n]*/g;
|
|
15
|
+
/** Comments are blanked to spaces, which keeps every offset in the file valid. */
|
|
16
|
+
export function maskComments(text) {
|
|
17
|
+
return text.replace(COMMENT_RE, (comment) => ' '.repeat(comment.length));
|
|
18
|
+
}
|
|
19
|
+
export function commentSpans(source) {
|
|
20
|
+
const spans = [];
|
|
21
|
+
COMMENT_RE.lastIndex = 0;
|
|
22
|
+
let match;
|
|
23
|
+
while ((match = COMMENT_RE.exec(source)) !== null) {
|
|
24
|
+
spans.push({ start: match.index, end: match.index + match[0].length, text: match[0] });
|
|
25
|
+
}
|
|
26
|
+
return spans;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* R10 — one entry per literal, and `enforcing` is only ever set by the array.
|
|
30
|
+
*
|
|
31
|
+
* Reading the two declarations as one flat member list let a member of the
|
|
32
|
+
* `HardFloorCategory` union ALONE satisfy this check while
|
|
33
|
+
* `isHardFloorCategory` — and therefore `shouldPauseAtGate` — did not recognise
|
|
34
|
+
* it. The gate reported BACKED for a hard floor that paused nothing. Splitting
|
|
35
|
+
* the provenance of `enforcing` out of the member list is what makes the two
|
|
36
|
+
* agree: what the predicate accepts is exactly what the array contains.
|
|
37
|
+
*
|
|
38
|
+
* The docs are joined across occurrences rather than kept per-declaration,
|
|
39
|
+
* because a category's doc belongs to the CATEGORY. This repo's own layer-C
|
|
40
|
+
* promotion cites `.peaks/memory/2026-06-28-full-auto-boundary.md` from the
|
|
41
|
+
* comment beside the UNION member of `commit-boundary-side-effect`, while the
|
|
42
|
+
* ARRAY is what enforces it; reading the doc from one declaration only would
|
|
43
|
+
* make that citation unreadable — a false negative on a file already known good.
|
|
44
|
+
*/
|
|
45
|
+
export function mergeByLiteral(members) {
|
|
46
|
+
const merged = new Map();
|
|
47
|
+
for (const member of members) {
|
|
48
|
+
const previous = merged.get(member.literal);
|
|
49
|
+
merged.set(member.literal, {
|
|
50
|
+
literal: member.literal,
|
|
51
|
+
doc: [previous?.doc, member.doc].filter((doc) => doc !== undefined && doc !== '').join('\n'),
|
|
52
|
+
enforcing: (previous?.enforcing ?? false) || member.enforcing
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return [...merged.values()];
|
|
56
|
+
}
|
|
57
|
+
/** A memory cited by path, the way this repo cites one (`mode-gate.ts:41`). */
|
|
58
|
+
const MEMORY_CITATION_RE = /\.peaks\/memory\/([A-Za-z0-9._-]+)\.md/g;
|
|
59
|
+
export function citedMemories(doc) {
|
|
60
|
+
return Array.from(doc.matchAll(MEMORY_CITATION_RE), (match) => match[1]);
|
|
61
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface LlmRunner {
|
|
2
|
+
call(systemPrompt: string, userPrompt: string, opts: {
|
|
3
|
+
maxTokens: number;
|
|
4
|
+
}): Promise<{
|
|
5
|
+
output: string;
|
|
6
|
+
tokens: {
|
|
7
|
+
input: number;
|
|
8
|
+
output: number;
|
|
9
|
+
};
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
export interface PrepareFinalReviewOptions {
|
|
13
|
+
readonly projectRoot: string;
|
|
14
|
+
readonly sessionId: string;
|
|
15
|
+
readonly llmRunner: LlmRunner;
|
|
16
|
+
/**
|
|
17
|
+
* Explicit base ref for the pre/post baseline diff. Unset ⇒ the producer
|
|
18
|
+
* resolves the merge-base with the upstream default branch itself, and
|
|
19
|
+
* reports the dimension `unavailable` when it cannot.
|
|
20
|
+
*/
|
|
21
|
+
readonly baseRef?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare class IncompleteFinalReviewError extends Error {
|
|
24
|
+
readonly code: "INCOMPLETE_FINAL_REVIEW";
|
|
25
|
+
constructor(message: string);
|
|
26
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// src/services/final-review/final-review-contract.ts
|
|
2
|
+
//
|
|
3
|
+
// The caller-facing contract of the final-review service: the inline
|
|
4
|
+
// LlmRunner copy, the prepare() options and the incomplete-review error.
|
|
5
|
+
// Hoisted verbatim from final-review-service.ts (C wave 7 file-size
|
|
6
|
+
// split); the service module re-exports all three so no importer's path
|
|
7
|
+
// or symbol changed.
|
|
8
|
+
export class IncompleteFinalReviewError extends Error {
|
|
9
|
+
code = 'INCOMPLETE_FINAL_REVIEW';
|
|
10
|
+
constructor(message) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = 'IncompleteFinalReviewError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { CollectedEvidence } from './final-review-evidence-sources.js';
|
|
2
|
+
import type { DimensionEvidence, DimensionKind } from './final-review-types.js';
|
|
3
|
+
/**
|
|
4
|
+
* H2 — the reason a dimension is red PERMANENTLY, as opposed to merely unfed on
|
|
5
|
+
* this run. Reported per source, so the arithmetic is checkable by the reader.
|
|
6
|
+
*/
|
|
7
|
+
export interface UndeliverableDimensionEvidence {
|
|
8
|
+
readonly dimension: DimensionKind;
|
|
9
|
+
readonly sources: readonly {
|
|
10
|
+
readonly key: string;
|
|
11
|
+
readonly relativePath: string;
|
|
12
|
+
readonly totalBytes: number;
|
|
13
|
+
}[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* H2 — every required dimension whose verdict is locked to `inconclusive` by
|
|
17
|
+
* BYTE ARITHMETIC rather than by the reviewer's judgement.
|
|
18
|
+
*
|
|
19
|
+
* The defect this exists for: `qa/test-reports/<rid>.md` measured 9,492 bytes
|
|
20
|
+
* on this repo's own run and is the ONLY source on disk for `problem-resolution`
|
|
21
|
+
* and `no-new-bugs` (the other sources that support them are absent), against a
|
|
22
|
+
* per-file cap of 10,240 — a 748-byte margin on a file that is REWRITTEN every
|
|
23
|
+
* round and only grows. The moment it crosses 10,240 both dimensions go
|
|
24
|
+
* permanently red, and NOTHING said so: `assertFloorReservationAffordable()`
|
|
25
|
+
* only checks the constant-level relation (`4 x cap <= total`), never whether
|
|
26
|
+
* any actual source fits the cap it must live under, so the red handoff read as
|
|
27
|
+
* "the reviewer was unsure" instead of "no evidence can ever reach the
|
|
28
|
+
* reviewer". A gate that is always red and never explains itself is noise, and
|
|
29
|
+
* this is the same "always red" harm the floor reservation was built to remove
|
|
30
|
+
* — one layer down.
|
|
31
|
+
*
|
|
32
|
+
* The conditions, all three of which must hold, are chosen so the report cannot
|
|
33
|
+
* be noise:
|
|
34
|
+
* 1. NOTHING on disk can back the dimension (no `isDelivered`), and
|
|
35
|
+
* 2. there IS something on disk to deliver (a source that was never written
|
|
36
|
+
* is not a delivery failure — same reasoning as the scope-contract gate's
|
|
37
|
+
* `missing` exemption: a run with no QA phase has no report to lose), and
|
|
38
|
+
* 3. EVERY one of those on-disk sources is structurally undeliverable — a
|
|
39
|
+
* single source that merely did not fit TODAY (budget-exhausted `omitted`)
|
|
40
|
+
* is a different, self-correcting state and is left to the allocator.
|
|
41
|
+
*
|
|
42
|
+
* The report is consumed by the prompt (stated to the reviewer), by the
|
|
43
|
+
* envelope (a marker on each dimension's summary) and by `needsAttention`
|
|
44
|
+
* (which also clears `allPass`) — see `enforceDeliveryReachability` and
|
|
45
|
+
* `renderDeliveryReachabilityStatus`. It is a LOUD STATEMENT, not a silent
|
|
46
|
+
* downgrade, and it is deliberately not a throw: a crash would destroy the
|
|
47
|
+
* evidence for the three dimensions that ARE deliverable, and the honest fact
|
|
48
|
+
* here is per-dimension, so it is reported per-dimension.
|
|
49
|
+
*/
|
|
50
|
+
export declare function undeliverableDimensions(collected: readonly CollectedEvidence[]): readonly UndeliverableDimensionEvidence[];
|
|
51
|
+
/**
|
|
52
|
+
* H2 — the envelope half of the same fact. A dimension named by
|
|
53
|
+
* `undeliverableDimensions()` cannot be `pass` (no source on disk can carry its
|
|
54
|
+
* conclusion), so this is not where the verdict is decided — that is
|
|
55
|
+
* `enforceEvidenceBackedVerdicts`, and this gate re-applies it so the property
|
|
56
|
+
* does not depend on that gate's order. What this adds is the REASON: the
|
|
57
|
+
* dimension's own summary says it is red by construction. Because the verdict
|
|
58
|
+
* it leaves behind is non-`pass`, the dimension also reaches `needsAttention`
|
|
59
|
+
* (and clears `allPass`) through the ordinary verdict route, which is the field
|
|
60
|
+
* the CLI envelope prints — so the human is told WHY instead of being left to
|
|
61
|
+
* read a permanent red as the reviewer's uncertainty.
|
|
62
|
+
*/
|
|
63
|
+
export declare function enforceDeliveryReachability(dimensions: readonly DimensionEvidence[], report: readonly UndeliverableDimensionEvidence[]): readonly DimensionEvidence[];
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
// src/services/final-review/final-review-delivery.ts
|
|
2
|
+
//
|
|
3
|
+
// H2 — the delivery-reachability analysis and its envelope gate. The
|
|
4
|
+
// judgement itself stays delegated to isDelivered, which remains in the
|
|
5
|
+
// service module (guard C pins it there) — this module asks it.
|
|
6
|
+
// Hoisted verbatim from final-review-service.ts (C wave 7 file-size
|
|
7
|
+
// split).
|
|
8
|
+
import { isDelivered } from './final-review-service.js';
|
|
9
|
+
import { MAX_EVIDENCE_BYTES_PER_FILE, REQUIRED_DIMENSIONS } from './final-review-evidence-budget.js';
|
|
10
|
+
/**
|
|
11
|
+
* Can this source EVER be delivered, whatever the budget?
|
|
12
|
+
*
|
|
13
|
+
* `whole` is the only rule with a structural ceiling. Its test is
|
|
14
|
+
* `includedBytes === totalBytes`, and the allocator can only ever inline
|
|
15
|
+
* `min(bytes, MAX_EVIDENCE_BYTES_PER_FILE)` — so a `whole`-rule source LARGER
|
|
16
|
+
* than the per-file cap can never be delivered: not on this run, not on any
|
|
17
|
+
* run, not with any budget, because the budget is not what cuts it. Raising
|
|
18
|
+
* `MAX_EVIDENCE_BYTES_TOTAL` changes nothing either, since the per-file cap is
|
|
19
|
+
* derived from it and the reservation spends all of it.
|
|
20
|
+
*
|
|
21
|
+
* (`conclusion` sources are deliberately NOT covered. A marker missing from the
|
|
22
|
+
* first cap-sized bytes of an oversize artifact might simply live past the cut,
|
|
23
|
+
* so "undeliverable forever" is not a claim this module can make about them —
|
|
24
|
+
* and an over-claiming check is the failure mode this file keeps closing.)
|
|
25
|
+
*/
|
|
26
|
+
function isStructurallyUndeliverable(item) {
|
|
27
|
+
if (item.source.delivery.kind !== 'whole')
|
|
28
|
+
return false;
|
|
29
|
+
return item.totalBytes > MAX_EVIDENCE_BYTES_PER_FILE;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* H2 — every required dimension whose verdict is locked to `inconclusive` by
|
|
33
|
+
* BYTE ARITHMETIC rather than by the reviewer's judgement.
|
|
34
|
+
*
|
|
35
|
+
* The defect this exists for: `qa/test-reports/<rid>.md` measured 9,492 bytes
|
|
36
|
+
* on this repo's own run and is the ONLY source on disk for `problem-resolution`
|
|
37
|
+
* and `no-new-bugs` (the other sources that support them are absent), against a
|
|
38
|
+
* per-file cap of 10,240 — a 748-byte margin on a file that is REWRITTEN every
|
|
39
|
+
* round and only grows. The moment it crosses 10,240 both dimensions go
|
|
40
|
+
* permanently red, and NOTHING said so: `assertFloorReservationAffordable()`
|
|
41
|
+
* only checks the constant-level relation (`4 x cap <= total`), never whether
|
|
42
|
+
* any actual source fits the cap it must live under, so the red handoff read as
|
|
43
|
+
* "the reviewer was unsure" instead of "no evidence can ever reach the
|
|
44
|
+
* reviewer". A gate that is always red and never explains itself is noise, and
|
|
45
|
+
* this is the same "always red" harm the floor reservation was built to remove
|
|
46
|
+
* — one layer down.
|
|
47
|
+
*
|
|
48
|
+
* The conditions, all three of which must hold, are chosen so the report cannot
|
|
49
|
+
* be noise:
|
|
50
|
+
* 1. NOTHING on disk can back the dimension (no `isDelivered`), and
|
|
51
|
+
* 2. there IS something on disk to deliver (a source that was never written
|
|
52
|
+
* is not a delivery failure — same reasoning as the scope-contract gate's
|
|
53
|
+
* `missing` exemption: a run with no QA phase has no report to lose), and
|
|
54
|
+
* 3. EVERY one of those on-disk sources is structurally undeliverable — a
|
|
55
|
+
* single source that merely did not fit TODAY (budget-exhausted `omitted`)
|
|
56
|
+
* is a different, self-correcting state and is left to the allocator.
|
|
57
|
+
*
|
|
58
|
+
* The report is consumed by the prompt (stated to the reviewer), by the
|
|
59
|
+
* envelope (a marker on each dimension's summary) and by `needsAttention`
|
|
60
|
+
* (which also clears `allPass`) — see `enforceDeliveryReachability` and
|
|
61
|
+
* `renderDeliveryReachabilityStatus`. It is a LOUD STATEMENT, not a silent
|
|
62
|
+
* downgrade, and it is deliberately not a throw: a crash would destroy the
|
|
63
|
+
* evidence for the three dimensions that ARE deliverable, and the honest fact
|
|
64
|
+
* here is per-dimension, so it is reported per-dimension.
|
|
65
|
+
*/
|
|
66
|
+
export function undeliverableDimensions(collected) {
|
|
67
|
+
const report = [];
|
|
68
|
+
for (const dimension of REQUIRED_DIMENSIONS) {
|
|
69
|
+
const supporting = collected.filter((item) => item.source.supports.includes(dimension));
|
|
70
|
+
if (supporting.some((item) => isDelivered(item, dimension)))
|
|
71
|
+
continue;
|
|
72
|
+
const onDisk = supporting.filter((item) => item.totalBytes > 0);
|
|
73
|
+
if (onDisk.length === 0)
|
|
74
|
+
continue;
|
|
75
|
+
if (!onDisk.every(isStructurallyUndeliverable))
|
|
76
|
+
continue;
|
|
77
|
+
report.push({
|
|
78
|
+
dimension,
|
|
79
|
+
sources: onDisk.map((item) => ({
|
|
80
|
+
key: item.source.key,
|
|
81
|
+
relativePath: item.relativePath,
|
|
82
|
+
totalBytes: item.totalBytes
|
|
83
|
+
}))
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return report;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* H2 — the envelope half of the same fact. A dimension named by
|
|
90
|
+
* `undeliverableDimensions()` cannot be `pass` (no source on disk can carry its
|
|
91
|
+
* conclusion), so this is not where the verdict is decided — that is
|
|
92
|
+
* `enforceEvidenceBackedVerdicts`, and this gate re-applies it so the property
|
|
93
|
+
* does not depend on that gate's order. What this adds is the REASON: the
|
|
94
|
+
* dimension's own summary says it is red by construction. Because the verdict
|
|
95
|
+
* it leaves behind is non-`pass`, the dimension also reaches `needsAttention`
|
|
96
|
+
* (and clears `allPass`) through the ordinary verdict route, which is the field
|
|
97
|
+
* the CLI envelope prints — so the human is told WHY instead of being left to
|
|
98
|
+
* read a permanent red as the reviewer's uncertainty.
|
|
99
|
+
*/
|
|
100
|
+
export function enforceDeliveryReachability(dimensions, report) {
|
|
101
|
+
if (report.length === 0)
|
|
102
|
+
return dimensions;
|
|
103
|
+
const byDimension = new Map(report.map((entry) => [entry.dimension, entry]));
|
|
104
|
+
return dimensions.map((dimension) => {
|
|
105
|
+
const entry = byDimension.get(dimension.dimension);
|
|
106
|
+
if (entry === undefined)
|
|
107
|
+
return dimension;
|
|
108
|
+
// The ENVELOPE is not byte-capped, so it names the path as well as the
|
|
109
|
+
// size: the path is what a human has to act on to fix it.
|
|
110
|
+
const detail = entry.sources
|
|
111
|
+
.map((item) => `${item.key} at ${item.relativePath} (${String(item.totalBytes)} bytes)`)
|
|
112
|
+
.join(', ');
|
|
113
|
+
const marker = `[delivery-reachability: ${dimension.verdict === 'pass'
|
|
114
|
+
? 'verdict downgraded from "pass" to "inconclusive"'
|
|
115
|
+
: `gate ran; verdict "${dimension.verdict}" is already non-"pass" and is left unchanged`} — EVERY source on disk that supports "${dimension.dimension}" (${detail}) is larger than the per-file delivery cap of ${String(MAX_EVIDENCE_BYTES_PER_FILE)} bytes, and a source is inlined WHOLE or not at all, so no evidence for this dimension can ever reach the reviewer. The dimension is red by byte arithmetic, not by the reviewer's judgement, and it is listed in needsAttention for that reason.]`;
|
|
116
|
+
const annotated = {
|
|
117
|
+
...dimension,
|
|
118
|
+
summary: `${dimension.summary} ${marker}`
|
|
119
|
+
};
|
|
120
|
+
if (dimension.verdict !== 'pass')
|
|
121
|
+
return annotated;
|
|
122
|
+
return { ...annotated, verdict: 'inconclusive', confidence: 'low' };
|
|
123
|
+
});
|
|
124
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import type { DimensionKind } from './final-review-types.js';
|
|
2
|
+
import type { EvidenceCandidate } from './final-review-evidence-sources.js';
|
|
3
|
+
export declare const REQUIRED_DIMENSIONS: readonly DimensionKind[];
|
|
4
|
+
/**
|
|
5
|
+
* Total evidence budget across all sources. 40 KB ≈ 10k tokens of input, which
|
|
6
|
+
* keeps the prompt far inside any modern context window. Sources that do not
|
|
7
|
+
* fit are reported as OMITTED — never dropped silently.
|
|
8
|
+
*
|
|
9
|
+
* This is an INPUT cap and stays fixed per run. The output ceiling that has to
|
|
10
|
+
* sit opposite it is derived per call by `outputBudgetForEvidence()` below —
|
|
11
|
+
* the two used to drift apart, and that drift was the defect.
|
|
12
|
+
*
|
|
13
|
+
* RE-EVALUATED 2026-09-12 (F-BLOCK) — 32 KiB did NOT hold once the tenth
|
|
14
|
+
* source (`final-review-pre-post-diff`) was appended. Measured on this repo's
|
|
15
|
+
* own run (`2026-09-12-session-e37ef0`, rid
|
|
16
|
+
* `2026-09-12-codegraph-exclude-integrity`), the ten sources are 2,621 / 8,164
|
|
17
|
+
* / 9,492 / 10,839 / 11,422 / 13,050 / 13,462 / 13,852 / 17,745 / 20,543
|
|
18
|
+
* bytes — 121,190 bytes on disk, 76,321 bytes once the 8 KiB per-file cap is
|
|
19
|
+
* applied. Four sources at the cap spent the old 32,768 to the byte, so the
|
|
20
|
+
* appended tenth (added LAST, by design) was the first block the budget
|
|
21
|
+
* dropped — on every run, and on the compact set QA measured too (9 x 3.8 KB
|
|
22
|
+
* ≈ 34 KB, which the old cap already could not hold).
|
|
23
|
+
*
|
|
24
|
+
* 40 KiB is a budget that fits the measured ten-source set at the allocator's
|
|
25
|
+
* per-source unit (5 x 8 KiB units + the smaller ones), and it is the largest
|
|
26
|
+
* this budget may grow to today: the derived output ceiling is
|
|
27
|
+
* `3000 + 12288 + bytes/4`, so it reaches MAX_OUTPUT_TOKENS (32,000) at exactly
|
|
28
|
+
* 66,848 bytes of inlined evidence and is clamped from there on — a cap at or
|
|
29
|
+
* above that point buys the reviewer no more output room at all.
|
|
30
|
+
*
|
|
31
|
+
* F-CAP — an earlier version of this comment claimed 40 KiB (40,960 =
|
|
32
|
+
* 10 x 4,096) was "the smallest cap that affords one floor-sized slice to EVERY
|
|
33
|
+
* source in the ten-source set". That was arithmetic about a budget, not a
|
|
34
|
+
* statement about the allocator: sources are capped at
|
|
35
|
+
* MAX_EVIDENCE_BYTES_PER_FILE (10 KiB each, derived — see below) while a floor
|
|
36
|
+
* is per DIMENSION (four of them), so 10 x 4,096 was never what any source
|
|
37
|
+
* received. Re-measured on
|
|
38
|
+
* the same two saturated fixtures (QA round 4: the 9 x 40 KB fixture and this
|
|
39
|
+
* repo's own file sizes), raising the cap from 32 KiB to 40 KiB left **4 of the
|
|
40
|
+
* 10 sources inlined with zero bytes** — `rd/security-review`,
|
|
41
|
+
* `rd/bug-analysis`, `prd/handoff` and the appended
|
|
42
|
+
* `final-review-pre-post-diff` — and it did not deliver the baseline either;
|
|
43
|
+
* all it did was change WHICH source was starved (at 32 KiB that source was
|
|
44
|
+
* `rd/code-review`).
|
|
45
|
+
*
|
|
46
|
+
* So read this constant as "how much evidence fits", never as "which sources
|
|
47
|
+
* arrive". Arrival is decided by the allocator below (one whole unit per source,
|
|
48
|
+
* with a dimension's floor reserving its holder's unit) and, for the two sources
|
|
49
|
+
* a dimension's verdict may not outlive, by the delivery gates on top of it.
|
|
50
|
+
* And note the honest consequence, stated rather than papered over: on a
|
|
51
|
+
* saturated run the allocator still omits sources, so `prd/handoff.md` and the
|
|
52
|
+
* pre/post diff can be dropped — which is exactly why
|
|
53
|
+
* `enforceScopeContractDelivery()` and `enforcePrePostDiffAvailability()` exist
|
|
54
|
+
* and why a `pass` on those two dimensions is keyed on delivery, not on
|
|
55
|
+
* existence.
|
|
56
|
+
*/
|
|
57
|
+
export declare const MAX_EVIDENCE_BYTES_TOTAL = 40960;
|
|
58
|
+
/**
|
|
59
|
+
* Per-file evidence cap — and the allocator's UNIT. DERIVED, never typed.
|
|
60
|
+
*
|
|
61
|
+
* F5 — this used to be the literal `8 * 1024`, and the whole floor guarantee
|
|
62
|
+
* below was silently conditioned on `4 x perFile <= total`: the reservation
|
|
63
|
+
* promises every pending holder its own unit, and that promise holds only while
|
|
64
|
+
* the four units fit the budget together. At `8 * 1024` the inequality held by
|
|
65
|
+
* coincidence (4 x 8,192 = 32,768 <= 40,960) and nothing in the code said so —
|
|
66
|
+
* raising the cap past 10,240 would have starved all four dimensions in the
|
|
67
|
+
* same run, which reads as four independent red gates rather than one broken
|
|
68
|
+
* constant. The cap is therefore DIVIDED OUT OF the total: the relation is
|
|
69
|
+
* definitional instead of remembered, and `assertFloorReservationAffordable()`
|
|
70
|
+
* still checks it at the point of use (the division must also be exact).
|
|
71
|
+
*
|
|
72
|
+
* The value is 10,240 because that is `40,960 / 4` — the largest unit the
|
|
73
|
+
* four-dimension reservation can afford. It is also the smallest cap at which
|
|
74
|
+
* the decisive evidence source of this repo's own run can be delivered WHOLE:
|
|
75
|
+
* `qa/test-reports/<rid>.md` measured 9,492 bytes there, and `whole` is the
|
|
76
|
+
* delivery rule for every source whose producer publishes no conclusion literal
|
|
77
|
+
* (see `isDelivered`), so a cap under 9,492 makes `problem-resolution` and
|
|
78
|
+
* `no-new-bugs` undeliverable on every run — the always-red gate this module
|
|
79
|
+
* refuses to ship. Enforced in BYTES against the raw buffer, so multi-byte
|
|
80
|
+
* (CJK) content cannot slip past the cap.
|
|
81
|
+
*
|
|
82
|
+
* A source is inlined as `min(bytes, this cap)` — its whole unit — or not at
|
|
83
|
+
* all. So a `TRUNCATED` source block can only ever mean "the FILE is bigger
|
|
84
|
+
* than this cap"; it can no longer mean "the budget ran out while this file was
|
|
85
|
+
* being copied in". That distinction is the point of the all-or-nothing
|
|
86
|
+
* allocator below: the second reading is what let one byte of a 4,226-byte
|
|
87
|
+
* artifact be counted as delivered evidence (F-BLOCK-1BYTE).
|
|
88
|
+
*/
|
|
89
|
+
export declare const MAX_EVIDENCE_BYTES_PER_FILE: number;
|
|
90
|
+
/**
|
|
91
|
+
* The unit the allocator hands out: one source's WHOLE slice — its bytes up to
|
|
92
|
+
* the per-file cap — or nothing at all.
|
|
93
|
+
*
|
|
94
|
+
* F-BLOCK-1BYTE — the allocator used to take `min(perFileCap, budgetLeft)`, so
|
|
95
|
+
* the last source the budget reached was cut wherever the budget ran out.
|
|
96
|
+
* `status: 'found'` then meant "at least one byte arrived", and every gate that
|
|
97
|
+
* asked "did the reviewer see this source?" was answering a question with a
|
|
98
|
+
* continuum of possible answers. The observed output (QA round 4, 9 x 4,551 B
|
|
99
|
+
* sources, `api-diff.txt` at 4,226 B): the pre/post diff was inlined as **1
|
|
100
|
+
* byte** — the character `#` — while the producer block still said
|
|
101
|
+
* `STATUS: COMPUTED … cite it`, the dimension kept its `pass`/`high`, the
|
|
102
|
+
* artifact was attached as evidence, and the envelope returned `allPass: true`.
|
|
103
|
+
* Each earlier fix had moved the threshold that separated "some bytes" from
|
|
104
|
+
* "the evidence"; this removes the continuum instead, so no predicate can be
|
|
105
|
+
* re-tuned into the same hole a fifth time.
|
|
106
|
+
*/
|
|
107
|
+
export declare function sourceUnit(candidate: EvidenceCandidate): number;
|
|
108
|
+
/**
|
|
109
|
+
* F5 — the floor promise, checked where it is relied on instead of remembered.
|
|
110
|
+
*
|
|
111
|
+
* The allocator's loop invariant is `budgetLeft >= sum(units of pending
|
|
112
|
+
* holders)`, and its INITIAL condition is
|
|
113
|
+
* `REQUIRED_DIMENSIONS.length x MAX_EVIDENCE_BYTES_PER_FILE <=
|
|
114
|
+
* MAX_EVIDENCE_BYTES_TOTAL`. While that holds, every holder is served when it
|
|
115
|
+
* is reached and the reservation is a guarantee; the moment it fails, all four
|
|
116
|
+
* dimensions are starved in the same run — which surfaces as four independent
|
|
117
|
+
* red gates rather than as one broken constant, and is therefore the kind of
|
|
118
|
+
* breakage nobody diagnoses correctly.
|
|
119
|
+
*
|
|
120
|
+
* The cap is derived from the total so the inequality cannot be typed wrong,
|
|
121
|
+
* and this check covers the two ways a derivation can still go bad: a
|
|
122
|
+
* non-integer quotient (a fifth dimension, say) and a future re-typing of
|
|
123
|
+
* either constant. It is exported because a test asserts it directly.
|
|
124
|
+
*/
|
|
125
|
+
export declare function assertFloorReservationAffordable(): void;
|