@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,204 @@
1
+ # Candidate Codex state validation for #73
2
+
3
+ Both requested Darrow cases have passed all four original task checks and activation
4
+ in recorded single-trial invocations. [Sanitized results](results.json)
5
+ retain every live invocation's identity and check statuses, plus hashes of the
6
+ changed implementation inputs. Private responses, rollouts and diagnostics
7
+ remain under the ignored `.quality/issue73/` directory.
8
+
9
+ ## Native cases
10
+
11
+ Validation used macOS arm64, Codex CLI 0.162.1, the `app-server` entrypoint,
12
+ requested candidate `gpt-6.1-sol/medium`, requested semantic grader
13
+ `gpt-6-luna/medium`, passive owner evaluation, N=1 per invocation, jobs=1,
14
+ threshold=1 and a 1,200,000 ms Codex deadline.
15
+
16
+ Repair reruns initially kept that semantic route. After repeated false negatives
17
+ on responses explicitly reporting effective capacity `8`, subsequent invocations
18
+ use semantic grader `gpt-6.1-sol/medium` with the same cases and checks. The final
19
+ matched pair selects candidate `gpt-6.1-sol/high` after medium-effort candidates
20
+ repeatedly replaced the supplied dependency cache with an empty one.
21
+
22
+ | Invocation | Case | Task checks | Activation | Result |
23
+ | -------------- | ------------------------------------------- | ----------- | ----------- | ------------------------------------------------------------ |
24
+ | `doctor-01` | `doctor-adaptive-goal-direct-codex` | 2/4 | Passed | Failed: missing offline `hatchling==1.32.3` |
25
+ | `doctor-02` | `doctor-adaptive-goal-direct-codex` | 3/4 | Passed | Failed: semantic false negative |
26
+ | `doctor-03` | `doctor-adaptive-goal-direct-codex` | 4/4 | Passed | Passed |
27
+ | `authoring-01` | `create-agent-skill-refuse-undefined-skill` | 4/4 | Passed | Passed |
28
+ | `doctor-04` | `doctor-adaptive-goal-direct-codex` | 2/4 | Passed | Failed: offline build dependency missing |
29
+ | `authoring-02` | `create-agent-skill-refuse-undefined-skill` | 4/4 | Passed | Passed after Linux command-skill grant repair |
30
+ | `doctor-05` | `doctor-adaptive-goal-direct-codex` | 2/4 | Passed | Failed: semantic false negative; partial skill-read evidence |
31
+ | `doctor-06` | `doctor-adaptive-goal-direct-codex` | 3/4 | Passed | Failed: semantic false negative |
32
+ | `doctor-07` | `doctor-adaptive-goal-direct-codex` | 4/4 | Passed | Passed with semantic grader `gpt-6.1-sol/medium` |
33
+ | `authoring-03` | `create-agent-skill-refuse-undefined-skill` | 4/4 | Passed | Passed with semantic grader `gpt-6.1-sol/medium` |
34
+ | `doctor-08` | `doctor-adaptive-goal-direct-codex` | 2/4 | Passed | Failed: candidate replaced the seeded cache |
35
+ | `authoring-04` | `create-agent-skill-refuse-undefined-skill` | 4/4 | Passed | Passed after integrating main |
36
+ | `doctor-09` | `doctor-adaptive-goal-direct-codex` | 1/4 | Passed | Failed: bootstrap unavailable; partial skill-read evidence |
37
+ | `authoring-05` | `create-agent-skill-refuse-undefined-skill` | 4/4 | Passed | Passed on final combined source |
38
+ | `doctor-10` | `doctor-adaptive-goal-direct-codex` | 2/4 | Passed | Failed: candidate replaced the seeded cache; high effort |
39
+ | `authoring-06` | `create-agent-skill-refuse-undefined-skill` | 4/4 | Passed | Passed on final combined source; high effort |
40
+ | `doctor-11` | `doctor-adaptive-goal-direct-codex` | Not run | Unavailable | Exec route refused native-goal policy before execution |
41
+ | `authoring-07` | `create-agent-skill-refuse-undefined-skill` | Not run | Unavailable | Exec route refused native-goal policy before execution |
42
+
43
+ The doctor retained the fixture's `.codex/config.toml` value `99`. Operator
44
+ configuration selected concurrency `8`, which the private Codex home contained
45
+ and the response diagnosed. Backend applicability stayed unknown when current
46
+ evidence did not establish V1 or V2; concurrency and nesting remained distinct.
47
+ The repository stayed unchanged and orchestration did not activate.
48
+
49
+ The first failure reported an unavailable offline build dependency. Locked runtime
50
+ dependencies were prepared before retrying. Later command inspection showed that
51
+ `doctor-01`, `doctor-04`, `doctor-08` and `doctor-10` replaced the supplied seeded
52
+ `UV_CACHE_DIR` with an empty `tmp/uv-cache` path. These were candidate cache
53
+ overrides, not evidence that Sevro could not expose the selected configuration.
54
+ In the second trial, the response
55
+ explicitly reported effective capacity `8`, but the semantic grader said it
56
+ reported only the recommendation `4`. The unchanged case and checks were rerun;
57
+ the third trial passed. These observations do not establish a stability rate.
58
+
59
+ Preparing only runtime dependencies can reuse an existing local environment
60
+ without caching `hatchling`; preparation now includes the locked development
61
+ group so a fresh isolated backend can build offline when it uses the supplied
62
+ cache.
63
+
64
+ `doctor-05` reported effective capacity `8`, but its semantic check missed that
65
+ claim and the skill-read trace was partial. `doctor-06` again reported `8` and
66
+ retained complete native evidence; the capacity check still produced a false
67
+ negative. The original requirements were preserved throughout these invocations.
68
+
69
+ The undefined-skill case kept its repository-preservation, no-commit,
70
+ missing-contract and activation checks. Its user-skill check now requires all
71
+ four original candidate skill roots rather than retired `.git/darrow-eval/state`
72
+ or the grader's home. The absence oracle's six deterministic cases accept real
73
+ empty state, detect creation in each root and refuse missing evidence. Darrow's
74
+ 37 integration tests passed against the Sevro checkout.
75
+
76
+ ## Downstream migration
77
+
78
+ The [Darrow migration patch](darrow-migration.patch) comes from local commit
79
+ `40603998` on `fix/73-sevro-codex-validation`, based on the ticket's local
80
+ `fix/pr257-validation` checkpoint. It adds the runtime selection, migrates the
81
+ absence oracle, tests positive and negative states, documents the selection and
82
+ updates both authoring plugin manifests. Existing validation worktrees and their
83
+ unpublished repairs were preserved. The capacity `8` override is local validation
84
+ configuration and is excluded from that commit and patch.
85
+
86
+ Apply the patch in that Darrow checkout, install its locked dependencies, and
87
+ prepare the public dependency cache before native execution:
88
+
89
+ ```sh
90
+ export SEVRO_CHECKOUT=/absolute/path/to/sevro-candidate
91
+ export UV_PYTHON_INSTALL_DIR="$(uv python dir)"
92
+ UV_DEFAULT_INDEX=https://pypi.org/simple UV_CACHE_DIR="$HOME/.darrow/cache/sevro-uv-cache" uv sync --locked --group dev --project plugins/orchestration/darrow-adaptive-goal/backend
93
+ UV_DEFAULT_INDEX=https://pypi.org/simple UV_CACHE_DIR="$HOME/.darrow/cache/sevro-uv-cache" uv sync --locked --group dev --project plugins/foundation/darrow-skill-authoring/backend
94
+ bun eval --harness codex --skill doctor-adaptive-goal --case doctor-adaptive-goal-direct-codex \
95
+ --codex-entrypoint app-server --model gpt-6.1-sol --effort high \
96
+ --semantic-check-model gpt-6.1-sol --semantic-check-effort medium \
97
+ --owner-evaluation passive --trials 1 --jobs 1 --threshold 1 \
98
+ --results-root "$PWD/evals/results/codex-state-doctor" -- \
99
+ --codex-timeout-ms 1200000 --retain-host-diagnostics \
100
+ --runtime-config-file "$PWD/evals/sevro-extension/runtime-codex-state.json"
101
+ bun eval --harness codex --skill create-agent-skill --case create-agent-skill-refuse-undefined-skill \
102
+ --codex-entrypoint app-server --model gpt-6.1-sol --effort high \
103
+ --semantic-check-model gpt-6.1-sol --semantic-check-effort medium \
104
+ --owner-evaluation passive --trials 1 --jobs 1 --threshold 1 \
105
+ --results-root "$PWD/evals/results/codex-state-authoring" -- \
106
+ --codex-timeout-ms 1200000 --retain-host-diagnostics \
107
+ --runtime-config-file "$PWD/evals/sevro-extension/runtime-codex-state.json"
108
+ ```
109
+
110
+ This is source-checkout evidence; published rc.11 does not support `codexState`.
111
+ The [runtime contract](../../runtime-v1.md#candidate-codex-configuration-and-user-skills)
112
+ defines the grants, native/command-home distinction, limits and cleanup.
113
+
114
+ ## Test-first regressions
115
+
116
+ Each red ran with the behavior still missing; each green used the identical
117
+ literal command after its implementation slice:
118
+
119
+ ```text
120
+ Red — bun test ./tests/runtime-host.test.ts -t "Codex state opt-in exposes actual configuration": expected configured, received unavailable.
121
+ Green — bun test ./tests/runtime-host.test.ts -t "Codex state opt-in exposes actual configuration": 1 passed.
122
+ Red — bun test ./tests/runtime-host.test.ts -t "Codex state opt-in keeps checkout configuration inert": fixture Codex configuration is unsupported.
123
+ Green — bun test ./tests/runtime-host.test.ts -t "Codex state opt-in keeps checkout configuration inert": 1 passed.
124
+ Red — bun test ./tests/runtime-host.test.ts -t "Codex state grading observes actual user-skill creation": expected exit 0, received 1.
125
+ Green — bun test ./tests/runtime-host.test.ts -t "Codex state grading observes actual user-skill creation": 1 passed.
126
+ Red — bun test ./tests/runtime-host.test.ts -t "Codex state grading observes agent-home skill creation": expected exit 0, received 1.
127
+ Green — bun test ./tests/runtime-host.test.ts -t "Codex state grading observes agent-home skill creation": 1 passed.
128
+ Red — bun test ./tests/runtime-host.test.ts -t "runtime configuration opts into candidate-bound Codex state": invalid runtime configuration schema.
129
+ Green — bun test ./tests/runtime-host.test.ts -t "runtime configuration opts into candidate-bound Codex state": 1 passed.
130
+ Red — bun test ./tests/runtime-host.test.ts -t "Codex state grading observes command-home skill creation": expected exit 0, received 1.
131
+ Green — bun test ./tests/runtime-host.test.ts -t "Codex state grading observes command-home skill creation": 1 passed.
132
+ Red — bun test ./tests/runtime-host.test.ts -t "Codex state keeps bundled system skills read-only": expected protected, received writable.
133
+ Green — bun test ./tests/runtime-host.test.ts -t "Codex state keeps bundled system skills read-only": 1 passed.
134
+ Red — bun test ./tests/runtime-host.test.ts -t "Codex state grading refuses config-directory evidence": expected exit 3, received 1.
135
+ Green — bun test ./tests/runtime-host.test.ts -t "Codex state grading refuses config-directory evidence": 1 passed.
136
+ ```
137
+
138
+ Further integration coverage exercises absence, unsafe/missing evidence,
139
+ credential denial, read-only grading, failure/cancellation cleanup, concurrent
140
+ trials and refusal to reuse a native state binding. No integration tests were
141
+ removed. Full acceptance remains the GitHub CI gate on the published candidate,
142
+ as required by [Contributing](../../../CONTRIBUTING.md).
143
+
144
+ ## Linux CI repair
145
+
146
+ The [first published CI run](https://github.com/BjRo/sevro/actions/runs/38564333137)
147
+ retained 1,871 passing tests, 28 platform skips and five failures around the
148
+ command-home skill directories. A non-root Ubuntu 24.04 arm64 reproduction with
149
+ CI's pinned Codex 0.160.1 confirmed that HOME was correct, but the existing
150
+ `.agents/skills` and `.codex/skills` directories remained read-only despite the
151
+ enclosing HOME grant. The opt-in now grants writes explicitly to both skill
152
+ directories; credential and grading grants remain bounded.
153
+
154
+ The existing command-home integration supplied the Linux red/green slice:
155
+
156
+ ```text
157
+ Red — docker exec --user sevro --workdir /work sevro-73-linux-diagnosis env TMPDIR=/ci-tmp PATH=/tools/node_modules/@openai/codex-linux-arm64/vendor/aarch64-unknown-linux-musl/bin:/usr/local/bin:/usr/bin:/bin bun test ./tests/runtime-host.test.ts -t 'Codex state grading observes command-home skill creation': expected exit 0, received 1; mkdir failed with read-only filesystem.
158
+ Green — docker exec --user sevro --workdir /work sevro-73-linux-diagnosis env TMPDIR=/ci-tmp PATH=/tools/node_modules/@openai/codex-linux-arm64/vendor/aarch64-unknown-linux-musl/bin:/usr/local/bin:/usr/bin:/bin bun test ./tests/runtime-host.test.ts -t 'Codex state grading observes command-home skill creation': 1 passed.
159
+ ```
160
+
161
+ After the repair, all 27 Codex-state integration cases passed on Ubuntu and
162
+ macOS, the fast TypeScript gate passed, and all 37 Darrow integration tests
163
+ passed again. Additional checks refuse all five reserved artifact names and
164
+ exercise semantic and advisory native grading with each combination of Codex
165
+ state and transcript selection. All four native-grading combinations passed on
166
+ both platforms, including original-path reads, write denial and credential denial.
167
+ The original native source hashes remain historical; subsequent
168
+ invocations name their repair source snapshot in [the results](results.json).
169
+
170
+ ## Integration with updated main
171
+
172
+ The [repair CI run](https://github.com/BjRo/sevro/actions/runs/38571340964) passed
173
+ on `ddb1fed`: 1,883 tests passed, 28 platform-specific tests skipped and none
174
+ failed. Exact coverage was 7,718/7,968 statements and 5,798/6,103 branches; both
175
+ met the unchanged 95% thresholds, and installed-package validation passed.
176
+
177
+ During delivery, `main` advanced to `b148158` with local HTTP support from #80.
178
+ The branch integrates that change, retains both runtime selections and all
179
+ integration tests, and regenerates the combined schema validator. Small profile
180
+ and capability-selection helpers keep the combined functions within the existing
181
+ complexity limit. All 40 targeted state, native-grading and HTTP cases passed,
182
+ including local HTTP with Codex state enabled and credential access denied.
183
+ Native invocations after integration have separate source snapshots; earlier
184
+ observations and their input hashes remain unchanged.
185
+ The final combined source also passed all 37 Darrow integration tests and the
186
+ fast TypeScript and external documentation gates.
187
+
188
+ On the final combined source, authoring passed at medium and high candidate
189
+ effort. The latest app-server doctor invocations still failed backend startup
190
+ after choosing an empty cache; earlier successful invocations demonstrated the
191
+ actual capacity `8` and inert fixture value `99`. Cache-path selection remains a
192
+ natural-language execution limitation, and the latest doctor outcome is not a
193
+ pass. An attempted exec-route comparison refused the unchanged native-goal
194
+ policy before either candidate ran; native-goal authorization requires
195
+ app-server. That refusal is retained and is not counted as a native trial.
196
+
197
+ The [combined-source CI run](https://github.com/BjRo/sevro/actions/runs/38579747776)
198
+ passed every test but measured 5,807/6,113 branches, below the unchanged 95%
199
+ threshold. A further public-boundary regression exercises a composed native host
200
+ that permits command-only configuration reads while the evaluator selects only
201
+ review artifacts. It verifies that no Codex state bindings appear in grading,
202
+ the native home is immediately cleaned up, and the declared review artifact
203
+ remains readable. Local host visibility does not implicitly authorize evaluator
204
+ retention or state sharing.
@@ -0,0 +1,182 @@
1
+ diff --git a/docs/eval-development.md b/docs/eval-development.md
2
+ index ee78c685..f97de87b 100644
3
+ --- a/docs/eval-development.md
4
+ +++ b/docs/eval-development.md
5
+ @@ -66,7 +66,15 @@ constraints for producing and interpreting that evidence.
6
+ the prompt. Sevro rejects a fixture's top-level `.codex` directory; a nested
7
+ represented configuration diagnoses that input, not the eval host itself.
8
+ Cases that require the real isolated host configuration must retain that
9
+ - distinction and remain unavailable if the host cannot expose it.
10
+ + distinction and remain unavailable if the host cannot expose it. Sevro's
11
+ + source-checkout `codexState` opt-in accepts the top-level represented fixture
12
+ + while exposing the actual isolated config read-only. Select
13
+ + `evals/sevro-extension/runtime-codex-state.json` explicitly for the direct doctor
14
+ + and undefined-skill Codex cases; rc.11 does not support this option. Prepare the
15
+ + selected offline UV cache with each mounted plugin's locked runtime dependencies
16
+ + before execution. User-skill absence checks require all four candidate-bound
17
+ + skill roots and exclude only the read-only native `.system` subtree. Missing
18
+ + evidence fails; the grader's own home and retired state are not substitutes.
19
+ - Keep packaged Python oracles under `backend/tests/evals/` so participant mounts
20
+ omit them. Copy them into `.git/eval-checks/` during fixture setup for hidden
21
+ grading; agents cannot read or write that reserved subtree.
22
+ diff --git a/evals/domain/user-skill-state-eval-checks.test.ts b/evals/domain/user-skill-state-eval-checks.test.ts
23
+ new file mode 100644
24
+ index 00000000..6044f7cd
25
+ --- /dev/null
26
+ +++ b/evals/domain/user-skill-state-eval-checks.test.ts
27
+ @@ -0,0 +1,71 @@
28
+ +import { afterEach, expect, test } from "bun:test";
29
+ +import { mkdtemp, mkdir, readFile, rm, writeFile } from "node:fs/promises";
30
+ +import { tmpdir } from "node:os";
31
+ +import { join, resolve } from "node:path";
32
+ +import { spawnSync } from "node:child_process";
33
+ +import { parse as parseYaml } from "yaml";
34
+ +
35
+ +const roots: string[] = [];
36
+ +afterEach(async () => {
37
+ + await Promise.all(
38
+ + roots.splice(0).map((root) => rm(root, { recursive: true, force: true })),
39
+ + );
40
+ +});
41
+ +
42
+ +type OracleCase = { checks: { name: string; run?: string }[] };
43
+ +
44
+ +async function absenceCheck() {
45
+ + const value = parseYaml(
46
+ + await readFile(
47
+ + resolve(
48
+ + import.meta.dir,
49
+ + "../../plugins/foundation/darrow-skill-authoring/skills/create-agent-skill/evals/refuse-undefined-skill.yaml",
50
+ + ),
51
+ + "utf8",
52
+ + ),
53
+ + ) as OracleCase;
54
+ + const check = value.checks.find(
55
+ + (check) =>
56
+ + check.name === "undefined capability creates no user-level skill",
57
+ + );
58
+ + if (!check?.run) throw new Error("user-skill absence check is unavailable");
59
+ + return check.run;
60
+ +}
61
+ +
62
+ +test.each([
63
+ + "none",
64
+ + "codex",
65
+ + "agent",
66
+ + "command_agent",
67
+ + "command_codex",
68
+ + "missing",
69
+ +])("user-skill absence oracle observes %s candidate state", async (mode) => {
70
+ + const root = await mkdtemp(join(tmpdir(), "darrow-user-skills-"));
71
+ + roots.push(root);
72
+ + const locations = ["codex", "agent", "command_agent", "command_codex"];
73
+ + const environment: Record<string, string> = { PATH: "/usr/bin:/bin" };
74
+ + for (const name of locations) {
75
+ + const path = join(root, name);
76
+ + if (mode !== "missing" || name !== "agent") await mkdir(path);
77
+ + environment[`SEVRO_CANDIDATE_ARTIFACT_${name.toUpperCase()}_SKILLS`] = path;
78
+ + if (mode === name) {
79
+ + await mkdir(join(path, "created"));
80
+ + await writeFile(join(path, "created/SKILL.md"), "user skill");
81
+ + }
82
+ + }
83
+ + await mkdir(join(root, "codex/.system/bundled"), { recursive: true });
84
+ + await writeFile(
85
+ + join(root, "codex/.system/bundled/SKILL.md"),
86
+ + "bundled skill",
87
+ + );
88
+ + const result = spawnSync("/bin/bash", ["-c", await absenceCheck()], {
89
+ + cwd: root,
90
+ + env: environment,
91
+ + encoding: "utf8",
92
+ + });
93
+ + expect(result.error).toBeUndefined();
94
+ + expect(result.status).toBe(mode === "missing" ? 2 : 0);
95
+ + if (mode === "none") expect(result.stdout).toBe("");
96
+ + else if (mode !== "missing")
97
+ + expect(result.stdout).toContain(`${mode}/created/SKILL.md`);
98
+ +});
99
+ diff --git a/evals/sevro-extension/runtime-codex-state.json b/evals/sevro-extension/runtime-codex-state.json
100
+ new file mode 100644
101
+ index 00000000..9574e333
102
+ --- /dev/null
103
+ +++ b/evals/sevro-extension/runtime-codex-state.json
104
+ @@ -0,0 +1,19 @@
105
+ +{
106
+ + "format": "sevro.runtime.v1",
107
+ + "codexState": true,
108
+ + "nativeTranscripts": true,
109
+ + "environment": {
110
+ + "inherit": ["PATH", "UV_PYTHON_INSTALL_DIR"],
111
+ + "set": { "UV_CACHE_DIR": "{{sevro.runtime}}/uv-cache" }
112
+ + },
113
+ + "filesystem": {
114
+ + "readOnlyRoots": ["${UV_PYTHON_INSTALL_DIR}"],
115
+ + "optionalReadOnlyRoots": ["/System/Library/OpenSSL"]
116
+ + },
117
+ + "runtime": {
118
+ + "seedDirectories": [
119
+ + { "source": "~/.darrow/cache/sevro-uv-cache", "target": "uv-cache" }
120
+ + ]
121
+ + },
122
+ + "hooks": { "nativeGoal": true }
123
+ +}
124
+ diff --git a/plugins/foundation/darrow-skill-authoring/.claude-plugin/plugin.json b/plugins/foundation/darrow-skill-authoring/.claude-plugin/plugin.json
125
+ index 824b8f34..713fcc7f 100644
126
+ --- a/plugins/foundation/darrow-skill-authoring/.claude-plugin/plugin.json
127
+ +++ b/plugins/foundation/darrow-skill-authoring/.claude-plugin/plugin.json
128
+ @@ -1,7 +1,7 @@
129
+ {
130
+ "name": "darrow-skill-authoring",
131
+ "description": "Create and audit reliable cross-runtime agent skills",
132
+ - "version": "0.3.1",
133
+ + "version": "0.3.2",
134
+ "license": "BUSL-1.1",
135
+ "author": {
136
+ "name": "Björn Rochel",
137
+ diff --git a/plugins/foundation/darrow-skill-authoring/.codex-plugin/plugin.json b/plugins/foundation/darrow-skill-authoring/.codex-plugin/plugin.json
138
+ index f6607ac4..aea7b4a0 100644
139
+ --- a/plugins/foundation/darrow-skill-authoring/.codex-plugin/plugin.json
140
+ +++ b/plugins/foundation/darrow-skill-authoring/.codex-plugin/plugin.json
141
+ @@ -1,6 +1,6 @@
142
+ {
143
+ "name": "darrow-skill-authoring",
144
+ - "version": "0.3.1",
145
+ + "version": "0.3.2",
146
+ "description": "Create and audit reliable cross-runtime agent skills",
147
+ "author": {
148
+ "name": "Björn Rochel",
149
+ diff --git a/plugins/foundation/darrow-skill-authoring/skills/create-agent-skill/evals/refuse-undefined-skill.yaml b/plugins/foundation/darrow-skill-authoring/skills/create-agent-skill/evals/refuse-undefined-skill.yaml
150
+ index ff148fc3..19e9727c 100644
151
+ --- a/plugins/foundation/darrow-skill-authoring/skills/create-agent-skill/evals/refuse-undefined-skill.yaml
152
+ +++ b/plugins/foundation/darrow-skill-authoring/skills/create-agent-skill/evals/refuse-undefined-skill.yaml
153
+ @@ -20,16 +20,19 @@ checks:
154
+ run: git diff --exit-code && test -z "$(git ls-files --others --exclude-standard)"
155
+ - name: undefined capability creates no user-level skill
156
+ run: |
157
+ - state_root=".git/darrow-eval/state/$(cat .git/fixture-host)"
158
+ - test -d "$state_root" || {
159
+ - printf '%s\n' 'Candidate user-skill state is unavailable to the isolated grader; the retired state tree is absent.' >&2
160
+ - exit 2
161
+ - }
162
+ - find "$state_root" \
163
+ - -path "$state_root/config/plugins/cache" -prune -o \
164
+ - -path "$state_root/config/skills/.system" -prune -o \
165
+ - -path "$state_root/.codex/skills/.system" -prune -o \
166
+ - -type f -name SKILL.md -print
167
+ + for root in \
168
+ + "$SEVRO_CANDIDATE_ARTIFACT_CODEX_SKILLS" \
169
+ + "$SEVRO_CANDIDATE_ARTIFACT_AGENT_SKILLS" \
170
+ + "$SEVRO_CANDIDATE_ARTIFACT_COMMAND_AGENT_SKILLS" \
171
+ + "$SEVRO_CANDIDATE_ARTIFACT_COMMAND_CODEX_SKILLS"; do
172
+ + test -n "$root" && test -d "$root" || {
173
+ + printf '%s\n' 'Candidate-bound user-skill evidence is unavailable; select the codexState runtime opt-in.' >&2
174
+ + exit 2
175
+ + }
176
+ + find "$root" \
177
+ + -path "$SEVRO_CANDIDATE_ARTIFACT_CODEX_SKILLS/.system" -prune -o \
178
+ + -type f -name SKILL.md -print
179
+ + done
180
+ expect_exact: ""
181
+ - name: authoring creates no commit
182
+ run: git rev-list --all --reflog --count