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
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
},
|
|
6
6
|
"plugins": [
|
|
7
7
|
{
|
|
8
|
-
"name": "peaks-
|
|
8
|
+
"name": "peaks-loop",
|
|
9
9
|
"description": "Cross-AI-IDE workflow-gating CLI + 11-skill family. Turns LLM improvisation into auditable engineering process. Skills cover PRD / R&D / UI / QA / change-control / context / SOP definition / orchestration. Soft-fail gates block irreversible actions mid-conversation (even under --dangerously-skip-permissions).",
|
|
10
10
|
"version": "2.0.3",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "SquabbyZ"
|
|
13
13
|
},
|
|
14
|
-
"homepage": "https://github.com/SquabbyZ/peaks-
|
|
15
|
-
"repository": "https://github.com/SquabbyZ/peaks-
|
|
14
|
+
"homepage": "https://github.com/SquabbyZ/peaks-loop",
|
|
15
|
+
"repository": "https://github.com/SquabbyZ/peaks-loop",
|
|
16
16
|
"license": "MIT",
|
|
17
17
|
"tags": [
|
|
18
18
|
"workflow",
|
package/CHANGELOG.md
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## [
|
|
3
|
+
## [3.0.2] — 2026-07-02 — change-id shim retirement (v2.19.0) + Understand Anything hybrid context (3.0.2)
|
|
4
4
|
|
|
5
|
-
**
|
|
5
|
+
**PATCH bump from 3.0.1**. Two independent slices bundled into one release:
|
|
6
|
+
- **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.
|
|
7
|
+
- **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.
|
|
8
|
+
|
|
9
|
+
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.
|
|
6
10
|
|
|
7
11
|
### Removed — change-id shim (cleanup post v2.17.0 hard-kill)
|
|
8
12
|
|
|
@@ -70,7 +74,38 @@
|
|
|
70
74
|
- Existing RD/QA artifacts in `.peaks/_runtime/<sid>/<role>/` remain readable; the planner no longer requires a change-id, and the change-id (if any) is embedded only as a filename slug.
|
|
71
75
|
- The 2.8.3 hard-ban on `.peaks/_runtime/<YYYY-MM-DD-*>/` sibling directories is still enforced via the rewritten guard test and the inline `lstatSync` in `initWorkspace`.
|
|
72
76
|
|
|
73
|
-
## [
|
|
77
|
+
## [3.0.2] — 2026-07-02 — change-id shim retirement (v2.19.0) + Understand Anything hybrid context (3.0.2)
|
|
78
|
+
|
|
79
|
+
**PATCH bump from 3.0.1**. Two independent slices bundled into one release:
|
|
80
|
+
- **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.
|
|
81
|
+
- **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.
|
|
82
|
+
|
|
83
|
+
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.
|
|
84
|
+
|
|
85
|
+
### Added — `peaks understand context` (3.0.2 user-facing feature)
|
|
86
|
+
|
|
87
|
+
The Understand Anything (UA) Claude Code plugin and `@colbymchenry/codegraph` are both complementary project-analysis tools. UA provides a high-level knowledge graph (tours, layers, expert prompts); codegraph provides low-level affected-file analysis. Until 3.0.2, peaks-loop consumers had to choose one or the other at the LLM level — there was no service-layer enforcement of either.
|
|
88
|
+
|
|
89
|
+
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-solo` SKILL.md). The envelope carries a `source` tag so downstream consumers can audit which evidence contributed to the context.
|
|
90
|
+
|
|
91
|
+
**Source routing** (deterministic, decided in `buildUnderstandContext`):
|
|
92
|
+
- `ua-only` — UA knowledge graph present, no codegraph
|
|
93
|
+
- `ua-missing-fallback-codegraph` — UA absent, codegraph produced evidence
|
|
94
|
+
- `ua-and-codegraph-hybrid` — both present, both contribute (parallel `Promise.all`)
|
|
95
|
+
- `both-missing` — neither produced evidence, exit code 2
|
|
96
|
+
|
|
97
|
+
**Added files (5):**
|
|
98
|
+
- `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.
|
|
99
|
+
- `src/services/understand/hybrid-types.ts` (39L, new): `UnderstandContextResult` envelope + 4-value source enum + `CodegraphContextBlock`.
|
|
100
|
+
- `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.
|
|
101
|
+
- `tests/unit/understand-hybrid-service.test.ts` (110L, 4 cases): `ua-only` / `fallback` / `hybrid` / `both-missing`.
|
|
102
|
+
- `tests/integration/understand-hybrid-cli.test.ts` (85L, 3 cases): end-to-end CLI both-missing / ua-only / envelope-shape-stability.
|
|
103
|
+
|
|
104
|
+
**Test evidence:** 7/7 vitest (4 unit + 3 integration), `tsc --noEmit` clean.
|
|
105
|
+
|
|
106
|
+
The peak-loop skill-external-invocation audit pattern (capability discovery + references only + do-not-execute + Peaks authoritative) is preserved: codegraph is consumed via the existing `executeCodegraphInvocation` (no upstream installer calls); UA installation is a text `INSTALL_HINT` only.
|
|
107
|
+
|
|
108
|
+
### Removed — change-id shim (cleanup post v2.17.0 hard-kill, rolled up from v2.19.0)
|
|
74
109
|
|
|
75
110
|
**PATCH bump from 2.18.3**. Resolves the user-reported "新项目第一次使用 peaks-solo 时初始化完不按流程走、开发效果差、再开 session 后才正常" defect. Two surgical fixes to the first-run Solo gates (3 source files, 1 new test file, 2 test-regression updates; no schema change, no new dependencies, no public API change).
|
|
76
111
|
|
|
@@ -246,7 +281,7 @@ Each original file gets a sibling `import { ... } from './X-helpers.js'` + `expo
|
|
|
246
281
|
|
|
247
282
|
## [2.18.1] — 2026-06-29 — verify-pipeline path-axis + prd check-blocks ESM fix (2 P0 toolchain bugs)
|
|
248
283
|
|
|
249
|
-
**PATCH bump from 2.18.0**. Resolves 2 P0 peaks-
|
|
284
|
+
**PATCH bump from 2.18.0**. Resolves 2 P0 peaks-loop toolchain bugs deferred from the v2.18.0 release (CHANGELOG §"Out of scope (deferred)" #5 and #6). No CLI surface change, no new commands, no schema change. Both fixes are surgical: under 10 lines of production-code change each, no refactors.
|
|
250
285
|
|
|
251
286
|
### Feature — `peaks workflow verify-pipeline` session-axis fix (P0 audit #5)
|
|
252
287
|
|
|
@@ -380,8 +415,8 @@ Each original file gets a sibling `import { ... } from './X-helpers.js'` + `expo
|
|
|
380
415
|
|
|
381
416
|
- **#1** Legacy v2.16.0 binding callerId rewrite — defer to `peaks doctor --rebuild-binding` slice. v2.18.0 read path is forward-compatible; active rewrite would create write-amplification loops.
|
|
382
417
|
- **#2** `peaks binding status` CLI (PRD §3.4 nice-to-have) — defer to v2.19 RD.
|
|
383
|
-
- **#5** `peaks workflow verify-pipeline` CLI bug (looks for v2.16.0-era change axis) — defer to peaks-
|
|
384
|
-
- **#6** `peaks prd check-blocks` CLI bug (`require is not defined`, ESM/CJS mix) — defer to peaks-
|
|
418
|
+
- **#5** `peaks workflow verify-pipeline` CLI bug (looks for v2.16.0-era change axis) — defer to peaks-loop toolchain fix slice, NOT a v2.18.0 regression.
|
|
419
|
+
- **#6** `peaks prd check-blocks` CLI bug (`require is not defined`, ESM/CJS mix) — defer to peaks-loop toolchain fix slice, NOT a v2.18.0 regression.
|
|
385
420
|
- **#7** 4 high-pressure near-cap files (`request-artifact-service.ts` 783 / `slice-decompose-service.ts` 775 / `workflow-autonomous-service.ts` 774 / `workspace-service.ts` 742) — out of v2.18.0 scope; backlog unchanged from v2.15.x.
|
|
386
421
|
|
|
387
422
|
### Redo additions (v2.18.0 REDO)
|
|
@@ -426,7 +461,7 @@ The first v2.18.0 release deferred two open items to a redo slice; both are now
|
|
|
426
461
|
- `src/shared/change-id.ts`: 470 → ~210 lines. The substantive logic (change-id validation + path builders + symlink/file binding + LegacyChangeIdBindingError) is **retained as shims** that match the old contract; only the filesystem scope semantics changed.
|
|
427
462
|
- `--change-id` option is preserved on 13 CLI commands as a metadata-only slug (does not affect CLI behavior).
|
|
428
463
|
- `tests/unit/change-id.test.ts` (270 lines) and `tests/unit/workspace/workspace-init-change-id-redirect.test.ts` (441 lines) deleted.
|
|
429
|
-
- 12 change-id-related memories archived under `.peaks/memory/archived/` (recoverable; documented in `peaks-
|
|
464
|
+
- 12 change-id-related memories archived under `.peaks/memory/archived/` (recoverable; documented in `peaks-loop-archive` policy).
|
|
430
465
|
|
|
431
466
|
### Behavior changes (user-visible)
|
|
432
467
|
|
|
@@ -467,7 +502,7 @@ Recommended scenarios before next release (see `peaks/_runtime/2026-06-29-sessio
|
|
|
467
502
|
|
|
468
503
|
## [2.15.1] — 2026-06-28 — 12 Gaps CLI 全套落地 + ice-cola dogfood 验证
|
|
469
504
|
|
|
470
|
-
**PATCH bump from 2.15.0**. Follow-up ship for the 12 Gaps positioning memory (peaks-
|
|
505
|
+
**PATCH bump from 2.15.0**. Follow-up ship for the 12 Gaps positioning memory (peaks-loop 真实定位 + 全套 15 个 Gap CLI 落地). No breaking changes. All new commands are additive top-level (no conflict with existing `peaks solo` / `peaks qa` / `peaks slice` role commands).
|
|
471
506
|
|
|
472
507
|
### Feature — slice DAG layered parallelism + foundation/upstreamSync/complexity 字段
|
|
473
508
|
|
|
@@ -499,7 +534,7 @@ Recommended scenarios before next release (see `peaks/_runtime/2026-06-29-sessio
|
|
|
499
534
|
|
|
500
535
|
### Documentation
|
|
501
536
|
|
|
502
|
-
- 6 new memory files: `peaks-
|
|
537
|
+
- 6 new memory files: `peaks-loop-24h-ai-programmer-positioning` / `user-role-and-tech-decision` / `prd-template-design` / `slice-review-and-qa-perspective` / `fork-sync-and-layered-parallel` / `fast-iteration-quality-loop`
|
|
503
538
|
- 4 SKILL.md 校准注: peaks-solo / peaks-prd / peaks-rd / peaks-qa 加 2026-06-28 校准 anchor
|
|
504
539
|
- 12 Gaps 完整定位: 24h 程序员场景 / 唯一蜂群 / 反伪选择 / 业务审阅 / 轻量回归 / 上线观察期等
|
|
505
540
|
|
|
@@ -531,7 +566,7 @@ Recommended scenarios before next release (see `peaks/_runtime/2026-06-29-sessio
|
|
|
531
566
|
- 真实 k8s rollout / LB config / 监控集成(G15)
|
|
532
567
|
- 2 个 pre-existing 全量并发 race test 留后续
|
|
533
568
|
|
|
534
|
-
## [2.15.0] — 2026-06-28 — Sticky-mode forced re-ask + user-feedback → peaks-
|
|
569
|
+
## [2.15.0] — 2026-06-28 — Sticky-mode forced re-ask + user-feedback → peaks-loop enforcement (slice 002)
|
|
535
570
|
|
|
536
571
|
**MINOR bump from 2.14.2** (slice `2026-06-28-sticky-mode-and-feedback-promotion`). Closes defect A (sticky-mode) and defect B (advisory-only feedback) from PRD-002. Two system-level fixes ship together because both are triggered by the same root cause: user-given rules were not machine-enforced.
|
|
537
572
|
|
|
@@ -547,7 +582,7 @@ Recommended scenarios before next release (see `peaks/_runtime/2026-06-29-sessio
|
|
|
547
582
|
- **`skills/peaks-solo/references/mode-selection-with-stale-presence.md`** (NEW) — Detection protocol + worked example (88b27d defect) + ACL.
|
|
548
583
|
- **`src/services/skills/skill-presence-service.ts`** — New exports: `checkStalePresence`, `clearStalePresenceOnRotation`, types `StalenessCheck`, `StaleReason`.
|
|
549
584
|
|
|
550
|
-
### Feature — User-feedback → peaks-
|
|
585
|
+
### Feature — User-feedback → peaks-loop enforcement (defect B fix)
|
|
551
586
|
|
|
552
587
|
- **`sops/feedback-promotion-sop.md`** (NEW) — SOP that requires every feedback memory (`.peaks/memory/<name>.md` with `metadata.type === 'feedback'`) to be promoted to at least one enforcement layer: A (peaks-sop gate), B (peaks-hooks PreToolUse), or C (mode-gate hardFloorCategory). When a rule spans multiple layers, promote to ALL of them.
|
|
553
588
|
- **`peaks feedback promote <memory-file> [--layer A|B|C] [--dry-run]`** (NEW) — Reads the feedback memory, generates a code stub for the chosen layer, writes the promotion marker (HTML comment + `.promotion.json` sidecar), and writes the envelope at `.peaks/_runtime/<sid>/rd/feedback-promote-<name>.json`.
|
|
@@ -683,16 +718,16 @@ slice-2026-06-28-layered-dag PRD: 大需求(1 周内做不完)= 基础先行 +
|
|
|
683
718
|
- peaks role add senior-fe --preset senior-fe + role list + role check (granted/not)
|
|
684
719
|
- peaks complexity-estimate (auth files → complex, 41 lines + hasAsync)
|
|
685
720
|
- peaks doc changelog-suggest (12 commits parsed into [Unreleased])
|
|
686
|
-
- peaks doc generate-skill (peaks-
|
|
721
|
+
- peaks doc generate-skill (peaks-loop 自己 75+ commands 扫到)
|
|
687
722
|
- peaks slice-integrate (no contracts → graceful empty, 正确路径)
|
|
688
723
|
|
|
689
724
|
**不触动:** transition gates / hard contracts / Karpathy 4 / sub-agent 协议。**新增 10 个新文件**(5 services + 5 CLIs + 5 tests)。
|
|
690
725
|
|
|
691
|
-
### Documentation — peaks-
|
|
726
|
+
### Documentation — peaks-loop 真实定位 + 12 Gaps 沉淀 (2026-06-28 follow-up)
|
|
692
727
|
|
|
693
728
|
会话期间从资深前端 + 后端半盲 + 极致工期 + 24h AI 程序员 + 存量无 UT 的真实场景,沉淀 6 个 memory 文件 + 索引 + 4 个 SKILL.md 校准注。**核心叙事:** `90% 效率 + 80% 质量` > `80% 效率 + 90% 质量`;user 在循环里 = 业务/产品审阅者不参与技术决策;主路径 = 唯一蜂群模式;prd 质量前置 = 4 必填块;QA = 业务视角 + 轻量回归 + 上线观察期。
|
|
694
729
|
|
|
695
|
-
- **6 new memory files** — `.peaks/memory/peaks-
|
|
730
|
+
- **6 new memory files** — `.peaks/memory/peaks-loop-{24h-ai-programmer-positioning, user-role-and-tech-decision, prd-template-design, slice-review-and-qa-perspective, fork-sync-and-layered-parallel, fast-iteration-quality-loop}.md` (warm.project index 18 → 24)
|
|
696
731
|
- **4 SKILL.md 校准注** — peaks-solo / peaks-prd / peaks-rd / peaks-qa 各加精简 anchor(均通过 25KB cap,只引用 memory 不重复内容)
|
|
697
732
|
- **不触动** transition gates / hard contracts / Karpathy 4 / 模式枚举 / mode-gate.ts / sub-agent 协议
|
|
698
733
|
|
|
@@ -750,7 +785,7 @@ slice-2026-06-28-layered-dag PRD: 大需求(1 周内做不完)= 基础先行 +
|
|
|
750
785
|
|
|
751
786
|
---
|
|
752
787
|
|
|
753
|
-
All notable changes to peaks-
|
|
788
|
+
All notable changes to peaks-loop are documented here.
|
|
754
789
|
|
|
755
790
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
756
791
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
@@ -1075,14 +1110,14 @@ peaks-solo previously received 5 heterogeneous signals (security-audit, perf-aud
|
|
|
1075
1110
|
|
|
1076
1111
|
---
|
|
1077
1112
|
|
|
1078
|
-
## [2.13.0] — 2026-06-27 — Zero-human-intervention auto-compact (peaks-
|
|
1113
|
+
## [2.13.0] — 2026-06-27 — Zero-human-intervention auto-compact (peaks-loop drives context compression on any AI CLI)
|
|
1079
1114
|
|
|
1080
1115
|
**MINOR bump from 2.12.0** (slice `v2-13-0-auto-compact-protocol`, 5-sub-task plan AC-1..AC-5, red-line scope ~6 source files + 2 IDE adapter fields).
|
|
1081
1116
|
|
|
1082
1117
|
peaks-solo now autonomously drives context compaction so the LLM-runner stays alive with context < 95% on **any AI CLI**, with **zero human / zero LLM intervention**. Two-tier threshold model:
|
|
1083
1118
|
|
|
1084
|
-
- **85% pre-compact zone** — peaks-
|
|
1085
|
-
- **95% RED LINE** — peaks-
|
|
1119
|
+
- **85% pre-compact zone** — peaks-loop writes a pre-compact checkpoint + convergence plan + auto-decisions log + IDE-side compact dispatch (async-friendly).
|
|
1120
|
+
- **95% RED LINE** — peaks-loop refuses sub-agent dispatch and forces synchronous IDE compact; mandatory, LLM cannot opt out.
|
|
1086
1121
|
|
|
1087
1122
|
Adapter-driven protocol (no hard-coded IDE names): `IdeAdapter.compact?: IdeCompactProfile` is a 4-field per-IDE profile (`envVarForContextPercent` + `compactCommand` + `compactPathway` + `postCompactDetectCommand`). Claude Code is the MVP fill; trae / codex / cursor / qoder / tongyi-lingma / hermes / openclaw ship without `compact` and fall through to the conservative-zero probe (no auto-fire on missing signal).
|
|
1088
1123
|
|
|
@@ -1636,7 +1671,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
1636
1671
|
Rationale: `cc-connect@1.3.1`'s postinstall script runs
|
|
1637
1672
|
`node scripts/install.js` which downloads a Go binary from
|
|
1638
1673
|
`github.com/alibaba/open-code-review/releases` via HTTPS. This was
|
|
1639
|
-
the dominant cause of slow `npm i -g peaks-
|
|
1674
|
+
the dominant cause of slow `npm i -g peaks-loop` installs in
|
|
1640
1675
|
restricted/proxied environments; `peaks companion` itself is also
|
|
1641
1676
|
low-traffic (no Claude Code / Trae workflows depend on it). The
|
|
1642
1677
|
`peaks-companion` skill directory remains in `skills/` for users
|
|
@@ -1658,7 +1693,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
1658
1693
|
`npm i -g @alibaba-group/open-code-review`. Install hint copy in
|
|
1659
1694
|
`ocr-service.ts` and `code-review-commands.ts` updated to reflect
|
|
1660
1695
|
the peer-dependency status. `pnpm.onlyBuiltDependencies` is now an
|
|
1661
|
-
empty array (no peaks-
|
|
1696
|
+
empty array (no peaks-loop dep needs postinstall approval).
|
|
1662
1697
|
- **Refreshed stale JSDoc** on `src/services/config/config-service.ts#hasLegacyGlobalFields` to describe the current 2.0 schema (`version` + `ocr`) — the old comment still described the deleted `companion` block from slice 2026-06-14-cc-connect-weixin.
|
|
1663
1698
|
- **Removed dead `commander.invalidArgument` channel-not-supported block** in `src/cli/index.ts` — the only path that raised this exact error was the now-deleted `peaks companion` command.
|
|
1664
1699
|
|
|
@@ -1728,7 +1763,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
1728
1763
|
### Added
|
|
1729
1764
|
|
|
1730
1765
|
- **Slice DAG dependency analysis + parallel sub-agent dispatch (slice 1.2)** —
|
|
1731
|
-
the `peaks-
|
|
1766
|
+
the `peaks-loop` repo now ships a typed DAG model for slicing work across
|
|
1732
1767
|
parallel sub-agents. `src/services/dispatch/slice-dag.ts` exports
|
|
1733
1768
|
`validateDag` (cycle detection with path-in-error-message),
|
|
1734
1769
|
`topologicalLevels` (linear / diamond / parallel DAGs), and
|
|
@@ -1866,7 +1901,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
1866
1901
|
### Added
|
|
1867
1902
|
|
|
1868
1903
|
- **Multi-IDE agent install (Slice 2.6.1.E)** — the `karpathy-reviewer`
|
|
1869
|
-
sub-agent now auto-installs on `npm i -g peaks-
|
|
1904
|
+
sub-agent now auto-installs on `npm i -g peaks-loop@latest` to **5
|
|
1870
1905
|
platforms** instead of 1. Previously only `~/.claude/agents/`
|
|
1871
1906
|
(claude-code) was populated; 2.6.1 extends to `~/.trae/agents/`,
|
|
1872
1907
|
`~/.trae-cn/agents/`, `~/.codex/agents/`, and `~/.cursor/agents/`.
|
|
@@ -1882,7 +1917,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
1882
1917
|
|
|
1883
1918
|
- **orphan-service false-positive reductions (Slice 2.6.1.A)** —
|
|
1884
1919
|
`peaks scan orphan` had been reporting 77 `cliSubcommandOrphans` for
|
|
1885
|
-
the peaks-
|
|
1920
|
+
the peaks-loop repo. Four surgical fixes bring this down to 35
|
|
1886
1921
|
(54% reduction):
|
|
1887
1922
|
1. The `usageCount` algorithm now excludes the declaration file
|
|
1888
1923
|
itself, so the threshold is "wired iff referenced in any other
|
|
@@ -2013,10 +2048,10 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2013
2048
|
(`passed` / `violations[]` / `gateAction`), file-write contract
|
|
2014
2049
|
(title-case `## Karpathy-Gate` + 4 guideline sections), 8 hard
|
|
2015
2050
|
prohibitions, 5 anti-patterns. Project-internal 2-line pointer at
|
|
2016
|
-
`skills/peaks-rd/references/karpathy-reviewer-prompt.md` (peaks-
|
|
2051
|
+
`skills/peaks-rd/references/karpathy-reviewer-prompt.md` (peaks-loop
|
|
2017
2052
|
2.0 rules convention).
|
|
2018
|
-
- **Auto-install on `npm i -g peaks-
|
|
2019
|
-
`peaks-
|
|
2053
|
+
- **Auto-install on `npm i -g peaks-loop@latest`** (slice 7) — the
|
|
2054
|
+
`peaks-loop` postinstall (`scripts/install-skills.mjs`) now copies
|
|
2020
2055
|
bundled agents from the tarball to `~/.claude/agents/` with
|
|
2021
2056
|
content-hash drift detection (`.peaks-managed` marker + SHA-256).
|
|
2022
2057
|
Mirrors the existing `output-styles` install contract. New function
|
|
@@ -2084,7 +2119,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2084
2119
|
- **L2-install test for Slice 7** — the auto-install path is
|
|
2085
2120
|
L1-verified (vitest + end-to-end postinstall against a temp HOME)
|
|
2086
2121
|
but not yet L2-verified on a real consumer machine. A real
|
|
2087
|
-
`npm i -g peaks-
|
|
2122
|
+
`npm i -g peaks-loop@2.6.0` + postinstall + content-hash drift
|
|
2088
2123
|
check + uninstall + reinstall cycle is the next L2 step (Slice 8
|
|
2089
2124
|
follow-up if issues surface).
|
|
2090
2125
|
- **Trae / Codex / Cursor / Qoder / Tongyi Lingma / Hermes /
|
|
@@ -2108,8 +2143,8 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2108
2143
|
011 added `peaks session checkpoint` / `peaks session resume` CLIs plus
|
|
2109
2144
|
`references/checkpoint-resume.md` + `references/periodic-checkpoint.md`, but
|
|
2110
2145
|
SKILL.md body only mentioned them in a single line. New Claude Code sessions
|
|
2111
|
-
that load SKILL.md never learned the optimization existed. `### Peaks-
|
|
2112
|
-
Step 0.75: Resume from checkpoint` and `### Peaks-
|
|
2146
|
+
that load SKILL.md never learned the optimization existed. `### Peaks-Loop
|
|
2147
|
+
Step 0.75: Resume from checkpoint` and `### Peaks-Loop Step N: Periodic
|
|
2113
2148
|
checkpoint` headings are now in the body (≥ 5 lines each), with explicit
|
|
2114
2149
|
`peaks session checkpoint` / `peaks session resume` CLI mentions and
|
|
2115
2150
|
reference-doc pointers. Byte cap bumped 22K → 24K (precedent: 18K → 20K → 22K).
|
|
@@ -2242,7 +2277,7 @@ are unchanged by this release), `pnpm build` clean.
|
|
|
2242
2277
|
artifacts under `.peaks/_runtime/<change-id>/...` (per-change layout) but this
|
|
2243
2278
|
session writes under `.peaks/_runtime/<session-id>/...` (per-session
|
|
2244
2279
|
runtime layout). The pipeline may report `gateC: fail` despite a
|
|
2245
|
-
PASS verdict; reconcile in a future slice (peaks-
|
|
2280
|
+
PASS verdict; reconcile in a future slice (peaks-loop tooling fix,
|
|
2246
2281
|
not a 2.4.0 blocker).
|
|
2247
2282
|
|
|
2248
2283
|
---
|
|
@@ -2473,7 +2508,7 @@ Full suite: **2957 passed, 12 skipped, 0 failed**.
|
|
|
2473
2508
|
now derive from `parallelBatches` (with legacy `--type` lookup as
|
|
2474
2509
|
the fallback path).
|
|
2475
2510
|
|
|
2476
|
-
- **Extended `peaks-solo/SKILL.md`** — adds "Peaks-
|
|
2511
|
+
- **Extended `peaks-solo/SKILL.md`** — adds "Peaks-Loop Slice
|
|
2477
2512
|
Decomposition (Step 0.6 — pre-mode-selection)" section.
|
|
2478
2513
|
|
|
2479
2514
|
- **Extended `runbook.md`** — adds "Step 2.5: Slice Decomposition"
|
|
@@ -2530,13 +2565,13 @@ Full suite: **2957 passed, 12 skipped, 0 failed**.
|
|
|
2530
2565
|
(baseline 229/2894 -> delta +3 files / +45 tests).
|
|
2531
2566
|
- `npx tsc --noEmit` clean.
|
|
2532
2567
|
- `npm run build` clean.
|
|
2533
|
-
- End-to-end CLI smoke test on peaks-
|
|
2568
|
+
- End-to-end CLI smoke test on peaks-loop repo:
|
|
2534
2569
|
`peaks slice decompose 2026-06-13-slice-decompose-impl --json` returns
|
|
2535
2570
|
`ok: true`, writes 9 work units, 1 dep edge, p50=247.5 within the
|
|
2536
2571
|
expected [202, 248] range (8-WU 2.1.0 dry-run p50=225 +-10%).
|
|
2537
2572
|
- `peaks doctor` clean (no L3 regressions from the new path).
|
|
2538
2573
|
- QA verdict: pass (10 of 10 ACs pass; AC10 has 1 partial
|
|
2539
|
-
regarding peaks-
|
|
2574
|
+
regarding peaks-loop's existing `review-fanout` path mapping, but
|
|
2540
2575
|
the partial is a pre-existing architecture issue, NOT a regression
|
|
2541
2576
|
from this slice).
|
|
2542
2577
|
|
|
@@ -2803,9 +2838,9 @@ Full suite: **2957 passed, 12 skipped, 0 failed**.
|
|
|
2803
2838
|
(was promoted to a hard `dependency` in 2.0.1 and carried through
|
|
2804
2839
|
2.0.2). The ocr npm package's `postinstall` downloads a Go binary
|
|
2805
2840
|
via HTTPS, which fails in restricted/proxied environments and was
|
|
2806
|
-
aborting the whole `npm i -g peaks-
|
|
2841
|
+
aborting the whole `npm i -g peaks-loop` flow. The 5-state detector
|
|
2807
2842
|
(`ready` / `package-missing` / `binary-missing` / `config-missing` /
|
|
2808
|
-
`detection-failed`) and the soft-fail policy are unchanged — peaks-
|
|
2843
|
+
`detection-failed`) and the soft-fail policy are unchanged — peaks-loop
|
|
2809
2844
|
never blocks on ocr being installed; it just no longer forces the
|
|
2810
2845
|
install. Users who want the second-opinion review run
|
|
2811
2846
|
`npm i -g @alibaba-group/open-code-review` explicitly. Under pnpm
|
|
@@ -2819,7 +2854,7 @@ Full suite: **2957 passed, 12 skipped, 0 failed**.
|
|
|
2819
2854
|
|
|
2820
2855
|
### 🎯 Headline
|
|
2821
2856
|
|
|
2822
|
-
**One-key 1.x → 2.0 upgrade.** `npm i -g peaks-
|
|
2857
|
+
**One-key 1.x → 2.0 upgrade.** `npm i -g peaks-loop@2.0` runs the full
|
|
2823
2858
|
upgrade umbrella in the consuming project automatically (gated by the
|
|
2824
2859
|
1.x detector). The manual fallback is `peaks upgrade --to 2.0 --auto`.
|
|
2825
2860
|
|
|
@@ -2839,11 +2874,11 @@ a slice. New CLI: `peaks code-review detect-ocr` / `run-ocr`. See
|
|
|
2839
2874
|
|
|
2840
2875
|
> **Note:** This `optionalDependency` classification was briefly
|
|
2841
2876
|
> promoted to a hard `dependency` in 2.0.1 (alongside the source-of-truth
|
|
2842
|
-
> refactor) because the user feedback was "peaks-
|
|
2877
|
+
> refactor) because the user feedback was "peaks-loop should not leave
|
|
2843
2878
|
> install to the user". 2.0.3 reverts just the classification — the
|
|
2844
2879
|
> source-of-truth refactor stays — because the ocr postinstall
|
|
2845
2880
|
> downloads a Go binary via HTTPS, which fails in restricted/proxied
|
|
2846
|
-
> environments and was aborting `npm i -g peaks-
|
|
2881
|
+
> environments and was aborting `npm i -g peaks-loop`. See the 2.0.3
|
|
2847
2882
|
> entry above for the full rationale.
|
|
2848
2883
|
|
|
2849
2884
|
### Breaking Changes
|
|
@@ -2864,27 +2899,27 @@ a slice. New CLI: `peaks code-review detect-ocr` / `run-ocr`. See
|
|
|
2864
2899
|
`economyMode`, `swarmMode`, headroom settings, etc. are now per-project.
|
|
2865
2900
|
The upgrade umbrella runs `peaks config migrate --apply` automatically.
|
|
2866
2901
|
|
|
2867
|
-
- **Postinstall behavior changed.** `npm i -g peaks-
|
|
2902
|
+
- **Postinstall behavior changed.** `npm i -g peaks-loop@2.0` now:
|
|
2868
2903
|
1. Symlinks bundled skills to **all 8 supported IDE platforms**
|
|
2869
2904
|
(Claude Code, Trae, Cursor, Qoder, Codex, Tongyi Lingma, Aider, Roo Code),
|
|
2870
2905
|
not just the auto-detected one. Per real Trae user feedback 2026-06-11.
|
|
2871
2906
|
2. Installs bundled output styles.
|
|
2872
|
-
3. If `cwd` contains a 1.x peaks-
|
|
2907
|
+
3. If `cwd` contains a 1.x peaks-loop project, fire-and-forgets
|
|
2873
2908
|
`peaks upgrade --to 2.0 --auto`. Opt out with `PEAKS_SKIP_AUTO_UPGRADE=1`.
|
|
2874
2909
|
|
|
2875
|
-
### Changed — ocr source-of-truth moved into peaks-
|
|
2910
|
+
### Changed — ocr source-of-truth moved into peaks-loop's config
|
|
2876
2911
|
|
|
2877
2912
|
Following the same-release user feedback that the original 2.0.0 ocr
|
|
2878
2913
|
config lived in `~/.opencodereview/config.json` (a file outside
|
|
2879
|
-
peaks-
|
|
2914
|
+
peaks-loop's reach) and was set via the `ocr config set` CLI from the
|
|
2880
2915
|
upstream package, the ocr LLM endpoint config now lives under
|
|
2881
2916
|
`peaksConfig.ocr.llm` in `~/.peaks/config.json`. This makes the
|
|
2882
|
-
user-managed LLM endpoint discoverable from a single, peaks-
|
|
2917
|
+
user-managed LLM endpoint discoverable from a single, peaks-loop-owned
|
|
2883
2918
|
config surface.
|
|
2884
2919
|
|
|
2885
2920
|
- **`@alibaba-group/open-code-review` is now a hard `dependency`** (was
|
|
2886
2921
|
`optionalDependency`). The user no longer has to remember to install
|
|
2887
|
-
it; `npm i -g peaks-
|
|
2922
|
+
it; `npm i -g peaks-loop` pulls it. Network-blocked installs that fail
|
|
2888
2923
|
to download the platform binary still soft-fail at runtime
|
|
2889
2924
|
(`binary-missing` state) — the install-time failure risk is the
|
|
2890
2925
|
trade-off.
|
|
@@ -2892,7 +2927,7 @@ config surface.
|
|
|
2892
2927
|
> **Reverted in 2.0.3.** The install-time failure risk turned out
|
|
2893
2928
|
> to bite too many real-world installs (corporate proxies, region
|
|
2894
2929
|
> firewalls, sandboxed dev environments all abort the whole
|
|
2895
|
-
> `npm i -g peaks-
|
|
2930
|
+
> `npm i -g peaks-loop`). 2.0.3 puts ocr back under
|
|
2896
2931
|
> `optionalDependencies`; everything else in this section
|
|
2897
2932
|
> (env-var injection, `config-template` CLI, `missingKeys`,
|
|
2898
2933
|
> source-of-truth under `peaksConfig.ocr.llm`) is unchanged.
|
|
@@ -2905,17 +2940,17 @@ config surface.
|
|
|
2905
2940
|
`OCR_LLM_URL` / `OCR_LLM_TOKEN` / `OCR_LLM_MODEL` /
|
|
2906
2941
|
`OCR_USE_ANTHROPIC` / `OCR_LLM_AUTH_HEADER` from `peaksConfig.ocr.llm`
|
|
2907
2942
|
when spawning the ocr subprocess — the ocr package's highest-priority
|
|
2908
|
-
config path. peaks-
|
|
2943
|
+
config path. peaks-loop never has to materialise
|
|
2909
2944
|
`~/.opencodereview/config.json`, and does NOT auto-configure the
|
|
2910
2945
|
endpoint — the user is the only party that touches the LLM
|
|
2911
2946
|
token / URL.
|
|
2912
2947
|
- **New CLI: `peaks code-review config-template`.** Prints the JSON
|
|
2913
2948
|
snippet the user pastes into `~/.peaks/config.json`. It does NOT
|
|
2914
2949
|
write anything. No `peaks ocr config set`, no `ocr config set` — just
|
|
2915
|
-
edit peaks-
|
|
2950
|
+
edit peaks-loop's config.json (or use
|
|
2916
2951
|
`peaks config set --key ocr.llm.url --value '...'` if preferred).
|
|
2917
2952
|
- **JSON envelope contract change:** `OcrDetectResult.configPath` now
|
|
2918
|
-
points at the peaks-
|
|
2953
|
+
points at the peaks-loop config (e.g. `~/.peaks/config.json`) instead
|
|
2919
2954
|
of the OCR package's legacy file. A new `missingKeys` field lists the
|
|
2920
2955
|
required `ocr.llm.*` keys the user has not yet populated. The
|
|
2921
2956
|
five-state contract and the soft-fail policy are unchanged.
|
|
@@ -2928,14 +2963,14 @@ soft-optional 2.0.0 release should:
|
|
|
2928
2963
|
1. Run `peaks code-review config-template --json` to see the JSON
|
|
2929
2964
|
snippet.
|
|
2930
2965
|
2. Paste the equivalent values into `~/.peaks/config.json` under
|
|
2931
|
-
`ocr.llm` (peaks-
|
|
2966
|
+
`ocr.llm` (peaks-loop handles the camelCase conversion; the
|
|
2932
2967
|
template shows the canonical shape).
|
|
2933
2968
|
3. Re-run `peaks code-review detect-ocr --json` to verify
|
|
2934
2969
|
`state == "ready"`.
|
|
2935
2970
|
|
|
2936
2971
|
The old `~/.opencodereview/config.json` is no longer consulted by
|
|
2937
|
-
peaks-
|
|
2938
|
-
subprocess ignores it when peaks-
|
|
2972
|
+
peaks-loop. The user may delete it at their discretion (the ocr
|
|
2973
|
+
subprocess ignores it when peaks-loop's env vars are present).
|
|
2939
2974
|
|
|
2940
2975
|
### Added
|
|
2941
2976
|
|
|
@@ -2961,7 +2996,7 @@ subprocess ignores it when peaks-cli's env vars are present).
|
|
|
2961
2996
|
|
|
2962
2997
|
- **`peaks agent run`** — ECC 64 agents soft-optional integration
|
|
2963
2998
|
(spec §7.2). When the L3 stack is installed, peaks delegates to it;
|
|
2964
|
-
otherwise degrades to peaks-
|
|
2999
|
+
otherwise degrades to peaks-loop's own core diagnostics.
|
|
2965
3000
|
|
|
2966
3001
|
- **`peaks memory search` / `peaks retrospective search`** — new search
|
|
2967
3002
|
subcommands for the durable memory / retrospective stores.
|
|
@@ -2972,7 +3007,7 @@ subprocess ignores it when peaks-cli's env vars are present).
|
|
|
2972
3007
|
- **`peaks preferences set / get / reset`** — per-project preferences
|
|
2973
3008
|
read/write CLI.
|
|
2974
3009
|
|
|
2975
|
-
- **Two paired tenets** captured in `.peaks/memory/peaks-
|
|
3010
|
+
- **Two paired tenets** captured in `.peaks/memory/peaks-loop-tenet-one-key-completion.md`:
|
|
2976
3011
|
- **One-key completion** — actions that can be done in one step
|
|
2977
3012
|
should not be designed as two-step operations.
|
|
2978
3013
|
- **Minimal user operation** — features can be powerful, but the
|
|
@@ -3083,7 +3118,7 @@ is skipped (`PEAKS_SKIP_AUTO_UPGRADE=1` or `npm i --ignore-scripts`).
|
|
|
3083
3118
|
`economyMode` / `swarmMode` with a pointer to
|
|
3084
3119
|
`<project>/.peaks/preferences.json` (do not silently migrate).
|
|
3085
3120
|
|
|
3086
|
-
The net effect: a freshly-installed peaks-
|
|
3121
|
+
The net effect: a freshly-installed peaks-loop writes a 2-key
|
|
3087
3122
|
`~/.peaks/config.json`; legacy 1.x files migrate to the same
|
|
3088
3123
|
2-key form; the ocr second-opinion config is now the only
|
|
3089
3124
|
discoverable surface the user needs to populate to make
|
|
@@ -3112,9 +3147,9 @@ same animations, same anchor links); only the tagline and
|
|
|
3112
3147
|
call-to-action text differ.
|
|
3113
3148
|
|
|
3114
3149
|
- `README.md` updated to the new layout (typing animation uses the
|
|
3115
|
-
Chinese tagline: `peaks-
|
|
3150
|
+
Chinese tagline: `peaks-loop: 跨 AI IDE 的工程门禁与编排`).
|
|
3116
3151
|
- `README-en.md` synced to mirror the new layout (typing animation
|
|
3117
|
-
uses the English tagline: `peaks-
|
|
3152
|
+
uses the English tagline: `peaks-loop: cross-AI-IDE engineering
|
|
3118
3153
|
gates & orchestration`).
|
|
3119
3154
|
- Card anchors renamed to ASCII-friendly slugs on the English file
|
|
3120
3155
|
(`30-seconds-to-running`, `5-minute-onboarding`, `11-skills-in-the-family`,
|
|
@@ -3131,6 +3166,6 @@ No code, CLI, or schema changes. The CLI still reports
|
|
|
3131
3166
|
|
|
3132
3167
|
Last 1.x release. See git history pre-2.0.0 for details.
|
|
3133
3168
|
|
|
3134
|
-
[2.0.2]: https://github.com/SquabbyZ/peaks-
|
|
3135
|
-
[2.0.1]: https://github.com/SquabbyZ/peaks-
|
|
3136
|
-
[2.0.0]: https://github.com/SquabbyZ/peaks-
|
|
3169
|
+
[2.0.2]: https://github.com/SquabbyZ/peaks-loop/releases/tag/v2.0.2
|
|
3170
|
+
[2.0.1]: https://github.com/SquabbyZ/peaks-loop/releases/tag/v2.0.1
|
|
3171
|
+
[2.0.0]: https://github.com/SquabbyZ/peaks-loop/releases/tag/v2.0.0
|
package/README-en.md
CHANGED
|
@@ -262,10 +262,10 @@ See [`CHANGELOG.md`](./CHANGELOG.md) and [`docs/`](./docs/) for details.
|
|
|
262
262
|
|
|
263
263
|
## 💬 Join the WeChat community
|
|
264
264
|
|
|
265
|
-
Got usage questions, feature requests, or want to chat with the team and other peaks-loop users? Scan to join the **Peaks-
|
|
265
|
+
Got usage questions, feature requests, or want to chat with the team and other peaks-loop users? Scan to join the **Peaks-Loop** WeChat group:
|
|
266
266
|
|
|
267
267
|
<div align="center">
|
|
268
|
-
<img src="./docs/images/wechat-group-qr.png" alt="Peaks-
|
|
268
|
+
<img src="./docs/images/wechat-group-qr.png" alt="Peaks-Loop WeChat group QR code" width="240" />
|
|
269
269
|
</div>
|
|
270
270
|
|
|
271
271
|
> When the QR code expires, feel free to open a GitHub Issue / Discussion instead.
|
package/README.md
CHANGED
|
@@ -346,10 +346,10 @@ peaks gate bypass --sop <id> --phase <phase> --reason "<why>"
|
|
|
346
346
|
|
|
347
347
|
## 💬 加入微信交流群
|
|
348
348
|
|
|
349
|
-
遇到使用问题、功能建议、或者想和other peaks-loop users直接交流?扫码加入 **Peaks-
|
|
349
|
+
遇到使用问题、功能建议、或者想和other peaks-loop users直接交流?扫码加入 **Peaks-Loop** 微信群:
|
|
350
350
|
|
|
351
351
|
<div align="center">
|
|
352
|
-
<img src="./docs/images/wechat-group-qr.png" alt="Peaks-
|
|
352
|
+
<img src="./docs/images/wechat-group-qr.png" alt="Peaks-Loop 微信群二维码" width="240" />
|
|
353
353
|
</div>
|
|
354
354
|
|
|
355
355
|
> 二维码图片过期后,欢迎在 GitHub Issues / Discussions 提反馈。
|
|
@@ -7,9 +7,9 @@ model: sonnet
|
|
|
7
7
|
|
|
8
8
|
# Karpathy Reviewer (peaks-rd 5-way fanout — Slice 5/6 + Slice 6/6 + Slice 7/7 LLM prompt)
|
|
9
9
|
|
|
10
|
-
> **Shipped source** (Slice 7/7): this file is the canonical source for the karpathy-reviewer sub-agent prompt. The `peaks-
|
|
10
|
+
> **Shipped source** (Slice 7/7): this file is the canonical source for the karpathy-reviewer sub-agent prompt. The `peaks-loop` postinstall (`scripts/install-skills.mjs#installBundledAgents`) copies this file to `~/.claude/agents/karpathy-reviewer.md` on every `npm i -g peaks-loop@latest` invocation, with content-hash drift detection (a `.peaks-managed` marker + SHA-256 compare). Edit here; do not edit the copy in `~/.claude/agents/` (it will be overwritten on the next upgrade).
|
|
11
11
|
>
|
|
12
|
-
> **Project-internal pointer**: `skills/peaks-rd/references/karpathy-reviewer-prompt.md` is a 2-line pointer to this file (peaks-
|
|
12
|
+
> **Project-internal pointer**: `skills/peaks-rd/references/karpathy-reviewer-prompt.md` is a 2-line pointer to this file (peaks-loop 2.0 rules convention).
|
|
13
13
|
|
|
14
14
|
You are a **Karpathy-guidelines enforcement reviewer** for peaks-rd. You inspect a slice's RD outputs against the 4 Karpathy guidelines and emit a compact JSON envelope that blocks the `rd → qa-handoff` transition if any guideline fails. You do **not** review style, performance, security, or code quality — those are owned by the parallel 4 sub-agents.
|
|
15
15
|
|
|
@@ -4,7 +4,7 @@ import { fail, ok } from '../../shared/result.js';
|
|
|
4
4
|
export function registerAgentCommands(program, io) {
|
|
5
5
|
const agent = program
|
|
6
6
|
.command('agent')
|
|
7
|
-
.description('Run an ECC agent (soft-optional per spec §7.2). 64 agents are npm-installable via npx ecc; peaks-
|
|
7
|
+
.description('Run an ECC agent (soft-optional per spec §7.2). 64 agents are npm-installable via npx ecc; peaks-loop shells out when ECC is installed and soft-fails with a 4-option install prompt when it is not. Native peaks-loop diagnostics still run via `peaks doctor scan`.');
|
|
8
8
|
addJsonOption(agent
|
|
9
9
|
.command('run <name>')
|
|
10
10
|
.description(`Run an ECC agent by name (e.g. 'security-reviewer', 'code-reviewer'). The canonical subprocess is \`npx ecc agent run <name> --target <path> --json\`.`)
|
|
@@ -28,7 +28,7 @@ export function registerAgentCommands(program, io) {
|
|
|
28
28
|
const data = { ...result, projectRoot };
|
|
29
29
|
const nextActions = [];
|
|
30
30
|
if (result.reason === 'flag-enabled-but-ecc-missing') {
|
|
31
|
-
nextActions.push('ECC not installed. Pick one of the four options below:', ' a) Install: run `npx ecc --help` to install, then re-run `peaks agent run`.', ' b) Skip this run: use the peaks-
|
|
31
|
+
nextActions.push('ECC not installed. Pick one of the four options below:', ' a) Install: run `npx ecc --help` to install, then re-run `peaks agent run`.', ' b) Skip this run: use the peaks-loop native diagnostic via `peaks doctor scan`.', ' c) Skip forever: run `peaks preferences set agentShieldEnabled false`.', ' d) Learn more: see docs/superpowers/specs/2026-06-11-peaks-loop-l1-l2-l3-redesign.md §7.2.');
|
|
32
32
|
}
|
|
33
33
|
const envelope = ok('agent.run', data, [...result.warnings], nextActions);
|
|
34
34
|
printResult(io, envelope, options.json);
|
|
@@ -41,7 +41,7 @@ export function registerAgentCommands(program, io) {
|
|
|
41
41
|
});
|
|
42
42
|
addJsonOption(agent
|
|
43
43
|
.command('list')
|
|
44
|
-
.description(`List the 12 canonical ECC agents (peaks-
|
|
44
|
+
.description(`List the 12 canonical ECC agents (peaks-loop ships a static subset; the full 64 are ECC-discovered).`)).action((options) => {
|
|
45
45
|
const envelope = ok('agent.list', { agents: CANONICAL_ECC_AGENTS.map((a) => ({ name: a.name, description: a.description })) }, [], ['Run any agent with: `peaks agent run <name> --target <path>`']);
|
|
46
46
|
printResult(io, envelope, options.json);
|
|
47
47
|
});
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Registers the new `peaks audit` top-level command with the
|
|
5
5
|
* `red-lines` (L2.1) and `static` (L2.3 P2-a) subcommands.
|
|
6
|
-
* Per `peaks-
|
|
6
|
+
* Per `peaks-loop-when-adding-a-new-subcommand-check-for-existing-top-level-first.md`
|
|
7
7
|
* we verified that no `peaks audit` top-level exists; this is the only
|
|
8
8
|
* file that owns the registration.
|
|
9
9
|
*/
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Registers the new `peaks audit` top-level command with the
|
|
5
5
|
* `red-lines` (L2.1) and `static` (L2.3 P2-a) subcommands.
|
|
6
|
-
* Per `peaks-
|
|
6
|
+
* Per `peaks-loop-when-adding-a-new-subcommand-check-for-existing-top-level-first.md`
|
|
7
7
|
* we verified that no `peaks audit` top-level exists; this is the only
|
|
8
8
|
* file that owns the registration.
|
|
9
9
|
*/
|
|
@@ -50,7 +50,7 @@ function validateProjectRoot(projectArg) {
|
|
|
50
50
|
export function registerAuditCommands(program, io) {
|
|
51
51
|
const audit = program
|
|
52
52
|
.command('audit')
|
|
53
|
-
.description('Audit a project for compliance with peaks-
|
|
53
|
+
.description('Audit a project for compliance with peaks-loop red lines (P0 / P1 / P2 tiers)');
|
|
54
54
|
addJsonOption(audit
|
|
55
55
|
.command('red-lines')
|
|
56
56
|
.description('Scan skills/, .claude/rules/, and openspec/changes/ for MANDATORY / BLOCKING / MUST NOT / RED LINE markers; classify each as cli-backed / partial / prose-only')
|
|
@@ -88,12 +88,12 @@ export function registerAuditCommands(program, io) {
|
|
|
88
88
|
// project-memory decision at `.peaks/memory/audit-decisions/<slug>.md`.
|
|
89
89
|
// `--rid <id>` is an optional disambiguator for multiple audits on
|
|
90
90
|
// the same day (slug becomes `audit-decision-<date>-<rid>`).
|
|
91
|
-
// Per `peaks-
|
|
91
|
+
// Per `peaks-loop-when-adding-a-new-subcommand-check-for-existing-top-level-first`
|
|
92
92
|
// and the dev-preference red line "Default-no on new CLI commands",
|
|
93
93
|
// we extend the existing command rather than register a new subcommand.
|
|
94
94
|
addJsonOption(audit
|
|
95
95
|
.command('static')
|
|
96
|
-
.description('Run the static audit (peaks-
|
|
96
|
+
.description('Run the static audit (peaks-loop lint + optional ECC AgentShield subprocess). Per spec §5.3.')
|
|
97
97
|
.requiredOption('--project <path>', 'target project root')
|
|
98
98
|
.option('--enable-agent-shield', 'force-enable ECC AgentShield subprocess for this call (overrides preference)')
|
|
99
99
|
.option('--disable-agent-shield', 'force-disable ECC AgentShield subprocess for this call (overrides preference)')
|
|
@@ -155,7 +155,7 @@ export function registerAuditCommands(program, io) {
|
|
|
155
155
|
const nextActions = [];
|
|
156
156
|
// Per spec §5.3 + §7.2: when ECC is not installed, surface
|
|
157
157
|
// the canonical 4-option user opt-in UX (a/b/c/d) via
|
|
158
|
-
// nextActions. The peaks-
|
|
158
|
+
// nextActions. The peaks-loop `peaks audit static` CLI is
|
|
159
159
|
// non-interactive (JSON envelope by default), so the 4
|
|
160
160
|
// options are surfaced as machine-readable action strings
|
|
161
161
|
// — same pattern as understand-commands.ts `INSTALL_HINT`.
|
|
@@ -164,7 +164,7 @@ export function registerAuditCommands(program, io) {
|
|
|
164
164
|
nextActions.push(' a) Install: run `npx ecc-agentshield --help` to install, then re-run `peaks audit static`.');
|
|
165
165
|
nextActions.push(' b) Skip this run: pass `--disable-agent-shield` to suppress the subprocess for this call.');
|
|
166
166
|
nextActions.push(' c) Skip forever: run `peaks preferences set agentShieldEnabled false` (writes to `.peaks/preferences.json`).');
|
|
167
|
-
nextActions.push(' d) Learn more: see docs/superpowers/specs/2026-06-11-peaks-
|
|
167
|
+
nextActions.push(' d) Learn more: see docs/superpowers/specs/2026-06-11-peaks-loop-l1-l2-l3-redesign.md §5.3 + §7.2.');
|
|
168
168
|
}
|
|
169
169
|
if (result.agentShield.spawned && result.agentShield.findings.length > 0) {
|
|
170
170
|
nextActions.push(`${result.agentShield.findings.length} ECC findings merged into the audit. Review with \`peaks audit static --json\`.`);
|
|
@@ -139,7 +139,7 @@ export function registerClassifyCommands(program, io) {
|
|
|
139
139
|
// Downgrade is REFUSED per spec §4. Surface this as a hard fail.
|
|
140
140
|
classify
|
|
141
141
|
.command('downgrade')
|
|
142
|
-
.description('REFUSED per spec §4 — peaks-
|
|
142
|
+
.description('REFUSED per spec §4 — peaks-loop never downgrades a classification; ask the user to override explicitly')
|
|
143
143
|
.requiredOption('--level <level>', 'attempted level')
|
|
144
144
|
.requiredOption('--reason <text>', 'reason for the attempt (always rejected)')
|
|
145
145
|
.requiredOption('--project <path>', 'target project root')
|