v0.14.0¶
Release Date: 2026-08-15
Highlights¶
- Layered rubric classification:
CriterionClassandEvaluationMethodtaxonomies, plusClass/Blocking/Evaluationfields on categories and criteria, let a rubric separate advisory principle-based judgment from gating implementation checks instead of collapsing everything into one composite score RubricSet.JudgeInstructions: cross-category evidence-discipline rules for the LLM judge prompt, complementing any per-categoryEvaluationPrompt- INV-3:
RubricSet.Validate()rejects aleadership_principleclass that is marked blocking — advisory judgment cannot gate implementation - Fully additive: every new field is
omitemptyand defaults to its zero value, so a v0.13.0-shaped rubric parses and validates unchanged
Overview¶
A single composite score hides an important distinction. Advisory, principle-based judgment (e.g. "does this show enough long-term thinking?") is a different kind of thing from a mechanical implementation check (e.g. "is every requirement traceable to a stable ID?"). Collapsing both into one number lets a soft, debatable dimension silently sink — or worse, block — a decision that should hinge on hard, checkable ones.
v0.14.0 adds three optional fields on both Category and Criterion that
keep these layers explicit, a RubricSet-level list of judge instructions,
and a validation invariant that prevents the most dangerous misconfiguration:
wiring advisory judgment as a hard gate.
New Features¶
CriterionClass and EvaluationMethod¶
Class names the kind of judgment a category or criterion represents;
Evaluation names how it is checked.
type CriterionClass string
const (
ClassLeadershipPrinciple CriterionClass = "leadership_principle"
ClassSpecificationQuality CriterionClass = "specification_quality"
ClassImplementationReadiness CriterionClass = "implementation_readiness"
ClassDeterministicIntegrity CriterionClass = "deterministic_integrity"
)
type EvaluationMethod string
const (
EvalMethodDeterministic EvaluationMethod = "deterministic"
EvalMethodSemantic EvaluationMethod = "semantic"
EvalMethodHuman EvaluationMethod = "human"
)
CriterionClass |
Meaning |
|---|---|
leadership_principle |
Principle-based decision lens (e.g. AWS Leadership Principles), not a completeness check. Never blocking. |
specification_quality |
Is the intended behavior complete and unambiguous? |
implementation_readiness |
Could an agent implement and verify the spec safely without guessing? |
deterministic_integrity |
Structural checks: headings, IDs, links, broken references, schema validity. |
An empty Class means unclassified (legacy rubrics); consumers should treat
it as specification_quality.
Class, Blocking, Evaluation on categories and criteria¶
cat := rubric.NewCategory("traceability", "Requirement Traceability",
"Every requirement maps to a stable ID").
WithPassPartialFail(pass, partial, fail)
cat.Class = rubric.ClassDeterministicIntegrity
cat.Evaluation = rubric.EvalMethodDeterministic
cat.Blocking = true // a broken reference is a hard stop
Blocking is an absolute veto — distinct from Required, which feeds
minCategoriesPassing. A fail on a blocking category or criterion blocks
approval regardless of other scores.
RubricSet.JudgeInstructions¶
Evidence-discipline rules that apply across all categories. Render them into the judge system prompt so the same rules govern every dimension.
rubricSet.JudgeInstructions = []string{
"Cite the relevant section and requirement IDs for every score",
"Do not reward length; reward completeness and precision",
"Distinguish missing evidence from negative evidence",
}
INV-3: advisory judgment cannot gate implementation¶
RubricSet.Validate() enforces that a category or criterion whose Class is
leadership_principle must not set Blocking:
issues := rubricSet.Validate()
// "category think_big: leadership_principle class must not be blocking
// (advisory judgment cannot gate implementation)"
TypeScript / Zod¶
@plexusone/structured-evaluation@0.14.0 regenerates the Zod schemas and TS
types for the new rubric layering fields (class, blocking, evaluation,
judgeInstructions). This regeneration also catches up the v0.13.0 claims
fields — sourceRole, minCorroboratingSources, corroborationCategories,
and maxClaimAge — which shipped in the Go types and JSON Schema then but
were not regenerated into the TS package at the time.
Backward Compatibility¶
Every new field is omitempty and defaults to its zero value. A rubric
authored against v0.13.0 (no layering fields, no judge instructions) parses
identically and validates cleanly — the only new validation error, INV-3,
fires solely when a rubric explicitly sets both Class ==
ClassLeadershipPrinciple and Blocking == true. There are no breaking
changes.
Commits¶
41e77fefeat(rubric): add layered classification and judge instructions9ee8731test(rubric): cover layered fields, legacy parsing, and INV-38b6b663docs(rubric): document layered classification and judge instructions572294cchore(ts): regenerate Zod schemas for rubric layering fields