Skip to content

testing docs: authoritative tier inventory, standing order, and cheap-tier drift guard (#89 phase 1) - #91

Merged
JRichlen merged 3 commits into
mainfrom
claude/testing-docs-standing-orders
Aug 30, 2026
Merged

JRichlen merged 3 commits into
mainfrom
claude/testing-docs-standing-orders

Conversation

@JRichlen

Copy link
Copy Markdown
Owner

Addresses #89 (phase 1) — deterministic deliverables only: the testing documentation, the standing order, and the cheap-tier doc-drift guard. L1 probes are the next increment of #89; the L2/L3 composition and trajectory layers are owned by #88 per the scope-split comment on #89 and are only linked, not specified.

What's in this PR

  1. docs/testing.md — authoritative inventory of every live tier: what each proves, what it structurally cannot prove, when it fires, rough cost, and the exact local run command. Also covers the shared statistical spine (repeat:, k-of-N pass-rate floor via evals/paid/pass-rate.sh, FAULT-vs-verdict separation, fail-closed starvation, PROMPTFOO_RETRY_5XX), the demonstration discipline (human review gate and why it cannot be machine-enforced), and a "planned" section that links Routing evals: model specialist + Redgate composition and trajectories #88/Testing handoff: document the existing eval architecture, plan the agentic/composition test strategy, and add standing orders that keep both current #89 rather than re-specifying them. Linked from evals/README.md and the root AGENTS.md/CLAUDE.md eval-discipline section.
  2. Standing order (root AGENTS.md, mirrored in the doc): any PR that adds, removes, renames, or re-scopes an eval tier, workflow job, or per-plugin eval pack MUST update docs/testing.md in the same PR.
  3. Drift guard — new evals/cheap/check-testing-doc.sh, wired into evals/cheap/run.sh as a clearly-delimited section at the end (surgical, before the summary block). It derives the live inventory dynamically (workflow job display names parsed from .github/workflows/*.yml with ${{ matrix.* }} suffixes normalized away, eval dirs from evals/*/, distinct pack kinds from plugins/*/evals/*/) and compares it both directions against a machine-readable LIVE-INVENTORY block in the doc. A missing docs/testing.md fails closed in the real repo; the gate is inert in the counterfeit tier's synthetic root (marker: evals/counterfeits/, which the synthetic root never copies — it does copy .github/workflows/evals.yml, which is why that couldn't be the marker). --print emits the current live list for updating the doc.

