Repository navigation
Eval preflight: read guidance provenance from the database, refuse to run beside another model (closes #3788) - #3803
Conversation
Code Review SummaryNet positive and correct in design. Reading Requirements (issue #3788)
FindingsCritical IssuesNone. Suggested Improvements
Nitpicks
RecommendationAPPROVE (as a comment; self-authored PR). No blockers. Address the lsof timeout fail-open (I1) before merge since it contradicts the function's stated fail-closed contract; the rest can be folded in at author's discretion. |
malibio
left a comment
There was a problem hiding this comment.
Verdict: APPROVE with one recommended fix (lsof timeout accepted as complete output; see summary comment). No blockers; the GitHub API rejects approve on a self-authored PR, so this is the real verdict.
Review addressed (93ff5c6)Addressed
Skipped
Scripts tier: 1559 pass. Re-Review DecisionDecision: NO RE-REVIEW NEEDED |
… beside another model (closes #3788) The CLI never exposes _seed, so the node-query readback found nothing and the run printed a warning and continued. Read each seeded root's key, config_version and guidance_version from the served database, fail a run whose readback is empty, and compare both versions across reps. Preflight now lists open files and exits 2 naming any other process (pid, command, working directory, model) that holds a generative model open; the daemon under test and the embedding model are excluded. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…er each rep - lsof killed by its timeout returns partial output with a null exit code; only exit 0 or 1 is now trusted (I1) - contention is re-checked after every rep so a model loaded mid-run voids it before any results file is written (I2) - the daemon's socket is also matched by its canonical path (I3) - provenance read uses sqlite3 -readonly; dead 'none found' branch removed; guidanceVersion-only drift test added Skipped: pinning a real mmapped chat-model lsof fixture (I4) - needs a chat model loaded on the GPU; the parser keys on the path, not the fd type. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
93ff5c6 to
a0659bb
Compare
Closes #3788
What
readGuidanceProvenancereads each seededagent-guidanceandskillroot's_seed.key,config_versionandguidance_versionfrom the served database. The CLI deliberately never exposes_seed, and the stamp has noversionfield, so the oldnode queryreadback could never succeed. An empty readback for any seeded type now fails the run (exit 2) instead of printing a warning. The cross-rep drift check compares both versions.lsofand exits 2 naming every other process (pid, command, working directory, model file) that holds a generative model open. The daemon under test is recognised by its listening socket; embedding models are ignored; remote-provider runs skip the check. Fails closed whenlsofcannot run.development/agent-eval.md) updated: the check is automatic and points at the poll-every-20-minutes rule.Tests
bun run test:changedpasses (scripts + rust tiers). New unit tests cover the row parser, the empty/partial/unreadable readback failures, the lsof parser (daemon exclusion, embedding exclusion, Ollama blobs, dedupe) and the fail-closed path. Thelsof -Fshape and the_seedfield names were checked against a live machine and the seeding source.🤖 Generated with Claude Code