@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/native-hosts.md
CHANGED
|
@@ -6,30 +6,219 @@ Claude Code), a supported native CLI, and model
|
|
|
6
6
|
authentication. Complete commands/rules live in the [CLI reference](development-cli.md)
|
|
7
7
|
and [Codex host reference](codex-host.md).
|
|
8
8
|
|
|
9
|
+
## Validated platform scope
|
|
10
|
+
|
|
11
|
+
The full source quality gate has passed on macOS arm64 and Ubuntu 24.04 x64.
|
|
12
|
+
Ubuntu evidence includes [the successful source CI run for `cd7542bf`](https://github.com/BjRo/sevro/actions/runs/38692971517).
|
|
13
|
+
That run exercises deterministic native-host protocols and real filesystem,
|
|
14
|
+
process, network and shell isolation with the pinned prerequisites in
|
|
15
|
+
[the quality contract](typescript-quality.md#environment-and-ci). It does not
|
|
16
|
+
establish authenticated model success for every host/model combination.
|
|
17
|
+
This is prior source evidence; changed candidates still need their own green CI.
|
|
18
|
+
Other Linux distributions and Windows are unverified.
|
|
19
|
+
|
|
20
|
+
On Ubuntu, install `bubblewrap`, `ripgrep`, and `socat`. Unprivileged user
|
|
21
|
+
namespaces must work; Ubuntu's AppArmor policy may need a `bwrap` profile.
|
|
22
|
+
[CI's setup script](../scripts/setup-ci-linux.sh) supplies and probes the
|
|
23
|
+
supported runner setup. Use it as an explicit development setup step where
|
|
24
|
+
appropriate; do not assume all Linux hosts have that configuration.
|
|
25
|
+
|
|
9
26
|
## Codex
|
|
10
27
|
|
|
11
28
|
Select `--host codex`, absolute `--codex-bin` and `--codex-auth-file` paths,
|
|
12
29
|
and the desired model/effort. Sevro prepares an isolated host environment.
|
|
13
30
|
Keep authentication private and outside candidate/evaluator-visible inputs.
|
|
14
31
|
The default entrypoint is `exec`; app-server selection and native-goal
|
|
15
|
-
observations
|
|
32
|
+
observations are also available. Unsupported instrumentation is refused.
|
|
16
33
|
|
|
17
34
|
## Claude Code
|
|
18
35
|
|
|
19
36
|
Select `--host claude`, an absolute `--claude-bin`, and the desired model/effort.
|
|
20
37
|
The route supports passive candidate turns. Explicit `--claude-credential-file`
|
|
21
38
|
takes precedence. Otherwise this checkout forwards inherited API/OAuth
|
|
22
|
-
credentials, then
|
|
23
|
-
|
|
24
|
-
|
|
39
|
+
credentials, then uses the saved login from the macOS Keychain or saved credential
|
|
40
|
+
file. Trials receive only an access token; the parent refreshes a saved login and
|
|
41
|
+
writes it back, so evaluations leave your normal Claude login working. See the
|
|
42
|
+
[CLI reference](development-cli.md) for refresh and failure behavior.
|
|
25
43
|
|
|
26
44
|
Repository skill mounts under `.claude/skills` require explicit
|
|
27
45
|
`--claude-project-settings`; otherwise repository dispatch is refused before
|
|
28
46
|
launch. The bundled route disables hooks by default and omits candidate Write
|
|
29
47
|
access. [Runtime configuration](runtime-v1.md) enables native goals and selected
|
|
30
|
-
plugin hooks and reuses declared host tools with private caches.
|
|
31
|
-
|
|
32
|
-
|
|
48
|
+
plugin hooks and reuses declared host tools with private or explicitly shared caches.
|
|
49
|
+
The CLI reference covers credential scrubbing and follow-ups.
|
|
50
|
+
|
|
51
|
+
## Skill activation evidence
|
|
52
|
+
|
|
53
|
+
Both bundled adapters advertise `sevro.host.skill-activations`. Its observation
|
|
54
|
+
retains qualified `observedSkills`, bounded call identities, and explicit
|
|
55
|
+
`complete` or `partial` collection status. This is the sole activation collector
|
|
56
|
+
for each host. It replaces Codex's command-pattern and native output-recovery
|
|
57
|
+
detectors and Claude's separate nested-skill collector. Consumers must require
|
|
58
|
+
this observation; the retired observation IDs are no longer emitted.
|
|
59
|
+
|
|
60
|
+
Codex installs passive runner-owned hooks in its private home for each request.
|
|
61
|
+
The `tool_result_body_match` method compares returned tool content against a
|
|
62
|
+
snapshot of prepared repository, plugin and private user skill bodies. It does
|
|
63
|
+
not parse shell commands, so variables, pipelines, Python and nested Code Mode
|
|
64
|
+
calls use the same collector. Pre/post call pairs and session start/stop markers
|
|
65
|
+
establish collection health. Unselected plugin handlers are removed before
|
|
66
|
+
hooks are enabled, and fixture-local Codex configuration remains untrusted.
|
|
67
|
+
No global hook installation or root privileges are required.
|
|
68
|
+
|
|
69
|
+
This Codex receipt proves exact body exposure to the tool caller. Code Mode can
|
|
70
|
+
discard that output before returning to the model. An identical ordinary
|
|
71
|
+
document also matches; the receipt does not prove its source file was opened.
|
|
72
|
+
Identical bodies registered under different names are reported as
|
|
73
|
+
`ambiguousSkills`, with partial evidence. Exact pages can establish a body match
|
|
74
|
+
across tool results from the same session and turn. Coverage is tied to the
|
|
75
|
+
prepared body digest; overlapping or repeated pages cannot fill a missing range.
|
|
76
|
+
The call that completes coverage receives the activation receipt. Fragments
|
|
77
|
+
from different sessions or turns never combine.
|
|
78
|
+
|
|
79
|
+
Page matching uses complete nonblank lines as anchors and exact fragments of
|
|
80
|
+
at least 32 string code units. Fragments with multiple possible positions in a
|
|
81
|
+
body cannot establish coverage. Recognizable unfinished fragments appear in
|
|
82
|
+
`partialSkills` and keep the observation partial; a later complete match resolves
|
|
83
|
+
them. Within each tool result, text covered by unambiguous complete-body matches
|
|
84
|
+
does not also imply partial reads of skills sharing that text. Fragments returned
|
|
85
|
+
outside those complete-body spans or in other tool results remain independent
|
|
86
|
+
partial-read evidence. Comparison and anchor budgets also fail closed. Private receipts retain
|
|
87
|
+
body offsets rather than tool text; the public observation omits those offsets.
|
|
88
|
+
Shorter, transformed or unanchored fragments remain outside this matching scope.
|
|
89
|
+
Newly created or changed skill bodies are outside the prepared snapshot. A
|
|
90
|
+
complete empty observation is limited to this scope and the supported local
|
|
91
|
+
tool hook paths.
|
|
92
|
+
|
|
93
|
+
Codex separates per-skill exposure from collection health in the same
|
|
94
|
+
observation. `skillExposures` contains one `{ skill, status }` entry per prepared
|
|
95
|
+
catalog entry, in catalog order, with qualified skill names:
|
|
96
|
+
|
|
97
|
+
| Status | Meaning |
|
|
98
|
+
| ----------- | ----------------------------------------------------------------------- |
|
|
99
|
+
| `full` | The complete prepared body was exposed, in one result or exact pages. |
|
|
100
|
+
| `partial` | Recognizable fragments were exposed without establishing the full body. |
|
|
101
|
+
| `none` | No exposure was detected within a complete collection's matching scope. |
|
|
102
|
+
| `unknown` | No exposure was detected, but collection gaps prevent an absence claim. |
|
|
103
|
+
| `ambiguous` | Body exposure could not distinguish identically registered bodies. |
|
|
104
|
+
|
|
105
|
+
`collectionStatus` is `complete`, `partial`, or `unavailable`. No parsed hook
|
|
106
|
+
receipts means `unavailable`; otherwise collection gaps mean `partial`.
|
|
107
|
+
Recognized partial bodies and ambiguous identities alone do not indicate a
|
|
108
|
+
collection failure. Their existing `incompleteReasons` still keep the aggregate
|
|
109
|
+
activation observation partial for compatibility. Other reason codes, including
|
|
110
|
+
truncated call diagnostics, keep collection partial. Older observations without
|
|
111
|
+
these new fields have unknown exposure and collection status; do not infer them
|
|
112
|
+
from an empty `observedSkills` list.
|
|
113
|
+
|
|
114
|
+
Exposure statuses use all parsed receipts before the diagnostic `calls` list is
|
|
115
|
+
bounded. A proven `full` or `partial` exposure survives collection gaps, including
|
|
116
|
+
an earlier pending call, missing lifecycle hooks or an invalid receipt tail.
|
|
117
|
+
Full exposure takes precedence over fragments; ambiguous identities cannot
|
|
118
|
+
establish exposure of a particular named skill. `none` does not establish that
|
|
119
|
+
the skill was never used outside the prepared catalog and matching scope.
|
|
120
|
+
Recognizable fragments may be shared by several skill bodies. These statuses
|
|
121
|
+
describe content exposure to a tool caller, not instruction compliance, model
|
|
122
|
+
visibility or selection order.
|
|
123
|
+
|
|
124
|
+
The Codex adapter also advertises `sevro.host.skill-exposure-claims`. When at
|
|
125
|
+
least one skill has `full` or `partial` exposure, it emits that observation with
|
|
126
|
+
`completeness: complete`, `method: tool_result_body_match`,
|
|
127
|
+
`scope: positive_exposure`, the original `collectionStatus`, and `skillExposures`
|
|
128
|
+
containing only those positive entries. It is absent when no unambiguous
|
|
129
|
+
positive exposure is available. Extensions can require this evidence for a
|
|
130
|
+
specific positive assertion: accept only `full` for complete body exposure,
|
|
131
|
+
or explicitly accept `partial` when recognizable exposure suffices. A `partial`
|
|
132
|
+
entry is not a full activation. This receipt cannot establish absence, first
|
|
133
|
+
selection, a complete sequence or successful execution; collection remains
|
|
134
|
+
independently qualified. Existing activation and primary-selection requirements
|
|
135
|
+
are unchanged. Claude's native `Skill` seam does not emit body-exposure statuses
|
|
136
|
+
or these positive body-exposure claims.
|
|
137
|
+
|
|
138
|
+
Codex observations include `incompleteReasons`: an empty array for a complete
|
|
139
|
+
aggregate activation observation, or all applicable reason codes for a partial
|
|
140
|
+
aggregate observation. The separate `collectionStatus` isolates collection
|
|
141
|
+
health from partial bodies and body ambiguity. Older
|
|
142
|
+
observations without this field have unknown reasons; their missing details
|
|
143
|
+
cannot be reconstructed from balanced native call/return counts.
|
|
144
|
+
|
|
145
|
+
| Reason | Meaning |
|
|
146
|
+
| ------------------------------------------------ | -------------------------------------------------------------------------------------------------- |
|
|
147
|
+
| `host_incomplete` | Host execution did not complete. |
|
|
148
|
+
| `catalog_incomplete` | The prepared catalog could not be collected completely. |
|
|
149
|
+
| `receipts_unavailable` | The receipt file is missing or unreadable. |
|
|
150
|
+
| `invalid_receipts` | A malformed receipt stopped processing; earlier valid receipts remain available. |
|
|
151
|
+
| `receipt_limit` | The receipt file exceeds the collection byte limit. |
|
|
152
|
+
| `observer_failure` | The hook recorded a failure or writer limit, including input, nesting or matching-budget failures. |
|
|
153
|
+
| `session_identity_missing` | No root session identity was available. |
|
|
154
|
+
| `session_start_missing` / `session_stop_missing` | The root session lacks the corresponding lifecycle hook. |
|
|
155
|
+
| `pending_tool_calls` | Pre-tool hooks remain without matching post-tool hooks. |
|
|
156
|
+
| `unmatched_post_tool_use` | Post-tool hooks were received without pending pre-tool hooks. |
|
|
157
|
+
| `duplicate_tool_calls` | A pre-tool identity was already pending or finished. |
|
|
158
|
+
| `partial_hook_events` | A hook receipt is partial independently of body ambiguity. |
|
|
159
|
+
| `ambiguous_skill_bodies` | Complete body exposure could not distinguish skill names. |
|
|
160
|
+
| `partial_skill_bodies` | Recognized fragments remain without complete body exposure. |
|
|
161
|
+
| `calls_truncated` | Relevant call evidence exceeded its public count or byte budget. |
|
|
162
|
+
|
|
163
|
+
The `collection` summary reports `eventCount`, `preToolUseCount`,
|
|
164
|
+
`postToolUseCount`, `pendingToolCallCount`, `unmatchedPostToolUseCount`,
|
|
165
|
+
`duplicateToolCallCount` and `partialEventCount`, plus `sessionIdentified`,
|
|
166
|
+
`sessionStarted` and `sessionStopped` for the root session. Counts cover all
|
|
167
|
+
successfully parsed receipts, including receipts omitted from `calls`; an
|
|
168
|
+
unreadable or invalid tail remains unknown. Tool pairing spans the observed
|
|
169
|
+
sessions and uses session and tool-use identities. A later balanced pair is
|
|
170
|
+
still counted after an earlier anomaly.
|
|
171
|
+
|
|
172
|
+
`calls` is a bounded selection of complete matches, fragment-only matches,
|
|
173
|
+
ambiguous or partial receipts, and receipts associated with pending, orphaned
|
|
174
|
+
or duplicate tool identities. Each entry's `fragmentSkills` names recognizable
|
|
175
|
+
fragments without exposing their body offsets or digests. A fragment entry can
|
|
176
|
+
remain in `calls` after later complete exposure resolves `partialSkills`.
|
|
177
|
+
Neither `partial: false` on an individual receipt nor an empty `partialSkills`
|
|
178
|
+
array proves aggregate completeness. `truncated` describes this selected call
|
|
179
|
+
list, which is never the complete observer event ledger. A pending tool hook
|
|
180
|
+
can follow a rejected launch or a missing hook; it does not establish either
|
|
181
|
+
cause, and a tool error with a balanced hook pair does not itself imply an
|
|
182
|
+
observer gap. These diagnostics preserve unknown activation verdicts and do
|
|
183
|
+
not recover activation from native transcripts.
|
|
184
|
+
|
|
185
|
+
Codex also reports `primarySkill` and `primarySkillCompleteness` separately
|
|
186
|
+
from whole-collection completeness. A complete collection establishes its first
|
|
187
|
+
observed skill when the first matching receipt credits exactly one skill, or
|
|
188
|
+
`null` when none was observed. Multiple bodies credited by the first receipt
|
|
189
|
+
leave primary selection unknown even with complete collection; their catalog
|
|
190
|
+
order does not prove selection order. A partial collection can still
|
|
191
|
+
establish the primary skill when its only gap is pending tool calls, exactly one
|
|
192
|
+
skill was credited by the first matching receipt, and every call started through
|
|
193
|
+
that receipt has a matching post hook. A later pending call cannot change that
|
|
194
|
+
established first selection. An earlier or overlapping pending call leaves the
|
|
195
|
+
primary unknown (`null` with `primarySkillCompleteness: partial`). Other
|
|
196
|
+
collection gaps remain conservative. Consumers may use the established primary
|
|
197
|
+
for first-selection assertions while retaining the partial collection status;
|
|
198
|
+
this claim does not establish exclusions or a complete supporting sequence.
|
|
199
|
+
When a partial collection establishes the primary, the same collector emits
|
|
200
|
+
`sevro.host.skill-activation-claims` as complete evidence with scope
|
|
201
|
+
`primary_and_positive_presence`, the qualified `primarySkill`, and `presentSkills`.
|
|
202
|
+
It retains `collectionCompleteness: partial`. Consumers cite this receipt for
|
|
203
|
+
those specific claims, preserving the protocol's requirement that passing
|
|
204
|
+
results cite complete evidence. It cannot establish an exclusion or an
|
|
205
|
+
unobserved supporting read and is absent when the primary is unknown.
|
|
206
|
+
|
|
207
|
+
Claude's `skill_tool_result` method observes its existing structured `Skill`
|
|
208
|
+
stream without enabling additional command hooks. It pairs each call with a
|
|
209
|
+
successful result under the same session, parent actor and tool-use ID.
|
|
210
|
+
Failed calls remain failed; unmatched attempts and malformed or conflicting
|
|
211
|
+
records remain partial. Native explicit command expansion can load a skill
|
|
212
|
+
without a `Skill` call. Explicit-dispatch receipts describe dispatch only;
|
|
213
|
+
they do not add entries to the activation observation. A direct Claude `Read`
|
|
214
|
+
also falls outside the `Skill` seam and is not inferred from its file path.
|
|
215
|
+
|
|
216
|
+
The collectors retain no tool arguments, outputs or skill bodies in the new
|
|
217
|
+
observation. Codex catalogs at most 128 skills, each at most 1 MiB, with an
|
|
218
|
+
8 MiB total body budget. Call receipts are bounded; missing collection,
|
|
219
|
+
unfinished calls, catalog or receipt limits, and failed execution remain
|
|
220
|
+
partial. Required evidence must not interpret these states as proof that a
|
|
221
|
+
skill was unused.
|
|
33
222
|
|
|
34
223
|
## Keep sources and credentials separate
|
|
35
224
|
|
package/docs/reading-results.md
CHANGED
|
@@ -18,18 +18,120 @@ aggregation, and exit-code precedence.
|
|
|
18
18
|
Completed trial evidence is saved under `--results-root` before cleanup.
|
|
19
19
|
Do not assume a run-directory name or publish private host artifacts.
|
|
20
20
|
|
|
21
|
+
Human output lists each trial, failed/unavailable check
|
|
22
|
+
reasons, measured candidate duration, unknown/known usage and retained paths.
|
|
23
|
+
Preparation/candidate/grading/evidence progress appears on stderr. Stage completion
|
|
24
|
+
means the attempt ended; read the three result states to determine its outcome.
|
|
25
|
+
See the [evaluation workflow](evaluation-workflow.md) for the complete progression.
|
|
26
|
+
|
|
27
|
+
## Interpret skill exposure
|
|
28
|
+
|
|
29
|
+
In retained Codex `sevro.host.skill-activations` observations, read
|
|
30
|
+
`data.skillExposures` alongside `data.collectionStatus`. A skill may have `full`
|
|
31
|
+
or `partial` exposure even when collection is incomplete. `none` means no
|
|
32
|
+
exposure was detected within a complete collection's scope; `unknown` means
|
|
33
|
+
collection gaps prevent that conclusion. `ambiguous` means identical bodies
|
|
34
|
+
could not identify a named skill. Missing fields in older evidence remain
|
|
35
|
+
unknown.
|
|
36
|
+
|
|
37
|
+
Full exposure establishes that a tool caller received the complete prepared
|
|
38
|
+
body, not that the model followed it. Partial exposure establishes only
|
|
39
|
+
recognizable fragments. Cases that accept partial exposure must say so in
|
|
40
|
+
their extension policy. The separate `sevro.host.skill-exposure-claims`
|
|
41
|
+
observation supports positive exposure checks without treating gaps as absence
|
|
42
|
+
or first selection. [Native host evidence](native-hosts.md#skill-activation-evidence)
|
|
43
|
+
defines the fields and limits; Claude's native skill-tool evidence has a
|
|
44
|
+
different scope. Task verdicts and existing activation requirements retain their
|
|
45
|
+
current meaning.
|
|
46
|
+
|
|
21
47
|
## Summarize runs
|
|
22
48
|
|
|
23
49
|
```sh
|
|
24
50
|
sevro report --json --result-file /absolute/path/sevro-result.json
|
|
25
51
|
```
|
|
26
52
|
|
|
53
|
+
`sevro report --latest` uses the most recently retained CLI result in
|
|
54
|
+
`<cwd>/.sevro/results`. Add
|
|
55
|
+
`--results-root ./other-results` to select another root. Dry/failed runs may be
|
|
56
|
+
latest; a pre-run error does not replace it. CLI `--result-file` also accepts
|
|
57
|
+
cwd-relative paths. Missing result or referenced evidence is an error, never
|
|
58
|
+
a fabricated row.
|
|
59
|
+
|
|
27
60
|
The command assumes [Sevro is on `PATH`](installing.md#make-the-command-available).
|
|
28
61
|
For a contributor checkout, use `bun src/cli.ts` in place of `sevro`.
|
|
29
62
|
[Report v1](report-v1.md) defines fields and limits. Missing cost, usage, or
|
|
30
63
|
duration is unknown, not zero. Advisory recommendations remain independent
|
|
31
64
|
of the task verdict.
|
|
32
65
|
|
|
66
|
+
## Prune retained results
|
|
67
|
+
|
|
68
|
+
Run `sevro prune` to permanently delete older retained evidence. With no options,
|
|
69
|
+
it keeps the newest **10 results** under `<cwd>/.sevro/results`. Each completed
|
|
70
|
+
attempt counts separately, including repeated evaluations, dry runs, failures,
|
|
71
|
+
and interrupted runs that retained a CLI result.
|
|
72
|
+
|
|
73
|
+
```sh
|
|
74
|
+
sevro prune
|
|
75
|
+
sevro prune --results-root ./other-results --keep 5
|
|
76
|
+
sevro prune --older-than 30d
|
|
77
|
+
sevro prune --latest
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Choose at most one explicit policy. `--keep` accepts a positive safe integer;
|
|
81
|
+
`--latest` is equivalent to `--keep 1`. `--older-than` accepts a positive integer
|
|
82
|
+
followed by `ms`, `s`, `m`, `h`, `d`, or `w` (milliseconds through weeks). It
|
|
83
|
+
deletes results strictly older than that duration at invocation. Age and newest
|
|
84
|
+
ordering use each retained `result.json` file's modification time; copying or
|
|
85
|
+
editing that file can change its retention age. Equal timestamps sort by
|
|
86
|
+
absolute result-directory path, ascending. Relative roots resolve from the
|
|
87
|
+
invoking directory.
|
|
88
|
+
|
|
89
|
+
Pruning finds retained result directories inside the selected root, including
|
|
90
|
+
nested `attempts` trees, validates results and their colocated run evidence, and
|
|
91
|
+
removes each selected result's entire directory. Directories without a retained
|
|
92
|
+
`result.json` are not themselves deleted. Active and unrecognized ownership states
|
|
93
|
+
are excluded from the retention count. Descendant directory links are not
|
|
94
|
+
followed; linked result, evidence, ownership and lock files are refused. The
|
|
95
|
+
selected root itself may be a directory alias. Invalid policies or unreadable,
|
|
96
|
+
malformed, inconsistent or unsafe retained inputs return exit `64` with a
|
|
97
|
+
diagnostic. Validation completes before any result deletion or latest update.
|
|
98
|
+
|
|
99
|
+
Pruning and CLI result publication serialize access to the root. Before deleting
|
|
100
|
+
evidence, pruning atomically points `latest.json` at the newest remaining
|
|
101
|
+
completed result, or removes the index if none remain. `sevro report --latest`
|
|
102
|
+
and explicit reports for surviving results keep working; reports naming deleted
|
|
103
|
+
results fail. An empty or missing results root is a successful no-op. Ownership
|
|
104
|
+
coordination metadata, partial attempts without CLI results, temporary fixtures,
|
|
105
|
+
and a separate `--run-state-root` remain outside evidence pruning.
|
|
106
|
+
|
|
107
|
+
### Remove native transcript bundles
|
|
108
|
+
|
|
109
|
+
Use `--native-transcripts` to permanently remove captured native bundles while
|
|
110
|
+
keeping every result, recorded hash, observation, and other artifact:
|
|
111
|
+
|
|
112
|
+
```sh
|
|
113
|
+
sevro prune --native-transcripts
|
|
114
|
+
sevro prune --native-transcripts --older-than 30d
|
|
115
|
+
sevro prune --native-transcripts --keep 5
|
|
116
|
+
sevro report --latest
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Without a policy, this mode removes bundles from all completed results. With
|
|
120
|
+
`--keep 5`, it preserves the newest five results' bundles and removes bundles
|
|
121
|
+
from older results. `--latest` preserves the newest result's bundles;
|
|
122
|
+
`--older-than` removes bundles only from results older than the given duration.
|
|
123
|
+
Age, ordering, root selection, active-run protection, and input validation follow
|
|
124
|
+
the rules above. The mode includes candidate, semantic, and advisory bundles.
|
|
125
|
+
|
|
126
|
+
`result.json`, `run.json`, trial evidence, and `latest.json` stay unchanged.
|
|
127
|
+
Before removing bytes, pruning atomically saves a private
|
|
128
|
+
`native-transcripts-pruned.json` receipt beside `run.json`. Keep that receipt
|
|
129
|
+
with the evidence: reports require it to distinguish intentional pruning from
|
|
130
|
+
missing evidence. Reports show retained and pruned bundle counts while preserving
|
|
131
|
+
the original verdicts and measurements. Pruned native bytes cannot be decoded
|
|
132
|
+
or recovered from hashes. Repeating the command safely resumes interrupted
|
|
133
|
+
deletions; ordinary whole-result pruning still works afterward.
|
|
134
|
+
|
|
33
135
|
## Compare carefully
|
|
34
136
|
|
|
35
137
|
[Identity v1](identity-v1.md) binds inputs, evaluator content, host/model/effort,
|