Reactivate the agentic eval against the rebuilt CLI - #183
Merged
Conversation
The eval workflow and its prompt still spoke the pre-rebuild language — the Snakemake shim, `lc run <output_id> --universe`, ok/stale/missing states, the Containerfile + requirements.txt environment. Bring both up to what the CLI is now: - prompt.md: `lc materialize` is the build verb and `lc run` the probe; states are current/behind/stale and `lc materialize --check` is the gate; recipes import from the project's own locked environment (`uv add`, never `uv pip`) under the sandbox; a run refuses a dirty tree, so the agent commits its edits with plain git; `results/` is the engine's to write, and a foreign write is detected. The seed spec is now stated to be deliberately incomplete — completing the recipe templates and dependency contracts is part of the task. - eval.yml: the check step gates on `lc materialize --check --json` (plus a non-empty `.current`) instead of a jq shape no verb emits; setup seeds numpy/scipy/matplotlib into the project with `uv add` and commits the seed so the agent starts from a clean tree; the repo-venv `uv pip install` is dropped (recipes never saw it); the dormant PR plumbing gets its trigger back as a `run-eval` label; the artifact exclusions swap `.snakemake/` for `.lightcone/`. - The seed astra.yaml drops its `container:` key — the directive is ignored by decision, and no Containerfile exists to point at. - trace-analysis-prompt.md names the sandbox instead of the container environment. Verified locally: the seed validates against astra-tools 0.2.16, and the setup + check plumbing runs end-to-end against today's `lc` (the gate correctly fails with all three outputs planned on the unbuilt project). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DJzmp2MUhwiNHR94cB91dx
The setup step no longer pre-seeds numpy/scipy/matplotlib — declaring what the recipes import is part of what the eval measures. In exchange the prompt spells out the uv workflow: the project starts with no dependencies, `uv add` is the one way packages reach a recipe (it edits pyproject.toml, re-locks, and syncs in one step, and the result is committed like any other edit), and lock-bypassing installs reach nothing a recipe sees. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DJzmp2MUhwiNHR94cB91dx
✅ Eval
lc statusConfusion & pain points (Claude analysis)Confusion & pain points
Full trace: |
The engine is the host's uv tool, so the eval now installs it that way: `uv tool install` of the checkout — the commit under test, stamped into the version by hatch-vcs — links lc and, through the mirrored entry points, the git-annex executables, exercising the exact mechanism a user's `uv tool install lightcone-cli` relies on. astra's executable belongs to astra-tools and becomes its own tool install, pinned to the branch's dependency version. The repo venv and its activation are gone with `uv sync`; nothing sets VIRTUAL_ENV anymore, which also removes the benign environment-mismatch warning uv printed at every project-scoped `uv add`. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DJzmp2MUhwiNHR94cB91dx
After every output is materialized, the agent is asked to declare an SPDX license in pyproject.toml and materialize once more — publication intent derived exactly as layer 8 designed it, and the crate converges on a run that remakes nothing. The check step gates on the crate file existing, so the RO-Crate path is exercised by every eval run instead of warning its absence into the report. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DJzmp2MUhwiNHR94cB91dx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The eval workflow and its prompt were written for the pre-rebuild CLI — the Snakemake shim,
lc run <output_id> --universe,ok/stale/missingstates, the Containerfile +requirements.txtcontainer model. With layer 8 landed, this brings the eval back in line with whatlcactually is.evals/prompt.md(rewritten)lc materializeis the build verb;lc run <command>is the probe. States arecurrent/behind/stale,lc statusalways exits 0, andlc materialize --checkis the gate.uv addin the project root (what the denial messages recommend);uv pipreaches nothing a recipe sees.git add/git commit(the annex filter is transparent — nobody runs a git-annex command).results/is the engine's to write; a hand-placed file is now detected as a foreign write and remade — the old "fails verification" warning got teeth.{output},{inputs.<id>},{decisions.<id>}, and the matchinginputs:/decisions:lists) is part of the task. This makes the existing seed's shape an intentional test of spec literacy rather than a leftover.astra guide, astra-tools 0.2.16)..github/workflows/eval.yml.universes[].outputs[],"ok","alias") matches nothing any verb emits now. Replaced with the designed gate —lc materialize --check --json | jq -e '.up_to_date and ((.current | length) > 0)'— which exits nonzero while anything is planned or failed, plus the non-emptiness guard the old check had.behinddeliberately does not fail the gate.uv add, spelled out in the prompt) is part of what the eval measures; the repo-venvuv pip installis dropped (it never reached recipes). Setup commits the seed —lc initnever commits, and the firstlc materializewould otherwise be refused on a dirty tree before the agent did anything.pull_request: types: [labeled]gated on arun-evallabel, alongsideworkflow_dispatch..snakemake/**exclusion →.lightcone/**; keeping.gitviainclude-hidden-filesis now a feature — the run records and annexed results are the provenance.uv tool installof the checkout (the commit under test, stamped into the version by hatch-vcs) linkslcand the four git-annex executables through the mirrored entry points, exercising the exact mechanism a user install relies on; astra-tools is its own tool install, pinned to the branch dependency. No venv is activated, so the runner needs no system git-annex andVIRTUAL_ENVis never set.Seed + trace prompt
evals/tasks/snae/astra.yamldropscontainer: Containerfile— the directive is ignored by recorded decision, and no Containerfile exists to point at.trace-analysis-prompt.mdnames the sandbox instead of the container environment.Verified locally
lc:lc init→ overlay →astra universe generate -n baseline→uv add→ seed commit →lc status(three outputs, direct mode, landlock) → the--checkgate correctly failing with all three outputs planned on the unbuilt project.The agent step itself (Claude Code + astra plugin) is unchanged and needs a real dispatch run to shake out — suggest a
workflow_dispatchon this branch once merged, or label this PRrun-eval.🤖 Generated with Claude Code
https://claude.ai/code/session_01DJzmp2MUhwiNHR94cB91dx