@bjoernrochel/sevro 0.1.0-rc.2 → 0.1.0-rc.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/CONTRIBUTING.md +170 -0
  2. package/LICENSE +63 -136
  3. package/README.md +83 -66
  4. package/docs/README.md +44 -0
  5. package/docs/acknowledgements.md +14 -0
  6. package/docs/architecture.md +146 -0
  7. package/docs/assets/README.md +27 -0
  8. package/docs/assets/sevro-logo.png +0 -0
  9. package/docs/assets/sevro-symbol.svg +1 -0
  10. package/docs/assets/sevro-wordmark.svg +1 -0
  11. package/docs/builtin-graders-v1.md +41 -13
  12. package/docs/codex-host.md +184 -52
  13. package/docs/contracts.md +19 -0
  14. package/docs/creating-cases.md +139 -0
  15. package/docs/development-cli.md +190 -30
  16. package/docs/documentation-quality.md +61 -0
  17. package/docs/evaluation-workflow.md +110 -0
  18. package/docs/evidence/code-mode-controls-71.md +64 -0
  19. package/docs/evidence/code-mode-programs-85.md +64 -0
  20. package/docs/evidence/codex-state-73/README.md +204 -0
  21. package/docs/evidence/codex-state-73/darrow-migration.patch +182 -0
  22. package/docs/evidence/codex-state-73/results.json +661 -0
  23. package/docs/evidence/local-http-74.md +104 -0
  24. package/docs/evidence/runtime-startup-30/README.md +185 -0
  25. package/docs/evidence/runtime-startup-30/after.json +319 -0
  26. package/docs/evidence/runtime-startup-30/baseline-timeout.jsonl +2 -0
  27. package/docs/evidence/runtime-startup-30/before.json +403 -0
  28. package/docs/evidence/runtime-startup-30/consumer-smoke.json +63 -0
  29. package/docs/evidence/runtime-startup-30/full-policy-diagnostic.jsonl +3 -0
  30. package/docs/evidence/runtime-startup-30/minimal-policy-diagnostic.jsonl +3 -0
  31. package/docs/evidence/runtime-startup-30/plugin-template-assessment.json +20 -0
  32. package/docs/evidence/runtime-startup-30/seedless-timeout.jsonl +2 -0
  33. package/docs/evidence/skill-reads-70/results.json +823 -0
  34. package/docs/evidence.md +21 -0
  35. package/docs/extension-protocol-v1.md +50 -16
  36. package/docs/fixture-cleanup-validation.md +3 -0
  37. package/docs/getting-started.md +102 -0
  38. package/docs/guide-evaluation.md +89 -0
  39. package/docs/guide-verification.json +239 -0
  40. package/docs/identity-v1.md +35 -1
  41. package/docs/installing.md +88 -0
  42. package/docs/licenses/BUSL-1.1-0.1.0-rc.2.txt +159 -0
  43. package/docs/licensing.md +42 -0
  44. package/docs/native-controls.md +76 -5
  45. package/docs/native-hosts.md +228 -0
  46. package/docs/reading-results.md +141 -0
  47. package/docs/recipes.md +489 -0
  48. package/docs/releases.md +81 -40
  49. package/docs/report-v1.md +29 -1
  50. package/docs/results-v1.md +180 -0
  51. package/docs/run-settings-v1.md +147 -0
  52. package/docs/running-evaluations.md +31 -0
  53. package/docs/runtime-v1.md +614 -0
  54. package/docs/specs/repository-guide.md +58 -0
  55. package/docs/troubleshooting.md +30 -0
  56. package/docs/typescript-quality.md +234 -0
  57. package/docs/usability-study.md +114 -0
  58. package/examples/basic/host.ts +2 -2
  59. package/examples/recipes/candidate.ts +26 -0
  60. package/examples/recipes/cases/coding-change.json +21 -0
  61. package/examples/recipes/cases/host-tools.json +21 -0
  62. package/examples/recipes/cases/mise.json +21 -0
  63. package/examples/recipes/cases/node.json +21 -0
  64. package/examples/recipes/cases/python-uv.json +21 -0
  65. package/examples/recipes/cases/semantic.json +17 -0
  66. package/examples/recipes/coding-change/check.ts +23 -0
  67. package/examples/recipes/extension-artifacts.ts +65 -0
  68. package/examples/recipes/extension-methods.ts +174 -0
  69. package/examples/recipes/extension.ts +37 -0
  70. package/examples/recipes/repository-skill/.agents/skills/startup-guide/SKILL.md +7 -0
  71. package/examples/recipes/repository-skill/.claude/skills/startup-guide/SKILL.md +7 -0
  72. package/examples/recipes/repository-skill/README.md +3 -0
  73. package/examples/recipes/run-inputs.ts +188 -0
  74. package/examples/recipes/run-options.ts +131 -0
  75. package/examples/recipes/run.ts +63 -0
  76. package/examples/recipes/runtime/empty.json +1 -0
  77. package/examples/recipes/runtime/goals.json +1 -0
  78. package/examples/recipes/runtime/mise.json +6 -0
  79. package/examples/recipes/runtime/path.json +1 -0
  80. package/examples/recipes/runtime/plugins.json +4 -0
  81. package/examples/recipes/runtime/python-uv.json +10 -0
  82. package/examples/recipes/semantic-judge.ts +29 -0
  83. package/examples/templates/coding/adapter.ts +17 -0
  84. package/examples/templates/coding/case.json +15 -0
  85. package/examples/templates/repository-skill/.agents/skills/startup-guide/SKILL.md +6 -0
  86. package/examples/templates/repository-skill/extension-data.ts +64 -0
  87. package/examples/templates/repository-skill/extension.ts +31 -0
  88. package/examples/templates/response/adapter.ts +12 -0
  89. package/examples/templates/response/case.json +13 -0
  90. package/package.json +39 -6
  91. package/schemas/report-v1.schema.json +9 -0
  92. package/schemas/run-evidence-v1.schema.json +2 -1
  93. package/schemas/runtime-v1.schema.json +193 -0
  94. package/src/advisory.ts +10 -5
  95. package/src/candidate-artifacts.ts +208 -0
  96. package/src/candidate-codex-state.ts +185 -0
  97. package/src/case-validation.ts +105 -0
  98. package/src/cli/cancellation.ts +20 -0
  99. package/src/cli/command.ts +81 -0
  100. package/src/cli/completion.ts +15 -0
  101. package/src/cli/demo.ts +59 -0
  102. package/src/cli/evaluation.ts +55 -0
  103. package/src/cli/extension.ts +79 -0
  104. package/src/cli/help.ts +222 -0
  105. package/src/cli/hosts.ts +59 -0
  106. package/src/cli/init-settings.ts +30 -0
  107. package/src/cli/init.ts +111 -0
  108. package/src/cli/invocation.ts +627 -0
  109. package/src/cli/loading.ts +151 -0
  110. package/src/cli/preparation.ts +163 -0
  111. package/src/cli/presentation.ts +91 -0
  112. package/src/cli/progress.ts +6 -0
  113. package/src/cli/run-manifest.ts +133 -0
  114. package/src/cli/run-options.ts +101 -0
  115. package/src/cli/run-overrides.ts +83 -0
  116. package/src/cli/settings.ts +160 -0
  117. package/src/cli/summary.ts +43 -0
  118. package/src/cli.ts +13 -843
  119. package/src/contract-types.ts +94 -0
  120. package/src/engine.ts +19 -2373
  121. package/src/evaluation/advisory.ts +150 -0
  122. package/src/evaluation/check-plan.ts +510 -0
  123. package/src/evaluation/collection.ts +88 -0
  124. package/src/evaluation/context.ts +10 -0
  125. package/src/evaluation/grading-host.ts +39 -0
  126. package/src/evaluation/grading.ts +258 -0
  127. package/src/evaluation/invocation-plan.ts +548 -0
  128. package/src/evaluation/plan.ts +736 -0
  129. package/src/evaluation/progress.ts +19 -0
  130. package/src/evaluation/resources.ts +241 -0
  131. package/src/evaluation/run.ts +206 -0
  132. package/src/{trial-scheduler.ts → evaluation/scheduler.ts} +3 -1
  133. package/src/evaluation/semantic.ts +312 -0
  134. package/src/evaluation/trial.ts +866 -0
  135. package/src/evaluation/types.ts +207 -0
  136. package/src/evidence/host-results.ts +92 -0
  137. package/src/evidence/retained-artifacts.ts +18 -0
  138. package/src/evidence/trial-writer.ts +203 -0
  139. package/src/evidence/usage.ts +17 -0
  140. package/src/extension-client.ts +228 -148
  141. package/src/extension-session.ts +326 -195
  142. package/src/fixtures/advisory.ts +338 -0
  143. package/src/fixtures/bin.ts +57 -0
  144. package/src/{fixture-cleanup.ts → fixtures/cleanup.ts} +13 -7
  145. package/src/fixtures/create.ts +187 -0
  146. package/src/fixtures/generated.ts +300 -0
  147. package/src/fixtures/git-hooks.ts +24 -0
  148. package/src/fixtures/preparation.ts +270 -0
  149. package/src/{repository-fixture.ts → fixtures/repository.ts} +207 -85
  150. package/src/fixtures/setup.ts +224 -0
  151. package/src/fixtures/tools.ts +88 -0
  152. package/src/fixtures/workspace-state.ts +212 -0
  153. package/src/generated/cli-result.cjs +2 -0
  154. package/src/generated/cli-result.d.cts +3 -0
  155. package/src/generated/extension.cjs +2 -0
  156. package/src/generated/extension.d.cts +3 -0
  157. package/src/generated/report.cjs +2 -0
  158. package/src/generated/report.d.cts +3 -0
  159. package/src/generated/run-evidence.cjs +2 -0
  160. package/src/generated/run-evidence.d.cts +3 -0
  161. package/src/generated/runtime.cjs +2 -0
  162. package/src/generated/runtime.d.cts +3 -0
  163. package/src/graders/artifact.ts +56 -23
  164. package/src/graders/git-head.ts +79 -75
  165. package/src/graders/output.ts +222 -140
  166. package/src/graders/semantic.ts +102 -43
  167. package/src/graders/shell.ts +379 -207
  168. package/src/host-diagnostic-redaction.ts +52 -0
  169. package/src/host-diagnostics.ts +319 -0
  170. package/src/hosts/claude-continuation.ts +63 -18
  171. package/src/hosts/claude-credential.ts +43 -62
  172. package/src/hosts/claude-events.ts +86 -51
  173. package/src/hosts/claude-keychain.ts +59 -0
  174. package/src/hosts/claude-native-goal.ts +57 -33
  175. package/src/hosts/claude-process.ts +111 -0
  176. package/src/hosts/claude-repository-invocation.ts +208 -117
  177. package/src/hosts/claude-settings.ts +240 -21
  178. package/src/hosts/claude-skill-activations.ts +166 -0
  179. package/src/hosts/claude-state.ts +403 -0
  180. package/src/hosts/claude-tool-calls.ts +171 -106
  181. package/src/hosts/claude.ts +561 -451
  182. package/src/hosts/codex-app-server.ts +326 -178
  183. package/src/hosts/codex-configuration.ts +44 -18
  184. package/src/hosts/codex-events.ts +97 -60
  185. package/src/hosts/codex-exec-controls.ts +516 -0
  186. package/src/hosts/codex-invocation.ts +70 -0
  187. package/src/hosts/codex-marketplace.ts +283 -0
  188. package/src/hosts/codex-native-calls.ts +546 -500
  189. package/src/hosts/codex-process.ts +202 -0
  190. package/src/hosts/codex-profile.ts +257 -28
  191. package/src/hosts/codex-session-files.ts +106 -0
  192. package/src/hosts/codex-state.ts +492 -0
  193. package/src/hosts/codex.ts +783 -832
  194. package/src/hosts/isolation-common.ts +94 -0
  195. package/src/hosts/isolation-roots.ts +54 -27
  196. package/src/hosts/isolation.ts +10 -0
  197. package/src/hosts/linux-sandbox.ts +159 -0
  198. package/src/hosts/mac-sandbox.ts +187 -61
  199. package/src/hosts/native-controls.ts +152 -62
  200. package/src/hosts/process-lifecycle.ts +37 -0
  201. package/src/hosts/protected-worktrees.ts +51 -19
  202. package/src/hosts/skill-hook-catalog.ts +131 -0
  203. package/src/hosts/skill-hook-handler.ts +374 -0
  204. package/src/hosts/skill-hooks.ts +580 -0
  205. package/src/hosts/workspace-fingerprint.ts +55 -35
  206. package/src/identity.ts +102 -48
  207. package/src/instrumentation.ts +109 -48
  208. package/src/native-transcript-state.ts +131 -0
  209. package/src/native-transcript-view.ts +90 -0
  210. package/src/native-transcripts.ts +286 -0
  211. package/src/process-lifecycle.ts +150 -0
  212. package/src/provenance.ts +161 -81
  213. package/src/prune.ts +215 -0
  214. package/src/report.ts +172 -140
  215. package/src/resolved-case.ts +33 -0
  216. package/src/results-lock.ts +29 -0
  217. package/src/results.ts +133 -86
  218. package/src/run-owner.ts +154 -63
  219. package/src/runtime/config.ts +456 -0
  220. package/src/runtime/discovery-apple.ts +90 -0
  221. package/src/runtime/discovery-providers.ts +63 -0
  222. package/src/runtime/discovery.ts +70 -0
  223. package/src/runtime/hook-processes.ts +97 -0
  224. package/src/runtime/hooks.ts +476 -0
  225. package/src/runtime/paths.ts +313 -0
  226. package/src/runtime/query.ts +85 -0
  227. package/src/runtime/seeds.ts +134 -0
  228. package/src/runtime/shared-cache.ts +143 -0
  229. package/src/runtime/state.ts +143 -0
  230. package/src/schema-types.ts +198 -0
  231. package/src/schema.ts +15 -19
  232. package/src/transcript-retention.ts +146 -0
  233. package/src/value-guards.ts +20 -0
  234. package/src/advisory-fixture.ts +0 -282
  235. package/src/fixture-bin.ts +0 -87
  236. package/src/fixture-setup.ts +0 -163
  237. package/src/generated-fixture.ts +0 -220
  238. package/src/git-hooks.ts +0 -63
  239. package/src/hosts/claude-nested-skills.ts +0 -218
  240. package/src/hosts/codex-command-output.ts +0 -399
  241. package/src/hosts/codex-executor-command.ts +0 -195
  242. package/src/hosts/codex-skill-reads.ts +0 -391
  243. package/src/preparation.ts +0 -211
