@bjoernrochel/sevro 0.1.0-rc.7 → 1.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/CONTRIBUTING.md +22 -6
- package/README.md +5 -1
- package/docs/README.md +19 -15
- package/docs/architecture.md +138 -17
- package/docs/assets/README.md +5 -4
- package/docs/builtin-graders-v1.md +17 -3
- package/docs/codex-host.md +155 -49
- package/docs/contracts.md +2 -1
- package/docs/creating-cases.md +9 -2
- package/docs/development-cli.md +187 -19
- package/docs/documentation-quality.md +12 -2
- package/docs/evaluation-workflow.md +110 -0
- package/docs/extension-protocol-v1.md +26 -3
- package/docs/getting-started.md +23 -2
- package/docs/guide-evaluation.md +33 -1
- package/docs/identity-v1.md +25 -2
- package/docs/installing.md +11 -11
- package/docs/native-controls.md +76 -5
- package/docs/native-hosts.md +196 -7
- package/docs/reading-results.md +102 -0
- package/docs/recipes.md +489 -0
- package/docs/releases.md +31 -12
- package/docs/report-v1.md +29 -1
- package/docs/results-v1.md +141 -4
- package/docs/run-settings-v1.md +147 -0
- package/docs/runtime-v1.md +307 -18
- package/docs/troubleshooting.md +12 -12
- package/docs/typescript-quality.md +89 -26
- package/examples/recipes/candidate.ts +26 -0
- package/examples/recipes/cases/coding-change.json +21 -0
- package/examples/recipes/cases/host-tools.json +21 -0
- package/examples/recipes/cases/mise.json +21 -0
- package/examples/recipes/cases/node.json +21 -0
- package/examples/recipes/cases/python-uv.json +21 -0
- package/examples/recipes/cases/semantic.json +17 -0
- package/examples/recipes/coding-change/check.ts +23 -0
- package/examples/recipes/extension-artifacts.ts +65 -0
- package/examples/recipes/extension-methods.ts +174 -0
- package/examples/recipes/extension.ts +37 -0
- package/examples/recipes/repository-skill/.agents/skills/startup-guide/SKILL.md +7 -0
- package/examples/recipes/repository-skill/.claude/skills/startup-guide/SKILL.md +7 -0
- package/examples/recipes/repository-skill/README.md +3 -0
- package/examples/recipes/run-inputs.ts +188 -0
- package/examples/recipes/run-options.ts +131 -0
- package/examples/recipes/run.ts +63 -0
- package/examples/recipes/runtime/empty.json +1 -0
- package/examples/recipes/runtime/goals.json +1 -0
- package/examples/recipes/runtime/mise.json +6 -0
- package/examples/recipes/runtime/path.json +1 -0
- package/examples/recipes/runtime/plugins.json +4 -0
- package/examples/recipes/runtime/python-uv.json +10 -0
- package/examples/recipes/semantic-judge.ts +29 -0
- package/examples/templates/coding/adapter.ts +17 -0
- package/examples/templates/coding/case.json +15 -0
- package/examples/templates/repository-skill/.agents/skills/startup-guide/SKILL.md +6 -0
- package/examples/templates/repository-skill/extension-data.ts +64 -0
- package/examples/templates/repository-skill/extension.ts +31 -0
- package/examples/templates/response/adapter.ts +12 -0
- package/examples/templates/response/case.json +13 -0
- package/package.json +11 -5
- package/schemas/report-v1.schema.json +9 -0
- package/schemas/run-evidence-v1.schema.json +2 -1
- package/schemas/runtime-v1.schema.json +63 -7
- package/src/advisory.ts +2 -2
- package/src/candidate-artifacts.ts +206 -0
- package/src/candidate-codex-state.ts +185 -0
- package/src/case-validation.ts +73 -50
- package/src/cli/cancellation.ts +20 -0
- package/src/cli/command.ts +87 -0
- package/src/cli/completion.ts +15 -0
- package/src/cli/demo.ts +60 -0
- package/src/cli/evaluation.ts +55 -0
- package/src/cli/extension.ts +79 -0
- package/src/cli/help.ts +198 -0
- package/src/cli/hosts.ts +55 -0
- package/src/cli/init-settings.ts +30 -0
- package/src/cli/init.ts +111 -0
- package/src/{cli-invocation.ts → cli/invocation.ts} +214 -218
- package/src/cli/loading.ts +151 -0
- package/src/cli/preparation.ts +154 -0
- package/src/cli/presentation.ts +93 -0
- package/src/cli/progress.ts +6 -0
- package/src/cli/run-manifest.ts +128 -0
- package/src/cli/run-options.ts +403 -0
- package/src/cli/run-overrides.ts +69 -0
- package/src/cli/settings.ts +154 -0
- package/src/cli/summary.ts +43 -0
- package/src/cli.ts +13 -591
- package/src/contract-types.ts +94 -0
- package/src/engine.ts +13 -5
- package/src/evaluation/advisory.ts +150 -0
- package/src/{evaluation-check-plan.ts → evaluation/check-plan.ts} +103 -67
- package/src/evaluation/collection.ts +88 -0
- package/src/evaluation/context.ts +10 -0
- package/src/{evaluation-grading-host.ts → evaluation/grading-host.ts} +5 -5
- package/src/evaluation/grading.ts +235 -0
- package/src/{evaluation-invocation-plan.ts → evaluation/invocation-plan.ts} +147 -58
- package/src/{evaluation-plan.ts → evaluation/plan.ts} +208 -141
- package/src/evaluation/progress.ts +19 -0
- package/src/evaluation/resources.ts +241 -0
- package/src/evaluation/run.ts +206 -0
- package/src/{evaluation-semantic.ts → evaluation/semantic.ts} +133 -115
- package/src/evaluation/trial.ts +800 -0
- package/src/evaluation/types.ts +207 -0
- package/src/evidence/host-results.ts +85 -0
- package/src/evidence/retained-artifacts.ts +18 -0
- package/src/evidence/trial-writer.ts +203 -0
- package/src/evidence/usage.ts +17 -0
- package/src/extension-client.ts +34 -96
- package/src/extension-session.ts +24 -48
- package/src/{advisory-fixture.ts → fixtures/advisory.ts} +15 -76
- package/src/{fixture-bin.ts → fixtures/bin.ts} +1 -1
- package/src/{fixture-cleanup.ts → fixtures/cleanup.ts} +13 -7
- package/src/fixtures/create.ts +183 -0
- package/src/{generated-fixture.ts → fixtures/generated.ts} +10 -53
- package/src/{git-hooks.ts → fixtures/git-hooks.ts} +1 -1
- package/src/{preparation.ts → fixtures/preparation.ts} +6 -16
- package/src/{repository-fixture.ts → fixtures/repository.ts} +30 -64
- package/src/{fixture-setup.ts → fixtures/setup.ts} +33 -51
- package/src/{fixture-tools.ts → fixtures/tools.ts} +1 -1
- package/src/fixtures/workspace-state.ts +212 -0
- package/src/generated/cli-result.d.cts +2 -1
- package/src/generated/extension.d.cts +2 -1
- package/src/generated/report.cjs +1 -1
- package/src/generated/report.d.cts +2 -1
- package/src/generated/run-evidence.cjs +1 -1
- package/src/generated/run-evidence.d.cts +2 -1
- package/src/generated/runtime.cjs +1 -1
- package/src/generated/runtime.d.cts +2 -1
- package/src/git.ts +93 -0
- package/src/graders/git-head.ts +29 -84
- package/src/graders/shell.ts +57 -68
- package/src/host-diagnostic-redaction.ts +52 -0
- package/src/host-diagnostics.ts +331 -0
- package/src/hosts/claude-continuation.ts +57 -40
- package/src/hosts/claude-credential.ts +160 -63
- package/src/hosts/claude-events.ts +34 -18
- package/src/hosts/claude-keychain.ts +78 -21
- package/src/hosts/claude-login-recovery.ts +85 -0
- package/src/hosts/claude-login-refresh.ts +178 -0
- package/src/hosts/claude-login-store.ts +162 -0
- package/src/hosts/claude-login.ts +107 -0
- package/src/hosts/claude-native-goal.ts +15 -12
- package/src/hosts/claude-process.ts +10 -50
- package/src/hosts/claude-refresh-lock.ts +81 -0
- package/src/hosts/claude-repository-invocation.ts +9 -34
- package/src/hosts/claude-settings.ts +91 -14
- package/src/hosts/claude-skill-activations.ts +169 -0
- package/src/hosts/claude-state.ts +46 -16
- package/src/hosts/claude-tool-calls.ts +13 -10
- package/src/hosts/claude.ts +122 -73
- package/src/hosts/codex-app-server.ts +78 -52
- package/src/hosts/codex-configuration.ts +5 -10
- package/src/hosts/codex-exec-controls.ts +516 -0
- package/src/hosts/codex-marketplace.ts +12 -10
- package/src/hosts/codex-native-calls.ts +15 -122
- package/src/hosts/codex-process.ts +10 -54
- package/src/hosts/codex-profile.ts +50 -21
- package/src/hosts/codex-session-files.ts +1 -9
- package/src/hosts/codex-state.ts +141 -19
- package/src/hosts/codex.ts +221 -179
- package/src/hosts/isolation-common.ts +15 -11
- package/src/hosts/isolation-roots.ts +13 -20
- package/src/hosts/linux-sandbox.ts +27 -3
- package/src/hosts/mac-sandbox.ts +111 -18
- package/src/hosts/native-controls.ts +72 -22
- package/src/hosts/native-request.ts +55 -0
- package/src/hosts/process-lifecycle.ts +221 -45
- package/src/hosts/protected-worktrees.ts +1 -1
- package/src/hosts/skill-hook-catalog.ts +131 -0
- package/src/hosts/skill-hook-handler.ts +374 -0
- package/src/hosts/skill-hooks.ts +577 -0
- package/src/instrumentation.ts +7 -8
- package/src/native-transcript-state.ts +22 -3
- package/src/native-transcript-view.ts +52 -13
- package/src/native-transcripts.ts +34 -15
- package/src/paths.ts +22 -0
- package/src/process-lifecycle.ts +150 -0
- package/src/provenance.ts +27 -7
- package/src/prune.ts +300 -0
- package/src/report.ts +63 -36
- package/src/resolved-case.ts +1 -1
- package/src/results-lock.ts +42 -0
- package/src/results.ts +14 -18
- package/src/run-owner.ts +4 -4
- package/src/{runtime-config.ts → runtime/config.ts} +182 -44
- package/src/{runtime-discovery-apple.ts → runtime/discovery-apple.ts} +3 -3
- package/src/{runtime-discovery-providers.ts → runtime/discovery-providers.ts} +3 -9
- package/src/{runtime-discovery.ts → runtime/discovery.ts} +4 -4
- package/src/{runtime-hook-processes.ts → runtime/hook-processes.ts} +1 -1
- package/src/{runtime-hooks.ts → runtime/hooks.ts} +33 -22
- package/src/{runtime-paths.ts → runtime/paths.ts} +6 -18
- package/src/{runtime-query.ts → runtime/query.ts} +5 -5
- package/src/{runtime-seeds.ts → runtime/seeds.ts} +3 -3
- package/src/runtime/shared-cache.ts +130 -0
- package/src/{runtime-state.ts → runtime/state.ts} +28 -11
- package/src/schema-types.ts +73 -161
- package/src/shell.ts +4 -0
- package/src/transcript-retention.ts +146 -0
- package/src/value-guards.ts +22 -0
- package/docs/assets/sevro-logo.png +0 -0
- package/docs/assets/sevro-symbol.svg +0 -1
- package/docs/assets/sevro-wordmark.svg +0 -1
- package/docs/cache-ownership-validation.md +0 -49
- package/docs/claude-continuation-validation.md +0 -47
- package/docs/concurrency-validation.md +0 -86
- package/docs/configuration-root-validation.md +0 -70
- package/docs/engine-slice.md +0 -114
- package/docs/evidence/runtime-startup-30/README.md +0 -185
- package/docs/evidence/runtime-startup-30/after.json +0 -319
- package/docs/evidence/runtime-startup-30/baseline-timeout.jsonl +0 -2
- package/docs/evidence/runtime-startup-30/before.json +0 -403
- package/docs/evidence/runtime-startup-30/consumer-smoke.json +0 -63
- package/docs/evidence/runtime-startup-30/full-policy-diagnostic.jsonl +0 -3
- package/docs/evidence/runtime-startup-30/minimal-policy-diagnostic.jsonl +0 -3
- package/docs/evidence/runtime-startup-30/plugin-template-assessment.json +0 -20
- package/docs/evidence/runtime-startup-30/seedless-timeout.jsonl +0 -2
- package/docs/evidence.md +0 -17
- package/docs/fixture-cleanup-validation.md +0 -70
- package/docs/guide-verification.json +0 -239
- package/src/evaluation-context.ts +0 -257
- package/src/evaluation-fixture.ts +0 -313
- package/src/evaluation-run.ts +0 -198
- package/src/evaluation-trial.ts +0 -946
- package/src/evaluation-types.ts +0 -149
- package/src/hosts/claude-nested-skills.ts +0 -272
- package/src/hosts/codex-command-output.ts +0 -510
- package/src/hosts/codex-executor-command.ts +0 -291
- package/src/hosts/codex-skill-reads.ts +0 -609
- /package/src/{trial-scheduler.ts → evaluation/scheduler.ts} +0 -0
package/docs/results-v1.md
CHANGED
|
@@ -9,6 +9,17 @@ Each domain outcome also gets one human-readable line with its case, trial,
|
|
|
9
9
|
outcome ID, and status. Domain outcomes remain independent of the task verdict
|
|
10
10
|
and exit code.
|
|
11
11
|
|
|
12
|
+
The CLI also shows trial states, bounded failed/unavailable
|
|
13
|
+
check details, measured candidate duration and known/unknown usage in human
|
|
14
|
+
completion. Actual preparation/candidate/grading/evidence stage messages use
|
|
15
|
+
stderr in both modes; they do not assert task success. Dry execution/grading are
|
|
16
|
+
explicitly skipped. JSON stdout stays unchanged. The CLI saves `result.json`
|
|
17
|
+
beside retained run evidence and atomically publishes `<results-root>/latest.json`
|
|
18
|
+
for [report access](report-v1.md). These output files stay inside excluded storage
|
|
19
|
+
and do not change evaluation identity. A failure to retain CLI/latest output is
|
|
20
|
+
reported as an internal error after an otherwise successful run; an earlier
|
|
21
|
+
nonzero run outcome keeps its precedence and its evidence reference.
|
|
22
|
+
|
|
12
23
|
## Separate states
|
|
13
24
|
|
|
14
25
|
Each trial and aggregate result carries:
|
|
@@ -98,6 +109,17 @@ persistence error.
|
|
|
98
109
|
[`identity-v1.md`](identity-v1.md) defines the canonical digest and each
|
|
99
110
|
comparison dimension.
|
|
100
111
|
|
|
112
|
+
Current CLI runs additionally retain the redacted effective-settings preview as
|
|
113
|
+
optional `configuration.resolved` (`sevro.resolved-run-settings.v1`), including
|
|
114
|
+
saved-setting selections and resolved operational paths. This snapshot excludes
|
|
115
|
+
credentials, credential-option paths, private source-closure/mapping paths,
|
|
116
|
+
private extension configuration and runtime
|
|
117
|
+
environment values; it is outside `configuration.digest`. Assessment settings
|
|
118
|
+
remain bound by the existing identity inputs and `configuration.redacted`.
|
|
119
|
+
Historical evidence without this optional field remains valid; missing settings
|
|
120
|
+
stay unknown. See [saved run settings](run-settings-v1.md) for precedence and
|
|
121
|
+
privacy limits.
|
|
122
|
+
|
|
101
123
|
The versioned machine-readable contracts are
|
|
102
124
|
[`cli-result-v1.schema.json`](../schemas/cli-result-v1.schema.json) and
|
|
103
125
|
[`run-evidence-v1.schema.json`](../schemas/run-evidence-v1.schema.json). A
|
|
@@ -110,26 +132,118 @@ An interrupted or failed run keeps completed trials plus an explicit partial
|
|
|
110
132
|
attempt or diagnostic record. Failed persistence is an internal error and
|
|
111
133
|
cannot be presented as a successful assessment.
|
|
112
134
|
|
|
135
|
+
Successful temporary workspaces are removed after their evidence is saved.
|
|
136
|
+
Failed and cancelled workspaces, including trials with unavailable required
|
|
137
|
+
grading evidence, are kept for 24 hours after becoming inactive. Evaluation
|
|
138
|
+
startup removes expired workspaces with verified inactive ownership. Active or
|
|
139
|
+
unverifiable workspaces and unregistered legacy folders are preserved; saved
|
|
140
|
+
results and evidence remain intact. Failed cleanup is retried on later evaluations.
|
|
141
|
+
|
|
142
|
+
`sevro.observation.workspaces` records candidate and retained auxiliary workspace
|
|
143
|
+
paths for inspection. These paths are temporary and do not affect evaluation identity.
|
|
144
|
+
|
|
145
|
+
Retained results have no automatic expiration. The explicit
|
|
146
|
+
[`sevro prune` command](reading-results.md#prune-retained-results) applies an
|
|
147
|
+
operator-selected age or count policy, defaulting to the newest ten results.
|
|
148
|
+
It deletes complete retained result directories and maintains `latest.json`
|
|
149
|
+
for the remaining results. Active or unrecognized attempts remain protected;
|
|
150
|
+
fixture cleanup and run-state coordination metadata have separate lifecycles.
|
|
151
|
+
|
|
152
|
+
Opted-in [candidate artifact runtimes](runtime-v1.md#candidate-artifact-access)
|
|
153
|
+
remain available through grading and are removed afterward, including failed
|
|
154
|
+
and cancelled trials. Failed-fixture retention does not preserve them.
|
|
155
|
+
Read access does not automatically retain artifact bytes in run evidence.
|
|
156
|
+
|
|
157
|
+
Checker private home, temporary storage, and copied dependency slots are removed
|
|
158
|
+
after grading on success, failure, and cancellation. Retained failed fixtures and
|
|
159
|
+
saved evidence do not retain checker runtime copies. Explicitly declared shared
|
|
160
|
+
caches survive this cleanup and remain under operator control.
|
|
161
|
+
|
|
113
162
|
A host adapter can return `executionFailed: true` with bounded artifacts from
|
|
114
163
|
a failed process. The engine retains those artifacts, skips all grading, and
|
|
115
164
|
reports `failed` / `not_requested` / `not_assessed` with exit code `2`. A final
|
|
116
165
|
message that happens to match a check cannot turn that failure into a pass.
|
|
117
166
|
Claude retains its bounded event stream and, when present, up to 64 KiB of
|
|
118
167
|
stderr as private host artifacts. Failure bodies do not appear in CLI diagnostics.
|
|
168
|
+
Codex preflight failures retain `codex.process` (stage, reason, exit code, signal,
|
|
169
|
+
duration, and stderr truncation) and `codex.stderr` (the first 64 KiB), with role
|
|
170
|
+
prefixes for semantic/advisory hosts. Diagnostics distinguish failure, timeout,
|
|
171
|
+
and cancellation without exposing raw stderr.
|
|
172
|
+
|
|
173
|
+
## Native host diagnostics
|
|
174
|
+
|
|
175
|
+
The CLI's opt-in
|
|
176
|
+
[`--retain-host-diagnostics`](development-cli.md#retain-native-host-diagnostics)
|
|
177
|
+
retains candidate artifact `sevro.host.diagnostics` with format
|
|
178
|
+
`sevro.host-diagnostics.v1`. Semantic and advisory requests use the existing
|
|
179
|
+
`sevro.semantic[.<source digest>].` and `sevro.advisory.` artifact ID prefixes.
|
|
180
|
+
The flag is independent of native transcript retention.
|
|
181
|
+
|
|
182
|
+
The private JSON contains `host`, `role`, `stage`, `error`, `processes`,
|
|
183
|
+
and `processesDropped`. Error evidence preserves the original name, message,
|
|
184
|
+
stack and available error code, with up to eight error entries in the cause chain. Repeated
|
|
185
|
+
or deeper causes end in an explicit `truncated` entry. Messages and stacks
|
|
186
|
+
are bounded to 8,192 characters per entry. A host-returned failure without a
|
|
187
|
+
thrown exception receives a runner failure summary; subprocess receipts and
|
|
188
|
+
bounded output supply its native evidence.
|
|
189
|
+
|
|
190
|
+
Each process receipt records stage, actual `code`, `signal`, `durationMs`,
|
|
191
|
+
reason, stdout/stderr prefixes, and separate truncation markers. Unknown native
|
|
192
|
+
exit information remains `null`; app-server's synthesized protocol result is
|
|
193
|
+
not substituted for a process exit code. Each stream retains at most 64 KiB,
|
|
194
|
+
and hosts continue consuming output after filling the diagnostic prefix.
|
|
195
|
+
Stream parsing and decoding failures also retain available prefixes.
|
|
196
|
+
Text uses replacement decoding for diagnostic inspection; it is not an exact
|
|
197
|
+
native-byte archive.
|
|
198
|
+
|
|
199
|
+
The journal keeps at most 32 recent process receipts and at most 2 MiB of
|
|
200
|
+
encoded receipt data. It drops oldest receipts first and reports their count.
|
|
201
|
+
The failing stage and bounded error remain independent of those dropped
|
|
202
|
+
receipts. Known credentials from selected authentication files, forwarded
|
|
203
|
+
Claude authentication variables, and common credential patterns are redacted
|
|
204
|
+
from the diagnostic JSON. Sevro does not explicitly dump environment values,
|
|
205
|
+
full argv, or settings into diagnostics. Treat retained diagnostics as private evidence and keep
|
|
206
|
+
them out of Git; redaction is not authorization to publish subprocess output.
|
|
207
|
+
|
|
208
|
+
The engine supplies an optional `retainHostDiagnostics(bytes)` callback to
|
|
209
|
+
host adapters. Bundled opted-in hosts invoke it before removing native state.
|
|
210
|
+
The callback saves the artifact with private permissions and registers its
|
|
211
|
+
file URL and SHA-256 in trial evidence. Direct adapter calls without that
|
|
212
|
+
callback return diagnostic bytes in ordinary host artifacts.
|
|
213
|
+
|
|
214
|
+
Failure diagnostics name the retained file URL when it fits the CLI message
|
|
215
|
+
limit; `evidencePath` and trial `artifactPath` resolve artifact references
|
|
216
|
+
even when a message cannot contain the URL. Native failures retain the existing
|
|
217
|
+
execution, grading, task and exit semantics. Failed diagnostic persistence is
|
|
218
|
+
an internal runner error, not a successful assessment or an ordinary host
|
|
219
|
+
failure. Cleanup errors do not replace an earlier host or diagnostic-persistence
|
|
220
|
+
failure; cleanup warnings contain no raw error/output bodies.
|
|
119
221
|
|
|
120
222
|
## Native transcript bundles
|
|
121
223
|
|
|
122
224
|
With [runtime transcript opt-in](runtime-v1.md#native-transcript-access), each
|
|
123
225
|
bundled host captures full native files before removing its private state.
|
|
124
226
|
Candidate artifact `sevro.native-transcripts.bundle` has format
|
|
125
|
-
`sevro.native-transcripts.
|
|
227
|
+
`sevro.native-transcripts.v2`. It contains `host` (`codex` or `claude`), `role`,
|
|
126
228
|
native `rootSessionId` (or `null`), `completeness`, `issues`, and `files`.
|
|
127
|
-
Each file records its native relative `path`, SHA-256 `sha256
|
|
128
|
-
|
|
229
|
+
Each file records its native relative `path`, SHA-256 `sha256` of the original
|
|
230
|
+
bytes, and `gzipBase64`: the exact file bytes compressed with gzip, then encoded
|
|
231
|
+
as base64. Decode base64, decompress gzip, and verify the original-byte hash
|
|
232
|
+
before using a file. Bound decompression to 5 MiB across all files in the bundle.
|
|
233
|
+
Decode bytes without rewriting native records. Native
|
|
129
234
|
session paths, root/child records and sidecar metadata preserve associations;
|
|
130
235
|
the bundle does not normalize model, effort, timing, token, or cost statistics.
|
|
131
236
|
Existing unknown metrics remain unknown.
|
|
132
237
|
|
|
238
|
+
Sevro reads both v2 bundles and existing `sevro.native-transcripts.v1` bundles.
|
|
239
|
+
V1 files use uncompressed `bytesBase64`; decode that field directly without
|
|
240
|
+
gzip decompression and verify the same original-byte hash. Readers must select
|
|
241
|
+
the payload field and decoding by `format` and reject unsupported formats,
|
|
242
|
+
corrupt compressed payloads, hash mismatches, or a decoded total above 5 MiB.
|
|
243
|
+
New captures emit v2; reading retained v1 evidence does not rewrite it.
|
|
244
|
+
The retained view exposes the same exact native files for either format, with
|
|
245
|
+
the original bundle in `index.json`.
|
|
246
|
+
|
|
133
247
|
`sevro.host.native-transcripts` records the same capture state and file hashes
|
|
134
248
|
without raw bytes. Semantic and advisory bundles retain their role in the
|
|
135
249
|
bundle and use the existing `sevro.semantic[.<source digest>].` and
|
|
@@ -140,7 +254,8 @@ benchmarks can use the same references and decode the native files.
|
|
|
140
254
|
|
|
141
255
|
Capture includes native transcript-tree sidecars and refuses descendant links,
|
|
142
256
|
special files and escaping paths. It is bounded to 4,096 directory entries,
|
|
143
|
-
5 MiB of native file bytes and 7 MiB of encoded file
|
|
257
|
+
5 MiB of native file bytes before compression and 7 MiB of encoded file
|
|
258
|
+
metadata/gzip content. The
|
|
144
259
|
bundle remains inside the existing 8 MiB item and 32 MiB host artifact budgets;
|
|
145
260
|
it groups sessions instead of spending an artifact per child. Limits produce
|
|
146
261
|
`byte_limit`, `entry_limit`, or `bundle_limit` issues. Unreadable, unsafe or
|
|
@@ -159,3 +274,25 @@ structure, not native semantic correctness.
|
|
|
159
274
|
An empty/missing native JSONL tree is `unavailable`. Failure, cancellation and
|
|
160
275
|
timeout retain available native bytes with incomplete capture state. Raw
|
|
161
276
|
bundles and views are private evidence and must stay out of Git.
|
|
277
|
+
|
|
278
|
+
The explicit [`sevro prune --native-transcripts` mode](reading-results.md#remove-native-transcript-bundles)
|
|
279
|
+
can remove these bundles without rewriting CLI results, run/trial evidence,
|
|
280
|
+
capture observations, native file hashes, or whole-bundle hashes. It retains
|
|
281
|
+
other artifacts and does not change evaluation identity or assessment states.
|
|
282
|
+
Reports validate present native bundles against their recorded SHA-256 and
|
|
283
|
+
require an exact pruning receipt for absent bundles.
|
|
284
|
+
|
|
285
|
+
Before deletion, Sevro atomically writes private
|
|
286
|
+
`native-transcripts-pruned.json` beside `run.json`, with format
|
|
287
|
+
`sevro.pruned-native-transcripts.v1`, the original `runId`, and `artifacts`.
|
|
288
|
+
Each entry contains the original artifact reference (`id`, `path`, `sha256`,
|
|
289
|
+
and any optional reference flags), plus its `caseId` and `trial`. Entries follow
|
|
290
|
+
run trial/reference order and cover every candidate, semantic (including
|
|
291
|
+
source-specific), and advisory native bundle in that run. A receipt must match
|
|
292
|
+
these original references exactly; malformed, inconsistent, or linked receipts
|
|
293
|
+
are errors. Bundle references must name regular files directly inside their
|
|
294
|
+
result directory. Missing bytes without a receipt, changed hashes, and escaping
|
|
295
|
+
references remain errors. An interrupted deletion may leave some marked bundles
|
|
296
|
+
present; reports count actual availability, and a repeated prune completes removal.
|
|
297
|
+
Transcript references that alias result/trial metadata, raw responses, or other
|
|
298
|
+
retained artifacts are refused before pruning.
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# Saved run settings v1
|
|
2
|
+
|
|
3
|
+
Save recurring evaluation selections in a JSON run manifest, then use
|
|
4
|
+
`sevro run --run-manifest-file ./evaluation.json`. The examples use the
|
|
5
|
+
[installed command](installing.md#make-the-command-available).
|
|
6
|
+
|
|
7
|
+
## Repeat an evaluation
|
|
8
|
+
|
|
9
|
+
Start with an existing [resolved case and adapter](getting-started.md), and save
|
|
10
|
+
this `evaluation.json` beside `case.json` and `host-adapter.ts`:
|
|
11
|
+
|
|
12
|
+
```json
|
|
13
|
+
{
|
|
14
|
+
"format": "sevro.run.v1",
|
|
15
|
+
"settings": {
|
|
16
|
+
"case-file": "./case.json",
|
|
17
|
+
"adapter-module": "./host-adapter.ts",
|
|
18
|
+
"project-root": ".",
|
|
19
|
+
"condition": "passive",
|
|
20
|
+
"trials": 3,
|
|
21
|
+
"jobs": 1,
|
|
22
|
+
"threshold": 1
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Run it twice with the same saved selections, or explicitly override one setting:
|
|
28
|
+
|
|
29
|
+
```sh
|
|
30
|
+
sevro run --run-manifest-file ./evaluation.json
|
|
31
|
+
sevro run --run-manifest-file ./evaluation.json
|
|
32
|
+
sevro run --run-manifest-file ./evaluation.json --trials 1 --json
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Every run prints effective settings on stderr before candidate execution, then
|
|
36
|
+
prints the result and evidence location. The example requires all assessed
|
|
37
|
+
trials to pass. A missing assessment remains `not_assessed`. Use `--dry` to
|
|
38
|
+
check preparation without calling the candidate or graders; dry preparation
|
|
39
|
+
does not prove native authentication or task success.
|
|
40
|
+
|
|
41
|
+
## Select candidate and grading routes once
|
|
42
|
+
|
|
43
|
+
For native execution, replace the adapter selection with an explicit host,
|
|
44
|
+
model and effort. Each grading role has its own selection. For example, a case
|
|
45
|
+
with semantic checks can use this manifest:
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"format": "sevro.run.v1",
|
|
50
|
+
"settings": {
|
|
51
|
+
"case-file": "./semantic-case.json",
|
|
52
|
+
"project-root": ".",
|
|
53
|
+
"host": "codex",
|
|
54
|
+
"model": "<candidate-model>",
|
|
55
|
+
"effort": "medium",
|
|
56
|
+
"codex-auth-file": "../private/auth.json",
|
|
57
|
+
"semantic-host": "codex",
|
|
58
|
+
"semantic-model": "<grading-model>",
|
|
59
|
+
"semantic-effort": "high",
|
|
60
|
+
"trials": 3,
|
|
61
|
+
"threshold": 1
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Replace model placeholders with installed-host-supported model names and supply
|
|
67
|
+
the [native prerequisites and authentication](native-hosts.md). Models and
|
|
68
|
+
efforts are never inferred or copied between roles. Candidate Claude uses
|
|
69
|
+
`host: "claude"` and its own explicit `model`/`effort`. An optional advisory
|
|
70
|
+
route uses `advisory-host`, `advisory-model` and `advisory-effort`; advisory
|
|
71
|
+
review requires a Git fixture and remains separate from the task verdict.
|
|
72
|
+
Injected adapters continue to declare their own model and effort.
|
|
73
|
+
|
|
74
|
+
## Format, precedence and paths
|
|
75
|
+
|
|
76
|
+
The root has exactly `format: "sevro.run.v1"` and an object `settings`. Settings
|
|
77
|
+
use the [CLI option names](development-cli.md) without the leading `--`.
|
|
78
|
+
All run options can be saved except `json` and `run-manifest-file`. Keep output
|
|
79
|
+
presentation explicit on the command line, including `--json` when collecting
|
|
80
|
+
a versioned success or failure document. Manifests do not include other
|
|
81
|
+
manifests and are read only when explicitly selected; there is no discovery.
|
|
82
|
+
|
|
83
|
+
| Option kind | JSON value |
|
|
84
|
+
| --------------------------------------------------------------------------------------- | ----------------------------------------------------- |
|
|
85
|
+
| `trials`, `jobs`, `threshold`, `codex-timeout-ms` | Number, with the CLI's existing ranges |
|
|
86
|
+
| `dry`, `shell-isolation`, `retain-host-diagnostics`, `claude-project-settings` | Boolean |
|
|
87
|
+
| `extension-source-file`, `protected-root`, `replace-builtin-grader`, `advisory-exclude` | Array of nonempty strings; `[]` selects an empty list |
|
|
88
|
+
| Other run options | Nonempty string |
|
|
89
|
+
|
|
90
|
+
Precedence is **built-in defaults → saved settings → explicit CLI options**.
|
|
91
|
+
Omitted settings retain the [documented defaults](development-cli.md#run-defaults).
|
|
92
|
+
An explicit repeatable flag replaces its saved array in full; repeated CLI
|
|
93
|
+
occurrences build the replacement array. `--no-dry`, `--no-shell-isolation`,
|
|
94
|
+
`--no-retain-host-diagnostics` and `--no-claude-project-settings` override saved
|
|
95
|
+
`true` values with `false`.
|
|
96
|
+
|
|
97
|
+
Selecting an alternative route on the CLI removes its saved alternative and
|
|
98
|
+
route-only settings. For example, `--adapter-module ./host-adapter.ts` replaces
|
|
99
|
+
a saved native candidate and its model/effort. Selecting `--host claude` over
|
|
100
|
+
a saved Codex candidate requires fresh explicit `--model` and `--effort`;
|
|
101
|
+
grading roles keep their separate selections. Shared Codex settings remain
|
|
102
|
+
while any Codex route is selected. CLI `--case-file` replaces a saved extension
|
|
103
|
+
source and its extension-only options. CLI `--extension-command-file` replaces
|
|
104
|
+
a saved case file; supply the extension's required ID and source closure.
|
|
105
|
+
Supplying two exclusive alternatives explicitly remains an error.
|
|
106
|
+
|
|
107
|
+
Paths saved in a manifest resolve from the **canonical directory containing
|
|
108
|
+
that manifest**, including `project-root`, output roots, adapters, protected
|
|
109
|
+
roots and extension source files. CLI paths always resolve from the invoking
|
|
110
|
+
current directory. `advisory-exclude` contains fixture-relative names, not host
|
|
111
|
+
paths. Paths inside case files, extension command argv, source maps and runtime
|
|
112
|
+
files retain their existing contracts. A manifest must be a regular,
|
|
113
|
+
non-symlink JSON file of at most 64 KiB. Unsupported versions, unknown fields,
|
|
114
|
+
invalid types and unreadable files fail before execution with an actionable
|
|
115
|
+
file/field diagnostic and exit `64`.
|
|
116
|
+
|
|
117
|
+
## Runtime, evidence and identity
|
|
118
|
+
|
|
119
|
+
The existing [`sevro.json` runtime contract](runtime-v1.md) is unchanged.
|
|
120
|
+
A run manifest selects recurring evaluation settings; `runtime-config-file`
|
|
121
|
+
can select a separate runtime file. Otherwise Sevro still discovers exactly
|
|
122
|
+
`<project-root>/sevro.json`. Runtime declarations do not become run options.
|
|
123
|
+
|
|
124
|
+
Current CLI runs retain the effective preview as optional
|
|
125
|
+
`configuration.resolved` in `sevro.run-evidence.v1`, with format
|
|
126
|
+
`sevro.resolved-run-settings.v1`. It records selected case and extension command
|
|
127
|
+
paths, source-closure count, mapping selection, adapters, routes, model/effort,
|
|
128
|
+
trial settings, runtime file selection and operational output locations. It
|
|
129
|
+
omits credentials and credential-option paths, private source-closure and mapping
|
|
130
|
+
paths, private extension configuration, runtime environment values and native
|
|
131
|
+
diagnostic contents. Explicit protected roots, paths and model labels are still operator metadata;
|
|
132
|
+
inspect retained evidence before sharing it. The runtime policy's existing
|
|
133
|
+
redacted evidence still retains explicitly declared non-secret environment
|
|
134
|
+
values. Older evidence without `configuration.resolved` remains valid and
|
|
135
|
+
does not acquire inferred settings.
|
|
136
|
+
|
|
137
|
+
Assessment settings enter the [evaluation identity](identity-v1.md) through
|
|
138
|
+
resolved cases, fixtures, checks, routes and `configuration.redacted`. The
|
|
139
|
+
additional `configuration.redacted.runSettings` binds shell isolation, explicit
|
|
140
|
+
protected roots, deprecated runtime selections, selected native timeouts and
|
|
141
|
+
Claude project-settings authority. Equivalent saved and
|
|
142
|
+
explicit selections have the same identity. Semantic changes such as model,
|
|
143
|
+
effort, trial count, job limit or threshold change identity. The manifest's
|
|
144
|
+
location, CLI output mode, and output/run-state paths are excluded from the
|
|
145
|
+
semantic configuration digest; `configuration.resolved` is an operational
|
|
146
|
+
snapshot outside that digest. Project content, including a tracked manifest,
|
|
147
|
+
still follows the existing project identity rules.
|