planr 1.3.0-alpha.1 → 1.4.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/README.md +32 -1
- package/docs/ARCHITECTURE.md +5 -0
- package/docs/CLI_REFERENCE.md +21 -4
- package/docs/MCP_CONTRACT.md +5 -1
- package/docs/MODEL_ROUTING.md +2 -2
- package/docs/PRESET_COMPOSITION.md +109 -0
- package/docs/PRESET_EVALUATION.md +118 -0
- package/docs/PRESET_REGISTRY.md +61 -0
- package/docs/fixtures/mcp-contract.json +16 -0
- package/evaluations/preset-suite-v1.toml +127 -0
- package/evaluations/sol-luna-codex-v1.toml +42 -0
- package/npm/native/darwin-arm64/planr +0 -0
- package/npm/native/darwin-x86_64/planr +0 -0
- package/npm/native/linux-arm64/planr +0 -0
- package/npm/native/linux-x86_64/planr +0 -0
- package/package.json +15 -2
- package/plugins/planr/.claude-plugin/plugin.json +1 -1
- package/plugins/planr/.codex-plugin/plugin.json +1 -1
- package/plugins/planr/skills/planr-verify-web/SKILL.md +1 -0
- package/presets/bindings/claude-native.toml +52 -0
- package/presets/bindings/codex-openai.toml +56 -0
- package/presets/bindings/cursor-fable-grok.toml +49 -0
- package/presets/bindings/cursor-openai.toml +49 -0
- package/presets/bindings/mixed-host.toml +64 -0
- package/presets/policies/balanced.toml +50 -0
- package/presets/policies/low-usage.toml +50 -0
- package/presets/policies/max-quality.toml +50 -0
- package/presets/policies/read-only-audit.toml +50 -0
- package/website/README.md +79 -0
- package/website/_headers +7 -0
- package/website/alchemy-runtime.test.mjs +21 -0
- package/website/app.mjs +216 -0
- package/website/build-catalog.mjs +135 -0
- package/website/build-site.test.mjs +69 -0
- package/website/catalog-model.mjs +185 -0
- package/website/catalog-model.test.mjs +124 -0
- package/website/cloudflare-launcher.test.mjs +38 -0
- package/website/data/catalog.json +307 -0
- package/website/index.html +122 -0
- package/website/registry/manifest.toml +48 -0
- package/website/registry/report.md +33 -0
- package/website/registry/trusted-maintainers.toml +6 -0
- package/website/registry/verification.json +7258 -0
- package/website/serve.mjs +41 -0
- package/website/styles.css +201 -0
- package/website/test-fixtures/recommended.json +72 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createReadStream, statSync } from "node:fs";
|
|
3
|
+
import { createServer } from "node:http";
|
|
4
|
+
import { extname, join, normalize, resolve } from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
|
|
7
|
+
const root = resolve(fileURLToPath(new URL(".", import.meta.url)));
|
|
8
|
+
const port = Number(process.env.PORT ?? 4173);
|
|
9
|
+
const types = {
|
|
10
|
+
".css": "text/css; charset=utf-8",
|
|
11
|
+
".html": "text/html; charset=utf-8",
|
|
12
|
+
".json": "application/json; charset=utf-8",
|
|
13
|
+
".mjs": "text/javascript; charset=utf-8",
|
|
14
|
+
".svg": "image/svg+xml",
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const server = createServer((request, response) => {
|
|
18
|
+
const pathname = decodeURIComponent(new URL(request.url, "http://localhost").pathname);
|
|
19
|
+
const relative = normalize(pathname === "/" ? "index.html" : pathname.replace(/^\/+/, ""));
|
|
20
|
+
const path = resolve(join(root, relative));
|
|
21
|
+
if (!path.startsWith(`${root}/`)) {
|
|
22
|
+
response.writeHead(403).end("Forbidden");
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
if (!statSync(path).isFile()) throw new Error("not a file");
|
|
27
|
+
response.writeHead(200, {
|
|
28
|
+
"Content-Type": types[extname(path)] ?? "application/octet-stream",
|
|
29
|
+
"Cache-Control": "no-store",
|
|
30
|
+
"X-Content-Type-Options": "nosniff",
|
|
31
|
+
});
|
|
32
|
+
createReadStream(path).pipe(response);
|
|
33
|
+
} catch {
|
|
34
|
+
response.writeHead(404, { "Content-Type": "text/plain; charset=utf-8" }).end("Not found");
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
server.listen(port, "127.0.0.1", () => {
|
|
39
|
+
console.log(`Planr preset catalog listening on http://127.0.0.1:${port}`);
|
|
40
|
+
});
|
|
41
|
+
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
color-scheme: dark;
|
|
3
|
+
--ink: #f4f0e7;
|
|
4
|
+
--muted: #a9a49a;
|
|
5
|
+
--quiet: #77736c;
|
|
6
|
+
--paper: #11110f;
|
|
7
|
+
--panel: #181815;
|
|
8
|
+
--panel-2: #20201c;
|
|
9
|
+
--line: #35342e;
|
|
10
|
+
--acid: #d9ff57;
|
|
11
|
+
--blue: #7bd9ff;
|
|
12
|
+
--amber: #ffc76a;
|
|
13
|
+
--red: #ff8e7d;
|
|
14
|
+
--green: #8fe3a8;
|
|
15
|
+
--radius: 18px;
|
|
16
|
+
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
17
|
+
font-synthesis: none;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
* { box-sizing: border-box; }
|
|
21
|
+
html { scroll-behavior: smooth; }
|
|
22
|
+
body {
|
|
23
|
+
margin: 0;
|
|
24
|
+
background:
|
|
25
|
+
radial-gradient(circle at 85% 5%, rgb(217 255 87 / 8%), transparent 30rem),
|
|
26
|
+
linear-gradient(180deg, #151511 0, var(--paper) 36rem);
|
|
27
|
+
color: var(--ink);
|
|
28
|
+
min-width: 300px;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
button, select, input { font: inherit; }
|
|
32
|
+
button, select { color: inherit; }
|
|
33
|
+
a { color: inherit; }
|
|
34
|
+
|
|
35
|
+
.skip-link {
|
|
36
|
+
position: fixed;
|
|
37
|
+
left: 1rem;
|
|
38
|
+
top: 1rem;
|
|
39
|
+
z-index: 10;
|
|
40
|
+
padding: .75rem 1rem;
|
|
41
|
+
background: var(--acid);
|
|
42
|
+
color: #111;
|
|
43
|
+
clip-path: inset(50%);
|
|
44
|
+
height: 1px;
|
|
45
|
+
width: 1px;
|
|
46
|
+
overflow: hidden;
|
|
47
|
+
white-space: nowrap;
|
|
48
|
+
transform: translateY(-200%);
|
|
49
|
+
}
|
|
50
|
+
.skip-link:focus {
|
|
51
|
+
clip-path: none;
|
|
52
|
+
height: auto;
|
|
53
|
+
width: auto;
|
|
54
|
+
overflow: visible;
|
|
55
|
+
transform: translateY(0);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.site-header, main, footer { width: min(1180px, calc(100% - 2.5rem)); margin-inline: auto; }
|
|
59
|
+
.site-header {
|
|
60
|
+
min-height: 78px;
|
|
61
|
+
display: flex;
|
|
62
|
+
align-items: center;
|
|
63
|
+
justify-content: space-between;
|
|
64
|
+
border-bottom: 1px solid var(--line);
|
|
65
|
+
}
|
|
66
|
+
.brand { display: inline-flex; gap: .7rem; align-items: center; text-decoration: none; letter-spacing: -.02em; }
|
|
67
|
+
.brand-mark {
|
|
68
|
+
display: grid;
|
|
69
|
+
place-items: center;
|
|
70
|
+
width: 2rem;
|
|
71
|
+
height: 2rem;
|
|
72
|
+
border: 1px solid var(--acid);
|
|
73
|
+
border-radius: 50%;
|
|
74
|
+
color: var(--acid);
|
|
75
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
76
|
+
}
|
|
77
|
+
.brand strong { color: var(--acid); font-weight: 650; }
|
|
78
|
+
.header-note { color: var(--quiet); font-size: .85rem; }
|
|
79
|
+
|
|
80
|
+
.hero {
|
|
81
|
+
min-height: 440px;
|
|
82
|
+
display: grid;
|
|
83
|
+
grid-template-columns: minmax(0, 1.5fr) minmax(290px, .7fr);
|
|
84
|
+
gap: 5rem;
|
|
85
|
+
align-items: center;
|
|
86
|
+
padding-block: 6rem 4.5rem;
|
|
87
|
+
}
|
|
88
|
+
.eyebrow {
|
|
89
|
+
margin: 0 0 .75rem;
|
|
90
|
+
color: var(--acid);
|
|
91
|
+
font: 600 .72rem/1.2 ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
92
|
+
letter-spacing: .13em;
|
|
93
|
+
text-transform: uppercase;
|
|
94
|
+
}
|
|
95
|
+
h1, h2, h3, p { text-wrap: pretty; }
|
|
96
|
+
h1 { margin: 0; font-size: clamp(3rem, 7vw, 6.5rem); line-height: .91; letter-spacing: -.07em; font-weight: 600; }
|
|
97
|
+
h2 { margin: 0; font-size: clamp(1.6rem, 3vw, 2.65rem); line-height: 1; letter-spacing: -.045em; }
|
|
98
|
+
h3 { letter-spacing: -.025em; }
|
|
99
|
+
.lede { max-width: 720px; margin: 2rem 0 0; color: var(--muted); font-size: clamp(1rem, 1.8vw, 1.25rem); line-height: 1.6; }
|
|
100
|
+
.catalog-stats { margin: 0; border-top: 1px solid var(--line); }
|
|
101
|
+
.catalog-stats div { display: grid; grid-template-columns: 1fr auto; gap: 1rem; padding: 1.15rem 0; border-bottom: 1px solid var(--line); }
|
|
102
|
+
.catalog-stats dt { color: var(--muted); }
|
|
103
|
+
.catalog-stats dd { margin: 0; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
|
|
104
|
+
|
|
105
|
+
.fixture-banner { margin-bottom: 1rem; padding: .9rem 1.1rem; border: 1px solid var(--amber); background: rgb(255 199 106 / 8%); color: var(--amber); border-radius: 12px; }
|
|
106
|
+
.authority-note {
|
|
107
|
+
display: grid;
|
|
108
|
+
grid-template-columns: auto 1fr;
|
|
109
|
+
gap: 1.25rem;
|
|
110
|
+
margin-bottom: 5rem;
|
|
111
|
+
padding: 1.4rem;
|
|
112
|
+
border: 1px solid var(--blue);
|
|
113
|
+
border-radius: var(--radius);
|
|
114
|
+
background: rgb(123 217 255 / 5%);
|
|
115
|
+
}
|
|
116
|
+
.authority-icon { color: var(--blue); font-size: 2rem; line-height: 1; }
|
|
117
|
+
.authority-note h2 { font-size: 1.1rem; letter-spacing: -.015em; }
|
|
118
|
+
.authority-note p { margin: .5rem 0 0; color: var(--muted); line-height: 1.55; max-width: 920px; }
|
|
119
|
+
|
|
120
|
+
.compare-shell { padding-block: 2rem 6rem; }
|
|
121
|
+
.section-heading { display: flex; justify-content: space-between; align-items: end; gap: 2rem; }
|
|
122
|
+
.toggle { display: flex; align-items: center; gap: .65rem; color: var(--muted); cursor: pointer; }
|
|
123
|
+
.toggle input { width: 1.15rem; height: 1.15rem; accent-color: var(--acid); }
|
|
124
|
+
.selectors { display: grid; grid-template-columns: 1fr auto 1fr; gap: 1rem; align-items: end; margin: 2.2rem 0 1.2rem; }
|
|
125
|
+
.selectors label { display: grid; gap: .55rem; color: var(--muted); font-size: .8rem; }
|
|
126
|
+
select {
|
|
127
|
+
width: 100%;
|
|
128
|
+
padding: .95rem 2.5rem .95rem 1rem;
|
|
129
|
+
border: 1px solid var(--line);
|
|
130
|
+
border-radius: 12px;
|
|
131
|
+
background: var(--panel);
|
|
132
|
+
}
|
|
133
|
+
select:focus-visible, button:focus-visible, input:focus-visible, a:focus-visible { outline: 3px solid var(--blue); outline-offset: 3px; }
|
|
134
|
+
.versus { padding-bottom: 1rem; color: var(--quiet); font: .75rem ui-monospace, monospace; text-transform: uppercase; }
|
|
135
|
+
|
|
136
|
+
.comparison-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1.2rem; }
|
|
137
|
+
.preset-card { min-width: 0; padding: clamp(1.2rem, 3vw, 2rem); border: 1px solid var(--line); border-radius: var(--radius); background: var(--panel); }
|
|
138
|
+
.card-top { display: flex; align-items: start; justify-content: space-between; gap: 1rem; }
|
|
139
|
+
.card-top h3 { margin: .2rem 0 0; font-size: clamp(1.45rem, 3vw, 2.1rem); }
|
|
140
|
+
.binding-name { color: var(--muted); font-family: ui-monospace, monospace; font-size: .82rem; }
|
|
141
|
+
.badge { display: inline-flex; align-items: center; gap: .4rem; padding: .35rem .55rem; border: 1px solid currentColor; border-radius: 999px; font: 600 .68rem ui-monospace, monospace; text-transform: uppercase; letter-spacing: .06em; }
|
|
142
|
+
.badge::before { content: "●"; font-size: .55rem; }
|
|
143
|
+
.status-recommended { color: var(--acid); }
|
|
144
|
+
.status-verified { color: var(--blue); }
|
|
145
|
+
.status-stale, .status-deprecated { color: var(--amber); }
|
|
146
|
+
.status-experimental, .status-unverified { color: var(--muted); }
|
|
147
|
+
.meta-line { color: var(--quiet); font: .75rem/1.5 ui-monospace, monospace; }
|
|
148
|
+
|
|
149
|
+
.metric-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1px; margin: 1.5rem 0; overflow: hidden; border: 1px solid var(--line); border-radius: 12px; background: var(--line); }
|
|
150
|
+
.metric { padding: 1rem; background: var(--panel-2); }
|
|
151
|
+
.metric span { display: block; color: var(--quiet); font-size: .72rem; margin-bottom: .4rem; }
|
|
152
|
+
.metric strong { font: 500 1.15rem ui-monospace, monospace; }
|
|
153
|
+
.card-section { padding: 1.25rem 0; border-top: 1px solid var(--line); }
|
|
154
|
+
.card-section h4 { margin: 0 0 .9rem; font-size: .78rem; color: var(--muted); text-transform: uppercase; letter-spacing: .08em; }
|
|
155
|
+
.enforcement-list { display: grid; gap: .7rem; margin: 0; }
|
|
156
|
+
.enforcement-list div { display: grid; grid-template-columns: minmax(120px, .45fr) 1fr; gap: 1rem; }
|
|
157
|
+
.enforcement-list dt { font-size: .82rem; }
|
|
158
|
+
.enforcement-list dd { margin: 0; color: var(--muted); font-size: .82rem; line-height: 1.45; }
|
|
159
|
+
.compatibility-list { display: grid; gap: .7rem; margin: 0; }
|
|
160
|
+
.compatibility-list div { display: grid; grid-template-columns: minmax(120px, .45fr) 1fr; gap: 1rem; }
|
|
161
|
+
.compatibility-list dt { font-size: .82rem; }
|
|
162
|
+
.compatibility-list dd { margin: 0; color: var(--muted); font-size: .82rem; line-height: 1.45; }
|
|
163
|
+
.state { display: inline-block; margin-left: .35rem; color: var(--blue); font: .65rem ui-monospace, monospace; text-transform: uppercase; }
|
|
164
|
+
.hash { overflow-wrap: anywhere; color: var(--quiet); font: .7rem/1.5 ui-monospace, monospace; }
|
|
165
|
+
.command-block { display: grid; gap: .75rem; }
|
|
166
|
+
.command-block code { display: block; overflow-x: auto; padding: 1rem; border-radius: 10px; background: #0b0b09; color: var(--acid); font: .75rem/1.5 ui-monospace, monospace; }
|
|
167
|
+
.copy-button { justify-self: start; padding: .7rem .95rem; border: 1px solid var(--acid); border-radius: 9px; background: transparent; color: var(--acid); cursor: pointer; }
|
|
168
|
+
.copy-button:hover { background: var(--acid); color: #111; }
|
|
169
|
+
|
|
170
|
+
.empty-state { padding: 3rem; border: 1px dashed var(--line); border-radius: var(--radius); background: var(--panel); }
|
|
171
|
+
.empty-state h3 { margin: .25rem 0 .75rem; font-size: 1.6rem; }
|
|
172
|
+
.empty-state p:not(.eyebrow) { color: var(--muted); }
|
|
173
|
+
.empty-state code { color: var(--acid); overflow-wrap: anywhere; }
|
|
174
|
+
|
|
175
|
+
.legend { display: grid; grid-template-columns: .65fr 1.35fr; gap: 5rem; padding: 5rem 0; border-top: 1px solid var(--line); }
|
|
176
|
+
.legend dl { margin: 0; }
|
|
177
|
+
.legend dl div { display: grid; grid-template-columns: 140px 1fr; gap: 1rem; padding: .8rem 0; border-bottom: 1px solid var(--line); }
|
|
178
|
+
.legend dt { font-weight: 650; }
|
|
179
|
+
.legend dd { margin: 0; color: var(--muted); line-height: 1.5; }
|
|
180
|
+
footer { display: flex; justify-content: space-between; gap: 2rem; padding: 2.5rem 0 4rem; border-top: 1px solid var(--line); color: var(--quiet); font-size: .78rem; }
|
|
181
|
+
.sr-only { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
|
|
182
|
+
|
|
183
|
+
@media (max-width: 760px) {
|
|
184
|
+
.site-header, main, footer { width: min(100% - 1.4rem, 1180px); }
|
|
185
|
+
.header-note { display: none; }
|
|
186
|
+
.hero { min-height: auto; grid-template-columns: 1fr; gap: 3rem; padding-block: 4rem 3rem; }
|
|
187
|
+
h1 { font-size: clamp(3rem, 16vw, 5.5rem); }
|
|
188
|
+
.authority-note { margin-bottom: 3rem; }
|
|
189
|
+
.section-heading { align-items: start; flex-direction: column; }
|
|
190
|
+
.selectors { grid-template-columns: 1fr; }
|
|
191
|
+
.versus { display: none; }
|
|
192
|
+
.comparison-grid { grid-template-columns: 1fr; }
|
|
193
|
+
.legend { grid-template-columns: 1fr; gap: 2rem; }
|
|
194
|
+
.legend dl div { grid-template-columns: 110px 1fr; }
|
|
195
|
+
footer { flex-direction: column; }
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
@media (prefers-reduced-motion: reduce) {
|
|
199
|
+
html { scroll-behavior: auto; }
|
|
200
|
+
*, *::before, *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; }
|
|
201
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"generatedAtUnix": 1783987200,
|
|
4
|
+
"source": {
|
|
5
|
+
"state": "verified_registry_projection",
|
|
6
|
+
"entryCount": 2,
|
|
7
|
+
"trust": "localhost_test_fixture",
|
|
8
|
+
"message": "Synthetic browser fixture; never used by the production catalog."
|
|
9
|
+
},
|
|
10
|
+
"compositions": [
|
|
11
|
+
{
|
|
12
|
+
"id": "balanced-codex@1.0.0",
|
|
13
|
+
"entryId": "balanced-codex",
|
|
14
|
+
"entryVersion": "1.0.0",
|
|
15
|
+
"status": "recommended",
|
|
16
|
+
"recommended": true,
|
|
17
|
+
"freshness": "current",
|
|
18
|
+
"lifecycle": "published",
|
|
19
|
+
"policy": {
|
|
20
|
+
"id": "balanced",
|
|
21
|
+
"version": "1.0.0",
|
|
22
|
+
"usage": { "max_active_agents": 3, "max_parallel_writers": 1, "max_depth": 1, "metering": "trusted" }
|
|
23
|
+
},
|
|
24
|
+
"binding": { "id": "codex-openai", "version": "1.0.0", "host": "codex" },
|
|
25
|
+
"compatibility": { "hosts": ["codex"], "minPlanrVersion": "1.3.0", "maxPlanrVersion": "1.9.0" },
|
|
26
|
+
"enforcement": [
|
|
27
|
+
{ "dimension": "Policy limits", "state": "verified", "detail": "Planr validates count, time, concurrency, transition, and safety-stop limits before dispatch." },
|
|
28
|
+
{ "dimension": "Execution permissions", "state": "verified", "detail": "No commands, hooks, network/MCP grants, secret references, or overwrite permission." },
|
|
29
|
+
{ "dimension": "Model and effort", "state": "host_enforced", "detail": "Codex retains final concrete execution authority." },
|
|
30
|
+
{ "dimension": "Effective route evidence", "state": "verified", "detail": "7 of 7 evaluation runs carried verified effective-route evidence." }
|
|
31
|
+
],
|
|
32
|
+
"evaluation": {
|
|
33
|
+
"suiteId": "planr-preset-suite",
|
|
34
|
+
"suiteVersion": "1.8.0",
|
|
35
|
+
"evaluatedAtUnix": 1783987200,
|
|
36
|
+
"reviewAtUnix": 1815523200,
|
|
37
|
+
"metrics": { "average_quality_score_bps": 9600, "runs": 7, "oracle_passes": 7 }
|
|
38
|
+
},
|
|
39
|
+
"registry": { "manifestSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "signer": "localhost-fixture" }
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "low-usage-claude@1.0.0",
|
|
43
|
+
"entryId": "low-usage-claude",
|
|
44
|
+
"entryVersion": "1.0.0",
|
|
45
|
+
"status": "recommended",
|
|
46
|
+
"recommended": true,
|
|
47
|
+
"freshness": "current",
|
|
48
|
+
"lifecycle": "published",
|
|
49
|
+
"policy": {
|
|
50
|
+
"id": "low-usage",
|
|
51
|
+
"version": "1.0.0",
|
|
52
|
+
"usage": { "max_active_agents": 2, "max_parallel_writers": 1, "max_depth": 1, "metering": "trusted" }
|
|
53
|
+
},
|
|
54
|
+
"binding": { "id": "claude-native", "version": "1.0.0", "host": "claude-code" },
|
|
55
|
+
"compatibility": { "hosts": ["claude-code"], "minPlanrVersion": "1.3.0", "maxPlanrVersion": "1.9.0" },
|
|
56
|
+
"enforcement": [
|
|
57
|
+
{ "dimension": "Policy limits", "state": "verified", "detail": "Planr validates count, time, concurrency, transition, and safety-stop limits before dispatch." },
|
|
58
|
+
{ "dimension": "Execution permissions", "state": "verified", "detail": "No commands, hooks, network/MCP grants, secret references, or overwrite permission." },
|
|
59
|
+
{ "dimension": "Model and effort", "state": "host_enforced", "detail": "Claude Code retains final concrete execution authority." },
|
|
60
|
+
{ "dimension": "Effective route evidence", "state": "verified", "detail": "7 of 7 evaluation runs carried verified effective-route evidence." }
|
|
61
|
+
],
|
|
62
|
+
"evaluation": {
|
|
63
|
+
"suiteId": "planr-preset-suite",
|
|
64
|
+
"suiteVersion": "1.8.0",
|
|
65
|
+
"evaluatedAtUnix": 1783987200,
|
|
66
|
+
"reviewAtUnix": 1815523200,
|
|
67
|
+
"metrics": { "average_quality_score_bps": 9100, "runs": 7, "oracle_passes": 7 }
|
|
68
|
+
},
|
|
69
|
+
"registry": { "manifestSha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "signer": "localhost-fixture" }
|
|
70
|
+
}
|
|
71
|
+
]
|
|
72
|
+
}
|