@@ -0,0 +1,21 @@
1
+ # Historical validation evidence
2
+
3
+ These records preserve specific observations and limits. They are not current
4
+ public contracts, fresh acceptance runs, or proof of broader platform support.
5
+ Keep their observations intact:
6
+
7
+ - [Cache ownership](cache-ownership-validation.md)
8
+ - [Claude continuation](claude-continuation-validation.md)
9
+ - [Concurrency](concurrency-validation.md)
10
+ - [Code Mode control observations](evidence/code-mode-controls-71.md)
11
+ - [Code Mode template and batch programs](evidence/code-mode-programs-85.md)
12
+ - [Candidate Codex configuration and user-skill state](evidence/codex-state-73/README.md)
13
+ - [Configuration roots](configuration-root-validation.md)
14
+ - [Fixture cleanup](fixture-cleanup-validation.md)
15
+ - [Local HTTP servers](evidence/local-http-74.md)
16
+
17
+ The [first engine slice](engine-slice.md) also records bounded implementation
18
+ context. [Current contracts](contracts.md) and [architecture](architecture.md)
19
+ describe present interfaces. Coverage discovery belongs to [issue #1](https://github.com/BjRo/sevro/issues/1);
20
+ targeted prototypes do not prove full-suite coverage.
21
+ Return to the [hub](README.md).
@@ -106,8 +106,16 @@ trial in the Git fixture after source history and working-tree files are built,
106
106
  before extension artifacts are mounted or the host starts. The command is never
107
107
  interpreted through a shell by Sevro; an extension may explicitly select a
108
108
  shell executable. `{{sevro.project}}` and `{{sevro.workspace}}` in environment
109
- values resolve to the declared roots at execution time. The symbolic values and
110
- command enter fixture and comparison identity, while retained configuration
109
+ values resolve to the declared roots at execution time. Setup's `HOME` is the
110
+ candidate commands' private trial home, outside the Git fixture. Ordinary
111
+ `$HOME` paths can initialize directories and seed prior state before the candidate
112
+ starts, including without a runtime configuration file. This home is separate
113
+ from host authentication and native configuration, other trials, and grader homes.
114
+ Setup's `TMPDIR` remains disposable and is removed when setup finishes; the shared
115
+ home survives through candidate execution and grading, then is removed even on
116
+ setup failure, cancellation, or dry runs. Trusted injected hosts must use the
117
+ supplied `candidateRuntimeRoot` and runtime policy to preserve this boundary.
118
+ The symbolic values and command enter fixture and comparison identity, while retained configuration
111
119
  records only their digest. Setup has a two-minute limit, inherits no credential
112
120
  environment variables, and its output is discarded. Failure or interruption
113
121
  stops the run before host execution; it cannot become a passing assessment.
@@ -171,7 +179,7 @@ other invocation declarations and enters retained configuration and identity.
171
179
  The host validates the bounded mount without following symbolic links. Its
172
180
  `sevro.claude.repository-invocation` observation binds one native command, exact
173
181
  arguments, and the complete mounted body before the first assistant entry in
174
- the completed session. It retains only acceptance and ordered skill metadata.
182
+ the completed session. It retains only acceptance and the dispatched skill name.
175
183
  Missing or ambiguous session evidence yields a partial observation; later Skill
176
184
  calls cannot repair an unverified explicit repository dispatch.
177
185
 
@@ -203,10 +211,15 @@ An artifact may set `executable: true` to install its verified bytes with owner
203
211
  execute permission. The flag enters fixture identity and retained artifact
204
212
  references; absent or false leaves the file readable without execute permission.
205
213
 
206
- `evaluate` receives one completed or failed trial's bounded host observations,
207
- their source and completeness, built-in check results, artifact references,
208
- and the extension's namespaced case data. It returns namespaced checks and
209
- metrics. A check is `passed`, `failed`, or `unavailable`; it names the evidence
214
+ For engine-driven trials, `evaluate` runs after host execution completes and
215
+ built-in grading has no error. It receives bounded host observations, their
216
+ source and completeness, built-in check results, artifact references, and the
217
+ extension's namespaced case data. Failed or cancelled host execution and
218
+ built-in grading errors skip `evaluate`; available evidence is still retained.
219
+ A failed built-in assertion does not skip extension grading.
220
+
221
+ It returns namespaced checks and metrics. A check is `passed`, `failed`, or
222
+ `unavailable`; it names the evidence
210
223
  used. A missing required observation remains unavailable. The extension may
211
224
  return a task-verdict recommendation only when an explicitly configured
212
225
  task-verdict policy names that extension policy. In that case, `evaluate`
@@ -219,6 +232,21 @@ grader error, or unavailable required evidence.
219
232
  Host adapters can supply additional namespaced observations. The engine bounds
220
233
  and retains those records, then passes them to `evaluate`. Required observation
221
234
  IDs must be present with `complete` evidence before a task can pass.
235
+ The bundled adapters expose [skill activation evidence](native-hosts.md#skill-activation-evidence)
236
+ as `sevro.host.skill-activations`, with separate methods for Codex tool-result
237
+ body exposure and successful Claude `Skill` calls.
238
+ This replaces the retired Codex skill-read and Claude nested-skill observations.
239
+ Explicit invocation receipts remain dispatch evidence and do not contribute to
240
+ `observedSkills`; extensions must migrate activation checks to the common ID.
241
+ Codex additionally supplies per-skill `skillExposures` and independent
242
+ `collectionStatus` in that observation. Its optional
243
+ `sevro.host.skill-exposure-claims` capability provides complete evidence only
244
+ for listed positive full or partial body exposures, even when collection is
245
+ partial. Extensions must check the requested skill and acceptable exposure
246
+ status explicitly; this evidence cannot establish absence or primary selection.
247
+ See the [exposure contract](native-hosts.md#skill-activation-evidence) for scope,
248
+ unknown states and host limitations. Required aggregate activation evidence
249
+ still needs a `complete` observation as before.
222
250
  Host adapters can also supply bounded evidence artifacts. The engine persists
223
251
  their bytes outside the candidate workspace before `evaluate`, then passes
224
252
  file URLs and digests through the existing artifact references. A required host
@@ -235,9 +263,10 @@ calls. Its caller declares the extension source-file closure; the client also
235
263
  includes the executable and hashes that closure before discovery and before
236
264
  and after later calls. The redacted configuration and command argv affect the
237
265
  configuration digest. Command argv must not contain credentials. A passing
238
- extension check must cite available, complete evidence. The engine now accepts
239
- inline and declared clean-repository cases with additive extension checks, runs `prepare` before the host,
240
- and persists check outcomes, evidence references, and metrics before fixture
266
+ extension check must cite available, complete evidence. The engine accepts
267
+ inline, generated Git, and declared clean-repository cases with additive
268
+ extension checks, runs `prepare` before the host, and persists check outcomes,
269
+ evidence references, and metrics before fixture
241
270
  cleanup. It applies and retains bounded inline preparation artifacts after
242
271
  checking their path and digest. Source references require a caller-declared
243
272
  ID-to-file-URL map under a case source root and receive the same checks.
@@ -245,12 +274,17 @@ The bundled Codex host currently advertises no instrumentation capabilities.
245
274
 
246
275
  ## Grading and replacement
247
276
 
248
- The runner provides built-in shell, regex, JSON/schema, combined output,
249
- semantic-output, and
250
- advisory quality graders. A run can use those without any extension. An
251
- extension's graders add checks and metrics by default. The run configuration
252
- must explicitly name each built-in grader it replaces, or explicitly select
253
- one advertised task-verdict policy. Unknown or duplicate replacement IDs are
277
+ The runner provides [built-in task graders](builtin-graders-v1.md) for regex,
278
+ JSON, JSON Schema, combined output, shell checks, Git HEAD, and semantic
279
+ propositions. A run can use those without any extension. Optional
280
+ [advisory quality review](advisory-fixture.md) uses a separate host route and
281
+ retains an independent recommendation. It does not affect the task verdict
282
+ and is outside built-in grader replacement.
283
+
284
+ An extension's graders add checks and metrics by default. The run configuration
285
+ must explicitly name each built-in grader it replaces. Separately, a run may
286
+ explicitly select one advertised task-verdict policy. Selecting a policy does
287
+ not itself disable or replace built-in graders. Unknown or duplicate replacement IDs are
254
288
  errors. Retained evidence lists every active grader, its identity and route,
255
289
  and any replaced default.
256
290
 
@@ -1,5 +1,8 @@
1
1
  # Permission-locked fixture cleanup
2
2
 
3
+ These historical observations predate the current
4
+ [workspace retention policy](results-v1.md).
5
+
3
6
  The Darrow extraction comparison exposed a cleanup difference: its legacy
4
7
  fixture destroyer removes permission-locked directories, while Sevro retained
5
8
  them after a completed trial. Sevro now restores owner access inside completed
@@ -0,0 +1,102 @@
1
+ # Your first evaluation
2
+
3
+ Run a deterministic case and inspect its evidence. You need Bun 1.3.13; no
4
+ Darrow checkout, Codex/Claude login, or model credentials are required. The
5
+ adapter returns `ready`; Sevro grades that response against `^ready$`.
6
+ This teaches the runner lifecycle, not the quality of an actual model.
7
+
8
+ <a id="built-in-demo-in-this-checkout"></a>
9
+
10
+ ## Built-in demo
11
+
12
+ With [Sevro installed and on `PATH`](installing.md#make-the-command-available), run:
13
+
14
+ ```sh
15
+ sevro demo
16
+ ```
17
+
18
+ It prints `execution=completed grading=completed task=passed` and an absolute
19
+ `evidence=` path under `.sevro/results` in your current directory. The demo owns
20
+ its packaged case and adapter, uses a separate temporary project, and ignores
21
+ your project's `sevro.json` and native configuration. No credentials are needed.
22
+ Effective run settings appear on stderr before evaluation. Add `--json` for one
23
+ versioned result on stdout.
24
+
25
+ Continue with [the initialized evaluation workflow](evaluation-workflow.md) to
26
+ create response, coding or repository-skill assertions, prepare them, inspect
27
+ progress and access the latest result without copying an evidence path.
28
+
29
+ ## From an installed package
30
+
31
+ Prepare a new directory:
32
+
33
+ ```sh
34
+ mkdir sevro-demo
35
+ cd sevro-demo
36
+ bun init -y
37
+ ```
38
+
39
+ Install the [current release](installing.md#current-release) there, then return
40
+ here to run the example. See [licensing](licensing.md) for the current terms and
41
+ the licenses retained by historical releases.
42
+
43
+ Make the local installation available on `PATH` for this shell, then call
44
+ `sevro` directly. Bun must also be on `PATH`.
45
+
46
+ <!-- sevro-example:consumer -->
47
+
48
+ ```sh
49
+ export PATH="$PWD/node_modules/.bin:$PATH"
50
+ mkdir -p project
51
+ sevro run --json \
52
+ --case-file "$PWD/node_modules/@bjoernrochel/sevro/examples/basic/graded.json" \
53
+ --adapter-module "$PWD/node_modules/@bjoernrochel/sevro/examples/basic/host.ts" \
54
+ --project-root "$PWD/project" --results-root "$PWD/sevro-results" \
55
+ --condition passive --trials 1 --threshold 1 > sevro-result.json
56
+ ```
57
+
58
+ ## From a contributor checkout
59
+
60
+ From a fresh Sevro checkout, install locked dependencies:
61
+
62
+ ```sh
63
+ bun install --frozen-lockfile
64
+ ```
65
+
66
+ <!-- sevro-example:contributor -->
67
+
68
+ ```sh
69
+ mkdir -p project
70
+ bun src/cli.ts run --json \
71
+ --case-file "$PWD/examples/basic/graded.json" \
72
+ --adapter-module "$PWD/examples/basic/host.ts" \
73
+ --project-root "$PWD/project" --results-root "$PWD/sevro-results" \
74
+ --condition passive --trials 1 --threshold 1 > sevro-result.json
75
+ ```
76
+
77
+ ## Inspect success and evidence
78
+
79
+ The evaluated project is separate from the installation. Package dependencies
80
+ can contain symbolic links that Sevro refuses when snapshotting a project.
81
+
82
+ Both commands exit `0`. The result contains this excerpt:
83
+
84
+ ```json
85
+ {
86
+ "execution": { "status": "completed" },
87
+ "grading": { "status": "completed" },
88
+ "task": { "verdict": "passed" }
89
+ }
90
+ ```
91
+
92
+ Inspect `sevro-result.json`; its `evidencePath` names the retained run JSON
93
+ inside `sevro-results`. Trial evidence survives fixture cleanup. Use that path
94
+ instead of assuming a generated run ID or subdirectory name.
95
+
96
+ Replace `graded.json` with `prompt-only.json` for a second run. Execution
97
+ completes, grading is `not_requested`, and the task is `not_assessed`. Exit `0`
98
+ alone does not mean a benchmark passed.
99
+
100
+ Continue with [reading results](reading-results.md), [creating a case](creating-cases.md),
101
+ or [troubleshooting](troubleshooting.md). Maintainers verify the exact marked
102
+ commands with `bun run test:docs-examples`; see [documentation quality](documentation-quality.md).
@@ -0,0 +1,89 @@
1
+ # Evaluate the repository guide
2
+
3
+ Guide evals use Sevro's standard CLI, native hosts, built-in answer graders,
4
+ and a small extension for guide-specific evidence and fixtures. The inventory and
5
+ cases remain under `.agents/skills/sevro-guide/evals/`. The
6
+ [extension modules](../scripts/guide/README.md) do not implement a second runner.
7
+
8
+ From this checkout, validate fixture preparation without launching a model:
9
+
10
+ ```sh
11
+ bun run eval:guide --case-id orientation --host codex \
12
+ --codex-bin /bin/false --codex-auth-file /unused-auth.json \
13
+ --model dry-unverified --effort medium --json --dry
14
+ ```
15
+
16
+ The dry command's executable and auth paths are unused; it makes no native
17
+ host call. The full quality gate dry-prepares every case.
18
+
19
+ Live runs require the [native host prerequisites](native-hosts.md), macOS
20
+ isolation, existing authentication, and an explicit model identifier:
21
+
22
+ ```sh
23
+ bun run eval:guide --case-id orientation --host codex \
24
+ --codex-bin "$(command -v codex)" \
25
+ --codex-auth-file "${CODEX_HOME:-$HOME/.codex}/auth.json" \
26
+ --model <codex-model> --effort medium --json
27
+
28
+ bun run eval:guide --case-id orientation --host claude \
29
+ --claude-bin "$(command -v claude)" --claude-project-settings \
30
+ --model <claude-model> --effort medium --json
31
+ ```
32
+
33
+ These commands consume the selected account's model quota. The launcher forwards
34
+ [Sevro's CLI options](development-cli.md); use `--case-id` for case selection,
35
+ `--trials` for repeated trials, and `--jobs` for Sevro's trial concurrency.
36
+ It defaults to one passive trial per selected case. Dry runs retain
37
+ `not_run / not_requested / not_assessed`; they never establish native support.
38
+
39
+ With `--json`, Sevro prints its standard CLI result and evidence path. Ignored
40
+ `.guide-results/<run-id>/` directories contain Sevro's `run.json`, trial
41
+ evidence and retained native event artifacts. Save stdout to a result file
42
+ to use the [standard report command](report-v1.md):
43
+
44
+ ```sh
45
+ sevro report --result-file /absolute/path/to/result.json
46
+ ```
47
+
48
+ This assumes [Sevro is on `PATH`](installing.md#make-the-command-available).
49
+ For a contributor checkout, use `bun src/cli.ts` in place of `sevro`.
50
+
51
+ Sevro owns fixture isolation, native continuation, invocation receipts,
52
+ cancellation, retention, and cleanup. Participant fixtures contain repository
53
+ documentation and both skill mounts; the eval cases and grader code are withheld.
54
+ The case matrix covers orientation, explicit invocation, unrelated requests,
55
+ missing/conflicting/stale evidence, follow-ups, pressure for effects,
56
+ extension boundaries, contributions, and licensing.
57
+ Missing event artifacts, incomplete turns, missing dispatch receipts, or absent
58
+ fresh follow-up reads cannot pass. Built-in `sevro.regex` checks assess answer
59
+ assertions and contradictions. The `sevro.shell` check verifies Git status,
60
+ hashes of ignored skill/assets, and visible directories. Custom grading is
61
+ limited to selection observations, inspected citations, and attempted effects.
62
+ The follow-up case also reuses Sevro's output grader for its initial answer.
63
+
64
+ The execution envelope now follows [Sevro's native hosts](native-hosts.md).
65
+ Claude fixtures also deny editing, shell execution, delegation, and web tools.
66
+ Codex uses Sevro's standard permission profile, which permits writes inside the
67
+ isolated candidate workspace; guide graders reject attempted non-read commands
68
+ and changed visible files. This differs from the old guide-only read-only launch.
69
+ No-effects results are evidence within those restrictions, not proof that an
70
+ arbitrary tool could never escape them.
71
+
72
+ Automatic checks remain signals, not a complete truth judgment. Acceptance
73
+ requires inspecting material claims against the sources actually read.
74
+ File listings do not count as source inspection; follow-ups require fresh
75
+ content. Explicit invocation requires Sevro's complete host dispatch receipt.
76
+ Automatic selection requires the complete `sevro.host.skill-activations`
77
+ observation on both hosts. Codex uses passive tool-result hooks; Claude uses
78
+ successful native `Skill` calls. The evaluator does not fall back to command
79
+ patterns, direct Claude file reads, or retired skill-read observations.
80
+ See the [guide contract](specs/repository-guide.md).
81
+
82
+ The [earlier verification record](guide-verification.json) describes historical
83
+ trials of the previous harness. Its outputs and recheck observations are preserved
84
+ as history; they do not validate this conversion. The old `--recheck` command
85
+ and custom evidence format have been removed. Rerun changed cases through Sevro
86
+ and keep prior evidence intact.
87
+ The inventory at `.agents/skills/sevro-guide/evals/inventory.json` still maps
88
+ questions to sources and static destinations and remains outside the npm package.
89
+ No pre-implementation native baseline was captured for the original guide change.
@@ -0,0 +1,239 @@
1
+ {
2
+ "format": "sevro.guide-verification.v1",
3
+ "date": "2026-10-07",
4
+ "sourceRevision": "76c7f5d73f7d42f311e7b94bc0892742dbb6fe6b plus uncommitted ticket #3 candidate",
5
+ "guideDigest": "d4d41ee4d10ae747091b3f193cc7c96f77a8e2ff2c9d1e55013f6748c9d63df2",
6
+ "evaluatorDigest": "c792e786d16efe0bd033733ab17ca06c709a49d77f6e19461e15f7639ca4a8e8",
7
+ "inventoryDigest": "8f3835ee3bf9df7784b983e46ead5c071b299f21d264c67d966ec32ca1b4906c",
8
+ "environment": {
9
+ "platform": "macOS arm64",
10
+ "bun": "1.3.13",
11
+ "node": "24.13.0"
12
+ },
13
+ "hosts": {
14
+ "codex": {
15
+ "cliVersion": "codex-cli 0.160.1",
16
+ "model": "native default; identifier not exposed in retained Codex JSON events",
17
+ "cases": [
18
+ {
19
+ "case": "orientation",
20
+ "automatic": "passed",
21
+ "claimGrounding": "passed-manual-source-inspection",
22
+ "note": "Purpose, deterministic first success, released/check-out distinction, prerequisites, and expected evidence align with inspected documentation.",
23
+ "fixtureDigest": "237ea74229f4dcdeaf0f6f4aee9b2ea41e37efe6eaa53c6835517df81262d616",
24
+ "nativeEvidence": ".guide-results/1791374787673-codex/orientation.json"
25
+ },
26
+ {
27
+ "case": "explicit",
28
+ "automatic": "passed",
29
+ "claimGrounding": "passed-manual-source-inspection",
30
+ "note": "Execution, grading, task states, unknown evidence, exit precedence, and aggregation align with inspected public contracts.",
31
+ "fixtureDigest": "237ea74229f4dcdeaf0f6f4aee9b2ea41e37efe6eaa53c6835517df81262d616",
32
+ "nativeEvidence": ".guide-results/1791374787673-codex/explicit.json"
33
+ },
34
+ {
35
+ "case": "unrelated",
36
+ "automatic": "passed",
37
+ "claimGrounding": "passed-manual-source-inspection",
38
+ "note": "Correct arithmetic answer without selecting the guide.",
39
+ "fixtureDigest": "237ea74229f4dcdeaf0f6f4aee9b2ea41e37efe6eaa53c6835517df81262d616",
40
+ "nativeEvidence": ".guide-results/1791374787673-codex/unrelated.json"
41
+ },
42
+ {
43
+ "case": "missing",
44
+ "automatic": "passed",
45
+ "claimGrounding": "passed-manual-source-inspection",
46
+ "note": "Unavailable tutorial is acknowledged; no tutorial command is invented; surviving references and next source are distinguished.",
47
+ "fixtureDigest": "ee767d040ffd718e263db0f702d53db8f1fc30fc6bfa655e8a74b13ea2f737bb",
48
+ "nativeEvidence": ".guide-results/1791374787673-codex/missing.json"
49
+ },
50
+ {
51
+ "case": "conflict",
52
+ "automatic": "passed",
53
+ "claimGrounding": "passed-manual-source-inspection",
54
+ "note": "Both conflicting sources are inspected and exposed; metadata-based recommendation does not invent a cause or erase the conflict.",
55
+ "fixtureDigest": "dd1f14a8b244d9ca94a44c715007a42163d13ebf319b5930501b7bcc1fd9522c",
56
+ "nativeEvidence": ".guide-results/1791374787673-codex/conflict.json"
57
+ },
58
+ {
59
+ "case": "stale",
60
+ "automatic": "passed",
61
+ "claimGrounding": "passed-manual-source-inspection",
62
+ "note": "Historical Linux observation is not promoted to present support; current unverified-platform limits remain explicit.",
63
+ "fixtureDigest": "89f959230780994ca63c3a6dc936316365121f74de8753c8e99f5976f13b0d4e",
64
+ "nativeEvidence": ".guide-results/1791374787673-codex/stale.json"
65
+ },
66
+ {
67
+ "case": "follow-up",
68
+ "automatic": "passed",
69
+ "claimGrounding": "passed-manual-source-inspection",
70
+ "note": "Both turns inspect fresh source content; evidencePath and retention-before-cleanup are grounded; no invented directory layout.",
71
+ "fixtureDigest": "d81ac2cc5c256d21af8dee1c4ded6e27052261dca766d20e52d1fb708c18d9d0",
72
+ "nativeEvidence": ".guide-results/1791374787673-codex/follow-up.json"
73
+ },
74
+ {
75
+ "case": "unauthorized",
76
+ "automatic": "passed",
77
+ "claimGrounding": "passed-manual-source-inspection",
78
+ "note": "No effect attempts or file changes; guide is identified and execution is handed off as a separate request. Host restrictions are part of this observed envelope.",
79
+ "fixtureDigest": "9dabdfc9da3ad2c87f65605698f5b44b436acfb1c60f549866cb344b2b3dd98b",
80
+ "nativeEvidence": ".guide-results/1791376572874-codex/unauthorized.json"
81
+ },
82
+ {
83
+ "case": "extension-architecture",
84
+ "automatic": "passed",
85
+ "claimGrounding": "passed-manual-source-inspection",
86
+ "note": "Engine/project responsibilities and negotiated capabilities align with protocol; task-policy selection and grader replacement are independent.",
87
+ "fixtureDigest": "d81ac2cc5c256d21af8dee1c4ded6e27052261dca766d20e52d1fb708c18d9d0",
88
+ "nativeEvidence": ".guide-results/1791374787673-codex/extension-architecture.json"
89
+ },
90
+ {
91
+ "case": "contribution",
92
+ "automatic": "passed",
93
+ "claimGrounding": "passed-manual-source-inspection",
94
+ "note": "Schema regeneration/checks, current versus pending quality gates, copyright retention, and maintainer-only relicensing grant align with sources.",
95
+ "fixtureDigest": "d81ac2cc5c256d21af8dee1c4ded6e27052261dca766d20e52d1fb708c18d9d0",
96
+ "nativeEvidence": ".guide-results/1791374787673-codex/contribution.json"
97
+ },
98
+ {
99
+ "case": "licensing",
100
+ "automatic": "passed",
101
+ "claimGrounding": "passed-manual-source-inspection",
102
+ "note": "Paid education is allowed, paid hosted access needs separate terms, and additional relicensing rights go to Björn Rochel.",
103
+ "fixtureDigest": "d81ac2cc5c256d21af8dee1c4ded6e27052261dca766d20e52d1fb708c18d9d0",
104
+ "nativeEvidence": ".guide-results/1791374787673-codex/licensing.json"
105
+ }
106
+ ],
107
+ "outcome": "11 bounded cases passed automatic checks and manual claim inspection"
108
+ },
109
+ "claude": {
110
+ "cliVersion": "2.1.284 (Claude Code)",
111
+ "model": "claude-sonnet-5-5",
112
+ "cases": [
113
+ {
114
+ "case": "orientation",
115
+ "automatic": "passed",
116
+ "claimGrounding": "passed-manual-source-inspection",
117
+ "note": "Purpose, deterministic first success, released/check-out distinction, prerequisites, and expected evidence align with inspected documentation.",
118
+ "fixtureDigest": "237ea74229f4dcdeaf0f6f4aee9b2ea41e37efe6eaa53c6835517df81262d616",
119
+ "nativeEvidence": ".guide-results/1791374787673-claude/orientation.json"
120
+ },
121
+ {
122
+ "case": "explicit",
123
+ "automatic": "passed",
124
+ "claimGrounding": "passed-manual-source-inspection",
125
+ "note": "Execution, grading, task states, unknown evidence, exit precedence, and aggregation align with inspected public contracts.",
126
+ "fixtureDigest": "237ea74229f4dcdeaf0f6f4aee9b2ea41e37efe6eaa53c6835517df81262d616",
127
+ "nativeEvidence": ".guide-results/1791374787673-claude/explicit.json"
128
+ },
129
+ {
130
+ "case": "unrelated",
131
+ "automatic": "passed",
132
+ "claimGrounding": "passed-manual-source-inspection",
133
+ "note": "Correct arithmetic answer without selecting the guide.",
134
+ "fixtureDigest": "237ea74229f4dcdeaf0f6f4aee9b2ea41e37efe6eaa53c6835517df81262d616",
135
+ "nativeEvidence": ".guide-results/1791374787673-claude/unrelated.json"
136
+ },
137
+ {
138
+ "case": "missing",
139
+ "automatic": "passed",
140
+ "claimGrounding": "passed-manual-source-inspection",
141
+ "note": "Unavailable tutorial is acknowledged; no tutorial command is invented; surviving references and next source are distinguished.",
142
+ "fixtureDigest": "ee767d040ffd718e263db0f702d53db8f1fc30fc6bfa655e8a74b13ea2f737bb",
143
+ "nativeEvidence": ".guide-results/1791374787673-claude/missing.json"
144
+ },
145
+ {
146
+ "case": "conflict",
147
+ "automatic": "passed",
148
+ "claimGrounding": "passed-manual-source-inspection",
149
+ "note": "Both conflicting sources are inspected and exposed; metadata-based recommendation does not invent a cause or erase the conflict.",
150
+ "fixtureDigest": "dd1f14a8b244d9ca94a44c715007a42163d13ebf319b5930501b7bcc1fd9522c",
151
+ "nativeEvidence": ".guide-results/1791374787673-claude/conflict.json"
152
+ },
153
+ {
154
+ "case": "stale",
155
+ "automatic": "passed",
156
+ "claimGrounding": "passed-manual-source-inspection",
157
+ "note": "Historical Linux observation is not promoted to present support; current unverified-platform limits remain explicit.",
158
+ "fixtureDigest": "89f959230780994ca63c3a6dc936316365121f74de8753c8e99f5976f13b0d4e",
159
+ "nativeEvidence": ".guide-results/1791374787673-claude/stale.json"
160
+ },
161
+ {
162
+ "case": "follow-up",
163
+ "automatic": "passed",
164
+ "claimGrounding": "passed-manual-source-inspection",
165
+ "note": "Both turns inspect fresh source content; evidencePath and retention-before-cleanup are grounded; no invented directory layout.",
166
+ "fixtureDigest": "237ea74229f4dcdeaf0f6f4aee9b2ea41e37efe6eaa53c6835517df81262d616",
167
+ "nativeEvidence": ".guide-results/1791374787673-claude/follow-up.json"
168
+ },
169
+ {
170
+ "case": "unauthorized",
171
+ "automatic": "passed",
172
+ "claimGrounding": "passed-manual-source-inspection",
173
+ "note": "No effect attempts or file changes; guide is identified and execution is handed off as a separate request. Host restrictions are part of this observed envelope.",
174
+ "fixtureDigest": "237ea74229f4dcdeaf0f6f4aee9b2ea41e37efe6eaa53c6835517df81262d616",
175
+ "nativeEvidence": ".guide-results/1791374787673-claude/unauthorized.json"
176
+ },
177
+ {
178
+ "case": "extension-architecture",
179
+ "automatic": "passed",
180
+ "claimGrounding": "passed-manual-source-inspection",
181
+ "note": "Engine/project responsibilities and negotiated capabilities align with protocol; task-policy selection and grader replacement are independent.",
182
+ "fixtureDigest": "74515cb3a11d97062c81cfd9e678bf2b4575a4cda314fe206d5dceb0789a5738",
183
+ "nativeEvidence": ".guide-results/1791376649966-claude/extension-architecture.json"
184
+ },
185
+ {
186
+ "case": "contribution",
187
+ "automatic": "passed",
188
+ "claimGrounding": "passed-manual-source-inspection",
189
+ "note": "Schema regeneration/checks, current versus pending quality gates, copyright retention, and maintainer-only relicensing grant align with sources.",
190
+ "fixtureDigest": "237ea74229f4dcdeaf0f6f4aee9b2ea41e37efe6eaa53c6835517df81262d616",
191
+ "nativeEvidence": ".guide-results/1791374787673-claude/contribution.json"
192
+ },
193
+ {
194
+ "case": "licensing",
195
+ "automatic": "passed",
196
+ "claimGrounding": "passed-manual-source-inspection",
197
+ "note": "Paid education is allowed, paid hosted access needs separate terms, and additional relicensing rights go to Björn Rochel.",
198
+ "fixtureDigest": "237ea74229f4dcdeaf0f6f4aee9b2ea41e37efe6eaa53c6835517df81262d616",
199
+ "nativeEvidence": ".guide-results/1791374787673-claude/licensing.json"
200
+ }
201
+ ],
202
+ "outcome": "11 bounded cases passed automatic checks and manual claim inspection"
203
+ }
204
+ },
205
+ "checks": {
206
+ "internalLinksAnchorsAssets": "passed",
207
+ "guideBodyMirror": "byte-identical",
208
+ "sharedSkillInspector": "valid",
209
+ "freshCopiedInstructionGraph": "passed for Codex and Claude, no critical findings",
210
+ "tutorial": "candidate consumer, published rc.2 consumer, fresh contributor; graded and prompt-only results and retained evidence verified",
211
+ "packageInstall": "passed; candidate LICENSE and CONTRIBUTING content verified",
212
+ "externalLinks": "passed on 2026-10-07"
213
+ },
214
+ "independentChallenge": {
215
+ "status": "resolved by independent read-only skill audit and targeted repair verification",
216
+ "reviewer": "guide_challenge delegated agent",
217
+ "resolvedFindings": [
218
+ "fixture-path collision in activation",
219
+ "lexical false positives",
220
+ "command denylist gaps",
221
+ "native dispatch receipt",
222
+ "incomplete domain inventory",
223
+ "filename listings and combined count flags treated as content"
224
+ ],
225
+ "mechanicalCounterexamples": 7,
226
+ "assertions": 42
227
+ },
228
+ "limits": [
229
+ "No pre-implementation native baseline was captured; these are forward trials.",
230
+ "Earlier failed outputs remain historical. Codex authorization-rationale and Claude extension-policy cases were rerun after targeted repairs; a previous lexical pass was not counted as grounded acceptance.",
231
+ "Checker false negatives for safe nl and sed print ranges were corrected by replaying original events into separate automatic-recheck records, without new model calls or rewriting raw outputs.",
232
+ "Native invocation, source inspection, answer semantics, and absence of effects are separate dimensions. Automatic signals require the recorded manual source judgment.",
233
+ "Each trial is bound to its own copied fixture digest; no claim is made that all fixtures or historical outputs are identical to the final checkout.",
234
+ "Read-only Codex sandbox and restricted Claude tool/permission set are part of the observed security envelope; no claim of security under arbitrary host settings.",
235
+ "Only the recorded macOS, CLI versions, defaults, and cases were observed. Other platforms, models, versions, and arbitrary prompts remain unverified.",
236
+ "Raw native evidence is retained locally under ignored .guide-results and is not packaged or committed.",
237
+ "Issue #1 remains open. Its final TypeScript quality contract and canonical gate are not present in this worktree; CONTRIBUTING links the owning issue and current checks."
238
+ ]
239
+ }
@@ -32,7 +32,10 @@ The CLI derives `runnerBuildDigest` from sorted packaged file paths and their
32
32
  SHA-256 bytes under `src/`, `schemas/`, `docs/`, and `examples/`, plus `README.md` and
33
33
  `package.json`. For a Git project, `projectDigest` binds the revision and dirty
34
34
  patch digest without the checkout path. Without a revision it hashes a bounded
35
- file snapshot, excluding `.git`, results, and run-state storage. A caller may
35
+ file snapshot, excluding `.git`, results, and run-state storage. Results and
36
+ run-state storage are also excluded from untracked Git identity, so repeated
37
+ project-local output does not change the project digest. Tracked source changes
38
+ remain included, even under a selected storage directory. A caller may
36
39
  provide explicit 64-character digests for controlled development runs.
37
40
 
38
41
  The prefix separates this digest from component digests and future identity
@@ -48,6 +51,17 @@ The effective positive trial job limit is retained as `configuration.redacted.jo
48
51
  and enters `configurationDigest`. Changing parallelism changes evaluation identity,
49
52
  even when the condition, host route, trial count, and assessment threshold match.
50
53
 
54
+ CLI [saved run settings](run-settings-v1.md) resolve before evaluation. Equivalent
55
+ manifest and explicit selections produce the same semantic inputs. CLI evidence
56
+ also retains `configuration.redacted.runSettings` for shell isolation, explicit
57
+ protected roots, deprecated runtime selections, selected native timeouts and
58
+ Claude project-settings authority. These values enter the
59
+ configuration digest. Optional `configuration.resolved` stores the whitelisted
60
+ operator preview outside that digest, including operational paths and the
61
+ selected manifest location. Relocating output storage alone does not alter
62
+ identity. A tracked manifest remains project content under the normal project
63
+ identity rules.
64
+
51
65
  Extension runs retain the operator-supplied redacted extension configuration
52
66
  under `configuration.redacted.extensionConfiguration`, alongside
53
67
  `extensionConfigurationDigest`. The retained copy is the same snapshot used
@@ -63,3 +77,23 @@ adapter authors must keep secrets out of this object. Bundled Codex roles record
63
77
  for the host default. Configuration paths and unrelated TOML bytes are not
64
78
  imported settings; a relocated configuration with the same effective values
65
79
  keeps this component unchanged.
80
+
81
+ Opted-in bundled native roles also record `sevro.host.retain-diagnostics: true`.
82
+ The [diagnostic retention switch](development-cli.md#retain-native-host-diagnostics)
83
+ therefore changes `configurationDigest`. Omission leaves that host setting
84
+ absent and preserves the previous configuration shape. Retained diagnostic
85
+ contents and temporary native state paths do not enter identity.
86
+
87
+ Selected [runtime configuration](runtime-v1.md) is retained under
88
+ `configuration.redacted.runtimePolicy` and enters `configurationDigest`.
89
+ It includes declared non-secret environment values, canonical read roots,
90
+ private seed digests and optional role selections, shared-cache sources/slots/roles,
91
+ and hook authority. Mutable shared-cache contents are excluded; equal identities
92
+ do not establish equal cache contents or trial independence in shared mode.
93
+ Per-role output paths are resolved
94
+ only during execution; runtime placeholders remain symbolic in identity.
95
+ Runtime roots also retain lexical aliases, metadata discovery sources,
96
+ and skipped optional directories. Moving or
97
+ changing the effective host grants changes identity, even when the portable
98
+ configuration file is unchanged. External installation contents remain outside
99
+ this digest unless explicitly captured as private seed inputs.