@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/codex-host.md
CHANGED
|
@@ -20,21 +20,13 @@ The bounded JSONL stream is retained per trial as the private
|
|
|
20
20
|
`sevro.codex.events` host artifact. Its file URL and digest appear in trial
|
|
21
21
|
evidence and are available to extension grading; the stream bytes stay out of
|
|
22
22
|
the run JSON.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
exact `cat` wrapped by `lean-ctx -c` is accepted only when its reported output
|
|
31
|
-
still contains the full body; a compressed summary cannot prove the read. An
|
|
32
|
-
attempted indirect, malformed, or incomplete read makes the observation
|
|
33
|
-
partial. This is a host observation; an extension decides what selection means
|
|
34
|
-
for its case.
|
|
35
|
-
The same check accepts skill files below the exact installed plugin roots from
|
|
36
|
-
Codex's installation receipts. It does not infer activation from arbitrary
|
|
37
|
-
files in the private plugin cache.
|
|
23
|
+
Skill activation uses the common `sevro.host.skill-activations` observation
|
|
24
|
+
from passive hooks in the request's private Codex home. The collector matches
|
|
25
|
+
prepared skill bodies in returned tool content without interpreting shell
|
|
26
|
+
syntax or recovering command output from native sessions. See
|
|
27
|
+
[skill activation evidence](native-hosts.md#skill-activation-evidence) for the
|
|
28
|
+
scope, limits, privacy boundaries, and incomplete collection states.
|
|
29
|
+
|
|
38
30
|
The `sevro.codex.native-calls` capability retains allowlisted direct goal and
|
|
39
31
|
agent control calls from the native session bound to the completed thread. Its
|
|
40
32
|
observation contains only call names, namespaces, and source ordinals, plus the
|
|
@@ -59,33 +51,10 @@ only when plaintext is readable. It retains neither message nor prompt bytes.
|
|
|
59
51
|
For a second prompt, `sevro.codex.continuation` retains the last validated
|
|
60
52
|
native-session ordinal before resume. Extensions can compare later call
|
|
61
53
|
ordinals with that boundary without reading private arguments.
|
|
62
|
-
|
|
63
|
-
`sevro.codex.follow-up-skill-reads` observations. Each applies the same exact
|
|
64
|
-
mounted-skill read check to one completed turn, so an extension can grade read
|
|
65
|
-
order or a missing repeat read without inferring it from the combined list.
|
|
66
|
-
|
|
67
|
-
It also checks native parent command records for exact mounted skill bodies,
|
|
68
|
-
including sessions with no spawn request. The bounded diagnostic distinguishes
|
|
69
|
-
no read from an incomplete read without claiming skill activation.
|
|
70
|
-
It retains the skill name and native ordinal when verified reads complete a
|
|
71
|
-
whole body. Repeated complete reads produce separate receipts; paged reads
|
|
72
|
-
produce one receipt when their ranges first cover the body. An incomplete
|
|
73
|
-
later reread makes the diagnostic partial. Extensions can compare these
|
|
74
|
-
ordinals with an accepted owner boundary without retaining commands or output.
|
|
75
|
-
Earlier yielded output can complete a read only when its process and unique
|
|
76
|
-
call identity bind it to that actor's native command completion. Completed
|
|
77
|
-
literal command calls use a bounded TypeScript parser; conditional or ambiguous
|
|
78
|
-
code cannot establish that binding. Recovery verifies the exact mounted bytes
|
|
79
|
-
and recomputes completeness for the matching CLI command. Private commands,
|
|
80
|
-
submitted code and recovered skill bodies stay out of public observations.
|
|
81
|
-
For accepted spawns, it also checks up to eight child thread rollouts and
|
|
54
|
+
For accepted spawns, the host checks up to eight child thread rollouts and
|
|
82
55
|
reports whether each is available, unavailable, ambiguous, or partial, with an
|
|
83
|
-
explicit truncation flag.
|
|
84
|
-
|
|
85
|
-
the exact mounted `SKILL.md` body was read, and whether the check was complete
|
|
86
|
-
or truncated. A rollout with no read differs from a missing or malformed
|
|
87
|
-
rollout. These diagnostics do not establish skill activation or task completion
|
|
88
|
-
by themselves and retain no child prompt, command, or output.
|
|
56
|
+
explicit truncation flag. Child rollout metadata describes delegation and
|
|
57
|
+
completion; skill activation remains in the common hook observation.
|
|
89
58
|
An available child rollout also reports whether one nonempty final assistant
|
|
90
59
|
message matches a later native completion event for the same turn. This proves
|
|
91
60
|
a returned turn, not the accuracy of the child's work, and retains no message
|
|
@@ -101,12 +70,18 @@ discarded. Extensions interpret task names and decide whether a nested reader
|
|
|
101
70
|
satisfies their policy.
|
|
102
71
|
The record proves an invocation attempt, not its success. A missing, ambiguous,
|
|
103
72
|
unreadable, oversized, or malformed session is unavailable or partial, so its
|
|
104
|
-
absence cannot prove that a control was unused.
|
|
105
|
-
|
|
73
|
+
absence cannot prove that a control was unused. Code Mode submissions now have
|
|
74
|
+
separate bounded `execCalls` inspection receipts, described in the
|
|
75
|
+
[native control contract](native-controls.md). Direct native call ordinals and
|
|
76
|
+
acceptance receipts keep their original meaning; submitted requests do not
|
|
77
|
+
acquire direct native acceptance receipts.
|
|
106
78
|
For an explicitly declared `$plugin:skill`, the host verifies that the installed
|
|
107
79
|
skill exists and that the exact token occurs once in the delivered prompt. A
|
|
108
|
-
completed turn yields `sevro.codex.explicit-invocation`
|
|
109
|
-
|
|
80
|
+
completed turn yields a complete `sevro.codex.explicit-invocation` naming the
|
|
81
|
+
dispatched skill. This receipt proves verified dispatch and contains no
|
|
82
|
+
`observedSkills` list. Activation checks require the common hook observation;
|
|
83
|
+
missing hook evidence cannot be repaired by a dispatch receipt or native
|
|
84
|
+
transcript. Failed execution cannot yield a complete dispatch receipt.
|
|
110
85
|
The `sevro.codex.repository-invocation` capability supports an explicitly
|
|
111
86
|
declared `$skill` from `.agents/skills/<skill>/SKILL.md`. The host checks that
|
|
112
87
|
the repository mount is a bounded regular file with no symlink components and
|
|
@@ -122,7 +97,11 @@ symlinks, and installs it with `codex plugin marketplace add` followed by
|
|
|
122
97
|
`codex plugin add`. It checks each installation receipt against the private
|
|
123
98
|
plugin cache. Candidate commands can read that cache, while the rest of the
|
|
124
99
|
private Codex home, including authentication and configuration, remains denied.
|
|
125
|
-
|
|
100
|
+
With the [Codex state opt-in](runtime-v1.md#candidate-codex-configuration-and-user-skills),
|
|
101
|
+
commands may read generated configuration and write actual non-system user skills;
|
|
102
|
+
graders retain read-only access to that request's original paths. Fixture-local
|
|
103
|
+
configuration is accepted as inert represented input on this route. Otherwise,
|
|
104
|
+
the host refuses fixture-local `.codex` configuration. It also refuses unsupported enforced
|
|
126
105
|
conditions, unreadable or oversized auth files, malformed event streams, and
|
|
127
106
|
incomplete turns. The host bounds output and runtime, kills its process group
|
|
128
107
|
on timeout or cancellation, and removes private state after the turn. It is
|
|
@@ -144,14 +123,18 @@ explicit workspace rule, denies all other filesystem roots except minimal
|
|
|
144
123
|
runtime files and the selected executable's install directories, and
|
|
145
124
|
specifically denies protected roots and the private Codex home. An executable
|
|
146
125
|
inside a protected root is rejected. The profile also disables command
|
|
147
|
-
network access and clears inherited command environment variables.
|
|
126
|
+
network access by default and clears inherited command environment variables.
|
|
127
|
+
The runtime [local HTTP option](runtime-v1.md#local-http-test-servers) enables
|
|
128
|
+
Codex's managed network proxy and local binding for socket-using tests.
|
|
129
|
+
The Codex
|
|
148
130
|
parent can read authentication before it starts sandboxed commands. Tests
|
|
149
131
|
invoke the installed `codex sandbox` CLI to prove fixture access, denied
|
|
150
132
|
source/auth reads, and executable access. The process adapter verifies these
|
|
151
133
|
properties in one sandbox invocation before each fresh host request, with a
|
|
152
134
|
60-second bounded startup deadline. The combined probe still requires readable
|
|
153
135
|
private command storage, denied project listing, denied authentication and
|
|
154
|
-
configuration reads
|
|
136
|
+
configuration reads (unless configuration access was explicitly enabled), and a
|
|
137
|
+
successful native executable `--version`. Continuation
|
|
155
138
|
turns reuse the same isolated state. The longer deadline accommodates observed
|
|
156
139
|
native policy startup; it is not counted as a performance saving.
|
|
157
140
|
|
|
@@ -162,12 +145,135 @@ wrappers additionally embed that request's runtime, sandbox profile, and receipt
|
|
|
162
145
|
paths. Replaying an old installation receipt cannot establish a new installed
|
|
163
146
|
path. Sevro therefore retains native marketplace/plugin installation and receipt
|
|
164
147
|
verification, fresh credentials/configuration, hook rewriting, preflight, and
|
|
165
|
-
invocation evidence for every request. See the [startup measurements](evidence/runtime-startup-30/README.md)
|
|
148
|
+
invocation evidence for every request. See the [startup measurements](https://github.com/BjRo/sevro/blob/main/docs/evidence/runtime-startup-30/README.md)
|
|
166
149
|
for measured boundaries, copy-on-write assessment, and limitations.
|
|
167
150
|
|
|
151
|
+
## Retired skill-read evidence
|
|
152
|
+
|
|
153
|
+
The current host no longer emits `sevro.codex.skill-reads`,
|
|
154
|
+
`sevro.codex.initial-skill-reads`, `sevro.codex.follow-up-skill-reads`, or native
|
|
155
|
+
parent/child read diagnostics. Migrate activation checks to
|
|
156
|
+
`sevro.host.skill-activations`; old required evidence remains unavailable rather
|
|
157
|
+
than silently receiving a different meaning. Existing retained run evidence
|
|
158
|
+
keeps its original interpretation.
|
|
159
|
+
|
|
160
|
+
[Issue #70 representative retests](https://github.com/BjRo/sevro/blob/main/docs/evidence/skill-reads-70/results.json) retain
|
|
161
|
+
separate task, activation, and phase-read outcomes from the private candidate,
|
|
162
|
+
plus its source fingerprints and test-first regression results. Private native
|
|
163
|
+
transcripts remain outside the repository.
|
|
164
|
+
|
|
165
|
+
<details>
|
|
166
|
+
<summary>Historical command-pattern and read-recovery contract</summary>
|
|
167
|
+
|
|
168
|
+
The following describes the retired collector before the hook migration.
|
|
169
|
+
These rules are preserved for interpreting older evidence; they do not describe
|
|
170
|
+
the current host.
|
|
171
|
+
|
|
172
|
+
The host also retains a bounded `sevro.codex.skill-reads` observation. It
|
|
173
|
+
records the first verified mounted skill and ordered skill names, without
|
|
174
|
+
commands or skill bodies. A `cat` or `sed -n` attempt counts only when its path
|
|
175
|
+
resolves to a mounted skill or a skill below an installed plugin root verified
|
|
176
|
+
by Codex's installation receipt. Missing targets outside a mounted skill
|
|
177
|
+
directory, listings, and other harmless mentions of `SKILL.md` do not make the
|
|
178
|
+
observation partial. A missing `SKILL.md` target does not count as a read just
|
|
179
|
+
because its parent directory belongs to a mounted skill; an existing mounted
|
|
180
|
+
target that fails or produces incomplete bytes remains partial. A completed direct
|
|
181
|
+
`cat` of one mounted `SKILL.md`, alone or alongside literal documentation
|
|
182
|
+
paths, counts only when the command output contains that file's exact body.
|
|
183
|
+
Batched reads naming more than 64 paths remain partial, as do failed,
|
|
184
|
+
malformed, or incomplete recognized reads. Direct
|
|
185
|
+
`sed -n` pages count after their verified line ranges cover the whole body. An
|
|
186
|
+
exact `cat` wrapped by `lean-ctx -c` is accepted only when its reported output
|
|
187
|
+
still contains the full body; a compressed summary cannot prove the read.
|
|
188
|
+
The same exact-body check accepts a literal read followed by one literal `rg`
|
|
189
|
+
command, separated by a semicolon or newline. It also accepts a single-file
|
|
190
|
+
literal `cat` of the skill followed by one or more literal `cat` reads of
|
|
191
|
+
non-skill files, then one literal `rg` command, with the same separators. For
|
|
192
|
+
example:
|
|
193
|
+
|
|
194
|
+
```sh
|
|
195
|
+
cat .agents/skills/darrow-guide/SKILL.md; cat docs/specs/repository-guide.md; rg -n -i 'offline|\bsla\b|service.level|guarantee|deployment' --glob '*.md' --glob '!docs/research/**' --glob '!**/SKILL.md' .
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
This sequence uses the shared stream and native read check. Quoted separators
|
|
199
|
+
remain part of their literal operand. The ordered file bodies must match the
|
|
200
|
+
retained output, so documentation or search output cannot replace an altered
|
|
201
|
+
or incomplete skill read. Literal `cat` commands may read multiple mounted
|
|
202
|
+
skills and documentation, before or after skills, with or without a terminal
|
|
203
|
+
search. Multiple literal terminal `rg` commands are accepted within the command
|
|
204
|
+
bound. Each verified skill receives its own ordered receipt. Documentation
|
|
205
|
+
must resolve within the workspace or a receipt-bound installed plugin root;
|
|
206
|
+
each file is bounded to 1 MiB. Aliases of mounted skills without a literal
|
|
207
|
+
`SKILL.md` operand remain unsupported.
|
|
208
|
+
The 64-operand bound applies across all reads in the sequence. Shell expansions,
|
|
209
|
+
including unquoted glob and tilde operands, are unsupported in this form.
|
|
210
|
+
|
|
211
|
+
The bounded composed-read grammar also accepts `unset` with literal variable
|
|
212
|
+
names, `pwd` or `pwd -P`, `git rev-parse --show-toplevel` (optionally with
|
|
213
|
+
`-C "$PWD"`), `printenv` with literal variable names, and `rg --files` with
|
|
214
|
+
literal arguments before the reads. Prefix `printenv` requires the reads to
|
|
215
|
+
end the command, so environment output cannot replace missing read bytes.
|
|
216
|
+
Literal `printenv` commands may follow reads without prefix `printenv`.
|
|
217
|
+
The fixed pair `repo=$(git -C "$PWD" rev-parse --show-toplevel)` and
|
|
218
|
+
`cd "$repo" && pwd -P` is supported only with absolute read operands. Other
|
|
219
|
+
assignments, substitutions, directory changes, or control flow remain
|
|
220
|
+
unsupported. Prefix and environment output cannot supply skill frontmatter;
|
|
221
|
+
ambiguous repeated output cannot establish an attributable read.
|
|
222
|
+
|
|
223
|
+
The check also accepts a chain of literal
|
|
224
|
+
`cat` fallbacks with `2>/dev/null` and `||`, ending in `true` followed by a newline
|
|
225
|
+
and one literal `rg` discovery command. A fallback chain must resolve to one
|
|
226
|
+
canonical file across all its read operands; absent alternate targets do not
|
|
227
|
+
invalidate the read. Each fallback `cat` names one literal file. Multiple
|
|
228
|
+
existing targets, including unmounted copies,
|
|
229
|
+
cannot establish an attributable read. The total read operands remain bounded
|
|
230
|
+
at 64. The complete command must succeed and expose the mounted file's entire
|
|
231
|
+
exact body. `cat` accepts literal file operands and the optional `--` delimiter;
|
|
232
|
+
other options cannot prove an unchanged read. Substitutions, pipelines, other shell control flow, and dynamic
|
|
233
|
+
search arguments cannot establish a compound read through this check.
|
|
234
|
+
Unrecognized commands remain partial when their output contains the identifying
|
|
235
|
+
`name: <skill>` line from a mounted or receipt-bound installed-plugin skill.
|
|
236
|
+
This is a host observation; an extension decides what selection means for its
|
|
237
|
+
case.
|
|
238
|
+
The same check accepts skill files below the exact installed plugin roots from
|
|
239
|
+
Codex's installation receipts. It does not infer activation from arbitrary
|
|
240
|
+
files in the private plugin cache.
|
|
241
|
+
The host also retains separate `sevro.codex.initial-skill-reads` and
|
|
242
|
+
`sevro.codex.follow-up-skill-reads` observations. Each applies the same exact
|
|
243
|
+
mounted-skill read check to one completed turn, so an extension can grade read
|
|
244
|
+
order or a missing repeat read without inferring it from the combined list.
|
|
245
|
+
For `app-server`, the verified same-thread feedback boundary separates the
|
|
246
|
+
initial phase from the follow-up phase, including subsequent native goal turns.
|
|
247
|
+
Absent, duplicated, foreign-thread, or failed boundaries do not yield phase
|
|
248
|
+
receipts.
|
|
249
|
+
|
|
250
|
+
It also checks native parent command records for exact mounted skill bodies,
|
|
251
|
+
including sessions with no spawn request. The bounded diagnostic distinguishes
|
|
252
|
+
no read from an incomplete read without claiming skill activation.
|
|
253
|
+
It retains the skill name and native ordinal when verified reads complete a
|
|
254
|
+
whole body. Repeated complete reads produce separate receipts; paged reads
|
|
255
|
+
produce one receipt when their ranges first cover the body. An incomplete
|
|
256
|
+
later reread makes the diagnostic partial. Extensions can compare these
|
|
257
|
+
ordinals with an accepted owner boundary without retaining commands or output.
|
|
258
|
+
Earlier yielded output can complete a read only when its process and unique
|
|
259
|
+
call identity bind it to that actor's native command completion. Completed
|
|
260
|
+
literal command calls use a bounded TypeScript parser; conditional or ambiguous
|
|
261
|
+
code cannot establish that binding. Recovery verifies the exact mounted bytes
|
|
262
|
+
and recomputes completeness for the matching CLI command. Private commands,
|
|
263
|
+
submitted code and recovered skill bodies stay out of public observations.
|
|
264
|
+
For accepted spawns, it also checks up to eight child thread rollouts and
|
|
265
|
+
reports whether each is available, unavailable, ambiguous, or partial, with an
|
|
266
|
+
explicit truncation flag. An available rollout includes bounded diagnostics for
|
|
267
|
+
native child commands: the number of commands and skill read attempts, whether
|
|
268
|
+
the exact mounted `SKILL.md` body was read, and whether the check was complete
|
|
269
|
+
or truncated. A rollout with no read differs from a missing or malformed
|
|
270
|
+
rollout. These diagnostics do not establish skill activation or task completion
|
|
271
|
+
by themselves and retain no child prompt, command, or output.
|
|
168
272
|
Native read diagnostics retain at most 64 `recoverySources` entries. Each
|
|
169
273
|
records its native ordinal, whether the native completion had output, the
|
|
170
274
|
yielded chunk count, and separate `completedCall` and `literalCommandCall`
|
|
171
275
|
flags. These facts distinguish recovery sources without retaining commands,
|
|
172
276
|
submitted code, or skill bodies. The diagnostic's completeness and truncation
|
|
173
277
|
fields still determine whether its read evidence can support grading.
|
|
278
|
+
|
|
279
|
+
</details>
|
package/docs/contracts.md
CHANGED
|
@@ -7,6 +7,7 @@ Read these human contracts and their schemas together:
|
|
|
7
7
|
- [Report v1](report-v1.md): summaries and comparison limitations.
|
|
8
8
|
- [Identity v1](identity-v1.md): versioned comparison dimensions and hashing.
|
|
9
9
|
- [Runtime configuration v1](runtime-v1.md): environment, tools, private state, goals, and hooks.
|
|
10
|
+
- [Run settings v1](run-settings-v1.md): recurring evaluation selections and CLI overrides.
|
|
10
11
|
- [Built-in graders v1](builtin-graders-v1.md): output, shell, Git HEAD, and semantic checks.
|
|
11
12
|
- [Schemas](../schemas/): machine-readable public forms.
|
|
12
13
|
|
|
@@ -15,4 +16,4 @@ Read these human contracts and their schemas together:
|
|
|
15
16
|
[TypeScript quality contract](typescript-quality.md) defines source inventories,
|
|
16
17
|
development checks, and coverage policy.
|
|
17
18
|
[Architecture](architecture.md) explains implementation context;
|
|
18
|
-
[historical validation](evidence.md) records past observations. Return to the [hub](README.md).
|
|
19
|
+
[historical validation](https://github.com/BjRo/sevro/blob/main/docs/evidence.md) records past observations. Return to the [hub](README.md).
|
package/docs/creating-cases.md
CHANGED
|
@@ -4,18 +4,25 @@ Start with a direct case for a prompt, fixture, and built-in success criteria.
|
|
|
4
4
|
Copy [the basic graded case](../examples/basic/graded.json), give it a stable
|
|
5
5
|
ID, and replace the prompt/check. Read [built-in graders](builtin-graders-v1.md)
|
|
6
6
|
for regex, JSON, and bounded schema assertions. No criteria means `not_assessed`.
|
|
7
|
+
For complete coding, repository-skill, runtime, semantic and extension projects,
|
|
8
|
+
follow the [runnable recipes](recipes.md), including their deliberate failures.
|
|
7
9
|
|
|
8
10
|
Run it with the [CLI](running-evaluations.md). Direct cases follow `ResolvedCase`
|
|
9
11
|
in [the engine](../src/engine.ts). Fixtures can provide inline files, generated
|
|
10
12
|
Git history, or a declared clean repository. The [CLI reference](development-cli.md)
|
|
11
13
|
owns required source roots/maps; an arbitrary returned path does not grant access.
|
|
12
14
|
|
|
15
|
+
Selecting `--project-root` identifies the project; it does not copy its contents
|
|
16
|
+
into a participant fixture. Declare the files or repository source the participant
|
|
17
|
+
should receive. The [run defaults reference](development-cli.md#run-defaults)
|
|
18
|
+
explains how project identity, fixtures and CLI path resolution interact.
|
|
19
|
+
|
|
13
20
|
## Evaluate your repository skills
|
|
14
21
|
|
|
15
22
|
Start with one representative task, your actual skill, and observable success
|
|
16
23
|
criteria. This example evaluates a documentation guide's answer with Codex.
|
|
17
24
|
Use [Sevro from `PATH`](installing.md#make-the-command-available).
|
|
18
|
-
Live runs require the [native host prerequisites](native-hosts.md),
|
|
25
|
+
Live runs require the [native host prerequisites](native-hosts.md), supported
|
|
19
26
|
isolation, an authenticated Codex installation, and your chosen model.
|
|
20
27
|
They consume that account's model quota.
|
|
21
28
|
|
|
@@ -109,7 +116,7 @@ prepares skill mounts and interprets complete native host evidence. The
|
|
|
109
116
|
[extension protocol](extension-protocol-v1.md) defines repository and plugin
|
|
110
117
|
invocations; the checkout's [guide evals](guide-evaluation.md) demonstrate the
|
|
111
118
|
approach. Check those capabilities against your exact installed release:
|
|
112
|
-
this checkout
|
|
119
|
+
this checkout can contain [changes beyond its published version](installing.md#published-package-and-checkout).
|
|
113
120
|
|
|
114
121
|
## Reusable project policy
|
|
115
122
|
|
package/docs/development-cli.md
CHANGED
|
@@ -8,14 +8,107 @@ grading, evidence, and extension lifecycle.
|
|
|
8
8
|
[versioned report contract](report-v1.md). It emits Markdown by default or
|
|
9
9
|
`sevro.report.v1` with `--json`.
|
|
10
10
|
|
|
11
|
+
`sevro prune` [removes older retained results](reading-results.md#prune-retained-results)
|
|
12
|
+
and maintains the latest report index. Bare pruning keeps the newest ten results;
|
|
13
|
+
`--keep`, `--older-than`, and `--latest` select explicit retention policies.
|
|
14
|
+
|
|
11
15
|
Examples assume [Sevro and Bun are on `PATH`](installing.md#make-the-command-available).
|
|
12
16
|
For a contributor checkout, use `bun src/cli.ts` in place of `sevro`.
|
|
13
17
|
|
|
18
|
+
Use `sevro --help`, `sevro run --help`, `sevro report --help`, or
|
|
19
|
+
`sevro prune --help` for examples,
|
|
20
|
+
required options, and defaults without preparing a run. `sevro --version` prints
|
|
21
|
+
the installed package version. Invocation and configuration diagnostics go to
|
|
22
|
+
stderr in both output modes; `--json` keeps one `sevro.cli-result.v1` document
|
|
23
|
+
on stdout. Invalid case diagnostics name the input file and offending field.
|
|
24
|
+
|
|
25
|
+
<a id="run-defaults-in-this-checkout"></a>
|
|
26
|
+
|
|
27
|
+
## Run defaults
|
|
28
|
+
|
|
29
|
+
`sevro demo` owns a deterministic case, fixture and adapter. It needs no model
|
|
30
|
+
credentials and immediately prints an assessed verdict plus an evidence path in
|
|
31
|
+
`.sevro/results` beneath the invoking directory. Its temporary project and
|
|
32
|
+
configuration are independent of the caller's files and runtime policy.
|
|
33
|
+
|
|
34
|
+
An ordinary run needs a case source and candidate route. For example:
|
|
35
|
+
|
|
36
|
+
```sh
|
|
37
|
+
sevro run --case-file ./case.json --adapter-module ./host-adapter.ts
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
| Setting | Default |
|
|
41
|
+
| ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
|
|
42
|
+
| Condition | `passive` |
|
|
43
|
+
| Trial count | `1` |
|
|
44
|
+
| Pass threshold | `1`: all assessed trials must pass; any unassessed trial prevents a pass |
|
|
45
|
+
| Parallel trial limit (`--jobs`) | `3` |
|
|
46
|
+
| Project root | Invoking current directory |
|
|
47
|
+
| Results root | `<project-root>/.sevro/results` |
|
|
48
|
+
| Configuration root | Project root |
|
|
49
|
+
| Run-state root | Results root |
|
|
50
|
+
| Runtime policy | Discover `sevro.json` at project root; none when absent |
|
|
51
|
+
| Native binary | Resolve only the explicitly selected `codex` or `claude` from `PATH`; `--codex-bin` / `--claude-bin` override it |
|
|
52
|
+
| Native execution timeout | `600000` ms (10 minutes); Codex accepts `--codex-timeout-ms` |
|
|
53
|
+
| Codex entrypoint | `exec`; a native-goal runtime policy selects `app-server` |
|
|
54
|
+
| Codex agent concurrency | `agents.max_concurrent_threads_per_session` from `.codex/config.toml` at configuration root, otherwise the host default |
|
|
55
|
+
| Shell-check expected exit | `0` unless the check declares `expectedExitCode` |
|
|
56
|
+
| Shell-check timeout | `30000` ms unless the check declares `timeoutMs` (maximum `120000`) |
|
|
57
|
+
| Shell isolation, dry preparation, host diagnostic retention | Off |
|
|
58
|
+
|
|
59
|
+
Every run file/directory option accepts a relative path based on the invoking
|
|
60
|
+
current directory, including adapter modules, extension source files, native
|
|
61
|
+
binary overrides and protected roots. Sevro resolves them to canonical absolute
|
|
62
|
+
paths before constructing protection lists; missing output-directory suffixes
|
|
63
|
+
resolve through their nearest existing parent. A different `--project-root`
|
|
64
|
+
does not change that base. The default results directory is relative to the
|
|
65
|
+
selected project root. Paths inside runtime policy files retain their
|
|
66
|
+
[runtime-specific resolution rules](runtime-v1.md).
|
|
67
|
+
Extension command JSON still requires an absolute executable argv; arbitrary
|
|
68
|
+
argv entries are not treated as CLI path options.
|
|
69
|
+
|
|
70
|
+
Sevro prints a whitelist of effective run settings and routes on stderr before
|
|
71
|
+
candidate execution, including resolved storage paths, native executables,
|
|
72
|
+
timeouts and concurrency. JSON stdout remains one result document. The preview
|
|
73
|
+
does not print credential bytes, runtime environment values or native diagnostics.
|
|
74
|
+
The resolved executable is retained as `sevro.host.executable` in each used native
|
|
75
|
+
role's redacted host configuration; selecting a different path changes that
|
|
76
|
+
configuration's identity.
|
|
77
|
+
|
|
78
|
+
Use `sevro init` with `--template response`, `coding` or
|
|
79
|
+
`repository-skill` and `--directory <new-path>`. It refuses existing destinations
|
|
80
|
+
and writes runnable assertions, a manifest and template instructions. Follow the
|
|
81
|
+
[demo-to-iteration workflow](evaluation-workflow.md) for preparation, execution
|
|
82
|
+
and negative controls. Repository-skill requires explicit native model, effort
|
|
83
|
+
and authentication; dry preparation does not establish dispatch.
|
|
84
|
+
|
|
85
|
+
Actual preparation, candidate, grading and evidence-retention stage events use
|
|
86
|
+
stderr. Human completion includes each trial's separate states, failed-check
|
|
87
|
+
reasons, measured candidate time, known/unknown usage and retained paths. JSON
|
|
88
|
+
stdout remains one result. Each retained CLI run writes `result.json` beside run
|
|
89
|
+
evidence and `<results-root>/latest.json`. `sevro report --latest` reads the current
|
|
90
|
+
directory's default results root; add `--results-root <path>` for another root.
|
|
91
|
+
Dry and failed runs can be latest.
|
|
92
|
+
|
|
93
|
+
Project root identifies the evaluated project and extension discovery. It does
|
|
94
|
+
not populate the participant workspace: declare inline files, generated history
|
|
95
|
+
or a repository source in the case's fixture. See [case authoring](creating-cases.md).
|
|
96
|
+
Keep `.sevro/` out of Git. Results and run-state paths are excluded from project
|
|
97
|
+
snapshots and untracked Git identity; tracked source changes still count.
|
|
98
|
+
|
|
99
|
+
## Explicit run settings
|
|
100
|
+
|
|
101
|
+
To repeat these selections, use the versioned [saved run settings](run-settings-v1.md)
|
|
102
|
+
with `--run-manifest-file ./evaluation.json`. Built-in defaults are replaced by
|
|
103
|
+
saved settings, then by explicit CLI options. `sevro.json` keeps its separate
|
|
104
|
+
runtime scope. Saved file paths use the manifest's directory; explicit CLI
|
|
105
|
+
paths use the invoking directory.
|
|
106
|
+
|
|
14
107
|
An installed package records its name, version, and a digest of its packaged
|
|
15
108
|
runtime and public contract files without reading runner Git metadata. The CLI
|
|
16
109
|
derives the project digest from its revision and dirty patch, or from a bounded
|
|
17
110
|
content snapshot when the project has no Git revision. Result and run-state
|
|
18
|
-
directories are excluded from that snapshot. When running this source checkout
|
|
111
|
+
directories are excluded from that snapshot and untracked Git identity. When running this source checkout
|
|
19
112
|
for coordinated development, pass `--runner-checkout-root` with the absolute
|
|
20
113
|
path to this checkout. Sevro verifies that it is the code actually running and
|
|
21
114
|
records its revision and dirty-patch digest instead of package provenance.
|
|
@@ -60,6 +153,53 @@ Codex route, including semantic and advisory roles, and to both `exec` and
|
|
|
60
153
|
`app-server` entrypoints. For a 20-minute app-server evaluation, add
|
|
61
154
|
`--codex-entrypoint app-server --codex-timeout-ms 1200000` to the Codex command
|
|
62
155
|
above. The option requires a Codex host route; invalid values fail before a run.
|
|
156
|
+
For `app-server`, this is the only deadline for the whole session, including
|
|
157
|
+
startup requests such as `thread/start`. If it expires while a request is
|
|
158
|
+
unanswered, the failure names that request, for example
|
|
159
|
+
`App-server evaluation time bound reached awaiting thread/start`.
|
|
160
|
+
|
|
161
|
+
### Retain native host diagnostics
|
|
162
|
+
|
|
163
|
+
Add `--retain-host-diagnostics` to a failing invocation to retain private
|
|
164
|
+
diagnostics from bundled Codex and Claude hosts. The switch defaults to off,
|
|
165
|
+
applies to every selected native role, and is independent of runtime
|
|
166
|
+
`nativeTranscripts`. It does not enable transcript access or change the
|
|
167
|
+
candidate's permissions.
|
|
168
|
+
|
|
169
|
+
For example, add the switch to the Codex command above:
|
|
170
|
+
|
|
171
|
+
```sh
|
|
172
|
+
sevro run --json \
|
|
173
|
+
--case-file /absolute/path/case.json \
|
|
174
|
+
--host codex --codex-bin /absolute/path/codex \
|
|
175
|
+
--codex-auth-file /absolute/path/auth.json \
|
|
176
|
+
--model <model> --effort medium \
|
|
177
|
+
--project-root /absolute/path/project \
|
|
178
|
+
--results-root /absolute/path/results \
|
|
179
|
+
--condition passive --trials 1 --threshold 1 \
|
|
180
|
+
--retain-host-diagnostics
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Failed preparation or execution retains `sevro.host.diagnostics`, including
|
|
184
|
+
when no native session or final response exists. Its private JSON records the
|
|
185
|
+
failing stage, original error/cause chain, and recent subprocess receipts.
|
|
186
|
+
Receipts contain actual exit code or signal, monotonic duration, bounded
|
|
187
|
+
stdout/stderr prefixes, and truncation markers. App-server protocol failure is
|
|
188
|
+
separate from its process exit code.
|
|
189
|
+
|
|
190
|
+
The CLI's failure diagnostic names the artifact's file URL when it fits the
|
|
191
|
+
diagnostic length limit. The result's `evidencePath` and each trial's
|
|
192
|
+
`artifactPath` always lead to retained artifact references; semantic and
|
|
193
|
+
advisory artifacts carry their existing role prefixes. Files have private
|
|
194
|
+
permissions and are persisted before native state cleanup. The
|
|
195
|
+
[results contract](results-v1.md#native-host-diagnostics) defines the format,
|
|
196
|
+
bounds, redaction, and failure semantics.
|
|
197
|
+
|
|
198
|
+
Enabled native roles record `sevro.host.retain-diagnostics: true` in redacted
|
|
199
|
+
host configuration. This changes configuration identity, so a diagnostic rerun
|
|
200
|
+
is not an exact-repeat comparison with an invocation that omitted the switch.
|
|
201
|
+
Injected adapters own their diagnostic behavior; the CLI switch configures the
|
|
202
|
+
bundled native routes.
|
|
63
203
|
|
|
64
204
|
### Trial concurrency
|
|
65
205
|
|
|
@@ -130,22 +270,45 @@ sevro run --json \
|
|
|
130
270
|
The route reuses existing Claude authentication. An explicit
|
|
131
271
|
`--claude-credential-file` takes precedence over inherited credentials. Otherwise,
|
|
132
272
|
it forwards `ANTHROPIC_API_KEY` and `CLAUDE_CODE_OAUTH_TOKEN` when present, leaving
|
|
133
|
-
their relative precedence to Claude Code. With neither variable present, it
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
273
|
+
their relative precedence to Claude Code. With neither variable present, it uses
|
|
274
|
+
the saved login where Claude Code keeps it for `CLAUDE_CONFIG_DIR` or `~/.claude`.
|
|
275
|
+
On macOS that is the configuration's Keychain item, then `.credentials.json` in
|
|
276
|
+
that directory when the item is absent or unreadable. On Linux it is that file.
|
|
277
|
+
An unreadable, empty, oversized or non-login selected file fails rather than
|
|
278
|
+
falling back to another login. Pass `--claude-credential-file` with an absolute
|
|
279
|
+
path to select a separate saved login; Sevro refreshes and updates only that file.
|
|
280
|
+
|
|
281
|
+
A saved login never enters per-turn state. Each turn receives only its access
|
|
282
|
+
token as `CLAUDE_CODE_OAUTH_TOKEN`, so Claude Code in the trial cannot refresh or
|
|
283
|
+
rotate the login. The parent refreshes when the remaining token lifetime cannot
|
|
284
|
+
cover the execution budget: the Claude timeout for each turn, including a
|
|
285
|
+
declared follow-up, plus five minutes. It holds Claude Code's own
|
|
286
|
+
`.oauth_refresh.lock` in the login's configuration directory and reads the login
|
|
287
|
+
again. It then runs `claude auth login` with Claude Code's documented
|
|
288
|
+
`CLAUDE_CODE_OAUTH_REFRESH_TOKEN` in a disposable configuration. Sevro writes the
|
|
289
|
+
rotated tokens back to the original Keychain item or file, preserving other fields.
|
|
290
|
+
It reads that store again to verify them before a turn starts, and leaves a login
|
|
291
|
+
that changed during the refresh untouched. Refresh requires Claude Code 2.1.284 or
|
|
292
|
+
later; an older release fails before its refresh token is used.
|
|
293
|
+
|
|
294
|
+
If the store cannot be updated, the run fails and Sevro keeps the rotated tokens in
|
|
295
|
+
its private native-state directory. The next run restores them once the store is
|
|
296
|
+
writable. If Claude Code cannot refresh the login, run `claude` and `/login`.
|
|
297
|
+
A token that expires or is revoked during a turn fails that turn's
|
|
298
|
+
authentication; the trial never refreshes it. This lifecycle is covered with a
|
|
299
|
+
synthetic Claude CLI and token ledger, not against Anthropic's live endpoint.
|
|
300
|
+
|
|
301
|
+
Only the access token enters private per-turn state; user rules, settings and
|
|
302
|
+
hooks remain excluded. The host denies both authentication variables to sandboxed
|
|
139
303
|
commands and enables Claude Code's subprocess credential scrubbing. Credential
|
|
140
|
-
values are excluded from retained evidence and configuration digests.
|
|
141
|
-
`--claude-credential-file` with an absolute path to select a separate saved login.
|
|
304
|
+
values are excluded from retained evidence and configuration digests.
|
|
142
305
|
It accepts declared Claude
|
|
143
306
|
plugin directories and explicit skill invocations from extension preparation.
|
|
144
307
|
It runs candidate tools under Claude Code's native sandbox with private,
|
|
145
308
|
source, and result paths denied. The route disables hooks by default and does not expose
|
|
146
309
|
the Write tool. It currently supports passive candidate turns only. Use
|
|
147
310
|
`--protected-root` to exclude additional private paths from the candidate's
|
|
148
|
-
filesystem access. Configure shared host tools, private caches, goals, and selected
|
|
311
|
+
filesystem access. Configure shared host tools, private or reusable caches, goals, and selected
|
|
149
312
|
plugin hooks with [`sevro.json` or `--runtime-config-file`](runtime-v1.md).
|
|
150
313
|
The same policy reaches isolated checks and native grading hosts.
|
|
151
314
|
|
|
@@ -174,9 +337,10 @@ Without that option, the host does not advertise
|
|
|
174
337
|
`sevro.claude.repository-invocation` and refuses explicit repository dispatch
|
|
175
338
|
before launching Claude. This avoids recording an unknown command as a usable
|
|
176
339
|
repository-skill route.
|
|
177
|
-
The host
|
|
178
|
-
|
|
179
|
-
|
|
340
|
+
The host collects successful `Skill` calls through the existing structured
|
|
341
|
+
stream as [skill activation evidence](native-hosts.md#skill-activation-evidence).
|
|
342
|
+
It uses the same collector for parent and nested actors. Missing or unmatched
|
|
343
|
+
results remain partial; separate transcript-based skill detectors are retired.
|
|
180
344
|
|
|
181
345
|
A case's `followUpPrompt` starts a UUID-bound session and resumes that same
|
|
182
346
|
session after a complete successful initial result. Both results must name
|
|
@@ -195,7 +359,8 @@ For cases with `sevro.semantic` checks, also pass
|
|
|
195
359
|
explicit second `HostAdapter` for grading. Alternatively, select the bundled
|
|
196
360
|
Codex route with `--semantic-host codex --semantic-model <model>
|
|
197
361
|
--semantic-effort <effort>`. That route also requires `--codex-bin` and
|
|
198
|
-
`--codex-auth-file`, shared with a Codex candidate route when present. The
|
|
362
|
+
`--codex-auth-file`, shared with a Codex candidate route when present. The binary
|
|
363
|
+
defaults to the explicitly selected `codex` on `PATH`. The two
|
|
199
364
|
semantic route options are exclusive. The candidate and semantic routes are
|
|
200
365
|
recorded separately in evidence and evaluation identity. The semantic adapter
|
|
201
366
|
runs after a complete candidate response in its own empty workspace; missing
|
|
@@ -249,7 +414,7 @@ verdict and rejects unsolicited recommendations.
|
|
|
249
414
|
|
|
250
415
|
If the extension needs configuration, supply both
|
|
251
416
|
`--extension-configuration-file` and
|
|
252
|
-
`--extension-redacted-configuration-file` as
|
|
417
|
+
`--extension-redacted-configuration-file` as paths to JSON objects.
|
|
253
418
|
The latter replaces secret values for the retained configuration digest. Keep
|
|
254
419
|
secrets out of the command argv and the redacted file.
|
|
255
420
|
|
|
@@ -279,7 +444,13 @@ isolated shell checks receive `.git/fixture-bin` on `PATH`. Host adapters
|
|
|
279
444
|
receive `fixtureBinDir` and must add it to their native tool environment; the
|
|
280
445
|
bundled Codex adapter also preserves it across login shells. A negotiated
|
|
281
446
|
fixture setup command may then prepare the clone before the host runs.
|
|
282
|
-
Repository
|
|
447
|
+
Repository fixtures preserve committed `.gitmodules` files and submodule gitlink
|
|
448
|
+
revisions. Trial clones leave submodules uninitialized and do not fetch their
|
|
449
|
+
contents, even when the source has initialized submodules. A fixture that needs
|
|
450
|
+
those contents must initialize them during its negotiated setup. Modified or
|
|
451
|
+
untracked files and revision changes in initialized source submodules are
|
|
452
|
+
refused, including when Git's submodule ignore settings hide them. Preparation
|
|
453
|
+
artifacts targeting `.git/` are refused.
|
|
283
454
|
|
|
284
455
|
A direct case or extension can declare a generated Git fixture:
|
|
285
456
|
|
|
@@ -371,6 +542,3 @@ Claude also advertises `sevro.host.native-goal`. Its observer binds one persiste
|
|
|
371
542
|
transcript to the original successful native session and retains goal status
|
|
372
543
|
and objective length. Missing, ambiguous, malformed or oversized evidence is
|
|
373
544
|
unavailable; an unavailable observation cannot prove goal absence.
|
|
374
|
-
|
|
375
|
-
These additions require the `0.1.0-rc.2` candidate. The published `rc.1` lacks
|
|
376
|
-
the app-server selector and native goal observations.
|
|
@@ -14,6 +14,12 @@ Local checks need no network. Run `bun run test:docs-examples` for the exact
|
|
|
14
14
|
marked tutorial commands in fresh consumer/contributor directories, including
|
|
15
15
|
expected verdicts and saved evidence. Candidate and released-package runs are
|
|
16
16
|
reported separately. These commands create and clean temporary directories.
|
|
17
|
+
The [recipe verifier](../scripts/documentation-recipes.ts) runs the new packaged
|
|
18
|
+
projects separately from the current published version. It executes actual
|
|
19
|
+
isolated tool/check positive and negative controls and both native hosts' dry
|
|
20
|
+
preparation; authenticated model, plugin-hook and goal behavior remain
|
|
21
|
+
unexecuted by that check. Its [prerequisites](recipes.md#prepare-a-recipe-project)
|
|
22
|
+
are mandatory, including UV and mise's declared Node installation.
|
|
17
23
|
|
|
18
24
|
`package.json.version` is the authoritative current version. `bun run docs:sync`
|
|
19
25
|
updates only the marked [Current release](installing.md#current-release) section
|
|
@@ -25,6 +31,10 @@ stale output. Run synchronization after a version bump and include the resulting
|
|
|
25
31
|
documentation change. Link installation and update instructions to this section.
|
|
26
32
|
Keep historical versions, licensing transitions, and minimum supported versions
|
|
27
33
|
fixed and explain their purpose beside each reference.
|
|
34
|
+
Link to the current-release section instead of repeating the current Sevro
|
|
35
|
+
version elsewhere. Describe features for the latest version, using the installed
|
|
36
|
+
`sevro` command in user workflows. Keep source-checkout instructions in contributor
|
|
37
|
+
guidance and omit notes about feature unavailability in older releases.
|
|
28
38
|
|
|
29
39
|
## External links
|
|
30
40
|
|
|
@@ -38,8 +48,8 @@ make a network job green. External success does not establish a claim's truth.
|
|
|
38
48
|
|
|
39
49
|
- Can a new user reach installation, first success, results, troubleshooting,
|
|
40
50
|
architecture, and contributing without the guide?
|
|
41
|
-
- Are supported environments, credentials, side effects, and
|
|
42
|
-
|
|
51
|
+
- Are supported environments, credentials, side effects, and prerequisites
|
|
52
|
+
explicit beside the relevant commands?
|
|
43
53
|
- Do descriptive links, meaningful headings, source order, readable tables,
|
|
44
54
|
image alternatives, and words rather than color support accessibility?
|
|
45
55
|
- Are current contracts, accepted choices, research, and past evidence distinct?
|