planr 1.10.0-alpha.9 → 2.0.0
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/plugin.json +11 -0
- package/CHANGELOG.md +20 -0
- package/README.md +27 -245
- package/docs/board.md +44 -0
- package/docs/cli.md +100 -0
- package/docs/concepts.md +133 -0
- package/docs/contract.md +150 -0
- package/docs/plugins/bb.md +49 -0
- package/docs/plugins/claude-code.md +84 -0
- package/docs/plugins/codex.md +77 -0
- package/docs/quickstart.md +307 -0
- package/docs/setup.md +103 -0
- package/package.json +21 -68
- package/plugin.json +12 -0
- package/skills/planr/SKILL.md +64 -0
- package/skills/planr/assets/board/fonts/LICENSE-mona-sans.txt +93 -0
- package/skills/planr/assets/board/fonts/LICENSE-monaspace.txt +93 -0
- package/skills/planr/assets/board/fonts/MonaSans-Variable.woff2 +0 -0
- package/skills/planr/assets/board/fonts/MonaspaceNeon-400.woff2 +0 -0
- package/skills/planr/assets/board/fonts/MonaspaceNeon-500.woff2 +0 -0
- package/skills/planr/assets/board/fonts/MonaspaceNeon-600.woff2 +0 -0
- package/skills/planr/assets/board/template.html +788 -0
- package/skills/planr/assets/templates/goal.md +13 -0
- package/skills/planr/assets/templates/hook.sh +4 -0
- package/skills/planr/assets/templates/in-repo.config.json +6 -0
- package/skills/planr/assets/templates/planr.config.json +6 -0
- package/skills/planr/assets/templates/tasks-README.md +14 -0
- package/skills/planr/references/format.md +88 -0
- package/skills/planr/references/work-a-goal.md +62 -0
- package/skills/planr/scripts/lib/board.mjs +39 -0
- package/skills/planr/scripts/lib/graph.mjs +345 -0
- package/skills/planr/scripts/lib/runs.mjs +127 -0
- package/skills/planr/scripts/lib/version.mjs +11 -0
- package/skills/planr/scripts/planr.mjs +386 -0
- package/docs/ARCHITECTURE.md +0 -136
- package/docs/RELEASE.md +0 -275
- package/docs/SWITCHLOOM_COMPATIBILITY.md +0 -14
- package/docs/contracts/BROWSER_HARNESS_ADAPTER_V1.md +0 -75
- package/docs/contracts/EVAL_CONTRACT_V1.md +0 -2072
- package/docs/contracts/EVIDENCE_ADAPTER_PROTOCOL_V1.md +0 -98
- package/docs/contracts/EVIDENCE_CONTRACT_V1.md +0 -382
- package/docs/contracts/GROK_INTEGRATION_V1.md +0 -139
- package/docs/contracts/LINUX_RELEASE_PORTABILITY.json +0 -9
- package/docs/contracts/PI_INTEGRATION_V1.md +0 -164
- package/docs/contracts/V1_1_DIFFERENTIATION_CONTRACT.md +0 -177
- package/docs/contracts/fixtures/evidence/v1/examples/coverage-verdict.json +0 -66
- package/docs/contracts/fixtures/evidence/v1/examples/evidence-attempt.json +0 -39
- package/docs/contracts/fixtures/evidence/v1/examples/evidence-policy.json +0 -108
- package/docs/contracts/fixtures/evidence/v1/examples/evidence-receipt.json +0 -93
- package/docs/contracts/fixtures/evidence/v1/examples/evidence-waiver.json +0 -31
- package/docs/contracts/fixtures/evidence/v1/examples/proof-obligation.json +0 -55
- package/docs/contracts/fixtures/evidence/v1/examples/proof-preset.json +0 -19
- package/docs/contracts/fixtures/evidence/v1/examples/untrusted-evidence-proposal.json +0 -20
- package/docs/contracts/fixtures/evidence/v1/examples/verification-capability-instance.json +0 -39
- package/docs/contracts/fixtures/evidence/v1/examples/verification-capability-manifest.json +0 -52
- package/docs/contracts/fixtures/evidence/v1/negative/aborted-zero-exit-attempt.json +0 -39
- package/docs/contracts/fixtures/evidence/v1/negative/adapter-registration-missing-execution-contract.json +0 -88
- package/docs/contracts/fixtures/evidence/v1/negative/available-empty-probe-capability.json +0 -27
- package/docs/contracts/fixtures/evidence/v1/negative/blocked-coverage-with-stale-reason.json +0 -27
- package/docs/contracts/fixtures/evidence/v1/negative/empty-trust-bindings-receipt.json +0 -72
- package/docs/contracts/fixtures/evidence/v1/negative/failed-zero-exit-attempt.json +0 -39
- package/docs/contracts/fixtures/evidence/v1/negative/forged-trusted-receipt.json +0 -35
- package/docs/contracts/fixtures/evidence/v1/negative/inconclusive-clean-exit-attempt.json +0 -39
- package/docs/contracts/fixtures/evidence/v1/negative/inconclusive-coverage-with-blocked-reason.json +0 -27
- package/docs/contracts/fixtures/evidence/v1/negative/minimal-policy-missing-owned-inputs.json +0 -5
- package/docs/contracts/fixtures/evidence/v1/negative/mismatched-probe-execution-id-capability.json +0 -42
- package/docs/contracts/fixtures/evidence/v1/negative/passed-empty-attempt.json +0 -22
- package/docs/contracts/fixtures/evidence/v1/negative/policy-default-preset-unregistered.json +0 -102
- package/docs/contracts/fixtures/evidence/v1/negative/policy-weakening-without-waiver.json +0 -102
- package/docs/contracts/fixtures/evidence/v1/negative/process-probe-missing-output-limits.json +0 -49
- package/docs/contracts/fixtures/evidence/v1/negative/satisfied-empty-coverage-verdict.json +0 -14
- package/docs/contracts/fixtures/evidence/v1/negative/skipped-zero-exit-attempt.json +0 -39
- package/docs/contracts/fixtures/evidence/v1/negative/stale-coverage-with-inconclusive-reason.json +0 -27
- package/docs/contracts/fixtures/evidence/v1/negative/timed-out-zero-exit-attempt.json +0 -39
- package/docs/contracts/fixtures/evidence/v1/negative/unavailable-zero-exit-attempt.json +0 -39
- package/docs/contracts/fixtures/evidence/v1/negative/unbound-waiver.json +0 -21
- package/docs/contracts/fixtures/evidence/v1/negative/unsatisfied-coverage-without-gap.json +0 -63
- package/docs/contracts/fixtures/evidence/v1/negative/waived-coverage-forbidden-gap-reason.json +0 -28
- package/docs/contracts/fixtures/evidence/v1/negative/waived-coverage-missing-waiver-id.json +0 -27
- package/docs/contracts/fixtures/evidence/v1/schemas/evidence-contract-v1.schema.json +0 -2685
- package/docs/contracts/schemas/com.planr.web.dom_state.v1.schema.json +0 -30
- package/docs/documentation/CONTRACT.md +0 -164
- package/docs/documentation/COVERAGE.md +0 -98
- package/docs/documentation/INFORMATION_ARCHITECTURE.md +0 -151
- package/docs/fixtures/mcp-contract.json +0 -153
- package/npm/bin/native-launcher.js +0 -67
- package/npm/bin/planr-browser-harness-adapter.js +0 -8
- package/npm/bin/planr.js +0 -8
- package/npm/native/darwin-arm64/planr +0 -0
- package/npm/native/darwin-arm64/planr-browser-harness-adapter +0 -0
- package/npm/native/darwin-arm64/planr-host-capability-validator +0 -0
- package/npm/native/darwin-x86_64/planr +0 -0
- package/npm/native/darwin-x86_64/planr-browser-harness-adapter +0 -0
- package/npm/native/darwin-x86_64/planr-host-capability-validator +0 -0
- package/npm/native/linux-arm64/planr +0 -0
- package/npm/native/linux-arm64/planr-browser-harness-adapter +0 -0
- package/npm/native/linux-arm64/planr-host-capability-validator +0 -0
- package/npm/native/linux-x86_64/planr +0 -0
- package/npm/native/linux-x86_64/planr-browser-harness-adapter +0 -0
- package/npm/native/linux-x86_64/planr-host-capability-validator +0 -0
- package/plugins/planr/.claude-plugin/plugin.json +0 -11
- package/plugins/planr/.codex-plugin/plugin.json +0 -25
- package/plugins/planr/agents/pi/planr-reviewer.md +0 -20
- package/plugins/planr/agents/pi/planr-worker.md +0 -35
- package/plugins/planr/agents/planr-reviewer.md +0 -21
- package/plugins/planr/agents/planr-worker.md +0 -40
- package/plugins/planr/skills/planr/SKILL.md +0 -60
- package/plugins/planr/skills/planr-goal/SKILL.md +0 -52
- package/plugins/planr/skills/planr-loop/SKILL.md +0 -126
- package/plugins/planr/skills/planr-loop/agents/planr-reviewer.md +0 -21
- package/plugins/planr/skills/planr-loop/agents/planr-worker.md +0 -36
- package/plugins/planr/skills/planr-loop/references/host-dispatch.md +0 -52
- package/plugins/planr/skills/planr-loop/references/recovery-and-verification.md +0 -26
- package/plugins/planr/skills/planr-plan/SKILL.md +0 -86
- package/plugins/planr/skills/planr-review/SKILL.md +0 -55
- package/plugins/planr/skills/planr-status/SKILL.md +0 -52
- package/plugins/planr/skills/planr-summary/SKILL.md +0 -30
- package/plugins/planr/skills/planr-task-graph/SKILL.md +0 -67
- package/plugins/planr/skills/planr-verify-web/SKILL.md +0 -62
- package/plugins/planr/skills/planr-work/SKILL.md +0 -93
- package/scripts/host-capability-experiment.mjs +0 -2481
- package/scripts/host-capability-runtime/v1/schemas/host-capability-expected-manifest.schema.json +0 -377
- package/scripts/host-capability-runtime/v1/schemas/host-capability-observed-raw.schema.json +0 -439
- package/scripts/host-capability-runtime/v1/schemas/host-capability-provenance.schema.json +0 -178
- package/scripts/planr-host-capability-validator +0 -57
- /package/{LICENSE.md → LICENSE} +0 -0
package/docs/RELEASE.md
DELETED
|
@@ -1,275 +0,0 @@
|
|
|
1
|
-
# Release
|
|
2
|
-
|
|
3
|
-
Planr V1 releases are built from the Rust binary, public docs, skills, and public assets. The canonical public release source is `https://github.com/instructa/planr`.
|
|
4
|
-
|
|
5
|
-
The v1 repository-owned public install order is:
|
|
6
|
-
|
|
7
|
-
1. GitHub Release curl installer.
|
|
8
|
-
2. Manual GitHub Release asset download.
|
|
9
|
-
3. Homebrew after the tap/formula is published.
|
|
10
|
-
4. npm (`npm install -g planr`) with bundled platform binaries.
|
|
11
|
-
5. Cargo/source builds for maintainers and contributors.
|
|
12
|
-
|
|
13
|
-
Published npm versions bundle platform-native binaries; see <https://planr.so/docs/operations/release>.
|
|
14
|
-
|
|
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, verifies an independently green CI run and human approval
|
|
28
|
-
for the exact `HEAD` SHA, and verifies that the changelog predecessor's local
|
|
29
|
-
tag object exactly matches the tag ref returned by `origin`. Only then does it
|
|
30
|
-
create and push the annotated tag.
|
|
31
|
-
It does not replay the Rust, docs, or packaging suites already proven by that
|
|
32
|
-
CI run. Security, secret, dependency, and workflow scanners are deliberate
|
|
33
|
-
local maintainer preflight commands rather than automatic pull-request or push
|
|
34
|
-
CI evidence. Editing manifests by hand or publishing an unprepared commit skips
|
|
35
|
-
this ownership boundary.
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
scripts/prepare-release-candidate.sh 1.2.0
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
```bash
|
|
42
|
-
export PLANR_RELEASE_CI_RECEIPT=/path/to/downloaded/promotion-receipt.json
|
|
43
|
-
export PLANR_RELEASE_APPROVAL=/path/to/exact-sha-release-approval.json
|
|
44
|
-
scripts/release.sh 1.2.0 "one-line release summary"
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
Download `release-promotion-<sha>` from the successful `CI` run for the exact
|
|
48
|
-
main commit. The approval file uses schema `planr.release-approval.v1` and
|
|
49
|
-
contains only `approval_id`, `source_sha`, `version`, `decision: "approved"`,
|
|
50
|
-
`approved_by`, and `approved_at` in addition to `schema_version`. Publication
|
|
51
|
-
queries the recorded GitHub Actions run and rejects a stale SHA, non-main or
|
|
52
|
-
non-push run, failed conclusion, repository mismatch, or non-approved decision.
|
|
53
|
-
|
|
54
|
-
External evaluation is a stable-release gate. When the evaluated workflow
|
|
55
|
-
subject or its explicit evaluation policy changed since the previous release
|
|
56
|
-
tag, a stable release also requires:
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
export PLANR_RELEASE_EVAL_SUITE="$HOME/projects/planr-evals/suites/planr-lean-skills-dogfood.suite.json"
|
|
60
|
-
export PLANR_RELEASE_EVAL_RECEIPT=/path/to/sanitized-release-eval-receipt.json
|
|
61
|
-
export PLANR_RELEASE_EVAL_DB=/path/to/planr-evals/results/eval.sqlite
|
|
62
|
-
export PLANR_RELEASE_PLANR_BIN=/path/to/reviewed/candidate/planr
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
Maintainer benchmarks, baselines, model/effort runs, and results live outside
|
|
66
|
-
the public repository in `~/projects/planr-evals`; that workspace and its exact
|
|
67
|
-
layout are not a Planr runtime contract. All external evaluation paths above are explicit so a
|
|
68
|
-
release cannot silently use the product repository's ordinary `.planr` database
|
|
69
|
-
or a stale bundled suite. The receipt is a short-lived local pointer containing
|
|
70
|
-
only `schema_version`, comparison and candidate-run identities, suite and
|
|
71
|
-
candidate-revision digests, and creation/expiry timestamps. Prompts,
|
|
72
|
-
completions, credentials, personal paths, raw runs, reports, databases, and the
|
|
73
|
-
receipt itself are never committed to Planr.
|
|
74
|
-
|
|
75
|
-
Fixture paths inside the private suite resolve relative to the suite file's
|
|
76
|
-
directory. The external eval workspace must therefore contain its complete
|
|
77
|
-
fixture tree; release verification does not read ignored files from the Planr
|
|
78
|
-
checkout.
|
|
79
|
-
|
|
80
|
-
Generate the candidate revision with
|
|
81
|
-
`node scripts/verify-release-eval-receipt.mjs --print-candidate-revision`. The
|
|
82
|
-
revision hashes every tracked or non-ignored release-source file, including its
|
|
83
|
-
normalized executable mode, so changing any candidate source invalidates the
|
|
84
|
-
receipt. The separate evaluated-subject revision binds the stored model run to
|
|
85
|
-
the five workflow files the benchmark evaluates; changing either the exact
|
|
86
|
-
release source or that evaluated subset invalidates the receipt. At release time the candidate binary canonicalizes the explicitly supplied suite,
|
|
87
|
-
requires a Planr-validated effective route observation (host report, telemetry
|
|
88
|
-
receipt, process exit, or local observation), recomputes the comparison from its
|
|
89
|
-
stored baseline/candidate/policy identities, and gates that fresh result.
|
|
90
|
-
Requested-only values and policy or binding metadata are never
|
|
91
|
-
effective-treatment proof.
|
|
92
|
-
|
|
93
|
-
The two scripts enforce, in order:
|
|
94
|
-
|
|
95
|
-
1. candidate preparation starts from a clean worktree and a nonexistent tag;
|
|
96
|
-
2. the candidate version is written into all synchronized manifests;
|
|
97
|
-
3. frozen workspace synchronization cannot change `pnpm-lock.yaml`;
|
|
98
|
-
4. the candidate build synchronizes `Cargo.lock`, then regenerates and strictly checks both references without Git mutation;
|
|
99
|
-
5. candidate source, changelog, contracts, and generated files are committed and independently reviewed before publication approval;
|
|
100
|
-
6. publication requires clean `main`, the exact prepared versions/references, a committed changelog section, an exact local predecessor tag matching `origin`, and no existing target tag;
|
|
101
|
-
7. publication validates the exact-SHA CI and approval receipts; a stable release whose evaluated subject or policy changed also validates the sanitized eval receipt and recomputed comparison;
|
|
102
|
-
8. publication creates and pushes only the annotated `vx.y.z` tag for that reviewed commit.
|
|
103
|
-
|
|
104
|
-
Two independent gates back the script:
|
|
105
|
-
|
|
106
|
-
- `cargo test` fails on every push when any manifest version drifts from `Cargo.toml`.
|
|
107
|
-
- The release workflow's `Verify release versions are consistent` step refuses the tag when the tag, any manifest, or the `CHANGELOG.md` section disagree.
|
|
108
|
-
|
|
109
|
-
Public CI runs `npm run verify:release-eval-gate` with a synthetic suite, fake
|
|
110
|
-
binary, and temporary database. It verifies the fail-closed mechanism without a
|
|
111
|
-
provider call, private benchmark, API key, or release receipt. Model-backed
|
|
112
|
-
quality decisions remain a local maintainer preflight.
|
|
113
|
-
|
|
114
|
-
## Alpha Channel (Pre-Releases)
|
|
115
|
-
|
|
116
|
-
Pre-release versions use the same script and pipeline with a semver pre-release suffix:
|
|
117
|
-
|
|
118
|
-
```bash
|
|
119
|
-
scripts/release.sh 1.2.0-alpha.1 "one-line summary"
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
The changelog section requirement applies verbatim (`## [1.2.0-alpha.1]`). What changes downstream:
|
|
123
|
-
|
|
124
|
-
- The GitHub Release is marked as a **prerelease**, so `releases/latest` — and with it the curl installer's default — stays on the last stable version. Testers pin explicitly: `PLANR_VERSION=1.2.0-alpha.1 sh install.sh`.
|
|
125
|
-
- npm publishes under the **`alpha` dist-tag** instead of `latest`: plain `npm install -g planr` keeps resolving stable, testers opt in with `npm install -g planr@alpha`.
|
|
126
|
-
- The **Homebrew tap never moves** on pre-release tags.
|
|
127
|
-
|
|
128
|
-
Only canonical SemVer core numbers and `-alpha.N`, `-beta.N`, or `-rc.N`
|
|
129
|
-
suffixes are accepted. Numeric identifiers have no leading zero unless the
|
|
130
|
-
identifier is exactly `0`.
|
|
131
|
-
|
|
132
|
-
Pre-release publication deliberately does not require a model-evaluation
|
|
133
|
-
receipt before publication. It still requires a clean exact commit on `main`,
|
|
134
|
-
the authenticated green CI promotion receipt, human approval bound to that SHA
|
|
135
|
-
and version, synchronized manifests and generated references, and the committed
|
|
136
|
-
changelog/release contracts. After publication, install that exact prerelease
|
|
137
|
-
and dogfood the installed artifact. That dogfood evidence informs and gates the
|
|
138
|
-
next promotion decision; it is never fabricated from the pre-publication source
|
|
139
|
-
tree. Stable publication keeps the conditional evaluation gate described above.
|
|
140
|
-
|
|
141
|
-
## Automated Release Pipeline
|
|
142
|
-
|
|
143
|
-
Pushing a tag `vX.Y.Z` runs `.github/workflows/release.yml`:
|
|
144
|
-
|
|
145
|
-
<!-- planr:linux-release-portability:start surface=maintainerRelease schema=1 -->
|
|
146
|
-
> **Linux release portability — corrected**
|
|
147
|
-
>
|
|
148
|
-
> Contract state: `status=corrected`; `affectedThrough=v1.7.2`; `correctedFrom=v1.7.3`.
|
|
149
|
-
> Published Linux release, installer, and npm binaries through v1.7.2 require GLIBC_2.39; macOS is unaffected.
|
|
150
|
-
> Starting with v1.7.3, current Linux release, installer, and npm artifacts are static-musl executables and do not require glibc.
|
|
151
|
-
> On an affected Linux release, build from source on the target distribution or upgrade to v1.7.3.
|
|
152
|
-
<!-- planr:linux-release-portability:end surface=maintainerRelease schema=1 -->
|
|
153
|
-
|
|
154
|
-
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.
|
|
155
|
-
|
|
156
|
-
1. `create-release` verifies the tag against `Cargo.toml`, all distribution manifests, and the changelog section, then creates a draft GitHub Release.
|
|
157
|
-
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.
|
|
158
|
-
3. `finalize` downloads all uploaded assets, writes one aggregated `SHA256SUMS` covering every tarball, uploads it, and publishes the release.
|
|
159
|
-
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>.
|
|
160
|
-
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`).
|
|
161
|
-
|
|
162
|
-
## Changelog
|
|
163
|
-
|
|
164
|
-
`CHANGELOG.md` at the repository root is the persistent release log ([Keep a Changelog](https://keepachangelog.com/en/1.1.0/) format). Maintain it continuously, not at release time only:
|
|
165
|
-
|
|
166
|
-
- Every user-visible change (CLI surface, JSON envelope, skills, MCP/HTTP contract, install paths) lands in the `[Unreleased]` section in the same PR or commit that makes the change.
|
|
167
|
-
- Before pushing a release tag, rename `[Unreleased]` to the new version with the release date, add a fresh empty `[Unreleased]` section, and update the compare links at the bottom. The tag must not ship with a non-empty `[Unreleased]` section describing its own changes.
|
|
168
|
-
- The version section is the source for the GitHub Release notes body.
|
|
169
|
-
|
|
170
|
-
The Homebrew job only runs when the repository variable `HOMEBREW_TAP_ENABLED` is `true` and requires a `TAP_GITHUB_TOKEN` secret with write access to `instructa/homebrew-tap`. The tap repository must exist before enabling it.
|
|
171
|
-
|
|
172
|
-
## Preflight
|
|
173
|
-
|
|
174
|
-
Run:
|
|
175
|
-
|
|
176
|
-
```bash
|
|
177
|
-
scripts/ci-local.sh
|
|
178
|
-
scripts/security-local.sh
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
`scripts/security-local.sh`, `cargo audit --deny warnings`, and local
|
|
182
|
-
`zizmor .` are on-demand maintainer checks. Pull-request and push workflows do
|
|
183
|
-
not install or execute BetterLeaks, Trivy, TruffleHog, cargo-audit, zizmor, or
|
|
184
|
-
equivalent dependency/security scanners.
|
|
185
|
-
|
|
186
|
-
The external consumer E2E suite must pass when available on the release machine.
|
|
187
|
-
Pull-request CI separately builds both Linux architectures through the canonical
|
|
188
|
-
containerized release script, runs the full portability contract without
|
|
189
|
-
secrets or publication permissions, and aggregates checksums for the exact two
|
|
190
|
-
candidate tarballs. A same-runner `--version` smoke is useful architecture
|
|
191
|
-
evidence but is not Linux compatibility proof by itself.
|
|
192
|
-
|
|
193
|
-
## Build Artifact
|
|
194
|
-
|
|
195
|
-
Create the local release artifact:
|
|
196
|
-
|
|
197
|
-
```bash
|
|
198
|
-
scripts/build-release.sh
|
|
199
|
-
cat dist/planr-*/SHA256SUMS
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
The artifact contains:
|
|
203
|
-
|
|
204
|
-
- `planr`
|
|
205
|
-
- `planr-browser-harness-adapter`
|
|
206
|
-
- `scripts/host-capability-experiment.mjs`
|
|
207
|
-
- `scripts/host-capability-runtime/v1/schemas/*.schema.json`
|
|
208
|
-
- `scripts/planr-host-capability-validator`
|
|
209
|
-
- `README.md`
|
|
210
|
-
- `LICENSE.md`
|
|
211
|
-
- `SHA256SUMS`
|
|
212
|
-
|
|
213
|
-
The GitHub Release upload asset is:
|
|
214
|
-
|
|
215
|
-
- `dist/planr-<os>-<arch>.tar.gz`
|
|
216
|
-
|
|
217
|
-
The tarball checksum is written to `dist/SHA256SUMS`.
|
|
218
|
-
|
|
219
|
-
The release installer downloads and verifies `SHA256SUMS` from the same release URL unless `PLANR_SKIP_CHECKSUM=1` is set for a development mirror.
|
|
220
|
-
|
|
221
|
-
## npm Dry-Run
|
|
222
|
-
|
|
223
|
-
Verify npm package contents as a development-package check:
|
|
224
|
-
|
|
225
|
-
```bash
|
|
226
|
-
npm pack --dry-run
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
The package must include:
|
|
230
|
-
|
|
231
|
-
- `npm/bin/planr.js`
|
|
232
|
-
- `npm/bin/planr-browser-harness-adapter.js`
|
|
233
|
-
- `npm/bin/native-launcher.js`
|
|
234
|
-
- `scripts/host-capability-experiment.mjs`
|
|
235
|
-
- `scripts/host-capability-runtime/v1/schemas/*.schema.json`
|
|
236
|
-
- `scripts/planr-host-capability-validator`
|
|
237
|
-
- `docs/`
|
|
238
|
-
- `docs/fixtures/mcp-contract.json`
|
|
239
|
-
- `plugins/`
|
|
240
|
-
- `README.md`
|
|
241
|
-
- `LICENSE.md`
|
|
242
|
-
|
|
243
|
-
`npm/native/` platform binaries exist only in the `npm-publish` CI job. The published package includes `planr`, `planr-browser-harness-adapter`, and `planr-host-capability-validator` for each platform. The local dry-run does not include these binaries.
|
|
244
|
-
|
|
245
|
-
## Install Smoke
|
|
246
|
-
|
|
247
|
-
After building:
|
|
248
|
-
|
|
249
|
-
```bash
|
|
250
|
-
node npm/bin/planr.js --version
|
|
251
|
-
PREFIX="$(mktemp -d)" scripts/install.sh
|
|
252
|
-
PLANR_BIN="$(find dist -path '*/planr' -type f | head -n 1)" PREFIX="$(mktemp -d)" scripts/install.sh
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
Then run:
|
|
256
|
-
|
|
257
|
-
```bash
|
|
258
|
-
PLANR_BIN=planr npm run test:npm-planr
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
from the external consumer E2E project.
|
|
262
|
-
|
|
263
|
-
## Release Notes Checklist
|
|
264
|
-
|
|
265
|
-
Before publishing, record:
|
|
266
|
-
|
|
267
|
-
- `CHANGELOG.md` updated: `[Unreleased]` rolled into the tagged version section;
|
|
268
|
-
- exact commit or source snapshot;
|
|
269
|
-
- `cargo test` result;
|
|
270
|
-
- consumer E2E result;
|
|
271
|
-
- `npm pack --dry-run` file list;
|
|
272
|
-
- release artifact checksum;
|
|
273
|
-
- GitHub Release asset name and checksum;
|
|
274
|
-
- security/leak scan result;
|
|
275
|
-
- known risks or intentionally unsupported platforms.
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
# Archived Switchloom v0.3.2 Compatibility Evidence
|
|
2
|
-
|
|
3
|
-
This document records a historical compatibility check performed for the external `switchloom@0.3.2` package. It is not a current Planr release gate or a promise about future Switchloom artifacts, routes, role names, host telemetry, or lifecycle behavior.
|
|
4
|
-
|
|
5
|
-
The historical check established only that the pinned v0.3.2 package could generate repository-local `.planr/agents.toml` and `.planr/policy.toml` declarations that the Planr version at that time consumed successfully. The accompanying one-off cross-product oracle has been removed from Planr.
|
|
6
|
-
|
|
7
|
-
Planr's stable boundary remains:
|
|
8
|
-
|
|
9
|
-
- Planr works without Switchloom or routing declarations.
|
|
10
|
-
- Planr treats profiles, routes, model names, efforts, and fallbacks as provider-neutral repository data.
|
|
11
|
-
- Requested routing metadata is not effective execution proof.
|
|
12
|
-
- External tools own their install, compilation, generated host files, reload requirements, and uninstall lifecycle.
|
|
13
|
-
|
|
14
|
-
For current Switchloom behavior, consult the external project and its versioned documentation. Any future compatibility claim requires a new bounded check owned by that integration; Planr does not retain a permanent package-specific oracle.
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
# Browser Harness adapter v1
|
|
2
|
-
|
|
3
|
-
Status: frozen for `planr-browser-harness-adapter` v1.
|
|
4
|
-
|
|
5
|
-
This reference defines Planr's first process adapter for the external
|
|
6
|
-
`browser-harness` tool. The adapter implements
|
|
7
|
-
`EVIDENCE_ADAPTER_PROTOCOL_V1.md`. Planr Core does not depend on this adapter.
|
|
8
|
-
|
|
9
|
-
## Capability
|
|
10
|
-
|
|
11
|
-
The adapter supports `com.planr.web.dom_state` observations with the payload
|
|
12
|
-
schema `schema://com.planr.web.dom_state.v1`.
|
|
13
|
-
|
|
14
|
-
Each requirement uses these fields:
|
|
15
|
-
|
|
16
|
-
- `subject`: A CSS selector for the observed element.
|
|
17
|
-
- `expected.text`: The exact trimmed `textContent`, if text is required.
|
|
18
|
-
- `expected.visible`: The required rendered visibility, if visibility is
|
|
19
|
-
required.
|
|
20
|
-
- `state_transitions`: A shared array of click actions for the batch. Each
|
|
21
|
-
action has `action = "click"`, an accessibility `role`, and an accessibility
|
|
22
|
-
`name`.
|
|
23
|
-
|
|
24
|
-
All requirements in one batch must use the same transition array and the same
|
|
25
|
-
optional execution method. The adapter rejects arbitrary actions, arbitrary
|
|
26
|
-
JavaScript, mixed methods, and unsupported observation types before it starts
|
|
27
|
-
the browser tool.
|
|
28
|
-
|
|
29
|
-
## Execution
|
|
30
|
-
|
|
31
|
-
An availability probe runs `browser-harness --version`. A real Evidence run
|
|
32
|
-
starts `browser-harness` once and sends one generated Python program over
|
|
33
|
-
stdin. The program completes these steps in one browser session:
|
|
34
|
-
|
|
35
|
-
1. Open the bound HTTP or HTTPS target.
|
|
36
|
-
2. Find each click target in the accessibility tree by its role and name.
|
|
37
|
-
3. Click the center of the target's CDP box model.
|
|
38
|
-
4. Read each DOM postcondition until it passes or the five-second observation
|
|
39
|
-
window ends.
|
|
40
|
-
5. Return one structured result for the full requirement batch.
|
|
41
|
-
6. Close the tab.
|
|
42
|
-
|
|
43
|
-
The generated program inserts requirement data only as JSON. A requirement
|
|
44
|
-
cannot add executable Python or JavaScript.
|
|
45
|
-
|
|
46
|
-
## Result
|
|
47
|
-
|
|
48
|
-
Each `actual` object contains:
|
|
49
|
-
|
|
50
|
-
```json
|
|
51
|
-
{
|
|
52
|
-
"schema_ref": "schema://com.planr.web.dom_state.v1",
|
|
53
|
-
"selector": "#status",
|
|
54
|
-
"text": "B",
|
|
55
|
-
"visible": true
|
|
56
|
-
}
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
Planr Core validates this object against the registered JSON Schema. Core then
|
|
60
|
-
evaluates the requirement's `expected` predicate.
|
|
61
|
-
|
|
62
|
-
If every requirement selects the `browser-harness` agent skill, the adapter
|
|
63
|
-
also returns the matching supervised invocation record. This record is adapter
|
|
64
|
-
output. It becomes trusted only after Planr validates the observed process and
|
|
65
|
-
all sealed bindings.
|
|
66
|
-
|
|
67
|
-
## Capture policy
|
|
68
|
-
|
|
69
|
-
The v1 success path disables Browser Harness recordings. The generated program
|
|
70
|
-
does not call screenshot, recording, or trace helpers. The structured DOM
|
|
71
|
-
observation is the retained proof for a non-visual criterion.
|
|
72
|
-
|
|
73
|
-
The adapter does not advertise a visual observation type. Planr therefore
|
|
74
|
-
rejects it during capability matching for a visual requirement. A recording or
|
|
75
|
-
screenshot cannot upgrade `com.planr.web.dom_state` into visual Evidence.
|