peaks-loop 4.0.54 → 4.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +61 -0
- package/README-en.md +16 -1
- package/README.md +15 -1
- package/config/eslint/.peaks-rules.cjs +158 -13
- package/config/eslint/tsconfig.lint.json +47 -0
- package/dist/cli/cli-envelope.d.ts +114 -0
- package/dist/cli/cli-envelope.js +85 -0
- package/dist/cli/cli-helpers.d.ts +1 -1
- package/dist/cli/cli-helpers.js +8 -4
- package/dist/cli/commands/_cli-error-envelope.js +1 -1
- package/dist/cli/commands/_register.js +86 -39
- package/dist/cli/commands/_super.js +40 -7
- package/dist/cli/commands/adapter-commands-s2a.js +8 -7
- package/dist/cli/commands/adapter-commands.d.ts +2 -2
- package/dist/cli/commands/adapter-commands.js +7 -8
- package/dist/cli/commands/api-diff-commands.js +5 -4
- package/dist/cli/commands/asset-commands.d.ts +2 -2
- package/dist/cli/commands/asset-commands.js +135 -132
- package/dist/cli/commands/audit-commands.d.ts +1 -1
- package/dist/cli/commands/audit-commands.js +75 -32
- package/dist/cli/commands/autonomous-swarm-commands.d.ts +1 -1
- package/dist/cli/commands/autonomous-swarm-commands.js +14 -8
- package/dist/cli/commands/baseline-commands.js +34 -9
- package/dist/cli/commands/bee-commands.d.ts +1 -1
- package/dist/cli/commands/bee-commands.js +18 -21
- package/dist/cli/commands/best-practice-scan-command.js +6 -34
- package/dist/cli/commands/best-practice-scan-helpers.d.ts +12 -0
- package/dist/cli/commands/best-practice-scan-helpers.js +37 -0
- package/dist/cli/commands/capability-commands.d.ts +1 -1
- package/dist/cli/commands/capability-commands.js +14 -4
- package/dist/cli/commands/capability-worker-config-sc-commands.d.ts +1 -1
- package/dist/cli/commands/changeset-commands.js +21 -18
- package/dist/cli/commands/code-gate-command.js +9 -2
- package/dist/cli/commands/code-job-shape-commands-read-job-shape.d.ts +15 -0
- package/dist/cli/commands/code-job-shape-commands-read-job-shape.js +70 -0
- package/dist/cli/commands/code-job-shape-commands.js +21 -45
- package/dist/cli/commands/code-mode-gate-commands.d.ts +15 -1
- package/dist/cli/commands/code-mode-gate-commands.js +19 -199
- package/dist/cli/commands/code-mode-gate-plan-command.d.ts +14 -0
- package/dist/cli/commands/code-mode-gate-plan-command.js +23 -0
- package/dist/cli/commands/code-mode-gate-should-pause-command.d.ts +24 -0
- package/dist/cli/commands/code-mode-gate-should-pause-command.js +137 -0
- package/dist/cli/commands/code-mode-gate-should-pause-envelope.d.ts +59 -0
- package/dist/cli/commands/code-mode-gate-should-pause-envelope.js +144 -0
- package/dist/cli/commands/code-orchestrator-can-do.js +4 -4
- package/dist/cli/commands/code-review-commands.js +18 -3
- package/dist/cli/commands/code-run-command.js +44 -7
- package/dist/cli/commands/code-runtime-commands.d.ts +17 -0
- package/dist/cli/commands/code-runtime-commands.js +105 -73
- package/dist/cli/commands/codegraph-commands.js +11 -6
- package/dist/cli/commands/codegraph-status-command.js +6 -2
- package/dist/cli/commands/comments-commands.d.ts +14 -0
- package/dist/cli/commands/comments-commands.js +96 -0
- package/dist/cli/commands/compact-command.js +52 -26
- package/dist/cli/commands/complexity-commands.js +6 -7
- package/dist/cli/commands/config-commands.d.ts +1 -1
- package/dist/cli/commands/config-commands.js +33 -9
- package/dist/cli/commands/container-commands.js +39 -15
- package/dist/cli/commands/context-commands.d.ts +1 -1
- package/dist/cli/commands/context-commands.js +40 -13
- package/dist/cli/commands/core/artifacts-command.js +11 -3
- package/dist/cli/commands/core/binding-commands.js +9 -6
- package/dist/cli/commands/core/doctor-command.js +7 -4
- package/dist/cli/commands/core/memory-command.js +57 -21
- package/dist/cli/commands/core/proxy-command.js +3 -1
- package/dist/cli/commands/core/session-command.js +16 -8
- package/dist/cli/commands/core/skill-command.js +32 -17
- package/dist/cli/commands/core/standards-command.js +56 -14
- package/dist/cli/commands/cron-commands-actions.d.ts +43 -0
- package/dist/cli/commands/cron-commands-actions.js +128 -0
- package/dist/cli/commands/cron-commands-schedule.d.ts +86 -0
- package/dist/cli/commands/cron-commands-schedule.js +151 -0
- package/dist/cli/commands/cron-commands.d.ts +35 -32
- package/dist/cli/commands/cron-commands.js +167 -211
- package/dist/cli/commands/cron-scheduler-commands.js +40 -20
- package/dist/cli/commands/cron-scheduler-persist.d.ts +110 -0
- package/dist/cli/commands/cron-scheduler-persist.js +171 -0
- package/dist/cli/commands/dashboard-long-run.js +45 -14
- package/dist/cli/commands/dashboard-summary.js +15 -5
- package/dist/cli/commands/dispatch-commands.js +65 -32
- package/dist/cli/commands/dispatch-from-dag.js +9 -10
- package/dist/cli/commands/doc-commands.js +8 -9
- package/dist/cli/commands/doctor/invoke-from-code.js +1 -1
- package/dist/cli/commands/e2e-verify-env.d.ts +19 -0
- package/dist/cli/commands/e2e-verify-env.js +19 -0
- package/dist/cli/commands/e2e-verify.d.ts +3 -14
- package/dist/cli/commands/e2e-verify.js +49 -29
- package/dist/cli/commands/ecc-commands.d.ts +18 -23
- package/dist/cli/commands/ecc-commands.js +39 -36
- package/dist/cli/commands/evidence-commands.js +10 -6
- package/dist/cli/commands/evolution-commands.d.ts +2 -2
- package/dist/cli/commands/evolution-commands.js +109 -115
- package/dist/cli/commands/feedback-commands-helpers.d.ts +22 -0
- package/dist/cli/commands/feedback-commands-helpers.js +33 -0
- package/dist/cli/commands/feedback-commands.js +15 -38
- package/dist/cli/commands/final-review-commands.d.ts +1 -1
- package/dist/cli/commands/final-review-commands.js +24 -22
- package/dist/cli/commands/fixture-commands.d.ts +1 -1
- package/dist/cli/commands/fixture-commands.js +17 -6
- package/dist/cli/commands/fork-commands-sync-verify.d.ts +12 -0
- package/dist/cli/commands/fork-commands-sync-verify.js +72 -0
- package/dist/cli/commands/fork-commands.js +19 -51
- package/dist/cli/commands/fresh-context-commands.js +3 -1
- package/dist/cli/commands/gate-commands-enforce.d.ts +82 -0
- package/dist/cli/commands/gate-commands-enforce.js +210 -0
- package/dist/cli/commands/gate-commands.d.ts +1 -1
- package/dist/cli/commands/gate-commands.js +85 -205
- package/dist/cli/commands/governance-classify-contract-commands.d.ts +1 -1
- package/dist/cli/commands/governance-classify-contract-commands.js +28 -17
- package/dist/cli/commands/heartbeat-commands-action.d.ts +7 -0
- package/dist/cli/commands/heartbeat-commands-action.js +192 -0
- package/dist/cli/commands/heartbeat-commands-validation.d.ts +57 -0
- package/dist/cli/commands/heartbeat-commands-validation.js +120 -0
- package/dist/cli/commands/heartbeat-commands.d.ts +27 -6
- package/dist/cli/commands/heartbeat-commands.js +19 -198
- package/dist/cli/commands/hook-handle.d.ts +1 -1
- package/dist/cli/commands/hook-handle.js +46 -13
- package/dist/cli/commands/hooks-commands.d.ts +1 -1
- package/dist/cli/commands/hooks-commands.js +18 -6
- package/dist/cli/commands/ide-commands.d.ts +1 -1
- package/dist/cli/commands/ide-commands.js +5 -3
- package/dist/cli/commands/impact-commands.js +8 -2
- package/dist/cli/commands/job-add-slice-command.d.ts +43 -0
- package/dist/cli/commands/job-add-slice-command.js +151 -0
- package/dist/cli/commands/job-commands.d.ts +64 -0
- package/dist/cli/commands/job-commands.js +134 -63
- package/dist/cli/commands/lease-metrics-commands-support.d.ts +73 -0
- package/dist/cli/commands/lease-metrics-commands-support.js +67 -0
- package/dist/cli/commands/lease-metrics-commands.d.ts +3 -44
- package/dist/cli/commands/lease-metrics-commands.js +21 -61
- package/dist/cli/commands/lease-stats-commands.d.ts +1 -1
- package/dist/cli/commands/lease-stats-commands.js +9 -6
- package/dist/cli/commands/lint-commands.d.ts +9 -3
- package/dist/cli/commands/lint-commands.js +15 -8
- package/dist/cli/commands/log-commands.d.ts +1 -1
- package/dist/cli/commands/log-commands.js +8 -6
- package/dist/cli/commands/loop-commands.d.ts +1 -1
- package/dist/cli/commands/loop-commands.js +50 -50
- package/dist/cli/commands/loop-eval-commands.d.ts +1 -1
- package/dist/cli/commands/loop-eval-commands.js +101 -30
- package/dist/cli/commands/memory-commands.js +21 -13
- package/dist/cli/commands/migrate-1-4-1-command.js +1 -1
- package/dist/cli/commands/migrate-v2-10-to-v2-11-command.js +2 -2
- package/dist/cli/commands/mut-commands-helpers.d.ts +30 -0
- package/dist/cli/commands/mut-commands-helpers.js +43 -0
- package/dist/cli/commands/mut-commands.js +16 -58
- package/dist/cli/commands/observability-commands-queries.d.ts +37 -0
- package/dist/cli/commands/observability-commands-queries.js +113 -0
- package/dist/cli/commands/observability-commands.d.ts +1 -1
- package/dist/cli/commands/observability-commands.js +7 -92
- package/dist/cli/commands/openspec-commands.d.ts +1 -1
- package/dist/cli/commands/openspec-commands.js +20 -8
- package/dist/cli/commands/outer-cache-commands.js +18 -7
- package/dist/cli/commands/perf-audit-commands.d.ts +1 -1
- package/dist/cli/commands/perf-audit-commands.js +12 -7
- package/dist/cli/commands/perf-commands.d.ts +1 -1
- package/dist/cli/commands/perf-commands.js +5 -5
- package/dist/cli/commands/playwright-commands.d.ts +1 -1
- package/dist/cli/commands/playwright-commands.js +20 -8
- package/dist/cli/commands/polyrepo-commands.js +21 -19
- package/dist/cli/commands/prd-blocks-commands.js +1 -3
- package/dist/cli/commands/prd-commands.d.ts +1 -1
- package/dist/cli/commands/prd-commands.js +16 -6
- package/dist/cli/commands/preferences-commands.js +13 -12
- package/dist/cli/commands/primer-command.js +5 -5
- package/dist/cli/commands/project-commands.d.ts +1 -1
- package/dist/cli/commands/project-commands.js +33 -9
- package/dist/cli/commands/qa-business-review-commands.js +16 -12
- package/dist/cli/commands/qa-commands.d.ts +1 -1
- package/dist/cli/commands/qa-commands.js +3 -5
- package/dist/cli/commands/release-commands.d.ts +3 -1
- package/dist/cli/commands/release-commands.js +33 -22
- package/dist/cli/commands/request-commands.js +47 -30
- package/dist/cli/commands/request-format-helpers.js +1 -1
- package/dist/cli/commands/retrospective-commands.d.ts +18 -11
- package/dist/cli/commands/retrospective-commands.js +24 -173
- package/dist/cli/commands/retrospective-index-command.d.ts +26 -0
- package/dist/cli/commands/retrospective-index-command.js +99 -0
- package/dist/cli/commands/retrospective-project-root.d.ts +9 -0
- package/dist/cli/commands/retrospective-project-root.js +15 -0
- package/dist/cli/commands/retrospective-search-command.d.ts +27 -0
- package/dist/cli/commands/retrospective-search-command.js +97 -0
- package/dist/cli/commands/retrospective-show-command.d.ts +23 -0
- package/dist/cli/commands/retrospective-show-command.js +80 -0
- package/dist/cli/commands/reviewer-commands.d.ts +1 -1
- package/dist/cli/commands/role-commands.js +14 -9
- package/dist/cli/commands/runtime-commands.js +14 -7
- package/dist/cli/commands/sc-commands.d.ts +1 -1
- package/dist/cli/commands/sc-commands.js +39 -6
- package/dist/cli/commands/scan-commands.js +36 -13
- package/dist/cli/commands/security-audit-commands.d.ts +1 -1
- package/dist/cli/commands/security-audit-commands.js +12 -7
- package/dist/cli/commands/sediment-commands.d.ts +2 -2
- package/dist/cli/commands/sediment-commands.js +146 -139
- package/dist/cli/commands/session-24h-mode.js +15 -2
- package/dist/cli/commands/session-checkpoint-command.js +1 -1
- package/dist/cli/commands/session-migrate-skill-name.js +1 -1
- package/dist/cli/commands/shadcn-commands.d.ts +1 -1
- package/dist/cli/commands/shadcn-commands.js +3 -1
- package/dist/cli/commands/share-commands.js +38 -39
- package/dist/cli/commands/skill-conformance-commands.d.ts +1 -1
- package/dist/cli/commands/skill-conformance-commands.js +1 -1
- package/dist/cli/commands/skill-loop-engineering-readiness-commands.js +16 -17
- package/dist/cli/commands/skill-visibility.js +2 -2
- package/dist/cli/commands/slice-commands.d.ts +1 -1
- package/dist/cli/commands/slice-commands.js +36 -12
- package/dist/cli/commands/slice-integrate-commands.js +6 -7
- package/dist/cli/commands/slice-review-commands-helpers.d.ts +26 -0
- package/dist/cli/commands/slice-review-commands-helpers.js +26 -0
- package/dist/cli/commands/slice-review-commands.js +16 -24
- package/dist/cli/commands/smoke-commands-add-path.d.ts +14 -0
- package/dist/cli/commands/smoke-commands-add-path.js +39 -0
- package/dist/cli/commands/smoke-commands-define.d.ts +18 -0
- package/dist/cli/commands/smoke-commands-define.js +97 -0
- package/dist/cli/commands/smoke-commands-run.d.ts +18 -0
- package/dist/cli/commands/smoke-commands-run.js +119 -0
- package/dist/cli/commands/smoke-commands.d.ts +10 -1
- package/dist/cli/commands/smoke-commands.js +17 -179
- package/dist/cli/commands/sop-commands.d.ts +1 -1
- package/dist/cli/commands/sop-commands.js +38 -10
- package/dist/cli/commands/statusline-commands.d.ts +1 -1
- package/dist/cli/commands/statusline-commands.js +21 -10
- package/dist/cli/commands/sub-agent/detached.js +3 -3
- package/dist/cli/commands/sub-agent-dispatch-guard.d.ts +1 -1
- package/dist/cli/commands/sub-agent-shared.js +1 -1
- package/dist/cli/commands/sub-agent-shutdown-commands.js +17 -9
- package/dist/cli/commands/swarm-commands.d.ts +1 -1
- package/dist/cli/commands/swarm-commands.js +13 -6
- package/dist/cli/commands/tech-commands-helpers.d.ts +37 -0
- package/dist/cli/commands/tech-commands-helpers.js +24 -0
- package/dist/cli/commands/tech-commands.d.ts +2 -29
- package/dist/cli/commands/tech-commands.js +15 -28
- package/dist/cli/commands/test-commands.js +27 -7
- package/dist/cli/commands/user-touchpoint-commands.js +1 -3
- package/dist/cli/commands/verdict-aggregate-command.d.ts +1 -1
- package/dist/cli/commands/verdict-aggregate-command.js +20 -7
- package/dist/cli/commands/vm-commands.js +48 -19
- package/dist/cli/commands/wave-plan-commands.js +5 -2
- package/dist/cli/commands/web-commands.js +14 -4
- package/dist/cli/commands/web-lifecycle-commands.js +5 -3
- package/dist/cli/commands/workflow-commands.d.ts +1 -1
- package/dist/cli/commands/workflow-commands.js +64 -29
- package/dist/cli/commands/workflow-lifecycle-commands.js +19 -17
- package/dist/cli/commands/workflow-plan-commands-actions.d.ts +20 -0
- package/dist/cli/commands/workflow-plan-commands-actions.js +115 -0
- package/dist/cli/commands/workflow-plan-commands-session.d.ts +17 -0
- package/dist/cli/commands/workflow-plan-commands-session.js +59 -0
- package/dist/cli/commands/workflow-plan-commands.d.ts +10 -21
- package/dist/cli/commands/workflow-plan-commands.js +15 -141
- package/dist/cli/commands/workspace/clean-command.js +4 -1
- package/dist/cli/commands/workspace/helpers.js +2 -1
- package/dist/cli/commands/workspace/init-command.js +80 -20
- package/dist/cli/commands/workspace/reconcile-command.js +3 -1
- package/dist/cli/commands/workspace-commands.d.ts +1 -1
- package/dist/cli/commands/workspace-commands.js +1 -1
- package/dist/cli/commands/worktree-auth-commands.d.ts +1 -1
- package/dist/cli/commands/worktree-auth-commands.js +16 -169
- package/dist/cli/commands/worktree-auth-grant-command.d.ts +14 -0
- package/dist/cli/commands/worktree-auth-grant-command.js +118 -0
- package/dist/cli/commands/worktree-auth-manage-commands.d.ts +17 -0
- package/dist/cli/commands/worktree-auth-manage-commands.js +128 -0
- package/dist/cli/commands/worktree-lease-commands.d.ts +1 -1
- package/dist/cli/commands/worktree-lease-commands.js +65 -37
- package/dist/cli/index.js +6 -2
- package/dist/cli/program.js +8 -10
- package/dist/hooks/pre-tool-use-sub-agent.js +1 -6
- package/dist/reporters/bdd-reporter.js +9 -3
- package/dist/services/24h-mode/auto-engage.d.ts +19 -0
- package/dist/services/24h-mode/auto-engage.js +35 -0
- package/dist/services/24h-mode/decider.js +5 -1
- package/dist/services/24h-mode/store.js +4 -2
- package/dist/services/adapter/adapter-registry.js +20 -8
- package/dist/services/adapter/adapter.d.ts +2 -2
- package/dist/services/adapter/auto-adapter.d.ts +2 -2
- package/dist/services/adapter/auto-adapter.js +1 -1
- package/dist/services/adapter/claude-adapter.d.ts +1 -1
- package/dist/services/adapter/claude-adapter.js +8 -8
- package/dist/services/adapter/codex-adapter.d.ts +2 -2
- package/dist/services/adapter/codex-adapter.js +20 -8
- package/dist/services/adapter/copilot-adapter.d.ts +2 -2
- package/dist/services/adapter/copilot-adapter.js +20 -8
- package/dist/services/artifacts/artifact-prerequisites.js +10 -8
- package/dist/services/artifacts/artifact-service.js +3 -1
- package/dist/services/artifacts/artifact-template-bodies.d.ts +12 -0
- package/dist/services/artifacts/artifact-template-bodies.js +165 -0
- package/dist/services/artifacts/artifact-templates.js +26 -168
- package/dist/services/artifacts/request-artifact-service.js +14 -7
- package/dist/services/artifacts/request-artifact-state-helpers.d.ts +3 -2
- package/dist/services/artifacts/request-artifact-state-helpers.js +3 -5
- package/dist/services/artifacts/workspace-artifact-helpers.d.ts +28 -0
- package/dist/services/artifacts/workspace-artifact-helpers.js +54 -0
- package/dist/services/artifacts/workspace-service.d.ts +3 -22
- package/dist/services/artifacts/workspace-service.js +10 -60
- package/dist/services/audit/artifact-writer.js +21 -21
- package/dist/services/audit/audit-goal-service.js +2 -2
- package/dist/services/audit/backing-detector.js +7 -4
- package/dist/services/audit/classifier.js +3 -3
- package/dist/services/audit/decision-writer.js +13 -9
- package/dist/services/audit/enforcers/active-skill-resolver.js +15 -7
- package/dist/services/audit/enforcers/design-draft-confirm.js +4 -4
- package/dist/services/audit/enforcers/lint-audit-regression.js +10 -5
- package/dist/services/audit/enforcers/lint-bee-runtime-contract.js +16 -8
- package/dist/services/audit/enforcers/lint-catalog-governance.js +8 -4
- package/dist/services/audit/enforcers/lint-output-style.js +4 -2
- package/dist/services/audit/enforcers/lint-peaks-code-runtime.js +8 -3
- package/dist/services/audit/enforcers/lint-peaks-skill-runtime.js +8 -3
- package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.js +20 -20
- package/dist/services/audit/enforcers/lint-prd-artifact-handoff.js +5 -5
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.d.ts +1 -1
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.js +5 -5
- package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.js +10 -10
- package/dist/services/audit/enforcers/lint-rd-handoff-coverage.js +10 -8
- package/dist/services/audit/enforcers/lint-reference-shape.js +50 -18
- package/dist/services/audit/enforcers/lint-skill-presence-mandatory.js +5 -5
- package/dist/services/audit/enforcers/lint-style.js +44 -11
- package/dist/services/audit/enforcers/lint-workflow-shape.js +4 -2
- package/dist/services/audit/enforcers/login-gate.js +2 -6
- package/dist/services/audit/enforcers/mock-placement.js +2 -2
- package/dist/services/audit/enforcers/no-root-pollution.js +38 -9
- package/dist/services/audit/enforcers/pre-rd-scan.js +1 -1
- package/dist/services/audit/enforcers/prototype-fidelity.js +1 -1
- package/dist/services/audit/enforcers/resume-detection.js +5 -4
- package/dist/services/audit/prose-ratio-calculator.js +1 -1
- package/dist/services/audit/red-line-catalog-p2-a-bee-runtime.d.ts +39 -0
- package/dist/services/audit/red-line-catalog-p2-a-bee-runtime.js +205 -0
- package/dist/services/audit/red-line-catalog-p2-a-lint-style.d.ts +52 -0
- package/dist/services/audit/red-line-catalog-p2-a-lint-style.js +205 -0
- package/dist/services/audit/red-line-catalog-p2-a.js +3 -374
- package/dist/services/audit/red-line-catalog-p2-b.js +26 -26
- package/dist/services/audit/red-line-catalog.js +26 -38
- package/dist/services/audit/red-lines-service.js +64 -49
- package/dist/services/audit/scanners/openspec-scanner.js +2 -2
- package/dist/services/audit/scanners/rules-tree-scanner.js +2 -2
- package/dist/services/audit/scanners/skills-tree-scanner.js +2 -2
- package/dist/services/audit/static-service.js +3 -3
- package/dist/services/audit-independent/index.d.ts +2 -2
- package/dist/services/audit-independent/index.js +2 -2
- package/dist/services/audit-independent/perf-audit-service.js +19 -8
- package/dist/services/audit-independent/security-audit-service.js +31 -16
- package/dist/services/autonomous-swarm/autonomous-swarm-service.js +75 -46
- package/dist/services/best-practice/output-formatter.js +7 -1
- package/dist/services/capability-audit-service/cross-check.js +11 -5
- package/dist/services/capability-audit-service/runner.js +15 -7
- package/dist/services/capability-baseline/store.js +16 -4
- package/dist/services/capability-baseline/types.js +15 -3
- package/dist/services/capability-baseline/validator.js +43 -7
- package/dist/services/capability-guard-runner/contracts/J02.js +36 -6
- package/dist/services/capability-guard-runner/contracts/J03.js +20 -11
- package/dist/services/capability-guard-runner/contracts/J04.js +24 -15
- package/dist/services/capability-guard-runner/contracts/J05.js +26 -10
- package/dist/services/capability-guard-runner/contracts/J07.js +8 -2
- package/dist/services/capability-guard-runner/contracts/J08.js +22 -5
- package/dist/services/capability-guard-runner/contracts/J10.js +6 -2
- package/dist/services/capability-guard-runner/contracts/J11.d.ts +5 -0
- package/dist/services/capability-guard-runner/contracts/J11.js +14 -2
- package/dist/services/capability-guard-runner/contracts/J12.js +12 -3
- package/dist/services/capability-guard-runner/diff.js +1 -5
- package/dist/services/changeset/changeset-check-service.js +1 -3
- package/dist/services/classify/classify-service.js +20 -8
- package/dist/services/classify/classify-types.js +22 -9
- package/dist/services/code/auto-compact-lifecycle.js +62 -39
- package/dist/services/code/auto-compact-modes.js +2 -2
- package/dist/services/code/auto-compact-orchestrator.js +14 -9
- package/dist/services/code/batch-heartbeat-poller.d.ts +10 -0
- package/dist/services/code/batch-heartbeat-poller.js +17 -1
- package/dist/services/code/compact-event-settle-types.d.ts +80 -0
- package/dist/services/code/compact-event-settle-types.js +20 -0
- package/dist/services/code/compact-event-settle.d.ts +3 -68
- package/dist/services/code/compact-event-settle.js +14 -10
- package/dist/services/code/dag-orchestrator.js +32 -26
- package/dist/services/code/job-shape-decision.js +3 -1
- package/dist/services/code/mode-gate-types.d.ts +57 -0
- package/dist/services/code/mode-gate-types.js +66 -0
- package/dist/services/code/mode-gate.d.ts +4 -58
- package/dist/services/code/mode-gate.js +25 -69
- package/dist/services/code/orchestrator-can-do-advisories.d.ts +30 -0
- package/dist/services/code/orchestrator-can-do-advisories.js +81 -0
- package/dist/services/code/orchestrator-can-do-probes.d.ts +30 -0
- package/dist/services/code/orchestrator-can-do-probes.js +77 -0
- package/dist/services/code/orchestrator-can-do.d.ts +11 -22
- package/dist/services/code/orchestrator-can-do.js +37 -137
- package/dist/services/code/post-compact-checkpoint.d.ts +28 -0
- package/dist/services/code/post-compact-checkpoint.js +57 -0
- package/dist/services/code/post-compact-detector.js +16 -48
- package/dist/services/code/step-08-gate.d.ts +4 -3
- package/dist/services/code/step-08-gate.js +21 -9
- package/dist/services/code/user-touchpoint-classifier.js +0 -7
- package/dist/services/code-review/ecc-bridge.d.ts +6 -6
- package/dist/services/code-review/ecc-bridge.js +23 -23
- package/dist/services/codegraph/codegraph-autorefresh.js +56 -39
- package/dist/services/codegraph/codegraph-config-repair-writer.js +4 -1
- package/dist/services/codegraph/codegraph-exclude-integrity.js +4 -1
- package/dist/services/codegraph/codegraph-exclude-repair.js +1 -2
- package/dist/services/codegraph/codegraph-index-integrity.js +1 -1
- package/dist/services/codegraph/codegraph-preflight-service.d.ts +3 -26
- package/dist/services/codegraph/codegraph-preflight-service.js +16 -37
- package/dist/services/codegraph/codegraph-preflight-structure.d.ts +32 -0
- package/dist/services/codegraph/codegraph-preflight-structure.js +33 -0
- package/dist/services/codegraph/codegraph-process-runner.js +12 -1
- package/dist/services/codegraph/codegraph-service.js +9 -1
- package/dist/services/comments/citation-rules.d.ts +154 -0
- package/dist/services/comments/citation-rules.js +241 -0
- package/dist/services/comments/comment-audit.d.ts +57 -0
- package/dist/services/comments/comment-audit.js +100 -0
- package/dist/services/comments/comment-citations.d.ts +60 -0
- package/dist/services/comments/comment-citations.js +186 -0
- package/dist/services/comments/comment-hygiene.d.ts +79 -0
- package/dist/services/comments/comment-hygiene.js +133 -0
- package/dist/services/comments/comment-prune.d.ts +88 -0
- package/dist/services/comments/comment-prune.js +148 -0
- package/dist/services/comments/prune-apply.d.ts +60 -0
- package/dist/services/comments/prune-apply.js +150 -0
- package/dist/services/comments/repo-path-probe.d.ts +43 -0
- package/dist/services/comments/repo-path-probe.js +78 -0
- package/dist/services/compact/request-transition-hook.js +2 -1
- package/dist/services/compact/suggest-service.d.ts +3 -61
- package/dist/services/compact/suggest-service.js +9 -12
- package/dist/services/compact/suggest-types.d.ts +76 -0
- package/dist/services/compact/suggest-types.js +10 -0
- package/dist/services/compact-history/compact-history-service.js +2 -2
- package/dist/services/compact-statusline/compact-lifecycle-store.d.ts +2 -32
- package/dist/services/compact-statusline/compact-lifecycle-store.js +7 -12
- package/dist/services/compact-statusline/compact-lifecycle-types.d.ts +32 -0
- package/dist/services/compact-statusline/compact-lifecycle-types.js +8 -0
- package/dist/services/compact-statusline/compact-statusline-cell-table.d.ts +42 -0
- package/dist/services/compact-statusline/compact-statusline-cell-table.js +63 -0
- package/dist/services/compact-statusline/compact-statusline-service.d.ts +4 -21
- package/dist/services/compact-statusline/compact-statusline-service.js +9 -101
- package/dist/services/compact-statusline/compact-statusline-state.d.ts +4 -0
- package/dist/services/compact-statusline/compact-statusline-state.js +50 -0
- package/dist/services/config/config-migration.js +2 -2
- package/dist/services/config/config-restore.js +1 -1
- package/dist/services/config/config-rollback.js +1 -1
- package/dist/services/config/config-safety.js +28 -10
- package/dist/services/config/config-service.js +114 -31
- package/dist/services/config/model-routing.js +5 -2
- package/dist/services/config/proxy-service.js +6 -1
- package/dist/services/config/workspace-state-service.js +17 -5
- package/dist/services/context/auto-compact-dispatcher-input.d.ts +38 -0
- package/dist/services/context/auto-compact-dispatcher-input.js +9 -0
- package/dist/services/context/auto-compact-dispatcher.d.ts +2 -30
- package/dist/services/context/auto-compact-reader-input.d.ts +30 -0
- package/dist/services/context/auto-compact-reader-input.js +8 -0
- package/dist/services/context/auto-compact-reader.d.ts +2 -24
- package/dist/services/context/auto-compact-reader.js +4 -1
- package/dist/services/context/auto-compact-thresholds.d.ts +54 -0
- package/dist/services/context/auto-compact-thresholds.js +19 -0
- package/dist/services/context/auto-compact-types.d.ts +2 -46
- package/dist/services/context/auto-compact-types.js +1 -11
- package/dist/services/context/build-dispatch-system-prompt.js +2 -2
- package/dist/services/context/collector.js +8 -10
- package/dist/services/context/context-audit-hint.js +7 -5
- package/dist/services/context/context-audit-keys.d.ts +15 -0
- package/dist/services/context/context-audit-keys.js +77 -0
- package/dist/services/context/context-audit-limits.d.ts +20 -0
- package/dist/services/context/context-audit-limits.js +31 -0
- package/dist/services/context/context-audit-scan.d.ts +19 -0
- package/dist/services/context/context-audit-scan.js +246 -0
- package/dist/services/context/context-audit-types.d.ts +65 -0
- package/dist/services/context/context-audit-types.js +10 -0
- package/dist/services/context/context-audit.d.ts +13 -59
- package/dist/services/context/context-audit.js +38 -254
- package/dist/services/context/context-builder.js +4 -4
- package/dist/services/context/context-schema.d.ts +1 -1
- package/dist/services/context/context-schema.js +13 -13
- package/dist/services/context/doc-retriever.js +2 -2
- package/dist/services/context/harness-context-witness.js +43 -24
- package/dist/services/context/harness-window-config.js +27 -7
- package/dist/services/context/ide-detect.js +2 -1
- package/dist/services/context/index.d.ts +1 -1
- package/dist/services/context/memory-index-reader.js +3 -9
- package/dist/services/context/memory-preflight-config.js +3 -5
- package/dist/services/context/memory-preflight-service.d.ts +2 -20
- package/dist/services/context/memory-preflight-service.js +37 -68
- package/dist/services/context/memory-preflight-support.d.ts +48 -0
- package/dist/services/context/memory-preflight-support.js +56 -0
- package/dist/services/context/post-compact-reinjection.js +3 -3
- package/dist/services/context/renderer.js +7 -3
- package/dist/services/context/spillover-store.js +3 -1
- package/dist/services/context/summary-view.js +1 -1
- package/dist/services/context/threshold.js +2 -2
- package/dist/services/context/tokenizer.js +3 -3
- package/dist/services/crystallization/crystallization-brief-schema.d.ts +80 -0
- package/dist/services/crystallization/crystallization-brief-schema.js +159 -0
- package/dist/services/crystallization/crystallization-service.d.ts +7 -7
- package/dist/services/crystallization/crystallization-service.js +56 -55
- package/dist/services/crystallization/crystallization-store.d.ts +2 -2
- package/dist/services/crystallization/crystallization-store.js +37 -20
- package/dist/services/crystallization/crystallization-types.d.ts +4 -56
- package/dist/services/crystallization/crystallization-types.js +31 -184
- package/dist/services/crystallization/evidence-brief-builder.d.ts +3 -3
- package/dist/services/crystallization/evidence-brief-builder.js +32 -38
- package/dist/services/crystallization/index.d.ts +4 -4
- package/dist/services/crystallization/index.js +4 -4
- package/dist/services/dashboard/project-dashboard-service.js +7 -1
- package/dist/services/dispatch/await-batch-helpers.d.ts +55 -0
- package/dist/services/dispatch/await-batch-helpers.js +206 -0
- package/dist/services/dispatch/await-batch.d.ts +50 -7
- package/dist/services/dispatch/await-batch.js +97 -194
- package/dist/services/dispatch/batch-counter.js +2 -1
- package/dist/services/dispatch/conflict-replay.js +2 -2
- package/dist/services/dispatch/contract-store.js +5 -2
- package/dist/services/dispatch/dispatch-record-input-types.d.ts +81 -0
- package/dist/services/dispatch/dispatch-record-input-types.js +1 -0
- package/dist/services/dispatch/dispatch-record-types.d.ts +6 -73
- package/dist/services/dispatch/dispatch-record-upgrade-fields.d.ts +72 -0
- package/dist/services/dispatch/dispatch-record-upgrade-fields.js +242 -0
- package/dist/services/dispatch/dispatch-record-upgrade-guards.d.ts +15 -0
- package/dist/services/dispatch/dispatch-record-upgrade-guards.js +55 -0
- package/dist/services/dispatch/dispatch-record-upgrade.d.ts +2 -4
- package/dist/services/dispatch/dispatch-record-upgrade.js +21 -213
- package/dist/services/dispatch/dispatch-record-writer.js +54 -26
- package/dist/services/dispatch/dispatch-sub-agent.js +7 -2
- package/dist/services/dispatch/e2e-fixtures.js +1 -1
- package/dist/services/dispatch/isolation-lease.js +39 -17
- package/dist/services/dispatch/merge-back-runner.js +51 -11
- package/dist/services/dispatch/service-shutdown.js +4 -1
- package/dist/services/dispatch/slice-dag-types.d.ts +116 -0
- package/dist/services/dispatch/slice-dag-types.js +41 -0
- package/dist/services/dispatch/slice-dag.d.ts +3 -109
- package/dist/services/dispatch/slice-dag.js +13 -36
- package/dist/services/dispatch/sub-agent-batch-await.d.ts +47 -0
- package/dist/services/dispatch/sub-agent-batch-await.js +73 -0
- package/dist/services/dispatch/sub-agent-dispatcher-types.d.ts +122 -0
- package/dist/services/dispatch/sub-agent-dispatcher-types.js +12 -0
- package/dist/services/dispatch/sub-agent-dispatcher.d.ts +3 -145
- package/dist/services/dispatch/sub-agent-dispatcher.js +14 -70
- package/dist/services/dispatch/test-tool-detection.js +12 -1
- package/dist/services/doc/doc-generator.js +19 -4
- package/dist/services/doctor/doctor-service/checks/check-id-schema.js +16 -8
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.d.ts +7 -2
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.js +26 -8
- package/dist/services/doctor/doctor-service/checks/codegraph-exclude-integrity.js +16 -8
- package/dist/services/doctor/doctor-service/checks/codegraph-index-integrity.js +16 -8
- package/dist/services/doctor/doctor-service/checks/dist-source-version.js +18 -9
- package/dist/services/doctor/doctor-service/checks/ecc-hooks-schema-drift.js +20 -10
- package/dist/services/doctor/doctor-service/checks/gateguard-conflict.js +18 -9
- package/dist/services/doctor/doctor-service/checks/l3-memory-health.js +25 -11
- package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.js +12 -6
- package/dist/services/doctor/doctor-service/checks/multi-binary-drift.d.ts +7 -16
- package/dist/services/doctor/doctor-service/checks/multi-binary-drift.js +50 -70
- package/dist/services/doctor/doctor-service/checks/schema-validity.js +5 -1
- package/dist/services/doctor/doctor-service/checks/skill-presence.js +4 -2
- package/dist/services/doctor/doctor-service/checks/statusline-install.js +8 -4
- package/dist/services/doctor/doctor-service/checks/statusline-runtime.js +8 -4
- package/dist/services/doctor/doctor-service/checks/user-config.js +4 -2
- package/dist/services/doctor/doctor-service/checks/workspace-init.js +8 -4
- package/dist/services/doctor/doctor-service/checks/workspace-layout.js +19 -11
- package/dist/services/doctor/doctor-service/index.js +4 -2
- package/dist/services/doctor/doctor-service/multi-binary-drift-helpers.d.ts +40 -0
- package/dist/services/doctor/doctor-service/multi-binary-drift-helpers.js +49 -0
- package/dist/services/doctor/doctor-service/plugin-registry.js +1 -1
- package/dist/services/doctor/doctor-service/probe-types.d.ts +210 -0
- package/dist/services/doctor/doctor-service/probe-types.js +14 -0
- package/dist/services/doctor/doctor-service/types.d.ts +7 -197
- package/dist/services/doctor/index.d.ts +1 -1
- package/dist/services/doctor/index.js +1 -1
- package/dist/services/env/shell-probe.js +8 -2
- package/dist/services/evidence/evidence-body-builders.d.ts +23 -0
- package/dist/services/evidence/evidence-body-builders.js +197 -0
- package/dist/services/evidence/evidence-generator.js +6 -187
- package/dist/services/evolution/evolution-constraints.d.ts +43 -0
- package/dist/services/evolution/evolution-constraints.js +54 -0
- package/dist/services/evolution/evolution-evaluation-schema.d.ts +43 -0
- package/dist/services/evolution/evolution-evaluation-schema.js +43 -0
- package/dist/services/evolution/evolution-service.d.ts +6 -6
- package/dist/services/evolution/evolution-service.js +58 -58
- package/dist/services/evolution/evolution-store.d.ts +2 -2
- package/dist/services/evolution/evolution-store.js +37 -51
- package/dist/services/evolution/evolution-types.d.ts +2 -22
- package/dist/services/evolution/evolution-types.js +41 -101
- package/dist/services/evolution/independent-evaluator-runner.d.ts +3 -3
- package/dist/services/evolution/independent-evaluator-runner.js +20 -22
- package/dist/services/evolution/regression-skeptic-runner.d.ts +2 -2
- package/dist/services/evolution/regression-skeptic-runner.js +18 -18
- package/dist/services/feedback/feedback-promotion-service.js +48 -12
- package/dist/services/feedback/promotion-artifact-evidence.d.ts +2 -16
- package/dist/services/feedback/promotion-artifact-evidence.js +6 -83
- package/dist/services/feedback/promotion-artifact-json-evidence.d.ts +29 -0
- package/dist/services/feedback/promotion-artifact-json-evidence.js +39 -0
- package/dist/services/feedback/promotion-source-comments.d.ts +47 -0
- package/dist/services/feedback/promotion-source-comments.js +61 -0
- package/dist/services/final-review/final-review-contract.d.ts +26 -0
- package/dist/services/final-review/final-review-contract.js +14 -0
- package/dist/services/final-review/final-review-delivery.d.ts +63 -0
- package/dist/services/final-review/final-review-delivery.js +124 -0
- package/dist/services/final-review/final-review-evidence-budget.d.ts +125 -0
- package/dist/services/final-review/final-review-evidence-budget.js +218 -0
- package/dist/services/final-review/final-review-evidence-collect.d.ts +4 -0
- package/dist/services/final-review/final-review-evidence-collect.js +230 -0
- package/dist/services/final-review/final-review-evidence-sources.d.ts +138 -0
- package/dist/services/final-review/final-review-evidence-sources.js +139 -0
- package/dist/services/final-review/final-review-fifth-dim.d.ts +8 -0
- package/dist/services/final-review/final-review-fifth-dim.js +20 -0
- package/dist/services/final-review/final-review-gates.d.ts +119 -0
- package/dist/services/final-review/final-review-gates.js +214 -0
- package/dist/services/final-review/final-review-output-budget.d.ts +88 -0
- package/dist/services/final-review/final-review-output-budget.js +161 -0
- package/dist/services/final-review/final-review-prompt.d.ts +35 -0
- package/dist/services/final-review/final-review-prompt.js +112 -0
- package/dist/services/final-review/final-review-reviewer.d.ts +57 -0
- package/dist/services/final-review/final-review-reviewer.js +95 -0
- package/dist/services/final-review/final-review-runner.d.ts +3 -0
- package/dist/services/final-review/final-review-runner.js +158 -0
- package/dist/services/final-review/final-review-service.d.ts +119 -373
- package/dist/services/final-review/final-review-service.js +48 -1380
- package/dist/services/final-review/final-review-verdicts.d.ts +60 -0
- package/dist/services/final-review/final-review-verdicts.js +91 -0
- package/dist/services/final-review/index.d.ts +3 -3
- package/dist/services/final-review/index.js +2 -2
- package/dist/services/final-review/pre-post-diff.js +32 -29
- package/dist/services/fixture/fixture-capture-service.js +14 -6
- package/dist/services/fresh-context/trigger-scan.js +13 -2
- package/dist/services/fuzzy-matching/fuzzy-match-service.js +1 -1
- package/dist/services/fuzzy-matching/fzf-pick-service.js +6 -1
- package/dist/services/hooks/pre-tool-code-gate.js +2 -2
- package/dist/services/hooks/presence-marker-detector.js +12 -2
- package/dist/services/hooks/worktree-authorization-gate.js +21 -7
- package/dist/services/ide/adapters/claude-code-adapter.js +30 -17
- package/dist/services/ide/adapters/codex-adapter.js +3 -5
- package/dist/services/ide/adapters/cursor-adapter.js +3 -5
- package/dist/services/ide/adapters/hermes-adapter.js +2 -4
- package/dist/services/ide/adapters/openclaw-adapter.js +2 -4
- package/dist/services/ide/adapters/qoder-adapter.js +2 -4
- package/dist/services/ide/adapters/tongyi-lingma-adapter.js +1 -1
- package/dist/services/ide/adapters/trae-adapter.js +3 -5
- package/dist/services/ide/adapters/zcode-adapter.js +8 -7
- package/dist/services/ide/current-model-detector.js +2 -1
- package/dist/services/ide/ide-compact-types.d.ts +153 -0
- package/dist/services/ide/ide-compact-types.js +1 -0
- package/dist/services/ide/ide-registry.js +1 -1
- package/dist/services/ide/ide-types.d.ts +7 -145
- package/dist/services/ide/resource-profile.js +1 -1
- package/dist/services/ide/shared/atomic-json.js +2 -1
- package/dist/services/impact/impact-scan-service.js +12 -5
- package/dist/services/job/job-commit-verification.d.ts +73 -0
- package/dist/services/job/job-commit-verification.js +72 -0
- package/dist/services/job/job-orchestrator.d.ts +42 -0
- package/dist/services/job/job-orchestrator.js +110 -10
- package/dist/services/job/job-progress-store.d.ts +75 -5
- package/dist/services/job/job-progress-store.js +83 -6
- package/dist/services/job/job-rotation.d.ts +1 -1
- package/dist/services/job/job-rotation.js +5 -1
- package/dist/services/job/job-state-store.js +2 -2
- package/dist/services/job/job-types.js +49 -20
- package/dist/services/job/subagent-job-wrapper.d.ts +1 -1
- package/dist/services/job/subagent-job-wrapper.js +5 -1
- package/dist/services/job-snapshot/snapshot.js +2 -2
- package/dist/services/karpathy-cost/karpathy-cost-check-service.js +23 -13
- package/dist/services/legacy/legacy-detector.js +51 -5
- package/dist/services/lint/detect-eslint.js +10 -4
- package/dist/services/lint/detect-ocr-18.js +11 -3
- package/dist/services/lint/eslint-runner-support.d.ts +22 -0
- package/dist/services/lint/eslint-runner-support.js +185 -0
- package/dist/services/lint/eslint-runner-types.d.ts +69 -0
- package/dist/services/lint/eslint-runner-types.js +11 -0
- package/dist/services/lint/eslint-runner.d.ts +4 -56
- package/dist/services/lint/eslint-runner.js +24 -178
- package/dist/services/lint/npx-resolver.js +1 -3
- package/dist/services/lint/ocr-18-acquire.js +15 -4
- package/dist/services/lint/ocr-multilang-adapter.js +4 -5
- package/dist/services/llm/anthropic-runner.js +4 -1
- package/dist/services/log/log-commands-service.js +2 -6
- package/dist/services/log/logger.js +15 -12
- package/dist/services/log/retention.d.ts +0 -16
- package/dist/services/log/retention.js +2 -18
- package/dist/services/loop/evaluator-dispatcher.js +78 -42
- package/dist/services/loop/loop-bee-relation-service.d.ts +4 -4
- package/dist/services/loop/loop-bee-relation-service.js +36 -40
- package/dist/services/loop/loop-bee-relation-store.d.ts +3 -3
- package/dist/services/loop/loop-bee-relation-store.js +9 -11
- package/dist/services/loop/loop-bee-relation-types.d.ts +1 -1
- package/dist/services/loop/loop-bee-relation-types.js +14 -25
- package/dist/services/loop/loop-release-service.d.ts +2 -2
- package/dist/services/loop/loop-release-service.js +3 -3
- package/dist/services/loop/loop-release-store.d.ts +2 -2
- package/dist/services/loop/loop-release-store.js +4 -6
- package/dist/services/loop/loop-release-types.d.ts +1 -1
- package/dist/services/loop/loop-release-types.js +21 -31
- package/dist/services/loop/monotonic-guard-types.d.ts +51 -0
- package/dist/services/loop/monotonic-guard-types.js +9 -0
- package/dist/services/loop/monotonic-guard.d.ts +2 -43
- package/dist/services/loop/monotonic-runner-types.d.ts +63 -0
- package/dist/services/loop/monotonic-runner-types.js +17 -0
- package/dist/services/loop/monotonic-runner.d.ts +3 -34
- package/dist/services/loop/monotonic-runner.js +10 -20
- package/dist/services/loop/run-driver.js +16 -8
- package/dist/services/loop/spec-service.d.ts +0 -5
- package/dist/services/loop/spec-service.js +49 -9
- package/dist/services/memory/llm-reranker-core.d.ts +108 -0
- package/dist/services/memory/llm-reranker-core.js +105 -0
- package/dist/services/memory/llm-reranker.d.ts +3 -94
- package/dist/services/memory/llm-reranker.js +13 -102
- package/dist/services/memory/memory-ingest-service.d.ts +1 -22
- package/dist/services/memory/memory-ingest-service.js +29 -76
- package/dist/services/memory/memory-ingest-support.d.ts +23 -0
- package/dist/services/memory/memory-ingest-support.js +81 -0
- package/dist/services/memory/memory-rotate-service.js +41 -8
- package/dist/services/memory/memory-search-service.js +8 -4
- package/dist/services/memory/project-context-service.js +26 -5
- package/dist/services/memory/project-memory-service/index/kind-dispatch.d.ts +2 -7
- package/dist/services/memory/project-memory-service/index/kind-dispatch.js +17 -136
- package/dist/services/memory/project-memory-service/index/project-memory-plan-exec.d.ts +7 -0
- package/dist/services/memory/project-memory-service/index/project-memory-plan-exec.js +150 -0
- package/dist/services/memory/project-memory-service/index/ranking.js +6 -3
- package/dist/services/memory/project-memory-service/index/reindex.js +14 -5
- package/dist/services/memory/project-memory-service/index.d.ts +1 -1
- package/dist/services/memory/project-memory-service/index.js +1 -1
- package/dist/services/memory/project-memory-service/memory-kinds.d.ts +31 -0
- package/dist/services/memory/project-memory-service/memory-kinds.js +87 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter-parse.d.ts +24 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter-parse.js +104 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter.d.ts +2 -24
- package/dist/services/memory/project-memory-service/parsers/frontmatter.js +28 -79
- package/dist/services/memory/project-memory-service/parsers/markdown-pure.js +15 -3
- package/dist/services/memory/project-memory-service/store/atomic-write.d.ts +19 -7
- package/dist/services/memory/project-memory-service/store/atomic-write.js +144 -38
- package/dist/services/memory/project-memory-service/store/paths.js +2 -1
- package/dist/services/memory/project-memory-service/types.d.ts +3 -31
- package/dist/services/memory/project-memory-service/types.js +1 -76
- package/dist/services/migrate-skill-name/migrate.js +1 -1
- package/dist/services/migrate-skill-name/schema.js +1 -1
- package/dist/services/mode/mode-enforcement.js +4 -2
- package/dist/services/mode/mode-status-service.d.ts +27 -9
- package/dist/services/mode/mode-status-service.js +64 -12
- package/dist/services/observability/aggregation-helpers.d.ts +22 -0
- package/dist/services/observability/aggregation-helpers.js +65 -0
- package/dist/services/observability/aggregation-types.d.ts +66 -0
- package/dist/services/observability/aggregation-types.js +34 -0
- package/dist/services/observability/aggregation.d.ts +5 -53
- package/dist/services/observability/aggregation.js +17 -80
- package/dist/services/observability/jsonl-store.js +2 -1
- package/dist/services/observability/observability-schema.d.ts +71 -0
- package/dist/services/observability/observability-schema.js +64 -0
- package/dist/services/observability/observability-service.d.ts +3 -56
- package/dist/services/observability/observability-service.js +9 -49
- package/dist/services/openspec/coverage-evidence-reader.js +18 -11
- package/dist/services/openspec/openspec-archive-service.js +31 -24
- package/dist/services/openspec/openspec-init-service.js +8 -2
- package/dist/services/openspec/openspec-propose-from-doctor-service.js +1 -1
- package/dist/services/openspec/openspec-scan-service.js +4 -1
- package/dist/services/openspec/openspec-validate-service.js +26 -5
- package/dist/services/perf/perf-baseline-service.js +2 -6
- package/dist/services/polyrepo/polyrepo-dispatcher.js +2 -1
- package/dist/services/polyrepo/polyrepo-scanner.js +4 -1
- package/dist/services/prd/handoff-frontmatter-shape.d.ts +42 -0
- package/dist/services/prd/handoff-frontmatter-shape.js +67 -0
- package/dist/services/prd/handoff-frontmatter.js +62 -1
- package/dist/services/prd/handoff-gate-evidence.js +14 -10
- package/dist/services/prd/handoff-path-resolution.d.ts +37 -0
- package/dist/services/prd/handoff-path-resolution.js +101 -0
- package/dist/services/prd/handoff-service.d.ts +12 -38
- package/dist/services/prd/handoff-service.js +25 -147
- package/dist/services/prd/handoff-types.d.ts +33 -1
- package/dist/services/prd/prd-blocks-checker.js +28 -8
- package/dist/services/prd/project-scan-bootstrap-service.js +1 -5
- package/dist/services/prd/project-scan-reader.js +1 -4
- package/dist/services/prd/project-scan-sediment.js +1 -4
- package/dist/services/preferences/preferences-service.js +6 -8
- package/dist/services/preferences/preferences-types.js +4 -4
- package/dist/services/qa/bdd-test-style-contract.d.ts +41 -0
- package/dist/services/qa/bdd-test-style-contract.js +37 -0
- package/dist/services/qa/bdd-test-style-verifier.d.ts +2 -24
- package/dist/services/qa/bdd-test-style-verifier.js +5 -31
- package/dist/services/qa/browser-event-logger.js +2 -1
- package/dist/services/qa/qa-business-review-state.js +20 -5
- package/dist/services/qa/screenshot-archive-service.js +1 -3
- package/dist/services/rd/ast-gate.js +2 -2
- package/dist/services/rd/impl.js +1 -1
- package/dist/services/rd/rd-service.js +117 -43
- package/dist/services/rd/reviewer-dispatch-policy.js +4 -7
- package/dist/services/rd/standards-diagnostic.js +4 -1
- package/dist/services/rd/strategy.js +10 -3
- package/dist/services/rd/tactical-stage.js +2 -2
- package/dist/services/rd/types.js +9 -7
- package/dist/services/rd-swarm/rd-swarm-service.d.ts +2 -45
- package/dist/services/rd-swarm/rd-swarm-service.js +140 -21
- package/dist/services/rd-swarm/rd-swarm-types.d.ts +54 -0
- package/dist/services/rd-swarm/rd-swarm-types.js +10 -0
- package/dist/services/recommendations/capability-map-service.js +10 -2
- package/dist/services/recommendations/capability-seed-items.js +81 -14
- package/dist/services/recommendations/capability-seed-mappings.js +420 -48
- package/dist/services/recommendations/capability-seed-sources-mcp-server.d.ts +9 -0
- package/dist/services/recommendations/capability-seed-sources-mcp-server.js +233 -0
- package/dist/services/recommendations/capability-seed-sources.js +127 -32
- package/dist/services/recommendations/installed-capability-detector.d.ts +5 -5
- package/dist/services/recommendations/installed-capability-detector.js +11 -10
- package/dist/services/release/release-state.d.ts +2 -2
- package/dist/services/release/release-state.js +44 -15
- package/dist/services/release/version-precheck-layer-changeset.d.ts +2 -0
- package/dist/services/release/version-precheck-layer-changeset.js +43 -0
- package/dist/services/release/version-precheck-service.d.ts +11 -36
- package/dist/services/release/version-precheck-service.js +20 -104
- package/dist/services/release/version-precheck-support.d.ts +53 -0
- package/dist/services/release/version-precheck-support.js +64 -0
- package/dist/services/retrospective/retrospective-index.js +17 -3
- package/dist/services/retrospective/retrospective-search-service.js +6 -2
- package/dist/services/retrospective/retrospective-show.js +4 -1
- package/dist/services/reviewer/model-family.js +7 -1
- package/dist/services/reviewer/providers/anthropic.d.ts +5 -0
- package/dist/services/reviewer/providers/anthropic.js +10 -1
- package/dist/services/reviewer/providers/openai.d.ts +5 -0
- package/dist/services/reviewer/providers/openai.js +10 -1
- package/dist/services/reviewer/reviewer-config.js +4 -2
- package/dist/services/reviewer/reviewer-service.d.ts +2 -36
- package/dist/services/reviewer/reviewer-service.js +2 -1
- package/dist/services/reviewer/reviewer-types.d.ts +43 -0
- package/dist/services/reviewer/reviewer-types.js +1 -0
- package/dist/services/role/role-registry.js +9 -1
- package/dist/services/runtime/runtime-detector.js +4 -1
- package/dist/services/runtime/vendors/claude-code.js +14 -6
- package/dist/services/runtime/vendors/codex.js +11 -3
- package/dist/services/runtime/vendors/copilot.js +11 -3
- package/dist/services/sc/sc-service.js +28 -15
- package/dist/services/scan/acceptance-coverage-service.js +4 -1
- package/dist/services/scan/api-diff-openapi-schema-read.d.ts +67 -0
- package/dist/services/scan/api-diff-openapi-schema-read.js +154 -0
- package/dist/services/scan/api-diff-openapi.d.ts +16 -2
- package/dist/services/scan/api-diff-openapi.js +19 -123
- package/dist/services/scan/api-diff-recorded.js +16 -3
- package/dist/services/scan/api-diff-service.js +49 -16
- package/dist/services/scan/api-diff-types.js +12 -3
- package/dist/services/scan/api-surface-helpers.d.ts +13 -0
- package/dist/services/scan/api-surface-helpers.js +31 -0
- package/dist/services/scan/api-surface-service.d.ts +2 -45
- package/dist/services/scan/api-surface-service.js +15 -26
- package/dist/services/scan/api-surface-types.d.ts +54 -0
- package/dist/services/scan/api-surface-types.js +10 -0
- package/dist/services/scan/archetype-detection.d.ts +74 -0
- package/dist/services/scan/archetype-detection.js +315 -0
- package/dist/services/scan/archetype-service.js +58 -133
- package/dist/services/scan/diff-scope-service.js +35 -15
- package/dist/services/scan/existing-system-service.js +16 -99
- package/dist/services/scan/existing-system-visual-tokens.d.ts +20 -0
- package/dist/services/scan/existing-system-visual-tokens.js +123 -0
- package/dist/services/scan/file-size-policy.d.ts +86 -0
- package/dist/services/scan/file-size-policy.js +184 -0
- package/dist/services/scan/file-size-scan.d.ts +30 -3
- package/dist/services/scan/file-size-scan.js +47 -9
- package/dist/services/scan/karpathy-service.js +6 -1
- package/dist/services/scan/orphan-service.js +86 -20
- package/dist/services/scan/scan-types.d.ts +9 -0
- package/dist/services/scan/type-sanity-service.js +104 -10
- package/dist/services/sediment/dispose-confirm.d.ts +2 -2
- package/dist/services/sediment/dispose-confirm.js +2 -2
- package/dist/services/sediment/json-schema.d.ts +1 -1
- package/dist/services/sediment/json-schema.js +25 -13
- package/dist/services/sediment/manifest-lint.d.ts +1 -12
- package/dist/services/sediment/manifest-lint.js +1 -7
- package/dist/services/sediment/pool-paths.js +13 -9
- package/dist/services/sediment/pool-read.d.ts +1 -1
- package/dist/services/sediment/pool-read.js +42 -18
- package/dist/services/sediment/pool-rebuild-index.d.ts +1 -1
- package/dist/services/sediment/pool-rebuild-index.js +5 -5
- package/dist/services/sediment/pool-write.d.ts +1 -1
- package/dist/services/sediment/pool-write.js +7 -7
- package/dist/services/sediment/promotion-gate.d.ts +1 -1
- package/dist/services/sediment/promotion-gate.js +9 -9
- package/dist/services/sediment/types.d.ts +8 -8
- package/dist/services/session/binding-status-service.js +14 -4
- package/dist/services/session/caller-binding-service.js +2 -1
- package/dist/services/session/getSessionDir.js +4 -1
- package/dist/services/session/index.d.ts +1 -1
- package/dist/services/session/index.js +1 -1
- package/dist/services/session/resolve-caller-id.js +7 -5
- package/dist/services/session/session-binding-bridge.js +26 -25
- package/dist/services/session/session-checkpoint-service.js +1 -1
- package/dist/services/session/session-file-schema.d.ts +70 -0
- package/dist/services/session/session-file-schema.js +68 -0
- package/dist/services/session/session-manager.d.ts +6 -6
- package/dist/services/session/session-manager.js +30 -29
- package/dist/services/session/session-resume-service.js +2 -1
- package/dist/services/share/bundle-format-constants.d.ts +85 -0
- package/dist/services/share/bundle-format-constants.js +100 -0
- package/dist/services/share/bundle-reader.d.ts +3 -3
- package/dist/services/share/bundle-reader.js +75 -68
- package/dist/services/share/bundle-types.d.ts +3 -70
- package/dist/services/share/bundle-types.js +38 -107
- package/dist/services/share/bundle-writer.d.ts +3 -3
- package/dist/services/share/bundle-writer.js +101 -91
- package/dist/services/share/run-state-contract.d.ts +1 -1
- package/dist/services/share/run-state-contract.js +7 -13
- package/dist/services/signal/cancel-handler.js +2 -1
- package/dist/services/skill/resume-detector.js +6 -4
- package/dist/services/skill/skill-scheduler.js +3 -1
- package/dist/services/skill/skill-search-service.js +4 -4
- package/dist/services/skillhub/release-diff.d.ts +2 -2
- package/dist/services/skillhub/release-diff.js +6 -10
- package/dist/services/skillhub/release-export.d.ts +2 -2
- package/dist/services/skillhub/release-export.js +15 -17
- package/dist/services/skillhub/release-gc-blobs.d.ts +2 -2
- package/dist/services/skillhub/release-gc-blobs.js +4 -4
- package/dist/services/skillhub/release-import.d.ts +2 -2
- package/dist/services/skillhub/release-import.js +13 -12
- package/dist/services/skillhub/release-retain.d.ts +3 -3
- package/dist/services/skillhub/release-retain.js +22 -22
- package/dist/services/skillhub/sqlite-store.d.ts +1 -1
- package/dist/services/skillhub/sqlite-store.js +12 -11
- package/dist/services/skillhub/tar-runtime.js +15 -15
- package/dist/services/skillhub/types.d.ts +4 -4
- package/dist/services/skills/hooks-codegate-superpowers.js +16 -7
- package/dist/services/skills/hooks-settings-service.js +61 -19
- package/dist/services/skills/presence-lease-service.js +26 -16
- package/dist/services/skills/presence-lease-types.d.ts +1 -1
- package/dist/services/skills/presence-lease-types.js +1 -1
- package/dist/services/skills/skill-conformance-service.js +40 -8
- package/dist/services/skills/skill-presence-service.js +16 -14
- package/dist/services/skills/skill-runbook-service.js +2 -1
- package/dist/services/skills/skill-statusline-model.d.ts +128 -0
- package/dist/services/skills/skill-statusline-model.js +163 -0
- package/dist/services/skills/skill-statusline-renderer.js +4 -3
- package/dist/services/skills/skill-statusline-service.d.ts +3 -100
- package/dist/services/skills/skill-statusline-service.js +56 -163
- package/dist/services/skills/statusline-palette.js +11 -6
- package/dist/services/skills/statusline-settings-service.js +2 -1
- package/dist/services/skills/sync-service-support.d.ts +65 -0
- package/dist/services/skills/sync-service-support.js +50 -0
- package/dist/services/skills/sync-service.d.ts +3 -66
- package/dist/services/skills/sync-service.js +15 -53
- package/dist/services/slice/calibration-store.js +8 -2
- package/dist/services/slice/cross-pass-edge-merger.d.ts +3 -28
- package/dist/services/slice/cross-pass-edge-merger.js +13 -63
- package/dist/services/slice/cross-pass-edge-static-scan-support.d.ts +69 -0
- package/dist/services/slice/cross-pass-edge-static-scan-support.js +74 -0
- package/dist/services/slice/granularity-decider.js +2 -2
- package/dist/services/slice/slice-archive-service.js +8 -3
- package/dist/services/slice/slice-check-service.js +19 -8
- package/dist/services/slice/slice-decompose-runners.js +61 -23
- package/dist/services/slice/slice-decompose-service.js +4 -4
- package/dist/services/slice/slice-review-state.js +8 -2
- package/dist/services/smoke/smoke-paths-state.js +9 -2
- package/dist/services/sop/gate-enforce-service.js +9 -2
- package/dist/services/sop/sop-advance-service.js +14 -2
- package/dist/services/sop/sop-check-service.js +16 -4
- package/dist/services/sop/sop-paths.js +3 -1
- package/dist/services/sop/sop-registry-service.js +5 -1
- package/dist/services/sop/sop-service.js +29 -7
- package/dist/services/sop/sop-types.js +5 -1
- package/dist/services/standards/ide-aware-standards-service.js +2 -2
- package/dist/services/standards/loop-engineering-lint.js +12 -5
- package/dist/services/standards/loop-engineering-readiness-lint.js +5 -5
- package/dist/services/standards/migrate-claude-rules-service.js +9 -7
- package/dist/services/standards/missing-standards-detector.js +1 -3
- package/dist/services/standards/project-context-support.d.ts +50 -0
- package/dist/services/standards/project-context-support.js +244 -0
- package/dist/services/standards/project-context-types.d.ts +30 -0
- package/dist/services/standards/project-context-types.js +11 -0
- package/dist/services/standards/project-context.d.ts +10 -22
- package/dist/services/standards/project-context.js +27 -214
- package/dist/services/standards/project-standards-service.js +43 -12
- package/dist/services/standards/standards-render-common.d.ts +15 -0
- package/dist/services/standards/standards-render-common.js +49 -0
- package/dist/services/standards/standards-render.d.ts +1 -2
- package/dist/services/standards/standards-render.js +31 -58
- package/dist/services/standards/ui-library-dispatch-block.js +1 -1
- package/dist/services/tech/tech-change-id-service.js +7 -7
- package/dist/services/tech/tech-service.js +73 -26
- package/dist/services/test-cache/test-cache-service.js +8 -3
- package/dist/services/verdict/envelope-parsers.d.ts +84 -0
- package/dist/services/verdict/envelope-parsers.js +146 -0
- package/dist/services/verdict/envelopes.d.ts +50 -60
- package/dist/services/verdict/envelopes.js +18 -156
- package/dist/services/verdict/verdict-aggregator.js +27 -3
- package/dist/services/vm/vm-lease.js +15 -3
- package/dist/services/web/aria-node.d.ts +27 -0
- package/dist/services/web/aria-node.js +1 -0
- package/dist/services/web/browser-acquire.js +3 -1
- package/dist/services/web/browser-cache-probe.d.ts +18 -0
- package/dist/services/web/browser-cache-probe.js +110 -0
- package/dist/services/web/browser-session-manager.js +6 -2
- package/dist/services/web/daemon-registry.js +4 -1
- package/dist/services/web/playwright-loader.d.ts +2 -70
- package/dist/services/web/playwright-types.d.ts +75 -0
- package/dist/services/web/playwright-types.js +1 -0
- package/dist/services/web/snapshot-pruner.d.ts +2 -23
- package/dist/services/web/snapshot-pruner.js +8 -3
- package/dist/services/web/web-daemon-service.js +1 -3
- package/dist/services/web/web-install-service.d.ts +3 -32
- package/dist/services/web/web-install-service.js +21 -100
- package/dist/services/web/web-install-types.d.ts +31 -0
- package/dist/services/web/web-install-types.js +13 -0
- package/dist/services/web/web-login-profile.js +7 -5
- package/dist/services/web/web-protocol.js +3 -1
- package/dist/services/workflow/pipeline-verify-gate-support.js +63 -17
- package/dist/services/workflow/pipeline-verify-service.js +17 -6
- package/dist/services/workflow/plan-reader.js +5 -1
- package/dist/services/workflow/plan-refresher.js +20 -6
- package/dist/services/workflow/plan-trigger-detector.js +31 -8
- package/dist/services/workflow/provision-dispatch-node.js +8 -3
- package/dist/services/workflow/workflow-autonomous-resume-helpers.d.ts +3 -1
- package/dist/services/workflow/workflow-autonomous-resume-helpers.js +35 -144
- package/dist/services/workflow/workflow-autonomous-resume-validation.d.ts +16 -0
- package/dist/services/workflow/workflow-autonomous-resume-validation.js +155 -0
- package/dist/services/workflow/workflow-autonomous-service.js +25 -13
- package/dist/services/workflow/workflow-graph-store-helpers.d.ts +51 -0
- package/dist/services/workflow/workflow-graph-store-helpers.js +111 -0
- package/dist/services/workflow/workflow-graph-store.d.ts +2 -35
- package/dist/services/workflow/workflow-graph-store.js +30 -107
- package/dist/services/workflow/workflow-graph-types.js +3 -3
- package/dist/services/workflow/workflow-inflight-probe.js +14 -7
- package/dist/services/workflow/workflow-loader.js +5 -1
- package/dist/services/workflow/workflow-node-lifecycle.js +22 -21
- package/dist/services/workflow/workflow-presence-lifecycle-types.d.ts +50 -0
- package/dist/services/workflow/workflow-presence-lifecycle-types.js +1 -0
- package/dist/services/workflow/workflow-presence-lifecycle.d.ts +2 -42
- package/dist/services/workflow/workflow-presence-lifecycle.js +19 -21
- package/dist/services/workflow/workflow-router-service.js +169 -27
- package/dist/services/workflow/workflow-skip-service.js +14 -4
- package/dist/services/workflow/workflow-spec-builders.d.ts +15 -0
- package/dist/services/workflow/workflow-spec-builders.js +121 -0
- package/dist/services/workflow/workflow-spec.d.ts +7 -6
- package/dist/services/workflow/workflow-spec.js +22 -116
- package/dist/services/workflow/workflow-state-store.js +2 -1
- package/dist/services/workspace/generated-artifacts-stamp.d.ts +2 -2
- package/dist/services/workspace/generated-artifacts-stamp.js +2 -2
- package/dist/services/workspace/migrate-1-4-1-service.js +80 -14
- package/dist/services/workspace/migrate-service.js +66 -16
- package/dist/services/workspace/reconcile-migrate.js +6 -2
- package/dist/services/workspace/reconcile-service.js +37 -16
- package/dist/services/workspace/workspace-claude-settings-materializer.js +7 -5
- package/dist/services/workspace/workspace-clean-service.js +4 -1
- package/dist/services/workspace/workspace-service.js +12 -4
- package/dist/services/workspace/workspace-state-service.js +1 -1
- package/dist/services/worktree/git-worktree-parser.js +13 -3
- package/dist/services/worktree/host-worktree-reconciler.js +8 -4
- package/dist/services/worktree/long-path-cleanup.js +23 -6
- package/dist/services/worktree/worktree-gc-guard.js +3 -1
- package/dist/services/worktree/worktree-lease-types.d.ts +53 -0
- package/dist/services/worktree/worktree-lease-types.js +10 -0
- package/dist/services/worktree/worktree-lease.d.ts +2 -44
- package/dist/shared/array-guards.d.ts +30 -0
- package/dist/shared/array-guards.js +32 -0
- package/dist/shared/format-md-compact-internals.d.ts +26 -0
- package/dist/shared/format-md-compact-internals.js +125 -0
- package/dist/shared/format-md-compact.js +1 -117
- package/dist/shared/fs-utils.js +2 -1
- package/dist/shared/incrementing-number.js +3 -3
- package/dist/shared/json-parse.d.ts +71 -0
- package/dist/shared/json-parse.js +32 -0
- package/dist/shared/json-schema-mini.js +3 -1
- package/dist/shared/path-safety.js +3 -1
- package/dist/shared/path-utils.d.ts +20 -0
- package/dist/shared/path-utils.js +26 -0
- package/dist/shared/planner-response.js +3 -3
- package/dist/shared/stale-policy.js +1 -3
- package/dist/skills/peaks-maker/index.js +11 -11
- package/package.json +31 -8
- package/scripts/clean-dist.mjs +1 -2
- package/scripts/copy-templates.mjs +2 -4
- package/scripts/install-skills.mjs +286 -283
- package/scripts/sync-version.mjs +25 -8
- package/scripts/watch.mjs +8 -2
- package/skills/bee/peaks-qa/references/reading-handoff-frontmatter.md +3 -1
- package/skills/bee/peaks-rd/references/parallel-review-fanout.md +1 -1
- package/skills/bee/peaks-rd/references/rd-fanout-contracts.md +3 -2
- package/skills/bee/peaks-rd/references/writing-handoff-frontmatter.md +29 -7
- package/skills/peaks-code/SKILL.md +1 -1
- package/skills/peaks-code/references/frontend-only-mode.md +2 -2
- package/skills/peaks-code/references/startup-sequence.md +0 -4
- package/dist/cli/commands/upgrade-commands.d.ts +0 -25
- package/dist/cli/commands/upgrade-commands.js +0 -154
- package/dist/services/upgrade/1x-detector-service.d.ts +0 -7
- package/dist/services/upgrade/1x-detector-service.js +0 -94
- package/dist/services/upgrade/gitignore-migrate-service.d.ts +0 -56
- package/dist/services/upgrade/gitignore-migrate-service.js +0 -170
- package/dist/services/upgrade/upgrade-service.d.ts +0 -81
- package/dist/services/upgrade/upgrade-service.js +0 -405
- package/skills/peaks-code/references/step-0-55-1x-detection.md +0 -83
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which comments are still worth their bytes to the next reader.
|
|
3
|
+
*
|
|
4
|
+
* Two categories are reported as hygiene debt, and they fail in different
|
|
5
|
+
* directions, so they are kept separate rather than summed into one number:
|
|
6
|
+
*
|
|
7
|
+
* - `dead-reference` — the comment asserts that some file exists by naming a
|
|
8
|
+
* path, and that path resolves nowhere the citation is allowed to mean. This
|
|
9
|
+
* is checkable, and it is the class that has already cost this repository a
|
|
10
|
+
* wrong decision: the header of `src/services/prd/handoff-gate-evidence.ts`
|
|
11
|
+
* described a pre-existing "no producer" state in the same voice as the
|
|
12
|
+
* current one, a reader took it as fact, and the fix was chased into
|
|
13
|
+
* `dist/` instead of the source.
|
|
14
|
+
* - `narrative` — the comment is about the work rather than the code: slice
|
|
15
|
+
* and rid identifiers, `AC-3`, "F2 of `rid-…`", "this used to claim", "the
|
|
16
|
+
* test named above was deleted". Legitimately valuable in a commit message
|
|
17
|
+
* or `.peaks/docs/backlog.md`; in a source file it is re-read by every
|
|
18
|
+
* later agent, at their token cost, and it rots silently the moment the
|
|
19
|
+
* history it summarises moves.
|
|
20
|
+
*
|
|
21
|
+
* The narrative rule is a marker list, not a heuristic about length or
|
|
22
|
+
* sentence shape, precisely because a false positive here is worse than a false
|
|
23
|
+
* positive on `dead-reference`: a wrong `dead-reference` is visible in a diff as
|
|
24
|
+
* a removed path, while a wrong `narrative` deletes a reason someone wrote down
|
|
25
|
+
* on purpose. Every finding carries its matched marker for that reason — an
|
|
26
|
+
* unattributable finding is one nobody can review, and a rule nobody can review
|
|
27
|
+
* is a rule that will be widened until it stops mattering.
|
|
28
|
+
*/
|
|
29
|
+
/** Why a comment line was flagged. */
|
|
30
|
+
export type CommentFindingKind = 'dead-reference' | 'narrative';
|
|
31
|
+
export type CommentFinding = {
|
|
32
|
+
readonly file: string;
|
|
33
|
+
readonly line: number;
|
|
34
|
+
readonly kind: CommentFindingKind;
|
|
35
|
+
/** The path that does not resolve, or the marker that matched. Never prose. */
|
|
36
|
+
readonly matched: string;
|
|
37
|
+
readonly text: string;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Development-process markers. Each entry is a named rule so a report can say
|
|
41
|
+
* WHICH one fired — the failure mode this whole feature is modelled on is a
|
|
42
|
+
* refusal that could not name itself (the content scan in
|
|
43
|
+
* `src/services/memory/project-memory-service/store/atomic-write.ts` answered a
|
|
44
|
+
* ten-pattern `||` chain with `matchedTerm: null`).
|
|
45
|
+
*
|
|
46
|
+
* Order is significant and is the whole attribution: one line reports its FIRST
|
|
47
|
+
* match, so a specific marker must precede the general one that also fits it.
|
|
48
|
+
* `F2 of \`rid-…\`` is a finding reference, not a bare rid, and a list ordered
|
|
49
|
+
* the other way round would blame the wrong rule for every such line.
|
|
50
|
+
*/
|
|
51
|
+
export declare const NARRATIVE_MARKERS: ReadonlyArray<{
|
|
52
|
+
name: string;
|
|
53
|
+
pattern: RegExp;
|
|
54
|
+
}>;
|
|
55
|
+
export type CommentScanInput = {
|
|
56
|
+
/** Repo-relative path, e.g. `src/services/x/y.ts`. */
|
|
57
|
+
readonly file: string;
|
|
58
|
+
readonly source: string;
|
|
59
|
+
};
|
|
60
|
+
export type CommentScanOptions = {
|
|
61
|
+
/** Injected for tests; defaults to nothing-exists so a caller must decide. */
|
|
62
|
+
readonly exists?: (relPath: string) => boolean;
|
|
63
|
+
/** True for directories only; defaults to `exists`, which is true for both. */
|
|
64
|
+
readonly dirExists?: (relDir: string) => boolean;
|
|
65
|
+
/** Filesystem-only view of the tree, for the installed-package question.
|
|
66
|
+
* Defaults to `exists`. */
|
|
67
|
+
readonly installed?: (relPath: string) => boolean;
|
|
68
|
+
readonly kinds?: readonly CommentFindingKind[];
|
|
69
|
+
};
|
|
70
|
+
/** Every finding in one file, in line order. */
|
|
71
|
+
export declare function scanComments(input: CommentScanInput, options?: CommentScanOptions): CommentFinding[];
|
|
72
|
+
/** Per-file totals, which is the shape the gate ratchets and the worklist sorts by. */
|
|
73
|
+
export type CommentFileSummary = {
|
|
74
|
+
readonly file: string;
|
|
75
|
+
readonly commentLines: number;
|
|
76
|
+
readonly deadReferences: number;
|
|
77
|
+
readonly narrative: number;
|
|
78
|
+
};
|
|
79
|
+
export declare function summarize(input: CommentScanInput, findings: readonly CommentFinding[]): CommentFileSummary;
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which comments are still worth their bytes to the next reader.
|
|
3
|
+
*
|
|
4
|
+
* Two categories are reported as hygiene debt, and they fail in different
|
|
5
|
+
* directions, so they are kept separate rather than summed into one number:
|
|
6
|
+
*
|
|
7
|
+
* - `dead-reference` — the comment asserts that some file exists by naming a
|
|
8
|
+
* path, and that path resolves nowhere the citation is allowed to mean. This
|
|
9
|
+
* is checkable, and it is the class that has already cost this repository a
|
|
10
|
+
* wrong decision: the header of `src/services/prd/handoff-gate-evidence.ts`
|
|
11
|
+
* described a pre-existing "no producer" state in the same voice as the
|
|
12
|
+
* current one, a reader took it as fact, and the fix was chased into
|
|
13
|
+
* `dist/` instead of the source.
|
|
14
|
+
* - `narrative` — the comment is about the work rather than the code: slice
|
|
15
|
+
* and rid identifiers, `AC-3`, "F2 of `rid-…`", "this used to claim", "the
|
|
16
|
+
* test named above was deleted". Legitimately valuable in a commit message
|
|
17
|
+
* or `.peaks/docs/backlog.md`; in a source file it is re-read by every
|
|
18
|
+
* later agent, at their token cost, and it rots silently the moment the
|
|
19
|
+
* history it summarises moves.
|
|
20
|
+
*
|
|
21
|
+
* The narrative rule is a marker list, not a heuristic about length or
|
|
22
|
+
* sentence shape, precisely because a false positive here is worse than a false
|
|
23
|
+
* positive on `dead-reference`: a wrong `dead-reference` is visible in a diff as
|
|
24
|
+
* a removed path, while a wrong `narrative` deletes a reason someone wrote down
|
|
25
|
+
* on purpose. Every finding carries its matched marker for that reason — an
|
|
26
|
+
* unattributable finding is one nobody can review, and a rule nobody can review
|
|
27
|
+
* is a rule that will be widened until it stops mattering.
|
|
28
|
+
*/
|
|
29
|
+
import { citationResolves, citations, commentLines } from './comment-citations.js';
|
|
30
|
+
import { isCitationCandidate } from './citation-rules.js';
|
|
31
|
+
/**
|
|
32
|
+
* Development-process markers. Each entry is a named rule so a report can say
|
|
33
|
+
* WHICH one fired — the failure mode this whole feature is modelled on is a
|
|
34
|
+
* refusal that could not name itself (the content scan in
|
|
35
|
+
* `src/services/memory/project-memory-service/store/atomic-write.ts` answered a
|
|
36
|
+
* ten-pattern `||` chain with `matchedTerm: null`).
|
|
37
|
+
*
|
|
38
|
+
* Order is significant and is the whole attribution: one line reports its FIRST
|
|
39
|
+
* match, so a specific marker must precede the general one that also fits it.
|
|
40
|
+
* `F2 of \`rid-…\`` is a finding reference, not a bare rid, and a list ordered
|
|
41
|
+
* the other way round would blame the wrong rule for every such line.
|
|
42
|
+
*/
|
|
43
|
+
export const NARRATIVE_MARKERS = [
|
|
44
|
+
{ name: 'finding-id', pattern: /\b[DF]\d+\s+of\b/ },
|
|
45
|
+
{ name: 'acceptance-id', pattern: /\bAC-\d+\b/ },
|
|
46
|
+
{
|
|
47
|
+
name: 'slice-id',
|
|
48
|
+
pattern: /\bslice\s+(?:`?)?(?:20\d\d-\d\d-\d\d|rid-|change-|S\d+\b|0\d\d\b)/i
|
|
49
|
+
},
|
|
50
|
+
{ name: 'change-folder', pattern: /\b20\d\d-\d\d-\d\d-[a-z]+-[a-z-]+/ },
|
|
51
|
+
{ name: 'rid-id', pattern: /\brid-[a-z0-9][a-z0-9._-]*\b/i },
|
|
52
|
+
{
|
|
53
|
+
name: 'historical-voice',
|
|
54
|
+
pattern: /\b(used to (?:say|claim|read|write)|previously (?:named|said)|no longer (?:exists|ships|carries)|which never existed|did not exist)\b/i
|
|
55
|
+
},
|
|
56
|
+
{ name: 'deleted-test-ref', pattern: /\b(?:tests?|specs?)\b[^.]{0,48}\b(?:was|were) deleted\b/i },
|
|
57
|
+
{
|
|
58
|
+
name: 'guard-self-reference',
|
|
59
|
+
pattern: /\bthis (?:comment|header|paragraph|note) (?:says|claimed|documents|is )/i
|
|
60
|
+
}
|
|
61
|
+
];
|
|
62
|
+
function deadReferenceFindings(entry, judge) {
|
|
63
|
+
const ctx = { file: judge.file, dirExists: judge.dirExists };
|
|
64
|
+
const out = [];
|
|
65
|
+
for (const citation of citations(entry.text)) {
|
|
66
|
+
if (!isCitationCandidate(citation, entry.text, ctx))
|
|
67
|
+
continue;
|
|
68
|
+
if (citationResolves(citation.span, judge.file, judge.exists, judge.installed))
|
|
69
|
+
continue;
|
|
70
|
+
out.push({
|
|
71
|
+
file: judge.file,
|
|
72
|
+
line: entry.line,
|
|
73
|
+
kind: 'dead-reference',
|
|
74
|
+
matched: citation.span,
|
|
75
|
+
text: entry.text.trim()
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
return out;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* One line, both readings. A line reports at most ONE narrative marker — its
|
|
82
|
+
* first — because the list is ordered specific-before-general, and a line that
|
|
83
|
+
* named every rule it matches would multiply the count without naming anything
|
|
84
|
+
* a reader could not already see.
|
|
85
|
+
*/
|
|
86
|
+
function classifyLine(entry, judge) {
|
|
87
|
+
const out = judge.kinds.has('dead-reference')
|
|
88
|
+
? deadReferenceFindings(entry, judge)
|
|
89
|
+
: [];
|
|
90
|
+
if (!judge.kinds.has('narrative'))
|
|
91
|
+
return out;
|
|
92
|
+
for (const marker of NARRATIVE_MARKERS) {
|
|
93
|
+
const hit = marker.pattern.exec(entry.text);
|
|
94
|
+
if (hit === null)
|
|
95
|
+
continue;
|
|
96
|
+
out.push({
|
|
97
|
+
file: judge.file,
|
|
98
|
+
line: entry.line,
|
|
99
|
+
kind: 'narrative',
|
|
100
|
+
matched: `${marker.name}:${hit[0].trim()}`,
|
|
101
|
+
text: entry.text.trim()
|
|
102
|
+
});
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
return out;
|
|
106
|
+
}
|
|
107
|
+
/** Every finding in one file, in line order. */
|
|
108
|
+
export function scanComments(input, options = {}) {
|
|
109
|
+
const exists = options.exists ?? (() => false);
|
|
110
|
+
const judge = {
|
|
111
|
+
file: input.file,
|
|
112
|
+
exists,
|
|
113
|
+
installed: options.installed ?? exists,
|
|
114
|
+
dirExists: options.dirExists ?? exists,
|
|
115
|
+
kinds: new Set(options.kinds ?? ['dead-reference', 'narrative'])
|
|
116
|
+
};
|
|
117
|
+
const out = [];
|
|
118
|
+
for (const entry of commentLines(input.source)) {
|
|
119
|
+
out.push(...classifyLine(entry, judge));
|
|
120
|
+
}
|
|
121
|
+
return out;
|
|
122
|
+
}
|
|
123
|
+
function countKind(findings, kind) {
|
|
124
|
+
return findings.filter((finding) => finding.kind === kind).length;
|
|
125
|
+
}
|
|
126
|
+
export function summarize(input, findings) {
|
|
127
|
+
return {
|
|
128
|
+
file: input.file,
|
|
129
|
+
commentLines: commentLines(input.source).length,
|
|
130
|
+
deadReferences: countKind(findings, 'dead-reference'),
|
|
131
|
+
narrative: countKind(findings, 'narrative')
|
|
132
|
+
};
|
|
133
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remove the comments the scan says are debt — and prove nothing else moved.
|
|
3
|
+
*
|
|
4
|
+
* The actuator is the dangerous half of this feature: a classifier that is 86%
|
|
5
|
+
* precise only misinforms, but a pruner that is 86% precise deletes. So the
|
|
6
|
+
* deliverable here is not the deletion, it is the PROOF, and the proof is a
|
|
7
|
+
* structural check run on every file before it is written:
|
|
8
|
+
*
|
|
9
|
+
* - the diff is computed line-by-line against the plan, so a changed line that
|
|
10
|
+
* the scan never named is a violation, not a surprise;
|
|
11
|
+
* - every removed line must be a comment line, and a stripped trailing comment
|
|
12
|
+
* must leave its code byte-identical;
|
|
13
|
+
* - a line that carries a block-comment delimiter opening or closing ELSEWHERE
|
|
14
|
+
* is never removed, because deleting it would turn the rest of the comment into
|
|
15
|
+
* code — the one failure mode that makes this a compile error rather than a
|
|
16
|
+
* lost sentence;
|
|
17
|
+
* - a file whose line endings are mixed is left alone, since re-joining it would
|
|
18
|
+
* rewrite every line and the proof would stop meaning anything.
|
|
19
|
+
*
|
|
20
|
+
* Anything that fails the check is reported and NOT written. The ledger records
|
|
21
|
+
* every line removed, with the rule that fired, so a prune is reviewable after the
|
|
22
|
+
* fact instead of only before it.
|
|
23
|
+
*/
|
|
24
|
+
import type { CommentFinding, CommentFindingKind } from './comment-hygiene.js';
|
|
25
|
+
/** What the pruner will do to one line. */
|
|
26
|
+
export type PruneAction = {
|
|
27
|
+
readonly file: string;
|
|
28
|
+
readonly line: number;
|
|
29
|
+
readonly kind: CommentFindingKind;
|
|
30
|
+
readonly matched: string;
|
|
31
|
+
/** `drop-line` deletes the whole comment line; `strip-trailing` keeps the code. */
|
|
32
|
+
readonly mode: 'drop-line' | 'strip-trailing';
|
|
33
|
+
/** The full text of the line as it sits on disk right now. */
|
|
34
|
+
readonly lineText: string;
|
|
35
|
+
/** The comment as the SCAN saw it — for a trailing comment, not the whole line. */
|
|
36
|
+
readonly comment: string;
|
|
37
|
+
};
|
|
38
|
+
/** A finding the pruner refused to act on, with the reason. */
|
|
39
|
+
export type PruneSkip = {
|
|
40
|
+
readonly file: string;
|
|
41
|
+
readonly line: number;
|
|
42
|
+
readonly reason: string;
|
|
43
|
+
readonly text: string;
|
|
44
|
+
};
|
|
45
|
+
export type PruneOptions = {
|
|
46
|
+
readonly projectRoot: string;
|
|
47
|
+
/** Narrow to one category; the default is both, which is the accepted boundary. */
|
|
48
|
+
readonly kinds?: readonly CommentFindingKind[];
|
|
49
|
+
/** Restrict to one file, repo-relative — how a single-case proof is run. */
|
|
50
|
+
readonly onlyFile?: string;
|
|
51
|
+
/** Write the files. False (the default) plans and proves without touching disk. */
|
|
52
|
+
readonly apply?: boolean;
|
|
53
|
+
};
|
|
54
|
+
export type PruneResult = {
|
|
55
|
+
readonly scannedFiles: number;
|
|
56
|
+
readonly planned: number;
|
|
57
|
+
readonly dropped: number;
|
|
58
|
+
readonly stripped: number;
|
|
59
|
+
readonly skipped: number;
|
|
60
|
+
readonly touchedFiles: readonly string[];
|
|
61
|
+
readonly notWritten: readonly string[];
|
|
62
|
+
readonly ledgerPath: string;
|
|
63
|
+
readonly actions: readonly PruneAction[];
|
|
64
|
+
readonly skips: readonly PruneSkip[];
|
|
65
|
+
readonly applied: boolean;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Decide the fate of every finding.
|
|
69
|
+
*
|
|
70
|
+
* The line is re-read here and passed back through `commentLines`, the scan's own
|
|
71
|
+
* extractor, rather than compared against the whole line: a trailing comment's
|
|
72
|
+
* recorded text is the comment, not the code before it, and an equality test on the
|
|
73
|
+
* raw line would reject every one of them. Re-using the extractor is what makes the
|
|
74
|
+
* plan and the scan agree BY CONSTRUCTION instead of by two copies of a rule — the
|
|
75
|
+
* defect class this whole feature is a reply to.
|
|
76
|
+
*/
|
|
77
|
+
export declare function planPrune(options: PruneOptions, findings: readonly CommentFinding[]): {
|
|
78
|
+
actions: PruneAction[];
|
|
79
|
+
skips: PruneSkip[];
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Plan, prove, and (on `apply`) write.
|
|
83
|
+
*
|
|
84
|
+
* The scan runs through `auditComments`, so a pruned line is one the worklist
|
|
85
|
+
* already showed a human; the pruner adds no rule of its own about what counts as
|
|
86
|
+
* debt.
|
|
87
|
+
*/
|
|
88
|
+
export declare function pruneComments(options: PruneOptions): PruneResult;
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remove the comments the scan says are debt — and prove nothing else moved.
|
|
3
|
+
*
|
|
4
|
+
* The actuator is the dangerous half of this feature: a classifier that is 86%
|
|
5
|
+
* precise only misinforms, but a pruner that is 86% precise deletes. So the
|
|
6
|
+
* deliverable here is not the deletion, it is the PROOF, and the proof is a
|
|
7
|
+
* structural check run on every file before it is written:
|
|
8
|
+
*
|
|
9
|
+
* - the diff is computed line-by-line against the plan, so a changed line that
|
|
10
|
+
* the scan never named is a violation, not a surprise;
|
|
11
|
+
* - every removed line must be a comment line, and a stripped trailing comment
|
|
12
|
+
* must leave its code byte-identical;
|
|
13
|
+
* - a line that carries a block-comment delimiter opening or closing ELSEWHERE
|
|
14
|
+
* is never removed, because deleting it would turn the rest of the comment into
|
|
15
|
+
* code — the one failure mode that makes this a compile error rather than a
|
|
16
|
+
* lost sentence;
|
|
17
|
+
* - a file whose line endings are mixed is left alone, since re-joining it would
|
|
18
|
+
* rewrite every line and the proof would stop meaning anything.
|
|
19
|
+
*
|
|
20
|
+
* Anything that fails the check is reported and NOT written. The ledger records
|
|
21
|
+
* every line removed, with the rule that fired, so a prune is reviewable after the
|
|
22
|
+
* fact instead of only before it.
|
|
23
|
+
*/
|
|
24
|
+
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
25
|
+
import { join } from 'node:path';
|
|
26
|
+
import { getSessionDir } from '../session/getSessionDir.js';
|
|
27
|
+
import { getSessionId } from '../session/session-manager.js';
|
|
28
|
+
import { auditComments } from './comment-audit.js';
|
|
29
|
+
import { commentLines } from './comment-citations.js';
|
|
30
|
+
import { actionsByFile, executePlan, readFileSafe, splitLines } from './prune-apply.js';
|
|
31
|
+
const FULL_LINE_PREFIXES = ['//', '/*', '/**', '*'];
|
|
32
|
+
function isFullLineComment(text) {
|
|
33
|
+
const trimmed = text.trim();
|
|
34
|
+
return FULL_LINE_PREFIXES.some((prefix) => trimmed.startsWith(prefix));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Can this line be deleted without breaking the syntax around it?
|
|
38
|
+
*
|
|
39
|
+
* A line that OPENS a block (`/* …` with no close on the same line) or CLOSES one
|
|
40
|
+
* (a bare `* /`) is load-bearing for the comment's extent, not for its prose.
|
|
41
|
+
* Removing it leaves the remainder of the block as code — a compile error is the
|
|
42
|
+
* mildest thing that follows. Checked for both modes, because the strip below also
|
|
43
|
+
* cuts text out of a line: a code line carrying an unterminated `/*` would have its
|
|
44
|
+
* "trailing comment" extracted from inside the block, and cutting there is a syntax
|
|
45
|
+
* edit, not a comment edit.
|
|
46
|
+
*/
|
|
47
|
+
function removalWouldBreakTheComment(text) {
|
|
48
|
+
const opens = text.includes('/*');
|
|
49
|
+
const closes = text.includes('*/');
|
|
50
|
+
return opens !== closes;
|
|
51
|
+
}
|
|
52
|
+
function actionFor(finding, text, comment) {
|
|
53
|
+
return {
|
|
54
|
+
file: finding.file,
|
|
55
|
+
line: finding.line,
|
|
56
|
+
kind: finding.kind,
|
|
57
|
+
matched: finding.matched,
|
|
58
|
+
mode: isFullLineComment(text) ? 'drop-line' : 'strip-trailing',
|
|
59
|
+
lineText: text,
|
|
60
|
+
comment
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function skipFor(finding, reason) {
|
|
64
|
+
return { file: finding.file, line: finding.line, reason, text: finding.text };
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Decide the fate of every finding.
|
|
68
|
+
*
|
|
69
|
+
* The line is re-read here and passed back through `commentLines`, the scan's own
|
|
70
|
+
* extractor, rather than compared against the whole line: a trailing comment's
|
|
71
|
+
* recorded text is the comment, not the code before it, and an equality test on the
|
|
72
|
+
* raw line would reject every one of them. Re-using the extractor is what makes the
|
|
73
|
+
* plan and the scan agree BY CONSTRUCTION instead of by two copies of a rule — the
|
|
74
|
+
* defect class this whole feature is a reply to.
|
|
75
|
+
*/
|
|
76
|
+
export function planPrune(options, findings) {
|
|
77
|
+
const actions = [];
|
|
78
|
+
const skips = [];
|
|
79
|
+
for (const finding of findings) {
|
|
80
|
+
const source = readFileSafe(options.projectRoot, finding.file);
|
|
81
|
+
if (source === null) {
|
|
82
|
+
skips.push(skipFor(finding, 'file-not-readable'));
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const text = splitLines(source).lines[finding.line - 1] ?? '';
|
|
86
|
+
const comment = commentLines(text)[0]?.text ?? '';
|
|
87
|
+
if (comment.trim() !== finding.text) {
|
|
88
|
+
skips.push(skipFor(finding, 'line-moved-since-scan'));
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
if (removalWouldBreakTheComment(text)) {
|
|
92
|
+
skips.push(skipFor(finding, 'carries-a-block-delimiter'));
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
actions.push(actionFor(finding, text, comment));
|
|
96
|
+
}
|
|
97
|
+
return { actions, skips };
|
|
98
|
+
}
|
|
99
|
+
function ledgerPathFor(projectRoot, stamp) {
|
|
100
|
+
const sessionId = getSessionId(projectRoot) ?? '_nonsession';
|
|
101
|
+
const dir = join(getSessionDir(projectRoot, sessionId), 'comments');
|
|
102
|
+
mkdirSync(dir, { recursive: true });
|
|
103
|
+
return join(dir, `prune-${stamp}.json`);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Plan, prove, and (on `apply`) write.
|
|
107
|
+
*
|
|
108
|
+
* The scan runs through `auditComments`, so a pruned line is one the worklist
|
|
109
|
+
* already showed a human; the pruner adds no rule of its own about what counts as
|
|
110
|
+
* debt.
|
|
111
|
+
*/
|
|
112
|
+
export function pruneComments(options) {
|
|
113
|
+
const kinds = options.kinds ?? ['dead-reference', 'narrative'];
|
|
114
|
+
const audit = auditComments({ projectRoot: options.projectRoot });
|
|
115
|
+
const inScope = audit.findings.filter((finding) => kinds.includes(finding.kind) &&
|
|
116
|
+
(options.onlyFile === undefined || finding.file === options.onlyFile));
|
|
117
|
+
const { actions, skips } = planPrune(options, inScope);
|
|
118
|
+
const stamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
119
|
+
const ledgerPath = ledgerPathFor(options.projectRoot, stamp);
|
|
120
|
+
const outcome = executePlan(options.projectRoot, actionsByFile(actions), options.apply === true);
|
|
121
|
+
const skipsAll = [...skips, ...outcome.fileSkips];
|
|
122
|
+
// Written on a dry run too: the plan IS the reviewable artifact, and a reviewer
|
|
123
|
+
// who only sees stdout has nothing to diff a later apply against.
|
|
124
|
+
writeFileSync(ledgerPath, `${JSON.stringify({
|
|
125
|
+
projectRoot: options.projectRoot,
|
|
126
|
+
at: new Date().toISOString(),
|
|
127
|
+
applied: options.apply === true,
|
|
128
|
+
kinds,
|
|
129
|
+
onlyFile: options.onlyFile ?? null,
|
|
130
|
+
removed: actions,
|
|
131
|
+
skipped: skipsAll,
|
|
132
|
+
touchedFiles: outcome.touched,
|
|
133
|
+
notWritten: outcome.notWritten
|
|
134
|
+
}, null, 2)}\n`);
|
|
135
|
+
return {
|
|
136
|
+
scannedFiles: audit.scannedFiles,
|
|
137
|
+
planned: actions.length,
|
|
138
|
+
dropped: actions.filter((action) => action.mode === 'drop-line').length,
|
|
139
|
+
stripped: actions.filter((action) => action.mode === 'strip-trailing').length,
|
|
140
|
+
skipped: skipsAll.length,
|
|
141
|
+
touchedFiles: outcome.touched,
|
|
142
|
+
notWritten: outcome.notWritten,
|
|
143
|
+
ledgerPath,
|
|
144
|
+
actions,
|
|
145
|
+
skips: skipsAll,
|
|
146
|
+
applied: options.apply === true
|
|
147
|
+
};
|
|
148
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The line mechanics of a comment prune, and the proof that gates every write.
|
|
3
|
+
*
|
|
4
|
+
* Split from `comment-prune.ts` because the two change for different reasons: that
|
|
5
|
+
* module decides WHAT is debt (and follows the classifier), this one decides how a
|
|
6
|
+
* line is removed from a file without damaging the file (and follows the language).
|
|
7
|
+
* Keeping them apart is also what lets the proof be tested on a text array, with no
|
|
8
|
+
* filesystem and no scan in the room.
|
|
9
|
+
*/
|
|
10
|
+
import type { PruneAction, PruneSkip } from './comment-prune.js';
|
|
11
|
+
/** What the write phase decided, per file. */
|
|
12
|
+
export type WriteOutcome = {
|
|
13
|
+
touched: string[];
|
|
14
|
+
notWritten: string[];
|
|
15
|
+
fileSkips: PruneSkip[];
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Read a file, or report that it is not there — a prune never creates one.
|
|
19
|
+
*
|
|
20
|
+
* `existsSync` first, and NO catch: a `catch { return null }` answers "present but
|
|
21
|
+
* unreadable" (permissions, a locked handle, a directory named as a file) with the same
|
|
22
|
+
* `null` as "absent", and that conflation is the defect this repository already
|
|
23
|
+
* ratchets under `silentWarningCatchReturnNull` — this very helper was counted by it.
|
|
24
|
+
* An absent path is a state the caller handles; an unreadable one should be a crash an
|
|
25
|
+
* operator sees.
|
|
26
|
+
*/
|
|
27
|
+
export declare function readFileSafe(root: string, rel: string): string | null;
|
|
28
|
+
/**
|
|
29
|
+
* Split a source into lines, remembering what separated them.
|
|
30
|
+
*
|
|
31
|
+
* `mixed` is the signal to leave a file alone rather than a detail to paper over: a
|
|
32
|
+
* file with both CRLF and LF endings cannot be re-joined from one delimiter without
|
|
33
|
+
* rewriting every line, and a rewrite of every line is not a comment edit — it would
|
|
34
|
+
* also make the proof below vacuous, because all the lines would differ.
|
|
35
|
+
*/
|
|
36
|
+
export declare function splitLines(source: string): {
|
|
37
|
+
lines: string[];
|
|
38
|
+
eol: string;
|
|
39
|
+
mixed: boolean;
|
|
40
|
+
};
|
|
41
|
+
/** Group a plan by file, in first-seen order. */
|
|
42
|
+
export declare function actionsByFile(actions: readonly PruneAction[]): Map<string, PruneAction[]>;
|
|
43
|
+
/**
|
|
44
|
+
* The proof, as data: compare kept lines against the original.
|
|
45
|
+
*
|
|
46
|
+
* One string per violation; empty means every difference between the two texts is a
|
|
47
|
+
* line this plan named, and every line it named that was kept is byte-identical to
|
|
48
|
+
* what was there before. This is computed whether or not the caller intends to write,
|
|
49
|
+
* so a dry run reports the refusals a real run would hit.
|
|
50
|
+
*/
|
|
51
|
+
export declare function proofViolations(before: readonly string[], after: readonly string[], actions: readonly PruneAction[]): string[];
|
|
52
|
+
/** Apply one file's actions to its lines, in the plan's own terms. */
|
|
53
|
+
export declare function pruneFileLines(lines: readonly string[], actions: readonly PruneAction[]): string[];
|
|
54
|
+
/**
|
|
55
|
+
* Run the proof on every planned file, and write only the files that passed it.
|
|
56
|
+
*
|
|
57
|
+
* A file that fails is reported and left alone — never written "mostly", because a
|
|
58
|
+
* partially-pruned file is exactly the state the proof exists to make unreachable.
|
|
59
|
+
*/
|
|
60
|
+
export declare function executePlan(projectRoot: string, byFile: Map<string, PruneAction[]>, apply: boolean): WriteOutcome;
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The line mechanics of a comment prune, and the proof that gates every write.
|
|
3
|
+
*
|
|
4
|
+
* Split from `comment-prune.ts` because the two change for different reasons: that
|
|
5
|
+
* module decides WHAT is debt (and follows the classifier), this one decides how a
|
|
6
|
+
* line is removed from a file without damaging the file (and follows the language).
|
|
7
|
+
* Keeping them apart is also what lets the proof be tested on a text array, with no
|
|
8
|
+
* filesystem and no scan in the room.
|
|
9
|
+
*/
|
|
10
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
11
|
+
import { join } from 'node:path';
|
|
12
|
+
/**
|
|
13
|
+
* Read a file, or report that it is not there — a prune never creates one.
|
|
14
|
+
*
|
|
15
|
+
* `existsSync` first, and NO catch: a `catch { return null }` answers "present but
|
|
16
|
+
* unreadable" (permissions, a locked handle, a directory named as a file) with the same
|
|
17
|
+
* `null` as "absent", and that conflation is the defect this repository already
|
|
18
|
+
* ratchets under `silentWarningCatchReturnNull` — this very helper was counted by it.
|
|
19
|
+
* An absent path is a state the caller handles; an unreadable one should be a crash an
|
|
20
|
+
* operator sees.
|
|
21
|
+
*/
|
|
22
|
+
export function readFileSafe(root, rel) {
|
|
23
|
+
const abs = join(root, rel);
|
|
24
|
+
return existsSync(abs) ? readFileSync(abs, 'utf8') : null;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Split a source into lines, remembering what separated them.
|
|
28
|
+
*
|
|
29
|
+
* `mixed` is the signal to leave a file alone rather than a detail to paper over: a
|
|
30
|
+
* file with both CRLF and LF endings cannot be re-joined from one delimiter without
|
|
31
|
+
* rewriting every line, and a rewrite of every line is not a comment edit — it would
|
|
32
|
+
* also make the proof below vacuous, because all the lines would differ.
|
|
33
|
+
*/
|
|
34
|
+
export function splitLines(source) {
|
|
35
|
+
const crlf = source.includes('\r\n');
|
|
36
|
+
const lfOnly = /\n(?!\r)/.test(source.replace(/\r\n/g, '\n')) || /\n[^\r]/.test(source);
|
|
37
|
+
return {
|
|
38
|
+
lines: source.split(/\r?\n/),
|
|
39
|
+
eol: crlf ? '\r\n' : '\n',
|
|
40
|
+
mixed: crlf && lfOnly
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/** Group a plan by file, in first-seen order. */
|
|
44
|
+
export function actionsByFile(actions) {
|
|
45
|
+
const byFile = new Map();
|
|
46
|
+
for (const action of actions) {
|
|
47
|
+
const list = byFile.get(action.file);
|
|
48
|
+
if (list === undefined)
|
|
49
|
+
byFile.set(action.file, [action]);
|
|
50
|
+
else
|
|
51
|
+
list.push(action);
|
|
52
|
+
}
|
|
53
|
+
return byFile;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The proof, as data: compare kept lines against the original.
|
|
57
|
+
*
|
|
58
|
+
* One string per violation; empty means every difference between the two texts is a
|
|
59
|
+
* line this plan named, and every line it named that was kept is byte-identical to
|
|
60
|
+
* what was there before. This is computed whether or not the caller intends to write,
|
|
61
|
+
* so a dry run reports the refusals a real run would hit.
|
|
62
|
+
*/
|
|
63
|
+
export function proofViolations(before, after, actions) {
|
|
64
|
+
const dropped = new Set(actions.filter((a) => a.mode === 'drop-line').map((a) => a.line));
|
|
65
|
+
const stripped = new Set(actions.filter((a) => a.mode === 'strip-trailing').map((a) => a.line));
|
|
66
|
+
const violations = [];
|
|
67
|
+
let afterAt = 0;
|
|
68
|
+
before.forEach((original, index) => {
|
|
69
|
+
const line = index + 1;
|
|
70
|
+
if (dropped.has(line))
|
|
71
|
+
return; // deleted on purpose
|
|
72
|
+
if (stripped.has(line)) {
|
|
73
|
+
// The only thing a strip may do is reveal the code that was already there, so
|
|
74
|
+
// what survives must be a PREFIX of the original line — that is what makes it a
|
|
75
|
+
// comment edit, and anything else is a code edit wearing its clothes.
|
|
76
|
+
const kept = after[afterAt] ?? '';
|
|
77
|
+
afterAt += 1;
|
|
78
|
+
if (!original.startsWith(kept))
|
|
79
|
+
violations.push(`line ${line}: code text changed`);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (after[afterAt] !== original)
|
|
83
|
+
violations.push(`line ${line}: untouched line differs`);
|
|
84
|
+
afterAt += 1;
|
|
85
|
+
});
|
|
86
|
+
if (afterAt !== after.length)
|
|
87
|
+
violations.push(`produced ${after.length - afterAt} extra line(s)`);
|
|
88
|
+
return violations;
|
|
89
|
+
}
|
|
90
|
+
/** Apply one file's actions to its lines, in the plan's own terms. */
|
|
91
|
+
export function pruneFileLines(lines, actions) {
|
|
92
|
+
const drop = new Set(actions.filter((a) => a.mode === 'drop-line').map((a) => a.line));
|
|
93
|
+
const strip = new Map(actions.filter((a) => a.mode === 'strip-trailing').map((a) => [a.line, a.comment]));
|
|
94
|
+
const out = [];
|
|
95
|
+
lines.forEach((original, index) => {
|
|
96
|
+
const line = index + 1;
|
|
97
|
+
if (drop.has(line))
|
|
98
|
+
return;
|
|
99
|
+
if (strip.has(line)) {
|
|
100
|
+
// Cut where the scan's comment text starts, not at the first `//` in the line:
|
|
101
|
+
// `const url = "https://example.com"; // Slice 1 kept it` has its `//` inside a
|
|
102
|
+
// string literal, and slicing there would delete code.
|
|
103
|
+
const comment = strip.get(line) ?? '';
|
|
104
|
+
const at = original.indexOf(comment);
|
|
105
|
+
out.push(at > 0 ? original.slice(0, at).trimEnd() : comment.trimEnd());
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
out.push(original);
|
|
109
|
+
});
|
|
110
|
+
return out;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Run the proof on every planned file, and write only the files that passed it.
|
|
114
|
+
*
|
|
115
|
+
* A file that fails is reported and left alone — never written "mostly", because a
|
|
116
|
+
* partially-pruned file is exactly the state the proof exists to make unreachable.
|
|
117
|
+
*/
|
|
118
|
+
export function executePlan(projectRoot, byFile, apply) {
|
|
119
|
+
const touched = [];
|
|
120
|
+
const notWritten = [];
|
|
121
|
+
const fileSkips = [];
|
|
122
|
+
for (const [file, fileActions] of byFile) {
|
|
123
|
+
const source = readFileSafe(projectRoot, file);
|
|
124
|
+
if (source === null) {
|
|
125
|
+
notWritten.push(file);
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
const parts = splitLines(source);
|
|
129
|
+
if (parts.mixed) {
|
|
130
|
+
fileSkips.push({
|
|
131
|
+
file,
|
|
132
|
+
line: 0,
|
|
133
|
+
reason: 'mixed-line-endings',
|
|
134
|
+
text: `${parts.lines.length} line(s) left untouched`
|
|
135
|
+
});
|
|
136
|
+
notWritten.push(file);
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
const after = pruneFileLines(parts.lines, fileActions);
|
|
140
|
+
const violations = proofViolations(parts.lines, after, fileActions);
|
|
141
|
+
if (violations.length > 0) {
|
|
142
|
+
notWritten.push(`${file} (${violations[0]})`);
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
touched.push(file);
|
|
146
|
+
if (apply)
|
|
147
|
+
writeFileSync(join(projectRoot, file), after.join(parts.eol));
|
|
148
|
+
}
|
|
149
|
+
return { touched, notWritten, fileSkips };
|
|
150
|
+
}
|