planr 1.4.0 → 1.5.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 (54) hide show
  1. package/README.md +9 -56
  2. package/docs/ARCHITECTURE.md +4 -4
  3. package/docs/CLI_REFERENCE.md +6 -14
  4. package/docs/CODEX.md +6 -6
  5. package/docs/EXAMPLE_WEBAPP.md +63 -97
  6. package/docs/GOALS.md +8 -25
  7. package/docs/INSTALL.md +2 -2
  8. package/docs/MCP_CONTRACT.md +2 -5
  9. package/docs/MODEL_ROUTING.md +20 -177
  10. package/docs/ROUTING_BUNDLES.md +32 -0
  11. package/docs/SKILLS.md +5 -3
  12. package/docs/fixtures/mcp-contract.json +3 -11
  13. package/npm/native/darwin-arm64/planr +0 -0
  14. package/npm/native/darwin-x86_64/planr +0 -0
  15. package/npm/native/linux-arm64/planr +0 -0
  16. package/npm/native/linux-x86_64/planr +0 -0
  17. package/package.json +2 -14
  18. package/plugins/planr/.claude-plugin/plugin.json +1 -1
  19. package/plugins/planr/.codex-plugin/plugin.json +1 -1
  20. package/plugins/planr/skills/planr-loop/SKILL.md +1 -1
  21. package/docs/PRESET_COMPOSITION.md +0 -109
  22. package/docs/PRESET_EVALUATION.md +0 -118
  23. package/docs/PRESET_REGISTRY.md +0 -61
  24. package/evaluations/preset-suite-v1.toml +0 -127
  25. package/evaluations/sol-luna-codex-v1.toml +0 -42
  26. package/plugins/planr/skills/planr-loop/agents/planr-reviewer.toml +0 -23
  27. package/plugins/planr/skills/planr-loop/agents/planr-worker.toml +0 -21
  28. package/presets/bindings/claude-native.toml +0 -52
  29. package/presets/bindings/codex-openai.toml +0 -56
  30. package/presets/bindings/cursor-fable-grok.toml +0 -49
  31. package/presets/bindings/cursor-openai.toml +0 -49
  32. package/presets/bindings/mixed-host.toml +0 -64
  33. package/presets/policies/balanced.toml +0 -50
  34. package/presets/policies/low-usage.toml +0 -50
  35. package/presets/policies/max-quality.toml +0 -50
  36. package/presets/policies/read-only-audit.toml +0 -50
  37. package/website/README.md +0 -79
  38. package/website/_headers +0 -7
  39. package/website/alchemy-runtime.test.mjs +0 -21
  40. package/website/app.mjs +0 -216
  41. package/website/build-catalog.mjs +0 -135
  42. package/website/build-site.test.mjs +0 -69
  43. package/website/catalog-model.mjs +0 -185
  44. package/website/catalog-model.test.mjs +0 -124
  45. package/website/cloudflare-launcher.test.mjs +0 -38
  46. package/website/data/catalog.json +0 -307
  47. package/website/index.html +0 -122
  48. package/website/registry/manifest.toml +0 -48
  49. package/website/registry/report.md +0 -33
  50. package/website/registry/trusted-maintainers.toml +0 -6
  51. package/website/registry/verification.json +0 -7258
  52. package/website/serve.mjs +0 -41
  53. package/website/styles.css +0 -201
  54. package/website/test-fixtures/recommended.json +0 -72
