planr 1.7.2 → 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 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
package/docs/RELEASE.md CHANGED
@@ -12,18 +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
- ## Version Bump
16
-
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. Generated CLI and MCP references
20
- must match the currently committed version before the release branch merges.
21
- After bumping on clean `main`, the script refreshes pnpm's derived workspace
22
- metadata with the frozen lockfile and rejects any lockfile byte change. It then
23
- builds, regenerates, and strictly checks both references before staging them in
24
- the same atomic release commit as the six synchronized version files. Manual
25
- tagging or pre-generating a future version skips this ownership boundary and
26
- can ship stale references.
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.
31
+
32
+ ```bash
33
+ scripts/prepare-release-candidate.sh 1.2.0
34
+ ```
27
35
 
28
36
  ```bash
29
37
  export PLANR_RELEASE_EVAL_SUITE="$HOME/projects/planr-evals/suites/planr-lean-skills-dogfood.suite.json"
@@ -56,15 +64,16 @@ stored baseline/candidate/policy identities, and gates that fresh result.
56
64
  Requested-only values and policy or binding metadata are never
57
65
  effective-treatment proof.
58
66
 
59
- The script enforces, in order:
67
+ The two scripts enforce, in order:
60
68
 
61
- 1. branch is `main`, worktree is clean, `CHANGELOG.md` already has a committed `## [x.y.z]` section, and the tag does not exist;
62
- 2. the version is written into all synchronized manifests;
63
- 3. `pnpm install --frozen-lockfile` refreshes installed workspace metadata, and any `pnpm-lock.yaml` byte change stops the release before build, references, gates, or Git mutation;
64
- 4. the build synchronizes `Cargo.lock`, and the bumped candidate regenerates and strictly verifies both generated references before any later gate or Git mutation;
65
- 5. the candidate binary validates the sanitized receipt, observed effective treatment, candidate binding, and existing Planr comparison/gate before any Git mutation;
66
- 6. deterministic gates: `cargo test` (including manifest drift), `npm pack --dry-run`, and `scripts/security-local.sh` (betterleaks + trivy);
67
- 7. one mechanical commit containing the six version files plus both generated references, an annotated `vx.y.z` tag carrying that summary, and a single push of branch plus tag.
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.
68
77
 
69
78
  Two independent gates back the script:
70
79
 
@@ -96,8 +105,19 @@ Only `-alpha.N`, `-beta.N`, and `-rc.N` suffixes are accepted; everything else t
96
105
 
97
106
  Pushing a tag `vX.Y.Z` runs `.github/workflows/release.yml`:
98
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
+
99
119
  1. `create-release` verifies the tag against `Cargo.toml`, all distribution manifests, and the changelog section, then creates a draft GitHub Release.
100
- 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.
101
121
  3. `finalize` downloads all uploaded assets, writes one aggregated `SHA256SUMS` covering every tarball, uploads it, and publishes the release.
102
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>.
103
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`).
@@ -122,6 +142,11 @@ scripts/security-local.sh
122
142
  ```
123
143
 
124
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.
125
150
 
126
151
  ## Build Artifact
127
152
 
@@ -0,0 +1,9 @@
1
+ {
2
+ "affectedReleases": [
3
+ "1.7.2"
4
+ ],
5
+ "affectedThrough": "1.7.2",
6
+ "correctedFrom": "1.7.3",
7
+ "noticeSchema": 1,
8
+ "status": "corrected"
9
+ }
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.2",
3
+ "version": "1.7.3",
4
4
  "description": "Local-first planning and execution coordination for coding agents.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -47,6 +47,7 @@
47
47
  "docs:verify-agent-landing": "pnpm --filter @planr/docs verify:agent-landing",
48
48
  "docs:verify-concepts": "cargo build --bin planr && pnpm --filter @planr/docs verify:concepts",
49
49
  "docs:verify-maintenance": "pnpm --filter @planr/docs verify:maintenance",
50
+ "docs:sync-linux-portability": "pnpm --filter @planr/docs sync:linux-portability",
50
51
  "docs:verify-deployment": "pnpm --filter @planr/docs verify:deployment",
51
52
  "docs:verify-release": "pnpm --filter @planr/docs verify:release",
52
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.2",
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.2",
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",