feat(pair-corpus-honesty): review tiers on every pair, agent-vfc loads at tier title

Tasks 8.1, 7.1 (tests) and the re-scoped 5.3.

- pairs.py: review_tier in {seeded, advisory, title, reviewed} with
  per-slice defaults (local reviewed, vibe-py seeded, sast/vfc/vfc-js/
  github advisory, agent-vfc title); reviewer = "pending" means title, a
  named reviewer means reviewed, reviewed without a reviewer is rejected;
  per_tier metrics in the payload; select_tier and GATING_TIERS for the
  improve loop.
- catalog_gen.py: stamps review_tier (and reviewer) on every generated
  row and training manifest row; title rows enter catalog.toml; the
  catalog-candidates.toml queue is retired; precedence matches the loader.
- agent-vfc: 29 title-tier rows load and score (0/29, Youden 0.0, the
  honest unreviewed baseline); local rows name their reviewer.
- Tests: tier defaults, loader rejections, per_tier payload, the Req 8.1
  catalog-on-disk / stage-1 exclusion proof and per-slice CLI checks.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01T7XD7x5KonMdmGRkp63EQG
This commit is contained in:
Marius Ciepluch
2026-09-05 10:45:43 +02:00
co-authored by Claude Fable 5.1
parent 9e7aef6a6b
commit b1c5f36076
18 changed files with 1236 additions and 967 deletions
+13 -3
View File
@@ -53,9 +53,19 @@ Pairs in this directory **must not** join `LANGUAGE_MANIFESTS`.
vendored. Honesty dashboard.
- **agent-vfc** — security-fix commits carrying an AI agent co-author trailer or
generation marker, in JavaScript, TypeScript, or Python
(`benchmarks/pairs/agent-vfc/`). `provenance = "agent"`. Rows enter
`catalog.toml` only after a human sets `reviewer` in `recipes.toml`; until
then they sit in `catalog-candidates.toml`, which is never loaded. Honesty dashboard.
(`benchmarks/pairs/agent-vfc/`). `provenance = "agent"`. Rows with
`reviewer = "pending"` load at `review_tier = "title"` (the review queue) and
never gate the improve loop (task 8.2); a human sets `reviewer` to promote a row to `reviewed`. Honesty dashboard.
## Review tiers
Every pair carries `review_tier` (Req 9): `seeded` (ground truth reviewed by the
upstream benchmark), `advisory` (public CVE or GHSA with a fix commit), `title`
(mechanism inferred from a commit message, unreviewed), `reviewed` (a named
`reviewer` in this repository; the loader rejects `reviewed` without one).
Defaults per slice: local `reviewed`, vibe-py `seeded`, sast/vfc/vfc-js/github
`advisory`, agent-vfc `title`. `pairs --json` reports `per_tier`; `evolve.evaluate_profiles` scores only `seeded`
and `reviewed` pairs, so `advisory` and `title` pairs never gate the improve loop (task 8.2).
## Labels, profiles, and mechanisms