@@ -1,185 +0,0 @@
1
- const IDENTIFIER = /^[A-Za-z0-9._-]+$/;
2
-
3
- export function safeIdentifier(value, label = "identifier") {
4
- if (typeof value !== "string" || !IDENTIFIER.test(value)) {
5
- throw new Error(`${label} is not a safe registry identifier`);
6
- }
7
- return value;
8
- }
9
-
10
- export function previewCommand(policyId, bindingId) {
11
- return `planr agents preset apply ${safeIdentifier(policyId, "policy id")} --binding ${safeIdentifier(bindingId, "binding id")}`;
12
- }
13
-
14
- export function statusLabel(status) {
15
- const labels = {
16
- experimental: "Experimental",
17
- verified: "Verified",
18
- recommended: "Recommended",
19
- stale: "Stale",
20
- deprecated: "Deprecated",
21
- };
22
- return labels[status] ?? "Unverified";
23
- }
24
-
25
- export function formatBasisPoints(value) {
26
- const basisPoints = Number(value);
27
- return Number.isFinite(basisPoints) ? `${(basisPoints / 100).toFixed(2)}%` : "—";
28
- }
29
-
30
- function findArtifact(entry, kind) {
31
- const artifacts = entry.artifacts.filter((artifact) => artifact.kind === kind);
32
- if (artifacts.length !== 1) {
33
- throw new Error(`registry entry must contain exactly one ${kind} artifact`);
34
- }
35
- return artifacts[0];
36
- }
37
-
38
- function proposedConfig(preview, kind) {
39
- const artifact = preview.artifacts.find((candidate) => candidate.kind === kind);
40
- const value = artifact?.config_diff?.proposed?.value;
41
- if (!value || typeof value !== "object") {
42
- throw new Error(`preset preview is missing proposed ${kind} configuration`);
43
- }
44
- return value;
45
- }
46
-
47
- function matchingCandidate(report, policyId, bindingId) {
48
- const candidate = report.candidates?.find(
49
- (value) => value.policy?.id === policyId && value.binding?.id === bindingId,
50
- );
51
- if (!candidate) {
52
- throw new Error(`evaluation report has no candidate for ${policyId} + ${bindingId}`);
53
- }
54
- return candidate;
55
- }
56
-
57
- function recommendationMatches(report, policyId, bindingId) {
58
- return Boolean(
59
- report.recommended?.some(
60
- (value) => value.policy === policyId && value.binding === bindingId && value.status === "recommended",
61
- ),
62
- );
63
- }
64
-
65
- export function projectComposition({ verified, preview, verificationEnvelope }) {
66
- if (!verified?.integrity_verified || !verified?.signature_verified || !verified?.trusted_maintainer) {
67
- throw new Error("website projection requires an integrity-verified entry signed by a trusted maintainer");
68
- }
69
- if (!verified.compatible) {
70
- throw new Error("website projection requires a compatible registry entry");
71
- }
72
- if (!preview?.pack?.safe) {
73
- throw new Error("website projection requires a canonical safe-pack preview");
74
- }
75
-
76
- const entry = verified.entry;
77
- const evaluation = entry.evaluation;
78
- if (!evaluation) {
79
- throw new Error("website projection requires evaluation binding metadata");
80
- }
81
- const policyId = safeIdentifier(evaluation.policy_id, "policy id");
82
- const bindingId = safeIdentifier(evaluation.binding_id, "binding id");
83
- const report = verificationEnvelope.report ?? verificationEnvelope;
84
- const candidate = matchingCandidate(report, policyId, bindingId);
85
- const reportRecommended = recommendationMatches(report, policyId, bindingId);
86
- if (verified.recommended && (!reportRecommended || candidate.status !== "recommended")) {
87
- throw new Error("registry recommendation does not match canonical evaluation evidence");
88
- }
89
-
90
- const policy = proposedConfig(preview, "active_policy");
91
- const agents = proposedConfig(preview, "agent_registry");
92
- if (policy.id !== policyId || preview.composition?.binding?.id !== bindingId) {
93
- throw new Error("preset preview provenance does not match registry evaluation binding");
94
- }
95
- const runs = Number(candidate.metrics?.runs ?? 0);
96
- const verifiedRoutes = Number(candidate.metrics?.verified_route_runs ?? 0);
97
- const policyArtifact = findArtifact(entry, "policy");
98
- const bindingArtifact = findArtifact(entry, "host-binding");
99
- const verificationArtifact = findArtifact(entry, "verification");
100
-
101
- return {
102
- id: `${safeIdentifier(entry.id, "entry id")}@${entry.version}`,
103
- entryId: entry.id,
104
- entryVersion: entry.version,
105
- status: verified.effective_status,
106
- statusLabel: statusLabel(verified.effective_status),
107
- recommended: verified.recommended,
108
- freshness: verified.freshness,
109
- lifecycle: entry.lifecycle,
110
- replacement: entry.replacement ?? null,
111
- policy: {
112
- id: policyId,
113
- version: evaluation.policy_version,
114
- usage: policy.usage,
115
- transitions: policy.transitions,
116
- materiality: policy.materiality,
117
- execution: policy.execution,
118
- },
119
- binding: {
120
- id: bindingId,
121
- version: evaluation.binding_version,
122
- host: preview.composition.host,
123
- profiles: agents.profiles,
124
- dispatch: preview.composition.dispatch,
125
- },
126
- compatibility: {
127
- hosts: entry.compatible_hosts,
128
- minPlanrVersion: entry.min_planr_version,
129
- maxPlanrVersion: entry.max_planr_version,
130
- },
131
- enforcement: [
132
- {
133
- dimension: "Policy limits",
134
- state: "verified",
135
- detail: "Planr validates count, time, concurrency, transition, and safety-stop limits before dispatch.",
136
- },
137
- {
138
- dimension: "Execution permissions",
139
- state: "verified",
140
- detail: "Registry-safe policy: no commands, hooks, network/MCP grants, secrets, or overwrite permission.",
141
- },
142
- {
143
- dimension: "Model and effort",
144
- state: "host_enforced",
145
- detail: "The host binding requests concrete routes; the host retains final execution authority.",
146
- },
147
- {
148
- dimension: "Effective route evidence",
149
- state: runs > 0 && verifiedRoutes === runs ? "verified" : "unavailable",
150
- detail: `${verifiedRoutes} of ${runs} evaluation runs carried verified effective-route evidence.`,
151
- },
152
- ],
153
- evaluation: {
154
- suiteId: report.suite?.id,
155
- suiteVersion: report.suite?.version,
156
- evaluatedAtUnix: report.suite?.evaluated_at_unix,
157
- reviewAtUnix: entry.review_at_unix,
158
- status: candidate.status,
159
- metrics: candidate.metrics,
160
- thresholds: candidate.threshold_results,
161
- resultHashes: candidate.results?.map((result) => result.result_sha256) ?? [],
162
- fixtureSha256: report.suite?.fixture_sha256,
163
- },
164
- registry: {
165
- id: verified.registry_id,
166
- version: verified.registry_version,
167
- manifestSha256: verified.manifest_sha256,
168
- signer: entry.signature?.signer,
169
- signatureVerified: true,
170
- trustedMaintainer: true,
171
- artifacts: [policyArtifact, bindingArtifact, verificationArtifact].map((artifact) => ({
172
- path: artifact.path,
173
- kind: artifact.kind,
174
- sha256: artifact.sha256,
175
- sizeBytes: artifact.size_bytes,
176
- })),
177
- },
178
- command: previewCommand(policyId, bindingId),
179
- };
180
- }
181
-
182
- export function visibleCompositions(catalog, recommendedOnly = false) {
183
- const compositions = Array.isArray(catalog?.compositions) ? catalog.compositions : [];
184
- return recommendedOnly ? compositions.filter((entry) => entry.recommended) : compositions;
185
- }
@@ -1,124 +0,0 @@
1
- import assert from "node:assert/strict";
2
- import test from "node:test";
3
- import {
4
- formatBasisPoints,
5
- previewCommand,
6
- projectComposition,
7
- safeIdentifier,
8
- visibleCompositions,
9
- } from "./catalog-model.mjs";
10
-
11
- function fixture() {
12
- const verified = {
13
- registry_id: "official",
14
- registry_version: "2026.07",
15
- manifest_sha256: "a".repeat(64),
16
- integrity_verified: true,
17
- signature_verified: true,
18
- trusted_maintainer: true,
19
- compatible: true,
20
- freshness: "current",
21
- effective_status: "recommended",
22
- recommended: true,
23
- entry: {
24
- id: "balanced-codex",
25
- version: "1.0.0",
26
- lifecycle: "published",
27
- compatible_hosts: ["codex"],
28
- min_planr_version: "1.3.0",
29
- max_planr_version: "1.9.0",
30
- review_at_unix: 1815523200,
31
- evaluation: {
32
- policy_id: "balanced",
33
- policy_version: "1.0.0",
34
- binding_id: "codex-openai",
35
- binding_version: "1.0.0",
36
- },
37
- signature: { signer: "planr-maintainers" },
38
- artifacts: [
39
- { path: "pack/policy.toml", kind: "policy", sha256: "1".repeat(64), size_bytes: 1 },
40
- { path: "pack/binding.toml", kind: "host-binding", sha256: "2".repeat(64), size_bytes: 2 },
41
- { path: "pack/verification.json", kind: "verification", sha256: "3".repeat(64), size_bytes: 3 },
42
- ],
43
- },
44
- };
45
- const policy = {
46
- id: "balanced",
47
- usage: { max_active_agents: 3, max_parallel_writers: 1, max_depth: 1, metering: "trusted" },
48
- transitions: { retry: { max_same_route_retries: 1 }, safety_stop: { enabled: true } },
49
- materiality: { changed_files_threshold: 10 },
50
- execution: { roles: { worker: { commands: [], hooks: [], network_hosts: [], mcp_servers: [] } } },
51
- };
52
- const preview = {
53
- pack: { safe: true },
54
- composition: { host: "codex", binding: { id: "codex-openai" }, dispatch: {} },
55
- artifacts: [
56
- { kind: "active_policy", config_diff: { proposed: { value: policy } } },
57
- { kind: "agent_registry", config_diff: { proposed: { value: { profiles: {} } } } },
58
- ],
59
- };
60
- const candidate = {
61
- policy: { id: "balanced" },
62
- binding: { id: "codex-openai" },
63
- status: "recommended",
64
- metrics: { runs: 7, verified_route_runs: 7, average_quality_score_bps: 9600 },
65
- threshold_results: [{ name: "quality", pass: true }],
66
- results: [{ result_sha256: "4".repeat(64) }],
67
- };
68
- const verificationEnvelope = {
69
- report: {
70
- suite: { id: "planr-preset-suite", version: "1.8.0", evaluated_at_unix: 1783987200, fixture_sha256: "5".repeat(64) },
71
- candidates: [candidate],
72
- recommended: [{ policy: "balanced", binding: "codex-openai", status: "recommended" }],
73
- },
74
- };
75
- return { verified, preview, verificationEnvelope };
76
- }
77
-
78
- test("projects only trusted, safe, evidence-bound registry entries", () => {
79
- const projected = projectComposition(fixture());
80
- assert.equal(projected.status, "recommended");
81
- assert.equal(projected.registry.signatureVerified, true);
82
- assert.equal(projected.enforcement.at(-1).state, "verified");
83
- assert.equal(projected.command, "planr agents preset apply balanced --binding codex-openai");
84
- });
85
-
86
- test("refuses unsigned metadata and recommendation drift", () => {
87
- const unsigned = fixture();
88
- unsigned.verified.signature_verified = false;
89
- assert.throws(() => projectComposition(unsigned), /trusted maintainer/);
90
-
91
- const drifted = fixture();
92
- drifted.verificationEnvelope.report.recommended = [];
93
- assert.throws(() => projectComposition(drifted), /does not match/);
94
- });
95
-
96
- test("publishes lifecycle-demoted recommendations with visible replacement metadata", () => {
97
- const stale = fixture();
98
- stale.verified.freshness = "stale";
99
- stale.verified.effective_status = "stale";
100
- stale.verified.recommended = false;
101
- const staleProjected = projectComposition(stale);
102
- assert.equal(staleProjected.status, "stale");
103
- assert.equal(staleProjected.recommended, false);
104
-
105
- const deprecated = fixture();
106
- deprecated.verified.effective_status = "deprecated";
107
- deprecated.verified.recommended = false;
108
- deprecated.verified.entry.lifecycle = "deprecated";
109
- deprecated.verified.entry.replacement = "balanced-codex-v2";
110
- const deprecatedProjected = projectComposition(deprecated);
111
- assert.equal(deprecatedProjected.status, "deprecated");
112
- assert.equal(deprecatedProjected.replacement, "balanced-codex-v2");
113
- });
114
-
115
- test("copy commands accept identifiers only and filtering is deterministic", () => {
116
- assert.equal(previewCommand("balanced", "codex-openai"), "planr agents preset apply balanced --binding codex-openai");
117
- assert.throws(() => safeIdentifier("balanced; curl evil"), /safe registry identifier/);
118
- assert.deepEqual(
119
- visibleCompositions({ compositions: [{ recommended: true }, { recommended: false }] }, true),
120
- [{ recommended: true }],
121
- );
122
- assert.equal(formatBasisPoints(9600), "96.00%");
123
- assert.equal(formatBasisPoints(undefined), "—");
124
- });
@@ -1,38 +0,0 @@
1
- import assert from "node:assert/strict";
2
- import { existsSync } from "node:fs";
3
- import { homedir } from "node:os";
4
- import { dirname, join, resolve } from "node:path";
5
- import { spawnSync } from "node:child_process";
6
- import { fileURLToPath } from "node:url";
7
- import test from "node:test";
8
- import { cloudflareTestSteps } from "../scripts/cloudflare-test.mjs";
9
-
10
- test("launcher keeps deploy and destroy pinned to the test stage", () => {
11
- assert.deepEqual(cloudflareTestSteps("deploy"), [
12
- ["pnpm", ["site:check"]],
13
- ["pnpm", ["exec", "alchemy", "deploy", "--stage", "test"]],
14
- ]);
15
- assert.deepEqual(cloudflareTestSteps("destroy"), [
16
- ["pnpm", ["exec", "alchemy", "destroy", "--stage", "test"]],
17
- ]);
18
- assert.throws(() => cloudflareTestSteps("prod"), /usage:/);
19
- });
20
-
21
- const repositoryRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..");
22
- const launcher = join(repositoryRoot, "scripts", "cloudflare-test.mjs");
23
- for (const version of ["v18.16.1", "v20.19.5"]) {
24
- const node = join(homedir(), ".nvm", "versions", "node", version, "bin", "node");
25
- test(
26
- `direct launcher rejects ${version} before invoking pnpm`,
27
- { skip: !existsSync(node) && `local ${version} runtime is unavailable` },
28
- () => {
29
- const result = spawnSync(node, [launcher, "deploy"], {
30
- cwd: repositoryRoot,
31
- encoding: "utf8",
32
- });
33
- assert.equal(result.status, 1);
34
- assert.match(result.stderr, /Cloudflare deployment requires Node\.js 22 or newer/);
35
- assert.doesNotMatch(result.stderr, /Corepack|ERR_VM|addAbortListener|experimental-strip-types/);
36
- },
37
- );
38
- }
@@ -1,307 +0,0 @@
1
- {
2
- "schemaVersion": 1,
3
- "generatedAtUnix": 1783987200,
4
- "source": {
5
- "state": "verified_registry_projection",
6
- "manifest": "website/registry/manifest.toml",
7
- "entryCount": 1,
8
- "trust": "planr_registry_v1"
9
- },
10
- "compositions": [
11
- {
12
- "id": "balanced-codex@1.0.0",
13
- "entryId": "balanced-codex",
14
- "entryVersion": "1.0.0",
15
- "status": "recommended",
16
- "statusLabel": "Recommended",
17
- "recommended": true,
18
- "freshness": "current",
19
- "lifecycle": "published",
20
- "replacement": null,
21
- "policy": {
22
- "id": "balanced",
23
- "version": "1.0.0",
24
- "usage": {
25
- "budget_exhaustion": "stop",
26
- "max_active_agents": 3,
27
- "max_attempts": 4,
28
- "max_depth": 1,
29
- "max_parallel_readers": 2,
30
- "max_parallel_writers": 1,
31
- "max_tool_calls": 120,
32
- "max_wall_time_seconds": 3600,
33
- "metering": "estimated",
34
- "review_reserve_percent": 20
35
- },
36
- "transitions": {
37
- "availability_fallback": {
38
- "max_fallbacks": 1,
39
- "require_same_capability_class": true
40
- },
41
- "quality_escalation": {
42
- "max_escalations": 1,
43
- "require_verification_evidence": true
44
- },
45
- "quota_downgrade": {
46
- "enabled": false,
47
- "max_downgrades": 0,
48
- "noncritical_only": true
49
- },
50
- "retry": {
51
- "max_same_route_retries": 1
52
- },
53
- "safety_stop": {
54
- "enabled": true
55
- }
56
- },
57
- "materiality": {
58
- "changed_files_threshold": 10,
59
- "changed_lines_threshold": 500
60
- },
61
- "execution": {
62
- "max_read_scope_entries": 8,
63
- "max_write_scope_entries": 4,
64
- "roles": {
65
- "worker": {
66
- "approvals": [],
67
- "commands": [],
68
- "environment": [],
69
- "filesystem": {
70
- "allow_overwrite": false,
71
- "read_roots": [
72
- "docs",
73
- "src",
74
- "tests"
75
- ],
76
- "write_roots": [
77
- "docs",
78
- "src",
79
- "tests"
80
- ]
81
- },
82
- "hooks": [],
83
- "mcp_servers": [],
84
- "network_hosts": [],
85
- "secret_references": "[REDACTED]",
86
- "tools": [
87
- "cargo",
88
- "git",
89
- "rg"
90
- ]
91
- }
92
- }
93
- }
94
- },
95
- "binding": {
96
- "id": "codex-openai",
97
- "version": "1.0.0",
98
- "host": "codex",
99
- "profiles": {
100
- "codex-openai-driver": {
101
- "capabilities": [],
102
- "client": "codex",
103
- "cost_tier": "premium",
104
- "effort": "xhigh",
105
- "model": "gpt-5.5"
106
- },
107
- "codex-openai-worker": {
108
- "capabilities": [],
109
- "client": "codex",
110
- "cost_tier": "standard",
111
- "effort": "high",
112
- "model": "gpt-5.4-mini",
113
- "skill": "planr-work"
114
- }
115
- },
116
- "dispatch": {
117
- "driver": {
118
- "capability_evidence": [
119
- "builtin-codex-none-fork-contract"
120
- ],
121
- "effort_override": false,
122
- "fork_turns": {
123
- "mode": "none"
124
- },
125
- "model_override": false
126
- },
127
- "worker": {
128
- "capability_evidence": [
129
- "builtin-codex-none-fork-contract"
130
- ],
131
- "effort_override": true,
132
- "fork_turns": {
133
- "mode": "none"
134
- },
135
- "model_override": true
136
- }
137
- }
138
- },
139
- "compatibility": {
140
- "hosts": [
141
- "codex"
142
- ],
143
- "minPlanrVersion": "1.3.0",
144
- "maxPlanrVersion": "1.9.0"
145
- },
146
- "enforcement": [
147
- {
148
- "dimension": "Policy limits",
149
- "state": "verified",
150
- "detail": "Planr validates count, time, concurrency, transition, and safety-stop limits before dispatch."
151
- },
152
- {
153
- "dimension": "Execution permissions",
154
- "state": "verified",
155
- "detail": "Registry-safe policy: no commands, hooks, network/MCP grants, secrets, or overwrite permission."
156
- },
157
- {
158
- "dimension": "Model and effort",
159
- "state": "host_enforced",
160
- "detail": "The host binding requests concrete routes; the host retains final execution authority."
161
- },
162
- {
163
- "dimension": "Effective route evidence",
164
- "state": "verified",
165
- "detail": "7 of 7 evaluation runs carried verified effective-route evidence."
166
- }
167
- ],
168
- "evaluation": {
169
- "suiteId": "planr-preset-suite",
170
- "suiteVersion": "1.8.0",
171
- "evaluatedAtUnix": 1783987200,
172
- "reviewAtUnix": 1815523200,
173
- "status": "recommended",
174
- "metrics": {
175
- "actual_task_runs": 7,
176
- "availability_fallbacks": 7,
177
- "average_credits_micros": 100,
178
- "average_quality_score_bps": 10000,
179
- "corrections": 7,
180
- "metrics_source": "trusted_telemetry",
181
- "oracle_passes": 7,
182
- "p95_latency_ms": 228,
183
- "quality_escalations": 7,
184
- "reliability_bps": 10000,
185
- "retries": 7,
186
- "runs": 7,
187
- "safety_stop_attempts": 1,
188
- "safety_stop_failures": 0,
189
- "total_credits_micros": 700,
190
- "total_tokens": 70,
191
- "total_tool_calls": 7,
192
- "transition_contract_failures": 0,
193
- "verified_result_hashes": 7,
194
- "verified_route_runs": 7,
195
- "violations": 0
196
- },
197
- "thresholds": [
198
- {
199
- "actual": "7",
200
- "name": "minimum_runs",
201
- "pass": true,
202
- "rule": ">= 7"
203
- },
204
- {
205
- "actual": "10000",
206
- "name": "quality",
207
- "pass": true,
208
- "rule": ">= 8500 bps"
209
- },
210
- {
211
- "actual": "10000",
212
- "name": "reliability",
213
- "pass": true,
214
- "rule": ">= 9000 bps"
215
- },
216
- {
217
- "actual": "100",
218
- "name": "average_cost",
219
- "pass": true,
220
- "rule": "<= 1200000 credits_micros"
221
- },
222
- {
223
- "actual": "228",
224
- "name": "p95_latency",
225
- "pass": true,
226
- "rule": "<= 5000 ms"
227
- },
228
- {
229
- "actual": "0",
230
- "name": "transition_contract",
231
- "pass": true,
232
- "rule": "<= 0 failures"
233
- },
234
- {
235
- "actual": "0",
236
- "name": "safety_stop",
237
- "pass": true,
238
- "rule": "<= 0 failures"
239
- },
240
- {
241
- "actual": "7/7",
242
- "name": "actual_task_runs",
243
- "pass": true,
244
- "rule": "all fixtures executed"
245
- },
246
- {
247
- "actual": "7/7",
248
- "name": "output_oracles",
249
- "pass": true,
250
- "rule": "all task output oracles pass"
251
- },
252
- {
253
- "actual": "7/7",
254
- "name": "route_evidence",
255
- "pass": true,
256
- "rule": "all runs verified"
257
- },
258
- {
259
- "actual": "7/7",
260
- "name": "result_hashes",
261
- "pass": true,
262
- "rule": "all result hashes verified"
263
- }
264
- ],
265
- "resultHashes": [
266
- "c721c30da6e5f988de6741e8d4e611f7f45ad36425559a6b67ae4723869619be",
267
- "e026c322f1f094f7241d352a8e9c70f10b89d456e7f42825b3c689dc5d785dc9",
268
- "c74bf8de8296ff94ba45deeac158b619e3eb99c4e1b5251169bc2f1586518979",
269
- "f76f06ae46bc2ce05bd631ee1f702e348a8dd3b8d4b2e53d59c409af4f330015",
270
- "2165057d66dcc73722a57d01fb237a73f4da12bc70ab8757c817975925bfbbd8",
271
- "052de2acf92d0ac000a15b92b26d5f173fe4ff606ee1dbe37df1e4a535cbdff8",
272
- "41bf6ab560a23c450e9def8944c934091b598d270978fef8aaae0933f806619e"
273
- ],
274
- "fixtureSha256": "733c94e049d784eec2fa222f60c230e3f185ccefc84c23c313b1d7e85b60ab22"
275
- },
276
- "registry": {
277
- "id": "planr-official",
278
- "version": "2026.07",
279
- "manifestSha256": "1512df7f667dd1c8f92b2eb39a06739336048dde58327195ada85b419a6cb4c7",
280
- "signer": "planr-release-2026",
281
- "signatureVerified": true,
282
- "trustedMaintainer": true,
283
- "artifacts": [
284
- {
285
- "path": "presets/policies/balanced.toml",
286
- "kind": "policy",
287
- "sha256": "827667b678224f6b09f7c3faab188ede4c7bad49cd2fc9fa8e46f01d61147080",
288
- "sizeBytes": 993
289
- },
290
- {
291
- "path": "presets/bindings/codex-openai.toml",
292
- "kind": "host-binding",
293
- "sha256": "2f1f1d91000aff8e6a7424f0380c16c46d24ee38c94de5a9beee2158c0bf6575",
294
- "sizeBytes": 1449
295
- },
296
- {
297
- "path": "website/registry/verification.json",
298
- "kind": "verification",
299
- "sha256": "7d1e36372b050ecab5080ea029fd3594f8f8f1df2f1d391c36aebd0fb56cf99a",
300
- "sizeBytes": 276027
301
- }
302
- ]
303
- },
304
- "command": "planr agents preset apply balanced --binding codex-openai"
305
- }
306
- ]
307
- }