Skip to content

feat(eval): repo-shaped workflow tasks with CI-checked reference solutions - #2642

Merged
chaliy merged 3 commits into
mainfrom
claude/eval-repo-tasks
Oct 8, 2026
Merged

chaliy merged 3 commits into
mainfrom
claude/eval-repo-tasks

Conversation

@chaliy

@chaliy chaliy commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Requested by Михайло · project thread

What changed

  • New eval bashkit_repo (just eval-repo, data/repo-workflow.jsonl, category repo_workflow): 8 multi-step, repo-shaped tasks. Clone a fixture repo, run make test, fix the failing code, commit; switch a current -> releases/vN symlink; fix a tool on PATH=$PWD/bin:$PATH; shard work with & + wait $pid; jq config validation; release-branch version bump; a runner whose bare wait hides failures. Kept separate from bashkit_bash so existing scores stay comparable.
  • Tasks get an optional setup script (builds the fixture git repo, symlinks, exec bits); new checks file_not_contains and symlink. Each task also checks the model didn't edit tests/golden files instead of code.
  • CI keeps tasks solvable: reference_solutions_pass_all_checks runs a reference solution per task through bashkit and every check; untouched_fixture_does_not_pass proves doing nothing scores zero.
  • bashkit fixes found by the reference solutions (failing test first, each verified against real bash/coreutils/git):
    • ln -sfn / -T / -v / long options and GNU directory-destination rules (ln -sf f dir links inside dir).
    • Entries created under a symlinked directory land in the target (mkdir via/sub listed nothing before).
    • sed -i (overlay rename) keeps the file mode, so an executable stays executable.
    • git add -A/-u, git commit -am, git clone /local/path (or file://) inside the sandbox.

Why

Level-up roadmap, Step 5 "Harder evals": repo-shaped tasks that exercise symlinks, PATH, background jobs and git together. (Python is out of scope for this roadmap, so no python tasks.)

Before / After (verified)

ln -s releases/v1 current; ln -sfn releases/v2 current; readlink current
output
GNU coreutils releases/v2
main ln: invalid option -- 'n'
this branch releases/v2

chmod +x bin/t; sed -i s/a/b/ bin/t; bin/t: main gave Permission denied, this branch runs it. git commit -am msg: main failed with "switch 'm' requires a value", this branch commits.

Reference solutions: 8/8 tasks pass all checks; untouched fixtures: 0/8.

Risk

  • bashkit-eval now enables the git feature (bashkit-cli and bashkit-capi already did).
  • Symlink/overlay changes are filesystem-security-adjacent: no-overwrite guarantee from DeepSec: ln -f continues after failed destination removal #1577 kept; TM-GIT-005 added for local clone (copies only within the sandbox VFS).
  • No LLM run yet (needs the mira toolchain); git gaps that remain are listed in knowledge/integrations/git-support.md (no content tracking in status, timestamp hashes, log --oneline ignored).

Checklist

  • Failing tests first, verified against real bash/coreutils/git
  • fmt, clippy (bashkit-eval, bashkit --features git), cargo test -p bashkit-eval (42), lib, integration (+git), check-okf
  • knowledge updated (eval, git-support, threat-model, log)

Generated by Claude Code

chaliy added 3 commits October 8, 2026 13:24
…eps mode

- ln: accept -n/-T/-v and long options; a directory destination (following
  a symlink unless -n) receives DIR/basename(TARGET); -sfn replaces a link
  to a directory; a real directory is never replaced (issue #1577 kept)
- InMemoryFs: mkdir (non-recursive) and symlink require a directory parent,
  so the follow layer resolves a symlinked parent instead of creating a
  literal link/name entry; OverlayFs copies the parent up first
- OverlayFs: file rename keeps the source mode, so sed -i on a mount_text
  script no longer drops its exec bit
- add -A/--all/-u stage the whole tree (they were taken as paths and
  staged nothing); other flags are ignored instead of treated as paths
- commit parses -a/--all and short bundles like -am MSG, restaging every
  tracked file before committing
- clone PATH|file://PATH [DIR] copies an in-VFS repo with the budgeted
  cp -R walker and sets origin to the source; refuses missing repos,
  non-empty destinations and destinations inside the source
New bashkit_repo eval (just eval-repo): 8 multi-turn repo tasks where a
setup script builds a fixture git repo and the model runs make test,
fixes the bug, and commits. Tasks combine local clone, symlinks (ln -sfn),
PATH tweaks, background jobs with per-PID wait, jq/awk/sed, and git.

- EvalTask gains optional setup (subshell, set -e, unscored); the eval
  Bash enables sandboxed git; agent and tests share build_task_bash
- new checks: file_not_contains, symlink (relative or absolute target)
- reference.rs replays one reference solution per task through the real
  checks; cargo test requires each to pass and the untouched fixture to
  fail
@chaliy chaliy self-assigned this Oct 8, 2026
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
bashkit 9adbce0 Commit Preview URL

Branch Preview URL
Oct 08 2026, 01:31 PM

@chaliy
chaliy merged commit 617394d into main Oct 8, 2026
46 checks passed
@chaliy
chaliy deleted the claude/eval-repo-tasks branch October 8, 2026 13:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant