@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.
- package/CONTRIBUTING.md +170 -0
- package/LICENSE +63 -136
- package/README.md +83 -66
- package/docs/README.md +44 -0
- package/docs/acknowledgements.md +14 -0
- package/docs/architecture.md +146 -0
- package/docs/assets/README.md +27 -0
- package/docs/assets/sevro-logo.png +0 -0
- package/docs/assets/sevro-symbol.svg +1 -0
- package/docs/assets/sevro-wordmark.svg +1 -0
- package/docs/builtin-graders-v1.md +41 -13
- package/docs/codex-host.md +184 -52
- package/docs/contracts.md +19 -0
- package/docs/creating-cases.md +139 -0
- package/docs/development-cli.md +190 -30
- package/docs/documentation-quality.md +61 -0
- package/docs/evaluation-workflow.md +110 -0
- package/docs/evidence/code-mode-controls-71.md +64 -0
- package/docs/evidence/code-mode-programs-85.md +64 -0
- package/docs/evidence/codex-state-73/README.md +204 -0
- package/docs/evidence/codex-state-73/darrow-migration.patch +182 -0
- package/docs/evidence/codex-state-73/results.json +661 -0
- package/docs/evidence/local-http-74.md +104 -0
- package/docs/evidence/runtime-startup-30/README.md +185 -0
- package/docs/evidence/runtime-startup-30/after.json +319 -0
- package/docs/evidence/runtime-startup-30/baseline-timeout.jsonl +2 -0
- package/docs/evidence/runtime-startup-30/before.json +403 -0
- package/docs/evidence/runtime-startup-30/consumer-smoke.json +63 -0
- package/docs/evidence/runtime-startup-30/full-policy-diagnostic.jsonl +3 -0
- package/docs/evidence/runtime-startup-30/minimal-policy-diagnostic.jsonl +3 -0
- package/docs/evidence/runtime-startup-30/plugin-template-assessment.json +20 -0
- package/docs/evidence/runtime-startup-30/seedless-timeout.jsonl +2 -0
- package/docs/evidence/skill-reads-70/results.json +823 -0
- package/docs/evidence.md +21 -0
- package/docs/extension-protocol-v1.md +50 -16
- package/docs/fixture-cleanup-validation.md +3 -0
- package/docs/getting-started.md +102 -0
- package/docs/guide-evaluation.md +89 -0
- package/docs/guide-verification.json +239 -0
- package/docs/identity-v1.md +35 -1
- package/docs/installing.md +88 -0
- package/docs/licenses/BUSL-1.1-0.1.0-rc.2.txt +159 -0
- package/docs/licensing.md +42 -0
- package/docs/native-controls.md +76 -5
- package/docs/native-hosts.md +228 -0
- package/docs/reading-results.md +141 -0
- package/docs/recipes.md +489 -0
- package/docs/releases.md +81 -40
- package/docs/report-v1.md +29 -1
- package/docs/results-v1.md +180 -0
- package/docs/run-settings-v1.md +147 -0
- package/docs/running-evaluations.md +31 -0
- package/docs/runtime-v1.md +614 -0
- package/docs/specs/repository-guide.md +58 -0
- package/docs/troubleshooting.md +30 -0
- package/docs/typescript-quality.md +234 -0
- package/docs/usability-study.md +114 -0
- package/examples/basic/host.ts +2 -2
- 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 +39 -6
- package/schemas/report-v1.schema.json +9 -0
- package/schemas/run-evidence-v1.schema.json +2 -1
- package/schemas/runtime-v1.schema.json +193 -0
- package/src/advisory.ts +10 -5
- package/src/candidate-artifacts.ts +208 -0
- package/src/candidate-codex-state.ts +185 -0
- package/src/case-validation.ts +105 -0
- package/src/cli/cancellation.ts +20 -0
- package/src/cli/command.ts +81 -0
- package/src/cli/completion.ts +15 -0
- package/src/cli/demo.ts +59 -0
- package/src/cli/evaluation.ts +55 -0
- package/src/cli/extension.ts +79 -0
- package/src/cli/help.ts +222 -0
- package/src/cli/hosts.ts +59 -0
- package/src/cli/init-settings.ts +30 -0
- package/src/cli/init.ts +111 -0
- package/src/cli/invocation.ts +627 -0
- package/src/cli/loading.ts +151 -0
- package/src/cli/preparation.ts +163 -0
- package/src/cli/presentation.ts +91 -0
- package/src/cli/progress.ts +6 -0
- package/src/cli/run-manifest.ts +133 -0
- package/src/cli/run-options.ts +101 -0
- package/src/cli/run-overrides.ts +83 -0
- package/src/cli/settings.ts +160 -0
- package/src/cli/summary.ts +43 -0
- package/src/cli.ts +13 -843
- package/src/contract-types.ts +94 -0
- package/src/engine.ts +19 -2373
- package/src/evaluation/advisory.ts +150 -0
- package/src/evaluation/check-plan.ts +510 -0
- package/src/evaluation/collection.ts +88 -0
- package/src/evaluation/context.ts +10 -0
- package/src/evaluation/grading-host.ts +39 -0
- package/src/evaluation/grading.ts +258 -0
- package/src/evaluation/invocation-plan.ts +548 -0
- package/src/evaluation/plan.ts +736 -0
- package/src/evaluation/progress.ts +19 -0
- package/src/evaluation/resources.ts +241 -0
- package/src/evaluation/run.ts +206 -0
- package/src/{trial-scheduler.ts → evaluation/scheduler.ts} +3 -1
- package/src/evaluation/semantic.ts +312 -0
- package/src/evaluation/trial.ts +866 -0
- package/src/evaluation/types.ts +207 -0
- package/src/evidence/host-results.ts +92 -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 +228 -148
- package/src/extension-session.ts +326 -195
- package/src/fixtures/advisory.ts +338 -0
- package/src/fixtures/bin.ts +57 -0
- package/src/{fixture-cleanup.ts → fixtures/cleanup.ts} +13 -7
- package/src/fixtures/create.ts +187 -0
- package/src/fixtures/generated.ts +300 -0
- package/src/fixtures/git-hooks.ts +24 -0
- package/src/fixtures/preparation.ts +270 -0
- package/src/{repository-fixture.ts → fixtures/repository.ts} +207 -85
- package/src/fixtures/setup.ts +224 -0
- package/src/fixtures/tools.ts +88 -0
- package/src/fixtures/workspace-state.ts +212 -0
- package/src/generated/cli-result.cjs +2 -0
- package/src/generated/cli-result.d.cts +3 -0
- package/src/generated/extension.cjs +2 -0
- package/src/generated/extension.d.cts +3 -0
- package/src/generated/report.cjs +2 -0
- package/src/generated/report.d.cts +3 -0
- package/src/generated/run-evidence.cjs +2 -0
- package/src/generated/run-evidence.d.cts +3 -0
- package/src/generated/runtime.cjs +2 -0
- package/src/generated/runtime.d.cts +3 -0
- package/src/graders/artifact.ts +56 -23
- package/src/graders/git-head.ts +79 -75
- package/src/graders/output.ts +222 -140
- package/src/graders/semantic.ts +102 -43
- package/src/graders/shell.ts +379 -207
- package/src/host-diagnostic-redaction.ts +52 -0
- package/src/host-diagnostics.ts +319 -0
- package/src/hosts/claude-continuation.ts +63 -18
- package/src/hosts/claude-credential.ts +43 -62
- package/src/hosts/claude-events.ts +86 -51
- package/src/hosts/claude-keychain.ts +59 -0
- package/src/hosts/claude-native-goal.ts +57 -33
- package/src/hosts/claude-process.ts +111 -0
- package/src/hosts/claude-repository-invocation.ts +208 -117
- package/src/hosts/claude-settings.ts +240 -21
- package/src/hosts/claude-skill-activations.ts +166 -0
- package/src/hosts/claude-state.ts +403 -0
- package/src/hosts/claude-tool-calls.ts +171 -106
- package/src/hosts/claude.ts +561 -451
- package/src/hosts/codex-app-server.ts +326 -178
- package/src/hosts/codex-configuration.ts +44 -18
- package/src/hosts/codex-events.ts +97 -60
- package/src/hosts/codex-exec-controls.ts +516 -0
- package/src/hosts/codex-invocation.ts +70 -0
- package/src/hosts/codex-marketplace.ts +283 -0
- package/src/hosts/codex-native-calls.ts +546 -500
- package/src/hosts/codex-process.ts +202 -0
- package/src/hosts/codex-profile.ts +257 -28
- package/src/hosts/codex-session-files.ts +106 -0
- package/src/hosts/codex-state.ts +492 -0
- package/src/hosts/codex.ts +783 -832
- package/src/hosts/isolation-common.ts +94 -0
- package/src/hosts/isolation-roots.ts +54 -27
- package/src/hosts/isolation.ts +10 -0
- package/src/hosts/linux-sandbox.ts +159 -0
- package/src/hosts/mac-sandbox.ts +187 -61
- package/src/hosts/native-controls.ts +152 -62
- package/src/hosts/process-lifecycle.ts +37 -0
- package/src/hosts/protected-worktrees.ts +51 -19
- package/src/hosts/skill-hook-catalog.ts +131 -0
- package/src/hosts/skill-hook-handler.ts +374 -0
- package/src/hosts/skill-hooks.ts +580 -0
- package/src/hosts/workspace-fingerprint.ts +55 -35
- package/src/identity.ts +102 -48
- package/src/instrumentation.ts +109 -48
- package/src/native-transcript-state.ts +131 -0
- package/src/native-transcript-view.ts +90 -0
- package/src/native-transcripts.ts +286 -0
- package/src/process-lifecycle.ts +150 -0
- package/src/provenance.ts +161 -81
- package/src/prune.ts +215 -0
- package/src/report.ts +172 -140
- package/src/resolved-case.ts +33 -0
- package/src/results-lock.ts +29 -0
- package/src/results.ts +133 -86
- package/src/run-owner.ts +154 -63
- package/src/runtime/config.ts +456 -0
- package/src/runtime/discovery-apple.ts +90 -0
- package/src/runtime/discovery-providers.ts +63 -0
- package/src/runtime/discovery.ts +70 -0
- package/src/runtime/hook-processes.ts +97 -0
- package/src/runtime/hooks.ts +476 -0
- package/src/runtime/paths.ts +313 -0
- package/src/runtime/query.ts +85 -0
- package/src/runtime/seeds.ts +134 -0
- package/src/runtime/shared-cache.ts +143 -0
- package/src/runtime/state.ts +143 -0
- package/src/schema-types.ts +198 -0
- package/src/schema.ts +15 -19
- package/src/transcript-retention.ts +146 -0
- package/src/value-guards.ts +20 -0
- package/src/advisory-fixture.ts +0 -282
- package/src/fixture-bin.ts +0 -87
- package/src/fixture-setup.ts +0 -163
- package/src/generated-fixture.ts +0 -220
- package/src/git-hooks.ts +0 -63
- package/src/hosts/claude-nested-skills.ts +0 -218
- package/src/hosts/codex-command-output.ts +0 -399
- package/src/hosts/codex-executor-command.ts +0 -195
- package/src/hosts/codex-skill-reads.ts +0 -391
- 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
|