peaks-loop 4.0.0-beta.9 → 4.0.3
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 +572 -234
- package/README-en.md +67 -30
- package/README.md +67 -30
- package/agents/karpathy-reviewer.md +33 -0
- package/bin/peaks.js +0 -0
- package/dist/cli/cli-helpers.d.ts +31 -6
- package/dist/cli/cli-helpers.js +48 -25
- package/dist/cli/commands/_register.d.ts +3 -0
- package/dist/cli/commands/_register.js +139 -0
- package/dist/cli/commands/_super.d.ts +10 -0
- package/dist/cli/commands/_super.js +97 -0
- package/dist/cli/commands/adapter-commands-s2a.js +1 -1
- package/dist/cli/commands/asset-commands.js +33 -16
- package/dist/cli/commands/audit-commands.js +2 -2
- package/dist/cli/commands/autonomous-swarm-commands.d.ts +12 -0
- package/dist/cli/commands/autonomous-swarm-commands.js +120 -0
- package/dist/cli/commands/bee-commands.js +1 -1
- package/dist/cli/commands/capability-commands.js +1 -1
- package/dist/cli/commands/capability-worker-config-sc-commands.js +0 -2
- package/dist/cli/commands/changeset-commands.d.ts +13 -0
- package/dist/cli/commands/changeset-commands.js +46 -0
- package/dist/cli/commands/code-commands.d.ts +11 -1
- package/dist/cli/commands/code-commands.js +19 -699
- package/dist/cli/commands/code-job-shape-commands.d.ts +9 -0
- package/dist/cli/commands/code-job-shape-commands.js +164 -0
- package/dist/cli/commands/code-mode-gate-commands.d.ts +9 -0
- package/dist/cli/commands/code-mode-gate-commands.js +223 -0
- package/dist/cli/commands/code-review-commands.js +2 -2
- package/dist/cli/commands/code-run-command.d.ts +12 -0
- package/dist/cli/commands/code-run-command.js +68 -0
- package/dist/cli/commands/code-runtime-commands.d.ts +11 -0
- package/dist/cli/commands/code-runtime-commands.js +391 -0
- package/dist/cli/commands/codegraph-commands.js +1 -1
- package/dist/cli/commands/compact-command.js +53 -1
- package/dist/cli/commands/complexity-commands.js +1 -1
- package/dist/cli/commands/config-commands.js +4 -75
- package/dist/cli/commands/container-commands.d.ts +28 -0
- package/dist/cli/commands/container-commands.js +221 -0
- package/dist/cli/commands/context-commands.js +3 -2
- package/dist/cli/commands/core/artifacts-command.js +1 -1
- package/dist/cli/commands/core/binding-commands.js +1 -1
- package/dist/cli/commands/core/doctor-command.js +63 -3
- package/dist/cli/commands/core/memory-command.js +1 -1
- package/dist/cli/commands/core/profile-command.js +1 -1
- package/dist/cli/commands/core/proxy-command.js +1 -1
- package/dist/cli/commands/core/session-command.js +9 -7
- package/dist/cli/commands/core/skill-command.js +7 -4
- package/dist/cli/commands/core/standards-command.js +1 -1
- package/dist/cli/commands/cron-commands.d.ts +57 -0
- package/dist/cli/commands/cron-commands.js +257 -0
- package/dist/cli/commands/cron-scheduler-commands.d.ts +47 -0
- package/dist/cli/commands/cron-scheduler-commands.js +284 -0
- package/dist/cli/commands/dashboard-commands.d.ts +4 -0
- package/dist/cli/commands/dashboard-commands.js +10 -0
- package/dist/cli/commands/dashboard-long-run.d.ts +25 -0
- package/dist/cli/commands/dashboard-long-run.js +122 -0
- package/dist/cli/commands/dashboard-summary.d.ts +12 -0
- package/dist/cli/commands/dashboard-summary.js +58 -0
- package/dist/cli/commands/dispatch-commands.d.ts +0 -7
- package/dist/cli/commands/dispatch-commands.js +372 -8
- package/dist/cli/commands/dispatch-from-dag.js +4 -1
- package/dist/cli/commands/doc-commands.js +1 -1
- package/dist/cli/commands/ecc-commands.d.ts +30 -0
- package/dist/cli/commands/ecc-commands.js +119 -0
- package/dist/cli/commands/evolution-commands.js +1 -1
- package/dist/cli/commands/feedback-commands.js +1 -1
- package/dist/cli/commands/final-review-commands.js +1 -1
- package/dist/cli/commands/fixture-commands.js +1 -1
- package/dist/cli/commands/fork-commands.js +1 -1
- package/dist/cli/commands/gate-commands.js +128 -6
- package/dist/cli/commands/governance-classify-contract-commands.d.ts +21 -0
- package/dist/cli/commands/governance-classify-contract-commands.js +273 -0
- package/dist/cli/commands/heartbeat-commands.js +76 -5
- package/dist/cli/commands/heartbeat-watch-command.d.ts +31 -0
- package/dist/cli/commands/heartbeat-watch-command.js +146 -0
- package/dist/cli/commands/hook-handle.js +1 -1
- package/dist/cli/commands/hooks-commands.js +126 -10
- package/dist/cli/commands/ide-commands.js +1 -1
- package/dist/cli/commands/impact-commands.js +1 -1
- package/dist/cli/commands/job-commands.js +34 -1
- package/dist/cli/commands/lease-metrics-commands.d.ts +67 -0
- package/dist/cli/commands/lease-metrics-commands.js +231 -0
- package/dist/cli/commands/lease-stats-commands.d.ts +65 -0
- package/dist/cli/commands/lease-stats-commands.js +107 -0
- package/dist/cli/commands/legacy-commands.js +1 -1
- package/dist/cli/commands/log-commands.js +1 -1
- package/dist/cli/commands/loop-commands.js +1 -1
- package/dist/cli/commands/loop-eval-commands.js +1 -1
- package/dist/cli/commands/memory-commands.js +1 -1
- package/dist/cli/commands/migrate-1-4-1-command.js +1 -1
- package/dist/cli/commands/migrate-v2-10-to-v2-11-command.js +1 -1
- package/dist/cli/commands/mut-commands.d.ts +1 -1
- package/dist/cli/commands/mut-commands.js +1 -5
- package/dist/cli/commands/observability-commands.js +1 -1
- package/dist/cli/commands/openspec-commands.js +65 -4
- package/dist/cli/commands/perf-audit-commands.js +3 -3
- package/dist/cli/commands/perf-commands.js +1 -1
- package/dist/cli/commands/polyrepo-commands.js +1 -1
- package/dist/cli/commands/prd-blocks-commands.js +1 -1
- package/dist/cli/commands/prd-commands.js +4 -2
- package/dist/cli/commands/preferences-commands.js +23 -3
- package/dist/cli/commands/project-commands.js +1 -1
- package/dist/cli/commands/qa-business-review-commands.js +1 -1
- package/dist/cli/commands/qa-commands.d.ts +1 -1
- package/dist/cli/commands/qa-commands.js +39 -3
- package/dist/cli/commands/release-commands.d.ts +15 -0
- package/dist/cli/commands/release-commands.js +113 -21
- package/dist/cli/commands/request-commands.js +1 -1
- package/dist/cli/commands/retrospective-commands.js +1 -1
- package/dist/cli/commands/reviewer-commands.js +1 -1
- package/dist/cli/commands/role-commands.js +1 -1
- package/dist/cli/commands/runtime-commands-helpers.d.ts +7 -0
- package/dist/cli/commands/runtime-commands-helpers.js +24 -0
- package/dist/cli/commands/runtime-commands.js +1 -2
- package/dist/cli/commands/sc-commands.js +4 -2
- package/dist/cli/commands/scan-commands.js +1 -1
- package/dist/cli/commands/security-audit-commands.js +3 -3
- package/dist/cli/commands/sediment-commands.js +10 -1
- package/dist/cli/commands/session-24h-mode.d.ts +26 -0
- package/dist/cli/commands/session-24h-mode.js +196 -0
- package/dist/cli/commands/share-commands.d.ts +19 -0
- package/dist/cli/commands/share-commands.js +121 -2
- package/dist/cli/commands/skill-conformance-commands.js +1 -1
- package/dist/cli/commands/skill-loop-engineering-readiness-commands.js +1 -1
- package/dist/cli/commands/skill-search-commands.js +4 -1
- package/dist/cli/commands/slice-commands.js +1 -1
- package/dist/cli/commands/slice-integrate-commands.js +1 -1
- package/dist/cli/commands/slice-review-commands.js +1 -1
- package/dist/cli/commands/smoke-commands.js +1 -1
- package/dist/cli/commands/sop-commands.js +1 -1
- package/dist/cli/commands/spill-demo-command.d.ts +7 -0
- package/dist/cli/commands/spill-demo-command.js +29 -0
- package/dist/cli/commands/statusline-commands.d.ts +12 -0
- package/dist/cli/commands/statusline-commands.js +79 -17
- package/dist/cli/commands/sub-agent-commands.js +2 -1
- package/dist/cli/commands/sub-agent-shared.d.ts +10 -0
- package/dist/cli/commands/sub-agent-shared.js +24 -1
- package/dist/cli/commands/swarm-commands.d.ts +13 -0
- package/dist/cli/commands/swarm-commands.js +77 -0
- package/dist/cli/commands/tech-commands.d.ts +64 -0
- package/dist/cli/commands/tech-commands.js +195 -0
- package/dist/cli/commands/understand-commands.js +1 -1
- package/dist/cli/commands/upgrade-commands.d.ts +2 -0
- package/dist/cli/commands/upgrade-commands.js +40 -5
- package/dist/cli/commands/user-touchpoint-commands.js +1 -1
- package/dist/cli/commands/verdict-aggregate-command.js +1 -1
- package/dist/cli/commands/vm-commands.d.ts +31 -0
- package/dist/cli/commands/vm-commands.js +274 -0
- package/dist/cli/commands/workflow-commands.js +24 -1
- package/dist/cli/commands/workflow-plan-commands.js +1 -1
- package/dist/cli/commands/workspace/init-command.js +1 -1
- package/dist/cli/commands/workspace/migrate-command.js +1 -1
- package/dist/cli/commands/workspace/reconcile-command.js +1 -1
- package/dist/cli/commands/worktree-auth-commands.d.ts +29 -0
- package/dist/cli/commands/worktree-auth-commands.js +652 -0
- package/dist/cli/index.js +58 -13
- package/dist/cli/program.d.ts +2 -2
- package/dist/cli/program.js +86 -281
- package/dist/services/24h-mode/decider.d.ts +103 -0
- package/dist/services/24h-mode/decider.js +144 -0
- package/dist/services/24h-mode/index.d.ts +12 -0
- package/dist/services/24h-mode/index.js +12 -0
- package/dist/services/24h-mode/state.d.ts +48 -0
- package/dist/services/24h-mode/state.js +51 -0
- package/dist/services/24h-mode/store.d.ts +27 -0
- package/dist/services/24h-mode/store.js +119 -0
- package/dist/services/artifacts/artifact-prerequisites.js +1 -1
- package/dist/services/artifacts/request-artifact-service.js +1 -1
- package/dist/services/artifacts/workspace-service.js +1 -1
- package/dist/services/audit/enforcers/lint-bee-runtime-contract.d.ts +25 -0
- package/dist/services/audit/enforcers/lint-bee-runtime-contract.js +91 -0
- package/dist/services/audit/enforcers/lint-peaks-code-runtime.d.ts +16 -0
- package/dist/services/audit/enforcers/lint-peaks-code-runtime.js +31 -0
- package/dist/services/audit/enforcers/lint-peaks-skill-runtime.d.ts +23 -0
- package/dist/services/audit/enforcers/lint-peaks-skill-runtime.js +59 -0
- package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.d.ts +28 -0
- package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.js +86 -0
- package/dist/services/audit/enforcers/lint-prd-artifact-handoff.d.ts +16 -0
- package/dist/services/audit/enforcers/lint-prd-artifact-handoff.js +41 -0
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.d.ts +27 -0
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.js +47 -0
- package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.d.ts +19 -0
- package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.js +47 -0
- package/dist/services/audit/enforcers/lint-rd-handoff-coverage.d.ts +18 -0
- package/dist/services/audit/enforcers/lint-rd-handoff-coverage.js +70 -0
- package/dist/services/audit/enforcers/lint-skill-presence-mandatory.d.ts +25 -0
- package/dist/services/audit/enforcers/lint-skill-presence-mandatory.js +53 -0
- package/dist/services/audit/red-line-catalog-p2-a.d.ts +0 -6
- package/dist/services/audit/red-line-catalog-p2-a.js +230 -1
- package/dist/services/audit/static-service.d.ts +32 -25
- package/dist/services/audit/static-service.js +30 -109
- package/dist/services/audit-independent/index.d.ts +2 -0
- package/dist/services/audit-independent/index.js +2 -0
- package/dist/services/autonomous-swarm/autonomous-swarm-service.d.ts +127 -0
- package/dist/services/autonomous-swarm/autonomous-swarm-service.js +446 -0
- package/dist/services/changeset/changeset-check-service.d.ts +22 -0
- package/dist/services/changeset/changeset-check-service.js +47 -0
- package/dist/services/code/auto-compact-modes.d.ts +30 -0
- package/dist/services/code/auto-compact-modes.js +38 -0
- package/dist/services/code/auto-compact-orchestrator.d.ts +43 -5
- package/dist/services/code/auto-compact-orchestrator.js +101 -21
- package/dist/services/code/dag-orchestrator.d.ts +30 -1
- package/dist/services/code/dag-orchestrator.js +106 -1
- package/dist/services/code/status-line-renderer.d.ts +2 -0
- package/dist/services/code/status-line-renderer.js +21 -3
- package/dist/services/code-review/ocr-service.d.ts +1 -1
- package/dist/services/code-review/ocr-service.js +6 -3
- package/dist/services/compact-history/compact-history-service.d.ts +41 -0
- package/dist/services/compact-history/compact-history-service.js +62 -0
- package/dist/services/compact-statusline/compact-statusline-service.d.ts +16 -0
- package/dist/services/compact-statusline/compact-statusline-service.js +83 -0
- package/dist/services/config/config-service.d.ts +1 -12
- package/dist/services/config/config-service.js +3 -72
- package/dist/services/config/config-types.d.ts +2 -4
- package/dist/services/config/config-types.js +1 -1
- package/dist/services/container/container-lease.d.ts +67 -0
- package/dist/services/container/container-lease.js +135 -0
- package/dist/services/context/auto-compact-dispatcher.d.ts +40 -5
- package/dist/services/context/auto-compact-dispatcher.js +32 -102
- package/dist/services/context/auto-compact-reader.js +1 -1
- package/dist/services/context/auto-compact-types.d.ts +27 -2
- package/dist/services/context/auto-compact-types.js +8 -1
- package/dist/services/context/build-dispatch-system-prompt.d.ts +75 -0
- package/dist/services/context/build-dispatch-system-prompt.js +117 -0
- package/dist/services/context/collector.d.ts +2 -2
- package/dist/services/context/context-builder.d.ts +4 -4
- package/dist/services/context/context-schema.d.ts +48 -48
- package/dist/services/context/ide-detect.d.ts +4 -0
- package/dist/services/context/ide-detect.js +24 -0
- package/dist/services/context/main-session-monitor.d.ts +1 -4
- package/dist/services/context/main-session-monitor.js +1 -24
- package/dist/services/context/memory-index-reader.d.ts +8 -0
- package/dist/services/context/memory-index-reader.js +57 -0
- package/dist/services/context/memory-lru-cache.d.ts +12 -0
- package/dist/services/context/memory-lru-cache.js +60 -0
- package/dist/services/context/memory-preflight-config.d.ts +19 -0
- package/dist/services/context/memory-preflight-config.js +25 -0
- package/dist/services/context/memory-preflight-service.d.ts +19 -0
- package/dist/services/context/memory-preflight-service.js +120 -0
- package/dist/services/context/spillover-store.d.ts +23 -0
- package/dist/services/context/spillover-store.js +155 -0
- package/dist/services/context/spillover-types.d.ts +18 -0
- package/dist/services/context/spillover-types.js +1 -0
- package/dist/services/crystallization/crystallization-service.d.ts +22 -5
- package/dist/services/crystallization/crystallization-service.js +8 -14
- package/dist/services/crystallization/crystallization-types.d.ts +6 -6
- package/dist/services/crystallization/evidence-brief-builder.d.ts +1 -1
- package/dist/services/crystallization/index.d.ts +13 -0
- package/dist/services/crystallization/index.js +13 -0
- package/dist/services/dashboard/project-dashboard-service.js +2 -2
- package/dist/services/dispatch/await-batch.d.ts +70 -0
- package/dist/services/dispatch/await-batch.js +272 -0
- package/dist/services/dispatch/batch-counter.js +1 -1
- package/dist/services/dispatch/dispatch-record-writer.d.ts +126 -4
- package/dist/services/dispatch/dispatch-record-writer.js +239 -9
- package/dist/services/dispatch/slice-dag.d.ts +46 -0
- package/dist/services/dispatch/slice-dag.js +6 -0
- package/dist/services/dispatch/stage-enum.d.ts +27 -0
- package/dist/services/dispatch/stage-enum.js +48 -0
- package/dist/services/dispatch/startup-timeout.d.ts +86 -0
- package/dist/services/dispatch/startup-timeout.js +97 -0
- package/dist/services/dispatch/sub-agent-dispatcher.js +40 -89
- package/dist/services/dispatch/test-tool-detection.d.ts +25 -1
- package/dist/services/dispatch/test-tool-detection.js +80 -0
- package/dist/services/doctor/doctor-service/checks/check-id-schema.d.ts +18 -0
- package/dist/services/doctor/doctor-service/checks/check-id-schema.js +64 -0
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.d.ts +14 -0
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.js +69 -0
- package/dist/services/doctor/doctor-service/checks/dist-source-version.d.ts +32 -0
- package/dist/services/doctor/doctor-service/checks/dist-source-version.js +110 -0
- package/dist/services/doctor/doctor-service/checks/gateguard-conflict.d.ts +24 -0
- package/dist/services/doctor/doctor-service/checks/gateguard-conflict.js +164 -0
- package/dist/services/doctor/doctor-service/checks/l3-memory-health.d.ts +16 -0
- package/dist/services/doctor/doctor-service/checks/l3-memory-health.js +57 -0
- package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.d.ts +19 -0
- package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.js +66 -0
- package/dist/services/doctor/doctor-service/checks/schema-validity.d.ts +10 -0
- package/dist/services/doctor/doctor-service/checks/schema-validity.js +33 -0
- package/dist/services/doctor/doctor-service/checks/skill-apply-note.d.ts +20 -0
- package/dist/services/doctor/doctor-service/checks/skill-apply-note.js +85 -0
- package/dist/services/doctor/doctor-service/checks/skill-existence.d.ts +13 -0
- package/dist/services/doctor/doctor-service/checks/skill-existence.js +30 -0
- package/dist/services/doctor/doctor-service/checks/skill-name-match.d.ts +10 -0
- package/dist/services/doctor/doctor-service/checks/skill-name-match.js +25 -0
- package/dist/services/doctor/doctor-service/checks/skill-parse.d.ts +10 -0
- package/dist/services/doctor/doctor-service/checks/skill-parse.js +19 -0
- package/dist/services/doctor/doctor-service/checks/skill-presence.d.ts +21 -0
- package/dist/services/doctor/doctor-service/checks/skill-presence.js +75 -0
- package/dist/services/doctor/doctor-service/checks/skill-runbook.d.ts +14 -0
- package/dist/services/doctor/doctor-service/checks/skill-runbook.js +47 -0
- package/dist/services/doctor/doctor-service/checks/statusline-install.d.ts +14 -0
- package/dist/services/doctor/doctor-service/checks/statusline-install.js +32 -0
- package/dist/services/doctor/doctor-service/checks/statusline-runtime.d.ts +13 -0
- package/dist/services/doctor/doctor-service/checks/statusline-runtime.js +30 -0
- package/dist/services/doctor/doctor-service/checks/user-config.d.ts +11 -0
- package/dist/services/doctor/doctor-service/checks/user-config.js +27 -0
- package/dist/services/doctor/doctor-service/checks/workspace-init.d.ts +16 -0
- package/dist/services/doctor/doctor-service/checks/workspace-init.js +34 -0
- package/dist/services/doctor/doctor-service/checks/workspace-layout.d.ts +33 -0
- package/dist/services/doctor/doctor-service/checks/workspace-layout.js +180 -0
- package/dist/services/doctor/doctor-service/index.d.ts +48 -0
- package/dist/services/doctor/doctor-service/index.js +254 -0
- package/dist/services/doctor/doctor-service/plugin-registry.d.ts +41 -0
- package/dist/services/doctor/doctor-service/plugin-registry.js +77 -0
- package/dist/services/doctor/doctor-service/report/final-summary.d.ts +20 -0
- package/dist/services/doctor/doctor-service/report/final-summary.js +29 -0
- package/dist/services/doctor/doctor-service/types.d.ts +245 -0
- package/dist/services/doctor/doctor-service/types.js +15 -0
- package/dist/services/doctor/doctor-service.d.ts +15 -146
- package/dist/services/doctor/doctor-service.js +22 -926
- package/dist/services/doctor/index.d.ts +22 -0
- package/dist/services/doctor/index.js +22 -0
- package/dist/services/env/shell-probe.d.ts +71 -0
- package/dist/services/env/shell-probe.js +161 -0
- package/dist/services/evolution/evolution-types.d.ts +39 -39
- package/dist/services/final-review/final-review-service.d.ts +11 -1
- package/dist/services/final-review/index.d.ts +2 -0
- package/dist/services/final-review/index.js +1 -0
- package/dist/services/hooks/auto-compact-hook-install.d.ts +4 -5
- package/dist/services/hooks/auto-compact-hook-install.js +4 -5
- package/dist/services/hooks/worktree-authorization-gate.d.ts +205 -0
- package/dist/services/hooks/worktree-authorization-gate.js +492 -0
- package/dist/services/ide/adapters/claude-code-adapter.js +2 -2
- package/dist/services/ide/adapters/qoder-adapter.d.ts +25 -0
- package/dist/services/ide/adapters/qoder-adapter.js +57 -0
- package/dist/services/ide/adapters/tongyi-lingma-adapter.d.ts +16 -0
- package/dist/services/ide/adapters/tongyi-lingma-adapter.js +45 -0
- package/dist/services/ide/ide-registry.js +6 -0
- package/dist/services/ide/ide-types.d.ts +1 -1
- package/dist/services/job/job-types.d.ts +56 -56
- package/dist/services/job-snapshot/index.d.ts +8 -0
- package/dist/services/job-snapshot/index.js +7 -0
- package/dist/services/{job/job-resource-snapshot.d.ts → job-snapshot/snapshot.d.ts} +1 -1
- package/dist/services/job-snapshot/types.d.ts +7 -0
- package/dist/services/job-snapshot/types.js +1 -0
- package/dist/services/karpathy-cost/karpathy-cost-check-service.d.ts +67 -0
- package/dist/services/karpathy-cost/karpathy-cost-check-service.js +108 -0
- package/dist/services/log/retention.d.ts +16 -0
- package/dist/services/log/retention.js +17 -0
- package/dist/services/loop/loop-bee-relation-types.d.ts +6 -6
- package/dist/services/loop/loop-release-types.d.ts +24 -24
- package/dist/services/loop/monotonic-runner.d.ts +17 -11
- package/dist/services/loop/monotonic-runner.js +118 -79
- package/dist/services/memory/project-memory-service/index/kind-dispatch.d.ts +8 -0
- package/dist/services/memory/project-memory-service/index/kind-dispatch.js +253 -0
- package/dist/services/memory/project-memory-service/index/ranking.d.ts +6 -0
- package/dist/services/memory/project-memory-service/index/ranking.js +171 -0
- package/dist/services/memory/project-memory-service/index/search.d.ts +34 -0
- package/dist/services/memory/project-memory-service/index/search.js +194 -0
- package/dist/services/memory/project-memory-service/index.d.ts +9 -0
- package/dist/services/memory/project-memory-service/index.js +24 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter.d.ts +9 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter.js +106 -0
- package/dist/services/memory/project-memory-service/parsers/markdown-pure.d.ts +7 -0
- package/dist/services/memory/project-memory-service/parsers/markdown-pure.js +96 -0
- package/dist/services/memory/project-memory-service/store/atomic-write.d.ts +5 -0
- package/dist/services/memory/project-memory-service/store/atomic-write.js +56 -0
- package/dist/services/memory/project-memory-service/store/paths.d.ts +8 -0
- package/dist/services/memory/project-memory-service/store/paths.js +116 -0
- package/dist/services/memory/project-memory-service/types.d.ts +128 -0
- package/dist/services/memory/project-memory-service/types.js +9 -0
- package/dist/services/memory/project-memory-service.d.ts +1 -167
- package/dist/services/memory/project-memory-service.js +19 -816
- package/dist/services/migrate-skill-name/schema.d.ts +2 -2
- package/dist/services/observability/aggregation.d.ts +27 -0
- package/dist/services/observability/aggregation.js +72 -0
- package/dist/services/observability/observability-service.d.ts +73 -7
- package/dist/services/observability/observability-service.js +87 -1
- package/dist/services/openspec/artifact-boundary.d.ts +138 -0
- package/dist/services/openspec/artifact-boundary.js +150 -0
- package/dist/services/openspec/coverage-evidence-reader.d.ts +191 -0
- package/dist/services/openspec/coverage-evidence-reader.js +386 -0
- package/dist/services/openspec/openspec-archive-service.d.ts +70 -0
- package/dist/services/openspec/openspec-archive-service.js +320 -8
- package/dist/services/openspec/openspec-bridge-service.js +1 -1
- package/dist/services/openspec/openspec-init-service.js +1 -1
- package/dist/services/openspec/openspec-propose-from-doctor-service.js +1 -1
- package/dist/services/openspec/openspec-render-service.js +7 -4
- package/dist/services/openspec/openspec-scan-service.js +1 -1
- package/dist/services/openspec/openspec-validate-service.js +5 -4
- package/dist/services/preferences/preferences-service.js +10 -0
- package/dist/services/preferences/preferences-types.d.ts +13 -0
- package/dist/services/preferences/preferences-types.js +11 -0
- package/dist/services/qa/screenshot-archive-service.d.ts +51 -0
- package/dist/services/qa/screenshot-archive-service.js +134 -0
- package/dist/services/rd/rd-service.js +10 -11
- package/dist/services/rd/types.d.ts +32 -32
- package/dist/services/rd-swarm/rd-swarm-service.d.ts +60 -0
- package/dist/services/rd-swarm/rd-swarm-service.js +93 -0
- package/dist/services/recommendations/capability-seed-items.js +0 -1
- package/dist/services/recommendations/capability-seed-mappings.js +0 -1
- package/dist/services/recommendations/capability-seed-sources.js +0 -1
- package/dist/services/release/version-precheck-service.d.ts +51 -0
- package/dist/services/release/version-precheck-service.js +257 -0
- package/dist/services/scan/acceptance-coverage-service.js +1 -1
- package/dist/services/scan/archetype-service.js +1 -1
- package/dist/services/scan/existing-system-service.js +1 -1
- package/dist/services/scan/libraries-service.js +1 -1
- package/dist/services/sediment/json-schema.d.ts +40 -40
- package/dist/services/share/bundle-types.d.ts +12 -12
- package/dist/services/share/run-state-contract.d.ts +2 -2
- package/dist/services/skill/skill-search-service.d.ts +12 -7
- package/dist/services/skill/skill-search-service.js +8 -4
- package/dist/services/skillhub/migrations/001-initial.sql +71 -0
- package/dist/services/skillhub/migrations/002-loop-release.sql +32 -0
- package/dist/services/skillhub/migrations/003-loop-bee-relation.sql +35 -0
- package/dist/services/skillhub/migrations/004-loop-bee-extension.sql +65 -0
- package/dist/services/skillhub/migrations/005-evolution-evaluation.sql +81 -0
- package/dist/services/skillhub/migrations/006-crystallization-event.sql +92 -0
- package/dist/services/skills/hooks-settings-service.d.ts +75 -0
- package/dist/services/skills/hooks-settings-service.js +230 -2
- package/dist/services/skills/skill-registry.d.ts +1 -0
- package/dist/services/skills/skill-registry.js +6 -4
- package/dist/services/skills/skill-runbook-service.js +1 -1
- package/dist/services/slice/slice-check-service.js +1 -1
- package/dist/services/standards/main-session-monitor-ban-hook.d.ts +14 -0
- package/dist/services/standards/main-session-monitor-ban-hook.js +19 -0
- package/dist/services/standards/missing-standards-detector.d.ts +25 -0
- package/dist/services/standards/missing-standards-detector.js +43 -12
- package/dist/services/tech/tech-change-id-service.d.ts +82 -0
- package/dist/services/tech/tech-change-id-service.js +117 -0
- package/dist/services/understand/understand-hybrid-service.js +1 -1
- package/dist/services/understand/understand-scan-service.js +2 -2
- package/dist/services/upgrade/upgrade-service.js +4 -3
- package/dist/services/verdict/envelopes.d.ts +2 -2
- package/dist/services/verdict/envelopes.js +2 -2
- package/dist/services/verdict/verdict-aggregator.d.ts +3 -3
- package/dist/services/vm/vm-lease.d.ts +40 -0
- package/dist/services/vm/vm-lease.js +137 -0
- package/dist/services/workflow/autonomous-resume-writer.js +1 -1
- package/dist/services/workflow/pipeline-verify-gate-support.d.ts +47 -0
- package/dist/services/workflow/pipeline-verify-gate-support.js +194 -0
- package/dist/services/workflow/pipeline-verify-service.d.ts +17 -81
- package/dist/services/workflow/pipeline-verify-service.js +42 -218
- package/dist/services/workflow/pipeline-verify-types.d.ts +90 -0
- package/dist/services/workflow/pipeline-verify-types.js +10 -0
- package/dist/services/workflow/plan-reader.d.ts +1 -1
- package/dist/services/workflow/plan-reader.js +1 -1
- package/dist/services/workflow/plan-refresher.d.ts +1 -1
- package/dist/services/workflow/plan-refresher.js +1 -1
- package/dist/services/workflow/plan-trigger-detector.d.ts +1 -1
- package/dist/services/workflow/plan-trigger-detector.js +1 -1
- package/dist/services/workflow/workflow-autonomous-resume-helpers.d.ts +1 -1
- package/dist/services/workflow/workflow-autonomous-service.d.ts +2 -98
- package/dist/services/workflow/workflow-autonomous-types.d.ts +114 -0
- package/dist/services/workflow/workflow-autonomous-types.js +21 -0
- package/dist/services/workflow/workflow-router-service.js +18 -16
- package/dist/services/workflow/workflow-spec-lint.d.ts +13 -0
- package/dist/services/workflow/workflow-spec-lint.js +75 -0
- package/dist/services/workflow/workflow-spec-types.d.ts +100 -0
- package/dist/services/workflow/workflow-spec-types.js +13 -0
- package/dist/services/workflow/workflow-spec-yaml.d.ts +17 -0
- package/dist/services/workflow/workflow-spec-yaml.js +88 -0
- package/dist/services/workflow/workflow-spec.d.ts +11 -91
- package/dist/services/workflow/workflow-spec.js +16 -145
- package/dist/services/workspace/migrate-service.js +1 -1
- package/dist/services/workspace/workspace-service.js +1 -1
- package/dist/services/worktree/worktree-lease.d.ts +170 -0
- package/dist/services/worktree/worktree-lease.js +242 -0
- package/package.json +91 -51
- package/scripts/clean-dist.mjs +31 -1
- package/scripts/copy-templates.mjs +16 -0
- package/scripts/sync-version.mjs +53 -2
- package/skills/bee/peaks-perf-audit/SKILL.md +17 -0
- package/skills/bee/peaks-prd/SKILL.md +16 -0
- package/skills/bee/peaks-prd/test-prompts.json +12 -0
- package/skills/bee/peaks-qa/SKILL.md +16 -1
- package/skills/bee/peaks-qa/references/qa-sub-agent-dispatch.md +22 -0
- package/skills/bee/peaks-qa/test-prompts.json +12 -0
- package/skills/bee/peaks-rd/SKILL.md +29 -20
- package/skills/bee/peaks-rd/references/rd-sub-agent-dispatch.md +39 -0
- package/skills/bee/peaks-rd/test-prompts.json +12 -0
- package/skills/bee/peaks-reviewer/SKILL.md +17 -0
- package/skills/bee/peaks-sc/SKILL.md +16 -0
- package/skills/bee/peaks-security-audit/SKILL.md +17 -0
- package/skills/bee/peaks-txt/SKILL.md +16 -0
- package/skills/bee/peaks-txt/test-prompts.json +12 -0
- package/skills/bee/peaks-ui/SKILL.md +49 -43
- package/skills/bee/peaks-ui/test-prompts.json +12 -0
- package/skills/peaks-code/SKILL.md +54 -109
- package/skills/peaks-code/references/boundaries.md +15 -1
- package/skills/peaks-code/references/cron-scheduler-deployment.md +313 -0
- package/skills/peaks-code/references/external-skill-invocation.md +27 -0
- package/skills/peaks-code/references/lease-dashboard.html +224 -0
- package/skills/peaks-code/references/lease-stats.sample.json +26 -0
- package/skills/peaks-code/references/peaks-worktree-l2-enforcers.md +208 -0
- package/skills/peaks-code/references/periodic-checkpoint.md +4 -4
- package/skills/peaks-code/references/runbook.md +63 -1
- package/skills/peaks-code/references/startup-sequence.md +110 -0
- package/skills/peaks-code/references/step-0-8-gate.md +1 -1
- package/skills/peaks-code/references/sub-agent-dispatch.md +92 -1
- package/skills/peaks-code/references/worktree-governance.md +123 -0
- package/skills/peaks-code/test-prompts.json +12 -0
- package/skills/peaks-doctor/SKILL.md +1 -1
- package/skills/peaks-ide/SKILL.md +1 -1
- package/skills/peaks-solo/SKILL.md +21 -0
- package/skills/peaks-solo/references/triage-decision-table.md +6 -0
- package/skills/peaks-sop/test-prompts.json +17 -0
- package/dist/cli/commands/agent-commands.d.ts +0 -20
- package/dist/cli/commands/agent-commands.js +0 -48
- package/dist/cli/commands/classify-classify-commands.d.ts +0 -19
- package/dist/cli/commands/classify-classify-commands.js +0 -151
- package/dist/cli/commands/contract-commands.d.ts +0 -26
- package/dist/cli/commands/contract-commands.js +0 -114
- package/dist/cli/commands/session-auto-compact-hook-command.d.ts +0 -37
- package/dist/cli/commands/session-auto-compact-hook-command.js +0 -127
- package/dist/cli/commands/worker-commands.d.ts +0 -3
- package/dist/cli/commands/worker-commands.js +0 -52
- package/dist/services/agent/ecc-agent-service.d.ts +0 -47
- package/dist/services/agent/ecc-agent-service.js +0 -143
- package/dist/services/config/provider-service.d.ts +0 -48
- package/dist/services/config/provider-service.js +0 -143
- package/dist/services/context/dispatch-context-guard.d.ts +0 -27
- package/dist/services/context/dispatch-context-guard.js +0 -192
- package/dist/services/context/shared-channel.d.ts +0 -93
- package/dist/services/context/shared-channel.js +0 -308
- package/dist/services/filesystem/file-lock.d.ts +0 -11
- package/dist/services/filesystem/file-lock.js +0 -152
- package/dist/services/mut/assert-scanner.d.ts +0 -6
- package/dist/services/mut/assert-scanner.js +0 -116
- package/dist/services/mut/index.d.ts +0 -8
- package/dist/services/mut/index.js +0 -7
- package/dist/services/mut/mut-runner.d.ts +0 -39
- package/dist/services/mut/mut-runner.js +0 -29
- package/dist/services/mut/production-stryker.d.ts +0 -2
- package/dist/services/mut/production-stryker.js +0 -75
- package/dist/services/mut/report-builder.d.ts +0 -11
- package/dist/services/mut/report-builder.js +0 -110
- package/dist/services/mut/report-loader.d.ts +0 -31
- package/dist/services/mut/report-loader.js +0 -78
- package/dist/services/mut/thresholds.d.ts +0 -21
- package/dist/services/mut/thresholds.js +0 -22
- package/dist/services/mut/types.d.ts +0 -336
- package/dist/services/mut/types.js +0 -59
- package/dist/services/providers/minimax-provider-service.d.ts +0 -24
- package/dist/services/providers/minimax-provider-service.js +0 -143
- package/dist/services/providers/minimax-worker-service.d.ts +0 -21
- package/dist/services/providers/minimax-worker-service.js +0 -83
- package/dist/shared/fs.d.ts +0 -4
- package/dist/shared/fs.js +0 -26
- package/dist/shared/paths.d.ts +0 -6
- package/dist/shared/paths.js +0 -50
- package/dist/shared/result.d.ts +0 -22
- package/dist/shared/result.js +0 -46
- package/dist/shared/version.d.ts +0 -1
- package/dist/shared/version.js +0 -1
- package/examples/video-demo/README.md +0 -142
- package/examples/video-demo/out/en-closing-960.png +0 -0
- package/examples/video-demo/out/zh-closing-960.png +0 -0
- package/examples/video-demo/preview/peaks-loop-demo-en.mp4 +0 -0
- package/examples/video-demo/preview/peaks-loop-demo.mp4 +0 -0
- /package/dist/services/{job/job-resource-snapshot.js → job-snapshot/snapshot.js} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,398 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## 4.0.3 — 2026-07-30 (GA release, 4.0.2 tombstone skip)
|
|
4
|
+
|
|
5
|
+
This is the cutover to the in-flight 4.0.3 GA, replacing the prior `## 4.0.1` GA header. 4.0.3 lands because 4.0.2 is a permanent npm tombstone (published-then-unpublished on 2026-07-22; see `.peaks/memory/2026-07-30-4-0-1-published-tombstone-resolution.md` table row 4.0.2: ABSENT in versions[] but time entry `2026-07-22T01:53:48.127Z` still present = tombstoned). The byte-for-byte manifest is identical to 4.0.1; the only diff is the package.json version + the visual README rework (see "Visual / text" below). The 4.0.1 GA section below is preserved as the historical record of the actual `peaks-loop@4.0.1` published at `dist-tags.latest` on 2026-07-30T14:55:22Z; it is NOT the 4.0.3 release body.
|
|
6
|
+
|
|
7
|
+
### Visual / text (4.0.3-only)
|
|
8
|
+
|
|
9
|
+
- **README + README-en beautify** (8 SVG visual assets, 0 external deps): 5 NEW deterministic SVGs under `assets/readme/` (`hero` 1200×600 multi-pane terminal with live epoch + status lights + radial gate, `command-palette` 13 slash commands in a ⌘K palette, `pulse` 4-tile live metrics with radial rings + data-flow, `trace-stream` code diff + scrolling log + 7-gate chain, `skill-index` 13 skill cards with category badges, `ship-summary` 19-rid timeline with category chips, plus retained `architecture` + `domains` + `status` + `footer`). 1 new tail-end section in CHANGELOG (this one). All asset-only mode; no external fonts, scripts, or remote URLs.
|
|
10
|
+
- **CHANGELOG noise reduction**: 8 empty `## 4.0.0` shells stripped (4 with stale `Updated dependencies` lists + 4 with only `### Patch/Minor Changes` headers and no list items), 1 empty `## [Unreleased]` placeholder stripped, 1 duplicate `## [3.0.2]` section merged. File size 4147 → 3943 lines (-204). 0 semantic content removed; this is a release-blocker for 4.0.3 because the prior duplicate `## 4.0.0` headings confused publish.yml's release-notes awk extractor on the 4.0.3 attempt (PR #rid-034 already showed the awk regex is sensitive to neighbor duplicates).
|
|
11
|
+
- **Dynamic npm version badge in README**: the "Latest" row of the status table now renders via `[]` so the version auto-updates at every publish without a README edit. Previously this row was hardcoded `4.0.1`.
|
|
12
|
+
- **package.json keywords for npm search** (root 42 + shared 8 + mut 9 + channel 9): `peaks-loop / loop-engineering / ai-orchestration / ai-coding-agent / ai-programmer / multi-agent / claude-code / codex / z-code / cursor / trae / tongyi-lingma / agent-harness / agentic-engineering / autonomous-workflow / workflow-orchestration / llm-workflow / long-running-task / sub-agent-dispatch / dag-orchestration / slice-decomposition / sop / openspec / karpathy / darwin / anti-drift / evolution-evaluation / ci-cd / github-actions / trusted-publishing / oidc / monorepo / pnpm / vitest / code-review / tdd / security-scan / lint / typecheck / devtool / cli / developer-tools`.
|
|
13
|
+
|
|
14
|
+
### Sub-package lockstep (4.0.3)
|
|
15
|
+
|
|
16
|
+
- peaks-loop@4.0.3 / peaks-loop-shared@0.0.31 / peaks-loop-mut@0.1.5 / peaks-loop-shared-channel@0.0.10
|
|
17
|
+
- `peaks-loop-shared/dist/version.js` CLI_VERSION bumped to "4.0.3" (publish gate-cli-version reads on-disk, not the packed tarball — both checked).
|
|
18
|
+
|
|
19
|
+
## 4.0.1 — 2026-07-30 (GA release, the actual published GA at dist-tags.latest)
|
|
20
|
+
|
|
21
|
+
### Features
|
|
22
|
+
|
|
23
|
+
- **One super-command CLI surface** (rid-009): `peaks code / audit / doctor / openspec / release / release-pack` replacing 73 leaf commands.
|
|
24
|
+
- **peaks changeset check hard gate** (rid-011): mirrors publish.yml gate-changeset and refuses to publish when `.changeset/*.md` is staged.
|
|
25
|
+
- **peaks release precheck** (rid-010): 4-layer version gate mirroring publish.yml §(A); ships with `tests/unit/release/version-precheck-service.test.ts` (13 cases).
|
|
26
|
+
- **Dynamic workspace subpackage discovery** (rid-014): release-pack.mjs now derives publish order from `packages/*` and `pnpm-workspace.yaml` — adding/removing a subpackage needs no code edit.
|
|
27
|
+
- **Monorepo-wide version lockstep** (rid-015): `scripts/bump-version.mjs` bumps every publishable subpackage in lockstep with root (no more 33→35 CLI_VERSION lag class).
|
|
28
|
+
- **GitHub Release step + tag/version gate** (rid-017): publish.yml now runs `Extract release notes from root CHANGELOG.md` (per-version awk) → `Verify exact tag matches bumped root version` (hard `git describe --tags --exact-match` gate) → `Create GitHub Release` (non-draft, no `--generate-notes`).
|
|
29
|
+
- **5 pure-internal sub-packages folded into `src/services/*`** (rid-016): deleted `peaks-loop-{audit-independent,crystallization,doctor,final-review,job-snapshot}` from `packages/`; behaviour preserved by re-exports.
|
|
30
|
+
|
|
31
|
+
### Bug fixes
|
|
32
|
+
|
|
33
|
+
- **CLI_VERSION drift closed** (peaks-publish-stale fix): `peaks-loop@<new>` no longer pins a stale `peaks-loop-shared@<old>` thanks to on-disk + tarball-content double guard in `gate-cli-version`.
|
|
34
|
+
- **33→35 npm version-skip regression closed** (AC7): `peaks workspace init` + `bump-version.mjs` are now idempotent when local root equals `dist-tags.latest`.
|
|
35
|
+
- **`workspace:*` protocol leak closed** (release-pack.mjs): every workspace tarball now ships with zero `workspace:` strings; each internal dep is pinned to the registry-safe version matched from the local manifest.
|
|
36
|
+
- **shared auto-bump no longer requires env gate** (sync-version.mjs): the `PEAKS_AUTO_BUMP_SHARED` gate was the Layer 2 root cause of stale local shared tarballs; `bump-version.mjs` is now the single owner.
|
|
37
|
+
|
|
38
|
+
### Breaking changes
|
|
39
|
+
|
|
40
|
+
- The 73 leaf CLI commands have been collapsed to 5 super-commands (`code / audit / doctor / openspec / release / release-pack`). The pre-4.0.0 leaf commands are no longer present on `$PATH`; all users must migrate. Migration matrix and per-leaf replacement are documented in `docs/cli-migration-4-0-0.md` (added in this release; see link in the GitHub Release page for v4.0.0).
|
|
41
|
+
|
|
42
|
+
### Patch Changes
|
|
43
|
+
|
|
44
|
+
- **rid-020b (24h mode integration)**: `peaks code run --24h` flag + dashboard long-run support; 10-file diff (+91/-1) including 3 NEW source (`code-run-command.ts` 120 / `dashboard-long-run.ts` 80 / `dashboard-commands.ts` parent) + 2 surgical edits + 2 NEW vitest (12/12 green) + 4 SKILL.md/ref edits.
|
|
45
|
+
- **rid-024 (code-commands split)**: `code-commands.ts` 1058 → 165 lines (≤ 800 cap) + 3 NEW sibling files (`code-mode-gate-commands.ts` 275 / `code-job-shape-commands.ts` 248 / `code-runtime-commands.ts` 460, including moved `readActiveSid` helper); public API preserved.
|
|
46
|
+
- **rid-025 (heartbeat watch + main-session-monitor ban)**: `peaks heartbeat watch --batch-id <id>` top-level CLI + main-session-monitor hard ban via per-symbol PreToolUse hook + scan test; 14 files (8 EDIT + 4 NEW + 3 NEW test).
|
|
47
|
+
- **rid-026 (monotonic jsonl-store)**: 2-file refactor; cycle persistence moved from `cycle-N.json` N-file → single jsonl-store per-session (`monotonic-runner.ts` 280→334) + monotonic-guard test fixtures migrated.
|
|
48
|
+
- **rid-027 (auto-compact partial mode)**: 7 files; `auto-compact-modes.ts` NEW (partial mode 0.70/0.85) + `--mode <mode>` CLI flag + `getAutoCompactMode` helper + 2 NEW tests (36 cases green).
|
|
49
|
+
- **rid-028 (context spillover storage)**: 3 NEW files (minimal scope); `spillover-types.ts` + `spillover-store.ts` + `context-spillover-store.test.ts` (102 lines, 7 cases including traversal regression). `auto-compact-orchestrator.ts` D6.e branch byte-identical preserved.
|
|
50
|
+
- **rid-029 (DAG wave + barrier)**: 4-file diff; `slice-dag.ts` Wave/WaveArtifact types + `dag-orchestrator.ts` `planDispatchWaves`/`runWaveWithArtifacts` + `sub-agent-dispatcher.ts` `dispatchFromWaves` + NEW test (6 cases). Existing `runDag`/`runLayeredDag`/`buildDispatchSpec` byte-identical preserved.
|
|
51
|
+
- **rid-030 (dashboard summary)**: 6 files; `observability-service.ts` 3 new categories (cycle/token-usage/monotonic-trigger) + `aggregation.ts` `aggregateDashboardMetrics` + `peaks dashboard summary` CLI + 2 NEW tests (26 cases green).
|
|
52
|
+
- **rid-031 (dispatcher deprecation)**: `src/services/context/auto-compact-dispatcher.ts` 285 → 249 lines; removed `node:child_process` import + `dispatchShellExec` function; `case 'shell-exec'` replaced with stub (returns same envelope shape pathway).
|
|
53
|
+
- **rid-032 (session spill-demo CLI)**: 5 files; `spill-demo-command.ts` NEW (64 lines, `peaks session spill-demo` opt-in experimental LLM no-context mode demo) + SKILL.md 24h-mode spill/hydrate subsection + 4 NEW vitest cases.
|
|
54
|
+
- **rid-033 (spillover-store lstat defense-in-depth)**: 2-file EDIT; `spillover-store.ts` adds `lstatSync` target symlink check + `assertNotSymlink` helper in `writeRecord` + `hydrate`; closes rid-028 defense-in-depth gap (now 4-layer defense: safe-segment + containment + lstat + entry.isFile).
|
|
55
|
+
- **rid-034 (v2.13.0 contract cleanup + 4.0.0 GA version bump)**: this release. Retired `peaks session auto-compact-hook` CLI surface (v2.13.0 zero-pause contract). Replaced all retired command strings (`peaks session auto-compact --execute` / `peaks code auto-compact --execute` / `peaks context now` / `peaks session auto-compact-hook`) with `peaks compact auto` family across `src/**` + `skills/**`. Fixed 6 stale unit-test assertions (4 openspec self-host-only skipif guards + 1 test-tool-detection regex + 2 qoder resource-profile assertions) and removed `.peaks/_sub_agents/2026-06-23-session-heartbeat-test/` orphan dir. Version bumped to 4.0.0 GA with lockstep `CLI_VERSION` + CHANGELOG + `.changeset/4-0-0-ga.md`. **Note**: `peaks test` vitest-path fix deferred to rid-035.
|
|
56
|
+
|
|
57
|
+
## 4.0.0-beta.37 — 2026-07-25 (registry conflict bump + version skip)
|
|
58
|
+
|
|
59
|
+
### Patch Changes
|
|
60
|
+
|
|
61
|
+
- **chore(version)**: skip 4.0.0-beta.36 to land on 4.0.0-beta.37. Reason: 4.0.0-beta.35 was already published to npm by a prior session (2026-07-22T17:10:24Z); our HEAD bumped to 4.0.0-beta.35 in the 4.0.0-beta.35 CHANGELOG entry below (matching that on-disk state) but a `pnpm publish` of 4.0.0-beta.35 would fail as duplicate. The version-skip jump (35 → 37, skipping 36) avoids both the duplicate and the public-36 release, keeping the published beta-37 as the next publishable artifact. The 4.0.0-beta.35 on-disk state stays as the work-record version; the 4.0.0-beta.37 version reflects the registry-publishable state once the user runs `git tag v4.0.0-beta.37 && pnpm publish` per their own workflow. No functional change — just a version number for the next release.
|
|
62
|
+
|
|
63
|
+
- **chore(version)**: `package.json` version 4.0.0-beta.35 → 4.0.0-beta.37. `packages/peaks-loop-shared/src/version.ts` `CLI_VERSION` matches. `pnpm-lock.yaml` resolved via `pnpm install --lockfile-only` (post-commit; user may run if their local lockfile is stale).
|
|
64
|
+
|
|
65
|
+
- **chore(archive)**: 5 OpenSpec proposals retired to `openspec/changes/archive/` via `peaks openspec archive --apply` (commits `3e5ec4e9` + this version bump sequence): `enforce-artifact-boundary-and-coverage`, `add-tech-dry-run-gate`, `add-rd-swarm-dry-run-planner`, `add-autonomous-rd-swarm-resume`, `add-slice-topology-multipass`, `fix-claude-settings-template-hook-node-wrapper`. `openspec/changes/` now contains only the `archive/` subdirectory.
|
|
66
|
+
|
|
67
|
+
## 4.0.0-beta.35 — 2026-07-24 (claude-settings-template hook node-wrapper)
|
|
68
|
+
|
|
69
|
+
### Patch Changes
|
|
70
|
+
|
|
71
|
+
- **fix(claude-settings-template)**: `buildWriteHookCommand()` now wraps its inner JS source in `node -e "<js>"` via the single-source-of-truth helper `wrapAsNodeOneLiner(js)` (lines 170-180 of `src/services/workspace/claude-settings-template.ts`). All embedded double quotes are JSON-escaped as `\\"`, so the on-disk `.claude/settings.local.json` `command` field is a real shell-evaluable one-liner instead of bare JS that bash rejected with `syntax error near unexpected token`. Byte-for-byte error-string preservation: the pre-2.0.3 error was `syntax error near unexpected token`; that exact string is what every Windows + macOS + Linux install hit on every Write / Edit / MultiEdit / Bash tool call. The wrapper changes the entry point from bash to Node; the error string no longer surfaces because `node -e` parses the JS, not bash. **Already on disk** (commits `8411fe88` 2026-06-13 + `d9a1a098` 2026-07-04). See the `fix-claude-settings-template-hook-node-wrapper` OpenSpec change for the full Why/What-Changes reconciliation; the original proposal named `buildBashHookCommand`, which pre-dates the v3.1.2 Bash gate-step-08 refactor — the present-day code uses `buildWriteHookCommand` (wrapped) + `buildBashGateStep08Command` (intentionally NOT wrapped).
|
|
72
|
+
- **fix(claude-settings-template)**: `buildBashGateStep08Command()` is **intentionally NOT wrapped** in `node -e "..."`. The Bash matcher returns the literal `peaks code gate-step-08 --project "${CLAUDE_PROJECT_DIR}"` CLI invocation. CLI delegation is the load-bearing contract for the v3.1.2 mechanical gate: the CLI is the only legitimate source of the structured decision + `Next:` slice context, and exit code is the gate-step-08 signal (0 = allow, 2 = block). Wrapping the Bash matcher would short-circuit the CLI delegation and break the gate. The no-wrapper decision is documented inline at lines 261-269 of `claude-settings-template.ts`. **Already on disk** (commit `d9a1a098` 2026-07-04, `TEMPLATE_VERSION 1.3.0`).
|
|
73
|
+
- **docs(claude-settings-template)**: docstring `argv[2]` → `argv[1]` reconciliation on `buildWriteHookCommand` (lines 200-201). Node.js argv layout under `-e` is `process.argv[0]=node, [1]=script-body, [2+]=args`; the previous docstring referenced `[2]` (the position a positional CLI arg would occupy) but the implementation reads `[1]` (the script body itself). The docstring is now consistent with the code. **Already on disk** (commit `8411fe88` 2026-06-13).
|
|
74
|
+
- **qa(claude-settings-template)**: Windows dogfood evidence captured at `.peaks/_runtime/2026-07-24-session-f13da7/qa/010-fix-claude-settings-template-hook-node-wrapper/dogfood-evidence-windows.md`. Confirmed on Windows 11 (PowerShell + Git Bash + Node v22.22.1, HEAD = `e51797c3`): `peaks workspace init --no-claude-hooks --project . --json` + `peaks workspace init --force-hooks --project . --json` round-trip produces a `.claude/settings.local.json` whose `command` field is a shell-evaluable `node -e "<js>"` one-liner; spawn harness on `Write|Edit|MultiEdit` matcher returns exit 0 for `.peaks/_runtime/.../test.md` (allow-list match) and exit 1 for `package.json` (deny-list match). The Bash matcher is the literal CLI delegation string `peaks code gate-step-08 --project "${CLAUDE_PROJECT_DIR}"` — NOT `node -e`-wrapped, as designed. Byte-for-byte match against `buildClaudeSettingsLocalJson()` (lines 227-259 of `claude-settings-template.ts`) confirmed.
|
|
75
|
+
- **Cross-platform note**: Windows is the strong-evidence half of spec.md S4. macOS + Linux halves are best-effort deferred per the rid-010 plan §3 (no in-repo macOS/Linux CI runner wired for the workspace-init + spawn-harness flow). The fix is platform-agnostic at the source level (Node `child_process` + `process.argv`); the dogfood on a second OS is a verification artifact, not a correctness artifact. macOS / Linux dogfood will be captured in a follow-up slice if/when a runner is wired.
|
|
76
|
+
- Closure sediment: `.peaks/memory/2026-07-24-rid-010-fix-claude-settings-closure.md` (rid-010 — Implementation Closure Record, 2 of 5 tasks shipped; Tasks 3-5 quality gates / 3-pass review / release are part of the 2.0.4 ship path).
|
|
77
|
+
|
|
78
|
+
## 4.0.0-beta.26 — 2026-07-22 (peaks-loop-shared lockstep)
|
|
79
|
+
|
|
80
|
+
- Monorepo recurrence fix: `scripts/sync-version.mjs` now auto-bumps
|
|
81
|
+
`peaks-loop-shared` by 0.0.1 each time the root version is bumped,
|
|
82
|
+
gated by `PEAKS_AUTO_BUMP_SHARED=1` in the publish workflow's
|
|
83
|
+
`build` step. Without this, the publish workflow's
|
|
84
|
+
`isAlreadyPublished` guard short-circuits the shared subpackage
|
|
85
|
+
re-publish, leaving downstream `peaks -v` to read a stale
|
|
86
|
+
CLI_VERSION from the cached tarball. Tests: pretest/predev
|
|
87
|
+
invocations of sync-version are now no-ops w.r.t. the shared
|
|
88
|
+
version (no ratcheting during local dev loops).
|
|
89
|
+
|
|
90
|
+
## 4.0.0-beta.21 — 2026-07-22 (ice-cola surface-check fixes, republish)
|
|
91
|
+
|
|
92
|
+
This release is the **republish** after the accidental 4.0.2
|
|
93
|
+
publish earlier on 2026-07-22. The 4.0.2 manifest is being
|
|
94
|
+
unpublished (`npm unpublish --force`, within 72h window). The
|
|
95
|
+
intended release is `4.0.0-beta.21`, the version that was
|
|
96
|
+
manually pinned but the publish workflow's `pnpm exec changeset
|
|
97
|
+
version` step overrode it to `4.0.2` due to a pending
|
|
98
|
+
`.changeset/*.md` in the tagged commit.
|
|
99
|
+
|
|
100
|
+
### Bug fixes
|
|
101
|
+
|
|
102
|
+
- **standardsMissing UX (`fix(standards)`)** — `peaks workspace init`
|
|
103
|
+
previously reported `standardsMissing.missing: true` with the
|
|
104
|
+
remediation text "no project-local standards found" whenever the
|
|
105
|
+
language overlay was empty, even when common was clearly populated
|
|
106
|
+
(ice-cola shape: common/\*.md + typescript overlay populated, but
|
|
107
|
+
no javascript/ dir). The detector now distinguishes three states
|
|
108
|
+
(`complete` / `common-missing` / `language-missing`) and the
|
|
109
|
+
remediation text calls out the precise failing component.
|
|
110
|
+
|
|
111
|
+
- **`peaks statusline` default action (`fix(statusline)`)** — `peaks
|
|
112
|
+
statusline` (no subcommand) was documented as "Run with no
|
|
113
|
+
subcommand to render" but commander was printing usage instead of
|
|
114
|
+
dispatching to the hidden `render` subcommand. The fix attaches
|
|
115
|
+
a default `.action(...)` on the parent `statusline` command that
|
|
116
|
+
delegates to a public `runDefaultStatuslineRender` body, and adds
|
|
117
|
+
`--project <path>` to the parent so the default path inherits the
|
|
118
|
+
project label.
|
|
119
|
+
|
|
120
|
+
- **release-pack test version pinning (`fix(release-tests)`)** —
|
|
121
|
+
five `tests/unit/release/*.test.ts` files hard-coded `'4.0.0-beta.17'`
|
|
122
|
+
and `'0.0.4'` literals. Root bumping from 4.0.0-beta.17 to
|
|
123
|
+
4.0.0-beta.20 made three tests fail immediately, demonstrating the
|
|
124
|
+
tests were carrying version knowledge the production code does not.
|
|
125
|
+
Expectations now derive from the on-disk `package.json` instead,
|
|
126
|
+
so future version bumps are a no-op for the suite.
|
|
127
|
+
|
|
128
|
+
- **`peaks preferences` unknown-key error (`fix(preferences)`)** —
|
|
129
|
+
the prior error was `PREFERENCES_KEY_UNKNOWN: <key>` which forced
|
|
130
|
+
the operator to look up valid keys elsewhere. All three sites
|
|
131
|
+
(`get` / `set` / `reset`) now throw via a shared `unknownKeyError`
|
|
132
|
+
helper that includes the sorted `ALLOWED_KEYS_LIST` inline.
|
|
133
|
+
|
|
134
|
+
### Chore
|
|
135
|
+
|
|
136
|
+
- **`chore(deps)`** — Migrate `onlyBuiltDependencies: [better-sqlite3]`
|
|
137
|
+
out of `package.json#pnpm` (no longer read by pnpm 10.11+) into
|
|
138
|
+
`.npmrc` as the canonical pnpm config key. Silences the per-package
|
|
139
|
+
`WARN The "pnpm" field in package.json is no longer read by pnpm`
|
|
140
|
+
log line without changing install behavior.
|
|
141
|
+
|
|
142
|
+
### CI
|
|
143
|
+
|
|
144
|
+
- **`ci(publish)`** — Add `workflow_dispatch` input
|
|
145
|
+
`skip_changeset_version` to `.github/workflows/publish.yml`. When
|
|
146
|
+
set, the conditional `pnpm exec changeset version` step is
|
|
147
|
+
skipped, so manual version pins in `package.json` survive the
|
|
148
|
+
registry-repair release path.
|
|
149
|
+
|
|
150
|
+
- **`ci(unpublish)`** — One-shot `unpublish-4-0-2` workflow that
|
|
151
|
+
uses Trusted Publishing + OIDC to remove peaks-loop@4.0.2 + 8
|
|
152
|
+
subpackages. Triggered by `gh workflow run` with
|
|
153
|
+
`confirm_destructive=yes-i-am-sure`. Retired (kept for audit)
|
|
154
|
+
once the unpublish completes (npm 72h propagation).
|
|
155
|
+
|
|
156
|
+
### Validation
|
|
157
|
+
|
|
158
|
+
- `vitest tests/unit/standards/missing-standards-detector.test.ts` — 18/18
|
|
159
|
+
- `vitest tests/unit/cli/commands/statusline-default-render.test.ts` — 3/3
|
|
160
|
+
- `vitest tests/unit/release` — 20/20
|
|
161
|
+
- `vitest tests/integration/preferences-cli.test.ts` — 5/5
|
|
162
|
+
- `PEAKS_DRY_RUN=1 node scripts/release-pack.mjs` — 9/9 packages, zero WARN
|
|
163
|
+
|
|
164
|
+
## 4.0.0-beta.17
|
|
165
|
+
|
|
166
|
+
### Patch Changes
|
|
167
|
+
|
|
168
|
+
- Repair registry install: `npm i -g peaks-loop` previously failed with
|
|
169
|
+
`EUNSUPPORTEDPROTOCOL / workspace:*` because the publish workflow
|
|
170
|
+
called `npm publish` on each workspace directory directly, which
|
|
171
|
+
serialized the manifest verbatim and leaked the pnpm-only
|
|
172
|
+
`workspace:*` protocol into the published tarballs. The new
|
|
173
|
+
`scripts/release-pack.mjs` packs each workspace package with
|
|
174
|
+
`pnpm pack` (which rewrites `workspace:*` to exact semver pins) and
|
|
175
|
+
then publishes the resulting tarball via `npm publish <tarball>` so
|
|
176
|
+
npm 11+ OIDC Trusted Publishing remains in effect.
|
|
177
|
+
|
|
178
|
+
Bumped versions: `peaks-loop` 4.0.0-beta.16 → 4.0.0-beta.17; all
|
|
179
|
+
eight subpackages 0.0.3 → 0.0.4. The publish workflow's changeset
|
|
180
|
+
step is now conditional on detected `.changeset/*.md` files so the
|
|
181
|
+
registry-repair release keeps its manually-pinned versions, and
|
|
182
|
+
future releases still pick up automated `changeset version` bumps.
|
|
183
|
+
|
|
184
|
+
- per-package OIDC Trusted Publisher entries still need to be added
|
|
185
|
+
once on npmjs.com (one-time UI step per package).
|
|
186
|
+
- the install smoke verifies the registry tarball surface: bin shim,
|
|
187
|
+
package layout, postinstall, and registry metadata. `peaks
|
|
188
|
+
--version`/`--help` may fail at runtime until
|
|
189
|
+
`peaks-loop-crystallization` declares `zod` as a runtime
|
|
190
|
+
dependency (a separate source bug, out of scope for this repair).
|
|
191
|
+
|
|
192
|
+
## 4.0.0-beta.14 — 2026-07-16
|
|
193
|
+
|
|
194
|
+
### Status: RELEASED (D-019: copy-templates.mjs + package.json files[])
|
|
195
|
+
|
|
196
|
+
> **This release fixes D-019 (full end-to-end)**:
|
|
197
|
+
>
|
|
198
|
+
> 1. `scripts/copy-templates.mjs` now copies
|
|
199
|
+
> `src/services/skillhub/migrations/*.sql` into `dist/services/skillhub/migrations/`.
|
|
200
|
+
> 2. `package.json` `"files"` whitelist now includes `dist/**/*.sql`
|
|
201
|
+
> (previously the whitelist was `dist/**/*.js | .d.ts | .md` only,
|
|
202
|
+
> so the migrations were filtered out of the npm tarball even
|
|
203
|
+
> after being copied to `dist/`).
|
|
204
|
+
>
|
|
205
|
+
> Without this fix, the published `peaks-loop` tarball shipped without
|
|
206
|
+
> the SkillHub SQLite schema, breaking any downstream consumer's first
|
|
207
|
+
> `peaks skill sediment <verb>` with `no such table: bee_release`.
|
|
208
|
+
>
|
|
209
|
+
> **Verdict**: `pnpm build` copies 6 migrations; tarball includes them.
|
|
210
|
+
> In-process vitest tests were always green (they use tsx + source tree
|
|
211
|
+
> directly, not `dist/`), so no test count change. Combined with
|
|
212
|
+
> 4.0.0-beta.13's D-018 path fix, the published tarball is now
|
|
213
|
+
> correct end-to-end.
|
|
214
|
+
|
|
215
|
+
## 4.0.0-beta.13 — 2026-07-16
|
|
216
|
+
|
|
217
|
+
### Status: RELEASED (D-018: state.db path relocation)
|
|
218
|
+
|
|
219
|
+
> **This release fixes the SQLite `state.db` location** to match the
|
|
220
|
+
> original peaks-loop design contract: `PEAKS_HOME/.peaks/skills/state.db`
|
|
221
|
+
> (PEAKS_HOME defaults to `~/.peaks`). Previously, the code resolved
|
|
222
|
+
> `home` to `process.cwd()` when invoked from a project root, producing
|
|
223
|
+
> `<project>/.peaks/state.db` — wrong location for loop engineering
|
|
224
|
+
>
|
|
225
|
+
> - bee sediment data.
|
|
226
|
+
>
|
|
227
|
+
> **Fix**: `src/cli/commands/sediment-commands.ts:664-665` now uses
|
|
228
|
+
> `peaksHome()` from `src/services/sop/sop-paths.ts:29` (which honors
|
|
229
|
+
> `PEAKS_HOME` override for test isolation). The downstream
|
|
230
|
+
> `resolveStateDbPath({ home })` (in `src/services/sediment/pool-paths.ts:15`)
|
|
231
|
+
> already correctly returned `{home}/.peaks/skills/state.db`; only the
|
|
232
|
+
> `home` resolution was broken.
|
|
233
|
+
>
|
|
234
|
+
> **Side bug found but out of scope**: `src/services/skillhub/migrations/*.sql`
|
|
235
|
+
> is not copied to `dist/` by `scripts/copy-templates.mjs`. This is a
|
|
236
|
+
> pre-existing build-config issue separate from D-018. Tracked as
|
|
237
|
+
> follow-up; tests still pass because the tests use vitest + tsx
|
|
238
|
+
> (which sees the source tree directly), but the published
|
|
239
|
+
> `peaks-loop@4.0.0-beta.13` will hit `no such table: bee_release` until
|
|
240
|
+
> a D-019 follow-up adds `.sql` to the copy-templates extensions.
|
|
241
|
+
>
|
|
242
|
+
> **Verdict**: 27/27 AC PASS (beta.12 verdict preserved; D-018 is
|
|
243
|
+
> architecture fix, no AC change). Old `<peaks-loop>/.peaks/state.db`
|
|
244
|
+
> discarded (beta phase, single user).
|
|
245
|
+
|
|
246
|
+
## 4.0.0-beta.12 — 2026-07-16
|
|
247
|
+
|
|
248
|
+
### Status: RELEASED (follow-up to `4.0.0-beta.11`; D-013 wrapper exit-code fix)
|
|
249
|
+
|
|
250
|
+
> \*\*This CHANGELOG entry documents the D-013 follow-up release.
|
|
251
|
+
> Same source tree as `4.0.0-beta.11`; pure fix for the wrapper
|
|
252
|
+
> exit-code bug that previously caused `peaks <unknown>` and
|
|
253
|
+
> `peaks <unknown> --help` to exit 0 with the help banner.
|
|
254
|
+
>
|
|
255
|
+
> **Verdict**: All 4 regression paths now exit 1 with a
|
|
256
|
+
> `COMMAND_NOT_FOUND` JSON envelope. ice-cola baseline 27/27 PASS
|
|
257
|
+
> (AC3.9/AC3.10 now functionally correct).
|
|
258
|
+
|
|
259
|
+
> \*\*This CHANGELOG entry documents the SHIPPED 4.0.0-beta.11.
|
|
260
|
+
> It is the post-implementation release of the 4.0.0-beta.10 contract
|
|
261
|
+
> documented at `docs/release/4.0.0-beta.10.md` (runbook filename
|
|
262
|
+
> preserved for cross-reference stability).
|
|
263
|
+
>
|
|
264
|
+
> The 3 slices (del-minimax-worker, hide-role-skills, on-demand-ecc)
|
|
265
|
+
> all landed PASS in this branch — see `peaks workflow verify-pipeline
|
|
266
|
+
--rid 2026-07-15-cli-surface-cleanup` and the Slice 1/2/3 sediment
|
|
267
|
+
> memories in `.peaks/memory/`.
|
|
268
|
+
>
|
|
269
|
+
> **Version bump rationale** (D-016): 4.0.0-beta.10 was the pre-impl
|
|
270
|
+
> contract name; 4.0.0-beta.11 is the actual release of that contract.
|
|
271
|
+
> One-line summary: **"CLI surface cleanup + on-demand ECC"**.
|
|
272
|
+
>
|
|
273
|
+
> **Verdict**: 10/12 AC PASS + 2 PASS-WITH-DEFERRED (D-013 wrapper
|
|
274
|
+
> exit-code bug, separate follow-up slice after publish).
|
|
275
|
+
> Ice-cola baseline gate: 27/27 AC functionally pass.
|
|
276
|
+
|
|
277
|
+
### Removed — `peaks minimax-worker` (Slice 1)
|
|
278
|
+
|
|
279
|
+
- **`peaks minimax-worker` CLI removed** — historical MiniMax
|
|
280
|
+
provider integration. `peaks minimax-worker --help` now exits
|
|
281
|
+
non-zero with `COMMAND_NOT_FOUND`.
|
|
282
|
+
- **`peaks worker minimax` CLI removed** — same module.
|
|
283
|
+
- **`peaks config provider minimax *` subtree removed** —
|
|
284
|
+
`peaks config provider minimax set --help` exits non-zero.
|
|
285
|
+
- **6 source files deleted**:
|
|
286
|
+
- `src/cli/commands/worker-commands.ts`
|
|
287
|
+
- `src/services/providers/minimax-provider-service.ts`
|
|
288
|
+
- `src/services/providers/minimax-worker-service.ts`
|
|
289
|
+
- `src/services/config/provider-service.ts` (entire file; 100% MiniMax)
|
|
290
|
+
- `tests/unit/minimax-worker-service.test.ts`
|
|
291
|
+
- `tests/unit/minimax-provider-service.test.ts`
|
|
292
|
+
- **~21 source files modified** (drop imports, drop function bodies,
|
|
293
|
+
drop registrations, replace `'minimax-2.7'` literal with
|
|
294
|
+
`'claude-opus-4-7'` in 5 files).
|
|
295
|
+
- **~8 test files modified** (drop MiniMax cases; replace literal in 3).
|
|
296
|
+
- **4 openspec files updated** (1-line wording fixes).
|
|
297
|
+
- **Net security improvement**: smaller secret-handling surface
|
|
298
|
+
(5 MiniMax functions removed).
|
|
299
|
+
|
|
300
|
+
### Changed — 10 role-skill CLI commands hidden (Slice 2)
|
|
301
|
+
|
|
302
|
+
- **10 top-level role-skill CLI commands** now hidden from `peaks --help`
|
|
303
|
+
via `Commander.hidden()`. Still invokable for internal
|
|
304
|
+
`peaks sub-agent dispatch --role <role>` paths. Final canonical
|
|
305
|
+
list (per QA grep audit):
|
|
306
|
+
- `peaks prd`
|
|
307
|
+
- `peaks qa`
|
|
308
|
+
- `peaks sc`
|
|
309
|
+
- `peaks audit`
|
|
310
|
+
- `peaks code-review`
|
|
311
|
+
- `peaks perf-audit`
|
|
312
|
+
- `peaks security-audit`
|
|
313
|
+
- `peaks upgrade`
|
|
314
|
+
- `peaks agent`
|
|
315
|
+
- `peaks code`
|
|
316
|
+
- **`peaks skill list`** now excludes skills with
|
|
317
|
+
`visibility: internal` frontmatter. Use `--include-internal` to opt in.
|
|
318
|
+
- **`peaks skill search`** accepts `--include-internal` flag.
|
|
319
|
+
- **8 SKILL.md files** updated to add/rename `visibility: internal`:
|
|
320
|
+
`peaks-prd`, `peaks-qa`, `peaks-rd`, `peaks-sc`, `peaks-ui`,
|
|
321
|
+
`peaks-txt`, `peaks-final-review`, `peaks-perf-audit`,
|
|
322
|
+
`peaks-security-audit`.
|
|
323
|
+
- **Integration test rewritten**:
|
|
324
|
+
`tests/integration/skill-search-cli.test.ts:72-79` now asserts
|
|
325
|
+
the new `visibility:` frontmatter field instead of legacy
|
|
326
|
+
`userInvocable`.
|
|
327
|
+
|
|
328
|
+
### Added — `peaks ecc install|status|ls|show` (Slice 3)
|
|
329
|
+
|
|
330
|
+
> **PIVOT vs initial design**: Originally Slice 3 was supposed to
|
|
331
|
+
> spawn `<cached>/ecc agent run <name> --json` as a subprocess.
|
|
332
|
+
> RD sub-agent triggered **Gate S3-0**: affaan-m/everything-claude-code
|
|
333
|
+
> has no `ecc` binary; its real structure is `agents/*.md` flat
|
|
334
|
+
>
|
|
335
|
+
> - SKILL.md descriptors. User chose Option B — drop the subprocess
|
|
336
|
+
> model entirely.
|
|
337
|
+
|
|
338
|
+
- **`peaks ecc install`** — downloads affaan-m/everything-claude-code
|
|
339
|
+
from GitHub releases to `~/.peaks/cache/ecc-<sha>/`. Selective
|
|
340
|
+
tarball extraction: ONLY `agents/` subtree (skip `rules/`,
|
|
341
|
+
`commands/`, `settings/`, `docs/`, `README.md`).
|
|
342
|
+
- **`peaks ecc status`** — reads cache manifest, reports version + sha
|
|
343
|
+
- agent count.
|
|
344
|
+
- **`peaks ecc ls`** — lists cached agents by parsing `agents/*.md`
|
|
345
|
+
frontmatter.
|
|
346
|
+
- **`peaks ecc show <name>`** — outputs the agent's SKILL.md body
|
|
347
|
+
to stdout. LLM-side consumers (Skill-first path) read this output
|
|
348
|
+
to apply the agent's instructions.
|
|
349
|
+
- **3 source files deleted** (with Slice 1):
|
|
350
|
+
- `src/cli/commands/agent-commands.ts` (the old `peaks agent run/list`)
|
|
351
|
+
- `src/services/agent/ecc-agent-service.ts` (the spawn orchestrator)
|
|
352
|
+
- `tests/unit/services/agent/ecc-agent-service.test.ts`
|
|
353
|
+
- **3 new source files**:
|
|
354
|
+
- `src/services/agent/ecc-cache-service.ts` — pure-IO cache module
|
|
355
|
+
(`downloadToCache`, `readCacheManifest`, `listCachedAgents`,
|
|
356
|
+
`readAgentSkill`, `cleanupStaleCache`)
|
|
357
|
+
- `src/cli/commands/ecc-commands.ts` — 4 subcommands
|
|
358
|
+
- `tests/unit/agent/ecc-cache-service.test.ts`
|
|
359
|
+
- **Dead-probes removed**:
|
|
360
|
+
- `npx ecc --version` probe (was: never worked; affaan-m/ECC not on npm)
|
|
361
|
+
- `npx ecc-agentshield --version` probe in
|
|
362
|
+
`src/services/audit/static-service.ts:104` (parallel fix)
|
|
363
|
+
- **7-day cache TTL** via `bootstrapLogger.applyRetention` sweep
|
|
364
|
+
(wired at `src/cli/program.ts:121`). NOT via
|
|
365
|
+
`peaks doctor --cleanup-stale` (which is bound to `dropStale()`
|
|
366
|
+
for the binding store).
|
|
367
|
+
|
|
368
|
+
### Removed — `peaks agent run` and `peaks agent list`
|
|
369
|
+
|
|
370
|
+
- **`peaks agent run <name>` exits non-zero with `COMMAND_NOT_FOUND`**.
|
|
371
|
+
- **`peaks agent list` exits non-zero with `COMMAND_NOT_FOUND`**.
|
|
372
|
+
- **No replacement CLI** — LLM-side consumers use
|
|
373
|
+
`peaks ecc show <name>` or read `<cache>/agents/<name>.md` directly.
|
|
374
|
+
|
|
375
|
+
### Net security / performance impact
|
|
376
|
+
|
|
377
|
+
- **Security**: 0 subprocess attack surface (was: 1 per call in beta.9);
|
|
378
|
+
smaller secret-handling surface (5 MiniMax functions removed).
|
|
379
|
+
- **Performance**: cache-dir probe is pure read (<15ms vs ~500ms
|
|
380
|
+
for the npm-registry probe in beta.9); selective tarball extraction
|
|
381
|
+
saves ~95% disk footprint.
|
|
382
|
+
|
|
383
|
+
### Pre-implementation gate
|
|
384
|
+
|
|
385
|
+
`peaks workflow verify-pipeline --rid 2026-07-15-cli-surface-cleanup`
|
|
386
|
+
returns `ok: true, complete: true, violations: []` (9/9 gates PASS).
|
|
387
|
+
This CHANGELOG entry is the contract; the actual implementation
|
|
388
|
+
follows the runbook in `docs/release/4.0.0-beta.10.md`.
|
|
389
|
+
|
|
390
|
+
### Acceptance criteria
|
|
391
|
+
|
|
392
|
+
27 ACs total: 7 (Slice 1) + 8 (Slice 2) + 11 (Slice 3 redesign + 1).
|
|
393
|
+
Full list in `docs/release/4.0.0-beta.10.md` §Acceptance criteria.
|
|
394
|
+
|
|
395
|
+
---
|
|
4
396
|
|
|
5
397
|
## 4.0.0-beta.9 — 2026-07-15
|
|
6
398
|
|
|
@@ -66,7 +458,7 @@ all present after a fresh workspace init.
|
|
|
66
458
|
audit/business templates (default: skip if present).
|
|
67
459
|
- **5-template boot** — every `peaks workspace init` materialises
|
|
68
460
|
`.peaks/project-scan/{project-scan.md, business-knowledge.md,
|
|
69
|
-
|
|
461
|
+
security-template.md, perf-template.md, audit-output-schema.md}`.
|
|
70
462
|
The 4 audit/business templates are bundled at
|
|
71
463
|
`src/services/workspace/templates/project-scan/*.md` and copied
|
|
72
464
|
verbatim by `scripts/copy-templates.mjs` (post-`tsc` step; tsc
|
|
@@ -178,15 +570,15 @@ exposed two follow-on bugs that the unit suite missed:
|
|
|
178
570
|
|
|
179
571
|
### Sediment (Step 11) — 7 lessons in `.peaks/memory/`
|
|
180
572
|
|
|
181
|
-
| File
|
|
182
|
-
|
|
183
|
-
| `z-code-peaks-loop-9-ide-adapter-vendor-neutrality-adapter.md`
|
|
184
|
-
| `peaks-loop-install-model-getstrongestmodelid-fallback.md`
|
|
185
|
-
| `desktop-application-ide-adapter-z-code-cli.md`
|
|
186
|
-
| `peaks-code-runbook-4-0-0-beta-6-skill-md-cli-d-001-d-002-d-003-d-010.md` | 4 SKILL.md / CLI drift points
|
|
187
|
-
| `2026-07-09-zcode-adapter-overview.md`
|
|
188
|
-
| `peaks-ide-runtime-detect-zcode-only.md`
|
|
189
|
-
| `ide-adapter-detectcurrentmodel-optional-interface-pattern.md`
|
|
573
|
+
| File | Topic |
|
|
574
|
+
| ------------------------------------------------------------------------- | -------------------------------------------------------- |
|
|
575
|
+
| `z-code-peaks-loop-9-ide-adapter-vendor-neutrality-adapter.md` | z-code 9th IDE + vendor-neutrality adapter pattern |
|
|
576
|
+
| `peaks-loop-install-model-getstrongestmodelid-fallback.md` | install no longer hardcodes default model |
|
|
577
|
+
| `desktop-application-ide-adapter-z-code-cli.md` | desktop-app IDE adapter field-degradation decision |
|
|
578
|
+
| `peaks-code-runbook-4-0-0-beta-6-skill-md-cli-d-001-d-002-d-003-d-010.md` | 4 SKILL.md / CLI drift points |
|
|
579
|
+
| `2026-07-09-zcode-adapter-overview.md` | RID 003 overall summary (project record) |
|
|
580
|
+
| `peaks-ide-runtime-detect-zcode-only.md` | `peaks ide model --current` z-code 4-tier priority chain |
|
|
581
|
+
| `ide-adapter-detectcurrentmodel-optional-interface-pattern.md` | optional interface field extension pattern |
|
|
190
582
|
|
|
191
583
|
### Known follow-ups (S3-cleanup backlog)
|
|
192
584
|
|
|
@@ -203,7 +595,7 @@ None. All 8 pre-existing adapters continue to load without changes. CLI subcomma
|
|
|
203
595
|
|
|
204
596
|
### Added — peaks-solo dispatcher (分诊员)
|
|
205
597
|
|
|
206
|
-
- **`peaks-solo` skill** — `skills/peaks-solo/SKILL.md` + 3 references (triage / fallback / sediment). Natural-language front door for the Peaks-Loop skill family. Use when the user describes a task in NL and does not know which peaks
|
|
598
|
+
- **`peaks-solo` skill** — `skills/peaks-solo/SKILL.md` + 3 references (triage / fallback / sediment). Natural-language front door for the Peaks-Loop skill family. Use when the user describes a task in NL and does not know which peaks-\* skill fits. 0 breaking change: 3.x / 4.x `/peaks-code` / `/peaks-content` / `/peaks-doctor` etc. continue to work.
|
|
207
599
|
- **`peaks skill search` CLI** — `src/services/skill/skill-search-service.ts` + `src/cli/commands/skill-search-commands.ts`. Query / tag / domain filters; substring match; structured JSON output. Used by `peaks-solo` to find the right leaf skill. Available as a top-level primitive (not dispatcher-specific).
|
|
208
600
|
- **Sub-skills unchanged** — `peaks-code / peaks-content / peaks-doctor / peaks-issue-fix-orchestrator / peaks-sop / etc.` are NOT modified. peaks-solo sits alongside, not on top.
|
|
209
601
|
|
|
@@ -244,9 +636,9 @@ Loop Engineering crystallization is now the product surface. The 4.0.0-beta.3 li
|
|
|
244
636
|
|
|
245
637
|
- **`.peaks/standards/loop-engineering-guidelines.md`** — the single source of truth for the 10 red lines RL-0..RL-9, each in the four-section karpathy form (Failure modes / Rewrite / Self-check / Out-of-scope). Co-equal karpathy × darwin layers (RL-0).
|
|
246
638
|
- **`peaks standards lint --category loop-engineering`** — `src/services/standards/loop-engineering-lint.ts`. Parses the guideline file and asserts every red line has all four sections, fails closed otherwise.
|
|
247
|
-
- **`peaks skill lint --category loop-engineering-readiness --path <skill-dir>`** — `src/services/standards/loop-engineering-readiness-lint.ts` + `src/cli/commands/skill-loop-engineering-readiness-commands.ts`. Asserts a peaks
|
|
639
|
+
- **`peaks skill lint --category loop-engineering-readiness --path <skill-dir>`** — `src/services/standards/loop-engineering-readiness-lint.ts` + `src/cli/commands/skill-loop-engineering-readiness-commands.ts`. Asserts a peaks-\* SKILL.md (a) references `.peaks/standards/loop-engineering-guidelines.md`, (b) does not introduce a CLI verb the user is meant to type, (c) does not introduce a JSON / manifest hand-authoring surface. Alias verb: `peaks skill ready --category loop-engineering-readiness --path <skill-dir>`.
|
|
248
640
|
- **Unit guard** — `tests/unit/standards/loop-engineering-guidelines.test.ts` enforces the four-section shape for every red line in the file.
|
|
249
|
-
- **peaks-code domain boundary (RL-8)** — `skills/peaks-code/SKILL.md` self-declares as the code-domain long-task loop engineering orchestrator and is NOT a general-purpose orchestrator. Cross-domain peaks
|
|
641
|
+
- **peaks-code domain boundary (RL-8)** — `skills/peaks-code/SKILL.md` self-declares as the code-domain long-task loop engineering orchestrator and is NOT a general-purpose orchestrator. Cross-domain peaks-\* skills (peaks-content, peaks-issue-fix-orchestrator) import the shared guideline file and pass the readiness lint.
|
|
250
642
|
|
|
251
643
|
### Added — Bundle share + desktop extension surface (§7A, AC-24 / AC-25 / AC-26)
|
|
252
644
|
|
|
@@ -260,6 +652,7 @@ Loop Engineering crystallization is now the product surface. The 4.0.0-beta.3 li
|
|
|
260
652
|
### Added — SkillHub expansion (5 new tables / non-breaking)
|
|
261
653
|
|
|
262
654
|
The 6+ relation table layout is preserved. 5 new tables added under `.peaks/_runtime/<sessionId>/`:
|
|
655
|
+
|
|
263
656
|
- `loop_release` (002)
|
|
264
657
|
- `loop_bee_relation` (003)
|
|
265
658
|
- loop↔bee share / desktop extension columns (004)
|
|
@@ -299,13 +692,16 @@ Migration is non-breaking: every new column has a DEFAULT and the new tables sit
|
|
|
299
692
|
## 4.0.0-beta.2 — 2026-07-07
|
|
300
693
|
|
|
301
694
|
### Renamed
|
|
695
|
+
|
|
302
696
|
- **`peaks-solo` → `peaks-code`** — the long-running code-domain orchestrator skill (PRD/RD/QA/UI/SC/TXT pipeline) has been renamed to communicate its scope more accurately. The on-disk directory `~/.peaks/skills/.system/bees/peaks-code/` is preserved as a stable install location; only the manifest `id` and `displayName` change (`peaks-code` / `Peaks Code`). All four sibling skills (`peaks-solo-resume` → `peaks-resume`, `peaks-solo-status` → `peaks-status`, `peaks-solo-test` → `peaks-test`) are now top-level primitives rather than child skills of `peaks-solo`. Migration: `peaks session migrate-skill-name --from peaks-solo --to peaks-code --apply`.
|
|
303
697
|
|
|
304
698
|
### Changed (Breaking)
|
|
699
|
+
|
|
305
700
|
- **`peaks skill presence:set peaks-solo` no longer recognized** — the canonical skill name is now `peaks-code`. Existing `.peaks/_runtime/*/active-skill.json` files carrying `skill: "peaks-solo"` are migrated by `peaks session migrate-skill-name`. Manual override: edit the file and replace `"skill": "peaks-solo"` with `"skill": "peaks-code"`.
|
|
306
701
|
- **CLI surface unchanged** — `peaks code`, `peaks code --fast`, and the entire `peaks-code` skill runbook continue to function; only the skill-identification field (`id`, `displayName`, presence `skill` value) changes. The runbook name `peaks code` is the user-facing verb and remains as-is.
|
|
307
702
|
|
|
308
703
|
### Fixed (post-rename polish)
|
|
704
|
+
|
|
309
705
|
- **Rule name normalization** — `Code Code-Change Red Line` → `Code Commit Ban Red Line` (8 occurrences across `src/services/audit/enforcers/code-ban.ts`, `src/cli/commands/hook-handle.ts`, and the audit tests). Aligns with `red-line-catalog.ts` entry `rl-code-ban-001` / `Code Commit Ban`.
|
|
310
706
|
- **Wire-format error code rename** — `SOLO_MODE_REQUIRES_SOLO_WORKFLOW` → `CODE_MODE_REQUIRES_CODE_WORKFLOW` and `UNSUPPORTED_SOLO_MODE` → `UNSUPPORTED_CODE_MODE` in `src/cli/commands/workflow-commands.ts` (4 test sites updated).
|
|
311
707
|
- **Test local consts** — `soloResult/soloOutput` → `codeResult/codeOutput` in `tests/unit/cli-program.workflow.test.ts`; `SOLO_PATH/soloAbsPath` → `CODE_PATH/codeAbsPath` in `tests/unit/code/skills-subagent-scope-dir.test.ts`; `SOLO_REF/SOLO_FANOUT_REF` → `CODE_REF/CODE_FANOUT_REF` in `tests/unit/dispatch/dispatch-fanout-mandatory.test.ts`.
|
|
@@ -316,11 +712,13 @@ Migration is non-breaking: every new column has a DEFAULT and the new tables sit
|
|
|
316
712
|
- **Video demo copy** — `examples/video-demo/src/copy.ts` `skillWas: 'peaks-solo'` → `skillWas: 'peaks-code'` (legacy label, both locales).
|
|
317
713
|
|
|
318
714
|
### Added
|
|
715
|
+
|
|
319
716
|
- **Manifest id field** — `.peaks/skills/.system/bees/peaks-code/manifest.json` now carries `{ "id": "peaks-code", "displayName": "Peaks Code" }`. The `migrate-skill-name` service explicitly skips this file (test: `session-migrate-skill-name.test.ts:69` "跳过 .peaks/skills/.system/bees/peaks-code/manifest.json") so the canonical id is only ever edited by hand or by an explicit `peaks skill sediment refine-bee` flow, never by bulk migration.
|
|
320
717
|
- **Spec §4.1.1 rewrite** — `docs/superpowers/specs/2026-07-04-peaks-maker-dynamic-skill-sediment-design.md` §4.1.1 has been rewritten from "peaks-code as preserved alias" to "peaks-code as the system-stable code-domain bee (renamed from peaks-code)". The plan's spec-coverage table now references the renamed heading.
|
|
321
718
|
- **Migration helper** — `peaks session migrate-skill-name --from <old> --to <new> [--apply]` is the supported path for renaming skill references in `.peaks/_runtime/`. Idempotent; skip-list includes `.peaks/memory/**` and `.peaks/skills/.system/bees/peaks-code/manifest.json`.
|
|
322
719
|
|
|
323
720
|
### Verification
|
|
721
|
+
|
|
324
722
|
- `tsc --noEmit` zero errors
|
|
325
723
|
- Full `vitest run` exit 0 (all 30 touched test files / 265 directly-tested assertions pass)
|
|
326
724
|
- `silent-warning-detector` OK on 481 files
|
|
@@ -439,10 +837,11 @@ Validated on `C:/Users/smallMark/Desktop/peaksclaw/ice-cola` (consumer project).
|
|
|
439
837
|
## [3.0.2] — 2026-07-02 — change-id shim retirement (v2.19.0) + Understand Anything hybrid context (3.0.2)
|
|
440
838
|
|
|
441
839
|
**PATCH bump from 3.0.1**. Two independent slices bundled into one release:
|
|
840
|
+
|
|
442
841
|
- **v2.19.0 change-id shim retirement** — full removal of the peaks-loop change-id axis (filesystem axis, code shim, envelope JSON slug, CLI flags). The change-id was a no-op post-v2.17.0 hard-kill; this slice retires the v2.17.0 shim half-life. OpenSpec's independent `openspec/changes/<change-id>/` vocabulary (L4) is preserved untouched.
|
|
443
842
|
- **3.0.2 Understand Anything hybrid context** — new `peaks understand context` subcommand that encapsulates the UA-first / codegraph-fallback / hybrid-union routing decision in the service layer (per the peaks-loop "skill-first / CLI-auxiliary" architecture). Consumers no longer pick one or the other at the LLM level.
|
|
444
843
|
|
|
445
|
-
The v2.19.0 work shipped as code commits (`f91d71c`, `5186d3d`, `b598612`, `ced835e`, `7ee9d8f`, plus follow-up tests) but was never formally released. v2.19.0 is therefore
|
|
844
|
+
The v2.19.0 work shipped as code commits (`f91d71c`, `5186d3d`, `b598612`, `ced835e`, `7ee9d8f`, plus follow-up tests) but was never formally released. v2.19.0 is therefore _not_ a separate release line — its changes are rolled forward into 3.0.2. Future releases resume numeric sequence from 3.0.3.
|
|
446
845
|
|
|
447
846
|
### Removed — change-id shim (cleanup post v2.17.0 hard-kill)
|
|
448
847
|
|
|
@@ -465,7 +864,7 @@ The v2.19.0 work shipped as code commits (`f91d71c`, `5186d3d`, `b598612`, `ced8
|
|
|
465
864
|
- 12 JSDoc references to the deleted `src/shared/change-id.ts` file scrubbed across `src/services/session/session-binding-bridge.ts`, `src/services/session/session-manager.ts`, `src/shared/path-safety.ts`, `tests/unit/session-manager.test.ts`, `tests/vitest.setup.ts`. The 3 pre-slim `tests/fixtures/skills/pre-slim/*.SKILL.md` fixtures preserve the historical reference per the FROZEN EVIDENCE rule.
|
|
466
865
|
- 2 weakened `tests/unit/rd/repair-cycle-2-cli-wiring.test.ts` cases restored with real assertions: the test now bootstraps a real session via `peaks workspace init` then drives `peaks swarm plan` end-to-end, asserting `standardsErrorCode`, `standardsDiagnostic`, and `process.exitCode` (no `expect(true).toBe(true)`, no `.skip`).
|
|
467
866
|
|
|
468
|
-
### Round 3 — change-id彻底根治
|
|
867
|
+
### Round 3 — change-id 彻底根治
|
|
469
868
|
|
|
470
869
|
- All 275 internal `changeId` field references in `src/` renamed to `sessionId` across 35 source files (cli/commands, services/workflow, services/tech, services/workspace, services/sc, services/rd, services/prd, services/audit, services/fixture, services/slice, services/mut, services/providers, services/artifacts, services/openspec-adjacent callers). The 65 remaining `changeId` hits are EXCLUSIVELY in `src/cli/commands/openspec-commands.ts` and `src/services/openspec/*.ts` — L4 OpenSpec vocabulary (positional `<change-id>` arg, `openspec/changes/<change-id>/` dir name, OpenSpec spec/proposal markdown tokens). The rename preserves L4 per PRD §Non-Goals.
|
|
471
870
|
- `WorkspaceInitOptions.changeId?: string` field REMOVED entirely (was a no-op post-v2.17.0; the slice deletes the binding-file legacy and the inline lstatSync guard now scopes the v2.8.3 hard-ban to date-stamped top-level siblings at `.peaks/<YYYY-MM-DD-*>/` only).
|
|
@@ -481,6 +880,7 @@ The v2.19.0 work shipped as code commits (`f91d71c`, `5186d3d`, `b598612`, `ced8
|
|
|
481
880
|
- `pnpm build` regenerated `dist/` to drop the dead `migrate-change-scope` JS. AC-15 (`node bin/peaks.js workspace migrate-change-scope`) now reports `error: unknown command 'migrate-change-scope'`.
|
|
482
881
|
|
|
483
882
|
### Round 4 — change-id full root-out (fix 55 test regressions)
|
|
883
|
+
|
|
484
884
|
- Fixed 55 unit tests failing across 15 files (regressions from round-3 rename script + incomplete code paths).
|
|
485
885
|
- `peaks request *` dry-run mode no longer creates `.peaks/_runtime/<sid>/` dir eagerly (test updated to assert the canonical single-axis scope dir at apply-time only).
|
|
486
886
|
- Observability event hook restored on `peaks request transition` (3 tests): root cause was `readSummary` returning the scope fragment (`_runtime/<sid>`) as the bare session id, so `emitObservabilityEvent` landed at `.peaks/_runtime/_runtime/<sid>/metrics/slices.jsonl`. Fix strips the `_runtime[\\/]` prefix when storing the summary's sessionId.
|
|
@@ -510,99 +910,6 @@ The v2.19.0 work shipped as code commits (`f91d71c`, `5186d3d`, `b598612`, `ced8
|
|
|
510
910
|
- Existing RD/QA artifacts in `.peaks/_runtime/<sid>/<role>/` remain readable; the planner no longer requires a change-id, and the change-id (if any) is embedded only as a filename slug.
|
|
511
911
|
- The 2.8.3 hard-ban on `.peaks/_runtime/<YYYY-MM-DD-*>/` sibling directories is still enforced via the rewritten guard test and the inline `lstatSync` in `initWorkspace`.
|
|
512
912
|
|
|
513
|
-
## [3.0.2] — 2026-07-02 — change-id shim retirement (v2.19.0) + Understand Anything hybrid context (3.0.2)
|
|
514
|
-
|
|
515
|
-
**PATCH bump from 3.0.1**. Two independent slices bundled into one release:
|
|
516
|
-
- **v2.19.0 change-id shim retirement** — full removal of the peaks-loop change-id axis (filesystem axis, code shim, envelope JSON slug, CLI flags). The change-id was a no-op post-v2.17.0 hard-kill; this slice retires the v2.17.0 shim half-life. OpenSpec's independent `openspec/changes/<change-id>/` vocabulary (L4) is preserved untouched.
|
|
517
|
-
- **3.0.2 Understand Anything hybrid context** — new `peaks understand context` subcommand that encapsulates the UA-first / codegraph-fallback / hybrid-union routing decision in the service layer (per the peaks-loop "skill-first / CLI-auxiliary" architecture). Consumers no longer pick one or the other at the LLM level.
|
|
518
|
-
|
|
519
|
-
The v2.19.0 work shipped as code commits (`f91d71c`, `5186d3d`, `b598612`, `ced835e`, `7ee9d8f`, plus follow-up tests) but was never formally released. v2.19.0 is therefore *not* a separate release line — its changes are rolled forward into 3.0.2. Future releases resume numeric sequence from 3.0.3.
|
|
520
|
-
|
|
521
|
-
### Added — `peaks understand context` (3.0.2 user-facing feature)
|
|
522
|
-
|
|
523
|
-
The Understand Anything (UA) Claude Code plugin and `@colbymchenry/codegraph` are both complementary project-analysis tools. UA provides a high-level knowledge graph (tours, layers, expert prompts); codegraph provides low-level affected-file analysis. Until 3.0.2, peaks-loop consumers had to choose one or the other at the LLM level — there was no service-layer enforcement of either.
|
|
524
|
-
|
|
525
|
-
This slice adds a single `peaks understand context` subcommand that encapsulates the routing decision in the service layer (per the peaks-loop "skill-first / CLI-auxiliary" architecture — see `peaks-code` SKILL.md). The envelope carries a `source` tag so downstream consumers can audit which evidence contributed to the context.
|
|
526
|
-
|
|
527
|
-
**Source routing** (deterministic, decided in `buildUnderstandContext`):
|
|
528
|
-
- `ua-only` — UA knowledge graph present, no codegraph
|
|
529
|
-
- `ua-missing-fallback-codegraph` — UA absent, codegraph produced evidence
|
|
530
|
-
- `ua-and-codegraph-hybrid` — both present, both contribute (parallel `Promise.all`)
|
|
531
|
-
- `both-missing` — neither produced evidence, exit code 2
|
|
532
|
-
|
|
533
|
-
**Added files (5):**
|
|
534
|
-
- `src/services/understand/understand-hybrid-service.ts` (133L, new): `buildUnderstandContext({projectRoot, files?, sampleSize?, artifactDir?, codegraphRunner?})` uses `Promise.all` to run UA scan and codegraph affected in parallel; total wall-clock = `max(uaMs, codegraphMs)`, not sum. Failures are caught into `warnings[]` (best-effort); the main envelope is always returned so consumers can audit missing evidence.
|
|
535
|
-
- `src/services/understand/hybrid-types.ts` (39L, new): `UnderstandContextResult` envelope + 4-value source enum + `CodegraphContextBlock`.
|
|
536
|
-
- `src/cli/commands/understand-commands.ts` (208L, +51L net): new `peaks understand context` subcommand at base path `admin/audit-logs` (the only 3rd CLI surface in the understand module family). The subcommand accepts `--project --files --sample --artifact-dir` and emits the envelope as JSON or human-readable summary.
|
|
537
|
-
- `tests/unit/understand-hybrid-service.test.ts` (110L, 4 cases): `ua-only` / `fallback` / `hybrid` / `both-missing`.
|
|
538
|
-
- `tests/integration/understand-hybrid-cli.test.ts` (85L, 3 cases): end-to-end CLI both-missing / ua-only / envelope-shape-stability.
|
|
539
|
-
|
|
540
|
-
**Test evidence:** 7/7 vitest (4 unit + 3 integration), `tsc --noEmit` clean.
|
|
541
|
-
|
|
542
|
-
The peak-loop skill-external-invocation audit pattern (capability discovery + references only + do-not-execute + Peaks authoritative) is preserved: codegraph is consumed via the existing `executeCodegraphInvocation` (no upstream installer calls); UA installation is a text `INSTALL_HINT` only.
|
|
543
|
-
|
|
544
|
-
### Removed — change-id shim (cleanup post v2.17.0 hard-kill, rolled up from v2.19.0)
|
|
545
|
-
|
|
546
|
-
**PATCH bump from 2.18.3**. Resolves the user-reported "新项目第一次使用 peaks-code 时初始化完不按流程走、开发效果差、再开 session 后才正常" defect. Two surgical fixes to the first-run Code gates (3 source files, 1 new test file, 2 test-regression updates; no schema change, no new dependencies, no public API change).
|
|
547
|
-
|
|
548
|
-
### Bugfix — `step-0.55-1x-upgrade` always pauses, even in `full-auto` (P0)
|
|
549
|
-
|
|
550
|
-
The 1.x → 2.0 upgrade is an irreversible external side effect (rewrites `~/.peaks/config.json` + the on-disk cache schema). Pre-fix, `peaks code should-pause --step step-0.55-1x-upgrade --mode full-auto` returned `shouldPause: false` because the step was declared in `GATED_STEPS` but missing from the `HARD_PAUSE_STEPS` `Set` that already covered `step-0.5-openspec-opt-in` and `step-0.7-resume-detection`. In `full-auto` mode, the `shouldAutoProceed` branch silently auto-proceeded the upgrade without user consent. The result: 1.x → 2.0 downgrade (or stale 1.x standards/config residue) on the very first Code run of a fresh project. Post-fix, the step pauses with `gateKind: 'mode-selection-itself'` and the LLM-side caller presents an `AskUserQuestion` to the user.
|
|
551
|
-
|
|
552
|
-
- **Modified (2):** `src/services/code/mode-gate.ts` (added 1 entry to `HARD_PAUSE_STEPS`), `src/services/code/user-touchpoint-classifier.ts` (reclassified the row from `tech/business-only` with `fullAutoCanProceed: true` to `commit-floor/always` with `fullAutoCanProceed: false`).
|
|
553
|
-
- **User-observed symptom (now fixed):** "首次启动后开发效果差" — caused by 1.x standards/config residue silently surviving `full-auto` and contaminating subsequent RD/QA artifact contracts.
|
|
554
|
-
|
|
555
|
-
### Bugfix — `--mode` is optional on `peaks code should-pause` (P1, Step 1 chicken-and-egg)
|
|
556
|
-
|
|
557
|
-
`peaks code should-pause --step step-1-mode-select` (no `--mode` flag) failed pre-fix with `error: required option --mode <mode> not specified`. Step 1's SEMANTIC is "ask the user what mode to use" — requiring `--mode` to ask mode is a chicken-and-egg. Post-fix, `--mode` is `.option()` (not `.requiredOption()`); the action handler resolves `const mode = opts.mode ?? 'full-auto'` once at the top. All 5 downstream `opts.mode` references inside the same action body now use the local `mode` const. Existing `--mode <x>` callers are unaffected (backward-compatible). The service-layer `shouldPauseAtGate` still requires a resolved mode — defaulting is at the CLI boundary, which is the correct layer for ergonomics.
|
|
558
|
-
|
|
559
|
-
- **Modified (1):** `src/cli/commands/code-commands.ts` (option() + `mode` const + 5 reference rewrites inside the same action handler).
|
|
560
|
-
- **User-observed symptom (now fixed):** "再开 session 后才正常" — the first session's failed Step 1 caused the LLM-side caller to fall back to a sticky default mode; the second session's retry landed in the "right" mode by accident.
|
|
561
|
-
|
|
562
|
-
### Test surface
|
|
563
|
-
|
|
564
|
-
- **Created (1):** `tests/unit/services/code/first-run-step-gates.test.ts` — 20 vitest cases (4 modes × `step-0.55-1x-upgrade` pause guard; default-mode vs explicit-mode Step 1; AC-3 backward-compat byte-equality; 8 regression guards on the other 2 hard-pause steps; cross-check that non-hard-pause steps still auto-proceed).
|
|
565
|
-
- **Modified (2, regression-data extension):** `tests/unit/services/code/mode-gate.test.ts` (added `step-0.55-1x-upgrade` to the local `HARD_PAUSE_STEP_SET` test fixture), `tests/unit/services/code/stale-presence-detection.test.ts` (added the new step to the case-#5 non-Step-1 filter — these existing tests encoded the BUG behavior, so leaving them stale would have caused a false-positive green).
|
|
566
|
-
- **Updated (1):** `package.json` + `src/shared/version.ts` (2.18.3 → 2.18.4).
|
|
567
|
-
|
|
568
|
-
### Why this is the simplest fix
|
|
569
|
-
|
|
570
|
-
- 1-line addition to `HARD_PAUSE_STEPS` + 5-line row replacement in the classifier + 5-line command-arg change with 5 mechanical reference rewrites = 3 source edits. No new abstractions, no new env vars, no new schemas, no CLI surface change beyond the `--mode` defaulting.
|
|
571
|
-
- 800-line file cap respected: largest modified file is `code-commands.ts` (well below the 800 cap).
|
|
572
|
-
- Karpathy #3 surgical: 6 files touched, all justified (3 source + 1 new test + 2 test-regression updates because the existing tests encoded the BUG behavior).
|
|
573
|
-
|
|
574
|
-
### Verification (QA cycle 1, verdict pass)
|
|
575
|
-
|
|
576
|
-
- AC-1: `peaks code should-pause --step step-0.55-1x-upgrade --mode full-auto` → `ok: true, shouldPause: true, gateKind: "mode-selection-itself"` ✅
|
|
577
|
-
- AC-2: `peaks code should-pause --step step-1-mode-select` (no `--mode`) → `ok: true, shouldPause: true` (no "required option" error) ✅
|
|
578
|
-
- AC-3: `peaks code should-pause --step step-1-mode-select --mode full-auto` → byte-identical to AC-2 ✅
|
|
579
|
-
- Cross-mode 4×2 matrix (full-auto / assisted / strict / swarm × step-0.55 / step-1): 8/8 pause ✅
|
|
580
|
-
- `peaks-code` first-run sequence (skill presence:check-stale + upgrade --detect-1x + 4 should-pause steps): 6/6 clean ✅
|
|
581
|
-
- vitest 527/527 passed (27 files, 0 failed, 22.61s wallclock)
|
|
582
|
-
- 5-way fanout audit: code-reviewer PASS / karpathy-reviewer PASS (4 guidelines) / security-reviewer PASS / perf-baseline-reviewer PASS / qa-test-cases-writer PASS (21 TCs)
|
|
583
|
-
- QA verdict: `pass` (`verdict-2026-06-29-fix-first-run-step-gates.md`)
|
|
584
|
-
|
|
585
|
-
### Files
|
|
586
|
-
|
|
587
|
-
- 3 source modifications
|
|
588
|
-
- 1 new test file
|
|
589
|
-
- 2 test-regression updates
|
|
590
|
-
- 1 version bump (this release)
|
|
591
|
-
|
|
592
|
-
### Dispatch / artifacts
|
|
593
|
-
|
|
594
|
-
- Request id: `2026-06-29-fix-first-run-step-gates`
|
|
595
|
-
- RD artifact: `.peaks/_runtime/2026-06-29-session-9cac8e/rd/requests/001-2026-06-29-fix-first-run-step-gates.md`
|
|
596
|
-
- Bug analysis: `.peaks/_runtime/2026-06-29-session-9cac8e/rd/bug-analysis.md`
|
|
597
|
-
- Code review: `.peaks/_runtime/2026-06-29-session-9cac8e/rd/code-review.md`
|
|
598
|
-
- Karpathy review: `.peaks/_runtime/2026-06-29-session-9cac8e/rd/karpathy-review.md`
|
|
599
|
-
- Security audit: `.peaks/_runtime/2026-06-29-session-9cac8e/audit/security.md`
|
|
600
|
-
- Perf audit: `.peaks/_runtime/2026-06-29-session-9cac8e/audit/perf.md`
|
|
601
|
-
- QA test plan: `.peaks/_runtime/2026-06-29-session-9cac8e/qa/test-cases/2026-06-29-fix-first-run-step-gates.md`
|
|
602
|
-
- QA verdict: `.peaks/_runtime/2026-06-29-session-9cac8e/qa/verdict-2026-06-29-fix-first-run-step-gates.md`
|
|
603
|
-
|
|
604
|
-
---
|
|
605
|
-
|
|
606
913
|
## [2.18.2] — 2026-06-29 — `peaks doctor --rebuild-binding` + `peaks binding status` CLI (2 follow-up enhancements)
|
|
607
914
|
|
|
608
915
|
> **⚠️ Non-strict-SemVer.** This PATCH bump (2.18.1 → 2.18.2) lands 2 user-facing CLI additions under a PATCH version per the user convention: `peaks doctor --rebuild-binding` (new flag) and `peaks binding status` (new command). Strict SemVer would have called for a MINOR bump. The convention is documented in `CLAUDE.md` and matches the v2.18.1 PATCH precedent.
|
|
@@ -677,12 +984,12 @@ The 1.x → 2.0 upgrade is an irreversible external side effect (rewrites `~/.pe
|
|
|
677
984
|
|
|
678
985
|
The split methodology follows the v2.18.0 `session-binding-bridge.ts` pattern: identify a natural seam (state/helpers vs business logic, types vs impl, etc.), extract the chosen section into a new sibling file, and re-export the moved symbols from the original module so external imports are unchanged. Internal references are routed through a local `import { ... }` so the body of the original module continues to compile and behave identically.
|
|
679
986
|
|
|
680
|
-
| #
|
|
681
|
-
|
|
682
|
-
| 1
|
|
683
|
-
| 2
|
|
684
|
-
| 3
|
|
685
|
-
| 4
|
|
987
|
+
| # | File | Before | After (orig + sibling) | New sibling | Seam |
|
|
988
|
+
| --- | ------------------------------------------------------ | -----: | ---------------------: | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
989
|
+
| 1 | `src/services/artifacts/request-artifact-service.ts` | 783 | 649 + 153 | `request-artifact-state-helpers.ts` | `RequestArtifactState` type, `ALLOWED_STATES_PER_ROLE`, `allowedStatesForRole`, 4 transition error classes, `updateStatusBlock` frontmatter mutator |
|
|
990
|
+
| 2 | `src/services/slice/slice-decompose-service.ts` | 775 | 632 + 178 | `slice-decompose-runners.ts` | 3 default runner factories (`defaultCodegraphRunner`, `defaultUnderstandRunner`, `defaultImportEdgeRunner`) + `runCodegraph` shell-out helper |
|
|
991
|
+
| 3 | `src/services/workflow/workflow-autonomous-service.ts` | 774 | 465 + 337 | `workflow-autonomous-resume-helpers.ts` | Resume validation pipeline (`getResumeRequiredArtifacts`, `readResumeArtifact`, `stripChangeScopePrefix`, JSON / frontmatter parsers, `getResumeArtifactsStatus`, `createResumePlan`) + `MAX_RESUME_ARTIFACT_BYTES` const |
|
|
992
|
+
| 4 | `src/services/workspace/workspace-service.ts` | 742 | 550 + 217 | `workspace-claude-settings-materializer.ts` | Consumer `.claude/settings.local.json` materialization (`materializeClaudeSettingsLocal`, `writeOfflineTemplateCopy`, `upsertPeaksGitignoreSnippet`) + `PEAKS_GITIGNORE_*` constants |
|
|
686
993
|
|
|
687
994
|
The original 4 files land at 465-649 LOC (well below the 800 cap; target range 600-650). The 4 new sibling files are 153-337 LOC. Total LOC across the 8 files is unchanged (3074) — this is a structural refactor only, not a deletion or compression.
|
|
688
995
|
|
|
@@ -753,12 +1060,12 @@ Each original file gets a sibling `import { ... } from './X-helpers.js'` + `expo
|
|
|
753
1060
|
|
|
754
1061
|
### Dogfood
|
|
755
1062
|
|
|
756
|
-
| #
|
|
757
|
-
|
|
758
|
-
| A
|
|
759
|
-
| B
|
|
760
|
-
| C
|
|
761
|
-
| D
|
|
1063
|
+
| # | Scenario | Verdict | Evidence |
|
|
1064
|
+
| --- | ------------------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------- |
|
|
1065
|
+
| A | v2.18.1 verify-pipeline happy-path (session-axis) | PASS | `.peaks/_runtime/2026-06-29-session-9cac8e/{rd,qa}/...` resolves as canonical; `data.changeId` slug preserved in envelope |
|
|
1066
|
+
| B | v2.18.1 verify-pipeline missing-evidence | PASS | Clear `RD evidence missing: ...` violations, no `ReferenceError` |
|
|
1067
|
+
| C | v2.18.1 prd check-blocks well-formed PRD | PASS | `report.ok: true`, all 4 blocks pass, JSON envelope `{ 业务场景: 'pass', 边界 case: 'pass', UI 装配意图: 'pass' }` |
|
|
1068
|
+
| D | v2.18.1 prd check-blocks missing 业务场景 block | PASS | `report.ok: false`, `issues: ["Missing required block: 业务场景"]`, no `ReferenceError` |
|
|
762
1069
|
|
|
763
1070
|
### Commits
|
|
764
1071
|
|
|
@@ -789,7 +1096,7 @@ Each original file gets a sibling `import { ... } from './X-helpers.js'` + `expo
|
|
|
789
1096
|
- `src/services/session/binding-store.ts:259` — `ownerHint` field is now `${envSignal}#${pid}` (was bare env signal). Preserves the existing v2.17.0 field shape; only the value format changes.
|
|
790
1097
|
- `registerInstance` distinguishes instances by `(callerId, pid)` tuple, not by `ownerHint` alone. Same pid + same callerId → auto-resume (D2 Claude-instance-level hard-exclusive sid preserved); same callerId + different pid → distinct sids.
|
|
791
1098
|
- `/compact` resume: same outer-session-id + same pid → reuses sid (verified by new Case B test). Different pid (rare, but possible if the harness restarts) → new sid (safe default, not a stale resume).
|
|
792
|
-
- Sub-agent dispatch: sub-agents inherit parent's `CLAUDE_CODE_SESSION_ID` but run in the same Node process → same pid → same callerId → same sid (D2 sid-aggregation across peaks
|
|
1099
|
+
- Sub-agent dispatch: sub-agents inherit parent's `CLAUDE_CODE_SESSION_ID` but run in the same Node process → same pid → same callerId → same sid (D2 sid-aggregation across peaks-\* skill activations preserved).
|
|
793
1100
|
- 6 new test cases in `tests/unit/services/session/binding-store.test.ts:151-242`:
|
|
794
1101
|
- **Case A:** 2 instances, same `callerId`, different `pid` → 2 distinct sids
|
|
795
1102
|
- **Case B:** 2 instances, same `callerId`, same `pid`, same outer-session-id → 1 sid (auto-resume)
|
|
@@ -827,12 +1134,12 @@ Each original file gets a sibling `import { ... } from './X-helpers.js'` + `expo
|
|
|
827
1134
|
|
|
828
1135
|
### Dogfood (ice-cola NestJS project, 2026-06-29-session-2e81dc)
|
|
829
1136
|
|
|
830
|
-
| #
|
|
831
|
-
|
|
832
|
-
| A
|
|
833
|
-
| B
|
|
834
|
-
| C
|
|
835
|
-
| D
|
|
1137
|
+
| # | Scenario | Verdict | Evidence |
|
|
1138
|
+
| --- | ----------------------------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1139
|
+
| A | P0 fix verification (binding file format) | PASS | `callerId: 5fa8a7d8-...#13472` matches shell pid 13472; pre-existing instance pid 3876 ≠ current shell — fix works in production-shape data |
|
|
1140
|
+
| B | peaks doctor stale-binding scan | PASS | 0 stale bindings, ttl=300000ms, v2.16.0 schema surface intact |
|
|
1141
|
+
| C | peaks code smoke (4 sub-commands) | PARTIAL | 3/4 pass; `peaks request lint --project .` is invalid syntax (needs `<rid>` + `--role`); not a v2.18.0 regression |
|
|
1142
|
+
| D | env-collision simulation (single shell, 2 envs) | PASS | `fake-session-A#20984` + `fake-session-B#20984` → 2 distinct sids (fupv8b / xnntb1); transposed axis (same pid, different env) verified; primary 2-Claude-windows scenario needs CI integration test with 2 child node processes |
|
|
836
1143
|
|
|
837
1144
|
**Dogfood verdict:** 3.5 / 4 pass; `recommend_v2.18.0_commit: true`.
|
|
838
1145
|
|
|
@@ -871,7 +1178,7 @@ The first v2.18.0 release deferred two open items to a redo slice; both are now
|
|
|
871
1178
|
### Feature — binding-store v2 sentinel (v2.16.0-alpha + v2.17.0)
|
|
872
1179
|
|
|
873
1180
|
- `src/services/session/binding-store.ts` — zod-validated multi-instance binding schema with auto-migration from legacy `{ sessionId, createdAt, projectRoot }`. New shape: `{ ownerHint, pid, lastHeartbeat, scope, instances: Record<sid, InstanceRecord> }`.
|
|
874
|
-
- `InstanceRecord` = `{ startedAt, roles: string[], callerId, lastHeartbeat }` — `roles` accumulates as the Claude instance activates multiple peaks
|
|
1181
|
+
- `InstanceRecord` = `{ startedAt, roles: string[], callerId, lastHeartbeat }` — `roles` accumulates as the Claude instance activates multiple peaks-\* skills (solos → rd → qa all share one sid).
|
|
875
1182
|
- Auto-resume: same callerId reuses the same sid; different callers get different sids in the same `instances` map.
|
|
876
1183
|
- `dropStale(projectRoot, ttlMs)` for Doctor integration.
|
|
877
1184
|
|
|
@@ -883,7 +1190,7 @@ The first v2.18.0 release deferred two open items to a redo slice; both are now
|
|
|
883
1190
|
|
|
884
1191
|
### Feature — D2 Claude-instance-level hard-exclusive sid
|
|
885
1192
|
|
|
886
|
-
- Same Claude instance keeps one sid across multiple peaks
|
|
1193
|
+
- Same Claude instance keeps one sid across multiple peaks-\* skill activations (peaks-code → peaks-rd → peaks-qa).
|
|
887
1194
|
- `/compact` resume: same outer-session-id reuses the same sid (post-compact-resume v2.11.0 D7 alignment).
|
|
888
1195
|
|
|
889
1196
|
### Feature — Doctor stale-binding scan (AC-10)
|
|
@@ -916,7 +1223,7 @@ The first v2.18.0 release deferred two open items to a redo slice; both are now
|
|
|
916
1223
|
|
|
917
1224
|
Recommended scenarios before next release (see `peaks/_runtime/2026-06-29-session-88411f/txt/handoff-2026-06-29-v2-17-0.md` for details):
|
|
918
1225
|
|
|
919
|
-
1. **Multi-Claude parallel提速**: open 2 Claude instances in the same project, run `peaks code <different goal>` in each. Verify both bindings coexist with distinct sids.
|
|
1226
|
+
1. **Multi-Claude parallel 提速**: open 2 Claude instances in the same project, run `peaks code <different goal>` in each. Verify both bindings coexist with distinct sids.
|
|
920
1227
|
2. **D1 conflict detection**: 2 instances both targeting the same source file. Verify each writes to its own session-scoped artifact directory.
|
|
921
1228
|
3. **`/compact` resume**: run `peaks code <goal>`, `/compact`, continue. Verify same sid reused.
|
|
922
1229
|
4. **Doctor stale**: kill -9 a Claude instance, run `peaks doctor`, verify stale binding listed + `--cleanup-stale` works.
|
|
@@ -1032,11 +1339,13 @@ Recommended scenarios before next release (see `peaks/_runtime/2026-06-29-sessio
|
|
|
1032
1339
|
- **Per the user-given rule** `.peaks/memory/2026-06-28-full-auto-boundary.md`: "full-auto 只做到 commit 就是,push 不用". The commit-boundary hard-floor is the machine enforcement of that advisory rule.
|
|
1033
1340
|
|
|
1034
1341
|
### Test results
|
|
1342
|
+
|
|
1035
1343
|
- 4 new test files: `presence-staleness.test.ts` (12), `stale-presence-detection.test.ts` (9), `feedback-promotion.test.ts` (18), `commit-boundary-hard-floor.test.ts` (247). Total new cases: **286**.
|
|
1036
1344
|
- Existing code tests (mode-gate × 81, post-compact × 11) pass unchanged.
|
|
1037
1345
|
- Full unit suite baseline 4394 → 4680 passing (286 added). 0 new failures; pre-existing 7 unrelated failures unchanged.
|
|
1038
1346
|
|
|
1039
1347
|
### Out-of-scope
|
|
1348
|
+
|
|
1040
1349
|
- Push / tag / npm publish — full-auto boundary = commit only; the commit-boundary hard-floor now BLOCKS these in full-auto (was advisory). User must explicitly confirm via AskUserQuestion to proceed.
|
|
1041
1350
|
- `peaks hooks install` — slice is code-only. Hooks remain user-only.
|
|
1042
1351
|
- Cleaning the 88b27d session's stale presence on disk — slice ships the detection + auto-clear, does NOT proactively touch the live tree.
|
|
@@ -1059,12 +1368,14 @@ slice-2026-06-28-layered-dag PRD: 大需求(1 周内做不完)= 基础先行 +
|
|
|
1059
1368
|
4 个 PRD + 4 个 service + 4 个 CLI 文件 + 4 个 test 文件,共 **17 个新命令 + 63 个新测试通过**。
|
|
1060
1369
|
|
|
1061
1370
|
**G11 上游 tag 同步**(slice-2026-06-28-fork-cli):
|
|
1371
|
+
|
|
1062
1372
|
- 5 commands: `peaks fork status` / `upstream-check` / `sync-plan` / `sync` / `sync-verify`
|
|
1063
1373
|
- 持久化 `.peaks/fork-state.json` (baseline + history)
|
|
1064
1374
|
- `recommendStableTags` 过滤 pre-release 标签(alpha/beta/rc/dev/preview)
|
|
1065
1375
|
- 15 tests pass
|
|
1066
1376
|
|
|
1067
1377
|
**G13 存量影响面扫描**(slice-2026-06-28-impact-cli):
|
|
1378
|
+
|
|
1068
1379
|
- 2 commands: `peaks impact scan --files <list>` / `peaks impact must-check --files <list>`
|
|
1069
1380
|
- 手写 glob 匹配(`**` / `*`),无 AST 依赖
|
|
1070
1381
|
- 10 个默认业务流(用户管理 / 权限校验 / 登录流程 / Skill 权限 / 数据列表 / API 网关 / DB schema / ...)
|
|
@@ -1072,6 +1383,7 @@ slice-2026-06-28-layered-dag PRD: 大需求(1 周内做不完)= 基础先行 +
|
|
|
1072
1383
|
- 13 tests pass
|
|
1073
1384
|
|
|
1074
1385
|
**G14 轻量回归 critical-paths**(slice-2026-06-28-smoke-cli):
|
|
1386
|
+
|
|
1075
1387
|
- 4 commands: `peaks smoke define` / `run` / `run-and-repair` / `add-path`
|
|
1076
1388
|
- 持久化 `.peaks/smoke-paths.json`
|
|
1077
1389
|
- 5 个 source (prd-business-scenario / boss-stated / historical-incident / impact-must-check / manual)
|
|
@@ -1079,6 +1391,7 @@ slice-2026-06-28-layered-dag PRD: 大需求(1 周内做不完)= 基础先行 +
|
|
|
1079
1391
|
- 16 tests pass
|
|
1080
1392
|
|
|
1081
1393
|
**G15 上线观察期状态机**(slice-2026-06-28-release-cli):
|
|
1394
|
+
|
|
1082
1395
|
- 7 commands: `peaks release plan` / `canary` / `promote` / `watch` / `done` / `rollback` / `hotfix`
|
|
1083
1396
|
- 8 阶段状态机: planned → canary-10 → canary-50 → promoted → watching → done
|
|
1084
1397
|
- side branches: → rolled-back (from any pre-done), → hotfixed (from watching)
|
|
@@ -1089,6 +1402,7 @@ slice-2026-06-28-layered-dag PRD: 大需求(1 周内做不完)= 基础先行 +
|
|
|
1089
1402
|
**触动:** 新增 4 个 service / 4 个 CLI / 4 个 test 文件 = **12 个新文件**。CLI 注册全在 `src/cli/program.ts`,**不触动** transition gates / hard contracts / Karpathy 4 / sub-agent 协议 / mode-gate。
|
|
1090
1403
|
|
|
1091
1404
|
**已知未实现**(后续切片):
|
|
1405
|
+
|
|
1092
1406
|
- 真实 git fetch + merge(G11)
|
|
1093
1407
|
- 真实 Playwright 路径执行(G14)
|
|
1094
1408
|
- 真实 k8s rollout / LB config / 监控集成(G15)
|
|
@@ -1098,23 +1412,27 @@ slice-2026-06-28-layered-dag PRD: 大需求(1 周内做不完)= 基础先行 +
|
|
|
1098
1412
|
4 个 service + 4 个 CLI 文件 + 4 个 test 文件,共 **16 个新命令 + 40+ 个新测试通过**。所有 CLI 都遵循 12 Gaps 核心原则: user 在循环里 = 业务/产品审阅,不参与技术决策。
|
|
1099
1413
|
|
|
1100
1414
|
**G3 prd 4 必填块**(slice-2026-06-28-prd-blocks):
|
|
1415
|
+
|
|
1101
1416
|
- `peaks prd check-blocks <rid>` — 验证 4 必填块(业务场景/边界/UI 装配/上游基线)+ 业务禁区子节
|
|
1102
1417
|
- 上游基线仅在 fork 项目上 required(检测 `.peaks/fork-state.json`)
|
|
1103
1418
|
- 8 tests pass
|
|
1104
1419
|
|
|
1105
1420
|
**G4 user touchpoint classifier**(slice-2026-06-28-user-touchpoints):
|
|
1421
|
+
|
|
1106
1422
|
- 3 commands: `peaks code gate-classify` / `peaks code user-touchpoints` / `peaks code commit-boundary-actions`
|
|
1107
1423
|
- 14 个 Code gate 静态分类: business / tech / mode-selection / commit-boundary / commit-floor
|
|
1108
1424
|
- `userShouldReview`: always / business-only / never
|
|
1109
1425
|
- 7 tests pass
|
|
1110
1426
|
|
|
1111
1427
|
**G1 slice 业务审阅**(slice-2026-06-28-slice-review):
|
|
1428
|
+
|
|
1112
1429
|
- 4 commands: `peaks slice review` / `score` / `accept` / `reject`
|
|
1113
1430
|
- 4 个默认 review item: business-match / boundary-cases / ui-assembly / mergeable
|
|
1114
1431
|
- 12 Gaps 阈值: avg >= 3 AND no item <= 2 → accepted
|
|
1115
1432
|
- 16 tests pass
|
|
1116
1433
|
|
|
1117
1434
|
**G5 QA 业务视角验收**(slice-2026-06-28-qa-business):
|
|
1435
|
+
|
|
1118
1436
|
- 4 commands: `peaks qa business-review` / `business-score` / `business-accept` / `business-reject`
|
|
1119
1437
|
- 6 个默认 review item: business-flow / req-coverage / boundary-cases / ui-assembly / exception-tone / mergeable
|
|
1120
1438
|
- 同一阈值(avg >= 3, no item <= 2)
|
|
@@ -1127,29 +1445,35 @@ slice-2026-06-28-layered-dag PRD: 大需求(1 周内做不完)= 基础先行 +
|
|
|
1127
1445
|
5 个 PRD 一次性收尾剩余 5 个 Gaps。每 G 一个 service + CLI + test,**10 个新文件 + 30+ 个新测试通过**。
|
|
1128
1446
|
|
|
1129
1447
|
**G6 跨 slice 集成**(slice-2026-06-28-slice-integrate):
|
|
1448
|
+
|
|
1130
1449
|
- `peaks slice-integrate --slices <id1,id2,...>` — 验证多个 slice 的公共契约不冲突(重复 export / signature drift)
|
|
1131
1450
|
- 5 tests pass
|
|
1132
1451
|
|
|
1133
1452
|
**G7 文档自动化**(slice-2026-06-28-doc):
|
|
1453
|
+
|
|
1134
1454
|
- `peaks doc generate-skill --name --from <commands-dir>` — 扫描 program.command() 自动生成 SKILL.md skeleton
|
|
1135
1455
|
- `peaks doc changelog-suggest --since <ref>` — git log 解析 conventional commit + 生成 [Unreleased] 块
|
|
1136
1456
|
- 6 tests pass
|
|
1137
1457
|
|
|
1138
1458
|
**G8 存量代码 smell 扫描**(slice-2026-06-28-legacy):
|
|
1459
|
+
|
|
1139
1460
|
- `peaks legacy-detect --dir <path>` — TODO/FIXME/HACK/console.log/any-type/large-file/ts-ignore 启发式扫描
|
|
1140
1461
|
- 5 tests pass
|
|
1141
1462
|
|
|
1142
1463
|
**G9 角色 RBAC**(slice-2026-06-28-role):
|
|
1464
|
+
|
|
1143
1465
|
- `peaks role list/add/grant/check` — 4 命令,持久化 .peaks/role-registry.json
|
|
1144
1466
|
- `--preset senior-fe` 一键预置 12 Gaps 高级前端权限
|
|
1145
1467
|
- 5 tests pass
|
|
1146
1468
|
|
|
1147
1469
|
**G10 复杂度估算**(slice-2026-06-28-complexity):
|
|
1470
|
+
|
|
1148
1471
|
- `peaks complexity-estimate --files <list>` — 按 LOC + exports + async 估算 trivial/simple/complex
|
|
1149
1472
|
- 与 G2 字段(complexity tier)对齐,驱动 user-attended vs overnight 排程
|
|
1150
1473
|
- 5 tests pass
|
|
1151
1474
|
|
|
1152
1475
|
**Dogfood 验证(ice-cola NestJS 项目):**
|
|
1476
|
+
|
|
1153
1477
|
- peaks legacy-detect (164 文件, smells=high, 406 个 any-type, 15 个 large-file)
|
|
1154
1478
|
- peaks role add senior-fe --preset senior-fe + role list + role check (granted/not)
|
|
1155
1479
|
- peaks complexity-estimate (auth files → complex, 41 lines + hasAsync)
|
|
@@ -1174,6 +1498,7 @@ slice-2026-06-28-layered-dag PRD: 大需求(1 周内做不完)= 基础先行 +
|
|
|
1174
1498
|
- `tests/unit/services/context/tokenizer.test.ts:23` — `fetchedAt` 硬编码 `2026-06-21` 距今 7 天触发 `timeDecayScore 0.886 < 0.9` 期望,改 `new Date().toISOString()` 符合"fresh fetch"测试意图
|
|
1175
1499
|
|
|
1176
1500
|
**测试结果:**
|
|
1501
|
+
|
|
1177
1502
|
- silent-warning-detector: 2 violations → 0
|
|
1178
1503
|
- `tests/unit/services/context/`: 49/50 → 50/50
|
|
1179
1504
|
- 全量 vitest 4819 tests:3 failed → 2 failed(剩下 2 个是并发 race condition,单跑 context 50/50 全过,pre-existing)
|
|
@@ -1185,19 +1510,23 @@ slice-2026-06-28-layered-dag PRD: 大需求(1 周内做不完)= 基础先行 +
|
|
|
1185
1510
|
**PATCH bump from 2.14.1** (slice `2026-06-28-tilde-peaks-p3p4`). Closes P3 + P4 from `.peaks/memory/2026-06-28-tilde-peaks-inventory.md`.
|
|
1186
1511
|
|
|
1187
1512
|
### Cleanup
|
|
1513
|
+
|
|
1188
1514
|
- **`skills/peaks-companion/`** — REMOVED. Skill was dead: SKILL.md documented `peaks companion status/install/setup/start` but no CLI implementation existed (`src/services/companion/` not present, `peaks --help` had no companion entry). Empty `~/.peaks/companion/` directory is no longer expected to receive `cc-connect.log` writes.
|
|
1189
1515
|
- **`tests/unit/skills/peaks-companion.test.ts`** — REMOVED (9 cases). The companion skill-count assertion (19 → 18 skills) is now verified by `tests/unit/skills/skill-count.test.ts` (already covers the meta count, not companion specifically).
|
|
1190
1516
|
- **`.peaks/memory/peaks-companion-*.md`** — REMOVED (4 files: `cc-connect-dogfood-2026-06-15`, `qr-autoopen-2026-06-15`, `qr-inline-display-2026-06-15`, `watcher-ecs-url-config`). Historical dogfood records, no longer relevant.
|
|
1191
1517
|
|
|
1192
1518
|
### Refactor
|
|
1519
|
+
|
|
1193
1520
|
- **`~/.peaks/providers.json`** (NEW sidecar) — MiniMax provider config migrated from deprecated `~/.peaks/config.json.providers` to canonical `~/.peaks/providers.json` per `provider-service.ts` schema. The slim `config.json` (per `config-types.ts`) no longer carries the `providers` field.
|
|
1194
1521
|
- **MiniMax model field preserved** — `~/.peaks/providers.json.providers.minimax.model = "minimax-2.7"`; `peaks config provider minimax get/status` continue to report correctly via the back-compat fallback in `provider-service.ts`.
|
|
1195
1522
|
|
|
1196
1523
|
### Test results
|
|
1524
|
+
|
|
1197
1525
|
- `pnpm vitest run tests/unit/doctor.test.ts` — 50/50 pass
|
|
1198
1526
|
- `pnpm vitest run` full unit suite — `peaks-companion.test.ts` no longer runs; total cases drop from 4418 → 4409. Pre-existing failures (`doctor.test.ts` × 0, `tokenizer.test.ts` × 1, `35-checks-aggregate.test.ts` × 1) unchanged.
|
|
1199
1527
|
|
|
1200
1528
|
### Out-of-scope
|
|
1529
|
+
|
|
1201
1530
|
- Push / tag / npm publish — full-auto mode boundary = commit only; user-only.
|
|
1202
1531
|
- Re-implementing peaks-companion CLI — user chose delete over revive.
|
|
1203
1532
|
- Cleaning `~/.peaks/companion/` empty dir — left in place; harmless.
|
|
@@ -1209,14 +1538,17 @@ slice-2026-06-28-layered-dag PRD: 大需求(1 周内做不完)= 基础先行 +
|
|
|
1209
1538
|
**PATCH bump from 2.14.0** (carry-forward from v2.13.3 AC-2 partial fix + npm 11.x config rename).
|
|
1210
1539
|
|
|
1211
1540
|
### Bug fixes
|
|
1541
|
+
|
|
1212
1542
|
- `scripts/prepublish-build.mjs` — use `execFileSync('pnpm', ['run', 'build'])` (no shell) with Windows fallback to `prepublish-build.ps1` (proven dogfood). Eliminates the v2.13.4 partial-fix `spawnSync cmd.exe ENOENT` on Node 22 + Windows native.
|
|
1213
1543
|
- `.npmrc` (NEW, repo-local template) — documents that `https_proxy` (underscore) is NO LONGER VALID in npm 11.x; use `https-proxy` or `proxy`. User-global `~/.npmrc` may still have `https_proxy`; npm 11.x warns, npm 12 will error.
|
|
1214
1544
|
|
|
1215
1545
|
### Test results
|
|
1546
|
+
|
|
1216
1547
|
- `tests/unit/scripts/prepublish-build.test.ts` (NEW, 6 cases) — covers execFile happy path + Windows ps1 fallback + error propagation + version validation + ENOENT regression
|
|
1217
1548
|
- `node scripts/prepublish-build.mjs` end-to-end: `[prepublish-build] build OK` exit 0 (verified on this Windows session)
|
|
1218
1549
|
|
|
1219
1550
|
### Out-of-scope
|
|
1551
|
+
|
|
1220
1552
|
- Do NOT modify user-global `~/.npmrc` (user-only boundary); user must run `npm config delete https_proxy` themselves if they want to silence the warning before npm 12.
|
|
1221
1553
|
|
|
1222
1554
|
---
|
|
@@ -1337,7 +1669,7 @@ The four defects all stem from the v2.13.0 two-axis convention landing debt: the
|
|
|
1337
1669
|
|
|
1338
1670
|
**PATCH bump from 2.13.2** (slice `2026-06-27-verdict-aggregator-v2-12-debt`, red-line scope 7 source files + 3 test files modified + 3 new scripts + 1 package.json hook).
|
|
1339
1671
|
|
|
1340
|
-
2.13.2 dogfood surfaced 4 bugs that all stem from v2.12.0 envelope-schema落地 debt: the v2.12.0 audit artifacts (`audit/security.md`, `audit/perf.md`) are YAML-frontmatter + markdown, but v2.13.2's `parseSecurityEnvelope` / `parsePerfEnvelope` used `JSON.parse` (which is the wrong shape). v2.13.3 also fixes a cross-version publish-pipeline issue (`bin/peaks.js` was shipping a Jun 13 stale dist because `prepublishOnly` was never wired) and adds a soft-block-warning surface in the CLI so users can see v2.13.2's `mut-report-missing-deprecated-in-v2.14.0` warning instead of having it silently downgraded in service-layer.
|
|
1672
|
+
2.13.2 dogfood surfaced 4 bugs that all stem from v2.12.0 envelope-schema 落地 debt: the v2.12.0 audit artifacts (`audit/security.md`, `audit/perf.md`) are YAML-frontmatter + markdown, but v2.13.2's `parseSecurityEnvelope` / `parsePerfEnvelope` used `JSON.parse` (which is the wrong shape). v2.13.3 also fixes a cross-version publish-pipeline issue (`bin/peaks.js` was shipping a Jun 13 stale dist because `prepublishOnly` was never wired) and adds a soft-block-warning surface in the CLI so users can see v2.13.2's `mut-report-missing-deprecated-in-v2.14.0` warning instead of having it silently downgraded in service-layer.
|
|
1341
1673
|
|
|
1342
1674
|
### Bug fixes
|
|
1343
1675
|
|
|
@@ -1373,9 +1705,9 @@ The four defects all stem from the v2.13.0 two-axis convention landing debt: the
|
|
|
1373
1705
|
|
|
1374
1706
|
### Multi-CC commit boundaries
|
|
1375
1707
|
|
|
1376
|
-
| Commit tag | Scope
|
|
1377
|
-
|
|
1378
|
-
| v2.13.3
|
|
1708
|
+
| Commit tag | Scope |
|
|
1709
|
+
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1710
|
+
| v2.13.3 | 4 bug fixes (parser / publish pipeline / CLI warnings / handoff sha256) + 3 new scripts + 4 new test cases + package.json prepublishOnly + README publish note + CHANGELOG + version bump + ship-state memory |
|
|
1379
1711
|
|
|
1380
1712
|
### Verified (peaks code dogfood + QA on this session)
|
|
1381
1713
|
|
|
@@ -1451,9 +1783,9 @@ v2.13.1 shipped with a BLOCKER bug found via post-release dogfood: `aggregateVer
|
|
|
1451
1783
|
|
|
1452
1784
|
### Multi-CC commit boundaries
|
|
1453
1785
|
|
|
1454
|
-
| Commit tag | Scope
|
|
1455
|
-
|
|
1456
|
-
| v2.13.2
|
|
1786
|
+
| Commit tag | Scope |
|
|
1787
|
+
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1788
|
+
| v2.13.2 | `aggregateVerdict()` dedup bug fix + `peaks verdict aggregate` CLI + `envelopes.ts` unification + `prd/handoff.md` auto-regen + `MUT_REPORT` soft-block window + 4 new test files + 4 updated test files + CHANGELOG + version bump + ship-state memory |
|
|
1457
1789
|
|
|
1458
1790
|
### Verified (peaks code dogfood + QA on this session)
|
|
1459
1791
|
|
|
@@ -1515,9 +1847,9 @@ peaks-code previously received 5 heterogeneous signals (security-audit, perf-aud
|
|
|
1515
1847
|
|
|
1516
1848
|
### Multi-CC commit boundaries
|
|
1517
1849
|
|
|
1518
|
-
| Commit tag | Scope
|
|
1519
|
-
|
|
1520
|
-
| v2.13.1
|
|
1850
|
+
| Commit tag | Scope |
|
|
1851
|
+
| ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1852
|
+
| v2.13.1 | MUT_REPORT prereq + `aggregateVerdict()` service + `## Verdict reasoning` section + 4 new test files + 2 updated test files + CHANGELOG + version bump + ship-state memory |
|
|
1521
1853
|
|
|
1522
1854
|
### Verified (peaks code dogfood on this session)
|
|
1523
1855
|
|
|
@@ -1581,10 +1913,10 @@ Adapter-driven protocol (no hard-coded IDE names): `IdeAdapter.compact?: IdeComp
|
|
|
1581
1913
|
|
|
1582
1914
|
### Multi-CC commit boundaries
|
|
1583
1915
|
|
|
1584
|
-
| Commit tag
|
|
1585
|
-
|
|
1916
|
+
| Commit tag | Scope |
|
|
1917
|
+
| --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1586
1918
|
| v2.13.0-alpha.1 (`edffc33`) | Two-tier threshold + auto-compact types + reader + dispatcher + orchestrator + Claude Code MVP adapter + `peaks code context-now` + `peaks code auto-compact` CLI |
|
|
1587
|
-
| `a8b9804`
|
|
1919
|
+
| `a8b9804` | In-session dogfood limitation documented (current ad-hoc Claude Code session cannot be externally compacted — reserved for follow-up PreToolUse-hook slice) |
|
|
1588
1920
|
|
|
1589
1921
|
### Verified (peaks code dogfood on this session)
|
|
1590
1922
|
|
|
@@ -1595,7 +1927,7 @@ Adapter-driven protocol (no hard-coded IDE names): `IdeAdapter.compact?: IdeComp
|
|
|
1595
1927
|
- `post-compact-detect` after pre-compact: `shouldAutoResume: true`, `reason: post-compact-match` ✓
|
|
1596
1928
|
- Trae IDE (no `compact` profile): `ratio: 0` + `source: conservative-fallback` + `below-threshold` (no auto-fire on missing signal — by design) ✓
|
|
1597
1929
|
- `pnpm tsc --noEmit`: clean
|
|
1598
|
-
- `pnpm vitest run` (full suite): `4317 / 4317` pass + 17 skipped (2 pre-existing baseline failures on session-checkpoint + _archive-removal-guard unchanged)
|
|
1930
|
+
- `pnpm vitest run` (full suite): `4317 / 4317` pass + 17 skipped (2 pre-existing baseline failures on session-checkpoint + \_archive-removal-guard unchanged)
|
|
1599
1931
|
|
|
1600
1932
|
### Out-of-scope (NOT changed)
|
|
1601
1933
|
|
|
@@ -1652,17 +1984,17 @@ v2.13.0 hard-deletes the legacy paths.
|
|
|
1652
1984
|
|
|
1653
1985
|
### Multi-CC commit boundaries
|
|
1654
1986
|
|
|
1655
|
-
| Group | Tiers | Commit tag
|
|
1656
|
-
|
|
1657
|
-
| A
|
|
1658
|
-
| B
|
|
1659
|
-
| C
|
|
1660
|
-
| D
|
|
1661
|
-
| E
|
|
1987
|
+
| Group | Tiers | Commit tag | Scope |
|
|
1988
|
+
| ----- | ----- | ----------------- | --------------------------------------------------------------------- |
|
|
1989
|
+
| A | 1+2+3 | v2.12.0-alpha.1 | Templates + new skills (fa082f5) |
|
|
1990
|
+
| B | 4+5 | v2.12.0-alpha.2 | 5→3 fanout collapse + prereq migration (6485f1c) |
|
|
1991
|
+
| C | 6 | v2.12.0-alpha.3 | peaks-txt sediment extension (ab2757b) |
|
|
1992
|
+
| D | 7 | v2.12.0-alpha.4 | fan-out SKILL.md updates (b6c4fae) |
|
|
1993
|
+
| E | 8+9 | v2.12.0 (release) | Decision records + migration + CHANGELOG + version bump (this commit) |
|
|
1662
1994
|
|
|
1663
1995
|
### Zero regression (verified per group)
|
|
1664
1996
|
|
|
1665
|
-
Each Group A→D ran the full RD→QA loop independently. Group C final QA: 14/14 sediment tests pass + 39/39 prd service tests pass; 9 pre-existing baseline failures unchanged (doctor / _archive-removal-guard / request-commands / observability / session-checkpoint / tech-service / workflow-autonomous-resume / jsonl-store / 35-checks-aggregate — all unrelated to v2.12.0). Group D final QA: 35/35 fan-out SKILL.md contract tests pass; same 9 pre-existing baseline failures.
|
|
1997
|
+
Each Group A→D ran the full RD→QA loop independently. Group C final QA: 14/14 sediment tests pass + 39/39 prd service tests pass; 9 pre-existing baseline failures unchanged (doctor / \_archive-removal-guard / request-commands / observability / session-checkpoint / tech-service / workflow-autonomous-resume / jsonl-store / 35-checks-aggregate — all unrelated to v2.12.0). Group D final QA: 35/35 fan-out SKILL.md contract tests pass; same 9 pre-existing baseline failures.
|
|
1666
1998
|
|
|
1667
1999
|
### Out-of-scope (NOT changed)
|
|
1668
2000
|
|
|
@@ -1843,6 +2175,7 @@ LLM was creating top-level `.peaks/_runtime/<change-id>/` siblings of `.peaks/_r
|
|
|
1843
2175
|
- Bumps `package.json#version` from 2.9.1 to 2.9.2
|
|
1844
2176
|
|
|
1845
2177
|
**Pre-existing violations preserved as-is** (intentional historical/forbidden documentation, all explicitly labeled):
|
|
2178
|
+
|
|
1846
2179
|
- 6 ban-explanation memory files under `.peaks/memory/` (slice 005 / 2.8.3 / 2.7.1 lessons)
|
|
1847
2180
|
- 28 historic session files under `.peaks/_runtime/2026-06-*/`
|
|
1848
2181
|
- 5 historic dispatch records under `.peaks/_sub_agents/`
|
|
@@ -1939,37 +2272,37 @@ the four-step recipe; no data is lost.
|
|
|
1939
2272
|
final root-out of a 2.8.0-era orphan (`.peaks/2026-06-22-cc-connect-orphan-cleanup/`,
|
|
1940
2273
|
4 files, 28 KB, untracked) and pins the rule across FOUR layers so a
|
|
1941
2274
|
regression cannot survive:
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
2275
|
+
1. **`.gitignore` fnmatch rule** —
|
|
2276
|
+
`.peaks/[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-*/` blocks any
|
|
2277
|
+
future untracked date-prefix sibling at `.peaks/_runtime/<seg>/`. Path-anchored
|
|
2278
|
+
so it does not over-match (`.peaks/_runtime/<date>/` is still ignored
|
|
2279
|
+
by the existing `.peaks/_runtime/` rule, not this one).
|
|
2280
|
+
2. **Vitest guard** at
|
|
2281
|
+
`tests/unit/workspace/top-level-change-id-guard.test.ts` (8 cases)
|
|
2282
|
+
pins the gitignore rule literal, asserts fnmatch matches a synthetic
|
|
2283
|
+
candidate, asserts it does NOT match `.peaks/_runtime/-nested`
|
|
2284
|
+
candidates, scans the live working tree for orphan date-prefix
|
|
2285
|
+
siblings, scans `git ls-files` for tracked escapes, asserts both
|
|
2286
|
+
`CLAUDE.md` and `.peaks/PROJECT.md` carry the ban wording, AND
|
|
2287
|
+
asserts the CLI help text (`init-command.ts`) teaches the
|
|
2288
|
+
`.peaks/_runtime/current-change` binding path + the four
|
|
2289
|
+
migration verbs (inspect / move / delete / unlink / re-run).
|
|
2290
|
+
3. **Source-code redirect** —
|
|
2291
|
+
`src/shared/change-id.ts#setCurrentChangeId` now defaults to
|
|
2292
|
+
`{ form: 'file' }` (was `'symlink'`); the file form writes ONLY
|
|
2293
|
+
`.peaks/_runtime/current-change` and never creates
|
|
2294
|
+
`.peaks/_runtime/<changeId>/`. The legacy `'symlink'` form is kept for
|
|
2295
|
+
back-compat reads but is no longer written by `peaks workspace init`.
|
|
2296
|
+
`src/services/workspace/workspace-service.ts#initWorkspace`
|
|
2297
|
+
pre-flights the existence of `.peaks/_runtime/<changeId>/` and throws
|
|
2298
|
+
`LegacyChangeIdSiblingError` if found.
|
|
2299
|
+
4. **CLI help-text guard** — `src/cli/commands/workspace/init-command.ts`
|
|
2300
|
+
rewrites the `init` command description and `--change-id` option
|
|
2301
|
+
description so an LLM reading `peaks workspace init --help` is
|
|
2302
|
+
taught the correct path (`.peaks/_runtime/current-change`) instead
|
|
2303
|
+
of the legacy `.peaks/_runtime/<change-id>/` sibling dir. A new catch block
|
|
2304
|
+
surfaces `LegacyChangeIdSiblingError` with the 4-step migration
|
|
2305
|
+
recipe in the JSON envelope.
|
|
1973
2306
|
- **`CLI_VERSION`** sync bumped 2.8.2 → 2.8.3 (regenerated via
|
|
1974
2307
|
`scripts/sync-version.mjs` from `package.json#version`).
|
|
1975
2308
|
|
|
@@ -2095,7 +2428,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2095
2428
|
`src/services/companion/*` module + `src/cli/commands/companion.ts`
|
|
2096
2429
|
CLI + 14 `tests/unit/companion/*` test files are removed
|
|
2097
2430
|
(~7,700 lines deleted, 0 added). The `peaks companion install|setup|
|
|
2098
|
-
|
|
2431
|
+
start|stop|bind|status|restart|verify|token|qr` command tree is gone
|
|
2099
2432
|
along with the `peaks scan companion-binary` sub-command and the
|
|
2100
2433
|
`capability:companion-binary-resolution` doctor check. Companion
|
|
2101
2434
|
types (`CompanionConfig`, `CompanionWeixinConfig`, `CompanionChannel`,
|
|
@@ -2123,7 +2456,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2123
2456
|
- **`@alibaba-group/open-code-review` is now a peer dependency** —
|
|
2124
2457
|
moved from `optionalDependencies` to `peerDependencies` with
|
|
2125
2458
|
`peerDependenciesMeta."@alibaba-group/open-code-review".optional =
|
|
2126
|
-
|
|
2459
|
+
true`. The peer hint lets npm skip the optional resolution entirely
|
|
2127
2460
|
during global install; users who want second-opinion reviews via
|
|
2128
2461
|
`peaks code-review run-ocr` install it manually with
|
|
2129
2462
|
`npm i -g @alibaba-group/open-code-review`. Install hint copy in
|
|
@@ -2155,8 +2488,8 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2155
2488
|
- **Defense-in-depth comment cites H6 verbatim (Plan 5 R1-W3 MED)** —
|
|
2156
2489
|
`src/services/rd/impl.ts` defense-in-depth check now cites spec H6
|
|
2157
2490
|
(CLI 计算裁决) directly. The accompanying `docs/superpowers/specs/
|
|
2158
|
-
|
|
2159
|
-
|
|
2491
|
+
2026-06-21-context-audit-redesign-design.md` gained a new §4.3
|
|
2492
|
+
_战术审计_ subsection that consolidates §3.2 / §3.3 / H6 / H8 / Phase 3
|
|
2160
2493
|
AC-2 into a single canonical anchor (previous code references to
|
|
2161
2494
|
`§4.2` updated to `§4.3`).
|
|
2162
2495
|
|
|
@@ -2173,7 +2506,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2173
2506
|
is in the test name, not just the body.
|
|
2174
2507
|
|
|
2175
2508
|
- **Atomic-write crash test (Plan 5 R1-W5 LOW)** — new test
|
|
2176
|
-
|
|
2509
|
+
_unlinks .tmp when rename throws_ pins the catch→unlink fallback in
|
|
2177
2510
|
`writeImpl` (EISDIR-triggered real-rename failure). Mutation probe
|
|
2178
2511
|
KILLED: commenting out the unlink makes the test fail at the
|
|
2179
2512
|
`existsSync(tmp)` assertion.
|
|
@@ -2275,7 +2608,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2275
2608
|
`C:\Users\name\.trae\agents` and a Mac user gets
|
|
2276
2609
|
`/Users/name/.trae/agents`. No hardcoded `/Users/...` or `C:\...` in
|
|
2277
2610
|
any 5-IDE `awaitBatch` path. The 4 new IDE paths (`trae / trae-cn /
|
|
2278
|
-
|
|
2611
|
+
codex / cursor`) follow the same discipline.
|
|
2279
2612
|
- **`runDag` cancel-on-fail correctness (slice 1.2.c)** — when any leaf
|
|
2280
2613
|
fails, in-flight sub-agents in the same batch receive a cancel signal
|
|
2281
2614
|
at the envelope level; the orchestrator no longer waits for them to
|
|
@@ -2366,11 +2699,11 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2366
2699
|
4. `scanExportsInFile` now matches `export default function name()`
|
|
2367
2700
|
and `export default class Name`; `importedNameCount` now treats
|
|
2368
2701
|
re-exports (`export { x } from './y'`, `export type { T } from
|
|
2369
|
-
|
|
2370
|
-
|
|
2371
|
-
|
|
2702
|
+
'./y'`) as consumer references.
|
|
2703
|
+
Bonus: `OrphanScanOptions.baseRef` lets the scan diff against an
|
|
2704
|
+
arbitrary git ref (default: `HEAD`) for branch-vs-main reviews.
|
|
2372
2705
|
- **karpathy-service code-fence skip (Slice 2.6.1.B)** — `peaks scan
|
|
2373
|
-
|
|
2706
|
+
karpathy` no longer flags anti-pattern phrases (TODO, "should be
|
|
2374
2707
|
fine", "maybe", "probably") when they appear inside fenced markdown
|
|
2375
2708
|
code blocks. Illustrative code snippets were eroding trust in the
|
|
2376
2709
|
structural scanner. The 4 guideline-marker tests
|
|
@@ -2393,7 +2726,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2393
2726
|
byte-identical.
|
|
2394
2727
|
- **KARPATHY_REVIEW heading-anchored gate (Slice 2.6.1.F)** — the L3
|
|
2395
2728
|
LOW (the 4 guideline `mustContain` substring markers could be
|
|
2396
|
-
spoofed by any file that just
|
|
2729
|
+
spoofed by any file that just _mentioned_ the marker names as
|
|
2397
2730
|
prose) is fixed by a new `headingMustContain: string[]` field on
|
|
2398
2731
|
`ArtifactPrerequisite`. `KARPATHY_REVIEW` now requires each of
|
|
2399
2732
|
the 4 guidelines to appear as an actual markdown heading
|
|
@@ -2410,8 +2743,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2410
2743
|
|
|
2411
2744
|
- **L2-install dogfood verification (Slice 2.6.1.D)** — confirmed
|
|
2412
2745
|
end-to-end on a temp HOME that the 2.6.0 tarball's `postinstall`
|
|
2413
|
-
creates `~/.claude/agents/karpathy-reviewer.md` (15.4 KB, mode
|
|
2414
|
-
0600) and the matching `.peaks-managed` marker (245 bytes, JSON
|
|
2746
|
+
creates `~/.claude/agents/karpathy-reviewer.md` (15.4 KB, mode 0600) and the matching `.peaks-managed` marker (245 bytes, JSON
|
|
2415
2747
|
with `version`, `kind`, `agentName`, `sourcePath`, `contentSha256`).
|
|
2416
2748
|
The 8-platform skill fan-out also confirmed (codex, cursor, trae,
|
|
2417
2749
|
trae-cn, qoder, tongyi-lingma, hermes, openclaw). After Slice E,
|
|
@@ -2441,7 +2773,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2441
2773
|
title-case section markers (Think Before Coding / Simplicity First /
|
|
2442
2774
|
Surgical Changes / Goal-Driven Execution). CLI error code
|
|
2443
2775
|
`PREREQUISITES_MISSING`. Escape hatch: `peaks request transition
|
|
2444
|
-
|
|
2776
|
+
--allow-incomplete --confirm` (assisted mode).
|
|
2445
2777
|
- **Karpathy prompt-injection across the full RD surface** (slice 1) —
|
|
2446
2778
|
4-layer guard: SKILL.md body + 3 reference docs
|
|
2447
2779
|
(`mandatory-tech-doc.md`, `rd-fanout-contracts.md`,
|
|
@@ -2463,7 +2795,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2463
2795
|
endpoints / components / stores / mocks in the consumer project
|
|
2464
2796
|
before any new code is written. `--project --format --scope --max-per-kind`
|
|
2465
2797
|
options; output feeds the tech-doc's `## Existing API or Component
|
|
2466
|
-
|
|
2798
|
+
Inventory` section. New service
|
|
2467
2799
|
`src/services/scan/api-surface-service.ts` (~280 lines).
|
|
2468
2800
|
- **`peaks scan orphan` CLI** (slice 4) — 4-kind orphan detection
|
|
2469
2801
|
(exportOrphan / importOrphan / cliSubcommandOrphan /
|
|
@@ -2580,8 +2912,8 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2580
2912
|
`references/checkpoint-resume.md` + `references/periodic-checkpoint.md`, but
|
|
2581
2913
|
SKILL.md body only mentioned them in a single line. New Claude Code sessions
|
|
2582
2914
|
that load SKILL.md never learned the optimization existed. `### Peaks-Loop
|
|
2583
|
-
|
|
2584
|
-
|
|
2915
|
+
Step 0.75: Resume from checkpoint` and `### Peaks-Loop Step N: Periodic
|
|
2916
|
+
checkpoint` headings are now in the body (≥ 5 lines each), with explicit
|
|
2585
2917
|
`peaks session checkpoint` / `peaks session resume` CLI mentions and
|
|
2586
2918
|
reference-doc pointers. Byte cap bumped 22K → 24K (precedent: 18K → 20K → 22K).
|
|
2587
2919
|
- **`peaks test <pattern...>` CLI with smart cache** (sub-fix B) — new CLI
|
|
@@ -2690,7 +3022,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2690
3022
|
(~/.claude/skills + ~/.claude/output-styles)" and writes to
|
|
2691
3023
|
`~/.claude/skills/`.
|
|
2692
3024
|
- Byte-stability: `git diff
|
|
2693
|
-
|
|
3025
|
+
src/services/ide/adapters/{claude-code,trae}-adapter.ts` returns
|
|
2694
3026
|
empty (AC8 / AC15 ✓). Dispatch chokepoints `resource-profile.ts` /
|
|
2695
3027
|
`ide-aware-standards-service.ts` / `install-skills.mjs` untouched
|
|
2696
3028
|
(R6 inverse rule ✓).
|
|
@@ -2785,6 +3117,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2785
3117
|
registered SOP gate.
|
|
2786
3118
|
|
|
2787
3119
|
Concrete changes:
|
|
3120
|
+
|
|
2788
3121
|
- `src/services/workspace/claude-settings-template.ts` — deleted
|
|
2789
3122
|
`PEAKS_SUBCOMMAND_ALLOWLIST`, `buildBashHookCommand()`. The
|
|
2790
3123
|
template now emits only the `Write|Edit|MultiEdit` matcher.
|
|
@@ -2837,11 +3170,12 @@ Full suite: **2957 passed, 12 skipped, 0 failed**.
|
|
|
2837
3170
|
- **`headroom-ai` preferences resolver** — `src/services/context/headroom-prefs.ts` with
|
|
2838
3171
|
`resolveHeadroomOptions` and `shouldCompressResults` (pure functions, no IO). Sub-agent
|
|
2839
3172
|
dispatch now reads `loadPreferences().headroom` and:
|
|
2840
|
-
|
|
2841
|
-
|
|
2842
|
-
|
|
2843
|
-
|
|
2844
|
-
|
|
3173
|
+
|
|
3174
|
+
- Hard-blocks `--use-headroom` when `headroom.enabled = false` (new error code
|
|
3175
|
+
`HEADROOM_DISABLED_BY_PREFERENCE`, exit 1).
|
|
3176
|
+
- Respects `--headroom-mode <m>` CLI override > `perTouchpoint.subAgentDispatch` >
|
|
3177
|
+
`defaultMode` precedence.
|
|
3178
|
+
- Falls back to G7 metadata-only on any preferences load failure (no dispatch break).
|
|
2845
3179
|
|
|
2846
3180
|
- **New preferences fields** — `headroom.perTouchpoint.subAgentDispatch` and
|
|
2847
3181
|
`headroom.compressMinBytes` (default 4096). Shallow-merge on existing
|
|
@@ -2971,7 +3305,7 @@ Full suite: **2957 passed, 12 skipped, 0 failed**.
|
|
|
2971
3305
|
|
|
2972
3306
|
- The "one rid = one feature" pattern. From 2.1.1 onward, the
|
|
2973
3307
|
recommended workflow is: PRD -> `peaks slice decompose` -> `peaks
|
|
2974
|
-
|
|
3308
|
+
slice pick` (interactive) -> `peaks slice plan` -> N child rids.
|
|
2975
3309
|
Legacy `--type`-based fan-out still works as a fallback for rids
|
|
2976
3310
|
that pre-date the algorithm.
|
|
2977
3311
|
|
|
@@ -3049,10 +3383,10 @@ Full suite: **2957 passed, 12 skipped, 0 failed**.
|
|
|
3049
3383
|
(canonical home: proxy-service.ts).
|
|
3050
3384
|
- `~/.peaks/workspaces.json` — registered workspaces + current-workspace
|
|
3051
3385
|
pointer (canonical home: workspace-state-service.ts).
|
|
3052
|
-
|
|
3053
|
-
|
|
3054
|
-
|
|
3055
|
-
|
|
3386
|
+
On-disk legacy bloat is auto-detected and promoted to the correct
|
|
3387
|
+
sidecar on next CLI invocation; the slim `config.json` is then
|
|
3388
|
+
rewritten. The migration is **idempotent and silent** — no user
|
|
3389
|
+
action required.
|
|
3056
3390
|
- **`peaks config migrate --apply` distributes legacy fields across
|
|
3057
3391
|
their canonical homes.** `economyMode` / `swarmMode` continue to
|
|
3058
3392
|
forward to `<project>/.peaks/preferences.json`; `providers` /
|
|
@@ -3071,9 +3405,9 @@ Full suite: **2957 passed, 12 skipped, 0 failed**.
|
|
|
3071
3405
|
|
|
3072
3406
|
- **New `src/services/config/sidecar-store.ts`** — path helpers
|
|
3073
3407
|
(`providersConfigPath()`, `proxyConfigPath()`, `workspacesConfigPath()`)
|
|
3074
|
-
|
|
3075
|
-
|
|
3076
|
-
|
|
3408
|
+
- generic `readSidecarJson<T>` / `writeSidecarJson` with the same
|
|
3409
|
+
hardened-fs guarantees as `config-safety.ts` (symlink / hardlink
|
|
3410
|
+
guards, atomic temp-file rename, 0o600 mode).
|
|
3077
3411
|
- **New `src/services/config/provider-service.ts`** —
|
|
3078
3412
|
`getMiniMaxProviderConfig()`, `setMiniMaxProviderConfig()`,
|
|
3079
3413
|
`getMiniMaxProviderStatus()`, `getAllProviders()`,
|
|
@@ -3192,10 +3526,10 @@ Full suite: **2957 passed, 12 skipped, 0 failed**.
|
|
|
3192
3526
|
call; a missing or anonymous caller-id is rejected.
|
|
3193
3527
|
3. **Mandatory `--reason`** — the CLI rejects `--reason ""`; the
|
|
3194
3528
|
reason is persisted into the slice record for the retrospective.
|
|
3195
|
-
|
|
3196
|
-
|
|
3197
|
-
|
|
3198
|
-
|
|
3529
|
+
Three rules, not one: each rule is independently fail-closed, so a
|
|
3530
|
+
misuse in any one of them blocks the bypass. The classifier is the
|
|
3531
|
+
pure function `canSkipSlice(slice, callerId, reason)` so the rule
|
|
3532
|
+
set is testable in isolation.
|
|
3199
3533
|
- **`peaks workflow verify-pipeline --gate-skipped`** — reporting
|
|
3200
3534
|
flag that surfaces slices that completed via the skip classifier
|
|
3201
3535
|
during a pipeline run. The default `verify-pipeline` output hides
|
|
@@ -3232,27 +3566,29 @@ Full suite: **2957 passed, 12 skipped, 0 failed**.
|
|
|
3232
3566
|
bash saw literal `const c=process.argv[1]...` and tripped
|
|
3233
3567
|
`syntax error near unexpected token`. Net effect on every 2.0.3
|
|
3234
3568
|
install on Windows + macOS + Linux:
|
|
3569
|
+
|
|
3235
3570
|
- Every Bash tool call (peaks CLI or otherwise) was rejected.
|
|
3236
3571
|
- Every Write / Edit / MultiEdit call was rejected.
|
|
3237
3572
|
- The [Fact-Forcing Gate] bypass that `peaks workspace init` was
|
|
3238
3573
|
supposed to install was therefore self-defeating — the bypass
|
|
3239
3574
|
broke the gate itself, and the gate could not be reached to fix
|
|
3240
3575
|
it.
|
|
3241
|
-
|
|
3242
|
-
|
|
3243
|
-
|
|
3244
|
-
|
|
3245
|
-
|
|
3246
|
-
|
|
3247
|
-
|
|
3248
|
-
|
|
3249
|
-
|
|
3250
|
-
|
|
3251
|
-
|
|
3252
|
-
|
|
3253
|
-
|
|
3576
|
+
Recovery required the user to delete `.claude/settings.local.json`
|
|
3577
|
+
manually (losing the bypass permanently) or hand-patch the
|
|
3578
|
+
`command` field (drift vs the template).
|
|
3579
|
+
The fix wraps both builders' JS payloads in a real shell-evaluable
|
|
3580
|
+
`node -e "<js>"` form via a new `wrapAsNodeOneLiner` helper in
|
|
3581
|
+
`src/services/workspace/claude-settings-template.ts`. Inner `"`
|
|
3582
|
+
are escaped to `\"`; backslashes pass through unchanged so regex
|
|
3583
|
+
literals like `/\.peaks\//` still match correctly. `process.argv[1]`
|
|
3584
|
+
is the correct slot under `-e` per Node.js docs
|
|
3585
|
+
(https://nodejs.org/api/process.html#processargv) — consistent
|
|
3586
|
+
across Windows, macOS, and Linux. The docstring is reconciled
|
|
3587
|
+
with the implementation (the previous docstring incorrectly said
|
|
3588
|
+
`argv[2]`).
|
|
3254
3589
|
|
|
3255
3590
|
Regression tests cover:
|
|
3591
|
+
|
|
3256
3592
|
- `buildBashHookCommand()` and `buildWriteHookCommand()` return
|
|
3257
3593
|
`node -e "..."` form.
|
|
3258
3594
|
- Inner `"` are escaped to `\"`.
|
|
@@ -3367,6 +3703,7 @@ config surface.
|
|
|
3367
3703
|
> `optionalDependencies`; everything else in this section
|
|
3368
3704
|
> (env-var injection, `config-template` CLI, `missingKeys`,
|
|
3369
3705
|
> source-of-truth under `peaksConfig.ocr.llm`) is unchanged.
|
|
3706
|
+
|
|
3370
3707
|
- **`detectOcr` / `runOcrReview` no longer read `~/.opencodereview/config.json`.**
|
|
3371
3708
|
The source of truth is `peaksConfig.ocr.llm` (parsed by
|
|
3372
3709
|
`getOcrLlmConfig()` in `config-service.ts`). Missing fields surface
|
|
@@ -3428,7 +3765,7 @@ subprocess ignores it when peaks-loop's env vars are present).
|
|
|
3428
3765
|
supported IDE platforms in one command.
|
|
3429
3766
|
|
|
3430
3767
|
- **`peaks audit red-lines`** — L2 catalog audit (P0/P1/P2-a/P2-b
|
|
3431
|
-
enforcers) for skills/SKILL.md, references
|
|
3768
|
+
enforcers) for skills/SKILL.md, references/\*.md, and the agent shield.
|
|
3432
3769
|
|
|
3433
3770
|
- **`peaks agent run`** — ECC 64 agents soft-optional integration
|
|
3434
3771
|
(spec §7.2). When the L3 stack is installed, peaks delegates to it;
|
|
@@ -3463,6 +3800,7 @@ subprocess ignores it when peaks-loop's env vars are present).
|
|
|
3463
3800
|
expands globs on disk before spawning.
|
|
3464
3801
|
|
|
3465
3802
|
- **(2026-06-12) Three bugs surfaced by real-world ice-cola dogfood:**
|
|
3803
|
+
|
|
3466
3804
|
- memory-extract was called without `--apply` → always dry-ran, never
|
|
3467
3805
|
actually wrote.
|
|
3468
3806
|
- `.claude/skills/**/SKILL.md` (the standard Claude-Code consumer
|
|
@@ -3586,7 +3924,7 @@ call-to-action text differ.
|
|
|
3586
3924
|
Chinese tagline: `peaks-loop: 跨 AI IDE 的工程门禁与编排`).
|
|
3587
3925
|
- `README-en.md` synced to mirror the new layout (typing animation
|
|
3588
3926
|
uses the English tagline: `peaks-loop: cross-AI-IDE engineering
|
|
3589
|
-
|
|
3927
|
+
gates & orchestration`).
|
|
3590
3928
|
- Card anchors renamed to ASCII-friendly slugs on the English file
|
|
3591
3929
|
(`30-seconds-to-running`, `5-minute-onboarding`, `11-skills-in-the-family`,
|
|
3592
3930
|
`killer-feature-un-bypassable-gates`) so the README renders
|