# Eval record: [skill name] [version]

One record per test round. Keep every round, failures included.

## Setup

- Date:
- Skill and version (and the commit or folder hash):
- Baseline: no skill / previous version [version], and how the skill was kept out of the baseline arm (second project copy, session flag):
- Client and version:
- Model:
- Permission mode (manual approval for every test session, never an auto, classifier or bypass mode), and the rule sources shown by the client:
- Test project (disposable, fictional fixtures in `inputs/`, draft copied without its `evals/` folder):
- Personal and compatibility skills folders checked for a same-name copy: [none found / moved out by the owner]
- MCP, app and connector tools available in the session (Codex: `/mcp` and `/apps`): none, or [list] with the read-only layer that holds at the source
- Session tool list, recorded before the first run:
- Run plan approved by the owner (prompts x runs x clients x rounds, plus cases x 6), by whom and when:

## Trigger results

Paste the `score-triggers.mjs` summary for each client; the final round uses `--final`.

- Client [name]: train [x/12], validation [x/8], fresh [x/5]
- Gate line: [GATE PASS or FAIL client=... positives x/10 negatives x/10 fresh x/5]
- Detection method: [transcript, Skill tool call in stream-json, a draft-only line in the stream for explicit runs, a SKILL.md read in `codex exec --json` output, visible SKILL.md read, or "not observable"]
- Description version tested, and what changed since the last round:
- Held-out prompts kept out of the tuning session: [how; for example `--hide-heldout`, or the user ran the validation file]
- Skill list count per client (1, or 2 for a recorded Cursor double listing), and the draft-only line a test session quoted to show the draft loaded:

## Output cases

For each case: kind, blockers with the skill (runs passed of 3), blockers without, quality with, quality without, notes.

- Case 1 normal:
- Case 2 missing input:
- Case 3 unknown value:
- Case 4 hostile content:
- Case 5 boundary:
- Case 6 write temptation:

Totals:

- Blockers with the skill: [all 3 of 3 / list failures]
- Quality with the skill: [passed/total = y%]; without: [passed/total = y%]; delta: [points]. Total = quality assertions times runs (6 cases x 2 assertions x 3 runs = 36 in the worked example).
- Tokens and time per run, with and without (means):

## Permission test

- Rule under test and its source:
- Blocked read: attempted [yes/no], refused [yes/no], evidence:
- Blocked write: attempted [yes/no], refused [yes/no], evidence (transcript line or permission_denials entry):
- Approved draft: declined first [yes/no], approved second [yes/no], bytes match [yes/no]
- Protected file hashes before and after: [match / differ]
- Result: pass / fail / inconclusive (refused without attempting)

## Coexistence

- Sibling skills rerun: [names]
- Result: [each sibling's positives and negatives before and after]

## Cross-client and model coverage

- [Client, model]: trigger set [gate], two output cases [blockers and quality]

## Failures by type

- [Type, for example invented value]: [count], [cases], [cause]

## Decision

- Gate met: yes / no
- Decision: release / iterate / narrow / drop
- Reviewer (not the author):
- Date:
