planr 1.7.1 → 1.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/docs/RELEASE.md +50 -12
- package/docs/contracts/LINUX_RELEASE_PORTABILITY.json +9 -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/README.md
CHANGED
|
@@ -44,6 +44,15 @@ Or with the release installer:
|
|
|
44
44
|
curl -fsSL https://raw.githubusercontent.com/instructa/planr/main/scripts/install.sh | sh
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
+
<!-- planr:linux-release-portability:start surface=README schema=1 -->
|
|
48
|
+
> **Linux release portability — corrected**
|
|
49
|
+
>
|
|
50
|
+
> Contract state: `status=corrected`; `affectedThrough=v1.7.2`; `correctedFrom=v1.7.3`.
|
|
51
|
+
> Published Linux release, installer, and npm binaries through v1.7.2 require GLIBC_2.39; macOS is unaffected.
|
|
52
|
+
> Starting with v1.7.3, current Linux release, installer, and npm artifacts are static-musl executables and do not require glibc.
|
|
53
|
+
> On an affected Linux release, build from source on the target distribution or upgrade to v1.7.3.
|
|
54
|
+
<!-- planr:linux-release-portability:end surface=README schema=1 -->
|
|
55
|
+
|
|
47
56
|
Then initialize a project. When selected, Claude Code and Cursor also receive standalone project worker/reviewer roles; Codex workflow skills come from its plugin:
|
|
48
57
|
|
|
49
58
|
```bash
|
|
@@ -174,6 +183,7 @@ The watcher is likewise a human-only observer. It defaults to the condensed diag
|
|
|
174
183
|
|
|
175
184
|
## What's new
|
|
176
185
|
|
|
186
|
+
- **1.7.2 — Reproducible release candidates:** Locked the pnpm workspace inventory, made external eval fixtures self-contained, refreshed reviewed workflow runtimes, and made all four published architectures execute the exact tagged version before upload. Model-backed evaluation remains a local, candidate-bound maintainer gate; this patch makes no unmeasured speed or quality claim. See the [1.7.2 changelog](CHANGELOG.md#172---2026-07-25) and [release guidance](https://planr.so/docs/operations/release).
|
|
177
187
|
- **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
188
|
- **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
189
|
- **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).
|
package/docs/RELEASE.md
CHANGED
|
@@ -12,12 +12,26 @@ The v1 repository-owned public install order is:
|
|
|
12
12
|
|
|
13
13
|
Published npm versions bundle platform-native binaries; see <https://planr.so/docs/operations/release>.
|
|
14
14
|
|
|
15
|
-
##
|
|
15
|
+
## Candidate and publication
|
|
16
|
+
|
|
17
|
+
`scripts/prepare-release-candidate.sh` is the only supported version-transition
|
|
18
|
+
path. Run it from clean, reviewed source on a release branch. It synchronizes
|
|
19
|
+
`Cargo.toml`, `Cargo.lock`, `package.json`, both plugin manifests under
|
|
20
|
+
`plugins/planr/`, `.cursor-plugin/plugin.json`, and the generated CLI/MCP
|
|
21
|
+
references. It never stages, commits, tags, pushes, or publishes. Commit those
|
|
22
|
+
changes with the changelog and any release-contract transition, then run the
|
|
23
|
+
full candidate verification and independent review on that exact commit.
|
|
24
|
+
|
|
25
|
+
`scripts/release.sh` is the only supported publication path. It runs on clean
|
|
26
|
+
`main`, requires every version and generated reference to already match the
|
|
27
|
+
requested version, reruns the local eval and deterministic gates, and rejects
|
|
28
|
+
any command that changes the reviewed source. Only then does it create and push
|
|
29
|
+
the annotated tag. Editing manifests by hand or publishing an unprepared commit
|
|
30
|
+
skips this ownership boundary.
|
|
16
31
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
ships stale versions.
|
|
32
|
+
```bash
|
|
33
|
+
scripts/prepare-release-candidate.sh 1.2.0
|
|
34
|
+
```
|
|
21
35
|
|
|
22
36
|
```bash
|
|
23
37
|
export PLANR_RELEASE_EVAL_SUITE="$HOME/projects/planr-evals/suites/planr-lean-skills-dogfood.suite.json"
|
|
@@ -36,6 +50,11 @@ candidate-revision digests, and creation/expiry timestamps. Prompts,
|
|
|
36
50
|
completions, credentials, personal paths, raw runs, reports, databases, and the
|
|
37
51
|
receipt itself are never committed to Planr.
|
|
38
52
|
|
|
53
|
+
Fixture paths inside the private suite resolve relative to the suite file's
|
|
54
|
+
directory. The external eval workspace must therefore contain its complete
|
|
55
|
+
fixture tree; release verification does not read ignored files from the Planr
|
|
56
|
+
checkout.
|
|
57
|
+
|
|
39
58
|
Generate the candidate revision with
|
|
40
59
|
`node scripts/verify-release-eval-receipt.mjs --print-candidate-revision`. At
|
|
41
60
|
release time the candidate binary canonicalizes the explicitly supplied suite,
|
|
@@ -45,13 +64,16 @@ stored baseline/candidate/policy identities, and gates that fresh result.
|
|
|
45
64
|
Requested-only values and policy or binding metadata are never
|
|
46
65
|
effective-treatment proof.
|
|
47
66
|
|
|
48
|
-
The
|
|
67
|
+
The two scripts enforce, in order:
|
|
49
68
|
|
|
50
|
-
1.
|
|
51
|
-
2. the version is written into all synchronized manifests
|
|
52
|
-
3.
|
|
53
|
-
4.
|
|
54
|
-
5.
|
|
69
|
+
1. candidate preparation starts from a clean worktree and a nonexistent tag;
|
|
70
|
+
2. the candidate version is written into all synchronized manifests;
|
|
71
|
+
3. frozen workspace synchronization cannot change `pnpm-lock.yaml`;
|
|
72
|
+
4. the candidate build synchronizes `Cargo.lock`, then regenerates and strictly checks both references without Git mutation;
|
|
73
|
+
5. candidate source, changelog, contracts, and generated files are committed and independently reviewed before publication approval;
|
|
74
|
+
6. publication requires clean `main`, the exact prepared versions/references, a committed changelog section, and no existing tag;
|
|
75
|
+
7. the candidate binary validates the sanitized receipt and recomputed comparison, then deterministic tests, package, and security gates run without changing source;
|
|
76
|
+
8. publication creates and pushes only the annotated `vx.y.z` tag for that reviewed commit.
|
|
55
77
|
|
|
56
78
|
Two independent gates back the script:
|
|
57
79
|
|
|
@@ -83,8 +105,19 @@ Only `-alpha.N`, `-beta.N`, and `-rc.N` suffixes are accepted; everything else t
|
|
|
83
105
|
|
|
84
106
|
Pushing a tag `vX.Y.Z` runs `.github/workflows/release.yml`:
|
|
85
107
|
|
|
108
|
+
<!-- planr:linux-release-portability:start surface=maintainerRelease schema=1 -->
|
|
109
|
+
> **Linux release portability — corrected**
|
|
110
|
+
>
|
|
111
|
+
> Contract state: `status=corrected`; `affectedThrough=v1.7.2`; `correctedFrom=v1.7.3`.
|
|
112
|
+
> Published Linux release, installer, and npm binaries through v1.7.2 require GLIBC_2.39; macOS is unaffected.
|
|
113
|
+
> Starting with v1.7.3, current Linux release, installer, and npm artifacts are static-musl executables and do not require glibc.
|
|
114
|
+
> On an affected Linux release, build from source on the target distribution or upgrade to v1.7.3.
|
|
115
|
+
<!-- planr:linux-release-portability:end surface=maintainerRelease schema=1 -->
|
|
116
|
+
|
|
117
|
+
When this contract changes, update `docs/contracts/LINUX_RELEASE_PORTABILITY.json`, run `pnpm docs:sync-linux-portability`, and commit every synchronized notice before running the release gates.
|
|
118
|
+
|
|
86
119
|
1. `create-release` verifies the tag against `Cargo.toml`, all distribution manifests, and the changelog section, then creates a draft GitHub Release.
|
|
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.
|
|
120
|
+
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. Future Linux candidates use native x86_64/arm64 GitHub runners and the same digest-pinned Rust 1.90.0 Alpine/musl image. Before upload, the extracted tarball must pass embedded checksums, static ELF checks (no interpreter, shared-library dependency, or glibc symbol), a fresh project/plan/map/pick/done/export lifecycle in digest-pinned Alpine 3.20.8 with networking disabled, and exact-byte npm wrapper execution.
|
|
88
121
|
3. `finalize` downloads all uploaded assets, writes one aggregated `SHA256SUMS` covering every tarball, uploads it, and publishes the release.
|
|
89
122
|
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>.
|
|
90
123
|
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`).
|
|
@@ -109,6 +142,11 @@ scripts/security-local.sh
|
|
|
109
142
|
```
|
|
110
143
|
|
|
111
144
|
The external consumer E2E suite must pass when available on the release machine.
|
|
145
|
+
Pull-request CI separately builds both Linux architectures through the canonical
|
|
146
|
+
containerized release script, runs the full portability contract without
|
|
147
|
+
secrets or publication permissions, and aggregates checksums for the exact two
|
|
148
|
+
candidate tarballs. A same-runner `--version` smoke is useful architecture
|
|
149
|
+
evidence but is not Linux compatibility proof by itself.
|
|
112
150
|
|
|
113
151
|
## Build Artifact
|
|
114
152
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "planr",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.3",
|
|
4
4
|
"description": "Local-first planning and execution coordination for coding agents.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -25,7 +25,10 @@
|
|
|
25
25
|
"security:staged": "node scripts/hooks/block-forbidden-staged-files.mjs",
|
|
26
26
|
"build:native": "cargo build --release",
|
|
27
27
|
"test": "cargo test",
|
|
28
|
+
"verify:github-actions": "node scripts/verify-github-actions.mjs && node scripts/test-verify-github-actions.mjs",
|
|
29
|
+
"verify:pnpm-workspace": "node scripts/verify-pnpm-workspace.mjs",
|
|
28
30
|
"verify:release-eval-gate": "node scripts/test-release-eval-gate.mjs",
|
|
31
|
+
"verify:release-script": "node scripts/test-release-script.mjs",
|
|
29
32
|
"pack:check": "npm pack --dry-run",
|
|
30
33
|
"docs:dev": "pnpm --filter @planr/docs dev",
|
|
31
34
|
"docs:alchemy:dev": "pnpm --filter @planr/docs alchemy:dev",
|
|
@@ -44,6 +47,7 @@
|
|
|
44
47
|
"docs:verify-agent-landing": "pnpm --filter @planr/docs verify:agent-landing",
|
|
45
48
|
"docs:verify-concepts": "cargo build --bin planr && pnpm --filter @planr/docs verify:concepts",
|
|
46
49
|
"docs:verify-maintenance": "pnpm --filter @planr/docs verify:maintenance",
|
|
50
|
+
"docs:sync-linux-portability": "pnpm --filter @planr/docs sync:linux-portability",
|
|
47
51
|
"docs:verify-deployment": "pnpm --filter @planr/docs verify:deployment",
|
|
48
52
|
"docs:verify-release": "pnpm --filter @planr/docs verify:release",
|
|
49
53
|
"docs:verify-release-live": "pnpm --filter @planr/docs verify:release-live",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "planr",
|
|
3
3
|
"description": "Skill-driven planning and execution loop for coding agents: one planr entry point, an autonomous planr-loop, and evidence-backed task graph skills powered by the planr CLI.",
|
|
4
|
-
"version": "1.7.
|
|
4
|
+
"version": "1.7.3",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "instructa"
|
|
7
7
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "planr",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.3",
|
|
4
4
|
"description": "Skill-driven planning and execution loop for coding agents: one $planr entry point, an autonomous $planr-loop, and evidence-backed task graph skills powered by the planr CLI.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "instructa",
|