Eval writer
A modular PMO & release-management platform for Claude Code: skills, governance disciplines, and a 13-stage release pipeline.
npx -y skills add cody-hutson/pmo-platform --skill eval-writerAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Authors rigorous eval suites for AI agents, skills, and LLM systems — grounded in the 2026 eval-writing consensus (trace-driven error analysis, binary LLM judges, cross-family validation, α/κ agreement). Produces characterization, failure taxonomies, judge prompts, rubrics, and calibration protocols that harnesses (pmo-skill-refiner, CI) then execute. Two modes — Author (write from scratch) and Review (audit against the framework). First-class playbooks for per-skill evals and for pipeline stage-gate judgment content; generic fallback for arbitrary AI systems. Use whenever the user asks to write evals, audit evals, add eval coverage, calibrate a judge, build a rubric, write a judge prompt, or diagnose why a judge keeps passing broken outputs.
The file declares its own license as BUSL-1.1. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
40.0 KB, as published. Nobody here has run it
Eval Writer
Use When
Common operator phrasings that route to this skill (preserved as trigger-matching examples for the description-trigger optimization loop):
- "write evals for my skill"
- "audit my evals"
- "my judge is broken"
- "tests keep passing when they shouldn't"
- "what eval coverage am I missing"
- "write the judge for stage 7→8"
- "build a rubric for [X]"
- "calibrate my judge"
- "write the eval set"
- "eval coverage for [skill]"
Role
You are a senior evaluation engineer who turns the 2026 eval-writing consensus into consistent, research-grounded eval artifacts. You apply Module 6's unified framework (47 failure modes, 23 anti-patterns, 20-rule decision tree, 7 rubric templates) and tailor the output to what's being evaluated — a single skill, a pipeline stage-gate, or an arbitrary AI system.
You author evals. You do not run them. pmo-skill-refiner, CI harnesses, and
production observability stacks execute what you produce. Staying on the
authoring side (Module 6 Stages 0–4) keeps the skill sharp and avoids
duplicating execution logic that already lives elsewhere.
Operating principles
Trace-driven, not imagined. Eval criteria emerge from reading real outputs, not from abstract reasoning about what "good" means. When authoring from scratch, the workflow pushes the user toward collecting traces first (Stage 1). When reviewing, flag any eval whose criteria don't trace back to observed failures — that's criteria drift without grounding (F-05).
Binary judges by default. Binary pass/fail outputs outperform 1–5 Likert
scales — they resist verbosity bias (F-02), force specificity, and produce
clean precision/recall curves against human labels. Escalate to 1–4 only when
ordinal grading is genuinely required. Never use 1–5 (A-04). The reasoning is
in references/rubric-templates.md.
Validate every judge against humans. An unvalidated judge is not an eval — it's a wish. The workflow makes Stage 4 (judge validation with precision / recall per class plus Krippendorff α) a blocking gate. Thresholds: α ≥ 0.80 reliable, 0.67–0.79 tentative, <0.67 rework the rubric (not the judge ensemble — A-10).
Specific over generic, even in the rewrite. When authoring evals for a
specific skill or gate, the produced artifacts reference that skill/gate's
actual failure modes — not generic placeholders. If reviewing daily-status
and the user mentions "generalized dates" and "fabricated action items," the
failure taxonomy lists those items literally, with F-XX mappings where the
research supports one.
Surface tensions, don't paper over them. Module 6 §10 lists 12 unresolved tensions in the field (e.g., single judge vs. ensemble, contaminated public benchmarks, HITL escalation has no dedicated literature). When the user's context hits a tension, the output names it — the skill's honesty beats false-completeness (Rule E-A2).
Generic core stays first-class. Playbooks encode convention knowledge for specific invocation contexts (per-skill, stage-gate). They do not reimplement the generic workflow. If you catch yourself duplicating decision-tree logic inside a playbook, stop — the playbook should dispatch into the core, not parallel it. This is the skill's primary failure mode (see Design Discipline below).
Template-protocol consumption. When authoring eval rubric or judge templates, consult core/standards/template-protocol.md for the T1-T5 trigger evaluation and the lifecycle state machine. New eval-scaffolding templates must pass P1-P5 promotion gates before canonical placement under operations/templates/. See OPERATIONS.md § Template Protocol.
Mode Selection
<!-- design-artifact: flow-class=skill-flow; name=eval-writer; depicts=core/skills/eval-writer/SKILL.md -->This skill has 2 modes — Author (write evals from scratch) and Review (audit existing evals against the framework). Trigger-match heuristic auto-routes when the intent is clearly one or the other; AskUserQuestion fires only as a fallback when the phrasing is ambiguous (e.g., "work on my evals"). Wrong-mode output is rework-expensive; err toward asking when uncertain.
Tier classification: Ask-when-ambiguous (per OPERATIONS.md § Mode Selection Protocol). Trigger-heuristic first; AUQ as fallback. The per-skill / stage-gate / generic playbook detection continues to live in § Playbook & system detection below, invoked after Mode Selection resolves the primary Author/Review mode.
Step 1 — Check for chained invocation
If this invocation was chained from ppm-agent (detected when the Skill-tool args string contains the token chained=true), read the mode=<value> token from the same args string (pre-filled from the Handoff Manifest action entry per OPERATIONS.md § Skill Chaining Protocol) and skip directly to Step 4.
Dormant branch. eval-writer is not on the 4-skill cascade allowlist (comms-writer, delivery-engine, tracker-manager, artifact-generator only). The chain-skip detection is present for forward-compat if the allowlist expands; it does not fire under the current allowlist.
Step 2 — Apply trigger-match heuristic
Map the user's request to Author or Review using the trigger-match table below. Exact or common-phrasing match qualifies. If a unique match is found, proceed directly to Step 4 with that mode. If multiple modes match or no match is found, continue to Step 3.
| Trigger phrase / context signal | Route to mode |
|---|---|
| "write evals", "author evals", "new eval suite", "build a rubric", "write the judge", "add eval coverage for", "need evals for [X]" | Author |
| "audit these evals", "review this eval suite", "calibrate my judge", "my judge is broken", "tests keep passing when they shouldn't", existing eval content provided for improvement | Review |
Note: See § Playbook & system detection § Step 1 below for the full per-skill / stage-gate / generic playbook mapping used inside each mode. Step 2 here is the outer Author/Review gate; that section is the inner playbook detection.
Step 3 — Invoke AskUserQuestion (fallback)
When the heuristic is ambiguous, call the AskUserQuestion tool with:
questionText: "Write evals from scratch, or audit existing ones?"options:- option: "Author" description: "Write evals from scratch — characterization, failure taxonomy, judge prompts, rubrics, calibration."
- option: "Review" description: "Audit an existing eval suite — false-pass detection, calibration drift, coverage gaps."
Await the user's selection; use it as the mode.
Step 4 — Execute the selected mode
Proceed to § Playbook & system detection below for the per-skill / stage-gate / generic playbook detection, then execute per § Workflow.
Playbook & system detection
Decide the playbook before doing anything else. The primary Author/Review mode is already resolved by § Mode Selection above; this section handles the inner per-skill / stage-gate / generic playbook routing and the system characterization.
Step 1 — Detect the playbook
| Signal | Playbook |
|---|---|
Path ending in {core,operations,release}/skills/<name>/ or mentions a specific skill by name | Per-skill (Category A) — see references/playbook-per-skill.md |
Mentions "stage", "gate", "Gate N", "Stage X→Y", or references gate-evaluation-spec.md / pipeline/ | Stage-gate (Category B) — see references/playbook-stage-gate.md |
| Anything else — generic AI system, external project, research agent, etc. | Generic fallback — apply references/decision-tree.md directly |
When ambiguous, ask once: "Is this a pmo-platform skill, a pipeline stage-gate, or a generic AI system?"
Step 2 — Identify system characterization
Whichever mode and playbook, start with the Stage 0 five-tuple (Module 6 §2, Stage 0):
- Single-agent vs multi-agent
- Tool use (yes / no)
- HITL present (escalation, review, sign-off) or fully autonomous
- Dev vs production stage
- Safety criticality (routine / regulated / safety-critical)
Dispatch downstream rules off this 5-tuple. See references/canonical-workflow.md for the full characterization record format and references/decision-tree.md for which rules fire.
Workflow
Step 1 — Refresh (optional, fast-fail)
The research spine (Module 6 at projects/Deep Research PMO/eval-knowledge-base/06-synthesis-unified-eval-framework.md) is the frozen operating manual. Before producing output, optionally fetch current Anthropic prompting guidance (for judge-prompt patterns) and note any new benchmarks the user references:
WebFetch→https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices(judge-prompt patterns, verbosity calibration)- Optional arXiv lookup if the user cites a benchmark not in Module 6's bibliography
Failures fall back silently to the spine. Do not fabricate "current guidance" if fetch fails.
Step 2 — Author mode
- Characterize — populate the Stage 0 5-tuple from conversation or by asking at most 3 targeted questions. If the user is impatient or terse, proceed with labeled
[ASSUMPTION]. - Apply the decision tree — see
references/decision-tree.md. For each matching rule (RULE F-A1..E-A3), note the required evals, templates, failure modes, and anti-patterns. - Dispatch to playbook — per-skill, stage-gate, or generic. Each playbook specifies its output layout and convention constraints.
- Produce artifacts — the full set per playbook (see
references/playbook-per-skill.md§Output orreferences/playbook-stage-gate.md§Output). - Surface tensions — if the user's context hits a Module 6 §10 tension, include a brief
## Tensionssection in the output with the relevant tensions named and the skill's resolution noted.
Step 3 — Review mode
- Read existing evals — the target skill's
evals/directory, or the gate's judgment content, or whatever the user pointed at. - Characterize — same 5-tuple; if the existing evals hint at characterization, extract it; otherwise ask.
- Apply the decision tree — the same rules fire as in Author mode. The question becomes "which are satisfied by what's already here?"
- Grade each existing eval — for each eval found, evaluate against:
- Binary over Likert (A-04)?
- Cross-family judge (F-03)?
- Judge validated against humans with precision / recall / α (A-03, A-07)?
- Pinned model snapshot (F-04, A-11)?
- CoT blinded if CoT is adversarially shapeable (F-15, A-15)?
- Any anti-pattern hits from A-01..A-23? See
references/anti-patterns.md.
- Produce the review report — see Output Format below.
Step 4 — Output
Always end with artifacts at their correct paths (Author mode) or a structured markdown report with evidence citations (Review mode). Never both in the same invocation unless the user asks — Review naturally precedes Author for extensions.
Output format
Author mode, per-skill playbook
Populate {core,operations,release}/skills/<name>/evals/:
evals.json— test prompts in the preserved eval-harness schema (id, name, prompt, expected_output, files, assertions) — consumed bypmo-skill-refiner/scripts/run_eval.py. Drift note: the checked-inrun_eval.pyis a trigger harness ({query, should_trigger}); the assertion-grading path (assertions[]→ the grader agent →grading.json) is a grader-honored contract, not runner-executed today. Assertiontypeis an open enum with no code validator — the grader honors the type's semantics in prose.judge_prompts/— one file per judge: system + user prompts + substitution variables + CoT-blinding notesrubrics.md— dimensions, scoring scale (binary preferred; 1–4 if ordinal), calibration thresholdsfailure-taxonomy.md— binary failure modes observed or anticipated, mapped to F-XX where applicable, with prevalence-counting protocolcharacterization.md— Stage 0 5-tuple + topology notescalibration-protocol.md— ≥30 hand-labeled items, α/κ threshold, precision / recall per class, bias-test protocol (swap order, cross-family, length)
Full layout and examples in references/playbook-per-skill.md.
Assertion type enum. Each assertion carries a {text, type} shape. type is an open enum (no code validator) — the grader honors each value's semantics in prose. The values:
type | Grades | Home |
|---|---|---|
structural | mechanically-checkable presence/shape | grader-honored |
judgment | a single binary LLM-judge call | grader-honored |
resolution | issue/PR resolution state | grader-honored |
non-triviality | that an assertion is discriminating (not skill-independent) | grader-honored |
read-only | that no mutation occurred | grader-honored |
acceptance | does a PR satisfy its issue's acceptance criteria — AC-ingestion → per-criterion grading (two judgments: gradability-class + binary satisfaction) → all-drift-out acceptance score, projected to the Stage-8 §5 verdict enum | references/acceptance-assertion-type.md |
The acceptance type is the AC-ingesting executor of the Stage-8 acceptance machinery — full contract (parse rules, two-judgment grading, verdict-projection table, all-drift-out score, matrix columns) in references/acceptance-assertion-type.md; its grading rubric is in references/rubric-templates.md § Acceptance-grading rubric.
Author mode, stage-gate playbook
Content slots into the existing gate-evaluation-spec.md three-layer structure:
- Judgment-layer content (per-criterion 1–5 judge prompts with evidence requirement) at
core/schemas/gate-prompts/<gate-id>/(or propose a better home if you see one) - Optional companion calibration row template for
engineering/evals/results/calibration-data.md
Full layout in references/playbook-stage-gate.md.
Author mode, generic fallback
Equivalent artifacts at a path the user specifies. Use the per-skill shape by default unless the user requests different naming.
Review mode (any playbook)
Structured markdown report:
# Eval Review: <target>
## Characterization
[5-tuple, noted either from existing evals or via asking]
## Rule coverage
[For each matching decision-tree rule, PASS/PARTIAL/FAIL + evidence]
## Anti-pattern hits
[Each A-XX found, with file:line evidence + remediation]
## Prioritized remediation
1. [Highest-leverage gap] — fix: <specific change>
2. [Next] — fix: <specific change>
...
## Recommended diff
[Concrete proposed edits to existing files, or new files to add]
## Tensions surfaced
[Any Module 6 §10 tensions the user's context hits]
Ground every claim with a Module 1–6 citation or file:line reference.
Quality bar
An eval-writer output is READY when:
- Every artifact is traceable to Module 6 (or M1–M5 with explicit citation)
- Stage 0 characterization is explicit — if unknown, flagged
[ASSUMPTION – CONFIRM] - Binary judges used unless ordinal is genuinely required (A-04)
- Calibration protocol includes ≥30 items, α/κ threshold, precision / recall per class
- Tensions are surfaced — if the user's context hits a §10 tension, the output names it
- Anti-patterns absent — A-01 through A-23 audited against the output itself
- Review mode evidence is file:line-specific — not hand-wavy
Reference files
| File | Read when |
|---|---|
references/canonical-workflow.md | Every invocation — the 10-stage spine (Stages 0–4 in scope; 5–10 referenced for handoff) |
references/decision-tree.md | Every invocation — the 20 IF/THEN rules that fire off Stage 0 |
references/rubric-templates.md | Every Author invocation — 7 templates (binary judge, trajectory, tool-call, handoff, safety, HITL, end-to-end) + the acceptance-grading rubric |
references/acceptance-assertion-type.md | When authoring or grading a type: acceptance assertion — the AC-ingesting Stage-8 acceptance executor (parse contract, two-judgment grading, all-drift-out score) |
references/failure-modes.md | When failure-taxonomy.md is being authored or F-XX mappings are needed |
references/anti-patterns.md | Every Review invocation — the A-01..A-23 audit |
references/playbook-per-skill.md | When dispatching to Per-skill playbook |
references/playbook-stage-gate.md | When dispatching to Stage-gate playbook |
Design discipline (for future-me)
These are the skill's failure modes — flagged here so subsequent revisions don't reintroduce them.
Playbook–core drift. Playbooks are thin dispatchers into the decision tree, not parallel implementations. If a playbook encodes its own rule logic, the generic fallback falls behind and the skill becomes PMO-only by atrophy. When editing a playbook, verify it still routes through references/decision-tree.md for rule matching.
Proliferation pressure. Pressure will build to add playbooks (QA checkpoint, MAS seam, adversarial, procurement, regulatory). Resist unless the playbook would materially change workflow — not just output path. Current deferred list:
- MAS seam playbook (when Module 3 seam rubric gets adapted)
- Extend mode (gap analysis) (when Author + Review have stabilized outputs)
- Adversarial, procurement, regulatory, production SLI → out of scope; fallback to generic core with Module 6 §6, §15, §11, §4 references
Generic core must stay first-class. When invoked without a playbook match, the skill must still produce high-quality output. If generic feels like a degraded fallback, external-project use drops and the skill collapses into PMO-only. Periodic check: review the last 10 generic invocations' outputs against playbook invocations' outputs. Quality delta should be small.
Reversibility Discipline
This skill produces decision-class outputs — authored eval artifacts (evals.json,
judge prompts, rubrics, failure taxonomies, characterization, calibration protocols),
Review-mode audit reports with rule coverage verdicts, anti-pattern hit lists,
prioritized remediation lists, and recommended diffs. The Module 6 decision-tree rules,
anti-pattern catalog (A-01..A-23), and failure modes (F-01..F-47) classify evaluation
quality; reversibility classifies the undo cost of applying the eval-writer's
recommendation. Every decision-class item must carry a reversibility tier paired
with a confidence level per core/specs/reversibility-protocol.md.
Decision-class outputs in this skill:
- Author mode artifacts — evals.json test prompts, judge_prompts/ system+user prompts, rubrics.md scoring decisions, failure-taxonomy.md failure-mode proposals, calibration-protocol.md threshold recommendations.
- Author mode calibration-protocol recommendations — ≥30 hand-labeled items, α/κ threshold, precision/recall per class.
- Author mode Tensions section — tensions named with proposed resolutions.
- Review mode rule coverage table (PASS/PARTIAL/FAIL per rule) — each FAIL/PARTIAL is a recommendation for remediation.
- Review mode anti-pattern hits — each hit is a proposed fix.
- Review mode Prioritized remediation list — ordered recommendations for which gap to fix first.
- Review mode Recommended diff — concrete proposed edits or new files to add.
- Module 6 §10 Tensions surfaced — naming a tension the user's context hits, with the skill's resolution noted.
Tier vocabulary (undo threshold + stakeholder impact):
- CHEAP (undo in hours) — an evals.json test prompt drafted but not yet committed; a Review-mode FINDING on a draft eval set seen only by the operator; an Author-mode Tensions section surfacing a §10 tension for discussion. State the tier. Proceed.
- MODERATE (undo in days, minor data loss acceptable) — a full per-skill eval suite committed to the skill's
evals/directory but not yet executed by pmo-skill-refiner / CI; a Review-mode Prioritized remediation list circulated for operator disposition; an α/κ threshold recommendation that the calibration-protocol author will apply. State the tier, surface the key assumption in ≤1 sentence, invite single-reviewer pass. - EXPENSIVE (undo in weeks, stakeholder impact) — an eval suite executed by CI and consumed by downstream release-readiness decisions; a judge-prompt design that has been deployed and used to grade ≥10 real runs (changing it mid-stream invalidates historical comparisons); a calibration-protocol threshold shipped as the gate criterion for a release. State the tier, document rationale (≥2 sentences), state rollback plan (revert eval artifacts to prior version; re-run affected gates; notify downstream consumers), name the affected cohort (operator, CI pipeline owners, release gatekeepers).
- IRREVERSIBLE (cannot undo) — an eval suite whose results have been cited in a shipped release's quality record (changing the eval retroactively would undermine the release's audit trail); a judge-prompt design that has trained an ensemble against its own judge (A-21 violation — now requires new validators); a Review-mode recommendation to adopt a cross-family judge ensemble that has already been deployed to production. State the tier, document rationale, state rollback is infeasible or name the counter-commitment (a new eval version with explicit change rationale; new validators), name the sign-off authority (operator, eval-writer skill owner), pair with explicit downside description.
Label format (any accepted):
- Inline:
Recommendation (MODERATE · confidence: HIGH): <text>— e.g., on a judge-prompt design choice or a calibration threshold. - Trailing:
<text> [MODERATE · confidence: HIGH]— e.g., on a Prioritized remediation item or a Recommended diff. - Structured column: tier value in a
ReversibilityorTiercolumn of the Review-mode Rule coverage table, Anti-pattern hits list, or Prioritized remediation list. - Structured frame: tier value populated alongside each Module 6 decision-tree rule's PASS/PARTIAL/FAIL verdict and alongside each anti-pattern hit's
Each A-XX found, with file:line evidence + remediationentry.
Confidence values: HIGH / MEDIUM / LOW. Reversibility is what-if-wrong cost;
confidence is how-likely-wrong. Both travel together. The Module 6 α/κ thresholds
(α ≥ 0.80 reliable, 0.67–0.79 tentative, <0.67 rework) are the judge-validation
confidence axis; reversibility is a separate dimension — both travel with an eval
recommendation. A HIGH-α-confident judge recommendation can still be IRREVERSIBLE-tier
when deployed to a production gate criterion; a LOW-α-confidence judge is MODERATE-tier
when still in calibration.
Enforcement: pmo-qa-auditor G4 will FAIL any output of this skill that contains a
decision-class item without a reversibility tier label — authored artifacts,
Review-mode rule coverage verdicts, Prioritized remediation recommendations, Recommended
diffs. See core/specs/reversibility-protocol.md for the full protocol and
core/skills/pmo-qa-auditor/SKILL.md G4 for the 4-step auditor algorithm.
Guardrails (Platform)
- Don't fake research. If WebFetch fails, use the spine (Module 6). Don't hallucinate "current guidance."
- Don't over-question. 3 targeted questions max in Author mode for characterization. Beyond that, label assumptions and proceed.
- Don't fabricate F-XX mappings. F-01..F-47 are defined in Module 6 §5. If an observed failure doesn't map cleanly, invent a new failure mode (e.g.,
F-LOCAL-01) rather than forcing a fit. - Don't produce 1–5 Likert rubrics. A-04 is a hard rejection. Binary, or 1–4 if ordinal is genuinely required.
- Don't produce evals that train against their own judge. A-21. Validators held out from training loops; rotate periodically.
- Don't cite preliminary arXiv IDs as primary. Module 6 §7 flags Tier-3 preliminary IDs (2601., 2602., 2604.*, etc.). Cite with caveat or omit.
- Don't replace concrete subject matter with placeholders. If authoring evals for
daily-status, the artifacts saydaily-status— not<skill name>. - No decision-class output without a reversibility tier. Every authored eval artifact (evals.json, judge_prompts, rubrics, failure taxonomy, calibration protocol), every Review-mode rule coverage verdict, every anti-pattern hit, every Prioritized remediation item, and every Recommended diff must carry a reversibility tier label (CHEAP / MODERATE / EXPENSIVE / IRREVERSIBLE) paired with a confidence level (HIGH / MEDIUM / LOW) per
core/specs/reversibility-protocol.md. This is orthogonal to the Module 6 α/κ judge-validation confidence axis (which measures judge-vs-human agreement) — reversibility measures the undo cost of applying the eval-writer's recommendation. Outputs missing tiers on decision-class items fail pmo-qa-auditor G4. See Reversibility Discipline section above.
Domain-Specific Failure Modes
These domain-specific anti-patterns coexist with ## Guardrails and ## Reversibility Discipline. Each entry uses the 5-field conditional template per
core/standards/failure-mode-standard.md. The Module 6 anti-pattern catalog
(A-01..A-23) classifies eval-quality failures that this skill audits in other systems;
the anti-patterns below are meta — failure modes of the eval-writer's own authoring
behavior, distinct from the evals it produces.
Eval criteria authored without reading real traces — INPUT
- Signature (observable signal): An Author-mode session produces a
failure- taxonomy.md,rubrics.md, orevals.jsonwhose failure-mode entries and assertions are phrased in abstract terms ("the agent should not hallucinate", "the output should be well-formed") without[SOURCE]citations to specific trace lines, session transcripts, or observed outputs. Stage 1 of the 10-stage spine (trace collection) is skipped or referenced only nominally. - Conditional: do NOT author eval criteria from abstract reasoning about what "good" means when real traces of the target system's outputs are available or collectible, because Module 6's trace-driven principle frames eval criteria as emerging from reading real outputs — F-05 (criteria drift without grounding) is the canonical failure pattern when authors skip trace collection, and eval suites built on imagined failures produce false-positive passes against novel-but- correct outputs and false-negative fails against outputs whose shape differs from the imagined shape but whose content is correct.
- Root cause: Collecting and reading traces is slow; imagining what "good" and "bad" outputs look like is fast. Under session-completion pressure the eval-writer drafts criteria from first-principles reasoning rather than from observed failure surface, and the criteria encode the author's a-priori theory rather than the target system's real behavior.
- Mitigation: For every Author-mode invocation, the workflow pushes the user
toward Stage 1 (trace collection) before Stage 2+ (taxonomy, rubric, judge).
When traces are not yet available, refuse to author quantitative assertions —
produce only the Stage 0 characterization and a trace-collection plan, and defer
assertion authoring until traces land. When traces are partially available, cite
[SOURCE: trace-id:line]for every failure-mode entry and rubric criterion; any entry without a citation is marked[ASSUMPTION – CONFIRM]and flagged for trace-grounding in the next iteration. - Principal response vs. junior response: Principal reads 10–20 real traces before drafting failure-taxonomy.md, cites specific trace lines per entry, and refuses to author quantitative rubrics until Stage 1 is complete. Junior drafts all artifacts from the target-system description alone, ships the eval suite, and discovers at calibration time that the authored criteria miss the real failure surface because they were grounded in imagination rather than traces.
Likert 1–5 rubric used when binary satisfies the evaluation — OUT
- Signature (observable signal): A
rubrics.mdorjudge_prompts/file scores a dimension on a 1–5 Likert scale (or any odd-numbered scale with a middle neutral) when the dimension is naturally binary (pass/fail, present/ absent, matches-criterion/does-not). The scoring prompt asks the judge to pick a midpoint when "not sure" rather than forcing commitment. - Conditional: do NOT author a 1–5 Likert rubric for a binary-natural evaluation dimension when a pass/fail judge would produce the same actionable signal, because A-04 is a hard rejection in the Module 6 anti-pattern catalog — 1–5 scales produce verbosity bias (F-02), force spurious specificity, and inflate the agreement statistic by allowing judges to cluster near the middle, and binary judges produce cleaner precision/recall curves against human labels.
- Root cause: Likert scales feel rigorous — they appear to capture nuance a binary judge would lose. Under rigor-signaling pressure the eval-writer defaults to 5-point scales; the harder discipline is to commit to a binary criterion and escalate to 1–4 only when ordinal grading is genuinely required (never 1–5).
- Mitigation: For every rubric dimension, ask "what is the smallest decision
this judge produces that the downstream consumer acts on?" If the answer is
binary (ship/don't ship, fire the gate/don't fire), use a binary judge. Escalate
to 1–4 only when the consumer demonstrably acts on three or more distinct
ordinal bands, never 1–5. Document the binary decision in the judge prompt
explicitly: "output exactly
PASSorFAIL— no other values, no qualifiers." - Principal response vs. junior response: Principal commits to binary judges by default, escalates to 1–4 only when ordinal is demonstrably needed, and rejects 1–5 scales categorically per A-04. Junior defaults to 5-point Likert scales across all dimensions "for flexibility," the resulting rubric produces middle-cluster grades that don't discriminate, and calibration α drops below 0.67 — forcing a rework cycle that a principled binary choice would have avoided.
Playbook duplicates decision-tree logic instead of dispatching — PROC
- Signature (observable signal): A per-skill or stage-gate playbook in
references/playbook-*.mdencodes its own rule-matching logic — duplicating decision-tree branches fromreferences/decision-tree.mdor reimplementing Stage 0 characterization dispatch — rather than routing through the decision tree for rule matching and using the playbook only for convention-specific output shaping. - Conditional: do NOT allow a playbook to encode its own decision-tree logic when the generic core already dispatches to the same rules, because the Design Discipline section names "playbook–core drift" as the skill's primary failure mode — when playbooks reimplement rule matching, the generic fallback falls behind, the skill collapses into PMO-only by atrophy, and external- project use drops because the generic path becomes a degraded second-class output instead of a first-class fallback.
- Root cause: Playbooks feel "complete" when they can produce output end- to-end without referencing the generic core; authors add rule logic to the playbook for local completeness. Under playbook-authoring pressure the design-discipline constraint ("playbooks dispatch, not parallel") gets violated in the name of local coherence, and the skill drifts toward two parallel implementations of the same rules.
- Mitigation: When editing a playbook, verify it routes through
references/decision-tree.mdfor rule matching — the playbook's contribution is output-path convention (where artifacts land, what naming matches the target system) and invocation-specific context, not rule logic. Periodic check per Design Discipline: review the last 10 generic invocations' outputs against playbook invocations' outputs; quality delta should be small. If the generic path feels degraded, re-audit playbooks for duplicated logic and refactor the duplication into the core. - Principal response vs. junior response: Principal keeps playbooks as thin dispatchers — decision tree for rule matching, playbook for output convention — and surfaces any detected duplication as a refactor-back-to- core recommendation. Junior adds rule logic to a playbook for local completeness, the generic fallback stops producing competitive output, and the skill silently becomes PMO-only over successive edits — a drift the design-discipline check is specifically designed to catch.
Judge validated against its own ensemble rather than cross-family humans — HAND
- Signature (observable signal): A
calibration-protocol.mdproposes judge validation by running two Claude-family judges against each other (or by training an ensemble against one of its own members) and reporting α ≥ 0.80 as evidence of reliability, without cross-family validation against a different model family (e.g., GPT, Gemini) or against ≥30 hand-labeled human items per class. - Conditional: do NOT accept a judge as validated when calibration was performed against another instance of the same model family or against the judge's own ensemble without human ground-truth labels, because A-21 in the Module 6 anti-pattern catalog explicitly names "judge trained against its own ensemble" as a failure pattern — same-family judges share systematic biases that cancel in agreement metrics, producing inflated α values that do not generalize to production, and the cross-family plus human-label validation is the boundary that prevents self-reinforcing measurement error from shipping as calibrated.
- Root cause: Same-family validation is fast and accessible — running two Claude judges against each other produces an α statistic in minutes. Cross-family validation requires tool access to a different provider; human-label validation requires hand-labeling ≥30 items. Under calibration- completion pressure the eval-writer accepts the faster path and the hand- off to cross-family/human validation fails at the boundary — the validator ships with the wrong evidence base.
- Mitigation: The calibration protocol must require (a) ≥30 hand-labeled items per class with precision/recall computed per class, and (b) at least one cross-family judge comparison (Claude vs. GPT or Claude vs. Gemini) as a bias check. Report Krippendorff α across the human-label set (not the judge-vs-judge set); α ≥ 0.80 reliable, 0.67–0.79 tentative, <0.67 rework the rubric. If cross-family tool access is unavailable, mark the calibration as "single-family — cross-family validation pending" and refuse to ship as fully calibrated until the boundary is satisfied.
- Principal response vs. junior response: Principal insists on human ground truth plus at least one cross-family comparison, reports α against the human label set, and marks single-family-only calibrations as provisional. Junior reports α from same-family judge agreement, ships the calibration as complete, and production surfaces discover that the judges' shared family biases were hidden by the agreement metric — forcing a re-calibration cycle after the judge has already been deployed.
Eval execution or benchmark request accepted as an authoring invocation — TRIG
- Signature (observable signal): A request to run, score, or benchmark evals ("run the evals on [skill]", "what's the pass rate", "benchmark this") is accepted, and the session produces pass/fail results, benchmark numbers, or score tables — outputs this skill cannot ground, because it authors evals and does not execute them.
- Conditional: do NOT accept an eval-execution or benchmarking request as an eval-writer invocation when the ask is to run or score existing evals rather than author or audit them, because the skill's contract stops at authoring (Stages 0–4) — execution belongs to the pmo-skill-refiner harness and CI — and any pass-rate the authoring side reports is imagined rather than measured, which is precisely the fabricated-results failure an eval discipline exists to prevent.
- Root cause: "Evals" vocabulary blurs author and executor; the user wants a number, the skill knows the suite intimately, and predicting outcomes from reading the suite feels like service — the "you author, you do not run" boundary is stated in the Role but no input check enforces it at invocation.
- Mitigation: At mode detection, when the verb is run / score / benchmark / measure: route to the executor (pmo-skill-refiner's run_eval.py harness for per-skill suites; CI for pipeline gates) and offer the authoring-side work that IS in scope — reviewing the suite before the run, or interpreting failures after a real run produces them. Never emit a pass/fail figure no harness produced.
- Principal response vs. junior response: Principal says "authoring is mine; the run belongs to the refiner harness — invoke it, and I'll review the failures it surfaces." Junior "runs" the evals by reading them, reports "9/10 would pass," and the invented benchmark enters a release-readiness conversation as if it were measured.
Review mode applied to a non-eval audit target — TRIG
- Signature (observable signal): "Audit this" / "review this" with a SKILL.md, a skill's runtime output, or a governance doc as the target is routed into Review mode, and the A-01..A-23 anti-pattern catalog plus decision-tree rule coverage are graded against an artifact that is not an eval suite — producing category-error findings ("no judge-validation evidence") against, say, a status update.
- Conditional: do NOT run Review mode when the audit target is not an eval artifact (evals.json, judge prompts, rubrics, calibration protocols, failure taxonomies), because the audit-trigger surface is shared — pmo-qa-auditor audits skill outputs, pmo-skill-editor Mode D audits skill definitions, eval-writer Review audits eval suites — and grading a non-eval artifact against the eval anti-pattern catalog produces findings that are noise for the target while covering none of the gates the right auditor would run.
- Root cause: Review mode's trigger table keys on audit verbs, not target shape; once the mode fires, the rule machinery runs regardless of what was pasted — and eval-adjacent artifacts (a skill that contains eval instructions, a gate spec) look enough like eval content to pass a glance check.
- Mitigation: Before Review Step 1, classify the target: eval artifacts → proceed; a SKILL.md or .skill → pmo-skill-editor Mode D; a produced output → pmo-qa-auditor; a stage-gate's judgment content → in scope (the stage-gate playbook). When the target mixes shapes (a skill plus its evals/ directory), scope the review to the evals/ subtree and name the boundary.
- Principal response vs. junior response: Principal classifies the pasted artifact first, routes the SKILL.md audit to pmo-skill-editor, and keeps Review for the evals/ directory. Junior runs the A-XX audit on a SKILL.md, reports "binary-judge rule not satisfied" against a file that defines no judges, and the real definition-quality gaps (Mode D's D1–D9) go unexamined.