Tier inventory documented (verified against reality, not the issue's list)

Tier Fires Required check?
cheap (evals/cheap/run.sh) every push/PR + pre-commit yes
counterfeit corpus (evals/counterfeits/run.sh) path-gated yes (aggregate)
install (ci/install-smoke.sh + evals/cheap/run-one.sh) every push/PR, all plugins yes (aggregate)
grader-model resolution every push/PR w/ secrets yes
behavioral (per-plugin promptfoo packs, 13 plugins) path-gated per plugin yes (aggregate)
routing (evals/routing/) path-gated no — advisory
paid multi-plugin gate every PR no — advisory, always exits 0
scale (scale.yml: redgate + agent-compiler stress) path-gated no — evidence, not a merge gate
deep / pier (graveyard + fleet-playbook-curator packs) path-gated to safety surface yes (aggregate)
example gallery (refresh-examples.yml scheduled biweekly / pages.yml on main) scheduled / docs/** push no — review-gated PR / publish
demonstration discipline every skill-change PR no — human review gate

Tiers the issue's inventory list missed: the grader-model check (confirm grader model resolves — a frozen required check), the paid multi-plugin gate (advisory), and the example-gallery workflows (refresh-examples.yml + pages.yml) as a verification surface. All are now documented and machine-inventoried.

Red-then-green proof of the drift guard (verbatim)

Deliberate mismatch (replaced the live routing-tier entry in the doc's block with a fabricated one), exercising both directions:

=== RED RUN (deliberate mismatch) ===
  FAIL testing-doc drift: live 'job: routing tier (roster trigger routing)' is not in docs/testing.md's inventory block — update the doc in this same PR (standing order)
  FAIL testing-doc drift: docs/testing.md names 'job: hologram tier (does not exist)' which no longer exists — remove or rename it in this same PR (standing order)
exit code: 1

Restored:

=== GREEN RUN (doc restored) ===
  PASS docs/testing.md inventory block matches all 34 live entries (workflows, jobs, eval dirs, pack kinds), both directions
exit code: 0

Gates run before commit

  • evals/cheap/run.sh1177 passed, 0 failed (includes the new gate)
  • evals/counterfeits/run.sh — 22 passed, 0 failed (confirms the new run.sh section stays inert in the synthetic root and the baseline stays calibrated)
  • python3 ci/check_branch_protection.py --repo . — 6 checks + 2 safety paths in sync; no CI job names touched

No skill prose changed (only repo-level docs/AGENTS.md governance + a deterministic check), so no behavioral-tier run or demonstration comment applies.

🤖 Generated with Claude Code


Generated by Claude Code

…-tier drift guard (#89 phase 1)

Documents every live eval tier in docs/testing.md — proves / cannot-prove /
trigger / cost / local run per tier, the shared statistical spine (repeat:,
k-of-N floor via evals/paid/pass-rate.sh, FAULT-vs-verdict separation,
fail-closed starvation, PROMPTFOO_RETRY_5XX), and the demonstration
discipline — linked from evals/README.md and the root AGENTS.md
eval-discipline section. Planned L1 probes and the L2/L3 composition layers
are linked to #89/#88 rather than specified (per the scope-split comment).

Standing order (root AGENTS.md + the doc itself): any PR that adds, removes,
renames, or re-scopes an eval tier, workflow job, or per-plugin eval pack
MUST update docs/testing.md in the same PR.

The order bites: evals/cheap/check-testing-doc.sh derives the live inventory
dynamically (job display names from .github/workflows/*.yml, eval dirs from
evals/*/, pack kinds from plugins/*/evals/*/) and compares it in both
directions against the doc's machine-readable LIVE-INVENTORY block; wired
into evals/cheap/run.sh as a repo-level gate (inert in the counterfeit
tier's synthetic root, which lacks evals/counterfeits/). Proven red first on
a deliberate mismatch, then green. cheap: 1177 passed, 0 failed;
counterfeit corpus: 22 passed, 0 failed; branch protection in sync.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NsPQTo67oovz8ogirsH6uL
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Aug 30, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-08-30T22:26:20.042183Z 7481ba3 PR opened
🔒 Security Review Completed 2026-08-30T22:25:19.682669Z 7481ba3 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7481ba3da9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread evals/cheap/check-testing-doc.sh Outdated
Comment thread evals/cheap/run.sh Outdated
Comment thread evals/cheap/check-testing-doc.sh Outdated
claude added 2 commits August 30, 2026 22:31
…nularity (review findings)

Three defects Codex review found in the testing-doc drift guard, all
verified real and each proven red-then-green:

1. Inertness marker was evals/counterfeits/ — itself a tracked eval-dir, so
   a PR removing that tier made the guard silently skip the exact drift it
   exists to catch. Marker is now `.git` (dir at the repo root, file in a
   worktree; never created in the counterfeit synthetic temp root, never
   tracked inventory). Proven: temp copy with .git and evals/counterfeits/
   removed now fails run.sh with the stale 'eval-dir: evals/counterfeits'
   entry instead of skipping.

2. Workflow discovery globbed only *.yml; GitHub Actions also picks up
   *.yaml, so a .yaml workflow could join or leave without an inventory
   change. Both extensions now scanned. Proven: a probe .yaml workflow goes
   red until the doc names it.

3. Pack inventory collapsed to distinct pack KINDS, so one plugin gaining or
   losing a pack of an existing kind left the set unchanged while the doc's
   per-plugin claims went stale. Entries are now plugin-qualified
   (pack: graveyard/pier, ...), LIVE-INVENTORY block regenerated via --print
   (34 -> 70 entries), doc prose updated. Proven both directions: removing
   plugins/graveyard/evals/pier and adding plugins/grill-me/evals/promptfoo
   each go red where the kinds-only set stayed green.

Gates: evals/cheap/run.sh 1177 passed 0 failed (worktree — .git-as-file
covered); evals/counterfeits/run.sh 22 passed 0 failed (guard inert in the
synthetic root); ci/check_branch_protection.py in sync.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NsPQTo67oovz8ogirsH6uL
Resolved the expected evals/cheap/run.sh conflict by keeping both appended
sections: the testing-doc drift guard (this PR) followed by the RQ-001
behavior-surface trigger map (merged via #90). Gates on the merged tree:
cheap 1510 passed / 0 failed, counterfeits 22/0, branch protection in sync.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NsPQTo67oovz8ogirsH6uL
@JRichlen
JRichlen merged commit be37ebb into main Aug 30, 2026
52 checks passed
JRichlen pushed a commit that referenced this pull request Aug 30, 2026
…line guard

Main's new testing-doc drift guard (#91) and this branch's timeline
guard both claimed section 20 at the same append point. The resolution
keeps both — main's testing-doc drift stays §20, the design-trajectory
timeline guard becomes §21 — followed by the RQ-001 section as before.
cheap tier green after resolution (1183 passed, 0 failed).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NsPQTo67oovz8ogirsH6uL
JRichlen pushed a commit that referenced this pull request Aug 30, 2026
…ing.md per the standing order

The run.sh sections auto-merged cleanly. Per the standing order that #91
landed, this PR re-scopes the routing tier (typed composition line + the
trajectory leg), so docs/testing.md's routing entry now documents both
legs, the two contract validators, the offline tests, the second
pass-rate gate, and the updated trigger paths and call counts. Gates on
the merged tree: cheap 1512/0, counterfeits 22/0, branch protection and
behavior-surfaces lockstep in sync.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NsPQTo67oovz8ogirsH6uL
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.

2 participants