peaks-loop 3.0.0 → 3.0.2
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/.claude-plugin/marketplace.json +3 -3
- package/CHANGELOG.md +94 -59
- package/README-en.md +2 -2
- package/README.md +2 -2
- package/agents/karpathy-reviewer.md +2 -2
- package/dist/src/cli/commands/agent-commands.js +3 -3
- package/dist/src/cli/commands/audit-commands.d.ts +1 -1
- package/dist/src/cli/commands/audit-commands.js +6 -6
- package/dist/src/cli/commands/classify-classify-commands.js +1 -1
- package/dist/src/cli/commands/code-review-commands.d.ts +3 -3
- package/dist/src/cli/commands/code-review-commands.js +5 -5
- package/dist/src/cli/commands/compact-command.d.ts +21 -0
- package/dist/src/cli/commands/compact-command.js +252 -0
- package/dist/src/cli/commands/context-commands.d.ts +1 -1
- package/dist/src/cli/commands/context-commands.js +1 -1
- package/dist/src/cli/commands/contract-commands.d.ts +1 -1
- package/dist/src/cli/commands/core/session-command.js +17 -7
- package/dist/src/cli/commands/core/skill-command.js +1 -1
- package/dist/src/cli/commands/feedback-commands.js +1 -1
- package/dist/src/cli/commands/hook-handle.d.ts +1 -1
- package/dist/src/cli/commands/hook-handle.js +1 -1
- package/dist/src/cli/commands/legacy-commands.d.ts +1 -1
- package/dist/src/cli/commands/legacy-commands.js +2 -2
- package/dist/src/cli/commands/log-commands.js +2 -2
- package/dist/src/cli/commands/loop-commands.d.ts +1 -1
- package/dist/src/cli/commands/loop-commands.js +1 -1
- package/dist/src/cli/commands/loop-eval-commands.d.ts +1 -1
- package/dist/src/cli/commands/loop-eval-commands.js +1 -1
- package/dist/src/cli/commands/playwright-commands.d.ts +1 -1
- package/dist/src/cli/commands/playwright-commands.js +2 -2
- package/dist/src/cli/commands/request-commands.js +40 -1
- package/dist/src/cli/commands/role-commands.js +1 -1
- package/dist/src/cli/commands/slice-commands.js +5 -5
- package/dist/src/cli/commands/understand-commands.js +36 -0
- package/dist/src/cli/commands/upgrade-commands.d.ts +1 -1
- package/dist/src/cli/commands/upgrade-commands.js +6 -6
- package/dist/src/cli/commands/workspace/init-command.js +2 -2
- package/dist/src/cli/program.js +10 -1
- package/dist/src/services/agent/ecc-agent-service.js +5 -5
- package/dist/src/services/audit/artifact-writer.d.ts +1 -1
- package/dist/src/services/audit/artifact-writer.js +1 -1
- package/dist/src/services/audit/decision-writer.d.ts +1 -1
- package/dist/src/services/audit/decision-writer.js +1 -1
- package/dist/src/services/audit/enforcers/lint-output-style.js +5 -5
- package/dist/src/services/audit/enforcers/mock-placement.d.ts +1 -1
- package/dist/src/services/audit/enforcers/mock-placement.js +1 -1
- package/dist/src/services/audit/enforcers/no-root-pollution.js +1 -1
- package/dist/src/services/audit/red-line-catalog-p2-a.js +2 -2
- package/dist/src/services/audit/red-line-catalog-p2-b.js +2 -2
- package/dist/src/services/audit/static-service.d.ts +1 -1
- package/dist/src/services/audit/static-service.js +5 -5
- package/dist/src/services/audit/types.d.ts +1 -1
- package/dist/src/services/audit/types.js +1 -1
- package/dist/src/services/audit-independent/perf-audit-service.js +1 -1
- package/dist/src/services/audit-independent/security-audit-service.js +1 -1
- package/dist/src/services/classify/classify-service.d.ts +1 -1
- package/dist/src/services/classify/classify-service.js +1 -1
- package/dist/src/services/classify/classify-types.d.ts +1 -1
- package/dist/src/services/classify/classify-types.js +1 -1
- package/dist/src/services/code-review/ecc-bridge.d.ts +2 -2
- package/dist/src/services/code-review/ecc-bridge.js +2 -2
- package/dist/src/services/code-review/ocr-service.d.ts +9 -9
- package/dist/src/services/code-review/ocr-service.js +16 -16
- package/dist/src/services/compact/decision-tables.d.ts +66 -0
- package/dist/src/services/compact/decision-tables.js +127 -0
- package/dist/src/services/compact/request-transition-hook.d.ts +20 -0
- package/dist/src/services/compact/request-transition-hook.js +110 -0
- package/dist/src/services/compact/suggest-service.d.ts +74 -0
- package/dist/src/services/compact/suggest-service.js +203 -0
- package/dist/src/services/config/config-migration.js +1 -1
- package/dist/src/services/config/config-safety.d.ts +1 -1
- package/dist/src/services/config/config-safety.js +1 -1
- package/dist/src/services/config/config-service.d.ts +1 -1
- package/dist/src/services/config/config-service.js +1 -1
- package/dist/src/services/context/auto-compact-dispatcher.js +4 -4
- package/dist/src/services/context/auto-compact-types.d.ts +6 -6
- package/dist/src/services/context/auto-compact-types.js +5 -5
- package/dist/src/services/dispatch/sub-agent-dispatcher.js +1 -1
- package/dist/src/services/dispatch/test-tool-detection.d.ts +1 -1
- package/dist/src/services/dispatch/test-tool-detection.js +1 -1
- package/dist/src/services/doctor/doctor-service.d.ts +1 -1
- package/dist/src/services/doctor/doctor-service.js +5 -5
- package/dist/src/services/hooks/presence-marker-detector.js +5 -5
- package/dist/src/services/ide/adapters/claude-code-adapter.d.ts +1 -1
- package/dist/src/services/ide/adapters/claude-code-adapter.js +2 -2
- package/dist/src/services/ide/adapters/codex-adapter.d.ts +2 -2
- package/dist/src/services/ide/adapters/codex-adapter.js +2 -2
- package/dist/src/services/ide/adapters/cursor-adapter.d.ts +2 -2
- package/dist/src/services/ide/adapters/cursor-adapter.js +2 -2
- package/dist/src/services/ide/adapters/hermes-adapter.d.ts +1 -1
- package/dist/src/services/ide/adapters/hermes-adapter.js +1 -1
- package/dist/src/services/ide/adapters/openclaw-adapter.d.ts +1 -1
- package/dist/src/services/ide/adapters/openclaw-adapter.js +1 -1
- package/dist/src/services/ide/adapters/trae-adapter.d.ts +1 -1
- package/dist/src/services/ide/adapters/trae-adapter.js +1 -1
- package/dist/src/services/ide/ide-types.d.ts +9 -9
- package/dist/src/services/legacy/legacy-detector.d.ts +1 -1
- package/dist/src/services/legacy/legacy-detector.js +1 -1
- package/dist/src/services/log/log-commands-service.d.ts +1 -1
- package/dist/src/services/log/log-commands-service.js +1 -1
- package/dist/src/services/log/logger.d.ts +3 -3
- package/dist/src/services/log/logger.js +3 -3
- package/dist/src/services/log/redact.d.ts +1 -1
- package/dist/src/services/log/redact.js +1 -1
- package/dist/src/services/loop/evaluator-dispatcher.d.ts +1 -1
- package/dist/src/services/loop/evaluator-dispatcher.js +16 -15
- package/dist/src/services/loop/monotonic-guard.js +35 -18
- package/dist/src/services/loop/monotonic-runner.d.ts +3 -0
- package/dist/src/services/loop/monotonic-runner.js +62 -28
- package/dist/src/services/loop/run-driver.js +45 -24
- package/dist/src/services/memory/llm-reranker.d.ts +1 -1
- package/dist/src/services/memory/llm-reranker.js +1 -1
- package/dist/src/services/mut/production-stryker.d.ts +0 -5
- package/dist/src/services/mut/production-stryker.js +19 -10
- package/dist/src/services/openspec/openspec-propose-from-doctor-service.d.ts +1 -1
- package/dist/src/services/openspec/openspec-propose-from-doctor-service.js +1 -1
- package/dist/src/services/perf/perf-baseline-service.d.ts +2 -2
- package/dist/src/services/perf/perf-baseline-service.js +2 -2
- package/dist/src/services/prd/handoff-auto-regen.js +1 -1
- package/dist/src/services/prd/project-scan-sediment.js +3 -3
- package/dist/src/services/prd/project-scan-types.d.ts +1 -1
- package/dist/src/services/preferences/preferences-types.d.ts +3 -3
- package/dist/src/services/preferences/preferences-types.js +2 -2
- package/dist/src/services/role/role-registry.d.ts +1 -1
- package/dist/src/services/role/role-registry.js +1 -1
- package/dist/src/services/sc/sc-service.js +3 -3
- package/dist/src/services/skill/resume-detector.js +2 -2
- package/dist/src/services/skills/sync-service.d.ts +3 -3
- package/dist/src/services/skills/sync-service.js +9 -9
- package/dist/src/services/slice/calibration-store.d.ts +1 -1
- package/dist/src/services/slice/calibration-store.js +1 -1
- package/dist/src/services/solo/auto-compact-orchestrator.d.ts +1 -1
- package/dist/src/services/solo/auto-compact-orchestrator.js +7 -7
- package/dist/src/services/solo/dag-orchestrator.js +1 -1
- package/dist/src/services/solo/mode-gate.d.ts +1 -1
- package/dist/src/services/solo/mode-gate.js +4 -4
- package/dist/src/services/solo/user-touchpoint-classifier.js +1 -1
- package/dist/src/services/standards/migrate-claude-rules-service.js +5 -5
- package/dist/src/services/standards/migrate-service.d.ts +3 -3
- package/dist/src/services/standards/migrate-service.js +5 -5
- package/dist/src/services/standards/project-standards-service.js +1 -1
- package/dist/src/services/understand/hybrid-types.d.ts +32 -0
- package/dist/src/services/understand/hybrid-types.js +1 -0
- package/dist/src/services/understand/understand-hybrid-service.d.ts +10 -0
- package/dist/src/services/understand/understand-hybrid-service.js +100 -0
- package/dist/src/services/upgrade/gitignore-migrate-service.d.ts +3 -3
- package/dist/src/services/upgrade/gitignore-migrate-service.js +4 -4
- package/dist/src/services/upgrade/upgrade-service.d.ts +1 -1
- package/dist/src/services/upgrade/upgrade-service.js +5 -5
- package/dist/src/services/verdict/envelopes.d.ts +1 -1
- package/dist/src/services/verdict/envelopes.js +1 -1
- package/dist/src/services/workflow/workflow-loader.js +1 -1
- package/dist/src/services/workspace/migrate-1-4-1-service.d.ts +1 -1
- package/dist/src/services/workspace/migrate-1-4-1-service.js +1 -1
- package/dist/src/services/workspace/migrate-types.d.ts +1 -1
- package/dist/src/services/workspace/migrate-types.js +1 -1
- package/dist/src/services/workspace/workspace-claude-settings-materializer.d.ts +2 -2
- package/dist/src/services/workspace/workspace-claude-settings-materializer.js +9 -9
- package/dist/src/services/workspace/workspace-service.d.ts +1 -1
- package/dist/src/services/workspace/workspace-service.js +1 -1
- package/dist/src/shared/path-safety.d.ts +1 -1
- package/dist/src/shared/path-safety.js +1 -1
- package/dist/src/shared/version.d.ts +1 -1
- package/dist/src/shared/version.js +1 -1
- package/output-styles/peaks-skill-swarm.md +33 -33
- package/package.json +5 -4
- package/schemas/decomposition-v1.json +1 -1
- package/schemas/decomposition-v2.json +1 -1
- package/schemas/replay-fixture.schema.json +1 -1
- package/schemas/reviewer-envelope.schema.json +1 -1
- package/scripts/install-skills.mjs +11 -11
- package/skills/peaks-audit/SKILL.md +2 -2
- package/skills/peaks-doctor/SKILL.md +4 -4
- package/skills/peaks-final-review/SKILL.md +2 -2
- package/skills/peaks-ide/SKILL.md +3 -3
- package/skills/peaks-perf-audit/SKILL.md +1 -1
- package/skills/peaks-prd/SKILL.md +14 -14
- package/skills/peaks-prd/references/workflow.md +1 -1
- package/skills/peaks-qa/SKILL.md +17 -17
- package/skills/peaks-qa/references/artifact-per-request.md +1 -1
- package/skills/peaks-qa/references/browser-validation-contracts.md +2 -2
- package/skills/peaks-qa/references/codegraph-regression-focus.md +1 -1
- package/skills/peaks-qa/references/external-capability-guidance.md +2 -2
- package/skills/peaks-qa/references/qa-fanout-contract.md +1 -1
- package/skills/peaks-qa/references/qa-gstack-integration.md +3 -3
- package/skills/peaks-qa/references/qa-local-artifacts.md +1 -1
- package/skills/peaks-qa/references/qa-matt-pocock-integration.md +1 -1
- package/skills/peaks-qa/references/qa-runbook.md +3 -3
- package/skills/peaks-qa/references/qa-skill-presence.md +1 -1
- package/skills/peaks-qa/references/qa-standards-preflight.md +2 -2
- package/skills/peaks-qa/references/qa-transition-gates.md +9 -9
- package/skills/peaks-qa/references/regression-gates.md +1 -1
- package/skills/peaks-rd/SKILL.md +13 -13
- package/skills/peaks-rd/references/artifact-and-standards-output.md +1 -1
- package/skills/peaks-rd/references/codegraph-project-analysis.md +1 -1
- package/skills/peaks-rd/references/external-references.md +3 -3
- package/skills/peaks-rd/references/karpathy-reviewer-prompt.md +1 -1
- package/skills/peaks-rd/references/mandatory-perf-baseline.md +1 -1
- package/skills/peaks-rd/references/matt-pocock-integration.md +2 -2
- package/skills/peaks-rd/references/ocr-integration.md +19 -19
- package/skills/peaks-rd/references/openspec-cli.md +2 -2
- package/skills/peaks-rd/references/rd-gstack-integration.md +5 -5
- package/skills/peaks-rd/references/rd-runbook.md +9 -9
- package/skills/peaks-rd/references/rd-standards-preflight.md +1 -1
- package/skills/peaks-rd/references/rd-transition-gates.md +13 -13
- package/skills/peaks-rd/references/skill-presence-and-title.md +1 -1
- package/skills/peaks-reviewer/SKILL.md +2 -2
- package/skills/peaks-sc/SKILL.md +9 -9
- package/skills/peaks-security-audit/SKILL.md +1 -1
- package/skills/peaks-slice-decompose/SKILL.md +2 -2
- package/skills/peaks-solo/SKILL.md +49 -49
- package/skills/peaks-solo/references/a2a-artifact-mapping.md +8 -8
- package/skills/peaks-solo/references/anchoring-and-session-info.md +3 -3
- package/skills/peaks-solo/references/boundaries.md +4 -4
- package/skills/peaks-solo/references/browser-workflow.md +2 -2
- package/skills/peaks-solo/references/codegraph-orchestration.md +1 -1
- package/skills/peaks-solo/references/completion-handoff.md +2 -2
- package/skills/peaks-solo/references/external-references.md +3 -3
- package/skills/peaks-solo/references/external-skill-invocation.md +2 -2
- package/skills/peaks-solo/references/frontend-only-mode.md +1 -1
- package/skills/peaks-solo/references/gstack-integration.md +4 -4
- package/skills/peaks-solo/references/local-artifact-workspace.md +2 -2
- package/skills/peaks-solo/references/micro-cycle.md +4 -4
- package/skills/peaks-solo/references/mode-selection.md +5 -5
- package/skills/peaks-solo/references/openspec-workflow.md +2 -2
- package/skills/peaks-solo/references/playwright-mcp-multi-terminal.md +1 -1
- package/skills/peaks-solo/references/project-memory-loading.md +1 -1
- package/skills/peaks-solo/references/project-scan-checklist.md +1 -1
- package/skills/peaks-solo/references/quality-gate-cheatsheet.md +1 -1
- package/skills/peaks-solo/references/resume-detection.md +1 -1
- package/skills/peaks-solo/references/runbook.md +20 -20
- package/skills/peaks-solo/references/skill-presence-and-title.md +2 -2
- package/skills/peaks-solo/references/standards-preflight.md +2 -2
- package/skills/peaks-solo/references/step-0-55-1x-detection.md +3 -3
- package/skills/peaks-solo/references/sub-agent-dispatch.md +3 -3
- package/skills/peaks-solo/references/swarm-dispatch-contract.md +3 -3
- package/skills/peaks-solo/references/workflow-gates-and-types.md +34 -34
- package/skills/peaks-solo-resume/SKILL.md +2 -2
- package/skills/peaks-solo-status/SKILL.md +4 -4
- package/skills/peaks-solo-test/SKILL.md +4 -4
- package/skills/peaks-sop/SKILL.md +5 -5
- package/skills/peaks-txt/SKILL.md +17 -17
- package/skills/peaks-ui/SKILL.md +17 -17
- package/skills/peaks-ui/references/workflow.md +1 -1
|
@@ -160,7 +160,7 @@ verdict=return-to-rd → RD 修 (new slice 内部走 micro-cycle)
|
|
|
160
160
|
|
|
161
161
|
# Mandatory RD QA repair loop (AUTO-PROCEED)
|
|
162
162
|
|
|
163
|
-
> Body of `## Peaks-
|
|
163
|
+
> Body of `## Peaks-Loop Mandatory RD QA repair loop`.
|
|
164
164
|
|
|
165
165
|
> **CLI gate enforcement**: `peaks request transition` now refuses to move RD/QA to gated states when required artifacts are missing. The required files depend on `--type` chosen at `peaks request init` (default `feature`):
|
|
166
166
|
>
|
|
@@ -171,13 +171,13 @@ verdict=return-to-rd → RD 修 (new slice 内部走 micro-cycle)
|
|
|
171
171
|
>
|
|
172
172
|
> When PRD lands, classify the request type before running `peaks request init` for every role — pass `--type <type>` so the artifact records it and downstream transitions enforce the right gates. Misclassifying a feature as `docs` to skip gates is a workflow violation. If a transition fails with `code: PREREQUISITES_MISSING`, the response lists every missing path — produce them, then re-transition. For one-off exceptions, the escape hatch `--allow-incomplete --reason "<text>"` records the bypass in the artifact transition note.
|
|
173
173
|
|
|
174
|
-
After `peaks-rd` finishes any implementation, repair, or code-output slice, Peaks-
|
|
174
|
+
After `peaks-rd` finishes any implementation, repair, or code-output slice, Peaks-Loop Solo MUST automatically route the result to `peaks-qa` without waiting for user confirmation. This is not optional in full-auto mode. Solo must not declare the workflow complete, emit a TXT handoff, or stop at RD completion.
|
|
175
175
|
|
|
176
176
|
**How Solo invokes another role (mechanism, not metaphor):**
|
|
177
177
|
|
|
178
178
|
Solo is itself a skill running in the current session. There are **two distinct mechanisms** in this skill, and they MUST NOT be confused:
|
|
179
179
|
|
|
180
|
-
1. **Swarm fan-out (planning side, after PRD confirmed)** — uses `peaks sub-agent dispatch <role>` to launch real concurrent sub-agents. The CLI returns a per-IDE tool-call descriptor that the LLM executes in its environment. See "Peaks-
|
|
180
|
+
1. **Swarm fan-out (planning side, after PRD confirmed)** — uses `peaks sub-agent dispatch <role>` to launch real concurrent sub-agents. The CLI returns a per-IDE tool-call descriptor that the LLM executes in its environment. See "Peaks-Loop Swarm parallel phase" above for the full contract. Sub-agents do NOT call Skill(...) back into the role; they execute the role's instructions inline from the prompt.
|
|
181
181
|
2. **Sequential handoff (execution side, RD↔QA repair loop)** — Solo is the only loop, and after RD or QA finishes (whether as a sub-agent or directly), Solo drives the next step from the orchestrator seat. Do NOT use the `Skill` tool to "reactivate" peaks-rd or peaks-qa in the main loop; doing so is the v1.x anti-pattern that masqueraded as "calling the role" but actually just re-prompted the same session. From v1.3 onward, the main loop drives roles via the CLI gate (`peaks request transition`) and reads back artefacts (`peaks request show ... --json`); the actual RD/QA work is either done inline by Solo (when Solo has just been re-invoked by the user) or by a Task sub-agent (in swarm mode).
|
|
182
182
|
|
|
183
183
|
After RD completes (whether inline or sub-agent), Solo does not stop — it must advance to QA. There is no "RD done, ask the user" state in full-auto mode. The only valid stops are: (a) QA verdict=pass, (b) repair cap hit, (c) explicit user cancel.
|
|
@@ -190,7 +190,7 @@ After RD completes (whether inline or sub-agent), Solo does not stop — it must
|
|
|
190
190
|
peaks skill presence:set peaks-solo --project <repo> --mode <mode> --gate <current-gate>
|
|
191
191
|
```
|
|
192
192
|
|
|
193
|
-
This keeps the CLAUDE.md status header accurate (`Peaks-
|
|
193
|
+
This keeps the CLAUDE.md status header accurate (`Peaks-Loop Skill: peaks-solo`) instead of showing a stale role name. Use the current mode and gate values; the gate may have advanced since startup. Skipping this step causes the header to display the last-known gate permanently.
|
|
194
194
|
|
|
195
195
|
**Full-auto auto-proceed rule**: In the `full-auto` profile, when RD transitions to `qa-handoff`, Solo immediately drives QA — by launching a `peaks sub-agent dispatch qa` sub-agent carrying the `peaks-qa` body (swarm path), then executing the returned toolCall, or by running QA inline in the main loop (assisted/strict path). Do not pause, do not ask the user, do not summarize RD results as if they were final. The only valid reason to skip QA is when `--type` is `docs` or `chore` (no acceptance surface).
|
|
196
196
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Step 1 — Mode selection
|
|
2
2
|
|
|
3
|
-
> Body of `### Peaks-
|
|
3
|
+
> Body of `### Peaks-Loop Step 1`. After Step 0 has anchored the workspace and presence, when the user invokes Peaks-Loop Solo without explicitly naming an execution profile, use `AskUserQuestion` to pick the profile. Present the recommended full-auto path as the first/default option with a practical description for each:
|
|
4
4
|
|
|
5
|
-
1. **Full auto (Recommended)** — Peaks-
|
|
6
|
-
2. **Assisted** — Peaks-
|
|
7
|
-
3. **Swarm** — Peaks-
|
|
8
|
-
4. **Strict** — Peaks-
|
|
5
|
+
1. **Full auto (Recommended)** — Peaks-Loop handles planning, role coordination, validation, and compact handoff end-to-end while preserving required confirmation gates for risky or shared-state actions.
|
|
6
|
+
2. **Assisted** — Peaks-Loop proposes plans, artifacts, and checks, then pauses for user decisions at major workflow boundaries.
|
|
7
|
+
3. **Swarm** — Peaks-Loop maximizes safe parallel role/worker execution for larger RD or QA workloads while keeping reducer validation and artifact boundaries explicit.
|
|
8
|
+
4. **Strict** — Peaks-Loop uses the most conservative gates: explicit confirmations, strict slice specs, coverage evidence, QA acceptance, and commit boundaries before continuing.
|
|
9
9
|
|
|
10
10
|
Map the user's selection to the `--mode` flag value (used by `peaks skill presence:set`; `presence:set --mode` accepts any string, so the name matches the user-facing label rather than overloading "solo" which is also the skill name):
|
|
11
11
|
|
|
@@ -31,7 +31,7 @@ For `peaks-solo refactor` runs against a repository with `openspec/`:
|
|
|
31
31
|
3. QA exit gate — re-run `peaks openspec validate <id>` after implementation; record the result in the QA validation report.
|
|
32
32
|
4. Archive — `peaks openspec archive <id> --apply` only after QA passes the exit gate and SC closes the final commit.
|
|
33
33
|
|
|
34
|
-
If the consuming LLM needs an MCP server for docs lookup or research (e.g. Context7), it checks its own tool list for `mcp__<server>__*` and tells the user the install command if absent. peaks-
|
|
34
|
+
If the consuming LLM needs an MCP server for docs lookup or research (e.g. Context7), it checks its own tool list for `mcp__<server>__*` and tells the user the install command if absent. peaks-loop is no longer in the install path; the LLM is the executor, the IDE is the dispatcher.
|
|
35
35
|
|
|
36
36
|
## Boundary
|
|
37
37
|
|
|
@@ -41,7 +41,7 @@ Solo must not write `openspec/changes/**` or `~/.claude/settings.json` directly.
|
|
|
41
41
|
|
|
42
42
|
# Step 0.5 — OpenSpec first-run opt-in (conditional)
|
|
43
43
|
|
|
44
|
-
> Body of `### Peaks-
|
|
44
|
+
> Body of `### Peaks-Loop Step 0.5`. After the workspace is anchored, before project scan, Solo checks whether
|
|
45
45
|
the project already has an `openspec/` directory. The lifecycle
|
|
46
46
|
(`render → validate → show → to-rd → validate → archive`) only applies
|
|
47
47
|
when `openspec/` exists; without it, RD/QA/SC silently skip the
|
|
@@ -29,7 +29,7 @@ peaks playwright stop [--terminal <id>] [--project <path>] [--json]
|
|
|
29
29
|
|
|
30
30
|
`peaks playwright start` tries ports in the order `8931, 8932, 8933, ..., 8949`. The first port that is **not** bound by anything (probe uses `net.createServer().listen()`; an `EADDRINUSE` is a busy port) is used. If 8931..8949 are all busy, the command exits with `PORT_EXHAUSTED`.
|
|
31
31
|
|
|
32
|
-
The CLI does NOT bundle the playwright-mcp binary. It shells out to `npx playwright-mcp@latest --port=<n> --browser=<b> --user-data-dir=<path>`. peaks-
|
|
32
|
+
The CLI does NOT bundle the playwright-mcp binary. It shells out to `npx playwright-mcp@latest --port=<n> --browser=<b> --user-data-dir=<path>`. peaks-loop is the lifecycle orchestrator, not the install medium.
|
|
33
33
|
|
|
34
34
|
## Session file layout
|
|
35
35
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Step 2.3 — Load project memory
|
|
2
2
|
|
|
3
|
-
> Body of `### Peaks-
|
|
3
|
+
> Body of `### Peaks-Loop Step 2.3`. Before planning any work, read the project's persistent memory — durable memories that survive across sessions:
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
6
|
peaks project memories --project <repo> --json
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Peaks-
|
|
1
|
+
# Peaks-Loop Pre-RD project scan checklist
|
|
2
2
|
|
|
3
3
|
> Extracted from `skills/peaks-solo/SKILL.md` on 2026-06-09 (slice 019 — slim skill files to references) to keep SKILL.md under the 800-line cap from `common/coding-style.md`. The content below is the verbatim Pre-RD project scan checklist that was previously inline; nothing was paraphrased, just relocated.
|
|
4
4
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Quality-gate commands (CLI cheat sheet)
|
|
2
2
|
|
|
3
|
-
> Body of `## Peaks-
|
|
3
|
+
> Body of `## Peaks-Loop Quality-gate commands`. These commands harden the workflow against silent skips. Use them in the runbook at the points indicated; they all support `--json` and `--session-id`.
|
|
4
4
|
|
|
5
5
|
| Command | Purpose | When to run | Non-zero exit when |
|
|
6
6
|
|---|---|---|---|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Step 0.7 — Detect unfinished work and offer resume
|
|
2
2
|
|
|
3
|
-
> Body of `### Peaks-
|
|
3
|
+
> Body of `### Peaks-Loop Step 0.7`. After Step 0 has anchored the workspace and presence, before Step 1 mode selection, run the resume-detection probe. If the current session has in-flight slice artifacts, the user is most likely "continuing" — surface resume options instead of starting a fresh PRD.
|
|
4
4
|
|
|
5
5
|
**Why this is a separate step** (per `feedback_peaks_solo_natural_language_primary` — a high-frequency request shape, see also the user's "继续完成刚才为完成的" pattern from session `2026-06-04-session-b60252`): the LLM was previously re-reading 3-5 artifact files to determine workflow state, wasting 3-5k tokens per resume request. This step replaces that work with a single deterministic read.
|
|
6
6
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
# Peaks-
|
|
1
|
+
# Peaks-Loop Default Runbook (orchestrator, full-auto profile)
|
|
2
2
|
|
|
3
3
|
> **Maintenance**: The numbered workflow list in `skills/peaks-solo/SKILL.md` (steps 0-11) is the canonical phase sequence. This runbook is the executable CLI transcription. When updating, keep both in lockstep — a change to one must be reflected in the other.
|
|
4
4
|
>
|
|
5
5
|
> **Why this is a reference, not inline**: the runbook is a stable, copy-pasteable shell (~150 lines of bash) that does not change between skill runs. Inlining it bloats the orchestrator skill body past the 800-line cap (per `common/coding-style.md`). Extracting it here keeps SKILL.md focused on flow / decisions / contracts, while the runbook stays as the canonical place for the CLI sequence.
|
|
6
6
|
>
|
|
7
|
-
> **How peaks-
|
|
7
|
+
> **How peaks-loop tooling reads this file**:
|
|
8
8
|
> - `peaks skill runbook peaks-solo` (CLI) reads the `## Default runbook` section in either SKILL.md or `references/runbook.md` (whichever has the bash code).
|
|
9
9
|
> - The test in `tests/unit/skill-default-runbook.test.ts` looks for `## Default runbook` in SKILL.md first, then falls back to `references/runbook.md` here.
|
|
10
10
|
|
|
@@ -19,21 +19,21 @@ peaks sub-agent dispatch <role> --prompt "<body>" --request-id <rid> --batch-id
|
|
|
19
19
|
```
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
|
-
# 0. Peaks-
|
|
22
|
+
# 0. Peaks-Loop Snapshot + 0.5 Peaks-Loop Workspace + 0.6 Peaks-Loop Project scan + 0.7 Peaks-Loop Existing-system extraction
|
|
23
23
|
peaks doctor --json
|
|
24
24
|
peaks project dashboard --project <repo> --json
|
|
25
25
|
peaks skill runbook peaks-solo --json
|
|
26
26
|
peaks workspace init --project <repo> --json
|
|
27
27
|
peaks workspace reconcile --project <repo> --json
|
|
28
28
|
peaks scan archetype --project <repo> --json
|
|
29
|
-
# → copy archetype, frontendOnly, signals into .peaks/_runtime/<session-id>/rd/project-scan.md (Peaks-
|
|
29
|
+
# → copy archetype, frontendOnly, signals into .peaks/_runtime/<session-id>/rd/project-scan.md (Peaks-Loop Gate A)
|
|
30
30
|
# → copy libraries[] into .peaks/_runtime/<session-id>/rd/project-scan.md under `## Library versions`
|
|
31
31
|
peaks scan libraries --project <repo> --json
|
|
32
32
|
# → if archetype != greenfield AND archetype != unknown:
|
|
33
33
|
peaks scan existing-system --project <repo> --json
|
|
34
|
-
# → copy tokens, sources, conventions, inconsistencies into .peaks/_runtime/<session-id>/system/existing-system.md (Peaks-
|
|
34
|
+
# → copy tokens, sources, conventions, inconsistencies into .peaks/_runtime/<session-id>/system/existing-system.md (Peaks-Loop Gate A.5)
|
|
35
35
|
|
|
36
|
-
# 1. Peaks-
|
|
36
|
+
# 1. Peaks-Loop Standards preflight + apply
|
|
37
37
|
# Run dry-run first to inspect deltas, then APPLY. In full-auto and swarm modes,
|
|
38
38
|
# --apply is the default — Standards files (CLAUDE.md, .claude/rules/**) live INSIDE
|
|
39
39
|
# the target project and are required for downstream skill preflight, so producing
|
|
@@ -43,9 +43,9 @@ peaks standards init --project <repo> --dry-run --json
|
|
|
43
43
|
# or: peaks standards update --project <repo> --dry-run --json
|
|
44
44
|
peaks standards init --project <repo> --apply --json
|
|
45
45
|
# or: peaks standards update --project <repo> --apply --json
|
|
46
|
-
# After apply, verify the files actually exist on disk (see Peaks-
|
|
46
|
+
# After apply, verify the files actually exist on disk (see Peaks-Loop Gate G).
|
|
47
47
|
|
|
48
|
-
# 2. Peaks-
|
|
48
|
+
# 2. Peaks-Loop PRD (Assisted/Strict: [CONFIRM] before confirmed-by-user)
|
|
49
49
|
# Classify the request type from the PRD: feature | bugfix | refactor | docs | config | chore
|
|
50
50
|
# This drives RD/QA gate strictness — see "Mandatory RD QA repair loop" for the matrix.
|
|
51
51
|
peaks request init --role prd --id <rid> --project <repo> --apply --type <type> --json
|
|
@@ -59,7 +59,7 @@ peaks request lint <rid> --role prd --project <repo> --json
|
|
|
59
59
|
peaks request transition <rid> --role prd --state confirmed-by-user --project <repo> --json
|
|
60
60
|
peaks request transition <rid> --role prd --state handed-off --project <repo> --json
|
|
61
61
|
|
|
62
|
-
# 3. Peaks-
|
|
62
|
+
# 3. Peaks-Loop Default sub-agent fan-out (slice 5 contract)
|
|
63
63
|
# Solo computes the swarm plan from --type + frontendOnly + frontend-keyword scan,
|
|
64
64
|
# writes it to .peaks/_runtime/<sid>/sc/swarm-plan.json, then writes the slice
|
|
65
65
|
# DAG to .peaks/_runtime/<sid>/sc/slice-dag.json and launches ONE
|
|
@@ -68,7 +68,7 @@ peaks request transition <rid> --role prd --state handed-off --project <repo> --
|
|
|
68
68
|
# same topological level — that is the canonical "fan-out" signal. The
|
|
69
69
|
# orchestrator emits N parallel `buildToolCall` descriptors in ONE response;
|
|
70
70
|
# the LLM-side runner executes them concurrently.
|
|
71
|
-
# See "Peaks-
|
|
71
|
+
# See "Peaks-Loop Default sub-agent fan-out" above for the default rule and
|
|
72
72
|
# exceptions; the gate logic is single-sourced in references/swarm-dispatch-contract.md.
|
|
73
73
|
# Hard rule: do NOT call Skill(skill="peaks-rd" | "peaks-qa" | "peaks-ui") from
|
|
74
74
|
# the Swarm phase — that's the v1.x anti-pattern. And do NOT issue N sequential
|
|
@@ -107,23 +107,23 @@ ls .peaks/_runtime/<sid>/qa/test-cases/<rid>.md # QA test-cases (
|
|
|
107
107
|
# ui (only when in plan):
|
|
108
108
|
ls .peaks/_runtime/<sid>/ui/design-draft.md 2>&1 # non-blocking (Gate B info)
|
|
109
109
|
# Apply the degradation rules in the main SKILL.md if any artefact is missing.
|
|
110
|
-
# → Peaks-
|
|
110
|
+
# → Peaks-Loop Gate B convergence check. Assisted/Strict: [CONFIRM]
|
|
111
111
|
|
|
112
|
-
# 4. Peaks-
|
|
112
|
+
# 4. Peaks-Loop RD planning artifact (the file required by the prerequisite gate)
|
|
113
113
|
# feature / refactor → write .peaks/_runtime/<id>/rd/tech-doc.md
|
|
114
114
|
# bugfix → write .peaks/_runtime/<id>/rd/bug-analysis.md
|
|
115
115
|
# config → no planning artifact required at this state
|
|
116
116
|
# docs / chore → no planning artifact required
|
|
117
117
|
peaks request transition <rid> --role rd --state implemented --project <repo> --json
|
|
118
118
|
|
|
119
|
-
# 5. Peaks-
|
|
119
|
+
# 5. Peaks-Loop Code review + security review BEFORE qa-handoff transition.
|
|
120
120
|
# Produce the evidence files the CLI gate enforces:
|
|
121
121
|
# - .peaks/_runtime/<id>/rd/code-review.md (CRITICAL/HIGH findings + fixes; required for feature/bugfix/refactor)
|
|
122
122
|
# - .peaks/_runtime/<id>/rd/security-review.md (required for feature/bugfix/refactor/config)
|
|
123
123
|
# Then transition. If --type is docs/chore the gate is empty and the transition is unguarded.
|
|
124
124
|
peaks request transition <rid> --role rd --state qa-handoff --project <repo> --json
|
|
125
125
|
|
|
126
|
-
# 6. Peaks-
|
|
126
|
+
# 6. Peaks-Loop QA validation (AUTO-PROCEED from RD in full-auto)
|
|
127
127
|
# Before each QA transition, produce the evidence files the CLI gate enforces:
|
|
128
128
|
# Before qa:running → .peaks/_runtime/<id>/qa/test-cases/<rid>.md
|
|
129
129
|
peaks request transition <rid> --role qa --state running --project <repo> --json
|
|
@@ -131,9 +131,9 @@ peaks request transition <rid> --role qa --state running --project <repo> --json
|
|
|
131
131
|
# + .peaks/_runtime/<id>/qa/security-findings.md
|
|
132
132
|
# + .peaks/_runtime/<id>/qa/performance-findings.md (feature/refactor only)
|
|
133
133
|
peaks request transition <rid> --role qa --state verdict-issued --project <repo> --json
|
|
134
|
-
# → Peaks-
|
|
134
|
+
# → Peaks-Loop Gate D check. Assisted/Strict: [CONFIRM]
|
|
135
135
|
|
|
136
|
-
# 7. Peaks-
|
|
136
|
+
# 7. Peaks-Loop RD↔QA repair loop — if verdict is return-to-rd, re-run 4 through 6 until QA passes or blocked TXT.
|
|
137
137
|
# Before invoking peaks-rd again, check the cycle count so you don't blow past the cap silently:
|
|
138
138
|
peaks request repair-status <rid> --project <repo> --json
|
|
139
139
|
# → atCap=true → STOP and emit a blocked TXT handoff. Do NOT enter another cycle.
|
|
@@ -143,18 +143,18 @@ peaks request repair-status <rid> --project <repo> --json
|
|
|
143
143
|
peaks scan request-type-sanity --project <repo> --type <type> --json
|
|
144
144
|
# → consistent=false → RD scope-creeped during repair; review before re-handoff.
|
|
145
145
|
|
|
146
|
-
# 8. Peaks-
|
|
146
|
+
# 8. Peaks-Loop SC phase
|
|
147
147
|
peaks sc impact --change-id <cid> --module <module> --file <path> --json
|
|
148
148
|
peaks sc retention --slice-id <rid> --prd <prd> --rd <rd> --qa <qa> --json
|
|
149
149
|
peaks sc validate --slice-id <rid> --json
|
|
150
150
|
peaks sc boundary --slice-id <rid> --artifact <artifact> --code <file> --json
|
|
151
151
|
|
|
152
|
-
# 9. Peaks-
|
|
152
|
+
# 9. Peaks-Loop OpenSpec archive (exit gate; only after QA pass, when openspec/ exists)
|
|
153
153
|
peaks openspec validate <cid> --project <repo> --json
|
|
154
154
|
peaks openspec archive <cid> --project <repo> --apply --json
|
|
155
155
|
peaks workspace reconcile --project <repo> --apply --older-than 7
|
|
156
156
|
|
|
157
|
-
# 10. Peaks-
|
|
157
|
+
# 10. Peaks-Loop TXT handoff — invoke peaks-txt which embeds memory markers and extracts
|
|
158
158
|
# peaks-txt writes the handoff capsule to .peaks/_runtime/<id>/txt/handoff.md. Inside the
|
|
159
159
|
# capsule body, peaks-txt embeds <!-- peaks-memory:start --> blocks for every
|
|
160
160
|
# stable project fact surfaced this session.
|
|
@@ -180,7 +180,7 @@ peaks memory extract --project <repo> --artifact .peaks/_runtime/<id>/txt/handof
|
|
|
180
180
|
# --apply is REQUIRED to write .peaks/memory/; without it the command only
|
|
181
181
|
# previews. The extract regenerates index.json in the same call.
|
|
182
182
|
|
|
183
|
-
# 11. Peaks-
|
|
183
|
+
# 11. Peaks-Loop Final snapshot
|
|
184
184
|
peaks project dashboard --project <repo> --json
|
|
185
185
|
peaks skill doctor --json
|
|
186
186
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Step 2 + 2.5 — Skill presence and session title
|
|
2
2
|
|
|
3
|
-
> Combined body for `### Peaks-
|
|
3
|
+
> Combined body for `### Peaks-Loop Step 2: Re-set skill presence with the chosen mode` and `### Peaks-Loop Step 2.5: Set session title`.
|
|
4
4
|
|
|
5
5
|
## Step 2 — Re-set skill presence
|
|
6
6
|
|
|
@@ -16,7 +16,7 @@ On the first presence:set in a project, ensure the out-of-band status bar is ins
|
|
|
16
16
|
peaks statusline install --project <repo> # idempotent; skips if already installed
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
Then display the compact status header: `Peaks-
|
|
19
|
+
Then display the compact status header: `Peaks-Loop Skill: peaks-solo | Peaks-Loop Gate: startup | Next: <one short action>`. Display this header on EVERY turn while the skill is active.
|
|
20
20
|
|
|
21
21
|
Update with `peaks skill presence:set peaks-solo --project <repo> --mode <mode> --gate <gate>` when gates change. The presence file persists across the full workflow lifecycle — do NOT clear it at workflow end.
|
|
22
22
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Project standards preflight
|
|
2
2
|
|
|
3
|
-
> Body of `## Peaks-
|
|
3
|
+
> Body of `## Peaks-Loop Project standards preflight`. Before orchestrating an end-to-end code repository workflow, gather the project standards preflight status from RD and QA by calling the Peaks-Loop CLI:
|
|
4
4
|
|
|
5
5
|
- `peaks standards init --project <path> --dry-run`
|
|
6
6
|
- `peaks standards update --project <path> --dry-run`
|
|
7
7
|
|
|
8
|
-
Use `standards init` for first-time creation and `standards update` for existing `CLAUDE.md` append/review behavior. In `full-auto` and `swarm` profiles, `--apply` runs automatically after `--dry-run` succeeds — these files live inside the target project, are required for downstream skill preflight, and producing them is part of finishing the workflow (Peaks-
|
|
8
|
+
Use `standards init` for first-time creation and `standards update` for existing `CLAUDE.md` append/review behavior. In `full-auto` and `swarm` profiles, `--apply` runs automatically after `--dry-run` succeeds — these files live inside the target project, are required for downstream skill preflight, and producing them is part of finishing the workflow (Peaks-Loop Gate G enforces this). `assisted` and `strict` profiles pause for explicit user confirmation between dry-run and apply.
|
|
9
9
|
|
|
10
10
|
**CRITICAL — Standards must reflect the project scan.** When generating or updating `CLAUDE.md`, the content must reference concrete findings from `.peaks/_runtime/<sessionId>/rd/project-scan.md`: the detected component library (e.g. "This project uses antd 5.x"), CSS solution (e.g. "Uses Less via Umi"), build tool, state management, and routing. Never emit a generic template that says "read .claude/rules/..." without naming the actual project stack. If the project-scan has not been run yet, run it before standards init/update.
|
|
11
11
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Step 0.55 — 1.x → 2.0 detection reference
|
|
2
2
|
|
|
3
|
-
> Body of `### Peaks-
|
|
3
|
+
> Body of `### Peaks-Loop Step 0.55`. Slice: 2026-06-12-solo-step-0-55-1x-detection.
|
|
4
4
|
|
|
5
5
|
## Why this step exists
|
|
6
6
|
|
|
7
|
-
The peaks-
|
|
7
|
+
The peaks-loop 1.x → 2.0 closeout ships:
|
|
8
8
|
|
|
9
9
|
1. A postinstall that auto-detects 1.x state and dispatches the upgrade (slice 1, commit `b6e34e6`).
|
|
10
10
|
2. A standards-migrate path that thins `.claude/rules/**/*.md` and scaffolds `.peaks/standards/` (slice 2, commit `33dd392`).
|
|
@@ -68,7 +68,7 @@ The decision is persisted via `peaks preferences set --project <root> --key auto
|
|
|
68
68
|
## What is NOT in this step
|
|
69
69
|
|
|
70
70
|
- The auto-upgrade execution itself: the umbrella is invoked via the AskUserQuestion's recommended option. The umbrella's behavior (6 sub-commands + write-upgrade-record) is documented in the umbrella's own help text.
|
|
71
|
-
- The postinstall auto-dispatch: that's `scripts/install-skills.mjs:autoUpgrade1xProjectIfPresent`, which fires fire-and-forget on `npm i -g peaks-
|
|
71
|
+
- The postinstall auto-dispatch: that's `scripts/install-skills.mjs:autoUpgrade1xProjectIfPresent`, which fires fire-and-forget on `npm i -g peaks-loop@2.0`. Step 0.55 is the user-invoked path.
|
|
72
72
|
- Re-authoring the 1.x detector heuristics: the implementation is a 1:1 mirror of the canonical `.mjs` version. Drift is prevented by the parity test.
|
|
73
73
|
|
|
74
74
|
## How this integrates with the rest of the workflow
|
|
@@ -25,7 +25,7 @@ the skills compose. For sub-agent dispatch the relationship is:
|
|
|
25
25
|
| Dispatcher 抽象 (per-IDE) | `src/services/dispatch/sub-agent-dispatcher.ts` | Encapsulates the IDE-private tool name (claude-code: `Task`, trae: UNVERIFIED placeholder) and arg shape | CLI (called by the CLI) |
|
|
26
26
|
|
|
27
27
|
This is the **inverse** of the prior shape: SKILL.md used to hardcode
|
|
28
|
-
`Task(subagent_type="general-purpose", ...)`, which made peaks-
|
|
28
|
+
`Task(subagent_type="general-purpose", ...)`, which made peaks-loop
|
|
29
29
|
depend on Claude Code's specific tool name. Adding a new IDE meant
|
|
30
30
|
editing every SKILL.md that mentioned sub-agents. With the new shape,
|
|
31
31
|
the only per-IDE thing in the dispatch chain is the dispatcher — SKILL.md
|
|
@@ -178,7 +178,7 @@ to keep the user informed during the wait.
|
|
|
178
178
|
|
|
179
179
|
**Slice #016 retirement (G3 prompt template — MCP subsystem removed)**:
|
|
180
180
|
The MCP-decouple paragraph from slice #007-007 no longer applies.
|
|
181
|
-
peaks-
|
|
181
|
+
peaks-loop no longer manages MCP install or invocation. Sub-agents
|
|
182
182
|
check their own tool list for `mcp__<server>__*` entries and invoke
|
|
183
183
|
the tool by name directly. The only prompt-template addition that
|
|
184
184
|
remains is the tool-list self-check:
|
|
@@ -304,7 +304,7 @@ The role's required artefact paths (also see peaks-ui/rd/qa SKILL.md and `refere
|
|
|
304
304
|
| `rd-planning` | `.peaks/_runtime/<sessionId>/rd/tech-doc.md` (feature/refactor) or `.peaks/_runtime/<sessionId>/rd/bug-analysis.md` (bugfix) | PRD body, project-scan, existing-system, codegraph |
|
|
305
305
|
| `qa-test-cases` | `.peaks/_runtime/<sessionId>/qa/test-cases/<rid>.md` | PRD body, RD planning artefact, project-scan, codegraph |
|
|
306
306
|
|
|
307
|
-
**Solo launches all sub-agents in the swarm plan in a single message (multiple `peaks sub-agent dispatch` calls in parallel, each followed by execution of the returned toolCall)** — this is what gives real concurrency. Do not sequentialize them. The CLI returns N toolCall descriptors; the LLM fires all N in the same message; the IDE dispatches them concurrently; Solo then waits for all to return, runs `ls` checks against the paths above (Peaks-
|
|
307
|
+
**Solo launches all sub-agents in the swarm plan in a single message (multiple `peaks sub-agent dispatch` calls in parallel, each followed by execution of the returned toolCall)** — this is what gives real concurrency. Do not sequentialize them. The CLI returns N toolCall descriptors; the LLM fires all N in the same message; the IDE dispatches them concurrently; Solo then waits for all to return, runs `ls` checks against the paths above (Peaks-Loop Gate B), and only then advances to RD implementation.
|
|
308
308
|
|
|
309
309
|
**Hard prohibitions on sub-agents** (also passed in each dispatch prompt):
|
|
310
310
|
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
> Reference for `peaks-solo` Swarm phase and the role sub-agents (`peaks-ui` / `peaks-rd` planning / `peaks-qa` test-cases). Defines the **mechanism** of fan-out: how Solo launches sub-agents, what the sub-agent prompt must contain, what the sub-agent must return, and how Solo reduces the result.
|
|
4
4
|
|
|
5
|
-
## Peaks-
|
|
5
|
+
## Peaks-Loop Swarm parallel phase (sub-agent fan-out, default)
|
|
6
6
|
|
|
7
7
|
> **Slice 5 (2026-06-23) + slice 2026-06-23-audit-4th #F3:** the
|
|
8
8
|
> previous "conditional swarm" framing is replaced by the **default
|
|
9
|
-
> fan-out rule** in `skills/peaks-solo/SKILL.md` §"Peaks-
|
|
9
|
+
> fan-out rule** in `skills/peaks-solo/SKILL.md` §"Peaks-Loop Default
|
|
10
10
|
> sub-agent fan-out". When the slice DAG has ≥ 2 leaves at the same
|
|
11
11
|
> topological level, dispatch goes through
|
|
12
12
|
> `peaks sub-agent dispatch --from-dag` (NOT one-at-a-time). The
|
|
@@ -158,7 +158,7 @@ After all sub-agent dispatch calls return and the LLM has invoked the toolCalls,
|
|
|
158
158
|
|
|
159
159
|
## 5. Presence restoration (single-shot)
|
|
160
160
|
|
|
161
|
-
Sub-agents are explicitly forbidden from calling `peaks skill presence:set`. That means `.peaks/.active-skill.json` does not move during the fan-out. Solo sets it to `gate=swarm-fan-out` before fan-out and to `gate=swarm-converged` once after all Tasks return. The status header (the `Peaks-
|
|
161
|
+
Sub-agents are explicitly forbidden from calling `peaks skill presence:set`. That means `.peaks/.active-skill.json` does not move during the fan-out. Solo sets it to `gate=swarm-fan-out` before fan-out and to `gate=swarm-converged` once after all Tasks return. The status header (the `Peaks-Loop Skill: peaks-solo | Peaks-Loop Gate: <gate>` line) therefore reads consistently across the fan-out window.
|
|
162
162
|
|
|
163
163
|
If a sub-agent is misbehaving and writes to `.peaks/.active-skill.json` anyway, the next Solo presence-set (after fan-out) overwrites it — the bug self-heals on the next gate advance, but the swarm-phase display may be off. The hard prohibition is there to prevent this; Solo should still treat the file as a single-writer resource.
|
|
164
164
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
# Peaks-
|
|
1
|
+
# Peaks-Loop Workflow Order + Request Type Classification + Transition Verification Gates
|
|
2
2
|
|
|
3
3
|
> **Maintenance**: This reference holds the canonical contract for (a) how Solo sequences the 11 workflow steps, (b) which `--type` to pass to `peaks request init` for which slice shape, and (c) the executable `ls` / `grep` gate commands that physically block progression. SKILL.md keeps the narrative ("what peaks-solo does"); this file keeps the contract.
|
|
4
4
|
>
|
|
5
5
|
> **Why extracted from SKILL.md**: this content is 165 lines of mostly-tabular + bash-block contract — reference data, not orchestration prose. Inlining it bloats SKILL.md past the 800-line cap (per `common/coding-style.md`). The numbers, gate command shapes, and type-classification rules change rarely; the SKILL.md prose around them (orchestration flow, repair-loop intent, swarm fan-out shape) changes more often.
|
|
6
6
|
>
|
|
7
|
-
> **How peaks-
|
|
7
|
+
> **How peaks-loop tooling reads this file**:
|
|
8
8
|
> - `peaks skill runbook peaks-solo` (CLI) and the in-line LLM reading the SKILL.md should reference this file when the gate-machine or type-classification contract is in play.
|
|
9
9
|
> - The test `tests/unit/skill-default-runbook.test.ts` does NOT check this file (it only checks the runbook). Future tests can add a similar fallback for the gates-and-types contract.
|
|
10
10
|
|
|
11
|
-
## Peaks-
|
|
11
|
+
## Peaks-Loop Request type classification (MANDATORY before `peaks request init`)
|
|
12
12
|
|
|
13
13
|
Before initializing any role artifact, classify the request into exactly one of six types. The choice drives RD/QA gate strictness (see "Mandatory RD QA repair loop"). Pick the **primary intent** — if a request could fit two types, the higher-strictness one wins.
|
|
14
14
|
|
|
@@ -25,34 +25,34 @@ Before initializing any role artifact, classify the request into exactly one of
|
|
|
25
25
|
|
|
26
26
|
For ambiguous cases (e.g. "improve login flow"), ask the user to clarify before initializing. The cost of one `AskUserQuestion` round is much lower than running the wrong gate matrix for the whole workflow.
|
|
27
27
|
|
|
28
|
-
When Peaks-
|
|
28
|
+
When Peaks-Loop Solo coordinates development in a code repository, keep this order explicit:
|
|
29
29
|
|
|
30
|
-
0. **Peaks-
|
|
31
|
-
0.5. **Peaks-
|
|
32
|
-
0.6. **Peaks-
|
|
33
|
-
0.7. **Peaks-
|
|
34
|
-
1. **Peaks-
|
|
35
|
-
2. **Peaks-
|
|
30
|
+
0. **Peaks-Loop Snapshot** — `peaks doctor` + `peaks project dashboard` to capture baseline state before anything else;
|
|
31
|
+
0.5. **Peaks-Loop Workspace initialization** — `.peaks/_runtime/<session-id>/` created, directory structure verified;
|
|
32
|
+
0.6. **Peaks-Loop Project scan** — archetype, component library, CSS framework, build tool, state management, routing, data fetching, legacy signals detected and recorded to `.peaks/_runtime/<session-id>/rd/project-scan.md`;
|
|
33
|
+
0.7. **Peaks-Loop Existing-system extraction** (MANDATORY when archetype ∈ {legacy-frontend, legacy-fullstack, frontend-monorepo}; SKIP for greenfield) — extract visual tokens and code conventions from the live codebase to `.peaks/_runtime/<session-id>/system/existing-system.md`. The path lives under `system/` (not `ui/`) because the file also records non-UI conventions (service-layer signatures, hooks, naming) that backend-only or legacy-fullstack work consumes. See `references/existing-system-extraction.md`. UI design-draft and RD implementation MUST treat the extracted tokens and conventions as hard constraints;
|
|
34
|
+
1. **Peaks-Loop Standards preflight** — `peaks standards init/update --dry-run`, must reference concrete project-scan findings (never emit generic templates);
|
|
35
|
+
2. **Peaks-Loop PRD phase** — capture request as canonical artifact, extract scope and acceptance criteria:
|
|
36
36
|
- Full-auto/Swarm: auto-transition to `confirmed-by-user` once the artifact is complete;
|
|
37
37
|
- Assisted/Strict: pause with `AskUserQuestion` for explicit user confirmation before proceeding;
|
|
38
|
-
3. **Peaks-
|
|
38
|
+
3. **Peaks-Loop Swarm parallel phase** — after PRD confirmed, launch UI, RD(planning), QA(test-cases) simultaneously:
|
|
39
39
|
3a. UI design draft and visual direction (MANDATORY when request is frontend/user-visible; skipped for `--type docs|chore|config` or pure-backend requests);
|
|
40
40
|
3b. RD planning artifact — `rd/tech-doc.md` for feature/refactor, `rd/bug-analysis.md` for bugfix, skipped for docs/chore/config;
|
|
41
41
|
3c. QA test-case generation (skipped for docs/chore — no acceptance surface to validate);
|
|
42
|
-
4. **Peaks-
|
|
43
|
-
5. **Peaks-
|
|
44
|
-
6. **Peaks-
|
|
45
|
-
7. **Peaks-
|
|
46
|
-
8. **Peaks-
|
|
47
|
-
9. **Peaks-
|
|
48
|
-
10. **Peaks-
|
|
49
|
-
11. **Peaks-
|
|
42
|
+
4. **Peaks-Loop RD implementation** — consumes the type-appropriate inputs: project-scan + standards + (if UI involved) UI design-draft + RD planning artifact + QA test-cases. Includes unit tests for new/changed behavior (TDD) unless `--type` is docs/chore;
|
|
43
|
+
5. **Peaks-Loop Code review + security review** — CRITICAL/HIGH issues fixed before progression; marked-blocked issues only allow a blocked handoff;
|
|
44
|
+
6. **Peaks-Loop QA validation** (auto-proceed from RD in full-auto) — execute test cases + API checks + Playwright MCP headed browser E2E for frontend + security/perf checks + test report;
|
|
45
|
+
7. **Peaks-Loop RD↔QA repair loop** — if QA verdict is `return-to-rd`, loop back to step 4 (RD implementation) and re-run through QA; max 3 repair cycles, then emit blocked TXT regardless;
|
|
46
|
+
8. **Peaks-Loop SC phase** — change-control evidence: impact, retention, validate, boundary;
|
|
47
|
+
9. **Peaks-Loop OpenSpec archive** — exit gate: validate → archive only after QA verdict=pass (when `openspec/` exists);
|
|
48
|
+
10. **Peaks-Loop TXT handoff capsule** — mode, validated decisions, artifact paths, standards deltas, open questions, next action;
|
|
49
|
+
11. **Peaks-Loop Final snapshot** — `peaks project dashboard` + `peaks skill doctor` to confirm the workflow closed cleanly.
|
|
50
50
|
|
|
51
|
-
### Peaks-
|
|
51
|
+
### Peaks-Loop Transition verification gates (MANDATORY — run the command, see the output)
|
|
52
52
|
|
|
53
53
|
You cannot declare a phase complete from memory. Each gate below is a `ls` command you **MUST run** and whose output you **MUST see** before proceeding. If any file shows "No such file", the phase is incomplete.
|
|
54
54
|
|
|
55
|
-
**Peaks-
|
|
55
|
+
**Peaks-Loop Gate A — After workspace init + project scan:**
|
|
56
56
|
```bash
|
|
57
57
|
ls .peaks/_runtime/<sessionId>/rd/project-scan.md
|
|
58
58
|
# Expected output: .peaks/_runtime/<sessionId>/rd/project-scan.md
|
|
@@ -61,7 +61,7 @@ ls .peaks/_runtime/<sessionId>/rd/project-scan.md
|
|
|
61
61
|
# File present and complete → reuse (project-scan is a session-scoped singleton)
|
|
62
62
|
```
|
|
63
63
|
|
|
64
|
-
**Peaks-
|
|
64
|
+
**Peaks-Loop Gate A.5 — Existing-system extraction (legacy projects only):**
|
|
65
65
|
```bash
|
|
66
66
|
# If project-scan.md `## Archetype` is greenfield → skip this gate
|
|
67
67
|
# Otherwise:
|
|
@@ -70,9 +70,9 @@ ls .peaks/_runtime/<sessionId>/system/existing-system.md
|
|
|
70
70
|
# (see references/existing-system-extraction.md)
|
|
71
71
|
```
|
|
72
72
|
|
|
73
|
-
**Peaks-
|
|
73
|
+
**Peaks-Loop Gate B — After swarm convergence (UI + RD planning + QA test-cases):**
|
|
74
74
|
|
|
75
|
-
Peaks-
|
|
75
|
+
Peaks-Loop Gate B has two sub-checks: a HARD gate (blocks progression) and an INFORMATIONAL check (records degradation but does not block).
|
|
76
76
|
|
|
77
77
|
```bash
|
|
78
78
|
# B.hard — REQUIRED before continuing to RD implementation.
|
|
@@ -98,7 +98,7 @@ ls .peaks/_runtime/<sessionId>/ui/design-draft.md 2>&1
|
|
|
98
98
|
# "No such file" + pure backend / docs / chore / config → state skip reason in TXT, proceed.
|
|
99
99
|
```
|
|
100
100
|
|
|
101
|
-
**Peaks-
|
|
101
|
+
**Peaks-Loop Gate C — After RD implementation (before QA handoff):**
|
|
102
102
|
|
|
103
103
|
The CLI gate (`peaks request transition --state qa-handoff`) is the authoritative check; running this `ls` first lets you produce missing files before the CLI rejects the transition.
|
|
104
104
|
|
|
@@ -125,7 +125,7 @@ ls .peaks/_runtime/<sessionId>/rd/requests/<rid>.md
|
|
|
125
125
|
# Missing any required file → DO NOT attempt the qa-handoff transition; CLI will reject with PREREQUISITES_MISSING.
|
|
126
126
|
```
|
|
127
127
|
|
|
128
|
-
**Peaks-
|
|
128
|
+
**Peaks-Loop Gate D — After QA validation:**
|
|
129
129
|
|
|
130
130
|
The CLI gate at `qa:verdict-issued` is the authoritative check; this `ls` lets you produce missing evidence before the CLI rejects the transition.
|
|
131
131
|
|
|
@@ -141,17 +141,17 @@ ls .peaks/_runtime/<sessionId>/qa/requests/<rid>.md
|
|
|
141
141
|
# Missing required file → QA incomplete; do not transition to verdict-issued.
|
|
142
142
|
```
|
|
143
143
|
|
|
144
|
-
**Peaks-
|
|
144
|
+
**Peaks-Loop Gate E — Before declaring workflow complete:**
|
|
145
145
|
```bash
|
|
146
146
|
find .peaks/_runtime/<sessionId>/ -type f | sort
|
|
147
147
|
# Verify: files from gates A-D all appear in this list.
|
|
148
148
|
# Any mandatory file missing → NOT complete. Do not emit TXT.
|
|
149
|
-
# Peaks-
|
|
149
|
+
# Peaks-Loop Gate G (CLAUDE.md + .claude/rules/**) must ALSO pass before TXT is emitted.
|
|
150
150
|
```
|
|
151
151
|
|
|
152
|
-
**Peaks-
|
|
152
|
+
**Peaks-Loop Gate F — Root pollution check (BLOCKING before completion):**
|
|
153
153
|
```bash
|
|
154
|
-
# Verify no Peaks-
|
|
154
|
+
# Verify no Peaks-Loop intermediate artifacts leaked to project root.
|
|
155
155
|
ls feishu-doc-*.md *-snapshot.md qa-server.js 2>&1
|
|
156
156
|
# Expected: "No such file or directory" for ALL patterns.
|
|
157
157
|
# Any file found → ROOT POLLUTION. Move it to .peaks/_runtime/<sessionId>/prd/source/
|
|
@@ -162,11 +162,11 @@ ls feishu-doc-*.md *-snapshot.md qa-server.js 2>&1
|
|
|
162
162
|
```bash
|
|
163
163
|
# Extended check for common leak patterns
|
|
164
164
|
find . -maxdepth 1 -name "*.png" -o -name "*.jpg" -o -name "qa-*.js" -o -name "mock-server.*" 2>&1
|
|
165
|
-
# Any Peaks-
|
|
166
|
-
# Legitimate project files (e.g. favicon.png) are fine — only move Peaks-
|
|
165
|
+
# Any Peaks-Loop QA/UI intermediate files here → ROOT POLLUTION. Move and note.
|
|
166
|
+
# Legitimate project files (e.g. favicon.png) are fine — only move Peaks-Loop artifacts.
|
|
167
167
|
```
|
|
168
168
|
|
|
169
|
-
**Peaks-
|
|
169
|
+
**Peaks-Loop Gate G — Project standards present (BLOCKING before workflow completion):**
|
|
170
170
|
```bash
|
|
171
171
|
# After `peaks standards init/update --apply`, verify the files actually landed
|
|
172
172
|
# at the project root. The CLAUDE.md and rules files are required so that
|
|
@@ -180,7 +180,7 @@ ls <repo>/.claude/rules/common/coding-style.md \
|
|
|
180
180
|
<repo>/.claude/rules/common/security.md
|
|
181
181
|
# Any "No such file" → BLOCKED. The standards apply step did not complete; re-run
|
|
182
182
|
# standards init/update with --apply and re-verify.
|
|
183
|
-
# Skipping Peaks-
|
|
183
|
+
# Skipping Peaks-Loop Gate G (e.g. because the user did not explicitly authorize writes) is
|
|
184
184
|
# only acceptable in `assisted`/`strict` modes where the user actively declined; in
|
|
185
185
|
# `full-auto`/`swarm` the absence of these files is a workflow violation.
|
|
186
186
|
```
|
|
@@ -3,9 +3,9 @@ name: peaks-solo-resume
|
|
|
3
3
|
description: Resume an in-flight peaks-solo slice in the current session. Use when the user says "continue the unfinished work", "继续完成", "把刚才没做完的收尾", or invokes `/peaks-solo-resume` directly. Detects the current session's deepest completed gate (via the Step 0.7 detection script at `tests/fixtures/skill-resume-mode-detect.sh`) and surfaces a resume option via `AskUserQuestion`. Triggers on `/peaks-solo-resume`, "继续完成刚才的", "resume the unfinished slice", "把刚才没做完的收尾".
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Peaks-
|
|
6
|
+
# Peaks-Loop Solo Resume (wrapper)
|
|
7
7
|
|
|
8
|
-
Peaks-
|
|
8
|
+
Peaks-Loop Solo Resume is a thin wrapper that handles the **most common high-frequency request shape**: "I was in the middle of something, continue it." It detects the current session's deepest completed gate, surfaces a resume option, then yields to the main `peaks-solo` skill (which runs the actual workflow from the matching gate onwards).
|
|
9
9
|
|
|
10
10
|
**This is a transparent wrapper.** The user does not stay in this skill — once the resume option is confirmed, control hands off to `peaks-solo`. The wrapper exists only to (a) detect the in-flight slice without the LLM re-reading 3-5 artifact files, and (b) surface the resume option as a `AskUserQuestion` before the main loop skips ahead.
|
|
11
11
|
|
|
@@ -3,9 +3,9 @@ name: peaks-solo-status
|
|
|
3
3
|
description: Show the current state of the peaks-solo orchestrator in a compact summary. Use when the user says "what's the current state", "现在到哪了", "where are we", or invokes `/peaks-solo-status` directly. Reads the existing CLI primitives (`peaks skill presence`, `peaks session list`, `peaks project dashboard`, `peaks request show`) and renders a 1-screen status table. Triggers on `/peaks-solo-status`, "现在到哪了", "what is the current state", "show me the dashboard", "where are we".
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Peaks-
|
|
6
|
+
# Peaks-Loop Solo Status (wrapper)
|
|
7
7
|
|
|
8
|
-
Peaks-
|
|
8
|
+
Peaks-Loop Solo Status is a thin wrapper that renders a compact status table for the current peaks-solo orchestrator state. It is the answer to "I just want to know where we are" — no PRD, no RD, no QA, no full peaks-solo orchestration. Just read the existing CLI state and render a 1-screen summary.
|
|
9
9
|
|
|
10
10
|
**This is a transparent wrapper.** The user does not stay in this skill — the status table is rendered, and control hands off (back to the user, or to `peaks-solo` if the user wants to act on the status).
|
|
11
11
|
|
|
@@ -54,7 +54,7 @@ Compact 1-screen format:
|
|
|
54
54
|
=== peaks-solo status ===
|
|
55
55
|
Session: 2026-06-04-session-b60252
|
|
56
56
|
Active: peaks-solo (mode: full-auto, gate: qa-validation)
|
|
57
|
-
Workspace: /Users/yuanyuan/.../peaks-
|
|
57
|
+
Workspace: /Users/yuanyuan/.../peaks-loop/.peaks/2026-06-04-session-b60252
|
|
58
58
|
|
|
59
59
|
| Role | State | Artifact |
|
|
60
60
|
|------|----------------|-------------------------|
|
|
@@ -75,7 +75,7 @@ If the session is fresh (no in-flight slice), render a different layout:
|
|
|
75
75
|
=== peaks-solo status ===
|
|
76
76
|
Session: 2026-06-04-session-b60252
|
|
77
77
|
Active: peaks-solo (mode: full-auto, gate: startup)
|
|
78
|
-
Workspace: /Users/yuanyuan/.../peaks-
|
|
78
|
+
Workspace: /Users/yuanyuan/.../peaks-loop/.peaks/2026-06-04-session-b60252
|
|
79
79
|
|
|
80
80
|
No in-flight slice. Ready for a new request.
|
|
81
81
|
Health: skill-doctor 35/35 pass
|
|
@@ -3,9 +3,9 @@ name: peaks-solo-test
|
|
|
3
3
|
description: Run the project's test suite on the current repo and report results. Use when the user says "run the tests", "跑一下 test", "跑测试", or invokes `/peaks-solo-test` directly. Runs `pnpm vitest run` (or the project's equivalent test command), captures pass/fail counts and any failures, and surfaces a compact summary. Triggers on `/peaks-solo-test`, "跑一下 test", "跑测试", "run the tests", "test now".
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Peaks-
|
|
6
|
+
# Peaks-Loop Solo Test (wrapper)
|
|
7
7
|
|
|
8
|
-
Peaks-
|
|
8
|
+
Peaks-Loop Solo Test is a thin wrapper that runs the project's test suite on the current repo and reports results. It is the answer to "I just want to see if the tests pass" — no PRD, no RD, no QA, no full peaks-solo orchestration. Just `pnpm vitest run` and a compact summary.
|
|
9
9
|
|
|
10
10
|
**This is a transparent wrapper.** The user does not stay in this skill — the test command runs, the result is summarized, and control hands off (back to the user, or to `peaks-solo` if the user wants to act on the result).
|
|
11
11
|
|
|
@@ -18,10 +18,10 @@ peaks project memories --project <repo> --json # load durable memory
|
|
|
18
18
|
|
|
19
19
|
## Step 1: Detect the project's test command
|
|
20
20
|
|
|
21
|
-
The Peaks-
|
|
21
|
+
The Peaks-Loop project standard is `pnpm vitest run` (per `vitest.config.ts` + `package.json` scripts). For other project types, check the package.json scripts first. If the user explicitly named a different command (e.g. "跑 `pnpm test` not vitest"), use that.
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
|
-
# Default for peaks-
|
|
24
|
+
# Default for peaks-loop itself + most TS projects with vitest
|
|
25
25
|
pnpm vitest run
|
|
26
26
|
```
|
|
27
27
|
|