peaks-loop 4.0.0-beta.14 → 4.0.0-beta.15
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 +230 -148
- package/README-en.md +1 -1
- package/README.md +32 -1
- package/bin/peaks.js +0 -0
- package/dist/cli/cli-helpers.d.ts +1 -1
- package/dist/cli/cli-helpers.js +1 -1
- 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 +1 -1
- package/dist/cli/commands/bee-commands.js +1 -1
- package/dist/cli/commands/capability-commands.js +1 -1
- package/dist/cli/commands/classify-classify-commands.js +1 -1
- package/dist/cli/commands/code-commands.js +1 -1
- package/dist/cli/commands/code-review-commands.js +1 -1
- package/dist/cli/commands/codegraph-commands.js +1 -1
- package/dist/cli/commands/compact-command.js +1 -1
- package/dist/cli/commands/complexity-commands.js +1 -1
- package/dist/cli/commands/config-commands.js +1 -1
- package/dist/cli/commands/context-commands.js +1 -1
- package/dist/cli/commands/contract-commands.js +1 -1
- 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 +1 -1
- package/dist/cli/commands/core/skill-command.js +2 -2
- package/dist/cli/commands/core/standards-command.js +1 -1
- package/dist/cli/commands/dispatch-commands.js +2 -2
- package/dist/cli/commands/dispatch-from-dag.js +1 -1
- package/dist/cli/commands/doc-commands.js +1 -1
- package/dist/cli/commands/ecc-commands.js +2 -2
- 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 +1 -1
- package/dist/cli/commands/heartbeat-commands.js +1 -1
- package/dist/cli/commands/hook-handle.js +1 -1
- package/dist/cli/commands/hooks-commands.js +1 -1
- 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 +1 -1
- 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 +2 -2
- package/dist/cli/commands/perf-audit-commands.js +2 -2
- 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 +1 -1
- 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 +2 -2
- package/dist/cli/commands/release-commands.js +1 -1
- 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.js +1 -2
- package/dist/cli/commands/sc-commands.js +1 -1
- package/dist/cli/commands/scan-commands.js +1 -1
- package/dist/cli/commands/security-audit-commands.js +2 -2
- 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 +1 -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/statusline-commands.js +1 -1
- package/dist/cli/commands/sub-agent-commands.js +2 -1
- package/dist/cli/commands/understand-commands.js +1 -1
- package/dist/cli/commands/upgrade-commands.js +1 -1
- package/dist/cli/commands/user-touchpoint-commands.js +1 -1
- package/dist/cli/commands/verdict-aggregate-command.js +1 -1
- package/dist/cli/commands/workflow-commands.js +1 -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/index.js +1 -1
- package/dist/cli/program.js +2 -2
- 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/code/auto-compact-orchestrator.js +5 -2
- package/dist/services/code-review/ocr-service.d.ts +1 -1
- package/dist/services/code-review/ocr-service.js +6 -3
- package/dist/services/config/config-types.js +1 -1
- package/dist/services/dashboard/project-dashboard-service.js +2 -2
- package/dist/services/dispatch/batch-counter.js +1 -1
- package/dist/services/dispatch/dispatch-record-writer.js +1 -1
- package/dist/services/job/job-progress-store.d.ts +2 -2
- package/dist/services/job/job-types.d.ts +27 -27
- package/dist/services/log/retention.js +1 -1
- package/dist/services/openspec/openspec-archive-service.js +1 -1
- 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 +1 -1
- package/dist/services/openspec/openspec-scan-service.js +1 -1
- package/dist/services/openspec/openspec-validate-service.js +1 -1
- 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/skill/skill-search-service.d.ts +5 -5
- package/dist/services/skill/skill-search-service.js +2 -2
- package/dist/services/skills/skill-registry.js +2 -2
- package/dist/services/skills/skill-runbook-service.js +1 -1
- package/dist/services/slice/slice-check-service.js +1 -1
- 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/workflow/autonomous-resume-writer.js +1 -1
- 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-router-service.js +11 -9
- package/dist/services/workspace/migrate-service.js +1 -1
- package/dist/services/workspace/workspace-service.js +1 -1
- package/package.json +13 -8
- package/scripts/sync-version.mjs +8 -1
- package/skills/bee/peaks-rd/SKILL.md +14 -1
- package/skills/peaks-code/SKILL.md +44 -0
- package/skills/peaks-code/references/sub-agent-dispatch.md +30 -0
- package/dist/services/agent/ecc-cache-service.d.ts +0 -97
- package/dist/services/agent/ecc-cache-service.js +0 -491
- package/dist/services/audit-independent/perf-audit-service.d.ts +0 -151
- package/dist/services/audit-independent/perf-audit-service.js +0 -316
- package/dist/services/audit-independent/security-audit-service.d.ts +0 -155
- package/dist/services/audit-independent/security-audit-service.js +0 -316
- 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/crystallization/crystallization-service.d.ts +0 -239
- package/dist/services/crystallization/crystallization-service.js +0 -397
- package/dist/services/crystallization/crystallization-store.d.ts +0 -75
- package/dist/services/crystallization/crystallization-store.js +0 -193
- package/dist/services/crystallization/crystallization-types.d.ts +0 -313
- package/dist/services/crystallization/crystallization-types.js +0 -299
- package/dist/services/crystallization/evidence-brief-builder.d.ts +0 -237
- package/dist/services/crystallization/evidence-brief-builder.js +0 -240
- package/dist/services/doctor/doctor-service.d.ts +0 -149
- package/dist/services/doctor/doctor-service.js +0 -929
- package/dist/services/filesystem/file-lock.d.ts +0 -11
- package/dist/services/filesystem/file-lock.js +0 -152
- package/dist/services/final-review/final-review-service.d.ts +0 -12
- package/dist/services/final-review/final-review-service.js +0 -52
- package/dist/services/final-review/final-review-types.d.ts +0 -42
- package/dist/services/final-review/final-review-types.js +0 -18
- package/dist/services/job/job-resource-snapshot.d.ts +0 -7
- package/dist/services/job/job-resource-snapshot.js +0 -75
- 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/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/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,43 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 4.0.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 5d01343: Monorepo extraction: peaks-loop 4.0.0-beta.15 ships the new pnpm
|
|
8
|
+
workspace shell with 6 independent packages extracted from the main
|
|
9
|
+
repo as Tier-A zero/low-coupling domains:
|
|
10
|
+
|
|
11
|
+
- peaks-loop-shared (4 utils: fs / paths / result / version)
|
|
12
|
+
- peaks-loop-mut (mutation testing + ECC cache)
|
|
13
|
+
- peaks-loop-doctor (project health check)
|
|
14
|
+
- peaks-loop-crystallization (crystallization pipeline)
|
|
15
|
+
- peaks-loop-final-review (4-dim business review)
|
|
16
|
+
- peaks-loop-audit-independent (security + perf audit)
|
|
17
|
+
|
|
18
|
+
Each subpackage has its own typecheck / build / vitest pipeline; they
|
|
19
|
+
are wired back into the main peaks-loop CLI via workspace:_ protocol.
|
|
20
|
+
Trusted Publishing (OIDC) is wired via .github/workflows/publish.yml
|
|
21
|
+
on push tags v_._._ — no NPM_TOKEN required.
|
|
22
|
+
|
|
23
|
+
Also:
|
|
24
|
+
|
|
25
|
+
- D21: peaks sub-agent finalize command (LLM-side completion signal
|
|
26
|
+
to mark dispatch records done/failed/cancelled; without it records
|
|
27
|
+
would stay queued forever).
|
|
28
|
+
- Trusted Publishing via OIDC — npmjs.com trusted publisher
|
|
29
|
+
configured; npm token removed from ~/.npmrc.
|
|
30
|
+
|
|
31
|
+
### Patch Changes
|
|
32
|
+
|
|
33
|
+
- Updated dependencies [5d01343]
|
|
34
|
+
- peaks-loop-shared@0.1.0
|
|
35
|
+
- peaks-loop-mut@0.1.0
|
|
36
|
+
- peaks-loop-doctor@0.1.0
|
|
37
|
+
- peaks-loop-crystallization@0.1.0
|
|
38
|
+
- peaks-loop-final-review@0.1.0
|
|
39
|
+
- peaks-loop-audit-independent@0.1.0
|
|
40
|
+
|
|
3
41
|
## [Unreleased]
|
|
4
42
|
|
|
5
43
|
## 4.0.0-beta.14 — 2026-07-16
|
|
@@ -34,7 +72,8 @@
|
|
|
34
72
|
> (PEAKS_HOME defaults to `~/.peaks`). Previously, the code resolved
|
|
35
73
|
> `home` to `process.cwd()` when invoked from a project root, producing
|
|
36
74
|
> `<project>/.peaks/state.db` — wrong location for loop engineering
|
|
37
|
-
>
|
|
75
|
+
>
|
|
76
|
+
> - bee sediment data.
|
|
38
77
|
>
|
|
39
78
|
> **Fix**: `src/cli/commands/sediment-commands.ts:664-665` now uses
|
|
40
79
|
> `peaksHome()` from `src/services/sop/sop-paths.ts:29` (which honors
|
|
@@ -59,7 +98,7 @@
|
|
|
59
98
|
|
|
60
99
|
### Status: RELEASED (follow-up to `4.0.0-beta.11`; D-013 wrapper exit-code fix)
|
|
61
100
|
|
|
62
|
-
>
|
|
101
|
+
> \*\*This CHANGELOG entry documents the D-013 follow-up release.
|
|
63
102
|
> Same source tree as `4.0.0-beta.11`; pure fix for the wrapper
|
|
64
103
|
> exit-code bug that previously caused `peaks <unknown>` and
|
|
65
104
|
> `peaks <unknown> --help` to exit 0 with the help banner.
|
|
@@ -68,14 +107,14 @@
|
|
|
68
107
|
> `COMMAND_NOT_FOUND` JSON envelope. ice-cola baseline 27/27 PASS
|
|
69
108
|
> (AC3.9/AC3.10 now functionally correct).
|
|
70
109
|
|
|
71
|
-
>
|
|
110
|
+
> \*\*This CHANGELOG entry documents the SHIPPED 4.0.0-beta.11.
|
|
72
111
|
> It is the post-implementation release of the 4.0.0-beta.10 contract
|
|
73
112
|
> documented at `docs/release/4.0.0-beta.10.md` (runbook filename
|
|
74
113
|
> preserved for cross-reference stability).
|
|
75
114
|
>
|
|
76
115
|
> The 3 slices (del-minimax-worker, hide-role-skills, on-demand-ecc)
|
|
77
116
|
> all landed PASS in this branch — see `peaks workflow verify-pipeline
|
|
78
|
-
|
|
117
|
+
--rid 2026-07-15-cli-surface-cleanup` and the Slice 1/2/3 sediment
|
|
79
118
|
> memories in `.peaks/memory/`.
|
|
80
119
|
>
|
|
81
120
|
> **Version bump rationale** (D-016): 4.0.0-beta.10 was the pre-impl
|
|
@@ -143,15 +182,16 @@
|
|
|
143
182
|
> spawn `<cached>/ecc agent run <name> --json` as a subprocess.
|
|
144
183
|
> RD sub-agent triggered **Gate S3-0**: affaan-m/everything-claude-code
|
|
145
184
|
> has no `ecc` binary; its real structure is `agents/*.md` flat
|
|
146
|
-
>
|
|
147
|
-
>
|
|
185
|
+
>
|
|
186
|
+
> - SKILL.md descriptors. User chose Option B — drop the subprocess
|
|
187
|
+
> model entirely.
|
|
148
188
|
|
|
149
189
|
- **`peaks ecc install`** — downloads affaan-m/everything-claude-code
|
|
150
190
|
from GitHub releases to `~/.peaks/cache/ecc-<sha>/`. Selective
|
|
151
191
|
tarball extraction: ONLY `agents/` subtree (skip `rules/`,
|
|
152
192
|
`commands/`, `settings/`, `docs/`, `README.md`).
|
|
153
193
|
- **`peaks ecc status`** — reads cache manifest, reports version + sha
|
|
154
|
-
|
|
194
|
+
- agent count.
|
|
155
195
|
- **`peaks ecc ls`** — lists cached agents by parsing `agents/*.md`
|
|
156
196
|
frontmatter.
|
|
157
197
|
- **`peaks ecc show <name>`** — outputs the agent's SKILL.md body
|
|
@@ -269,7 +309,7 @@ all present after a fresh workspace init.
|
|
|
269
309
|
audit/business templates (default: skip if present).
|
|
270
310
|
- **5-template boot** — every `peaks workspace init` materialises
|
|
271
311
|
`.peaks/project-scan/{project-scan.md, business-knowledge.md,
|
|
272
|
-
|
|
312
|
+
security-template.md, perf-template.md, audit-output-schema.md}`.
|
|
273
313
|
The 4 audit/business templates are bundled at
|
|
274
314
|
`src/services/workspace/templates/project-scan/*.md` and copied
|
|
275
315
|
verbatim by `scripts/copy-templates.mjs` (post-`tsc` step; tsc
|
|
@@ -381,15 +421,15 @@ exposed two follow-on bugs that the unit suite missed:
|
|
|
381
421
|
|
|
382
422
|
### Sediment (Step 11) — 7 lessons in `.peaks/memory/`
|
|
383
423
|
|
|
384
|
-
| File
|
|
385
|
-
|
|
386
|
-
| `z-code-peaks-loop-9-ide-adapter-vendor-neutrality-adapter.md`
|
|
387
|
-
| `peaks-loop-install-model-getstrongestmodelid-fallback.md`
|
|
388
|
-
| `desktop-application-ide-adapter-z-code-cli.md`
|
|
389
|
-
| `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
|
|
390
|
-
| `2026-07-09-zcode-adapter-overview.md`
|
|
391
|
-
| `peaks-ide-runtime-detect-zcode-only.md`
|
|
392
|
-
| `ide-adapter-detectcurrentmodel-optional-interface-pattern.md`
|
|
424
|
+
| File | Topic |
|
|
425
|
+
| ------------------------------------------------------------------------- | -------------------------------------------------------- |
|
|
426
|
+
| `z-code-peaks-loop-9-ide-adapter-vendor-neutrality-adapter.md` | z-code 9th IDE + vendor-neutrality adapter pattern |
|
|
427
|
+
| `peaks-loop-install-model-getstrongestmodelid-fallback.md` | install no longer hardcodes default model |
|
|
428
|
+
| `desktop-application-ide-adapter-z-code-cli.md` | desktop-app IDE adapter field-degradation decision |
|
|
429
|
+
| `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 |
|
|
430
|
+
| `2026-07-09-zcode-adapter-overview.md` | RID 003 overall summary (project record) |
|
|
431
|
+
| `peaks-ide-runtime-detect-zcode-only.md` | `peaks ide model --current` z-code 4-tier priority chain |
|
|
432
|
+
| `ide-adapter-detectcurrentmodel-optional-interface-pattern.md` | optional interface field extension pattern |
|
|
393
433
|
|
|
394
434
|
### Known follow-ups (S3-cleanup backlog)
|
|
395
435
|
|
|
@@ -406,7 +446,7 @@ None. All 8 pre-existing adapters continue to load without changes. CLI subcomma
|
|
|
406
446
|
|
|
407
447
|
### Added — peaks-solo dispatcher (分诊员)
|
|
408
448
|
|
|
409
|
-
- **`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
|
|
449
|
+
- **`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.
|
|
410
450
|
- **`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).
|
|
411
451
|
- **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.
|
|
412
452
|
|
|
@@ -447,9 +487,9 @@ Loop Engineering crystallization is now the product surface. The 4.0.0-beta.3 li
|
|
|
447
487
|
|
|
448
488
|
- **`.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).
|
|
449
489
|
- **`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.
|
|
450
|
-
- **`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
|
|
490
|
+
- **`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>`.
|
|
451
491
|
- **Unit guard** — `tests/unit/standards/loop-engineering-guidelines.test.ts` enforces the four-section shape for every red line in the file.
|
|
452
|
-
- **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
|
|
492
|
+
- **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.
|
|
453
493
|
|
|
454
494
|
### Added — Bundle share + desktop extension surface (§7A, AC-24 / AC-25 / AC-26)
|
|
455
495
|
|
|
@@ -463,6 +503,7 @@ Loop Engineering crystallization is now the product surface. The 4.0.0-beta.3 li
|
|
|
463
503
|
### Added — SkillHub expansion (5 new tables / non-breaking)
|
|
464
504
|
|
|
465
505
|
The 6+ relation table layout is preserved. 5 new tables added under `.peaks/_runtime/<sessionId>/`:
|
|
506
|
+
|
|
466
507
|
- `loop_release` (002)
|
|
467
508
|
- `loop_bee_relation` (003)
|
|
468
509
|
- loop↔bee share / desktop extension columns (004)
|
|
@@ -502,13 +543,16 @@ Migration is non-breaking: every new column has a DEFAULT and the new tables sit
|
|
|
502
543
|
## 4.0.0-beta.2 — 2026-07-07
|
|
503
544
|
|
|
504
545
|
### Renamed
|
|
546
|
+
|
|
505
547
|
- **`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`.
|
|
506
548
|
|
|
507
549
|
### Changed (Breaking)
|
|
550
|
+
|
|
508
551
|
- **`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"`.
|
|
509
552
|
- **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.
|
|
510
553
|
|
|
511
554
|
### Fixed (post-rename polish)
|
|
555
|
+
|
|
512
556
|
- **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`.
|
|
513
557
|
- **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).
|
|
514
558
|
- **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`.
|
|
@@ -519,11 +563,13 @@ Migration is non-breaking: every new column has a DEFAULT and the new tables sit
|
|
|
519
563
|
- **Video demo copy** — `examples/video-demo/src/copy.ts` `skillWas: 'peaks-solo'` → `skillWas: 'peaks-code'` (legacy label, both locales).
|
|
520
564
|
|
|
521
565
|
### Added
|
|
566
|
+
|
|
522
567
|
- **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.
|
|
523
568
|
- **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.
|
|
524
569
|
- **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`.
|
|
525
570
|
|
|
526
571
|
### Verification
|
|
572
|
+
|
|
527
573
|
- `tsc --noEmit` zero errors
|
|
528
574
|
- Full `vitest run` exit 0 (all 30 touched test files / 265 directly-tested assertions pass)
|
|
529
575
|
- `silent-warning-detector` OK on 481 files
|
|
@@ -642,10 +688,11 @@ Validated on `C:/Users/smallMark/Desktop/peaksclaw/ice-cola` (consumer project).
|
|
|
642
688
|
## [3.0.2] — 2026-07-02 — change-id shim retirement (v2.19.0) + Understand Anything hybrid context (3.0.2)
|
|
643
689
|
|
|
644
690
|
**PATCH bump from 3.0.1**. Two independent slices bundled into one release:
|
|
691
|
+
|
|
645
692
|
- **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.
|
|
646
693
|
- **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.
|
|
647
694
|
|
|
648
|
-
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
|
|
695
|
+
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.
|
|
649
696
|
|
|
650
697
|
### Removed — change-id shim (cleanup post v2.17.0 hard-kill)
|
|
651
698
|
|
|
@@ -668,7 +715,7 @@ The v2.19.0 work shipped as code commits (`f91d71c`, `5186d3d`, `b598612`, `ced8
|
|
|
668
715
|
- 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.
|
|
669
716
|
- 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`).
|
|
670
717
|
|
|
671
|
-
### Round 3 — change-id彻底根治
|
|
718
|
+
### Round 3 — change-id 彻底根治
|
|
672
719
|
|
|
673
720
|
- 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.
|
|
674
721
|
- `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).
|
|
@@ -684,6 +731,7 @@ The v2.19.0 work shipped as code commits (`f91d71c`, `5186d3d`, `b598612`, `ced8
|
|
|
684
731
|
- `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'`.
|
|
685
732
|
|
|
686
733
|
### Round 4 — change-id full root-out (fix 55 test regressions)
|
|
734
|
+
|
|
687
735
|
- Fixed 55 unit tests failing across 15 files (regressions from round-3 rename script + incomplete code paths).
|
|
688
736
|
- `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).
|
|
689
737
|
- 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.
|
|
@@ -716,10 +764,11 @@ The v2.19.0 work shipped as code commits (`f91d71c`, `5186d3d`, `b598612`, `ced8
|
|
|
716
764
|
## [3.0.2] — 2026-07-02 — change-id shim retirement (v2.19.0) + Understand Anything hybrid context (3.0.2)
|
|
717
765
|
|
|
718
766
|
**PATCH bump from 3.0.1**. Two independent slices bundled into one release:
|
|
767
|
+
|
|
719
768
|
- **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.
|
|
720
769
|
- **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.
|
|
721
770
|
|
|
722
|
-
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
|
|
771
|
+
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.
|
|
723
772
|
|
|
724
773
|
### Added — `peaks understand context` (3.0.2 user-facing feature)
|
|
725
774
|
|
|
@@ -728,12 +777,14 @@ The Understand Anything (UA) Claude Code plugin and `@colbymchenry/codegraph` ar
|
|
|
728
777
|
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.
|
|
729
778
|
|
|
730
779
|
**Source routing** (deterministic, decided in `buildUnderstandContext`):
|
|
780
|
+
|
|
731
781
|
- `ua-only` — UA knowledge graph present, no codegraph
|
|
732
782
|
- `ua-missing-fallback-codegraph` — UA absent, codegraph produced evidence
|
|
733
783
|
- `ua-and-codegraph-hybrid` — both present, both contribute (parallel `Promise.all`)
|
|
734
784
|
- `both-missing` — neither produced evidence, exit code 2
|
|
735
785
|
|
|
736
786
|
**Added files (5):**
|
|
787
|
+
|
|
737
788
|
- `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.
|
|
738
789
|
- `src/services/understand/hybrid-types.ts` (39L, new): `UnderstandContextResult` envelope + 4-value source enum + `CodegraphContextBlock`.
|
|
739
790
|
- `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.
|
|
@@ -880,12 +931,12 @@ The 1.x → 2.0 upgrade is an irreversible external side effect (rewrites `~/.pe
|
|
|
880
931
|
|
|
881
932
|
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.
|
|
882
933
|
|
|
883
|
-
| #
|
|
884
|
-
|
|
885
|
-
| 1
|
|
886
|
-
| 2
|
|
887
|
-
| 3
|
|
888
|
-
| 4
|
|
934
|
+
| # | File | Before | After (orig + sibling) | New sibling | Seam |
|
|
935
|
+
| --- | ------------------------------------------------------ | -----: | ---------------------: | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
936
|
+
| 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 |
|
|
937
|
+
| 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 |
|
|
938
|
+
| 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 |
|
|
939
|
+
| 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 |
|
|
889
940
|
|
|
890
941
|
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.
|
|
891
942
|
|
|
@@ -956,12 +1007,12 @@ Each original file gets a sibling `import { ... } from './X-helpers.js'` + `expo
|
|
|
956
1007
|
|
|
957
1008
|
### Dogfood
|
|
958
1009
|
|
|
959
|
-
| #
|
|
960
|
-
|
|
961
|
-
| A
|
|
962
|
-
| B
|
|
963
|
-
| C
|
|
964
|
-
| D
|
|
1010
|
+
| # | Scenario | Verdict | Evidence |
|
|
1011
|
+
| --- | ------------------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------- |
|
|
1012
|
+
| 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 |
|
|
1013
|
+
| B | v2.18.1 verify-pipeline missing-evidence | PASS | Clear `RD evidence missing: ...` violations, no `ReferenceError` |
|
|
1014
|
+
| 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' }` |
|
|
1015
|
+
| D | v2.18.1 prd check-blocks missing 业务场景 block | PASS | `report.ok: false`, `issues: ["Missing required block: 业务场景"]`, no `ReferenceError` |
|
|
965
1016
|
|
|
966
1017
|
### Commits
|
|
967
1018
|
|
|
@@ -992,7 +1043,7 @@ Each original file gets a sibling `import { ... } from './X-helpers.js'` + `expo
|
|
|
992
1043
|
- `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.
|
|
993
1044
|
- `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.
|
|
994
1045
|
- `/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).
|
|
995
|
-
- 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
|
|
1046
|
+
- 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).
|
|
996
1047
|
- 6 new test cases in `tests/unit/services/session/binding-store.test.ts:151-242`:
|
|
997
1048
|
- **Case A:** 2 instances, same `callerId`, different `pid` → 2 distinct sids
|
|
998
1049
|
- **Case B:** 2 instances, same `callerId`, same `pid`, same outer-session-id → 1 sid (auto-resume)
|
|
@@ -1030,12 +1081,12 @@ Each original file gets a sibling `import { ... } from './X-helpers.js'` + `expo
|
|
|
1030
1081
|
|
|
1031
1082
|
### Dogfood (ice-cola NestJS project, 2026-06-29-session-2e81dc)
|
|
1032
1083
|
|
|
1033
|
-
| #
|
|
1034
|
-
|
|
1035
|
-
| A
|
|
1036
|
-
| B
|
|
1037
|
-
| C
|
|
1038
|
-
| D
|
|
1084
|
+
| # | Scenario | Verdict | Evidence |
|
|
1085
|
+
| --- | ----------------------------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1086
|
+
| 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 |
|
|
1087
|
+
| B | peaks doctor stale-binding scan | PASS | 0 stale bindings, ttl=300000ms, v2.16.0 schema surface intact |
|
|
1088
|
+
| 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 |
|
|
1089
|
+
| 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 |
|
|
1039
1090
|
|
|
1040
1091
|
**Dogfood verdict:** 3.5 / 4 pass; `recommend_v2.18.0_commit: true`.
|
|
1041
1092
|
|
|
@@ -1074,7 +1125,7 @@ The first v2.18.0 release deferred two open items to a redo slice; both are now
|
|
|
1074
1125
|
### Feature — binding-store v2 sentinel (v2.16.0-alpha + v2.17.0)
|
|
1075
1126
|
|
|
1076
1127
|
- `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> }`.
|
|
1077
|
-
- `InstanceRecord` = `{ startedAt, roles: string[], callerId, lastHeartbeat }` — `roles` accumulates as the Claude instance activates multiple peaks
|
|
1128
|
+
- `InstanceRecord` = `{ startedAt, roles: string[], callerId, lastHeartbeat }` — `roles` accumulates as the Claude instance activates multiple peaks-\* skills (solos → rd → qa all share one sid).
|
|
1078
1129
|
- Auto-resume: same callerId reuses the same sid; different callers get different sids in the same `instances` map.
|
|
1079
1130
|
- `dropStale(projectRoot, ttlMs)` for Doctor integration.
|
|
1080
1131
|
|
|
@@ -1086,7 +1137,7 @@ The first v2.18.0 release deferred two open items to a redo slice; both are now
|
|
|
1086
1137
|
|
|
1087
1138
|
### Feature — D2 Claude-instance-level hard-exclusive sid
|
|
1088
1139
|
|
|
1089
|
-
- Same Claude instance keeps one sid across multiple peaks
|
|
1140
|
+
- Same Claude instance keeps one sid across multiple peaks-\* skill activations (peaks-code → peaks-rd → peaks-qa).
|
|
1090
1141
|
- `/compact` resume: same outer-session-id reuses the same sid (post-compact-resume v2.11.0 D7 alignment).
|
|
1091
1142
|
|
|
1092
1143
|
### Feature — Doctor stale-binding scan (AC-10)
|
|
@@ -1119,7 +1170,7 @@ The first v2.18.0 release deferred two open items to a redo slice; both are now
|
|
|
1119
1170
|
|
|
1120
1171
|
Recommended scenarios before next release (see `peaks/_runtime/2026-06-29-session-88411f/txt/handoff-2026-06-29-v2-17-0.md` for details):
|
|
1121
1172
|
|
|
1122
|
-
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.
|
|
1173
|
+
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.
|
|
1123
1174
|
2. **D1 conflict detection**: 2 instances both targeting the same source file. Verify each writes to its own session-scoped artifact directory.
|
|
1124
1175
|
3. **`/compact` resume**: run `peaks code <goal>`, `/compact`, continue. Verify same sid reused.
|
|
1125
1176
|
4. **Doctor stale**: kill -9 a Claude instance, run `peaks doctor`, verify stale binding listed + `--cleanup-stale` works.
|
|
@@ -1235,11 +1286,13 @@ Recommended scenarios before next release (see `peaks/_runtime/2026-06-29-sessio
|
|
|
1235
1286
|
- **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.
|
|
1236
1287
|
|
|
1237
1288
|
### Test results
|
|
1289
|
+
|
|
1238
1290
|
- 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**.
|
|
1239
1291
|
- Existing code tests (mode-gate × 81, post-compact × 11) pass unchanged.
|
|
1240
1292
|
- Full unit suite baseline 4394 → 4680 passing (286 added). 0 new failures; pre-existing 7 unrelated failures unchanged.
|
|
1241
1293
|
|
|
1242
1294
|
### Out-of-scope
|
|
1295
|
+
|
|
1243
1296
|
- 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.
|
|
1244
1297
|
- `peaks hooks install` — slice is code-only. Hooks remain user-only.
|
|
1245
1298
|
- Cleaning the 88b27d session's stale presence on disk — slice ships the detection + auto-clear, does NOT proactively touch the live tree.
|
|
@@ -1262,12 +1315,14 @@ slice-2026-06-28-layered-dag PRD: 大需求(1 周内做不完)= 基础先行 +
|
|
|
1262
1315
|
4 个 PRD + 4 个 service + 4 个 CLI 文件 + 4 个 test 文件,共 **17 个新命令 + 63 个新测试通过**。
|
|
1263
1316
|
|
|
1264
1317
|
**G11 上游 tag 同步**(slice-2026-06-28-fork-cli):
|
|
1318
|
+
|
|
1265
1319
|
- 5 commands: `peaks fork status` / `upstream-check` / `sync-plan` / `sync` / `sync-verify`
|
|
1266
1320
|
- 持久化 `.peaks/fork-state.json` (baseline + history)
|
|
1267
1321
|
- `recommendStableTags` 过滤 pre-release 标签(alpha/beta/rc/dev/preview)
|
|
1268
1322
|
- 15 tests pass
|
|
1269
1323
|
|
|
1270
1324
|
**G13 存量影响面扫描**(slice-2026-06-28-impact-cli):
|
|
1325
|
+
|
|
1271
1326
|
- 2 commands: `peaks impact scan --files <list>` / `peaks impact must-check --files <list>`
|
|
1272
1327
|
- 手写 glob 匹配(`**` / `*`),无 AST 依赖
|
|
1273
1328
|
- 10 个默认业务流(用户管理 / 权限校验 / 登录流程 / Skill 权限 / 数据列表 / API 网关 / DB schema / ...)
|
|
@@ -1275,6 +1330,7 @@ slice-2026-06-28-layered-dag PRD: 大需求(1 周内做不完)= 基础先行 +
|
|
|
1275
1330
|
- 13 tests pass
|
|
1276
1331
|
|
|
1277
1332
|
**G14 轻量回归 critical-paths**(slice-2026-06-28-smoke-cli):
|
|
1333
|
+
|
|
1278
1334
|
- 4 commands: `peaks smoke define` / `run` / `run-and-repair` / `add-path`
|
|
1279
1335
|
- 持久化 `.peaks/smoke-paths.json`
|
|
1280
1336
|
- 5 个 source (prd-business-scenario / boss-stated / historical-incident / impact-must-check / manual)
|
|
@@ -1282,6 +1338,7 @@ slice-2026-06-28-layered-dag PRD: 大需求(1 周内做不完)= 基础先行 +
|
|
|
1282
1338
|
- 16 tests pass
|
|
1283
1339
|
|
|
1284
1340
|
**G15 上线观察期状态机**(slice-2026-06-28-release-cli):
|
|
1341
|
+
|
|
1285
1342
|
- 7 commands: `peaks release plan` / `canary` / `promote` / `watch` / `done` / `rollback` / `hotfix`
|
|
1286
1343
|
- 8 阶段状态机: planned → canary-10 → canary-50 → promoted → watching → done
|
|
1287
1344
|
- side branches: → rolled-back (from any pre-done), → hotfixed (from watching)
|
|
@@ -1292,6 +1349,7 @@ slice-2026-06-28-layered-dag PRD: 大需求(1 周内做不完)= 基础先行 +
|
|
|
1292
1349
|
**触动:** 新增 4 个 service / 4 个 CLI / 4 个 test 文件 = **12 个新文件**。CLI 注册全在 `src/cli/program.ts`,**不触动** transition gates / hard contracts / Karpathy 4 / sub-agent 协议 / mode-gate。
|
|
1293
1350
|
|
|
1294
1351
|
**已知未实现**(后续切片):
|
|
1352
|
+
|
|
1295
1353
|
- 真实 git fetch + merge(G11)
|
|
1296
1354
|
- 真实 Playwright 路径执行(G14)
|
|
1297
1355
|
- 真实 k8s rollout / LB config / 监控集成(G15)
|
|
@@ -1301,23 +1359,27 @@ slice-2026-06-28-layered-dag PRD: 大需求(1 周内做不完)= 基础先行 +
|
|
|
1301
1359
|
4 个 service + 4 个 CLI 文件 + 4 个 test 文件,共 **16 个新命令 + 40+ 个新测试通过**。所有 CLI 都遵循 12 Gaps 核心原则: user 在循环里 = 业务/产品审阅,不参与技术决策。
|
|
1302
1360
|
|
|
1303
1361
|
**G3 prd 4 必填块**(slice-2026-06-28-prd-blocks):
|
|
1362
|
+
|
|
1304
1363
|
- `peaks prd check-blocks <rid>` — 验证 4 必填块(业务场景/边界/UI 装配/上游基线)+ 业务禁区子节
|
|
1305
1364
|
- 上游基线仅在 fork 项目上 required(检测 `.peaks/fork-state.json`)
|
|
1306
1365
|
- 8 tests pass
|
|
1307
1366
|
|
|
1308
1367
|
**G4 user touchpoint classifier**(slice-2026-06-28-user-touchpoints):
|
|
1368
|
+
|
|
1309
1369
|
- 3 commands: `peaks code gate-classify` / `peaks code user-touchpoints` / `peaks code commit-boundary-actions`
|
|
1310
1370
|
- 14 个 Code gate 静态分类: business / tech / mode-selection / commit-boundary / commit-floor
|
|
1311
1371
|
- `userShouldReview`: always / business-only / never
|
|
1312
1372
|
- 7 tests pass
|
|
1313
1373
|
|
|
1314
1374
|
**G1 slice 业务审阅**(slice-2026-06-28-slice-review):
|
|
1375
|
+
|
|
1315
1376
|
- 4 commands: `peaks slice review` / `score` / `accept` / `reject`
|
|
1316
1377
|
- 4 个默认 review item: business-match / boundary-cases / ui-assembly / mergeable
|
|
1317
1378
|
- 12 Gaps 阈值: avg >= 3 AND no item <= 2 → accepted
|
|
1318
1379
|
- 16 tests pass
|
|
1319
1380
|
|
|
1320
1381
|
**G5 QA 业务视角验收**(slice-2026-06-28-qa-business):
|
|
1382
|
+
|
|
1321
1383
|
- 4 commands: `peaks qa business-review` / `business-score` / `business-accept` / `business-reject`
|
|
1322
1384
|
- 6 个默认 review item: business-flow / req-coverage / boundary-cases / ui-assembly / exception-tone / mergeable
|
|
1323
1385
|
- 同一阈值(avg >= 3, no item <= 2)
|
|
@@ -1330,29 +1392,35 @@ slice-2026-06-28-layered-dag PRD: 大需求(1 周内做不完)= 基础先行 +
|
|
|
1330
1392
|
5 个 PRD 一次性收尾剩余 5 个 Gaps。每 G 一个 service + CLI + test,**10 个新文件 + 30+ 个新测试通过**。
|
|
1331
1393
|
|
|
1332
1394
|
**G6 跨 slice 集成**(slice-2026-06-28-slice-integrate):
|
|
1395
|
+
|
|
1333
1396
|
- `peaks slice-integrate --slices <id1,id2,...>` — 验证多个 slice 的公共契约不冲突(重复 export / signature drift)
|
|
1334
1397
|
- 5 tests pass
|
|
1335
1398
|
|
|
1336
1399
|
**G7 文档自动化**(slice-2026-06-28-doc):
|
|
1400
|
+
|
|
1337
1401
|
- `peaks doc generate-skill --name --from <commands-dir>` — 扫描 program.command() 自动生成 SKILL.md skeleton
|
|
1338
1402
|
- `peaks doc changelog-suggest --since <ref>` — git log 解析 conventional commit + 生成 [Unreleased] 块
|
|
1339
1403
|
- 6 tests pass
|
|
1340
1404
|
|
|
1341
1405
|
**G8 存量代码 smell 扫描**(slice-2026-06-28-legacy):
|
|
1406
|
+
|
|
1342
1407
|
- `peaks legacy-detect --dir <path>` — TODO/FIXME/HACK/console.log/any-type/large-file/ts-ignore 启发式扫描
|
|
1343
1408
|
- 5 tests pass
|
|
1344
1409
|
|
|
1345
1410
|
**G9 角色 RBAC**(slice-2026-06-28-role):
|
|
1411
|
+
|
|
1346
1412
|
- `peaks role list/add/grant/check` — 4 命令,持久化 .peaks/role-registry.json
|
|
1347
1413
|
- `--preset senior-fe` 一键预置 12 Gaps 高级前端权限
|
|
1348
1414
|
- 5 tests pass
|
|
1349
1415
|
|
|
1350
1416
|
**G10 复杂度估算**(slice-2026-06-28-complexity):
|
|
1417
|
+
|
|
1351
1418
|
- `peaks complexity-estimate --files <list>` — 按 LOC + exports + async 估算 trivial/simple/complex
|
|
1352
1419
|
- 与 G2 字段(complexity tier)对齐,驱动 user-attended vs overnight 排程
|
|
1353
1420
|
- 5 tests pass
|
|
1354
1421
|
|
|
1355
1422
|
**Dogfood 验证(ice-cola NestJS 项目):**
|
|
1423
|
+
|
|
1356
1424
|
- peaks legacy-detect (164 文件, smells=high, 406 个 any-type, 15 个 large-file)
|
|
1357
1425
|
- peaks role add senior-fe --preset senior-fe + role list + role check (granted/not)
|
|
1358
1426
|
- peaks complexity-estimate (auth files → complex, 41 lines + hasAsync)
|
|
@@ -1377,6 +1445,7 @@ slice-2026-06-28-layered-dag PRD: 大需求(1 周内做不完)= 基础先行 +
|
|
|
1377
1445
|
- `tests/unit/services/context/tokenizer.test.ts:23` — `fetchedAt` 硬编码 `2026-06-21` 距今 7 天触发 `timeDecayScore 0.886 < 0.9` 期望,改 `new Date().toISOString()` 符合"fresh fetch"测试意图
|
|
1378
1446
|
|
|
1379
1447
|
**测试结果:**
|
|
1448
|
+
|
|
1380
1449
|
- silent-warning-detector: 2 violations → 0
|
|
1381
1450
|
- `tests/unit/services/context/`: 49/50 → 50/50
|
|
1382
1451
|
- 全量 vitest 4819 tests:3 failed → 2 failed(剩下 2 个是并发 race condition,单跑 context 50/50 全过,pre-existing)
|
|
@@ -1388,19 +1457,23 @@ slice-2026-06-28-layered-dag PRD: 大需求(1 周内做不完)= 基础先行 +
|
|
|
1388
1457
|
**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`.
|
|
1389
1458
|
|
|
1390
1459
|
### Cleanup
|
|
1460
|
+
|
|
1391
1461
|
- **`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.
|
|
1392
1462
|
- **`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).
|
|
1393
1463
|
- **`.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.
|
|
1394
1464
|
|
|
1395
1465
|
### Refactor
|
|
1466
|
+
|
|
1396
1467
|
- **`~/.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.
|
|
1397
1468
|
- **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`.
|
|
1398
1469
|
|
|
1399
1470
|
### Test results
|
|
1471
|
+
|
|
1400
1472
|
- `pnpm vitest run tests/unit/doctor.test.ts` — 50/50 pass
|
|
1401
1473
|
- `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.
|
|
1402
1474
|
|
|
1403
1475
|
### Out-of-scope
|
|
1476
|
+
|
|
1404
1477
|
- Push / tag / npm publish — full-auto mode boundary = commit only; user-only.
|
|
1405
1478
|
- Re-implementing peaks-companion CLI — user chose delete over revive.
|
|
1406
1479
|
- Cleaning `~/.peaks/companion/` empty dir — left in place; harmless.
|
|
@@ -1412,14 +1485,17 @@ slice-2026-06-28-layered-dag PRD: 大需求(1 周内做不完)= 基础先行 +
|
|
|
1412
1485
|
**PATCH bump from 2.14.0** (carry-forward from v2.13.3 AC-2 partial fix + npm 11.x config rename).
|
|
1413
1486
|
|
|
1414
1487
|
### Bug fixes
|
|
1488
|
+
|
|
1415
1489
|
- `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.
|
|
1416
1490
|
- `.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.
|
|
1417
1491
|
|
|
1418
1492
|
### Test results
|
|
1493
|
+
|
|
1419
1494
|
- `tests/unit/scripts/prepublish-build.test.ts` (NEW, 6 cases) — covers execFile happy path + Windows ps1 fallback + error propagation + version validation + ENOENT regression
|
|
1420
1495
|
- `node scripts/prepublish-build.mjs` end-to-end: `[prepublish-build] build OK` exit 0 (verified on this Windows session)
|
|
1421
1496
|
|
|
1422
1497
|
### Out-of-scope
|
|
1498
|
+
|
|
1423
1499
|
- 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.
|
|
1424
1500
|
|
|
1425
1501
|
---
|
|
@@ -1540,7 +1616,7 @@ The four defects all stem from the v2.13.0 two-axis convention landing debt: the
|
|
|
1540
1616
|
|
|
1541
1617
|
**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).
|
|
1542
1618
|
|
|
1543
|
-
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.
|
|
1619
|
+
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.
|
|
1544
1620
|
|
|
1545
1621
|
### Bug fixes
|
|
1546
1622
|
|
|
@@ -1576,9 +1652,9 @@ The four defects all stem from the v2.13.0 two-axis convention landing debt: the
|
|
|
1576
1652
|
|
|
1577
1653
|
### Multi-CC commit boundaries
|
|
1578
1654
|
|
|
1579
|
-
| Commit tag | Scope
|
|
1580
|
-
|
|
1581
|
-
| v2.13.3
|
|
1655
|
+
| Commit tag | Scope |
|
|
1656
|
+
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1657
|
+
| 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 |
|
|
1582
1658
|
|
|
1583
1659
|
### Verified (peaks code dogfood + QA on this session)
|
|
1584
1660
|
|
|
@@ -1654,9 +1730,9 @@ v2.13.1 shipped with a BLOCKER bug found via post-release dogfood: `aggregateVer
|
|
|
1654
1730
|
|
|
1655
1731
|
### Multi-CC commit boundaries
|
|
1656
1732
|
|
|
1657
|
-
| Commit tag | Scope
|
|
1658
|
-
|
|
1659
|
-
| v2.13.2
|
|
1733
|
+
| Commit tag | Scope |
|
|
1734
|
+
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1735
|
+
| 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 |
|
|
1660
1736
|
|
|
1661
1737
|
### Verified (peaks code dogfood + QA on this session)
|
|
1662
1738
|
|
|
@@ -1718,9 +1794,9 @@ peaks-code previously received 5 heterogeneous signals (security-audit, perf-aud
|
|
|
1718
1794
|
|
|
1719
1795
|
### Multi-CC commit boundaries
|
|
1720
1796
|
|
|
1721
|
-
| Commit tag | Scope
|
|
1722
|
-
|
|
1723
|
-
| v2.13.1
|
|
1797
|
+
| Commit tag | Scope |
|
|
1798
|
+
| ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1799
|
+
| 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 |
|
|
1724
1800
|
|
|
1725
1801
|
### Verified (peaks code dogfood on this session)
|
|
1726
1802
|
|
|
@@ -1784,10 +1860,10 @@ Adapter-driven protocol (no hard-coded IDE names): `IdeAdapter.compact?: IdeComp
|
|
|
1784
1860
|
|
|
1785
1861
|
### Multi-CC commit boundaries
|
|
1786
1862
|
|
|
1787
|
-
| Commit tag
|
|
1788
|
-
|
|
1863
|
+
| Commit tag | Scope |
|
|
1864
|
+
| --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1789
1865
|
| 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 |
|
|
1790
|
-
| `a8b9804`
|
|
1866
|
+
| `a8b9804` | In-session dogfood limitation documented (current ad-hoc Claude Code session cannot be externally compacted — reserved for follow-up PreToolUse-hook slice) |
|
|
1791
1867
|
|
|
1792
1868
|
### Verified (peaks code dogfood on this session)
|
|
1793
1869
|
|
|
@@ -1798,7 +1874,7 @@ Adapter-driven protocol (no hard-coded IDE names): `IdeAdapter.compact?: IdeComp
|
|
|
1798
1874
|
- `post-compact-detect` after pre-compact: `shouldAutoResume: true`, `reason: post-compact-match` ✓
|
|
1799
1875
|
- Trae IDE (no `compact` profile): `ratio: 0` + `source: conservative-fallback` + `below-threshold` (no auto-fire on missing signal — by design) ✓
|
|
1800
1876
|
- `pnpm tsc --noEmit`: clean
|
|
1801
|
-
- `pnpm vitest run` (full suite): `4317 / 4317` pass + 17 skipped (2 pre-existing baseline failures on session-checkpoint + _archive-removal-guard unchanged)
|
|
1877
|
+
- `pnpm vitest run` (full suite): `4317 / 4317` pass + 17 skipped (2 pre-existing baseline failures on session-checkpoint + \_archive-removal-guard unchanged)
|
|
1802
1878
|
|
|
1803
1879
|
### Out-of-scope (NOT changed)
|
|
1804
1880
|
|
|
@@ -1855,17 +1931,17 @@ v2.13.0 hard-deletes the legacy paths.
|
|
|
1855
1931
|
|
|
1856
1932
|
### Multi-CC commit boundaries
|
|
1857
1933
|
|
|
1858
|
-
| Group | Tiers | Commit tag
|
|
1859
|
-
|
|
1860
|
-
| A
|
|
1861
|
-
| B
|
|
1862
|
-
| C
|
|
1863
|
-
| D
|
|
1864
|
-
| E
|
|
1934
|
+
| Group | Tiers | Commit tag | Scope |
|
|
1935
|
+
| ----- | ----- | ----------------- | --------------------------------------------------------------------- |
|
|
1936
|
+
| A | 1+2+3 | v2.12.0-alpha.1 | Templates + new skills (fa082f5) |
|
|
1937
|
+
| B | 4+5 | v2.12.0-alpha.2 | 5→3 fanout collapse + prereq migration (6485f1c) |
|
|
1938
|
+
| C | 6 | v2.12.0-alpha.3 | peaks-txt sediment extension (ab2757b) |
|
|
1939
|
+
| D | 7 | v2.12.0-alpha.4 | fan-out SKILL.md updates (b6c4fae) |
|
|
1940
|
+
| E | 8+9 | v2.12.0 (release) | Decision records + migration + CHANGELOG + version bump (this commit) |
|
|
1865
1941
|
|
|
1866
1942
|
### Zero regression (verified per group)
|
|
1867
1943
|
|
|
1868
|
-
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.
|
|
1944
|
+
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.
|
|
1869
1945
|
|
|
1870
1946
|
### Out-of-scope (NOT changed)
|
|
1871
1947
|
|
|
@@ -2046,6 +2122,7 @@ LLM was creating top-level `.peaks/_runtime/<change-id>/` siblings of `.peaks/_r
|
|
|
2046
2122
|
- Bumps `package.json#version` from 2.9.1 to 2.9.2
|
|
2047
2123
|
|
|
2048
2124
|
**Pre-existing violations preserved as-is** (intentional historical/forbidden documentation, all explicitly labeled):
|
|
2125
|
+
|
|
2049
2126
|
- 6 ban-explanation memory files under `.peaks/memory/` (slice 005 / 2.8.3 / 2.7.1 lessons)
|
|
2050
2127
|
- 28 historic session files under `.peaks/_runtime/2026-06-*/`
|
|
2051
2128
|
- 5 historic dispatch records under `.peaks/_sub_agents/`
|
|
@@ -2142,37 +2219,37 @@ the four-step recipe; no data is lost.
|
|
|
2142
2219
|
final root-out of a 2.8.0-era orphan (`.peaks/2026-06-22-cc-connect-orphan-cleanup/`,
|
|
2143
2220
|
4 files, 28 KB, untracked) and pins the rule across FOUR layers so a
|
|
2144
2221
|
regression cannot survive:
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2152
|
-
|
|
2153
|
-
|
|
2154
|
-
|
|
2155
|
-
|
|
2156
|
-
|
|
2157
|
-
|
|
2158
|
-
|
|
2159
|
-
|
|
2160
|
-
|
|
2161
|
-
|
|
2162
|
-
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
|
|
2174
|
-
|
|
2175
|
-
|
|
2222
|
+
1. **`.gitignore` fnmatch rule** —
|
|
2223
|
+
`.peaks/[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-*/` blocks any
|
|
2224
|
+
future untracked date-prefix sibling at `.peaks/_runtime/<seg>/`. Path-anchored
|
|
2225
|
+
so it does not over-match (`.peaks/_runtime/<date>/` is still ignored
|
|
2226
|
+
by the existing `.peaks/_runtime/` rule, not this one).
|
|
2227
|
+
2. **Vitest guard** at
|
|
2228
|
+
`tests/unit/workspace/top-level-change-id-guard.test.ts` (8 cases)
|
|
2229
|
+
pins the gitignore rule literal, asserts fnmatch matches a synthetic
|
|
2230
|
+
candidate, asserts it does NOT match `.peaks/_runtime/-nested`
|
|
2231
|
+
candidates, scans the live working tree for orphan date-prefix
|
|
2232
|
+
siblings, scans `git ls-files` for tracked escapes, asserts both
|
|
2233
|
+
`CLAUDE.md` and `.peaks/PROJECT.md` carry the ban wording, AND
|
|
2234
|
+
asserts the CLI help text (`init-command.ts`) teaches the
|
|
2235
|
+
`.peaks/_runtime/current-change` binding path + the four
|
|
2236
|
+
migration verbs (inspect / move / delete / unlink / re-run).
|
|
2237
|
+
3. **Source-code redirect** —
|
|
2238
|
+
`src/shared/change-id.ts#setCurrentChangeId` now defaults to
|
|
2239
|
+
`{ form: 'file' }` (was `'symlink'`); the file form writes ONLY
|
|
2240
|
+
`.peaks/_runtime/current-change` and never creates
|
|
2241
|
+
`.peaks/_runtime/<changeId>/`. The legacy `'symlink'` form is kept for
|
|
2242
|
+
back-compat reads but is no longer written by `peaks workspace init`.
|
|
2243
|
+
`src/services/workspace/workspace-service.ts#initWorkspace`
|
|
2244
|
+
pre-flights the existence of `.peaks/_runtime/<changeId>/` and throws
|
|
2245
|
+
`LegacyChangeIdSiblingError` if found.
|
|
2246
|
+
4. **CLI help-text guard** — `src/cli/commands/workspace/init-command.ts`
|
|
2247
|
+
rewrites the `init` command description and `--change-id` option
|
|
2248
|
+
description so an LLM reading `peaks workspace init --help` is
|
|
2249
|
+
taught the correct path (`.peaks/_runtime/current-change`) instead
|
|
2250
|
+
of the legacy `.peaks/_runtime/<change-id>/` sibling dir. A new catch block
|
|
2251
|
+
surfaces `LegacyChangeIdSiblingError` with the 4-step migration
|
|
2252
|
+
recipe in the JSON envelope.
|
|
2176
2253
|
- **`CLI_VERSION`** sync bumped 2.8.2 → 2.8.3 (regenerated via
|
|
2177
2254
|
`scripts/sync-version.mjs` from `package.json#version`).
|
|
2178
2255
|
|
|
@@ -2298,7 +2375,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2298
2375
|
`src/services/companion/*` module + `src/cli/commands/companion.ts`
|
|
2299
2376
|
CLI + 14 `tests/unit/companion/*` test files are removed
|
|
2300
2377
|
(~7,700 lines deleted, 0 added). The `peaks companion install|setup|
|
|
2301
|
-
|
|
2378
|
+
start|stop|bind|status|restart|verify|token|qr` command tree is gone
|
|
2302
2379
|
along with the `peaks scan companion-binary` sub-command and the
|
|
2303
2380
|
`capability:companion-binary-resolution` doctor check. Companion
|
|
2304
2381
|
types (`CompanionConfig`, `CompanionWeixinConfig`, `CompanionChannel`,
|
|
@@ -2326,7 +2403,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2326
2403
|
- **`@alibaba-group/open-code-review` is now a peer dependency** —
|
|
2327
2404
|
moved from `optionalDependencies` to `peerDependencies` with
|
|
2328
2405
|
`peerDependenciesMeta."@alibaba-group/open-code-review".optional =
|
|
2329
|
-
|
|
2406
|
+
true`. The peer hint lets npm skip the optional resolution entirely
|
|
2330
2407
|
during global install; users who want second-opinion reviews via
|
|
2331
2408
|
`peaks code-review run-ocr` install it manually with
|
|
2332
2409
|
`npm i -g @alibaba-group/open-code-review`. Install hint copy in
|
|
@@ -2358,8 +2435,8 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2358
2435
|
- **Defense-in-depth comment cites H6 verbatim (Plan 5 R1-W3 MED)** —
|
|
2359
2436
|
`src/services/rd/impl.ts` defense-in-depth check now cites spec H6
|
|
2360
2437
|
(CLI 计算裁决) directly. The accompanying `docs/superpowers/specs/
|
|
2361
|
-
|
|
2362
|
-
|
|
2438
|
+
2026-06-21-context-audit-redesign-design.md` gained a new §4.3
|
|
2439
|
+
_战术审计_ subsection that consolidates §3.2 / §3.3 / H6 / H8 / Phase 3
|
|
2363
2440
|
AC-2 into a single canonical anchor (previous code references to
|
|
2364
2441
|
`§4.2` updated to `§4.3`).
|
|
2365
2442
|
|
|
@@ -2376,7 +2453,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2376
2453
|
is in the test name, not just the body.
|
|
2377
2454
|
|
|
2378
2455
|
- **Atomic-write crash test (Plan 5 R1-W5 LOW)** — new test
|
|
2379
|
-
|
|
2456
|
+
_unlinks .tmp when rename throws_ pins the catch→unlink fallback in
|
|
2380
2457
|
`writeImpl` (EISDIR-triggered real-rename failure). Mutation probe
|
|
2381
2458
|
KILLED: commenting out the unlink makes the test fail at the
|
|
2382
2459
|
`existsSync(tmp)` assertion.
|
|
@@ -2478,7 +2555,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2478
2555
|
`C:\Users\name\.trae\agents` and a Mac user gets
|
|
2479
2556
|
`/Users/name/.trae/agents`. No hardcoded `/Users/...` or `C:\...` in
|
|
2480
2557
|
any 5-IDE `awaitBatch` path. The 4 new IDE paths (`trae / trae-cn /
|
|
2481
|
-
|
|
2558
|
+
codex / cursor`) follow the same discipline.
|
|
2482
2559
|
- **`runDag` cancel-on-fail correctness (slice 1.2.c)** — when any leaf
|
|
2483
2560
|
fails, in-flight sub-agents in the same batch receive a cancel signal
|
|
2484
2561
|
at the envelope level; the orchestrator no longer waits for them to
|
|
@@ -2569,11 +2646,11 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2569
2646
|
4. `scanExportsInFile` now matches `export default function name()`
|
|
2570
2647
|
and `export default class Name`; `importedNameCount` now treats
|
|
2571
2648
|
re-exports (`export { x } from './y'`, `export type { T } from
|
|
2572
|
-
|
|
2573
|
-
|
|
2574
|
-
|
|
2649
|
+
'./y'`) as consumer references.
|
|
2650
|
+
Bonus: `OrphanScanOptions.baseRef` lets the scan diff against an
|
|
2651
|
+
arbitrary git ref (default: `HEAD`) for branch-vs-main reviews.
|
|
2575
2652
|
- **karpathy-service code-fence skip (Slice 2.6.1.B)** — `peaks scan
|
|
2576
|
-
|
|
2653
|
+
karpathy` no longer flags anti-pattern phrases (TODO, "should be
|
|
2577
2654
|
fine", "maybe", "probably") when they appear inside fenced markdown
|
|
2578
2655
|
code blocks. Illustrative code snippets were eroding trust in the
|
|
2579
2656
|
structural scanner. The 4 guideline-marker tests
|
|
@@ -2596,7 +2673,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2596
2673
|
byte-identical.
|
|
2597
2674
|
- **KARPATHY_REVIEW heading-anchored gate (Slice 2.6.1.F)** — the L3
|
|
2598
2675
|
LOW (the 4 guideline `mustContain` substring markers could be
|
|
2599
|
-
spoofed by any file that just
|
|
2676
|
+
spoofed by any file that just _mentioned_ the marker names as
|
|
2600
2677
|
prose) is fixed by a new `headingMustContain: string[]` field on
|
|
2601
2678
|
`ArtifactPrerequisite`. `KARPATHY_REVIEW` now requires each of
|
|
2602
2679
|
the 4 guidelines to appear as an actual markdown heading
|
|
@@ -2613,8 +2690,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2613
2690
|
|
|
2614
2691
|
- **L2-install dogfood verification (Slice 2.6.1.D)** — confirmed
|
|
2615
2692
|
end-to-end on a temp HOME that the 2.6.0 tarball's `postinstall`
|
|
2616
|
-
creates `~/.claude/agents/karpathy-reviewer.md` (15.4 KB, mode
|
|
2617
|
-
0600) and the matching `.peaks-managed` marker (245 bytes, JSON
|
|
2693
|
+
creates `~/.claude/agents/karpathy-reviewer.md` (15.4 KB, mode 0600) and the matching `.peaks-managed` marker (245 bytes, JSON
|
|
2618
2694
|
with `version`, `kind`, `agentName`, `sourcePath`, `contentSha256`).
|
|
2619
2695
|
The 8-platform skill fan-out also confirmed (codex, cursor, trae,
|
|
2620
2696
|
trae-cn, qoder, tongyi-lingma, hermes, openclaw). After Slice E,
|
|
@@ -2644,7 +2720,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2644
2720
|
title-case section markers (Think Before Coding / Simplicity First /
|
|
2645
2721
|
Surgical Changes / Goal-Driven Execution). CLI error code
|
|
2646
2722
|
`PREREQUISITES_MISSING`. Escape hatch: `peaks request transition
|
|
2647
|
-
|
|
2723
|
+
--allow-incomplete --confirm` (assisted mode).
|
|
2648
2724
|
- **Karpathy prompt-injection across the full RD surface** (slice 1) —
|
|
2649
2725
|
4-layer guard: SKILL.md body + 3 reference docs
|
|
2650
2726
|
(`mandatory-tech-doc.md`, `rd-fanout-contracts.md`,
|
|
@@ -2666,7 +2742,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2666
2742
|
endpoints / components / stores / mocks in the consumer project
|
|
2667
2743
|
before any new code is written. `--project --format --scope --max-per-kind`
|
|
2668
2744
|
options; output feeds the tech-doc's `## Existing API or Component
|
|
2669
|
-
|
|
2745
|
+
Inventory` section. New service
|
|
2670
2746
|
`src/services/scan/api-surface-service.ts` (~280 lines).
|
|
2671
2747
|
- **`peaks scan orphan` CLI** (slice 4) — 4-kind orphan detection
|
|
2672
2748
|
(exportOrphan / importOrphan / cliSubcommandOrphan /
|
|
@@ -2783,8 +2859,8 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2783
2859
|
`references/checkpoint-resume.md` + `references/periodic-checkpoint.md`, but
|
|
2784
2860
|
SKILL.md body only mentioned them in a single line. New Claude Code sessions
|
|
2785
2861
|
that load SKILL.md never learned the optimization existed. `### Peaks-Loop
|
|
2786
|
-
|
|
2787
|
-
|
|
2862
|
+
Step 0.75: Resume from checkpoint` and `### Peaks-Loop Step N: Periodic
|
|
2863
|
+
checkpoint` headings are now in the body (≥ 5 lines each), with explicit
|
|
2788
2864
|
`peaks session checkpoint` / `peaks session resume` CLI mentions and
|
|
2789
2865
|
reference-doc pointers. Byte cap bumped 22K → 24K (precedent: 18K → 20K → 22K).
|
|
2790
2866
|
- **`peaks test <pattern...>` CLI with smart cache** (sub-fix B) — new CLI
|
|
@@ -2893,7 +2969,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2893
2969
|
(~/.claude/skills + ~/.claude/output-styles)" and writes to
|
|
2894
2970
|
`~/.claude/skills/`.
|
|
2895
2971
|
- Byte-stability: `git diff
|
|
2896
|
-
|
|
2972
|
+
src/services/ide/adapters/{claude-code,trae}-adapter.ts` returns
|
|
2897
2973
|
empty (AC8 / AC15 ✓). Dispatch chokepoints `resource-profile.ts` /
|
|
2898
2974
|
`ide-aware-standards-service.ts` / `install-skills.mjs` untouched
|
|
2899
2975
|
(R6 inverse rule ✓).
|
|
@@ -2988,6 +3064,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2988
3064
|
registered SOP gate.
|
|
2989
3065
|
|
|
2990
3066
|
Concrete changes:
|
|
3067
|
+
|
|
2991
3068
|
- `src/services/workspace/claude-settings-template.ts` — deleted
|
|
2992
3069
|
`PEAKS_SUBCOMMAND_ALLOWLIST`, `buildBashHookCommand()`. The
|
|
2993
3070
|
template now emits only the `Write|Edit|MultiEdit` matcher.
|
|
@@ -3040,11 +3117,12 @@ Full suite: **2957 passed, 12 skipped, 0 failed**.
|
|
|
3040
3117
|
- **`headroom-ai` preferences resolver** — `src/services/context/headroom-prefs.ts` with
|
|
3041
3118
|
`resolveHeadroomOptions` and `shouldCompressResults` (pure functions, no IO). Sub-agent
|
|
3042
3119
|
dispatch now reads `loadPreferences().headroom` and:
|
|
3043
|
-
|
|
3044
|
-
|
|
3045
|
-
|
|
3046
|
-
|
|
3047
|
-
|
|
3120
|
+
|
|
3121
|
+
- Hard-blocks `--use-headroom` when `headroom.enabled = false` (new error code
|
|
3122
|
+
`HEADROOM_DISABLED_BY_PREFERENCE`, exit 1).
|
|
3123
|
+
- Respects `--headroom-mode <m>` CLI override > `perTouchpoint.subAgentDispatch` >
|
|
3124
|
+
`defaultMode` precedence.
|
|
3125
|
+
- Falls back to G7 metadata-only on any preferences load failure (no dispatch break).
|
|
3048
3126
|
|
|
3049
3127
|
- **New preferences fields** — `headroom.perTouchpoint.subAgentDispatch` and
|
|
3050
3128
|
`headroom.compressMinBytes` (default 4096). Shallow-merge on existing
|
|
@@ -3174,7 +3252,7 @@ Full suite: **2957 passed, 12 skipped, 0 failed**.
|
|
|
3174
3252
|
|
|
3175
3253
|
- The "one rid = one feature" pattern. From 2.1.1 onward, the
|
|
3176
3254
|
recommended workflow is: PRD -> `peaks slice decompose` -> `peaks
|
|
3177
|
-
|
|
3255
|
+
slice pick` (interactive) -> `peaks slice plan` -> N child rids.
|
|
3178
3256
|
Legacy `--type`-based fan-out still works as a fallback for rids
|
|
3179
3257
|
that pre-date the algorithm.
|
|
3180
3258
|
|
|
@@ -3252,10 +3330,10 @@ Full suite: **2957 passed, 12 skipped, 0 failed**.
|
|
|
3252
3330
|
(canonical home: proxy-service.ts).
|
|
3253
3331
|
- `~/.peaks/workspaces.json` — registered workspaces + current-workspace
|
|
3254
3332
|
pointer (canonical home: workspace-state-service.ts).
|
|
3255
|
-
|
|
3256
|
-
|
|
3257
|
-
|
|
3258
|
-
|
|
3333
|
+
On-disk legacy bloat is auto-detected and promoted to the correct
|
|
3334
|
+
sidecar on next CLI invocation; the slim `config.json` is then
|
|
3335
|
+
rewritten. The migration is **idempotent and silent** — no user
|
|
3336
|
+
action required.
|
|
3259
3337
|
- **`peaks config migrate --apply` distributes legacy fields across
|
|
3260
3338
|
their canonical homes.** `economyMode` / `swarmMode` continue to
|
|
3261
3339
|
forward to `<project>/.peaks/preferences.json`; `providers` /
|
|
@@ -3274,9 +3352,9 @@ Full suite: **2957 passed, 12 skipped, 0 failed**.
|
|
|
3274
3352
|
|
|
3275
3353
|
- **New `src/services/config/sidecar-store.ts`** — path helpers
|
|
3276
3354
|
(`providersConfigPath()`, `proxyConfigPath()`, `workspacesConfigPath()`)
|
|
3277
|
-
|
|
3278
|
-
|
|
3279
|
-
|
|
3355
|
+
- generic `readSidecarJson<T>` / `writeSidecarJson` with the same
|
|
3356
|
+
hardened-fs guarantees as `config-safety.ts` (symlink / hardlink
|
|
3357
|
+
guards, atomic temp-file rename, 0o600 mode).
|
|
3280
3358
|
- **New `src/services/config/provider-service.ts`** —
|
|
3281
3359
|
`getMiniMaxProviderConfig()`, `setMiniMaxProviderConfig()`,
|
|
3282
3360
|
`getMiniMaxProviderStatus()`, `getAllProviders()`,
|
|
@@ -3395,10 +3473,10 @@ Full suite: **2957 passed, 12 skipped, 0 failed**.
|
|
|
3395
3473
|
call; a missing or anonymous caller-id is rejected.
|
|
3396
3474
|
3. **Mandatory `--reason`** — the CLI rejects `--reason ""`; the
|
|
3397
3475
|
reason is persisted into the slice record for the retrospective.
|
|
3398
|
-
|
|
3399
|
-
|
|
3400
|
-
|
|
3401
|
-
|
|
3476
|
+
Three rules, not one: each rule is independently fail-closed, so a
|
|
3477
|
+
misuse in any one of them blocks the bypass. The classifier is the
|
|
3478
|
+
pure function `canSkipSlice(slice, callerId, reason)` so the rule
|
|
3479
|
+
set is testable in isolation.
|
|
3402
3480
|
- **`peaks workflow verify-pipeline --gate-skipped`** — reporting
|
|
3403
3481
|
flag that surfaces slices that completed via the skip classifier
|
|
3404
3482
|
during a pipeline run. The default `verify-pipeline` output hides
|
|
@@ -3435,27 +3513,29 @@ Full suite: **2957 passed, 12 skipped, 0 failed**.
|
|
|
3435
3513
|
bash saw literal `const c=process.argv[1]...` and tripped
|
|
3436
3514
|
`syntax error near unexpected token`. Net effect on every 2.0.3
|
|
3437
3515
|
install on Windows + macOS + Linux:
|
|
3516
|
+
|
|
3438
3517
|
- Every Bash tool call (peaks CLI or otherwise) was rejected.
|
|
3439
3518
|
- Every Write / Edit / MultiEdit call was rejected.
|
|
3440
3519
|
- The [Fact-Forcing Gate] bypass that `peaks workspace init` was
|
|
3441
3520
|
supposed to install was therefore self-defeating — the bypass
|
|
3442
3521
|
broke the gate itself, and the gate could not be reached to fix
|
|
3443
3522
|
it.
|
|
3444
|
-
|
|
3445
|
-
|
|
3446
|
-
|
|
3447
|
-
|
|
3448
|
-
|
|
3449
|
-
|
|
3450
|
-
|
|
3451
|
-
|
|
3452
|
-
|
|
3453
|
-
|
|
3454
|
-
|
|
3455
|
-
|
|
3456
|
-
|
|
3523
|
+
Recovery required the user to delete `.claude/settings.local.json`
|
|
3524
|
+
manually (losing the bypass permanently) or hand-patch the
|
|
3525
|
+
`command` field (drift vs the template).
|
|
3526
|
+
The fix wraps both builders' JS payloads in a real shell-evaluable
|
|
3527
|
+
`node -e "<js>"` form via a new `wrapAsNodeOneLiner` helper in
|
|
3528
|
+
`src/services/workspace/claude-settings-template.ts`. Inner `"`
|
|
3529
|
+
are escaped to `\"`; backslashes pass through unchanged so regex
|
|
3530
|
+
literals like `/\.peaks\//` still match correctly. `process.argv[1]`
|
|
3531
|
+
is the correct slot under `-e` per Node.js docs
|
|
3532
|
+
(https://nodejs.org/api/process.html#processargv) — consistent
|
|
3533
|
+
across Windows, macOS, and Linux. The docstring is reconciled
|
|
3534
|
+
with the implementation (the previous docstring incorrectly said
|
|
3535
|
+
`argv[2]`).
|
|
3457
3536
|
|
|
3458
3537
|
Regression tests cover:
|
|
3538
|
+
|
|
3459
3539
|
- `buildBashHookCommand()` and `buildWriteHookCommand()` return
|
|
3460
3540
|
`node -e "..."` form.
|
|
3461
3541
|
- Inner `"` are escaped to `\"`.
|
|
@@ -3570,6 +3650,7 @@ config surface.
|
|
|
3570
3650
|
> `optionalDependencies`; everything else in this section
|
|
3571
3651
|
> (env-var injection, `config-template` CLI, `missingKeys`,
|
|
3572
3652
|
> source-of-truth under `peaksConfig.ocr.llm`) is unchanged.
|
|
3653
|
+
|
|
3573
3654
|
- **`detectOcr` / `runOcrReview` no longer read `~/.opencodereview/config.json`.**
|
|
3574
3655
|
The source of truth is `peaksConfig.ocr.llm` (parsed by
|
|
3575
3656
|
`getOcrLlmConfig()` in `config-service.ts`). Missing fields surface
|
|
@@ -3631,7 +3712,7 @@ subprocess ignores it when peaks-loop's env vars are present).
|
|
|
3631
3712
|
supported IDE platforms in one command.
|
|
3632
3713
|
|
|
3633
3714
|
- **`peaks audit red-lines`** — L2 catalog audit (P0/P1/P2-a/P2-b
|
|
3634
|
-
enforcers) for skills/SKILL.md, references
|
|
3715
|
+
enforcers) for skills/SKILL.md, references/\*.md, and the agent shield.
|
|
3635
3716
|
|
|
3636
3717
|
- **`peaks agent run`** — ECC 64 agents soft-optional integration
|
|
3637
3718
|
(spec §7.2). When the L3 stack is installed, peaks delegates to it;
|
|
@@ -3666,6 +3747,7 @@ subprocess ignores it when peaks-loop's env vars are present).
|
|
|
3666
3747
|
expands globs on disk before spawning.
|
|
3667
3748
|
|
|
3668
3749
|
- **(2026-06-12) Three bugs surfaced by real-world ice-cola dogfood:**
|
|
3750
|
+
|
|
3669
3751
|
- memory-extract was called without `--apply` → always dry-ran, never
|
|
3670
3752
|
actually wrote.
|
|
3671
3753
|
- `.claude/skills/**/SKILL.md` (the standard Claude-Code consumer
|
|
@@ -3789,7 +3871,7 @@ call-to-action text differ.
|
|
|
3789
3871
|
Chinese tagline: `peaks-loop: 跨 AI IDE 的工程门禁与编排`).
|
|
3790
3872
|
- `README-en.md` synced to mirror the new layout (typing animation
|
|
3791
3873
|
uses the English tagline: `peaks-loop: cross-AI-IDE engineering
|
|
3792
|
-
|
|
3874
|
+
gates & orchestration`).
|
|
3793
3875
|
- Card anchors renamed to ASCII-friendly slugs on the English file
|
|
3794
3876
|
(`30-seconds-to-running`, `5-minute-onboarding`, `11-skills-in-the-family`,
|
|
3795
3877
|
`killer-feature-un-bypassable-gates`) so the README renders
|