planr 1.6.0 → 1.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -22
- package/docs/ARCHITECTURE.md +12 -1
- package/docs/RELEASE.md +37 -7
- package/docs/SWITCHLOOM_COMPATIBILITY.md +46 -0
- package/docs/contracts/EVAL_CONTRACT_V1.md +2072 -0
- package/docs/documentation/CONTRACT.md +7 -7
- package/docs/documentation/COVERAGE.md +5 -3
- package/docs/documentation/INFORMATION_ARCHITECTURE.md +5 -2
- package/docs/fixtures/mcp-contract.json +12 -0
- package/npm/native/darwin-arm64/planr +0 -0
- package/npm/native/darwin-x86_64/planr +0 -0
- package/npm/native/linux-arm64/planr +0 -0
- package/npm/native/linux-x86_64/planr +0 -0
- package/package.json +5 -1
- package/plugins/planr/.claude-plugin/plugin.json +1 -1
- package/plugins/planr/.codex-plugin/plugin.json +1 -1
- package/plugins/planr/agents/planr-worker.md +1 -1
- package/plugins/planr/skills/planr-goal/SKILL.md +21 -49
- package/plugins/planr/skills/planr-loop/SKILL.md +28 -94
- package/plugins/planr/skills/planr-loop/agents/planr-worker.md +1 -1
- package/plugins/planr/skills/planr-loop/references/host-dispatch.md +10 -0
- package/plugins/planr/skills/planr-loop/references/recovery-and-verification.md +24 -0
- package/plugins/planr/skills/planr-task-graph/SKILL.md +21 -190
- package/docs/CI.md +0 -54
- package/docs/CLAUDE_CODE.md +0 -52
- package/docs/CLI_REFERENCE.md +0 -160
- package/docs/CODEX.md +0 -56
- package/docs/CURSOR.md +0 -114
- package/docs/EXAMPLE_WEBAPP.md +0 -103
- package/docs/GOALS.md +0 -175
- package/docs/HANDOFFS_AND_STORIES.md +0 -121
- package/docs/HOOKS.md +0 -34
- package/docs/IMPORT.md +0 -21
- package/docs/INSTALL.md +0 -115
- package/docs/MCP_CONTRACT.md +0 -73
- package/docs/MCP_GUIDE.md +0 -40
- package/docs/MODEL_ROUTING.md +0 -33
- package/docs/NPM.md +0 -40
- package/docs/OPERATING_MODEL.md +0 -250
- package/docs/ROUTING_BUNDLES.md +0 -15
- package/docs/SECURITY.md +0 -8
- package/docs/SKILLS.md +0 -261
- package/docs/TASK_GRAPH_MODEL.md +0 -272
- package/docs/TESTING.md +0 -87
- package/docs/TROUBLESHOOTING.md +0 -30
- package/docs/planr-spec/ADRS.md +0 -160
- package/docs/planr-spec/AI_SPEC.md +0 -138
- package/docs/planr-spec/ANALYTICS_OBSERVABILITY_SPEC.md +0 -124
- package/docs/planr-spec/API_AND_DATA_MODEL.md +0 -517
- package/docs/planr-spec/BACKEND_IMPLEMENTATION_SPEC.md +0 -178
- package/docs/planr-spec/CLIENT_IMPLEMENTATION_SPEC.md +0 -119
- package/docs/planr-spec/DESIGN_SYSTEM_SPEC.md +0 -102
- package/docs/planr-spec/PRODUCT_SPEC.md +0 -193
- package/docs/planr-spec/QA_ACCEPTANCE_TESTS.md +0 -146
- package/docs/planr-spec/README.md +0 -67
- package/docs/planr-spec/REFERENCES.md +0 -29
- package/docs/planr-spec/RELEASE_READINESS.md +0 -95
- package/docs/planr-spec/SAFETY_PRIVACY_SECURITY.md +0 -169
- package/docs/planr-spec/TASKS.md +0 -932
- package/docs/planr-spec/TECH_ARCHITECTURE.md +0 -143
- package/docs/planr-spec/UX_FLOWS.md +0 -235
- package/docs/release-candidates/planr-v1.5.2.md +0 -164
- /package/docs/{planr-spec → contracts}/V1_1_DIFFERENTIATION_CONTRACT.md +0 -0
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ Flat todo lists break down the moment real work has structure. Planr models work
|
|
|
24
24
|
- **State survives sessions.** Markdown plans hold scope and acceptance criteria; the SQLite graph holds live status across handoffs, restarts, and agent switches.
|
|
25
25
|
- **Failure is structured.** Stale picks, timeouts, and retries are detectable and recoverable (`planr recover sweep`).
|
|
26
26
|
|
|
27
|
-
Three layers make that work: **Plans** (reviewable Markdown packages), the **Map** (live dependency graph with picks, reviews, logs), and **Agent loops** (skills, CLI, and MCP workflows for every major coding agent). Full model: [Task Graph Model](docs/
|
|
27
|
+
Three layers make that work: **Plans** (reviewable Markdown packages), the **Map** (live dependency graph with picks, reviews, logs), and **Agent loops** (skills, CLI, and MCP workflows for every major coding agent). Full model: [Task Graph Model](https://planr.so/docs/concepts/graph-and-readiness) and [Operating Model](https://planr.so/docs/guides/daily-worker-loop).
|
|
28
28
|
|
|
29
29
|
## Install
|
|
30
30
|
|
|
@@ -50,7 +50,7 @@ Then initialize a project. When selected, Claude Code and Cursor also receive st
|
|
|
50
50
|
planr project init "My Product" --client all
|
|
51
51
|
```
|
|
52
52
|
|
|
53
|
-
Manual downloads, from-source builds, and client wiring details: [Install Guide](docs/
|
|
53
|
+
Manual downloads, from-source builds, and client wiring details: [Install Guide](https://planr.so/docs/getting-started/installation).
|
|
54
54
|
|
|
55
55
|
## Install The Plugin (Skills)
|
|
56
56
|
|
|
@@ -93,7 +93,7 @@ planr install cursor # writes .cursor/mcp.json, .cursor/agents/, and
|
|
|
93
93
|
planr install cursor --no-mcp # project skills, subagents, and hooks; no MCP config
|
|
94
94
|
```
|
|
95
95
|
|
|
96
|
-
The dry-run also prints a one-click `cursor://` deeplink for user-level MCP install. Marketplace listing is pending review. Multitasking with Cursor subagents: [Cursor guide](docs/
|
|
96
|
+
The dry-run also prints a one-click `cursor://` deeplink for user-level MCP install. Marketplace listing is pending review. Multitasking with Cursor subagents: [Cursor guide](https://planr.so/docs/integrations/cursor).
|
|
97
97
|
|
|
98
98
|
</details>
|
|
99
99
|
|
|
@@ -110,6 +110,28 @@ planr prompt cli
|
|
|
110
110
|
|
|
111
111
|
</details>
|
|
112
112
|
|
|
113
|
+
## Plugins
|
|
114
|
+
|
|
115
|
+
Planr plugins extend coding-agent setup around the same local-first graph. They do not move ownership of Planr Core: maps, picks, logs, reviews, approvals, and closure evidence still live in Planr, while optional integrations own their own install, generated files, and uninstall lifecycle.
|
|
116
|
+
|
|
117
|
+
Switchloom is an optional external routing plugin for repository-local model-routing declarations. Use the corrected current quickstart command with the exact verified package version:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
npx switchloom@0.3.2 compile balanced --host codex-openai --integration planr --output balanced-planr-codex.json
|
|
121
|
+
npx switchloom@0.3.2 apply balanced-planr-codex.json --repository .
|
|
122
|
+
planr agents check
|
|
123
|
+
planr agents list --json
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Planr consumes the resulting `.planr/agents.toml`, `.planr/policy.toml`, and route evidence; Codex consumes generated native roles after the host reloads its repository config. Switchloom remains responsible for its external lifecycle, including uninstall:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
npx switchloom@0.3.2 uninstall --repository .
|
|
130
|
+
planr agents check
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
References: [Plugins docs](https://planr.so/docs/plugins/switchloom), [Switchloom v0.3.2 release](https://github.com/instructa/switchloom/releases/tag/v0.3.2), [current corrected Switchloom quickstart](https://github.com/instructa/switchloom#setup-from-the-website), [v0.3.2 tagged quickstart](https://github.com/instructa/switchloom/blob/v0.3.2/README.md#setup-from-the-website), and [v0.3.2 lifecycle docs](https://github.com/instructa/switchloom/blob/v0.3.2/docs/preset-composition.md#repository-lifecycle-commands). The tagged v0.3.2 README quickstart preserves stale `0.3.1` command examples, so use the explicit `switchloom@0.3.2` commands above for the verified Planr contract.
|
|
134
|
+
|
|
113
135
|
## Tell Your Agent
|
|
114
136
|
|
|
115
137
|
Remember one public entry point: `$planr`. It routes ordinary planning and status work from live Planr state. For long autonomous runs, use the explicit two-step workflow: `$planr-goal` prepares durable state, then `$planr-loop` executes the resulting plan.
|
|
@@ -136,7 +158,7 @@ with log evidence, all reviews are closed complete, and a live verification log
|
|
|
136
158
|
the feature working in the browser. Iteration budget: 10.
|
|
137
159
|
```
|
|
138
160
|
|
|
139
|
-
Mid-project work (a new feature, refactor, or fix on an existing project) works the same — it gets its own feature-scoped plan and extends the existing map. Both journeys with example prompts: [
|
|
161
|
+
Mid-project work (a new feature, refactor, or fix on an existing project) works the same — it gets its own feature-scoped plan and extends the existing map. Both journeys with example prompts: [Prompt Recipes](https://planr.so/docs/agents/prompt-recipes). Coding agents inspect progress with the compact default `planr map show` or, preferably, `planr map show --json`. The tree preserves exact dependency vocabulary while marking satisfied edges as `blocks✓`; active `blocks` stay red. The boxed `planr map show --view diagram` renderer is exclusively for human supervision and uses neutral `then` routes once those dependencies are satisfied. Agents must not invoke it. Humans can add `--full` for complete status, title, worker, critical-lane, and pressure details. Interactive map output colors states automatically; `--no-color` and `NO_COLOR` keep it plain.
|
|
140
162
|
|
|
141
163
|
To supervise an agent from a second terminal, leave the agent running in terminal A and watch its scoped graph in terminal B:
|
|
142
164
|
|
|
@@ -152,30 +174,32 @@ The watcher is likewise a human-only observer. It defaults to the condensed diag
|
|
|
152
174
|
|
|
153
175
|
## What's new
|
|
154
176
|
|
|
155
|
-
- **1.
|
|
156
|
-
- **1.
|
|
177
|
+
- **1.7.1 — Leaner agent guidance and safer local releases:** Slimmed the hot-path Planr skills while preserving their execution and review contracts, moved maintainer benchmark inputs and results outside the public repository, added a fail-closed local release-evidence gate without API keys in CI, and verified the optional external Switchloom v0.3.2 integration. The public 1.7 eval CLI remains available in this patch. See the [1.7.1 changelog](CHANGELOG.md#171---2026-07-25) and [release guidance](https://planr.so/docs/operations/release).
|
|
178
|
+
- **1.7.0 — Evidence-backed evaluations:** Added durable eval suites, runs, comparisons, invalidation and rescoring, correctness/quality/performance gates, cost per verified success, and effort recommendations. The complete workflow is available through the CLI; MCP only mirrors selected surfaces and is optional. Security gates now cover repository leaks, vulnerable dependencies, workflow hardening, privacy, and forbidden staged files. See the [Eval Contract](docs/contracts/EVAL_CONTRACT_V1.md), [CLI Reference](https://planr.so/docs/reference/cli), and the [1.7.0 changelog](CHANGELOG.md#170---2026-07-22).
|
|
179
|
+
- **1.6.0 — Human map observation:** Added a condensed boxed diagram, live two-terminal watching, accessible state colors, and clearer satisfied dependency routes. These views are intentionally for human supervision; agents keep using the default tree or JSON snapshots. See [Task Graph Model](https://planr.so/docs/concepts/graph-and-readiness), [CLI Reference](https://planr.so/docs/reference/cli), and the [1.6.0 changelog](CHANGELOG.md#160---2026-07-21).
|
|
180
|
+
- **1.5.2 — Standalone core, optional Switchloom:** Planr consumes provider-neutral repository declarations and route evidence only; it works without any routing files, and requested-only routing metadata is not execution proof. Optional model-routing lifecycle is external, with [Switchloom v0.3.2](https://github.com/instructa/switchloom/releases/tag/v0.3.2) verified as the current repository-local handoff outside Planr. Start with [Plugins](https://planr.so/docs/plugins), [Switchloom](https://switchloom.ai), the [Switchloom repository](https://github.com/instructa/switchloom), the [current corrected quickstart](https://github.com/instructa/switchloom#setup-from-the-website), the [v0.3.2 tagged quickstart](https://github.com/instructa/switchloom/blob/v0.3.2/README.md#setup-from-the-website), [v0.3.2 lifecycle docs](https://github.com/instructa/switchloom/blob/v0.3.2/docs/preset-composition.md#repository-lifecycle-commands), and the [Changelog](CHANGELOG.md). The tagged v0.3.2 README quickstart keeps stale `0.3.1` command examples; use explicit `switchloom@0.3.2` commands when following Planr's verified contract.
|
|
157
181
|
- **1.4.0 — Verified presets:** Added policy-driven composition, evaluation, signed registry evidence, and the public catalog. See the [1.4.0 release notes](https://github.com/instructa/planr/releases/tag/v1.4.0).
|
|
158
|
-
- **1.3.0 — Native host hooks:** Added automatic session-state injection and loop recovery for supported hosts. See the [
|
|
182
|
+
- **1.3.0 — Native host hooks:** Added automatic session-state injection and loop recovery for supported hosts. See the [Integrations guide](https://planr.so/docs/integrations) and [1.3.0 release notes](https://github.com/instructa/planr/releases/tag/v1.3.0).
|
|
159
183
|
|
|
160
184
|
For the complete release history, see the [Changelog](CHANGELOG.md).
|
|
161
185
|
|
|
162
186
|
## Docs
|
|
163
187
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
- [
|
|
167
|
-
- [
|
|
168
|
-
- [
|
|
169
|
-
- [
|
|
170
|
-
- [MCP
|
|
171
|
-
- [Codex](docs/
|
|
172
|
-
- [
|
|
173
|
-
- [Task Graph Model](docs/
|
|
174
|
-
- [Architecture](docs/
|
|
175
|
-
- [Testing](docs/
|
|
176
|
-
- [Troubleshooting](docs/
|
|
177
|
-
- [Specification Package](
|
|
178
|
-
- More: [Changelog](CHANGELOG.md), [
|
|
188
|
+
Full documentation lives at [planr.so/docs](https://planr.so/docs).
|
|
189
|
+
|
|
190
|
+
- [Install](https://planr.so/docs/getting-started/installation)
|
|
191
|
+
- [Skills](https://planr.so/docs/agents/skills) · [Prompt Recipes](https://planr.so/docs/agents/prompt-recipes)
|
|
192
|
+
- [Plugins and Model Routing](https://planr.so/docs/plugins) · [Recipes](https://planr.so/docs/guides/recipes)
|
|
193
|
+
- [Integrations and Host Hooks](https://planr.so/docs/integrations)
|
|
194
|
+
- [CLI Reference](https://planr.so/docs/reference/cli) · [MCP Reference](https://planr.so/docs/reference/mcp)
|
|
195
|
+
- [Codex](https://planr.so/docs/integrations/codex) · [Claude Code](https://planr.so/docs/integrations/claude-code) · [Cursor](https://planr.so/docs/integrations/cursor)
|
|
196
|
+
- [Daily Worker Loop](https://planr.so/docs/guides/daily-worker-loop)
|
|
197
|
+
- [Task Graph Model](https://planr.so/docs/concepts/graph-and-readiness)
|
|
198
|
+
- [Architecture](https://planr.so/docs/contributing/architecture)
|
|
199
|
+
- [Testing](https://planr.so/docs/contributing/testing)
|
|
200
|
+
- [Troubleshooting](https://planr.so/docs/troubleshooting)
|
|
201
|
+
- [Specification Package](.planr/plans/product/planr/README.md)
|
|
202
|
+
- More: [Changelog](CHANGELOG.md), [Packages and Reuse](https://planr.so/docs/guides/packages-and-reuse), [Security and Privacy](https://planr.so/docs/contributing/security-and-privacy), [Handoff and Resume](https://planr.so/docs/guides/handoff-and-resume)
|
|
179
203
|
|
|
180
204
|
## License
|
|
181
205
|
|
package/docs/ARCHITECTURE.md
CHANGED
|
@@ -8,7 +8,8 @@ Planr V1 is a single Rust binary with explicit module ownership. The crate stays
|
|
|
8
8
|
- `tests/e2e.rs`: real CLI, MCP, HTTP, import, review-gate, run-log, and concurrent-pick tests.
|
|
9
9
|
- `plugins/planr/`: the installable plugin payload — all ten skills, independent Claude/Cursor worker and reviewer role assets, and the per-host plugin manifests. Planr does not ship model-pinned Codex roles.
|
|
10
10
|
- `.agents/plugins/marketplace.json`, `.claude-plugin/marketplace.json`: marketplace manifests pointing Codex and Claude Code at `plugins/planr`.
|
|
11
|
-
- `docs/`: user and contributor guides; `docs/
|
|
11
|
+
- `docs/`: user and contributor guides; `docs/contracts/` holds the frozen product contracts that gate CI.
|
|
12
|
+
- `.planr/plans/product/planr/`: the production specification package for Planr V1, stored as a normal Planr product plan package. It is the only committed `.planr` path; all other runtime state stays local.
|
|
12
13
|
- `examples/real-world-flow.md`: executable real-world operator flow.
|
|
13
14
|
- `scripts/`: installer and release packaging scripts.
|
|
14
15
|
- `npm/`: the npm wrapper package.
|
|
@@ -49,6 +50,16 @@ Planr V1 is a single Rust binary with explicit module ownership. The crate stays
|
|
|
49
50
|
- `src/rolefiles.rs`: static host workflow roles and Cursor skill payloads. It does not select or pin models; externally generated routing artifacts stay outside Planr ownership.
|
|
50
51
|
- `src/util.rs`: small CLI-boundary utilities. Owns ids, timestamps, path helpers, output formatting, and safe file writes.
|
|
51
52
|
|
|
53
|
+
## Eval Contract V1/V1.1 Ownership
|
|
54
|
+
|
|
55
|
+
The frozen product contract lives in `docs/contracts/EVAL_CONTRACT_V1.md` until implementation promotes it into code. Its V1.1 efficiency-evidence amendment is additive and keeps the same owner split:
|
|
56
|
+
|
|
57
|
+
- repository EvalSuite manifests and fixtures are authored inputs;
|
|
58
|
+
- the suite loader owns validation, safe path resolution, normalization, canonical ordering, and digests;
|
|
59
|
+
- SQLite owns immutable suite snapshots, runs, case results, samples, attempt lineage, metering-basis provenance, comparisons, invalidations, rescoring provenance, and eval evidence references;
|
|
60
|
+
- the comparison engine owns verdicts, reason codes, matched effective-treatment compatibility, and derived failure-inclusive efficiency metrics;
|
|
61
|
+
- existing map/log/review/approval state remains authoritative for work closure, so eval evidence may support a review but must never close or reopen items by itself.
|
|
62
|
+
|
|
52
63
|
## Boundary Rules
|
|
53
64
|
|
|
54
65
|
- Command parsing belongs in `src/cli.rs`; process startup belongs in `src/main.rs`; command execution belongs under `src/app/`.
|
package/docs/RELEASE.md
CHANGED
|
@@ -10,28 +10,59 @@ The v1 repository-owned public install order is:
|
|
|
10
10
|
4. npm (`npm install -g planr`) with bundled platform binaries.
|
|
11
11
|
5. Cargo/source builds for maintainers and contributors.
|
|
12
12
|
|
|
13
|
-
Published npm versions bundle platform-native binaries; see
|
|
13
|
+
Published npm versions bundle platform-native binaries; see <https://planr.so/docs/operations/release>.
|
|
14
14
|
|
|
15
15
|
## Version Bump
|
|
16
16
|
|
|
17
|
-
`scripts/release.sh` is the only supported release path. The version lives in
|
|
17
|
+
`scripts/release.sh` is the only supported release path. The version lives in
|
|
18
|
+
`Cargo.toml`; `package.json`, both plugin manifests under `plugins/planr/`, and
|
|
19
|
+
`.cursor-plugin/plugin.json` must match it. Manual tagging skips this sync and
|
|
20
|
+
ships stale versions.
|
|
18
21
|
|
|
19
22
|
```bash
|
|
23
|
+
export PLANR_RELEASE_EVAL_SUITE="$HOME/projects/planr-evals/suites/planr-lean-skills-dogfood.suite.json"
|
|
24
|
+
export PLANR_RELEASE_EVAL_RECEIPT=/path/to/sanitized-release-eval-receipt.json
|
|
25
|
+
export PLANR_RELEASE_EVAL_DB=/path/to/planr-evals/results/eval.sqlite
|
|
20
26
|
scripts/release.sh 1.2.0 "one-line release summary"
|
|
21
27
|
```
|
|
22
28
|
|
|
29
|
+
Maintainer benchmarks, baselines, model/effort runs, and results live outside
|
|
30
|
+
the public repository in `~/projects/planr-evals`; that workspace and its exact
|
|
31
|
+
layout are not a Planr runtime contract. All three paths above are explicit so a
|
|
32
|
+
release cannot silently use the product repository's ordinary `.planr` database
|
|
33
|
+
or a stale bundled suite. The receipt is a short-lived local pointer containing
|
|
34
|
+
only `schema_version`, comparison and candidate-run identities, suite and
|
|
35
|
+
candidate-revision digests, and creation/expiry timestamps. Prompts,
|
|
36
|
+
completions, credentials, personal paths, raw runs, reports, databases, and the
|
|
37
|
+
receipt itself are never committed to Planr.
|
|
38
|
+
|
|
39
|
+
Generate the candidate revision with
|
|
40
|
+
`node scripts/verify-release-eval-receipt.mjs --print-candidate-revision`. At
|
|
41
|
+
release time the candidate binary canonicalizes the explicitly supplied suite,
|
|
42
|
+
requires a Planr-validated effective route observation (host report, telemetry
|
|
43
|
+
receipt, process exit, or local observation), recomputes the comparison from its
|
|
44
|
+
stored baseline/candidate/policy identities, and gates that fresh result.
|
|
45
|
+
Requested-only values and policy or binding metadata are never
|
|
46
|
+
effective-treatment proof.
|
|
47
|
+
|
|
23
48
|
The script enforces, in order:
|
|
24
49
|
|
|
25
50
|
1. branch is `main`, worktree is clean, `CHANGELOG.md` already has a committed `## [x.y.z]` section, and the tag does not exist;
|
|
26
|
-
2. the version is written into all
|
|
27
|
-
3.
|
|
28
|
-
4.
|
|
51
|
+
2. the version is written into all synchronized manifests plus `Cargo.lock`;
|
|
52
|
+
3. the candidate binary validates the sanitized receipt, observed effective treatment, candidate binding, and existing Planr comparison/gate before any Git mutation;
|
|
53
|
+
4. deterministic gates: `cargo test` (including manifest drift), `npm pack --dry-run`, and `scripts/security-local.sh` (betterleaks + trivy);
|
|
54
|
+
5. one mechanical commit `release x.y.z: <summary>`, an annotated `vx.y.z` tag carrying that summary, and a single push of branch plus tag.
|
|
29
55
|
|
|
30
56
|
Two independent gates back the script:
|
|
31
57
|
|
|
32
58
|
- `cargo test` fails on every push when any manifest version drifts from `Cargo.toml`.
|
|
33
59
|
- The release workflow's `Verify release versions are consistent` step refuses the tag when the tag, any manifest, or the `CHANGELOG.md` section disagree.
|
|
34
60
|
|
|
61
|
+
Public CI runs `npm run verify:release-eval-gate` with a synthetic suite, fake
|
|
62
|
+
binary, and temporary database. It verifies the fail-closed mechanism without a
|
|
63
|
+
provider call, private benchmark, API key, or release receipt. Model-backed
|
|
64
|
+
quality decisions remain a local maintainer preflight.
|
|
65
|
+
|
|
35
66
|
## Alpha Channel (Pre-Releases)
|
|
36
67
|
|
|
37
68
|
Pre-release versions use the same script and pipeline with a semver pre-release suffix:
|
|
@@ -55,7 +86,7 @@ Pushing a tag `vX.Y.Z` runs `.github/workflows/release.yml`:
|
|
|
55
86
|
1. `create-release` verifies the tag against `Cargo.toml`, all distribution manifests, and the changelog section, then creates a draft GitHub Release.
|
|
56
87
|
2. `build` compiles and packages `planr-<os>-<arch>.tar.gz` for `darwin-arm64`, `darwin-x86_64`, `linux-x86_64`, and `linux-arm64`, then uploads each asset to the draft release.
|
|
57
88
|
3. `finalize` downloads all uploaded assets, writes one aggregated `SHA256SUMS` covering every tarball, uploads it, and publishes the release.
|
|
58
|
-
4. `npm-publish` downloads the release assets, verifies them against `SHA256SUMS`, bundles the four platform binaries into `npm/native/`, smoke-tests the wrapper, and publishes to npm via Trusted Publishing (OIDC). Runs only when the repository variable `NPM_PUBLISH_ENABLED` is `true`; requires the one-time Trusted Publisher setup described
|
|
89
|
+
4. `npm-publish` downloads the release assets, verifies them against `SHA256SUMS`, bundles the four platform binaries into `npm/native/`, smoke-tests the wrapper, and publishes to npm via Trusted Publishing (OIDC). Runs only when the repository variable `NPM_PUBLISH_ENABLED` is `true`; requires the one-time Trusted Publisher setup described at <https://planr.so/docs/operations/release>.
|
|
59
90
|
5. `homebrew-tap` regenerates `Formula/planr.rb` with `scripts/generate-formula.sh` and pushes it to `instructa/homebrew-tap` (installed as `brew install instructa/tap/planr`).
|
|
60
91
|
|
|
61
92
|
## Changelog
|
|
@@ -115,7 +146,6 @@ The package must include:
|
|
|
115
146
|
|
|
116
147
|
- `npm/bin/planr.js`
|
|
117
148
|
- `docs/`
|
|
118
|
-
- `docs/MCP_CONTRACT.md`
|
|
119
149
|
- `docs/fixtures/mcp-contract.json`
|
|
120
150
|
- `plugins/`
|
|
121
151
|
- `README.md`
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Switchloom Compatibility
|
|
2
|
+
|
|
3
|
+
This report records Planr-side compatibility evidence for the exact public `switchloom@0.3.2` package. It is intentionally narrow: Planr verifies the package identity, repository-local declaration boundary, and its own consumption/proof semantics. It does not turn Switchloom internals, generated semantic role names, routes, doctor output, or runtime telemetry into a future contract.
|
|
4
|
+
|
|
5
|
+
## Exact v0.3.2 Behavior Verified
|
|
6
|
+
|
|
7
|
+
- Public npm metadata for `switchloom@0.3.2` resolved from the npm registry:
|
|
8
|
+
- `dist.integrity`: `sha512-g96AZIFKXpG1toAO+Gri1sjD8q0SxFxtRSLAcRcSVRGDCZ/dUtERepsOB+cSHHH7hUsT0jSKZYPfNqiLvfKk9Q==`
|
|
9
|
+
- `dist.shasum`: `d7d72c74ac3ecd5a3e355edd8e297284cba04403`
|
|
10
|
+
- `dist.tarball`: `https://registry.npmjs.org/switchloom/-/switchloom-0.3.2.tgz`
|
|
11
|
+
- `npm pack switchloom@0.3.2 --pack-destination /private/tmp --json` returned a 9-entry package with the expected native binaries, wrapper, provenance file, README, license, and package manifest.
|
|
12
|
+
- The packed tarball at `/private/tmp/switchloom-0.3.2.tgz` had SHA256 `0c04e94fc4372845edf395b3ea51139b8a4b46f34404940e06b3f4ec3ce22d20`.
|
|
13
|
+
- The reviewed oracle contract expects the v0.3.2 Planr integration bundle `balanced-codex-openai@1.0.0+2.0.0`, bundle SHA256 `bf48f502080ff444ccb67bc4eeacc9391e77dbf5f0f8f277814e9abc2443e6c8`, 10 managed artifacts, 7 Codex-native roles, and 5 Planr work-type routes.
|
|
14
|
+
- Repository docs now document the safe external operator flow with explicit `switchloom@0.3.2` commands, no normal-guidance `apply --yes`, and a caveat that the v0.3.2 tagged README preserves stale `0.3.1` examples.
|
|
15
|
+
- The immutable live oracle used isolated source clone `/private/tmp/planr-switchloom-source.6gbzx2/source` and completed with `SWITCHLOOM_SOURCE_ROOT=/private/tmp/planr-switchloom-source.6gbzx2/source SWITCHLOOM_TARBALL=/private/tmp/switchloom-0.3.2.tgz PLANR_ORACLE_TEMP_PARENT=/private/tmp npm run verify:switchloom-cross-product`, exit 0. The live root is `/private/tmp/planr-switchloom-cross-product-Lbluca`, with oracle receipt `/private/tmp/planr-switchloom-cross-product-Lbluca/oracle-receipt.json`.
|
|
16
|
+
- The retained replay of the same root and isolated source clone exited 0 and wrote `/private/tmp/planr-switchloom-cross-product-Lbluca/replay-receipt.json`. Replay first asserts the current source fingerprint matches the retained live receipt, then separately verifies the source remains unchanged during replay.
|
|
17
|
+
- The live and replay receipts bind the same Switchloom source fingerprint before and after each mode: HEAD `8ff05776085d3175211e080143c513c5173abaa4`, clean status SHA256 `e3b0c442...`, inventory SHA256 `790de1be...`, file-hash SHA256 `97a26b12...`, and 303 paths. The maintainer's original sibling Switchloom worktree was not modified for this proof.
|
|
18
|
+
- The successful live oracle proves exact package tarball SHA256 `0c04e94fc4372845edf395b3ea51139b8a4b46f34404940e06b3f4ec3ce22d20`, bundle SHA256 `bf48f502080ff444ccb67bc4eeacc9391e77dbf5f0f8f277814e9abc2443e6c8`, 7 profiles, 5 routes, 10 managed artifacts, Planr declaration consumption, Planr audit, uninstall and unrouted Planr behavior, no-auth fail-closed behavior, requested-only rejection, global sentinel preservation, and routing ownership.
|
|
19
|
+
- The successful live oracle proves separate native maker and reviewer execution: maker `model_routing_terra_high` on `gpt-5.6-terra` with high effort, reviewer `model_routing_sol_high` on `gpt-5.6-sol` with high effort. Hidden spawn messages are intentionally opaque; the proof is exact successful parent `agent_type`, `task_name`, and `fork_turns` metadata correlated with matching direct child role rollouts, repo-local skill reads, and item-specific Planr evidence. It does not claim plaintext hidden-message recovery.
|
|
20
|
+
- One malformed parent `spawn_agent` attempt in the retained live root was retained as a diagnostic and not counted as a successful spawn. The oracle still requires exactly two successful routed spawns and still rejects default, wrong-role, missing-role, or extra successful child execution.
|
|
21
|
+
- A separate fresh root, `/private/tmp/planr-switchloom-cross-product-gHtZQI`, was correctly rejected: Codex claimed `spawn_agent` was unavailable and directly handled the work, producing 0 successful routed spawns. That run is negative evidence for host stochastic failure detection, not a passing compatibility run.
|
|
22
|
+
|
|
23
|
+
## Stable Planr Boundary
|
|
24
|
+
|
|
25
|
+
- Planr Core is provider-neutral. It reads `.planr/agents.toml`, `.planr/policy.toml`, and route-audit evidence, but does not install, invoke, compile, apply, or uninstall Switchloom output.
|
|
26
|
+
- `.planr/agents.toml` profiles, routes, model names, efforts, role names, and fallback chains are opaque data to Planr. Planr may place requested routing data in pick packets, but requested-only values are not effective execution proof.
|
|
27
|
+
- `--profile` records the profile a worker reports for a run. Genuine runtime proof belongs in route-audit evidence that separates requested, host-resolved, and effective dimensions.
|
|
28
|
+
- Missing effective host evidence remains explicitly unavailable. Planr must not infer it from generated declarations, policy files, or worker claims.
|
|
29
|
+
- External lifecycle remains external: Switchloom owns compile, apply, generated host roles, host reload requirements, and uninstall. Planr validates its own consumption with `planr agents check` and records evidence through logs/reviews.
|
|
30
|
+
- Planr works without routing declarations. After an external uninstall, unrouted Planr fallback behavior remains the stable Core contract.
|
|
31
|
+
|
|
32
|
+
## Not Guaranteed For Future Switchloom Work
|
|
33
|
+
|
|
34
|
+
Future Switchloom work, including thread `019f8a71-5b6c-7c41-9850-7050516fcee4`, may change semantic role names, route names, doctor output, generated artifacts, runtime telemetry, and host-specific evidence shape. Planr must not contract those as stable.
|
|
35
|
+
|
|
36
|
+
The stable compatibility promise is limited to Planr's boundary: consume provider-neutral declarations when present, keep requested values separate from effective evidence, reject requested-only metadata as proof, avoid owning external lifecycle, and continue operating when routing files are absent.
|
|
37
|
+
|
|
38
|
+
Any future mismatch in package identity, generated artifacts, Planr declaration parsing, route-audit semantics, host evidence, source-worktree mutation, or security posture should become a new finding or fix item rather than an optimistic compatibility claim.
|
|
39
|
+
|
|
40
|
+
## Verification Notes
|
|
41
|
+
|
|
42
|
+
- Rust formatting, clippy, full serial cargo tests, e2e, eval-contract, and routing-ownership tests passed when run outside the sandbox where HTTP/process tests are permitted.
|
|
43
|
+
- Docs reference generation, typecheck, reference verification, maintenance verification, and Node 22 production build passed. Node 26 production docs builds hung in the optimized Next build phase and were terminated; the Node 22 build is the relevant repository runtime.
|
|
44
|
+
- npm package dry-run passed using a temp npm cache because the user npm cache contains root-owned files.
|
|
45
|
+
- Privacy checks passed. The docs app Next.js runtime was upgraded from `16.2.10` to `16.2.11` in `apps/docs/package.json` and `pnpm-lock.yaml`; the lockfile change is limited to Next core/env/SWC and mechanically recalculated peer snapshots. `npm run security:check` passed with BetterLeaks reporting no leaks and Trivy reporting 0 vulnerabilities for both `Cargo.lock` and `pnpm-lock.yaml`.
|
|
46
|
+
- The immutable source clone proof supersedes earlier retained-replay-only evidence. Earlier concurrent external mutation and missing-receipt attempts were treated as real failures and are not counted as passing evidence.
|