peaks-loop 4.0.54 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -0
- package/README-en.md +16 -1
- package/README.md +15 -1
- package/config/eslint/.peaks-rules.cjs +158 -13
- package/config/eslint/tsconfig.lint.json +47 -0
- package/dist/cli/cli-envelope.d.ts +114 -0
- package/dist/cli/cli-envelope.js +85 -0
- package/dist/cli/cli-helpers.d.ts +1 -1
- package/dist/cli/cli-helpers.js +8 -4
- package/dist/cli/commands/_cli-error-envelope.js +1 -1
- package/dist/cli/commands/_register.js +85 -38
- package/dist/cli/commands/_super.js +40 -7
- package/dist/cli/commands/adapter-commands-s2a.js +8 -7
- package/dist/cli/commands/adapter-commands.d.ts +2 -2
- package/dist/cli/commands/adapter-commands.js +7 -8
- package/dist/cli/commands/api-diff-commands.js +5 -4
- package/dist/cli/commands/asset-commands.d.ts +2 -2
- package/dist/cli/commands/asset-commands.js +135 -132
- package/dist/cli/commands/audit-commands.d.ts +1 -1
- package/dist/cli/commands/audit-commands.js +75 -32
- package/dist/cli/commands/autonomous-swarm-commands.d.ts +1 -1
- package/dist/cli/commands/autonomous-swarm-commands.js +14 -8
- package/dist/cli/commands/baseline-commands.js +34 -9
- package/dist/cli/commands/bee-commands.d.ts +1 -1
- package/dist/cli/commands/bee-commands.js +18 -21
- package/dist/cli/commands/best-practice-scan-command.js +6 -34
- package/dist/cli/commands/best-practice-scan-helpers.d.ts +12 -0
- package/dist/cli/commands/best-practice-scan-helpers.js +37 -0
- package/dist/cli/commands/capability-commands.d.ts +1 -1
- package/dist/cli/commands/capability-commands.js +14 -4
- package/dist/cli/commands/capability-worker-config-sc-commands.d.ts +1 -1
- package/dist/cli/commands/changeset-commands.js +21 -18
- package/dist/cli/commands/code-gate-command.js +9 -2
- package/dist/cli/commands/code-job-shape-commands-read-job-shape.d.ts +15 -0
- package/dist/cli/commands/code-job-shape-commands-read-job-shape.js +70 -0
- package/dist/cli/commands/code-job-shape-commands.js +21 -45
- package/dist/cli/commands/code-mode-gate-commands.d.ts +15 -1
- package/dist/cli/commands/code-mode-gate-commands.js +19 -199
- package/dist/cli/commands/code-mode-gate-plan-command.d.ts +14 -0
- package/dist/cli/commands/code-mode-gate-plan-command.js +23 -0
- package/dist/cli/commands/code-mode-gate-should-pause-command.d.ts +24 -0
- package/dist/cli/commands/code-mode-gate-should-pause-command.js +137 -0
- package/dist/cli/commands/code-mode-gate-should-pause-envelope.d.ts +59 -0
- package/dist/cli/commands/code-mode-gate-should-pause-envelope.js +144 -0
- package/dist/cli/commands/code-orchestrator-can-do.js +4 -4
- package/dist/cli/commands/code-review-commands.js +18 -3
- package/dist/cli/commands/code-run-command.js +44 -7
- package/dist/cli/commands/code-runtime-commands.d.ts +17 -0
- package/dist/cli/commands/code-runtime-commands.js +105 -73
- package/dist/cli/commands/codegraph-commands.js +11 -6
- package/dist/cli/commands/codegraph-status-command.js +6 -2
- package/dist/cli/commands/compact-command.js +52 -26
- package/dist/cli/commands/complexity-commands.js +6 -7
- package/dist/cli/commands/config-commands.d.ts +1 -1
- package/dist/cli/commands/config-commands.js +33 -9
- package/dist/cli/commands/container-commands.js +39 -15
- package/dist/cli/commands/context-commands.d.ts +1 -1
- package/dist/cli/commands/context-commands.js +40 -13
- package/dist/cli/commands/core/artifacts-command.js +11 -3
- package/dist/cli/commands/core/binding-commands.js +9 -6
- package/dist/cli/commands/core/doctor-command.js +7 -4
- package/dist/cli/commands/core/memory-command.js +47 -21
- package/dist/cli/commands/core/proxy-command.js +3 -1
- package/dist/cli/commands/core/session-command.js +16 -8
- package/dist/cli/commands/core/skill-command.js +31 -16
- package/dist/cli/commands/core/standards-command.js +55 -13
- package/dist/cli/commands/cron-commands-actions.d.ts +43 -0
- package/dist/cli/commands/cron-commands-actions.js +128 -0
- package/dist/cli/commands/cron-commands-schedule.d.ts +86 -0
- package/dist/cli/commands/cron-commands-schedule.js +151 -0
- package/dist/cli/commands/cron-commands.d.ts +35 -32
- package/dist/cli/commands/cron-commands.js +167 -211
- package/dist/cli/commands/cron-scheduler-commands.js +40 -20
- package/dist/cli/commands/cron-scheduler-persist.d.ts +110 -0
- package/dist/cli/commands/cron-scheduler-persist.js +171 -0
- package/dist/cli/commands/dashboard-long-run.js +45 -14
- package/dist/cli/commands/dashboard-summary.js +15 -5
- package/dist/cli/commands/dispatch-commands.js +65 -32
- package/dist/cli/commands/dispatch-from-dag.js +9 -10
- package/dist/cli/commands/doc-commands.js +8 -9
- package/dist/cli/commands/doctor/invoke-from-code.js +1 -1
- package/dist/cli/commands/e2e-verify-env.d.ts +19 -0
- package/dist/cli/commands/e2e-verify-env.js +19 -0
- package/dist/cli/commands/e2e-verify.d.ts +3 -14
- package/dist/cli/commands/e2e-verify.js +49 -29
- package/dist/cli/commands/ecc-commands.d.ts +1 -1
- package/dist/cli/commands/ecc-commands.js +8 -17
- package/dist/cli/commands/evidence-commands.js +10 -6
- package/dist/cli/commands/evolution-commands.d.ts +2 -2
- package/dist/cli/commands/evolution-commands.js +109 -115
- package/dist/cli/commands/feedback-commands-helpers.d.ts +22 -0
- package/dist/cli/commands/feedback-commands-helpers.js +33 -0
- package/dist/cli/commands/feedback-commands.js +15 -38
- package/dist/cli/commands/final-review-commands.d.ts +1 -1
- package/dist/cli/commands/final-review-commands.js +24 -22
- package/dist/cli/commands/fixture-commands.d.ts +1 -1
- package/dist/cli/commands/fixture-commands.js +17 -6
- package/dist/cli/commands/fork-commands-sync-verify.d.ts +12 -0
- package/dist/cli/commands/fork-commands-sync-verify.js +72 -0
- package/dist/cli/commands/fork-commands.js +19 -51
- package/dist/cli/commands/fresh-context-commands.js +3 -1
- package/dist/cli/commands/gate-commands-enforce.d.ts +82 -0
- package/dist/cli/commands/gate-commands-enforce.js +210 -0
- package/dist/cli/commands/gate-commands.d.ts +1 -1
- package/dist/cli/commands/gate-commands.js +85 -205
- package/dist/cli/commands/governance-classify-contract-commands.d.ts +1 -1
- package/dist/cli/commands/governance-classify-contract-commands.js +28 -17
- package/dist/cli/commands/heartbeat-commands-action.d.ts +7 -0
- package/dist/cli/commands/heartbeat-commands-action.js +192 -0
- package/dist/cli/commands/heartbeat-commands-validation.d.ts +57 -0
- package/dist/cli/commands/heartbeat-commands-validation.js +120 -0
- package/dist/cli/commands/heartbeat-commands.d.ts +27 -6
- package/dist/cli/commands/heartbeat-commands.js +19 -198
- package/dist/cli/commands/hook-handle.d.ts +1 -1
- package/dist/cli/commands/hook-handle.js +46 -13
- package/dist/cli/commands/hooks-commands.d.ts +1 -1
- package/dist/cli/commands/hooks-commands.js +18 -6
- package/dist/cli/commands/ide-commands.d.ts +1 -1
- package/dist/cli/commands/ide-commands.js +5 -3
- package/dist/cli/commands/impact-commands.js +8 -2
- package/dist/cli/commands/job-add-slice-command.d.ts +43 -0
- package/dist/cli/commands/job-add-slice-command.js +151 -0
- package/dist/cli/commands/job-commands.d.ts +64 -0
- package/dist/cli/commands/job-commands.js +134 -63
- package/dist/cli/commands/lease-metrics-commands-support.d.ts +73 -0
- package/dist/cli/commands/lease-metrics-commands-support.js +67 -0
- package/dist/cli/commands/lease-metrics-commands.d.ts +3 -44
- package/dist/cli/commands/lease-metrics-commands.js +21 -61
- package/dist/cli/commands/lease-stats-commands.d.ts +1 -1
- package/dist/cli/commands/lease-stats-commands.js +9 -6
- package/dist/cli/commands/lint-commands.d.ts +9 -3
- package/dist/cli/commands/lint-commands.js +15 -8
- package/dist/cli/commands/log-commands.d.ts +1 -1
- package/dist/cli/commands/log-commands.js +8 -6
- package/dist/cli/commands/loop-commands.d.ts +1 -1
- package/dist/cli/commands/loop-commands.js +50 -50
- package/dist/cli/commands/loop-eval-commands.d.ts +1 -1
- package/dist/cli/commands/loop-eval-commands.js +101 -30
- package/dist/cli/commands/memory-commands.js +21 -13
- package/dist/cli/commands/migrate-1-4-1-command.js +1 -1
- package/dist/cli/commands/migrate-v2-10-to-v2-11-command.js +2 -2
- package/dist/cli/commands/mut-commands-helpers.d.ts +30 -0
- package/dist/cli/commands/mut-commands-helpers.js +43 -0
- package/dist/cli/commands/mut-commands.js +16 -58
- package/dist/cli/commands/observability-commands-queries.d.ts +37 -0
- package/dist/cli/commands/observability-commands-queries.js +113 -0
- package/dist/cli/commands/observability-commands.d.ts +1 -1
- package/dist/cli/commands/observability-commands.js +7 -92
- package/dist/cli/commands/openspec-commands.d.ts +1 -1
- package/dist/cli/commands/openspec-commands.js +20 -8
- package/dist/cli/commands/outer-cache-commands.js +18 -7
- package/dist/cli/commands/perf-audit-commands.d.ts +1 -1
- package/dist/cli/commands/perf-audit-commands.js +12 -7
- package/dist/cli/commands/perf-commands.d.ts +1 -1
- package/dist/cli/commands/perf-commands.js +5 -5
- package/dist/cli/commands/playwright-commands.d.ts +1 -1
- package/dist/cli/commands/playwright-commands.js +20 -8
- package/dist/cli/commands/polyrepo-commands.js +21 -19
- package/dist/cli/commands/prd-blocks-commands.js +1 -3
- package/dist/cli/commands/prd-commands.d.ts +1 -1
- package/dist/cli/commands/prd-commands.js +8 -4
- package/dist/cli/commands/preferences-commands.js +13 -12
- package/dist/cli/commands/primer-command.js +5 -5
- package/dist/cli/commands/project-commands.d.ts +1 -1
- package/dist/cli/commands/project-commands.js +33 -9
- package/dist/cli/commands/qa-business-review-commands.js +16 -12
- package/dist/cli/commands/qa-commands.d.ts +1 -1
- package/dist/cli/commands/qa-commands.js +3 -5
- package/dist/cli/commands/release-commands.d.ts +3 -1
- package/dist/cli/commands/release-commands.js +33 -22
- package/dist/cli/commands/request-commands.js +47 -30
- package/dist/cli/commands/request-format-helpers.js +1 -1
- package/dist/cli/commands/retrospective-commands.d.ts +18 -11
- package/dist/cli/commands/retrospective-commands.js +24 -173
- package/dist/cli/commands/retrospective-index-command.d.ts +26 -0
- package/dist/cli/commands/retrospective-index-command.js +99 -0
- package/dist/cli/commands/retrospective-project-root.d.ts +9 -0
- package/dist/cli/commands/retrospective-project-root.js +15 -0
- package/dist/cli/commands/retrospective-search-command.d.ts +27 -0
- package/dist/cli/commands/retrospective-search-command.js +97 -0
- package/dist/cli/commands/retrospective-show-command.d.ts +23 -0
- package/dist/cli/commands/retrospective-show-command.js +80 -0
- package/dist/cli/commands/reviewer-commands.d.ts +1 -1
- package/dist/cli/commands/role-commands.js +14 -9
- package/dist/cli/commands/runtime-commands.js +14 -7
- package/dist/cli/commands/sc-commands.d.ts +1 -1
- package/dist/cli/commands/sc-commands.js +39 -6
- package/dist/cli/commands/scan-commands.js +36 -13
- package/dist/cli/commands/security-audit-commands.d.ts +1 -1
- package/dist/cli/commands/security-audit-commands.js +12 -7
- package/dist/cli/commands/sediment-commands.d.ts +2 -2
- package/dist/cli/commands/sediment-commands.js +146 -139
- package/dist/cli/commands/session-24h-mode.js +15 -2
- package/dist/cli/commands/session-checkpoint-command.js +1 -1
- package/dist/cli/commands/session-migrate-skill-name.js +1 -1
- package/dist/cli/commands/shadcn-commands.d.ts +1 -1
- package/dist/cli/commands/shadcn-commands.js +3 -1
- package/dist/cli/commands/share-commands.js +38 -39
- package/dist/cli/commands/skill-conformance-commands.d.ts +1 -1
- package/dist/cli/commands/skill-conformance-commands.js +1 -1
- package/dist/cli/commands/skill-loop-engineering-readiness-commands.js +16 -17
- package/dist/cli/commands/skill-visibility.js +2 -2
- package/dist/cli/commands/slice-commands.d.ts +1 -1
- package/dist/cli/commands/slice-commands.js +36 -12
- package/dist/cli/commands/slice-integrate-commands.js +6 -7
- package/dist/cli/commands/slice-review-commands-helpers.d.ts +26 -0
- package/dist/cli/commands/slice-review-commands-helpers.js +26 -0
- package/dist/cli/commands/slice-review-commands.js +16 -24
- package/dist/cli/commands/smoke-commands-add-path.d.ts +14 -0
- package/dist/cli/commands/smoke-commands-add-path.js +39 -0
- package/dist/cli/commands/smoke-commands-define.d.ts +18 -0
- package/dist/cli/commands/smoke-commands-define.js +97 -0
- package/dist/cli/commands/smoke-commands-run.d.ts +18 -0
- package/dist/cli/commands/smoke-commands-run.js +119 -0
- package/dist/cli/commands/smoke-commands.d.ts +10 -1
- package/dist/cli/commands/smoke-commands.js +17 -179
- package/dist/cli/commands/sop-commands.d.ts +1 -1
- package/dist/cli/commands/sop-commands.js +38 -10
- package/dist/cli/commands/statusline-commands.d.ts +1 -1
- package/dist/cli/commands/statusline-commands.js +21 -10
- package/dist/cli/commands/sub-agent/detached.js +3 -3
- package/dist/cli/commands/sub-agent-dispatch-guard.d.ts +1 -1
- package/dist/cli/commands/sub-agent-shared.js +1 -1
- package/dist/cli/commands/sub-agent-shutdown-commands.js +17 -9
- package/dist/cli/commands/swarm-commands.d.ts +1 -1
- package/dist/cli/commands/swarm-commands.js +13 -6
- package/dist/cli/commands/tech-commands-helpers.d.ts +37 -0
- package/dist/cli/commands/tech-commands-helpers.js +24 -0
- package/dist/cli/commands/tech-commands.d.ts +2 -29
- package/dist/cli/commands/tech-commands.js +15 -28
- package/dist/cli/commands/test-commands.js +27 -7
- package/dist/cli/commands/upgrade-commands.d.ts +1 -1
- package/dist/cli/commands/user-touchpoint-commands.js +1 -3
- package/dist/cli/commands/verdict-aggregate-command.d.ts +1 -1
- package/dist/cli/commands/verdict-aggregate-command.js +20 -7
- package/dist/cli/commands/vm-commands.js +48 -19
- package/dist/cli/commands/wave-plan-commands.js +5 -2
- package/dist/cli/commands/web-commands.js +14 -4
- package/dist/cli/commands/web-lifecycle-commands.js +5 -3
- package/dist/cli/commands/workflow-commands.d.ts +1 -1
- package/dist/cli/commands/workflow-commands.js +64 -29
- package/dist/cli/commands/workflow-lifecycle-commands.js +19 -17
- package/dist/cli/commands/workflow-plan-commands-actions.d.ts +20 -0
- package/dist/cli/commands/workflow-plan-commands-actions.js +115 -0
- package/dist/cli/commands/workflow-plan-commands-session.d.ts +17 -0
- package/dist/cli/commands/workflow-plan-commands-session.js +59 -0
- package/dist/cli/commands/workflow-plan-commands.d.ts +10 -21
- package/dist/cli/commands/workflow-plan-commands.js +15 -141
- package/dist/cli/commands/workspace/clean-command.js +4 -1
- package/dist/cli/commands/workspace/helpers.js +2 -1
- package/dist/cli/commands/workspace/init-command.js +80 -20
- package/dist/cli/commands/workspace/reconcile-command.js +3 -1
- package/dist/cli/commands/workspace-commands.d.ts +1 -1
- package/dist/cli/commands/workspace-commands.js +1 -1
- package/dist/cli/commands/worktree-auth-commands.d.ts +1 -1
- package/dist/cli/commands/worktree-auth-commands.js +16 -169
- package/dist/cli/commands/worktree-auth-grant-command.d.ts +14 -0
- package/dist/cli/commands/worktree-auth-grant-command.js +118 -0
- package/dist/cli/commands/worktree-auth-manage-commands.d.ts +17 -0
- package/dist/cli/commands/worktree-auth-manage-commands.js +128 -0
- package/dist/cli/commands/worktree-lease-commands.d.ts +1 -1
- package/dist/cli/commands/worktree-lease-commands.js +65 -37
- package/dist/cli/index.js +6 -2
- package/dist/cli/program.js +6 -3
- package/dist/hooks/pre-tool-use-sub-agent.js +1 -6
- package/dist/reporters/bdd-reporter.js +9 -3
- package/dist/services/24h-mode/auto-engage.d.ts +19 -0
- package/dist/services/24h-mode/auto-engage.js +35 -0
- package/dist/services/24h-mode/decider.js +5 -1
- package/dist/services/24h-mode/store.js +4 -2
- package/dist/services/adapter/adapter-registry.js +20 -8
- package/dist/services/adapter/adapter.d.ts +2 -2
- package/dist/services/adapter/auto-adapter.d.ts +2 -2
- package/dist/services/adapter/auto-adapter.js +1 -1
- package/dist/services/adapter/claude-adapter.d.ts +1 -1
- package/dist/services/adapter/claude-adapter.js +8 -8
- package/dist/services/adapter/codex-adapter.d.ts +2 -2
- package/dist/services/adapter/codex-adapter.js +20 -8
- package/dist/services/adapter/copilot-adapter.d.ts +2 -2
- package/dist/services/adapter/copilot-adapter.js +20 -8
- package/dist/services/artifacts/artifact-prerequisites.js +10 -8
- package/dist/services/artifacts/artifact-service.js +3 -1
- package/dist/services/artifacts/artifact-template-bodies.d.ts +12 -0
- package/dist/services/artifacts/artifact-template-bodies.js +165 -0
- package/dist/services/artifacts/artifact-templates.js +26 -168
- package/dist/services/artifacts/request-artifact-service.js +14 -7
- package/dist/services/artifacts/request-artifact-state-helpers.d.ts +3 -2
- package/dist/services/artifacts/request-artifact-state-helpers.js +3 -5
- package/dist/services/artifacts/workspace-artifact-helpers.d.ts +28 -0
- package/dist/services/artifacts/workspace-artifact-helpers.js +54 -0
- package/dist/services/artifacts/workspace-service.d.ts +3 -22
- package/dist/services/artifacts/workspace-service.js +10 -60
- package/dist/services/audit/artifact-writer.js +21 -21
- package/dist/services/audit/audit-goal-service.js +2 -2
- package/dist/services/audit/backing-detector.js +7 -4
- package/dist/services/audit/classifier.js +3 -3
- package/dist/services/audit/decision-writer.js +13 -9
- package/dist/services/audit/enforcers/active-skill-resolver.js +15 -7
- package/dist/services/audit/enforcers/design-draft-confirm.js +4 -4
- package/dist/services/audit/enforcers/lint-audit-regression.js +10 -5
- package/dist/services/audit/enforcers/lint-bee-runtime-contract.js +16 -8
- package/dist/services/audit/enforcers/lint-catalog-governance.js +8 -4
- package/dist/services/audit/enforcers/lint-output-style.js +4 -2
- package/dist/services/audit/enforcers/lint-peaks-code-runtime.js +8 -3
- package/dist/services/audit/enforcers/lint-peaks-skill-runtime.js +8 -3
- package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.js +20 -20
- package/dist/services/audit/enforcers/lint-prd-artifact-handoff.js +5 -5
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.d.ts +1 -1
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.js +5 -5
- package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.js +10 -10
- package/dist/services/audit/enforcers/lint-rd-handoff-coverage.js +10 -8
- package/dist/services/audit/enforcers/lint-reference-shape.js +50 -18
- package/dist/services/audit/enforcers/lint-skill-presence-mandatory.js +5 -5
- package/dist/services/audit/enforcers/lint-style.js +44 -11
- package/dist/services/audit/enforcers/lint-workflow-shape.js +4 -2
- package/dist/services/audit/enforcers/login-gate.js +2 -6
- package/dist/services/audit/enforcers/mock-placement.js +2 -2
- package/dist/services/audit/enforcers/no-root-pollution.js +38 -9
- package/dist/services/audit/enforcers/pre-rd-scan.js +1 -1
- package/dist/services/audit/enforcers/prototype-fidelity.js +1 -1
- package/dist/services/audit/enforcers/resume-detection.js +5 -4
- package/dist/services/audit/prose-ratio-calculator.js +1 -1
- package/dist/services/audit/red-line-catalog-p2-a-bee-runtime.d.ts +39 -0
- package/dist/services/audit/red-line-catalog-p2-a-bee-runtime.js +205 -0
- package/dist/services/audit/red-line-catalog-p2-a-lint-style.d.ts +52 -0
- package/dist/services/audit/red-line-catalog-p2-a-lint-style.js +205 -0
- package/dist/services/audit/red-line-catalog-p2-a.js +3 -374
- package/dist/services/audit/red-line-catalog-p2-b.js +26 -26
- package/dist/services/audit/red-line-catalog.js +26 -38
- package/dist/services/audit/red-lines-service.js +64 -49
- package/dist/services/audit/scanners/openspec-scanner.js +2 -2
- package/dist/services/audit/scanners/rules-tree-scanner.js +2 -2
- package/dist/services/audit/scanners/skills-tree-scanner.js +2 -2
- package/dist/services/audit/static-service.js +3 -3
- package/dist/services/audit-independent/index.d.ts +2 -2
- package/dist/services/audit-independent/index.js +2 -2
- package/dist/services/audit-independent/perf-audit-service.js +19 -8
- package/dist/services/audit-independent/security-audit-service.js +31 -16
- package/dist/services/autonomous-swarm/autonomous-swarm-service.js +75 -46
- package/dist/services/best-practice/output-formatter.js +7 -1
- package/dist/services/capability-audit-service/cross-check.js +11 -5
- package/dist/services/capability-audit-service/runner.js +15 -7
- package/dist/services/capability-baseline/store.js +16 -4
- package/dist/services/capability-baseline/types.js +15 -3
- package/dist/services/capability-baseline/validator.js +43 -7
- package/dist/services/capability-guard-runner/contracts/J02.js +36 -6
- package/dist/services/capability-guard-runner/contracts/J03.js +20 -11
- package/dist/services/capability-guard-runner/contracts/J04.js +24 -15
- package/dist/services/capability-guard-runner/contracts/J05.js +26 -10
- package/dist/services/capability-guard-runner/contracts/J07.js +8 -2
- package/dist/services/capability-guard-runner/contracts/J08.js +22 -5
- package/dist/services/capability-guard-runner/contracts/J10.js +6 -2
- package/dist/services/capability-guard-runner/contracts/J11.d.ts +5 -0
- package/dist/services/capability-guard-runner/contracts/J11.js +14 -2
- package/dist/services/capability-guard-runner/contracts/J12.js +12 -3
- package/dist/services/capability-guard-runner/diff.js +1 -5
- package/dist/services/changeset/changeset-check-service.js +1 -3
- package/dist/services/classify/classify-service.js +20 -8
- package/dist/services/classify/classify-types.js +22 -9
- package/dist/services/code/auto-compact-lifecycle.js +62 -39
- package/dist/services/code/auto-compact-modes.js +2 -2
- package/dist/services/code/auto-compact-orchestrator.js +14 -9
- package/dist/services/code/batch-heartbeat-poller.d.ts +10 -0
- package/dist/services/code/batch-heartbeat-poller.js +17 -1
- package/dist/services/code/compact-event-settle-types.d.ts +80 -0
- package/dist/services/code/compact-event-settle-types.js +20 -0
- package/dist/services/code/compact-event-settle.d.ts +3 -68
- package/dist/services/code/compact-event-settle.js +14 -10
- package/dist/services/code/dag-orchestrator.js +32 -26
- package/dist/services/code/job-shape-decision.js +3 -1
- package/dist/services/code/mode-gate-types.d.ts +57 -0
- package/dist/services/code/mode-gate-types.js +67 -0
- package/dist/services/code/mode-gate.d.ts +4 -58
- package/dist/services/code/mode-gate.js +24 -60
- package/dist/services/code/orchestrator-can-do-advisories.d.ts +30 -0
- package/dist/services/code/orchestrator-can-do-advisories.js +81 -0
- package/dist/services/code/orchestrator-can-do-probes.d.ts +30 -0
- package/dist/services/code/orchestrator-can-do-probes.js +77 -0
- package/dist/services/code/orchestrator-can-do.d.ts +11 -22
- package/dist/services/code/orchestrator-can-do.js +37 -137
- package/dist/services/code/post-compact-checkpoint.d.ts +28 -0
- package/dist/services/code/post-compact-checkpoint.js +57 -0
- package/dist/services/code/post-compact-detector.js +16 -48
- package/dist/services/code/step-08-gate.d.ts +4 -3
- package/dist/services/code/step-08-gate.js +21 -9
- package/dist/services/code-review/ecc-bridge.js +23 -23
- package/dist/services/codegraph/codegraph-autorefresh.js +56 -39
- package/dist/services/codegraph/codegraph-config-repair-writer.js +4 -1
- package/dist/services/codegraph/codegraph-exclude-integrity.js +4 -1
- package/dist/services/codegraph/codegraph-exclude-repair.js +1 -2
- package/dist/services/codegraph/codegraph-index-integrity.js +1 -1
- package/dist/services/codegraph/codegraph-preflight-service.d.ts +3 -26
- package/dist/services/codegraph/codegraph-preflight-service.js +16 -37
- package/dist/services/codegraph/codegraph-preflight-structure.d.ts +32 -0
- package/dist/services/codegraph/codegraph-preflight-structure.js +33 -0
- package/dist/services/codegraph/codegraph-process-runner.js +12 -1
- package/dist/services/codegraph/codegraph-service.js +9 -1
- package/dist/services/compact/request-transition-hook.js +2 -1
- package/dist/services/compact/suggest-service.d.ts +3 -61
- package/dist/services/compact/suggest-service.js +9 -12
- package/dist/services/compact/suggest-types.d.ts +76 -0
- package/dist/services/compact/suggest-types.js +10 -0
- package/dist/services/compact-history/compact-history-service.js +2 -2
- package/dist/services/compact-statusline/compact-lifecycle-store.d.ts +2 -32
- package/dist/services/compact-statusline/compact-lifecycle-store.js +7 -12
- package/dist/services/compact-statusline/compact-lifecycle-types.d.ts +32 -0
- package/dist/services/compact-statusline/compact-lifecycle-types.js +8 -0
- package/dist/services/compact-statusline/compact-statusline-cell-table.d.ts +42 -0
- package/dist/services/compact-statusline/compact-statusline-cell-table.js +63 -0
- package/dist/services/compact-statusline/compact-statusline-service.d.ts +4 -21
- package/dist/services/compact-statusline/compact-statusline-service.js +9 -101
- package/dist/services/compact-statusline/compact-statusline-state.d.ts +4 -0
- package/dist/services/compact-statusline/compact-statusline-state.js +50 -0
- package/dist/services/config/config-migration.js +2 -2
- package/dist/services/config/config-restore.js +1 -1
- package/dist/services/config/config-rollback.js +1 -1
- package/dist/services/config/config-safety.js +28 -10
- package/dist/services/config/config-service.js +114 -31
- package/dist/services/config/model-routing.js +5 -2
- package/dist/services/config/proxy-service.js +6 -1
- package/dist/services/config/workspace-state-service.js +17 -5
- package/dist/services/context/auto-compact-dispatcher-input.d.ts +38 -0
- package/dist/services/context/auto-compact-dispatcher-input.js +9 -0
- package/dist/services/context/auto-compact-dispatcher.d.ts +2 -30
- package/dist/services/context/auto-compact-reader-input.d.ts +30 -0
- package/dist/services/context/auto-compact-reader-input.js +8 -0
- package/dist/services/context/auto-compact-reader.d.ts +2 -24
- package/dist/services/context/auto-compact-reader.js +4 -1
- package/dist/services/context/auto-compact-thresholds.d.ts +54 -0
- package/dist/services/context/auto-compact-thresholds.js +19 -0
- package/dist/services/context/auto-compact-types.d.ts +2 -46
- package/dist/services/context/auto-compact-types.js +1 -11
- package/dist/services/context/build-dispatch-system-prompt.js +2 -2
- package/dist/services/context/collector.js +8 -10
- package/dist/services/context/context-audit-hint.js +7 -5
- package/dist/services/context/context-audit-keys.d.ts +15 -0
- package/dist/services/context/context-audit-keys.js +77 -0
- package/dist/services/context/context-audit-limits.d.ts +20 -0
- package/dist/services/context/context-audit-limits.js +31 -0
- package/dist/services/context/context-audit-scan.d.ts +19 -0
- package/dist/services/context/context-audit-scan.js +246 -0
- package/dist/services/context/context-audit-types.d.ts +65 -0
- package/dist/services/context/context-audit-types.js +10 -0
- package/dist/services/context/context-audit.d.ts +13 -59
- package/dist/services/context/context-audit.js +38 -254
- package/dist/services/context/context-builder.js +4 -4
- package/dist/services/context/context-schema.d.ts +1 -1
- package/dist/services/context/context-schema.js +13 -13
- package/dist/services/context/doc-retriever.js +2 -2
- package/dist/services/context/harness-context-witness.js +43 -24
- package/dist/services/context/harness-window-config.js +27 -7
- package/dist/services/context/ide-detect.js +2 -1
- package/dist/services/context/index.d.ts +1 -1
- package/dist/services/context/memory-index-reader.js +3 -9
- package/dist/services/context/memory-preflight-config.js +3 -5
- package/dist/services/context/memory-preflight-service.d.ts +2 -20
- package/dist/services/context/memory-preflight-service.js +37 -68
- package/dist/services/context/memory-preflight-support.d.ts +48 -0
- package/dist/services/context/memory-preflight-support.js +56 -0
- package/dist/services/context/post-compact-reinjection.js +3 -3
- package/dist/services/context/renderer.js +7 -3
- package/dist/services/context/spillover-store.js +3 -1
- package/dist/services/context/summary-view.js +1 -1
- package/dist/services/context/threshold.js +2 -2
- package/dist/services/context/tokenizer.js +3 -3
- package/dist/services/crystallization/crystallization-brief-schema.d.ts +80 -0
- package/dist/services/crystallization/crystallization-brief-schema.js +159 -0
- package/dist/services/crystallization/crystallization-service.d.ts +7 -7
- package/dist/services/crystallization/crystallization-service.js +56 -55
- package/dist/services/crystallization/crystallization-store.d.ts +2 -2
- package/dist/services/crystallization/crystallization-store.js +37 -20
- package/dist/services/crystallization/crystallization-types.d.ts +4 -56
- package/dist/services/crystallization/crystallization-types.js +31 -184
- package/dist/services/crystallization/evidence-brief-builder.d.ts +3 -3
- package/dist/services/crystallization/evidence-brief-builder.js +32 -38
- package/dist/services/crystallization/index.d.ts +4 -4
- package/dist/services/crystallization/index.js +4 -4
- package/dist/services/dashboard/project-dashboard-service.js +7 -1
- package/dist/services/dispatch/await-batch-helpers.d.ts +55 -0
- package/dist/services/dispatch/await-batch-helpers.js +206 -0
- package/dist/services/dispatch/await-batch.d.ts +50 -7
- package/dist/services/dispatch/await-batch.js +97 -194
- package/dist/services/dispatch/batch-counter.js +2 -1
- package/dist/services/dispatch/conflict-replay.js +2 -2
- package/dist/services/dispatch/contract-store.js +5 -2
- package/dist/services/dispatch/dispatch-record-input-types.d.ts +81 -0
- package/dist/services/dispatch/dispatch-record-input-types.js +1 -0
- package/dist/services/dispatch/dispatch-record-types.d.ts +6 -73
- package/dist/services/dispatch/dispatch-record-upgrade-fields.d.ts +72 -0
- package/dist/services/dispatch/dispatch-record-upgrade-fields.js +242 -0
- package/dist/services/dispatch/dispatch-record-upgrade-guards.d.ts +15 -0
- package/dist/services/dispatch/dispatch-record-upgrade-guards.js +55 -0
- package/dist/services/dispatch/dispatch-record-upgrade.d.ts +2 -4
- package/dist/services/dispatch/dispatch-record-upgrade.js +21 -213
- package/dist/services/dispatch/dispatch-record-writer.js +54 -26
- package/dist/services/dispatch/dispatch-sub-agent.js +7 -2
- package/dist/services/dispatch/e2e-fixtures.js +1 -1
- package/dist/services/dispatch/isolation-lease.js +39 -17
- package/dist/services/dispatch/merge-back-runner.js +51 -11
- package/dist/services/dispatch/service-shutdown.js +4 -1
- package/dist/services/dispatch/slice-dag-types.d.ts +116 -0
- package/dist/services/dispatch/slice-dag-types.js +41 -0
- package/dist/services/dispatch/slice-dag.d.ts +3 -109
- package/dist/services/dispatch/slice-dag.js +13 -36
- package/dist/services/dispatch/sub-agent-batch-await.d.ts +47 -0
- package/dist/services/dispatch/sub-agent-batch-await.js +73 -0
- package/dist/services/dispatch/sub-agent-dispatcher-types.d.ts +122 -0
- package/dist/services/dispatch/sub-agent-dispatcher-types.js +12 -0
- package/dist/services/dispatch/sub-agent-dispatcher.d.ts +3 -145
- package/dist/services/dispatch/sub-agent-dispatcher.js +14 -70
- package/dist/services/dispatch/test-tool-detection.js +12 -1
- package/dist/services/doc/doc-generator.js +19 -4
- package/dist/services/doctor/doctor-service/checks/check-id-schema.js +16 -8
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.d.ts +7 -2
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.js +26 -8
- package/dist/services/doctor/doctor-service/checks/codegraph-exclude-integrity.js +16 -8
- package/dist/services/doctor/doctor-service/checks/codegraph-index-integrity.js +16 -8
- package/dist/services/doctor/doctor-service/checks/dist-source-version.js +18 -9
- package/dist/services/doctor/doctor-service/checks/ecc-hooks-schema-drift.js +20 -10
- package/dist/services/doctor/doctor-service/checks/gateguard-conflict.js +18 -9
- package/dist/services/doctor/doctor-service/checks/l3-memory-health.js +25 -11
- package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.js +12 -6
- package/dist/services/doctor/doctor-service/checks/multi-binary-drift.d.ts +7 -16
- package/dist/services/doctor/doctor-service/checks/multi-binary-drift.js +50 -70
- package/dist/services/doctor/doctor-service/checks/schema-validity.js +5 -1
- package/dist/services/doctor/doctor-service/checks/skill-presence.js +4 -2
- package/dist/services/doctor/doctor-service/checks/statusline-install.js +8 -4
- package/dist/services/doctor/doctor-service/checks/statusline-runtime.js +8 -4
- package/dist/services/doctor/doctor-service/checks/user-config.js +4 -2
- package/dist/services/doctor/doctor-service/checks/workspace-init.js +8 -4
- package/dist/services/doctor/doctor-service/checks/workspace-layout.js +19 -11
- package/dist/services/doctor/doctor-service/index.js +4 -2
- package/dist/services/doctor/doctor-service/multi-binary-drift-helpers.d.ts +40 -0
- package/dist/services/doctor/doctor-service/multi-binary-drift-helpers.js +49 -0
- package/dist/services/doctor/doctor-service/plugin-registry.js +1 -1
- package/dist/services/doctor/doctor-service/probe-types.d.ts +210 -0
- package/dist/services/doctor/doctor-service/probe-types.js +14 -0
- package/dist/services/doctor/doctor-service/types.d.ts +7 -197
- package/dist/services/doctor/index.d.ts +1 -1
- package/dist/services/doctor/index.js +1 -1
- package/dist/services/env/shell-probe.js +8 -2
- package/dist/services/evidence/evidence-body-builders.d.ts +23 -0
- package/dist/services/evidence/evidence-body-builders.js +197 -0
- package/dist/services/evidence/evidence-generator.js +6 -187
- package/dist/services/evolution/evolution-constraints.d.ts +43 -0
- package/dist/services/evolution/evolution-constraints.js +54 -0
- package/dist/services/evolution/evolution-evaluation-schema.d.ts +43 -0
- package/dist/services/evolution/evolution-evaluation-schema.js +43 -0
- package/dist/services/evolution/evolution-service.d.ts +6 -6
- package/dist/services/evolution/evolution-service.js +58 -58
- package/dist/services/evolution/evolution-store.d.ts +2 -2
- package/dist/services/evolution/evolution-store.js +37 -51
- package/dist/services/evolution/evolution-types.d.ts +2 -22
- package/dist/services/evolution/evolution-types.js +41 -101
- package/dist/services/evolution/independent-evaluator-runner.d.ts +3 -3
- package/dist/services/evolution/independent-evaluator-runner.js +20 -22
- package/dist/services/evolution/regression-skeptic-runner.d.ts +2 -2
- package/dist/services/evolution/regression-skeptic-runner.js +18 -18
- package/dist/services/feedback/feedback-promotion-service.js +48 -12
- package/dist/services/feedback/promotion-artifact-evidence.d.ts +2 -16
- package/dist/services/feedback/promotion-artifact-evidence.js +6 -83
- package/dist/services/feedback/promotion-artifact-json-evidence.d.ts +29 -0
- package/dist/services/feedback/promotion-artifact-json-evidence.js +39 -0
- package/dist/services/feedback/promotion-source-comments.d.ts +47 -0
- package/dist/services/feedback/promotion-source-comments.js +61 -0
- package/dist/services/final-review/final-review-contract.d.ts +26 -0
- package/dist/services/final-review/final-review-contract.js +14 -0
- package/dist/services/final-review/final-review-delivery.d.ts +63 -0
- package/dist/services/final-review/final-review-delivery.js +124 -0
- package/dist/services/final-review/final-review-evidence-budget.d.ts +125 -0
- package/dist/services/final-review/final-review-evidence-budget.js +218 -0
- package/dist/services/final-review/final-review-evidence-collect.d.ts +4 -0
- package/dist/services/final-review/final-review-evidence-collect.js +230 -0
- package/dist/services/final-review/final-review-evidence-sources.d.ts +138 -0
- package/dist/services/final-review/final-review-evidence-sources.js +139 -0
- package/dist/services/final-review/final-review-fifth-dim.d.ts +8 -0
- package/dist/services/final-review/final-review-fifth-dim.js +20 -0
- package/dist/services/final-review/final-review-gates.d.ts +119 -0
- package/dist/services/final-review/final-review-gates.js +214 -0
- package/dist/services/final-review/final-review-output-budget.d.ts +88 -0
- package/dist/services/final-review/final-review-output-budget.js +161 -0
- package/dist/services/final-review/final-review-prompt.d.ts +35 -0
- package/dist/services/final-review/final-review-prompt.js +112 -0
- package/dist/services/final-review/final-review-reviewer.d.ts +57 -0
- package/dist/services/final-review/final-review-reviewer.js +95 -0
- package/dist/services/final-review/final-review-runner.d.ts +3 -0
- package/dist/services/final-review/final-review-runner.js +158 -0
- package/dist/services/final-review/final-review-service.d.ts +119 -373
- package/dist/services/final-review/final-review-service.js +48 -1380
- package/dist/services/final-review/final-review-verdicts.d.ts +60 -0
- package/dist/services/final-review/final-review-verdicts.js +91 -0
- package/dist/services/final-review/index.d.ts +3 -3
- package/dist/services/final-review/index.js +2 -2
- package/dist/services/final-review/pre-post-diff.js +32 -29
- package/dist/services/fixture/fixture-capture-service.js +14 -6
- package/dist/services/fresh-context/trigger-scan.js +13 -2
- package/dist/services/fuzzy-matching/fuzzy-match-service.js +1 -1
- package/dist/services/fuzzy-matching/fzf-pick-service.js +6 -1
- package/dist/services/hooks/pre-tool-code-gate.js +2 -2
- package/dist/services/hooks/presence-marker-detector.js +12 -2
- package/dist/services/hooks/worktree-authorization-gate.js +21 -7
- package/dist/services/ide/adapters/claude-code-adapter.js +30 -17
- package/dist/services/ide/adapters/codex-adapter.js +3 -5
- package/dist/services/ide/adapters/cursor-adapter.js +3 -5
- package/dist/services/ide/adapters/hermes-adapter.js +2 -4
- package/dist/services/ide/adapters/openclaw-adapter.js +2 -4
- package/dist/services/ide/adapters/qoder-adapter.js +2 -4
- package/dist/services/ide/adapters/tongyi-lingma-adapter.js +1 -1
- package/dist/services/ide/adapters/trae-adapter.js +3 -5
- package/dist/services/ide/adapters/zcode-adapter.js +8 -7
- package/dist/services/ide/current-model-detector.js +2 -1
- package/dist/services/ide/ide-compact-types.d.ts +153 -0
- package/dist/services/ide/ide-compact-types.js +1 -0
- package/dist/services/ide/ide-registry.js +1 -1
- package/dist/services/ide/ide-types.d.ts +7 -145
- package/dist/services/ide/resource-profile.js +1 -1
- package/dist/services/ide/shared/atomic-json.js +2 -1
- package/dist/services/impact/impact-scan-service.js +12 -5
- package/dist/services/job/job-commit-verification.d.ts +73 -0
- package/dist/services/job/job-commit-verification.js +72 -0
- package/dist/services/job/job-orchestrator.d.ts +42 -0
- package/dist/services/job/job-orchestrator.js +110 -10
- package/dist/services/job/job-progress-store.d.ts +75 -5
- package/dist/services/job/job-progress-store.js +83 -6
- package/dist/services/job/job-rotation.d.ts +1 -1
- package/dist/services/job/job-rotation.js +5 -1
- package/dist/services/job/job-state-store.js +2 -2
- package/dist/services/job/job-types.js +49 -20
- package/dist/services/job/subagent-job-wrapper.d.ts +1 -1
- package/dist/services/job/subagent-job-wrapper.js +5 -1
- package/dist/services/job-snapshot/snapshot.js +2 -2
- package/dist/services/karpathy-cost/karpathy-cost-check-service.js +23 -13
- package/dist/services/legacy/legacy-detector.js +51 -5
- package/dist/services/lint/detect-eslint.js +10 -4
- package/dist/services/lint/detect-ocr-18.js +11 -3
- package/dist/services/lint/eslint-runner-support.d.ts +22 -0
- package/dist/services/lint/eslint-runner-support.js +185 -0
- package/dist/services/lint/eslint-runner-types.d.ts +69 -0
- package/dist/services/lint/eslint-runner-types.js +11 -0
- package/dist/services/lint/eslint-runner.d.ts +4 -56
- package/dist/services/lint/eslint-runner.js +24 -178
- package/dist/services/lint/npx-resolver.js +1 -3
- package/dist/services/lint/ocr-18-acquire.js +15 -4
- package/dist/services/lint/ocr-multilang-adapter.js +4 -5
- package/dist/services/llm/anthropic-runner.js +4 -1
- package/dist/services/log/log-commands-service.js +2 -6
- package/dist/services/log/logger.js +15 -12
- package/dist/services/log/retention.js +3 -2
- package/dist/services/loop/evaluator-dispatcher.js +78 -42
- package/dist/services/loop/loop-bee-relation-service.d.ts +4 -4
- package/dist/services/loop/loop-bee-relation-service.js +36 -40
- package/dist/services/loop/loop-bee-relation-store.d.ts +3 -3
- package/dist/services/loop/loop-bee-relation-store.js +9 -11
- package/dist/services/loop/loop-bee-relation-types.d.ts +1 -1
- package/dist/services/loop/loop-bee-relation-types.js +14 -25
- package/dist/services/loop/loop-release-service.d.ts +2 -2
- package/dist/services/loop/loop-release-service.js +3 -3
- package/dist/services/loop/loop-release-store.d.ts +2 -2
- package/dist/services/loop/loop-release-store.js +4 -6
- package/dist/services/loop/loop-release-types.d.ts +1 -1
- package/dist/services/loop/loop-release-types.js +21 -31
- package/dist/services/loop/monotonic-guard-types.d.ts +51 -0
- package/dist/services/loop/monotonic-guard-types.js +9 -0
- package/dist/services/loop/monotonic-guard.d.ts +2 -43
- package/dist/services/loop/monotonic-runner-types.d.ts +63 -0
- package/dist/services/loop/monotonic-runner-types.js +17 -0
- package/dist/services/loop/monotonic-runner.d.ts +3 -34
- package/dist/services/loop/monotonic-runner.js +10 -20
- package/dist/services/loop/run-driver.js +16 -8
- package/dist/services/loop/spec-service.d.ts +0 -5
- package/dist/services/loop/spec-service.js +49 -9
- package/dist/services/memory/llm-reranker-core.d.ts +108 -0
- package/dist/services/memory/llm-reranker-core.js +105 -0
- package/dist/services/memory/llm-reranker.d.ts +3 -94
- package/dist/services/memory/llm-reranker.js +13 -102
- package/dist/services/memory/memory-ingest-service.d.ts +1 -22
- package/dist/services/memory/memory-ingest-service.js +29 -76
- package/dist/services/memory/memory-ingest-support.d.ts +23 -0
- package/dist/services/memory/memory-ingest-support.js +81 -0
- package/dist/services/memory/memory-rotate-service.js +41 -8
- package/dist/services/memory/memory-search-service.js +8 -4
- package/dist/services/memory/project-context-service.js +26 -5
- package/dist/services/memory/project-memory-service/index/kind-dispatch.d.ts +2 -7
- package/dist/services/memory/project-memory-service/index/kind-dispatch.js +17 -136
- package/dist/services/memory/project-memory-service/index/project-memory-plan-exec.d.ts +7 -0
- package/dist/services/memory/project-memory-service/index/project-memory-plan-exec.js +150 -0
- package/dist/services/memory/project-memory-service/index/ranking.js +6 -3
- package/dist/services/memory/project-memory-service/index/reindex.js +14 -5
- package/dist/services/memory/project-memory-service/memory-kinds.d.ts +31 -0
- package/dist/services/memory/project-memory-service/memory-kinds.js +87 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter-parse.d.ts +24 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter-parse.js +104 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter.d.ts +2 -24
- package/dist/services/memory/project-memory-service/parsers/frontmatter.js +28 -79
- package/dist/services/memory/project-memory-service/parsers/markdown-pure.js +15 -3
- package/dist/services/memory/project-memory-service/store/atomic-write.js +34 -22
- package/dist/services/memory/project-memory-service/store/paths.js +2 -1
- package/dist/services/memory/project-memory-service/types.d.ts +3 -31
- package/dist/services/memory/project-memory-service/types.js +1 -76
- package/dist/services/migrate-skill-name/migrate.js +1 -1
- package/dist/services/migrate-skill-name/schema.js +1 -1
- package/dist/services/mode/mode-enforcement.js +4 -2
- package/dist/services/mode/mode-status-service.d.ts +27 -9
- package/dist/services/mode/mode-status-service.js +64 -12
- package/dist/services/observability/aggregation-helpers.d.ts +22 -0
- package/dist/services/observability/aggregation-helpers.js +65 -0
- package/dist/services/observability/aggregation-types.d.ts +66 -0
- package/dist/services/observability/aggregation-types.js +34 -0
- package/dist/services/observability/aggregation.d.ts +5 -53
- package/dist/services/observability/aggregation.js +17 -80
- package/dist/services/observability/jsonl-store.js +2 -1
- package/dist/services/observability/observability-schema.d.ts +71 -0
- package/dist/services/observability/observability-schema.js +64 -0
- package/dist/services/observability/observability-service.d.ts +3 -56
- package/dist/services/observability/observability-service.js +9 -49
- package/dist/services/openspec/coverage-evidence-reader.js +18 -11
- package/dist/services/openspec/openspec-archive-service.js +31 -24
- package/dist/services/openspec/openspec-init-service.js +8 -2
- package/dist/services/openspec/openspec-propose-from-doctor-service.js +1 -1
- package/dist/services/openspec/openspec-scan-service.js +4 -1
- package/dist/services/openspec/openspec-validate-service.js +26 -5
- package/dist/services/perf/perf-baseline-service.js +2 -6
- package/dist/services/polyrepo/polyrepo-dispatcher.js +2 -1
- package/dist/services/polyrepo/polyrepo-scanner.js +4 -1
- package/dist/services/prd/handoff-frontmatter-shape.d.ts +42 -0
- package/dist/services/prd/handoff-frontmatter-shape.js +67 -0
- package/dist/services/prd/handoff-frontmatter.js +1 -1
- package/dist/services/prd/handoff-path-resolution.d.ts +37 -0
- package/dist/services/prd/handoff-path-resolution.js +101 -0
- package/dist/services/prd/handoff-service.d.ts +1 -37
- package/dist/services/prd/handoff-service.js +16 -148
- package/dist/services/prd/prd-blocks-checker.js +28 -8
- package/dist/services/prd/project-scan-bootstrap-service.js +1 -5
- package/dist/services/prd/project-scan-reader.js +1 -4
- package/dist/services/prd/project-scan-sediment.js +1 -4
- package/dist/services/preferences/preferences-service.js +6 -8
- package/dist/services/preferences/preferences-types.js +4 -4
- package/dist/services/qa/bdd-test-style-contract.d.ts +41 -0
- package/dist/services/qa/bdd-test-style-contract.js +37 -0
- package/dist/services/qa/bdd-test-style-verifier.d.ts +2 -24
- package/dist/services/qa/bdd-test-style-verifier.js +5 -31
- package/dist/services/qa/browser-event-logger.js +2 -1
- package/dist/services/qa/qa-business-review-state.js +20 -5
- package/dist/services/qa/screenshot-archive-service.js +1 -3
- package/dist/services/rd/ast-gate.js +2 -2
- package/dist/services/rd/impl.js +1 -1
- package/dist/services/rd/rd-service.js +117 -43
- package/dist/services/rd/reviewer-dispatch-policy.js +4 -7
- package/dist/services/rd/standards-diagnostic.js +4 -1
- package/dist/services/rd/strategy.js +10 -3
- package/dist/services/rd/tactical-stage.js +2 -2
- package/dist/services/rd/types.js +9 -7
- package/dist/services/rd-swarm/rd-swarm-service.d.ts +2 -45
- package/dist/services/rd-swarm/rd-swarm-service.js +140 -21
- package/dist/services/rd-swarm/rd-swarm-types.d.ts +54 -0
- package/dist/services/rd-swarm/rd-swarm-types.js +10 -0
- package/dist/services/recommendations/capability-map-service.js +10 -2
- package/dist/services/recommendations/capability-seed-items.js +81 -14
- package/dist/services/recommendations/capability-seed-mappings.js +420 -48
- package/dist/services/recommendations/capability-seed-sources-mcp-server.d.ts +9 -0
- package/dist/services/recommendations/capability-seed-sources-mcp-server.js +233 -0
- package/dist/services/recommendations/capability-seed-sources.js +127 -32
- package/dist/services/release/release-state.d.ts +2 -2
- package/dist/services/release/release-state.js +44 -15
- package/dist/services/release/version-precheck-layer-changeset.d.ts +2 -0
- package/dist/services/release/version-precheck-layer-changeset.js +43 -0
- package/dist/services/release/version-precheck-service.d.ts +11 -36
- package/dist/services/release/version-precheck-service.js +20 -104
- package/dist/services/release/version-precheck-support.d.ts +53 -0
- package/dist/services/release/version-precheck-support.js +64 -0
- package/dist/services/retrospective/retrospective-index.js +17 -3
- package/dist/services/retrospective/retrospective-search-service.js +6 -2
- package/dist/services/retrospective/retrospective-show.js +4 -1
- package/dist/services/reviewer/model-family.js +7 -1
- package/dist/services/reviewer/providers/anthropic.d.ts +5 -0
- package/dist/services/reviewer/providers/anthropic.js +10 -1
- package/dist/services/reviewer/providers/openai.d.ts +5 -0
- package/dist/services/reviewer/providers/openai.js +10 -1
- package/dist/services/reviewer/reviewer-config.js +4 -2
- package/dist/services/reviewer/reviewer-service.d.ts +2 -36
- package/dist/services/reviewer/reviewer-service.js +2 -1
- package/dist/services/reviewer/reviewer-types.d.ts +43 -0
- package/dist/services/reviewer/reviewer-types.js +1 -0
- package/dist/services/role/role-registry.js +9 -1
- package/dist/services/runtime/runtime-detector.js +4 -1
- package/dist/services/runtime/vendors/claude-code.js +14 -6
- package/dist/services/runtime/vendors/codex.js +11 -3
- package/dist/services/runtime/vendors/copilot.js +11 -3
- package/dist/services/sc/sc-service.js +28 -15
- package/dist/services/scan/acceptance-coverage-service.js +4 -1
- package/dist/services/scan/api-diff-openapi-schema-read.d.ts +67 -0
- package/dist/services/scan/api-diff-openapi-schema-read.js +154 -0
- package/dist/services/scan/api-diff-openapi.d.ts +16 -2
- package/dist/services/scan/api-diff-openapi.js +19 -123
- package/dist/services/scan/api-diff-recorded.js +16 -3
- package/dist/services/scan/api-diff-service.js +49 -16
- package/dist/services/scan/api-diff-types.js +12 -3
- package/dist/services/scan/api-surface-helpers.d.ts +13 -0
- package/dist/services/scan/api-surface-helpers.js +31 -0
- package/dist/services/scan/api-surface-service.d.ts +2 -45
- package/dist/services/scan/api-surface-service.js +15 -26
- package/dist/services/scan/api-surface-types.d.ts +54 -0
- package/dist/services/scan/api-surface-types.js +10 -0
- package/dist/services/scan/archetype-detection.d.ts +37 -0
- package/dist/services/scan/archetype-detection.js +142 -0
- package/dist/services/scan/archetype-service.js +36 -125
- package/dist/services/scan/diff-scope-service.js +35 -15
- package/dist/services/scan/existing-system-service.js +16 -99
- package/dist/services/scan/existing-system-visual-tokens.d.ts +20 -0
- package/dist/services/scan/existing-system-visual-tokens.js +123 -0
- package/dist/services/scan/file-size-policy.d.ts +86 -0
- package/dist/services/scan/file-size-policy.js +184 -0
- package/dist/services/scan/file-size-scan.d.ts +30 -3
- package/dist/services/scan/file-size-scan.js +47 -9
- package/dist/services/scan/karpathy-service.js +6 -1
- package/dist/services/scan/orphan-service.js +86 -20
- package/dist/services/scan/type-sanity-service.js +104 -10
- package/dist/services/sediment/dispose-confirm.d.ts +2 -2
- package/dist/services/sediment/dispose-confirm.js +2 -2
- package/dist/services/sediment/json-schema.d.ts +1 -1
- package/dist/services/sediment/json-schema.js +25 -13
- package/dist/services/sediment/manifest-lint.d.ts +1 -12
- package/dist/services/sediment/manifest-lint.js +1 -7
- package/dist/services/sediment/pool-paths.js +13 -9
- package/dist/services/sediment/pool-read.d.ts +1 -1
- package/dist/services/sediment/pool-read.js +42 -18
- package/dist/services/sediment/pool-rebuild-index.d.ts +1 -1
- package/dist/services/sediment/pool-rebuild-index.js +5 -5
- package/dist/services/sediment/pool-write.d.ts +1 -1
- package/dist/services/sediment/pool-write.js +7 -7
- package/dist/services/sediment/promotion-gate.d.ts +1 -1
- package/dist/services/sediment/promotion-gate.js +9 -9
- package/dist/services/sediment/types.d.ts +8 -8
- package/dist/services/session/binding-status-service.js +14 -4
- package/dist/services/session/caller-binding-service.js +2 -1
- package/dist/services/session/getSessionDir.js +4 -1
- package/dist/services/session/index.d.ts +1 -1
- package/dist/services/session/index.js +1 -1
- package/dist/services/session/resolve-caller-id.js +7 -5
- package/dist/services/session/session-binding-bridge.js +26 -25
- package/dist/services/session/session-checkpoint-service.js +1 -1
- package/dist/services/session/session-file-schema.d.ts +70 -0
- package/dist/services/session/session-file-schema.js +68 -0
- package/dist/services/session/session-manager.d.ts +6 -6
- package/dist/services/session/session-manager.js +30 -29
- package/dist/services/session/session-resume-service.js +2 -1
- package/dist/services/share/bundle-format-constants.d.ts +85 -0
- package/dist/services/share/bundle-format-constants.js +100 -0
- package/dist/services/share/bundle-reader.d.ts +3 -3
- package/dist/services/share/bundle-reader.js +75 -68
- package/dist/services/share/bundle-types.d.ts +3 -70
- package/dist/services/share/bundle-types.js +38 -107
- package/dist/services/share/bundle-writer.d.ts +3 -3
- package/dist/services/share/bundle-writer.js +101 -91
- package/dist/services/share/run-state-contract.d.ts +1 -1
- package/dist/services/share/run-state-contract.js +7 -13
- package/dist/services/signal/cancel-handler.js +2 -1
- package/dist/services/skill/resume-detector.js +6 -4
- package/dist/services/skill/skill-scheduler.js +3 -1
- package/dist/services/skill/skill-search-service.js +4 -4
- package/dist/services/skillhub/release-diff.d.ts +2 -2
- package/dist/services/skillhub/release-diff.js +6 -10
- package/dist/services/skillhub/release-export.d.ts +2 -2
- package/dist/services/skillhub/release-export.js +15 -17
- package/dist/services/skillhub/release-gc-blobs.d.ts +2 -2
- package/dist/services/skillhub/release-gc-blobs.js +4 -4
- package/dist/services/skillhub/release-import.d.ts +2 -2
- package/dist/services/skillhub/release-import.js +13 -12
- package/dist/services/skillhub/release-retain.d.ts +3 -3
- package/dist/services/skillhub/release-retain.js +22 -22
- package/dist/services/skillhub/sqlite-store.d.ts +1 -1
- package/dist/services/skillhub/sqlite-store.js +12 -11
- package/dist/services/skillhub/tar-runtime.js +15 -15
- package/dist/services/skillhub/types.d.ts +4 -4
- package/dist/services/skills/hooks-codegate-superpowers.js +16 -7
- package/dist/services/skills/hooks-settings-service.js +61 -19
- package/dist/services/skills/presence-lease-service.js +26 -16
- package/dist/services/skills/presence-lease-types.d.ts +1 -1
- package/dist/services/skills/presence-lease-types.js +1 -1
- package/dist/services/skills/skill-conformance-service.js +40 -8
- package/dist/services/skills/skill-presence-service.js +16 -14
- package/dist/services/skills/skill-runbook-service.js +2 -1
- package/dist/services/skills/skill-statusline-model.d.ts +128 -0
- package/dist/services/skills/skill-statusline-model.js +163 -0
- package/dist/services/skills/skill-statusline-renderer.js +4 -3
- package/dist/services/skills/skill-statusline-service.d.ts +3 -100
- package/dist/services/skills/skill-statusline-service.js +56 -163
- package/dist/services/skills/statusline-palette.js +11 -6
- package/dist/services/skills/statusline-settings-service.js +2 -1
- package/dist/services/skills/sync-service-support.d.ts +65 -0
- package/dist/services/skills/sync-service-support.js +50 -0
- package/dist/services/skills/sync-service.d.ts +3 -66
- package/dist/services/skills/sync-service.js +15 -53
- package/dist/services/slice/calibration-store.js +8 -2
- package/dist/services/slice/cross-pass-edge-merger.d.ts +3 -28
- package/dist/services/slice/cross-pass-edge-merger.js +13 -63
- package/dist/services/slice/cross-pass-edge-static-scan-support.d.ts +69 -0
- package/dist/services/slice/cross-pass-edge-static-scan-support.js +74 -0
- package/dist/services/slice/granularity-decider.js +2 -2
- package/dist/services/slice/slice-archive-service.js +8 -3
- package/dist/services/slice/slice-check-service.js +19 -8
- package/dist/services/slice/slice-decompose-runners.js +61 -23
- package/dist/services/slice/slice-decompose-service.js +4 -4
- package/dist/services/slice/slice-review-state.js +8 -2
- package/dist/services/smoke/smoke-paths-state.js +9 -2
- package/dist/services/sop/gate-enforce-service.js +9 -2
- package/dist/services/sop/sop-advance-service.js +14 -2
- package/dist/services/sop/sop-check-service.js +16 -4
- package/dist/services/sop/sop-paths.js +3 -1
- package/dist/services/sop/sop-registry-service.js +5 -1
- package/dist/services/sop/sop-service.js +29 -7
- package/dist/services/sop/sop-types.js +5 -1
- package/dist/services/standards/ide-aware-standards-service.js +2 -2
- package/dist/services/standards/loop-engineering-lint.js +12 -5
- package/dist/services/standards/loop-engineering-readiness-lint.js +5 -5
- package/dist/services/standards/migrate-claude-rules-service.js +9 -7
- package/dist/services/standards/missing-standards-detector.js +1 -3
- package/dist/services/standards/project-context-support.d.ts +50 -0
- package/dist/services/standards/project-context-support.js +244 -0
- package/dist/services/standards/project-context-types.d.ts +30 -0
- package/dist/services/standards/project-context-types.js +11 -0
- package/dist/services/standards/project-context.d.ts +10 -22
- package/dist/services/standards/project-context.js +27 -214
- package/dist/services/standards/project-standards-service.js +43 -12
- package/dist/services/standards/standards-render-common.d.ts +15 -0
- package/dist/services/standards/standards-render-common.js +49 -0
- package/dist/services/standards/standards-render.d.ts +1 -2
- package/dist/services/standards/standards-render.js +31 -58
- package/dist/services/standards/ui-library-dispatch-block.js +1 -1
- package/dist/services/tech/tech-change-id-service.js +7 -7
- package/dist/services/tech/tech-service.js +73 -26
- package/dist/services/test-cache/test-cache-service.js +8 -3
- package/dist/services/upgrade/1x-detector-service.js +5 -3
- package/dist/services/upgrade/gitignore-migrate-service.js +5 -5
- package/dist/services/upgrade/upgrade-service.js +36 -13
- package/dist/services/verdict/envelope-parsers.d.ts +84 -0
- package/dist/services/verdict/envelope-parsers.js +146 -0
- package/dist/services/verdict/envelopes.d.ts +50 -60
- package/dist/services/verdict/envelopes.js +18 -156
- package/dist/services/verdict/verdict-aggregator.js +27 -3
- package/dist/services/vm/vm-lease.js +15 -3
- package/dist/services/web/aria-node.d.ts +27 -0
- package/dist/services/web/aria-node.js +1 -0
- package/dist/services/web/browser-acquire.js +3 -1
- package/dist/services/web/browser-cache-probe.d.ts +18 -0
- package/dist/services/web/browser-cache-probe.js +110 -0
- package/dist/services/web/browser-session-manager.js +6 -2
- package/dist/services/web/daemon-registry.js +4 -1
- package/dist/services/web/playwright-loader.d.ts +2 -70
- package/dist/services/web/playwright-types.d.ts +75 -0
- package/dist/services/web/playwright-types.js +1 -0
- package/dist/services/web/snapshot-pruner.d.ts +2 -23
- package/dist/services/web/snapshot-pruner.js +8 -3
- package/dist/services/web/web-daemon-service.js +1 -3
- package/dist/services/web/web-install-service.d.ts +3 -32
- package/dist/services/web/web-install-service.js +21 -100
- package/dist/services/web/web-install-types.d.ts +31 -0
- package/dist/services/web/web-install-types.js +13 -0
- package/dist/services/web/web-login-profile.js +7 -5
- package/dist/services/web/web-protocol.js +3 -1
- package/dist/services/workflow/pipeline-verify-gate-support.js +63 -17
- package/dist/services/workflow/pipeline-verify-service.js +17 -6
- package/dist/services/workflow/plan-reader.js +5 -1
- package/dist/services/workflow/plan-refresher.js +20 -6
- package/dist/services/workflow/plan-trigger-detector.js +31 -8
- package/dist/services/workflow/provision-dispatch-node.js +8 -3
- package/dist/services/workflow/workflow-autonomous-resume-helpers.d.ts +3 -1
- package/dist/services/workflow/workflow-autonomous-resume-helpers.js +35 -144
- package/dist/services/workflow/workflow-autonomous-resume-validation.d.ts +16 -0
- package/dist/services/workflow/workflow-autonomous-resume-validation.js +155 -0
- package/dist/services/workflow/workflow-autonomous-service.js +25 -13
- package/dist/services/workflow/workflow-graph-store-helpers.d.ts +51 -0
- package/dist/services/workflow/workflow-graph-store-helpers.js +111 -0
- package/dist/services/workflow/workflow-graph-store.d.ts +2 -35
- package/dist/services/workflow/workflow-graph-store.js +30 -107
- package/dist/services/workflow/workflow-graph-types.js +3 -3
- package/dist/services/workflow/workflow-inflight-probe.js +14 -7
- package/dist/services/workflow/workflow-loader.js +5 -1
- package/dist/services/workflow/workflow-node-lifecycle.js +22 -21
- package/dist/services/workflow/workflow-presence-lifecycle-types.d.ts +50 -0
- package/dist/services/workflow/workflow-presence-lifecycle-types.js +1 -0
- package/dist/services/workflow/workflow-presence-lifecycle.d.ts +2 -42
- package/dist/services/workflow/workflow-presence-lifecycle.js +19 -21
- package/dist/services/workflow/workflow-router-service.js +169 -27
- package/dist/services/workflow/workflow-skip-service.js +14 -4
- package/dist/services/workflow/workflow-spec-builders.d.ts +15 -0
- package/dist/services/workflow/workflow-spec-builders.js +121 -0
- package/dist/services/workflow/workflow-spec.d.ts +7 -6
- package/dist/services/workflow/workflow-spec.js +22 -116
- package/dist/services/workflow/workflow-state-store.js +2 -1
- package/dist/services/workspace/migrate-1-4-1-service.js +80 -14
- package/dist/services/workspace/migrate-service.js +66 -16
- package/dist/services/workspace/reconcile-migrate.js +6 -2
- package/dist/services/workspace/reconcile-service.js +37 -16
- package/dist/services/workspace/workspace-claude-settings-materializer.js +7 -5
- package/dist/services/workspace/workspace-clean-service.js +4 -1
- package/dist/services/workspace/workspace-service.js +11 -3
- package/dist/services/workspace/workspace-state-service.js +1 -1
- package/dist/services/worktree/git-worktree-parser.js +13 -3
- package/dist/services/worktree/host-worktree-reconciler.js +8 -4
- package/dist/services/worktree/long-path-cleanup.js +23 -6
- package/dist/services/worktree/worktree-gc-guard.js +3 -1
- package/dist/services/worktree/worktree-lease-types.d.ts +53 -0
- package/dist/services/worktree/worktree-lease-types.js +10 -0
- package/dist/services/worktree/worktree-lease.d.ts +2 -44
- package/dist/shared/array-guards.d.ts +30 -0
- package/dist/shared/array-guards.js +32 -0
- package/dist/shared/format-md-compact-internals.d.ts +26 -0
- package/dist/shared/format-md-compact-internals.js +125 -0
- package/dist/shared/format-md-compact.js +1 -117
- package/dist/shared/fs-utils.js +2 -1
- package/dist/shared/incrementing-number.js +3 -3
- package/dist/shared/json-parse.d.ts +71 -0
- package/dist/shared/json-parse.js +32 -0
- package/dist/shared/json-schema-mini.js +3 -1
- package/dist/shared/path-safety.js +3 -1
- package/dist/shared/path-utils.d.ts +20 -0
- package/dist/shared/path-utils.js +26 -0
- package/dist/shared/planner-response.js +3 -3
- package/dist/shared/stale-policy.js +1 -3
- package/dist/skills/peaks-maker/index.js +11 -11
- package/package.json +31 -8
- package/scripts/clean-dist.mjs +1 -2
- package/scripts/copy-templates.mjs +2 -4
- package/scripts/install-skills.mjs +305 -125
- package/scripts/sync-version.mjs +25 -8
- package/scripts/watch.mjs +8 -2
- package/skills/peaks-code/SKILL.md +1 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/** Raw-line cap for `src/`, `scripts/` and `packages/` — including a `tests` directory inside a package. */
|
|
2
|
+
export declare const FILE_SIZE_CAP_DEFAULT = 300;
|
|
3
|
+
/** Raw-line cap for the root `tests/` tree. A `tests/` dir inside a package keeps the 300 cap. */
|
|
4
|
+
export declare const FILE_SIZE_CAP_TESTS = 500;
|
|
5
|
+
/** Directories the policy measures, relative to the project root. */
|
|
6
|
+
export declare const FILE_SIZE_SCOPE_DIRS: readonly ["src", "tests", "packages", "scripts"];
|
|
7
|
+
/** The extensions it measures. The same seven the lint scope admits. */
|
|
8
|
+
export declare const FILE_SIZE_SCOPE_EXTENSIONS: readonly ["ts", "tsx", "mts", "cts", "mjs", "cjs", "js"];
|
|
9
|
+
/** The unit, stated in the artifact that carries the number rather than in prose. */
|
|
10
|
+
export declare const FILE_SIZE_LINE_CONVENTION = "readFileSync(f,'utf8').split('\\n').length";
|
|
11
|
+
/** The two caps, as the census reports them. */
|
|
12
|
+
export type FileSizeCaps = {
|
|
13
|
+
readonly defaultCap: number;
|
|
14
|
+
readonly testsCap: number;
|
|
15
|
+
};
|
|
16
|
+
/** The caps this policy defines right now. */
|
|
17
|
+
export declare function fileSizeCaps(): FileSizeCaps;
|
|
18
|
+
/** Forward slashes, so a Windows-native path matches the same rule as a POSIX one. */
|
|
19
|
+
export declare function normalizePolicyPath(file: string): string;
|
|
20
|
+
/** True when `file` ends in an extension the policy measures. */
|
|
21
|
+
export declare function hasPolicyExtension(file: string): boolean;
|
|
22
|
+
/** True when `file` sits under one of the directories the policy measures. */
|
|
23
|
+
export declare function inFileSizeScope(file: string): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* THE one definition of "a file the policy measures": under a scope directory AND
|
|
26
|
+
* of a scope extension. Both consumers read this instead of each carrying its own
|
|
27
|
+
* half of the rule.
|
|
28
|
+
*
|
|
29
|
+
* WHY IT MATTERS (F3 of the repair cycle, rid `2026-09-30-cap-unify-01`). The
|
|
30
|
+
* census enumerated its scope with `git ls-files <dirs>` plus the extension test,
|
|
31
|
+
* while the scan measured EVERY changed non-exempt file at `fileSizeCapFor`'s
|
|
32
|
+
* else-branch 300 — including paths in neither list. The two disagreed about the
|
|
33
|
+
* same policy, and the disagreement was not harmless: an out-of-scope file (e.g.
|
|
34
|
+
* under `.husky/`, or a `.json`) could redden a `request transition` at 300 lines
|
|
35
|
+
* while contributing nothing to `fileSizeOverCap`, so there was no ratchet row to
|
|
36
|
+
* descend and no split campaign that would ever clear it. Enforcement wider than
|
|
37
|
+
* the declared scope is enforcement nobody can satisfy.
|
|
38
|
+
*/
|
|
39
|
+
export declare function isPolicyMeasuredFile(file: string): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* The cap a path is measured against: 500 for the root `tests/` tree, 300 for
|
|
42
|
+
* everything else in scope — including a `tests` directory inside a package,
|
|
43
|
+
* which keeps its parent scope's cap by the reading decided 2026-09-30.
|
|
44
|
+
*
|
|
45
|
+
* PRECONDITION: `isPolicyMeasuredFile(file)`. The else-branch is `src`,
|
|
46
|
+
* `packages` and `scripts` ONLY because that is what the policy decided; handed a
|
|
47
|
+
* path outside the scope it would invent a cap for a file the row cannot see, so
|
|
48
|
+
* callers must gate on the predicate above first (`file-size-scan.ts` does).
|
|
49
|
+
*/
|
|
50
|
+
export declare function fileSizeCapFor(file: string): number;
|
|
51
|
+
/**
|
|
52
|
+
* The policy's unit: raw lines counted by splitting on newlines. NOT `wc -l` —
|
|
53
|
+
* see the header. A file with no trailing newline still counts its last line;
|
|
54
|
+
* an empty file counts as one.
|
|
55
|
+
*/
|
|
56
|
+
export declare function countRawLines(content: string): number;
|
|
57
|
+
/** The top-level directory a scoped path belongs to, as the census buckets it. */
|
|
58
|
+
export declare function fileSizeScopeBucket(file: string): string;
|
|
59
|
+
/** The second scope's directories, relative to the project root. */
|
|
60
|
+
export declare const HOOKS_FILE_SIZE_SCOPE_DIRS: readonly [".husky"];
|
|
61
|
+
/**
|
|
62
|
+
* The cap the hooks scope is measured against. It ALIASES `FILE_SIZE_CAP_DEFAULT`
|
|
63
|
+
* rather than restating 300: the 300 is one decision ("may this file be committed
|
|
64
|
+
* at this size?"), and a second literal here would be the second copy
|
|
65
|
+
* `tests/unit/standards/file-size-cap.test.ts` exists to report. Aliasing does NOT
|
|
66
|
+
* mean the hooks ceiling is unbound — the artifact records `hooksCap` as its own
|
|
67
|
+
* input and `.husky/peaks-gate-file-size.mjs` re-derives it from a live census, so
|
|
68
|
+
* re-deciding the default cap trips the hooks row's binding too, as a refusal
|
|
69
|
+
* rather than as a silent re-baseline.
|
|
70
|
+
*/
|
|
71
|
+
export declare const FILE_SIZE_CAP_HOOKS = 300;
|
|
72
|
+
/** The hooks scope's cap, in the shape the census reports it. */
|
|
73
|
+
export type HooksFileSizeCaps = {
|
|
74
|
+
readonly hooksCap: number;
|
|
75
|
+
};
|
|
76
|
+
/** The cap the hooks scope is measured against right now. */
|
|
77
|
+
export declare function hooksFileSizeCaps(): HooksFileSizeCaps;
|
|
78
|
+
/** True when `file` sits under one of the hooks scope's directories. */
|
|
79
|
+
export declare function inHooksFileSizeScope(file: string): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* A file the hooks rows measure: under a hooks directory AND of a scope extension.
|
|
82
|
+
* The extension universe is the SAME seven as the main scope — it is one decision
|
|
83
|
+
* about what counts as code, and the hooks binding reports it as its own field so a
|
|
84
|
+
* change to it is named against both scopes.
|
|
85
|
+
*/
|
|
86
|
+
export declare function isHooksMeasuredFile(file: string): boolean;
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
// src/services/scan/file-size-policy.ts
|
|
2
|
+
//
|
|
3
|
+
// THE ONE SOURCE OF TRUTH for the repo's file-size cap policy: the two caps,
|
|
4
|
+
// the directories they cover, the extensions in scope, and the unit a "line" is
|
|
5
|
+
// measured in. Everything that enforces the cap reads it from here —
|
|
6
|
+
// `src/services/scan/file-size-scan.ts` (the diff-scoped CLI scan) and
|
|
7
|
+
// `scripts/lint/file-size-census.ts` (the whole-tree count the husky gate
|
|
8
|
+
// ratchets). Neither may restate a number.
|
|
9
|
+
//
|
|
10
|
+
// WHY ONE MODULE (rid 2026-09-30-cap-unify-01). The policy was written twice,
|
|
11
|
+
// in two units: `max-lines: [error, {max: 400, skipBlankLines, skipComments}]`
|
|
12
|
+
// in `config/eslint/.peaks-rules.cjs` and a raw `DEFAULT_FILE_SIZE_THRESHOLD`
|
|
13
|
+
// of 800 here. Two spellings of one decision drift by construction, and the only
|
|
14
|
+
// number anyone ratcheted was the eslint finding count — which measures a
|
|
15
|
+
// DIFFERENT population (98 `max-lines` findings under 400-effective vs 174 files
|
|
16
|
+
// over the decided 300/500 raw cap). The eslint rule value is deliberately
|
|
17
|
+
// unchanged until the splits land; see `.peaks/docs/lint-gate.md` §4 slice 5.
|
|
18
|
+
//
|
|
19
|
+
// THE UNIT IS PART OF THE POLICY. A line is
|
|
20
|
+
// `readFileSync(f, 'utf8').split('\n').length` — a split-newline count, which is
|
|
21
|
+
// `wc -l` plus one per file. That is not a detail: on the same 174 files the
|
|
22
|
+
// campaign recorded 60,982 excess lines with this convention and 60,808 with
|
|
23
|
+
// `wc -l`, and a ratchet seeded from the other convention is off by exactly the
|
|
24
|
+
// file count. `countRawLines` below is the only implementation of the word
|
|
25
|
+
// "line" in this policy, and the census reports it in its envelope so a reader
|
|
26
|
+
// of the number can see which unit produced it.
|
|
27
|
+
//
|
|
28
|
+
// `scripts/` IS IN SCOPE. The decided cap text named only `src`, `packages` and
|
|
29
|
+
// `tests`, but the 174 the ceiling was seeded from counts 5 `scripts/` files.
|
|
30
|
+
// A row that silently excluded them would not equal its own measurement — the
|
|
31
|
+
// same class of hole as lint-gate §4b (a surface asserted but never counted).
|
|
32
|
+
//
|
|
33
|
+
// NUMBERS THIS MODULE DOES NOT OWN, DECIDED 2026-09-30 (F6 of the repair cycle).
|
|
34
|
+
// A line-count constant elsewhere in the repo is a second copy of THIS policy only
|
|
35
|
+
// if it decides the same question — "may this file be committed at this size?".
|
|
36
|
+
// Three that do not, recorded here so the next reader does not re-litigate them:
|
|
37
|
+
// - `config/eslint/.peaks-rules.cjs` `max-lines: 400` EFFECTIVE lines: the same
|
|
38
|
+
// question in a different unit, deliberately left at 400 until the splits land
|
|
39
|
+
// (lint-gate §4 slice 5; 98 findings ≠ 174 files).
|
|
40
|
+
// - `src/services/legacy/legacy-detector.ts` `LARGE_FILE_LINES = 500`: a smell
|
|
41
|
+
// DETECTOR's "is this file big enough to look legacy?" threshold. It reports a
|
|
42
|
+
// suspicion, blocks nothing, and descends no ceiling, so it is NOT a copy of
|
|
43
|
+
// this cap and is NOT folded into it — folding it in would silently change what
|
|
44
|
+
// the legacy report says. Its name does not match the census's `CAP_NAME`
|
|
45
|
+
// second-copy rule on purpose; see lint-gate §4b row 7.
|
|
46
|
+
// - `src/services/skills/lint-reference-shape.ts` 800: the shape of an
|
|
47
|
+
// example lint report, not a cap.
|
|
48
|
+
/** Raw-line cap for `src/`, `scripts/` and `packages/` — including a `tests` directory inside a package. */
|
|
49
|
+
export const FILE_SIZE_CAP_DEFAULT = 300;
|
|
50
|
+
/** Raw-line cap for the root `tests/` tree. A `tests/` dir inside a package keeps the 300 cap. */
|
|
51
|
+
export const FILE_SIZE_CAP_TESTS = 500;
|
|
52
|
+
/** Directories the policy measures, relative to the project root. */
|
|
53
|
+
export const FILE_SIZE_SCOPE_DIRS = ['src', 'tests', 'packages', 'scripts'];
|
|
54
|
+
/** The extensions it measures. The same seven the lint scope admits. */
|
|
55
|
+
export const FILE_SIZE_SCOPE_EXTENSIONS = ['ts', 'tsx', 'mts', 'cts', 'mjs', 'cjs', 'js'];
|
|
56
|
+
/** The unit, stated in the artifact that carries the number rather than in prose. */
|
|
57
|
+
export const FILE_SIZE_LINE_CONVENTION = "readFileSync(f,'utf8').split('\\n').length";
|
|
58
|
+
/** The caps this policy defines right now. */
|
|
59
|
+
export function fileSizeCaps() {
|
|
60
|
+
return {
|
|
61
|
+
defaultCap: FILE_SIZE_CAP_DEFAULT,
|
|
62
|
+
testsCap: FILE_SIZE_CAP_TESTS
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/** Forward slashes, so a Windows-native path matches the same rule as a POSIX one. */
|
|
66
|
+
export function normalizePolicyPath(file) {
|
|
67
|
+
return file.split('\\').join('/');
|
|
68
|
+
}
|
|
69
|
+
/** True when `file` ends in an extension the policy measures. */
|
|
70
|
+
export function hasPolicyExtension(file) {
|
|
71
|
+
const path = normalizePolicyPath(file);
|
|
72
|
+
const dot = path.lastIndexOf('.');
|
|
73
|
+
if (dot < 0)
|
|
74
|
+
return false;
|
|
75
|
+
return FILE_SIZE_SCOPE_EXTENSIONS.includes(path.slice(dot + 1));
|
|
76
|
+
}
|
|
77
|
+
/** True when `file` sits under one of the directories the policy measures. */
|
|
78
|
+
export function inFileSizeScope(file) {
|
|
79
|
+
const path = normalizePolicyPath(file);
|
|
80
|
+
return FILE_SIZE_SCOPE_DIRS.some((dir) => path.startsWith(`${dir}/`));
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* THE one definition of "a file the policy measures": under a scope directory AND
|
|
84
|
+
* of a scope extension. Both consumers read this instead of each carrying its own
|
|
85
|
+
* half of the rule.
|
|
86
|
+
*
|
|
87
|
+
* WHY IT MATTERS (F3 of the repair cycle, rid `2026-09-30-cap-unify-01`). The
|
|
88
|
+
* census enumerated its scope with `git ls-files <dirs>` plus the extension test,
|
|
89
|
+
* while the scan measured EVERY changed non-exempt file at `fileSizeCapFor`'s
|
|
90
|
+
* else-branch 300 — including paths in neither list. The two disagreed about the
|
|
91
|
+
* same policy, and the disagreement was not harmless: an out-of-scope file (e.g.
|
|
92
|
+
* under `.husky/`, or a `.json`) could redden a `request transition` at 300 lines
|
|
93
|
+
* while contributing nothing to `fileSizeOverCap`, so there was no ratchet row to
|
|
94
|
+
* descend and no split campaign that would ever clear it. Enforcement wider than
|
|
95
|
+
* the declared scope is enforcement nobody can satisfy.
|
|
96
|
+
*/
|
|
97
|
+
export function isPolicyMeasuredFile(file) {
|
|
98
|
+
return inFileSizeScope(file) && hasPolicyExtension(file);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* The cap a path is measured against: 500 for the root `tests/` tree, 300 for
|
|
102
|
+
* everything else in scope — including a `tests` directory inside a package,
|
|
103
|
+
* which keeps its parent scope's cap by the reading decided 2026-09-30.
|
|
104
|
+
*
|
|
105
|
+
* PRECONDITION: `isPolicyMeasuredFile(file)`. The else-branch is `src`,
|
|
106
|
+
* `packages` and `scripts` ONLY because that is what the policy decided; handed a
|
|
107
|
+
* path outside the scope it would invent a cap for a file the row cannot see, so
|
|
108
|
+
* callers must gate on the predicate above first (`file-size-scan.ts` does).
|
|
109
|
+
*/
|
|
110
|
+
export function fileSizeCapFor(file) {
|
|
111
|
+
return normalizePolicyPath(file).startsWith('tests/')
|
|
112
|
+
? FILE_SIZE_CAP_TESTS
|
|
113
|
+
: FILE_SIZE_CAP_DEFAULT;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* The policy's unit: raw lines counted by splitting on newlines. NOT `wc -l` —
|
|
117
|
+
* see the header. A file with no trailing newline still counts its last line;
|
|
118
|
+
* an empty file counts as one.
|
|
119
|
+
*/
|
|
120
|
+
export function countRawLines(content) {
|
|
121
|
+
return content.split('\n').length;
|
|
122
|
+
}
|
|
123
|
+
/** The top-level directory a scoped path belongs to, as the census buckets it. */
|
|
124
|
+
export function fileSizeScopeBucket(file) {
|
|
125
|
+
const path = normalizePolicyPath(file);
|
|
126
|
+
const slash = path.indexOf('/');
|
|
127
|
+
return slash < 0 ? path : path.slice(0, slash);
|
|
128
|
+
}
|
|
129
|
+
// ---------------------------------------------------------------------------
|
|
130
|
+
// THE SECOND SCOPE — `.husky/`, the directory the ratchet itself lives in
|
|
131
|
+
// (backlog §2.32, rid 2026-10-02-hooks-size-rows)
|
|
132
|
+
// ---------------------------------------------------------------------------
|
|
133
|
+
//
|
|
134
|
+
// WHAT WAS INVISIBLE. `FILE_SIZE_SCOPE_DIRS` names four directories, and `.husky`
|
|
135
|
+
// is not one of them, so the files that IMPLEMENT this policy were measured by
|
|
136
|
+
// nothing: `scanFileSize()` put them in `outOfScopeFiles`, the artifact's `files`
|
|
137
|
+
// table has no entry for them, and the prettier leg never receives them. The guard
|
|
138
|
+
// grew 456 → 750 and 265 → 662 raw lines in a single day with no ceiling watching
|
|
139
|
+
// it — the exact shape of the hole this repo keeps closing (a surface asserted but
|
|
140
|
+
// never counted).
|
|
141
|
+
//
|
|
142
|
+
// WHY A SECOND SCOPE AND NOT A FIFTH DIRECTORY IN THE FIRST ONE. Joining `.husky`
|
|
143
|
+
// to `FILE_SIZE_SCOPE_DIRS` at the decided cap of 300 raises `fileSizeOverCap`
|
|
144
|
+
// 162 → 165 and `fileSizeExcessLines` 54,318 → 55,834 (+1,516), and the monotonicity
|
|
145
|
+
// guard refuses a raised ceiling by design — correctly, because that is a policy
|
|
146
|
+
// re-decision wearing the clothes of a measurement. So the invisible set gets its
|
|
147
|
+
// OWN two rows (`fileSizeHooksOverCap`, `fileSizeHooksExcessLines`), seeded from its
|
|
148
|
+
// own measurement, ratcheted by the same leg off the same census run.
|
|
149
|
+
//
|
|
150
|
+
// DISJOINT BY CONSTRUCTION, and that is the property the disjointness arms test: no
|
|
151
|
+
// directory is in both lists, so `isPolicyMeasuredFile` and `isHooksMeasuredFile`
|
|
152
|
+
// cannot both answer true for one path, and growth under `.husky/` moves the hooks
|
|
153
|
+
// rows and leaves the two main rows at their own numbers.
|
|
154
|
+
/** The second scope's directories, relative to the project root. */
|
|
155
|
+
export const HOOKS_FILE_SIZE_SCOPE_DIRS = ['.husky'];
|
|
156
|
+
/**
|
|
157
|
+
* The cap the hooks scope is measured against. It ALIASES `FILE_SIZE_CAP_DEFAULT`
|
|
158
|
+
* rather than restating 300: the 300 is one decision ("may this file be committed
|
|
159
|
+
* at this size?"), and a second literal here would be the second copy
|
|
160
|
+
* `tests/unit/standards/file-size-cap.test.ts` exists to report. Aliasing does NOT
|
|
161
|
+
* mean the hooks ceiling is unbound — the artifact records `hooksCap` as its own
|
|
162
|
+
* input and `.husky/peaks-gate-file-size.mjs` re-derives it from a live census, so
|
|
163
|
+
* re-deciding the default cap trips the hooks row's binding too, as a refusal
|
|
164
|
+
* rather than as a silent re-baseline.
|
|
165
|
+
*/
|
|
166
|
+
export const FILE_SIZE_CAP_HOOKS = FILE_SIZE_CAP_DEFAULT;
|
|
167
|
+
/** The cap the hooks scope is measured against right now. */
|
|
168
|
+
export function hooksFileSizeCaps() {
|
|
169
|
+
return { hooksCap: FILE_SIZE_CAP_HOOKS };
|
|
170
|
+
}
|
|
171
|
+
/** True when `file` sits under one of the hooks scope's directories. */
|
|
172
|
+
export function inHooksFileSizeScope(file) {
|
|
173
|
+
const path = normalizePolicyPath(file);
|
|
174
|
+
return HOOKS_FILE_SIZE_SCOPE_DIRS.some((dir) => path.startsWith(`${dir}/`));
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* A file the hooks rows measure: under a hooks directory AND of a scope extension.
|
|
178
|
+
* The extension universe is the SAME seven as the main scope — it is one decision
|
|
179
|
+
* about what counts as code, and the hooks binding reports it as its own field so a
|
|
180
|
+
* change to it is named against both scopes.
|
|
181
|
+
*/
|
|
182
|
+
export function isHooksMeasuredFile(file) {
|
|
183
|
+
return inHooksFileSizeScope(file) && hasPolicyExtension(file);
|
|
184
|
+
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export declare const DEFAULT_FILE_SIZE_THRESHOLD = 800;
|
|
2
1
|
/**
|
|
3
2
|
* Paths exempt from the file-size cap. The cap is Karpathy's "Simplicity
|
|
4
3
|
* First": it exists to make a human *simplify* an over-long file. A path is
|
|
@@ -27,10 +26,16 @@ export declare function isSizeCapExempt(file: string): boolean;
|
|
|
27
26
|
export type FileSizeViolation = {
|
|
28
27
|
file: string;
|
|
29
28
|
lines: number;
|
|
29
|
+
/** The cap this file was measured against, resolved per path by the policy
|
|
30
|
+
* module (300 raw lines; 500 under root `tests/`), or the caller's override. */
|
|
31
|
+
cap: number;
|
|
30
32
|
};
|
|
31
33
|
export type FileSizeScanResult = {
|
|
32
34
|
ok: boolean;
|
|
33
|
-
threshold
|
|
35
|
+
/** The caller's `threshold` override, or `null` when every file was measured
|
|
36
|
+
* against its own policy cap. One number cannot describe a two-cap policy,
|
|
37
|
+
* so the number that decided a file travels on that file's violation. */
|
|
38
|
+
threshold: number | null;
|
|
34
39
|
checkedFiles: number;
|
|
35
40
|
/** Paths skipped by SIZE_CAP_EXEMPT_PATTERNS (tool output + append-only
|
|
36
41
|
* records). Reported so the exemption is auditable rather than a silent
|
|
@@ -40,13 +45,35 @@ export type FileSizeScanResult = {
|
|
|
40
45
|
* deleted in the working tree). Pre-#015 the scan crashed on these via
|
|
41
46
|
* ENOENT; now they are reported here as informational data. */
|
|
42
47
|
deletedFiles: string[];
|
|
48
|
+
/** Changed files the file-size policy does not measure at all: outside its
|
|
49
|
+
* four scope directories, or with an extension it does not count. Reported
|
|
50
|
+
* rather than silently skipped, for the same reason `exemptFiles` is.
|
|
51
|
+
*
|
|
52
|
+
* WHY THEY ARE NOT VIOLATIONS (F3, rid 2026-09-30-cap-unify-01). Every file
|
|
53
|
+
* the scan checked used to be measured against `fileSizeCapFor`, whose
|
|
54
|
+
* else-branch is 300 — a number that is only defined for `src`/`packages`/
|
|
55
|
+
* `scripts`. So an out-of-scope path (a `.md`, a file under `.husky/`) could
|
|
56
|
+
* redden `request transition` at 301 lines while contributing nothing to the
|
|
57
|
+
* `fileSizeOverCap` row that ratchets the policy: no ceiling to descend, no
|
|
58
|
+
* split campaign with a duty to clear it, and no verdict a contributor could
|
|
59
|
+
* act on. Enforcing the cap wider than the declared scope is not a stricter
|
|
60
|
+
* gate, it is an unauditable one.
|
|
61
|
+
*
|
|
62
|
+
* A caller that names `threshold` explicitly opts out of the scope rule —
|
|
63
|
+
* "apply this number to every changed file" is the documented meaning of the
|
|
64
|
+
* flag — and then nothing is out of scope. */
|
|
65
|
+
outOfScopeFiles: string[];
|
|
43
66
|
violations: FileSizeViolation[];
|
|
44
67
|
};
|
|
45
68
|
export type FileSizeScanOptions = {
|
|
46
69
|
projectRoot: string;
|
|
47
70
|
/** Compare working tree against this ref. Default 'HEAD'. */
|
|
48
71
|
baseRef?: string;
|
|
49
|
-
/**
|
|
72
|
+
/**
|
|
73
|
+
* Line count threshold applied to EVERY file. When omitted, each file is
|
|
74
|
+
* measured against the cap `file-size-policy.ts` defines for its directory —
|
|
75
|
+
* the policy is the default, this option only overrides it.
|
|
76
|
+
*/
|
|
50
77
|
threshold?: number;
|
|
51
78
|
};
|
|
52
79
|
export declare function scanFileSize(options: FileSizeScanOptions): FileSizeScanResult;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { execFileSync } from 'node:child_process';
|
|
2
2
|
import { existsSync, readFileSync, statSync } from 'node:fs';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
|
-
|
|
4
|
+
import { countRawLines, fileSizeCapFor, isPolicyMeasuredFile } from './file-size-policy.js';
|
|
5
5
|
/**
|
|
6
6
|
* Paths exempt from the file-size cap. The cap is Karpathy's "Simplicity
|
|
7
7
|
* First": it exists to make a human *simplify* an over-long file. A path is
|
|
@@ -66,9 +66,15 @@ function getChangedFiles(projectRoot, baseRef) {
|
|
|
66
66
|
// body to count, and a refactor that deletes large files is exactly
|
|
67
67
|
// when the gate should NOT block. Slice #015 fix.
|
|
68
68
|
const trackedRaw = execFileSync('git', ['-C', projectRoot, 'diff', '--name-only', '--diff-filter=AM', baseRef], { encoding: 'utf8', windowsHide: true });
|
|
69
|
-
const tracked = trackedRaw
|
|
69
|
+
const tracked = trackedRaw
|
|
70
|
+
.split(/\r?\n/)
|
|
71
|
+
.map((line) => line.trim())
|
|
72
|
+
.filter(Boolean);
|
|
70
73
|
const untrackedRaw = execFileSync('git', ['-C', projectRoot, 'ls-files', '--others', '--exclude-standard'], { encoding: 'utf8', windowsHide: true });
|
|
71
|
-
const untracked = untrackedRaw
|
|
74
|
+
const untracked = untrackedRaw
|
|
75
|
+
.split(/\r?\n/)
|
|
76
|
+
.map((line) => line.trim())
|
|
77
|
+
.filter(Boolean);
|
|
72
78
|
return Array.from(new Set([...tracked, ...untracked]));
|
|
73
79
|
}
|
|
74
80
|
catch {
|
|
@@ -76,16 +82,38 @@ function getChangedFiles(projectRoot, baseRef) {
|
|
|
76
82
|
}
|
|
77
83
|
}
|
|
78
84
|
function countLines(filePath) {
|
|
79
|
-
|
|
80
|
-
|
|
85
|
+
return countRawLines(readFileSync(filePath, 'utf8'));
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* The number a changed file is measured against, or `null` when the policy has no
|
|
89
|
+
* number for it.
|
|
90
|
+
*
|
|
91
|
+
* `null` is a VERDICT, not a missing value: the file is outside the policy's scope
|
|
92
|
+
* (a directory it does not cover, or an extension it does not count), so it is
|
|
93
|
+
* neither under the cap nor over it. Keeping the decision in one function is what
|
|
94
|
+
* stops the scan loop from asking `fileSizeCapFor` about a path that function was
|
|
95
|
+
* never defined for — the defect the repair cycle found (F3), where the
|
|
96
|
+
* else-branch's 300 was applied to `.husky/` and `docs/` alike.
|
|
97
|
+
*
|
|
98
|
+
* An explicit `threshold` is the caller's own number, so it wins over the scope
|
|
99
|
+
* rule: `--threshold 4` means "every changed file, at 4", which is what the flag
|
|
100
|
+
* has always promised.
|
|
101
|
+
*/
|
|
102
|
+
function policyCapFor(file, override) {
|
|
103
|
+
if (override !== null)
|
|
104
|
+
return override;
|
|
105
|
+
return isPolicyMeasuredFile(file) ? fileSizeCapFor(file) : null;
|
|
81
106
|
}
|
|
82
107
|
export function scanFileSize(options) {
|
|
83
108
|
const baseRef = options.baseRef ?? 'HEAD';
|
|
84
|
-
|
|
109
|
+
// `null` here means "the policy decides, per file" — the cap is a property of
|
|
110
|
+
// the path (300 raw lines; 500 under root `tests/`), not of the run.
|
|
111
|
+
const override = options.threshold ?? null;
|
|
85
112
|
const files = getChangedFiles(options.projectRoot, baseRef);
|
|
86
113
|
const violations = [];
|
|
87
114
|
const deletedFiles = [];
|
|
88
115
|
const exemptFiles = [];
|
|
116
|
+
const outOfScopeFiles = [];
|
|
89
117
|
let checkedFiles = 0;
|
|
90
118
|
for (const file of files) {
|
|
91
119
|
if (isSizeCapExempt(file)) {
|
|
@@ -114,18 +142,28 @@ export function scanFileSize(options) {
|
|
|
114
142
|
continue;
|
|
115
143
|
}
|
|
116
144
|
}
|
|
145
|
+
// The cap is decided BEFORE the file is counted, because for a path outside the
|
|
146
|
+
// policy there is no cap to decide: it is reported in `outOfScopeFiles` instead
|
|
147
|
+
// of being measured against a number the `fileSizeOverCap` row cannot see and
|
|
148
|
+
// no split campaign can descend. See `policyCapFor`.
|
|
149
|
+
const cap = policyCapFor(file, override);
|
|
150
|
+
if (cap === null) {
|
|
151
|
+
outOfScopeFiles.push(file);
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
117
154
|
checkedFiles += 1;
|
|
118
155
|
const lines = countLines(absolute);
|
|
119
|
-
if (lines >
|
|
120
|
-
violations.push({ file, lines });
|
|
156
|
+
if (lines > cap) {
|
|
157
|
+
violations.push({ file, lines, cap });
|
|
121
158
|
}
|
|
122
159
|
}
|
|
123
160
|
return {
|
|
124
161
|
ok: violations.length === 0,
|
|
125
|
-
threshold,
|
|
162
|
+
threshold: override,
|
|
126
163
|
checkedFiles,
|
|
127
164
|
exemptFiles,
|
|
128
165
|
deletedFiles,
|
|
166
|
+
outOfScopeFiles,
|
|
129
167
|
violations
|
|
130
168
|
};
|
|
131
169
|
}
|
|
@@ -136,7 +136,12 @@ export async function scanKarpathy(options) {
|
|
|
136
136
|
continue;
|
|
137
137
|
for (const ap of ANTI_PATTERNS) {
|
|
138
138
|
if (ap.re.test(line)) {
|
|
139
|
-
violations.push({
|
|
139
|
+
violations.push({
|
|
140
|
+
kind: ap.kind,
|
|
141
|
+
line: i + 1,
|
|
142
|
+
snippet: line.trim().slice(0, 120),
|
|
143
|
+
hint: ap.hint
|
|
144
|
+
});
|
|
140
145
|
counts[ap.kind] += 1;
|
|
141
146
|
}
|
|
142
147
|
}
|
|
@@ -22,12 +22,45 @@ const DEFAULT_DIRS = ['src/cli', 'src/services', 'skills', 'tests'];
|
|
|
22
22
|
// Skip orphan detection for them so sub-commands of these parents aren't
|
|
23
23
|
// confused for top-level orphans.
|
|
24
24
|
const PARENT_COMMANDS = new Set([
|
|
25
|
-
'scan',
|
|
26
|
-
'
|
|
27
|
-
'
|
|
28
|
-
'
|
|
29
|
-
'
|
|
30
|
-
'
|
|
25
|
+
'scan',
|
|
26
|
+
'request',
|
|
27
|
+
'session',
|
|
28
|
+
'sub-agent',
|
|
29
|
+
'openspec',
|
|
30
|
+
'sop',
|
|
31
|
+
'workspace',
|
|
32
|
+
'qa',
|
|
33
|
+
'sc',
|
|
34
|
+
'txt',
|
|
35
|
+
'code-review',
|
|
36
|
+
'rd',
|
|
37
|
+
'sh',
|
|
38
|
+
'config',
|
|
39
|
+
'audit',
|
|
40
|
+
'codegraph',
|
|
41
|
+
'context',
|
|
42
|
+
'agent',
|
|
43
|
+
'capability',
|
|
44
|
+
'classify',
|
|
45
|
+
'gstack',
|
|
46
|
+
'gate',
|
|
47
|
+
'hook',
|
|
48
|
+
'hooks',
|
|
49
|
+
'log',
|
|
50
|
+
'loop',
|
|
51
|
+
'memory',
|
|
52
|
+
'perf',
|
|
53
|
+
'playwright',
|
|
54
|
+
'preferences',
|
|
55
|
+
'project',
|
|
56
|
+
'retrospective',
|
|
57
|
+
'slice',
|
|
58
|
+
'statusline',
|
|
59
|
+
'workflow',
|
|
60
|
+
'migrate',
|
|
61
|
+
'mcp',
|
|
62
|
+
'doctor',
|
|
63
|
+
'help'
|
|
31
64
|
]);
|
|
32
65
|
const SKIP_DIRS = new Set(['node_modules', '.git', 'dist', 'build', 'coverage']);
|
|
33
66
|
const EXPORT_FUNCTION_RE = /^export\s+(?:async\s+)?function\s+([A-Za-z_$][\w$]*)/gm;
|
|
@@ -128,20 +161,37 @@ function dedupeDocEndpointOrphans(items) {
|
|
|
128
161
|
}
|
|
129
162
|
function scanExportsInFile(content, sourceFile) {
|
|
130
163
|
const out = [];
|
|
131
|
-
for (const re of [
|
|
132
|
-
|
|
133
|
-
|
|
164
|
+
for (const re of [
|
|
165
|
+
EXPORT_FUNCTION_RE,
|
|
166
|
+
EXPORT_CLASS_RE,
|
|
167
|
+
EXPORT_CONST_RE,
|
|
168
|
+
EXPORT_INTERFACE_RE,
|
|
169
|
+
EXPORT_TYPE_RE,
|
|
170
|
+
EXPORT_ENUM_RE,
|
|
171
|
+
EXPORT_DEFAULT_FUNCTION_RE,
|
|
172
|
+
EXPORT_DEFAULT_CLASS_RE
|
|
173
|
+
]) {
|
|
134
174
|
re.lastIndex = 0;
|
|
135
175
|
}
|
|
136
176
|
let m;
|
|
137
177
|
while ((m = EXPORT_FUNCTION_RE.exec(content)) !== null) {
|
|
138
|
-
out.push({
|
|
178
|
+
out.push({
|
|
179
|
+
name: m[1],
|
|
180
|
+
kind: 'function',
|
|
181
|
+
sourceFile,
|
|
182
|
+
line: lineOf(content, m.index)
|
|
183
|
+
});
|
|
139
184
|
}
|
|
140
185
|
while ((m = EXPORT_CLASS_RE.exec(content)) !== null) {
|
|
141
186
|
out.push({ name: m[1], kind: 'class', sourceFile, line: lineOf(content, m.index) });
|
|
142
187
|
}
|
|
143
188
|
while ((m = EXPORT_INTERFACE_RE.exec(content)) !== null) {
|
|
144
|
-
out.push({
|
|
189
|
+
out.push({
|
|
190
|
+
name: m[1],
|
|
191
|
+
kind: 'interface',
|
|
192
|
+
sourceFile,
|
|
193
|
+
line: lineOf(content, m.index)
|
|
194
|
+
});
|
|
145
195
|
}
|
|
146
196
|
while ((m = EXPORT_TYPE_RE.exec(content)) !== null) {
|
|
147
197
|
out.push({ name: m[1], kind: 'type', sourceFile, line: lineOf(content, m.index) });
|
|
@@ -154,7 +204,12 @@ function scanExportsInFile(content, sourceFile) {
|
|
|
154
204
|
}
|
|
155
205
|
// Slice 2.6.1.A.2: track named default exports.
|
|
156
206
|
while ((m = EXPORT_DEFAULT_FUNCTION_RE.exec(content)) !== null) {
|
|
157
|
-
out.push({
|
|
207
|
+
out.push({
|
|
208
|
+
name: m[1],
|
|
209
|
+
kind: 'function',
|
|
210
|
+
sourceFile,
|
|
211
|
+
line: lineOf(content, m.index)
|
|
212
|
+
});
|
|
158
213
|
}
|
|
159
214
|
while ((m = EXPORT_DEFAULT_CLASS_RE.exec(content)) !== null) {
|
|
160
215
|
out.push({ name: m[1], kind: 'class', sourceFile, line: lineOf(content, m.index) });
|
|
@@ -182,7 +237,10 @@ function scanNamedImportsInFile(content) {
|
|
|
182
237
|
const from = m[2];
|
|
183
238
|
const symbols = raw
|
|
184
239
|
.split(',')
|
|
185
|
-
.map((s) => s
|
|
240
|
+
.map((s) => s
|
|
241
|
+
.trim()
|
|
242
|
+
.split(/\s+as\s+/)[0]
|
|
243
|
+
?.trim() ?? '')
|
|
186
244
|
.filter((s) => s.length > 0);
|
|
187
245
|
out.push({ symbols, from, line: lineOf(content, m.index) });
|
|
188
246
|
}
|
|
@@ -227,9 +285,7 @@ function extractTechDocEndpoints(content) {
|
|
|
227
285
|
function diffVsHead(projectRoot, baseRef) {
|
|
228
286
|
// Slice 2.6.1.A.4: when a base ref is supplied, diff against that ref instead of HEAD.
|
|
229
287
|
// Default behaviour (no baseRef) preserves backward compatibility.
|
|
230
|
-
const args = baseRef
|
|
231
|
-
? ['diff', '--name-status', baseRef]
|
|
232
|
-
: ['diff', '--name-status', 'HEAD'];
|
|
288
|
+
const args = baseRef ? ['diff', '--name-status', baseRef] : ['diff', '--name-status', 'HEAD'];
|
|
233
289
|
const res = spawnSync('git', args, {
|
|
234
290
|
cwd: projectRoot,
|
|
235
291
|
encoding: 'utf8',
|
|
@@ -249,7 +305,10 @@ function diffVsHead(projectRoot, baseRef) {
|
|
|
249
305
|
if (tab < 0)
|
|
250
306
|
continue;
|
|
251
307
|
const status = line.slice(0, tab);
|
|
252
|
-
const path = line
|
|
308
|
+
const path = line
|
|
309
|
+
.slice(tab + 1)
|
|
310
|
+
.split('\t')[0]
|
|
311
|
+
?.split(' ')[0] ?? '';
|
|
253
312
|
if (!path)
|
|
254
313
|
continue;
|
|
255
314
|
if (status.startsWith('A'))
|
|
@@ -277,10 +336,15 @@ function scanReExportsInFile(content, sourceFile, projectRoot) {
|
|
|
277
336
|
while ((m = re.exec(content)) !== null) {
|
|
278
337
|
const raw = m[1];
|
|
279
338
|
const from = m[2];
|
|
280
|
-
const resolved = from.startsWith('.')
|
|
339
|
+
const resolved = from.startsWith('.')
|
|
340
|
+
? resolveImportPath(sourceFile, from, projectRoot)
|
|
341
|
+
: null;
|
|
281
342
|
const symbols = raw
|
|
282
343
|
.split(',')
|
|
283
|
-
.map((s) => s
|
|
344
|
+
.map((s) => s
|
|
345
|
+
.trim()
|
|
346
|
+
.split(/\s+as\s+/)[0]
|
|
347
|
+
?.trim() ?? '')
|
|
284
348
|
.filter((s) => s.length > 0);
|
|
285
349
|
for (const sym of symbols) {
|
|
286
350
|
out.push({ symbol: sym, from, line: lineOf(content, m.index), resolvedFrom: resolved });
|
|
@@ -308,7 +372,9 @@ export async function scanOrphans(options) {
|
|
|
308
372
|
warnings.push(`unreadable: ${rel}: ${error.message}`);
|
|
309
373
|
}
|
|
310
374
|
}
|
|
311
|
-
const diff = scope === 'all'
|
|
375
|
+
const diff = scope === 'all'
|
|
376
|
+
? { added: files, removed: [], modified: files }
|
|
377
|
+
: diffVsHead(options.projectRoot, options.baseRef);
|
|
312
378
|
const changedSet = new Set([...diff.added, ...diff.modified]);
|
|
313
379
|
const allExports = buildExportIndex(files, fileContents);
|
|
314
380
|
const exportBySource = new Map();
|