AGENTS.md@eval · git:20260812.206facb · 2026-08-12 · sha256 b146f86b36ed9111
AGENTS.md@eval git:20260812.206facbA
Immutable. This exact content is served forever at /api/v1/blob/b146f86b36ed9111.
# eval Agent Contract Measurement surfaces for agent behavior: fixtures consumed by the behavior-eval harness, plus standing audits that read real host transcripts. Nothing here enforces repository changes. These produce machine-readable advisory evidence and next actions that an agent learning loop can consume; human reading or intervention is optional. Rules: - **Advisory by construction.** Nothing in this directory may become a merge gate. An automated eval controller may continue, repair, reject or roll back an isolated candidate, but it cannot authorize merge, push, release or deploy. These tools classify free-text briefs and prompts with heuristics, and heuristics over open semantics do not converge reliably. Standing measurement tools exit non-zero only when the scan itself broke, never because the measured population looked bad. The causal synthetic smoke is the explicit exception: contract-complete but provider-unevaluated exits `3` so automation cannot promote it as a green gate. - **`frozen_at_sha` is an ancestry/batch marker, not a "validated at" stamp.** Use `root` for fixtures that belong to the initial public snapshot. An explicit SHA must resolve to an ancestor of HEAD; otherwise the fixture is drifted and excluded from regression judgement. The marker does **not** claim that the expected behavior was already implemented at that revision. `test_routing_bank_integrity.sh` (registered in the regression runner) is what actually enforces the ancestry property at commit time; it deliberately does not evaluate routing, because the grader needs a live model and therefore cannot be a deterministic lane. - **State what the number is NOT.** Every tool documents its blind spots at the top of the file, in the same place a reader looks before citing it: what it cannot classify, what it counts as a proxy for something it cannot measure directly, and which conclusions it does not support. A measurement that overstates its own scope is worse than no measurement, because it gets quoted. - **Isolate what you count.** Host transcripts interleave injected context with authored content — the routing block itself contains skill names and contract field names, so scanning raw transcript text reports fabricated numbers. Count structured events (`tool_use` nodes), and isolate the authored brief before matching against it. Three separate measurements of one defect can otherwise be misleading. - **Version event topology.** Skill evidence uses a named event contract and a field-topology fingerprint. Unknown Skill/tool-result shapes are `unverifiable` and visibly degraded; add a sanitized known-answer fixture before registering a new shape. `skill-event-fixtures-v1.json` and `skill-event-fixtures-v2.json` are separate pinned contracts: v2 adds the per-invocation index, `tool_use_id` and completion semantics that matched-call evaluation and external extractors bind to. Neither file may be regenerated from parser output. - **Read-only against host state.** Tools here inspect `~/.claude/projects` and similar; they never write to, prune, or reshape it. - **Trial runners write only to explicit private output roots.** Causal-eval code may create isolated task checkouts and 0700/0600 artifacts under the caller's `--out` path, but it must not write to host transcripts, the runner source checkout, the committed fixture tree, or a sibling trial. Every causal-core path needs both an allowlisted file-access audit and separate session/provider-memory evidence; neither substitutes for the other. - **Keep held-out truth outside the repository.** Committed held-out manifests contain content-addressed `corpus://` references and metadata only. Actual prompts, hidden tests, grader truth, arm assignments, model outcomes and identity-bearing access events stay in the private corpus/output root. - **Synthetic smoke is runner evidence only.** Fixture-only E10 completion proves deterministic scheduling, artifacts and gate evaluation. It does not prove a real provider is isolated, a grader is calibrated, or CCL skills improve quality, so the expected not-evaluated result exits `3` rather than masquerading as a green gate. Pending active-control arms remain non-runnable until the pre-registered independent-candidate and blinded-selection rules are met. - **No project, person, or repository identity in committed output or fixtures.** Sample rows printed for diagnosis carry a truncated path and an agent id, never brief bodies — a dispatch brief may contain proprietary or personal content. Validation: - `python3 -m unittest eval/test_subagent_owner_audit.py` - `python3 -m unittest eval/test_skill_effectiveness_bridge.py` - `python3 -m unittest eval/test_skill_effectiveness_trial.py` - `python3 eval/skill-effectiveness/run.py smoke --fixture eval/skill-effectiveness/fixtures/e10-smoke.json --out /private/tmp/ccl-skills-e10-smoke` (only exit `3` is expected for the contract-complete fixture; exit `0`, `1`, `2` or any other status is a validation failure) - `python3 eval/subagent-owner-audit.py --days 1` (runs clean on any machine; prints a no-data line when there are no transcripts) - `bash skills/skill-extraction-workflow/scripts/check-ccl-skills.sh .` - `git diff --check`