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.
Files changed (126) hide show
  1. package/.claude-plugin/plugin.json +11 -0
  2. package/CHANGELOG.md +20 -0
  3. package/README.md +27 -245
  4. package/docs/board.md +44 -0
  5. package/docs/cli.md +100 -0
  6. package/docs/concepts.md +133 -0
  7. package/docs/contract.md +150 -0
  8. package/docs/plugins/bb.md +49 -0
  9. package/docs/plugins/claude-code.md +84 -0
  10. package/docs/plugins/codex.md +77 -0
  11. package/docs/quickstart.md +307 -0
  12. package/docs/setup.md +103 -0
  13. package/package.json +21 -68
  14. package/plugin.json +12 -0
  15. package/skills/planr/SKILL.md +64 -0
  16. package/skills/planr/assets/board/fonts/LICENSE-mona-sans.txt +93 -0
  17. package/skills/planr/assets/board/fonts/LICENSE-monaspace.txt +93 -0
  18. package/skills/planr/assets/board/fonts/MonaSans-Variable.woff2 +0 -0
  19. package/skills/planr/assets/board/fonts/MonaspaceNeon-400.woff2 +0 -0
  20. package/skills/planr/assets/board/fonts/MonaspaceNeon-500.woff2 +0 -0
  21. package/skills/planr/assets/board/fonts/MonaspaceNeon-600.woff2 +0 -0
  22. package/skills/planr/assets/board/template.html +788 -0
  23. package/skills/planr/assets/templates/goal.md +13 -0
  24. package/skills/planr/assets/templates/hook.sh +4 -0
  25. package/skills/planr/assets/templates/in-repo.config.json +6 -0
  26. package/skills/planr/assets/templates/planr.config.json +6 -0
  27. package/skills/planr/assets/templates/tasks-README.md +14 -0
  28. package/skills/planr/references/format.md +88 -0
  29. package/skills/planr/references/work-a-goal.md +62 -0
  30. package/skills/planr/scripts/lib/board.mjs +39 -0
  31. package/skills/planr/scripts/lib/graph.mjs +345 -0
  32. package/skills/planr/scripts/lib/runs.mjs +127 -0
  33. package/skills/planr/scripts/lib/version.mjs +11 -0
  34. package/skills/planr/scripts/planr.mjs +386 -0
  35. package/docs/ARCHITECTURE.md +0 -136
  36. package/docs/RELEASE.md +0 -275
  37. package/docs/SWITCHLOOM_COMPATIBILITY.md +0 -14
  38. package/docs/contracts/BROWSER_HARNESS_ADAPTER_V1.md +0 -75
  39. package/docs/contracts/EVAL_CONTRACT_V1.md +0 -2072
  40. package/docs/contracts/EVIDENCE_ADAPTER_PROTOCOL_V1.md +0 -98
  41. package/docs/contracts/EVIDENCE_CONTRACT_V1.md +0 -382
  42. package/docs/contracts/GROK_INTEGRATION_V1.md +0 -139
  43. package/docs/contracts/LINUX_RELEASE_PORTABILITY.json +0 -9
  44. package/docs/contracts/PI_INTEGRATION_V1.md +0 -164
  45. package/docs/contracts/V1_1_DIFFERENTIATION_CONTRACT.md +0 -177
  46. package/docs/contracts/fixtures/evidence/v1/examples/coverage-verdict.json +0 -66
  47. package/docs/contracts/fixtures/evidence/v1/examples/evidence-attempt.json +0 -39
  48. package/docs/contracts/fixtures/evidence/v1/examples/evidence-policy.json +0 -108
  49. package/docs/contracts/fixtures/evidence/v1/examples/evidence-receipt.json +0 -93
  50. package/docs/contracts/fixtures/evidence/v1/examples/evidence-waiver.json +0 -31
  51. package/docs/contracts/fixtures/evidence/v1/examples/proof-obligation.json +0 -55
  52. package/docs/contracts/fixtures/evidence/v1/examples/proof-preset.json +0 -19
  53. package/docs/contracts/fixtures/evidence/v1/examples/untrusted-evidence-proposal.json +0 -20
  54. package/docs/contracts/fixtures/evidence/v1/examples/verification-capability-instance.json +0 -39
  55. package/docs/contracts/fixtures/evidence/v1/examples/verification-capability-manifest.json +0 -52
  56. package/docs/contracts/fixtures/evidence/v1/negative/aborted-zero-exit-attempt.json +0 -39
  57. package/docs/contracts/fixtures/evidence/v1/negative/adapter-registration-missing-execution-contract.json +0 -88
  58. package/docs/contracts/fixtures/evidence/v1/negative/available-empty-probe-capability.json +0 -27
  59. package/docs/contracts/fixtures/evidence/v1/negative/blocked-coverage-with-stale-reason.json +0 -27
  60. package/docs/contracts/fixtures/evidence/v1/negative/empty-trust-bindings-receipt.json +0 -72
  61. package/docs/contracts/fixtures/evidence/v1/negative/failed-zero-exit-attempt.json +0 -39
  62. package/docs/contracts/fixtures/evidence/v1/negative/forged-trusted-receipt.json +0 -35
  63. package/docs/contracts/fixtures/evidence/v1/negative/inconclusive-clean-exit-attempt.json +0 -39
  64. package/docs/contracts/fixtures/evidence/v1/negative/inconclusive-coverage-with-blocked-reason.json +0 -27
  65. package/docs/contracts/fixtures/evidence/v1/negative/minimal-policy-missing-owned-inputs.json +0 -5
  66. package/docs/contracts/fixtures/evidence/v1/negative/mismatched-probe-execution-id-capability.json +0 -42
  67. package/docs/contracts/fixtures/evidence/v1/negative/passed-empty-attempt.json +0 -22
  68. package/docs/contracts/fixtures/evidence/v1/negative/policy-default-preset-unregistered.json +0 -102
  69. package/docs/contracts/fixtures/evidence/v1/negative/policy-weakening-without-waiver.json +0 -102
  70. package/docs/contracts/fixtures/evidence/v1/negative/process-probe-missing-output-limits.json +0 -49
  71. package/docs/contracts/fixtures/evidence/v1/negative/satisfied-empty-coverage-verdict.json +0 -14
  72. package/docs/contracts/fixtures/evidence/v1/negative/skipped-zero-exit-attempt.json +0 -39
  73. package/docs/contracts/fixtures/evidence/v1/negative/stale-coverage-with-inconclusive-reason.json +0 -27
  74. package/docs/contracts/fixtures/evidence/v1/negative/timed-out-zero-exit-attempt.json +0 -39
  75. package/docs/contracts/fixtures/evidence/v1/negative/unavailable-zero-exit-attempt.json +0 -39
  76. package/docs/contracts/fixtures/evidence/v1/negative/unbound-waiver.json +0 -21
  77. package/docs/contracts/fixtures/evidence/v1/negative/unsatisfied-coverage-without-gap.json +0 -63
  78. package/docs/contracts/fixtures/evidence/v1/negative/waived-coverage-forbidden-gap-reason.json +0 -28
  79. package/docs/contracts/fixtures/evidence/v1/negative/waived-coverage-missing-waiver-id.json +0 -27
  80. package/docs/contracts/fixtures/evidence/v1/schemas/evidence-contract-v1.schema.json +0 -2685
  81. package/docs/contracts/schemas/com.planr.web.dom_state.v1.schema.json +0 -30
  82. package/docs/documentation/CONTRACT.md +0 -164
  83. package/docs/documentation/COVERAGE.md +0 -98
  84. package/docs/documentation/INFORMATION_ARCHITECTURE.md +0 -151
  85. package/docs/fixtures/mcp-contract.json +0 -153
  86. package/npm/bin/native-launcher.js +0 -67
  87. package/npm/bin/planr-browser-harness-adapter.js +0 -8
  88. package/npm/bin/planr.js +0 -8
  89. package/npm/native/darwin-arm64/planr +0 -0
  90. package/npm/native/darwin-arm64/planr-browser-harness-adapter +0 -0
  91. package/npm/native/darwin-arm64/planr-host-capability-validator +0 -0
  92. package/npm/native/darwin-x86_64/planr +0 -0
  93. package/npm/native/darwin-x86_64/planr-browser-harness-adapter +0 -0
  94. package/npm/native/darwin-x86_64/planr-host-capability-validator +0 -0
  95. package/npm/native/linux-arm64/planr +0 -0
  96. package/npm/native/linux-arm64/planr-browser-harness-adapter +0 -0
  97. package/npm/native/linux-arm64/planr-host-capability-validator +0 -0
  98. package/npm/native/linux-x86_64/planr +0 -0
  99. package/npm/native/linux-x86_64/planr-browser-harness-adapter +0 -0
  100. package/npm/native/linux-x86_64/planr-host-capability-validator +0 -0
  101. package/plugins/planr/.claude-plugin/plugin.json +0 -11
  102. package/plugins/planr/.codex-plugin/plugin.json +0 -25
  103. package/plugins/planr/agents/pi/planr-reviewer.md +0 -20
  104. package/plugins/planr/agents/pi/planr-worker.md +0 -35
  105. package/plugins/planr/agents/planr-reviewer.md +0 -21
  106. package/plugins/planr/agents/planr-worker.md +0 -40
  107. package/plugins/planr/skills/planr/SKILL.md +0 -60
  108. package/plugins/planr/skills/planr-goal/SKILL.md +0 -52
  109. package/plugins/planr/skills/planr-loop/SKILL.md +0 -126
  110. package/plugins/planr/skills/planr-loop/agents/planr-reviewer.md +0 -21
  111. package/plugins/planr/skills/planr-loop/agents/planr-worker.md +0 -36
  112. package/plugins/planr/skills/planr-loop/references/host-dispatch.md +0 -52
  113. package/plugins/planr/skills/planr-loop/references/recovery-and-verification.md +0 -26
  114. package/plugins/planr/skills/planr-plan/SKILL.md +0 -86
  115. package/plugins/planr/skills/planr-review/SKILL.md +0 -55
  116. package/plugins/planr/skills/planr-status/SKILL.md +0 -52
  117. package/plugins/planr/skills/planr-summary/SKILL.md +0 -30
  118. package/plugins/planr/skills/planr-task-graph/SKILL.md +0 -67
  119. package/plugins/planr/skills/planr-verify-web/SKILL.md +0 -62
  120. package/plugins/planr/skills/planr-work/SKILL.md +0 -93
  121. package/scripts/host-capability-experiment.mjs +0 -2481
  122. package/scripts/host-capability-runtime/v1/schemas/host-capability-expected-manifest.schema.json +0 -377
  123. package/scripts/host-capability-runtime/v1/schemas/host-capability-observed-raw.schema.json +0 -439
  124. package/scripts/host-capability-runtime/v1/schemas/host-capability-provenance.schema.json +0 -178
  125. package/scripts/planr-host-capability-validator +0 -57
  126. /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.