Practical Prose Metrics and Frontmatter

July 10, 2026 · View on GitHub

Version: v0.1 (last update 2026-07-09)
Joshua Levy (github.com/jlevy) with agent assistance

An operational appendix to the practical-prose system. The rubric is the descriptive 1-5 instrument; this doc gathers the quantitative metrics and qualitative checks that operationalize each dimension, and the recommended frontmatter schema that lets agents apply the guidelines consistently.

The metrics here are diagnostic, not the rubric. A document with no banned-register hits and a fully populated frontmatter can still score 1 on Soundness; conversely, a document with many vague-word hits may still earn a 4 if every hit is in a context where it is the right word. Use metrics to catch avoidable defects fast so that rubric scoring can focus on substantive judgment.

Metrics by Dimension

For each dimension, the table lists at least one quantitative metric and one qualitative check. “Tooling” names the operational tool today; pprose metrics is the deterministic metrics command, pprose score runs an LLM scorer against the rubric, and manual denotes a human reviewer.

§DimensionQuantitative metric(s)Qualitative checkTooling
1SuitabilityPresence of explicit purpose, audience, scope fields (frontmatter); presence of recommendation/findings/milestones section by doc typeCan a target reader say what the doc is for after 30 seconds?frontmatter check; manual skim test
2ScopePresence of scope and optionally out_of_scope fields; count of headings outside declared scopeDoes the body honor the declared boundary?frontmatter check; manual
3BreadthCount of relevant case classes addressed (out of a domain-specific expected set)Are the obvious affected areas covered?manual; SME
4DepthCount of vague magnitude words (“rapid,” “large”) not paired with quantification; count of endpoints cited where a series existsIs section depth proportional to section importance?manual; LLM-assist
5ClarityBanned-register hits (count and examples; full common-doc-guidelines §4.2 list); pedantic-marker hits (canonicality declarations, word-choice justifications, reading-order instructions); vague-word hits; sentence length distribution; mean and p95 sentence lengthDoes prose read cleanly aloud; is the document free of self-referential pedantry?pprose metrics (banned-register and pedantic-marker hits); manual for the rest
6CoherenceParagraph length distribution; presence of stub transitions (“As shown above” without recap)Does each paragraph have one job; do transitions bridge?manual; LLM-assist
7ConcisionWord count vs target by doc type; repeated n-gram count; low-information paragraph flag; replacement-history phrase hits (regex set: “previously named,” “formerly,” “under the new layout,” “removed,” etc.)Does removing a section lose information; is replacement history absent outside history-genre exceptions?pprose metrics words/paragraphs; manual cut test
8OrganizationHeading-level skip count (h1→h3 without h2); generic-heading hits (“Overview,” “Background,” “Notes,” “Details”); table count and column densities; figure-caption presence; link-target stability (no commit-less URLs to mutable refs)Are sections sequenced for the task; do tables earn their tabular shape; do headings cleave to subject contours?pprose metrics headings/tables; manual
9ConsistencyAcronym casing variance; dialect mixing; date-format variance; parallel-list violations; spaced em-dash count and em-dash density per 1000 wordsDoes the document follow the chosen style guide; are em dashes used sparingly and in American style?linter; manual
10FormattingMarkdown lint pass/fail; frontmatter present and valid; footer presentRenders correctly across mediums?flowmark / md-lint; pprose metrics footnote reference/definition counts
11DisciplineRung-tag count ([observed], [judged], [interpreted], [implied]) in audit/eval modes; multi-rung-per-sentence flagAre observation, judgment, interpretation, and implication worked through in order, each higher rung supported by the prior?pprose metrics bracket tags (audit mode); LLM-assist; manual
12Soundness[ASSUMING:] tag count where assumptions are load-bearing; count of unbridged “signal → outcome” leapsAre mechanisms named where causation is asserted; is counter-evidence engaged?pprose metrics bracket tags; manual / SME
13PrecisionVague-countable hits (“several,” “various,” “many”); umbrella-term hits (“users,” “latency”) where domain sub-distinctions matterIs the most specific term the audience can parse used throughout?banned-register / linter extension; manual
14ParsimonyCount of chains where a shorter sound chain exists (citable fact re-derived without adding inspectability or confidence; weaker warrant where a stronger one is available); count of non-load-bearing rungs flagged within load-bearing chains; per-doc parsimony-gap flag countFor each load-bearing chain, is it the minimum sufficient given its purpose and per-step warrants?LLM-assist; manual
15Verifiability% quantitative claims with source pointer; bracket-tag count by type ([VERIFIED], [UNVERIFIED], [ESTIMATED], [DERIVED:], [ASSUMING:]); footnote/citation countCan a competent reader trace claims to evidence without external lookup?pprose metrics bracket tags and footnotes; manual claim audit
16FactualityBroken-link rate; stale-source count; numeric discrepancies vs cited sourceDo cited sources actually support the claim at the asserted strength?link checker; manual / SME audit
17RelevanceCount of cited sources flagged as ancillary or tangential to the document’s purpose; count of sections marked as digression/background that load-bear on a headline claim (mislabel); count of unmarked digressions exceeding the length threshold for the doc typeFor each source and each section, does it bear on the document’s stated purpose?LLM-assist; manual
18CalibrationCount of probability claims; count of those with cited base rate; small-sample shrinkage explicit; scenario probabilities sum checkDoes claim strength match evidence strength?LLM-assist; manual
19FairnessOpposing-vs-supporting paragraph count (flag only; see note below); depth asymmetry ratio; risk-inventory class coverageAre opposing positions argued at depth proportional to their plausibility, materiality, and strength?LLM-assist; manual / SME
20RobustnessCount of explicit interpretive-lens statements; count of alternative-lens testsDo key claims survive plausible alternative interpretations?manual; LLM-assist

Most rows have a deterministic component and a judgment component. The deterministic component runs in CI and catches regressions cheaply; the judgment component runs at review time and catches substantive failures the lint will never notice. Where a row lists several quantitative metrics, pprose metrics computes only the subset named in the Tooling Map below; the rest are review-time checks (some are tracked for the planned pprose lint).

Note on J2 Fairness. The opposing-vs-supporting paragraph count and depth-ratio metrics are review flags, not measures of fairness. The guidelines define fairness as proportional representation by plausibility, materiality, and evidence strength (J2.1), not equal airtime. Symmetric paragraph counts can be a sign of false balance, not fairness; treat the count as a prompt to inspect the underlying evidence, never as proof that the document is fair.

Tooling Map

  • pprose metrics: the deterministic metrics command. Computes headings by depth, link counts (external/internal, by markdown form), footnote references and definitions, bracket-tag counts and examples (ALL-CAPS forms like [VERIFIED], colon-suffixed forms like [ASSUMING: ...] counted by their mnemonic, and the four lowercase rung tags from guidelines R1.4), bare URLs, tables, code blocks, banned-register hits (the common-doc-guidelines §4.2 list plus dominant, an advocacy-register extension; override the whole list with --banned-words-file), word/sentence/paragraph/line counts, and page estimate.
  • pprose score: LLM-based rubric scorer.
  • pprose report: creates, validates, and recomputes eval reports (combining metrics and scores).
  • pprose compare: compare N eval reports across versions or variants.
  • rubric_schema.yaml: canonical machine-readable schema for the 20 dimensions, the six groups, allowed score values, and NA-eligible dimensions.

Note: pprose metrics reports more lint signals than the eval report carries. The replacement-history, pedantic-marker, generic-heading, and em-dash-density lints (and bracket-tag examples) appear in pprose metrics output but are intentionally not copied into the eval report’s quant block, so pprose report / pprose compare never surface them. Run pprose metrics directly to see the full lint set.

For practical-prose documents (the artifacts being written and evaluated, not the eval reports themselves), the following frontmatter fields help agents apply the guidelines consistently. Required fields are minimum viable; recommended fields make the document agent-evaluable; optional fields apply when their condition is relevant.

This repo’s own reference docs, shortcuts, and runbooks carry at least the required four fields. Repo-root operational files (README.md, TODO.md, SUPPLY-CHAIN-SECURITY.md, AGENTS.md) are exempt: GitHub renders README frontmatter as a literal table, and AGENTS.md is partly generated; those files carry a version byline or rely on git metadata instead.

FieldStatusTypeMeaning
titleRequiredstringDisplay title.
descriptionRequiredstringOne-sentence summary of what the document does for the reader.
dateRequiredISO dateCreation date; never silently overwritten.
statusRequiredenumdraft, active, archived, deprecated.
purposeRecommendedstringWhat reader need this serves (decision, plan, audit, runbook, reference). Cross-checks P1 Suitability.
audienceRecommendedstringIntended reader (role, expertise level, agent vs human).
scopeRecommendedstringOne-sentence statement of what is in scope. Cross-checks P2 Scope.
out_of_scopeOptionalstring or listExplicit out-of-scope items when the boundary is non-obvious.
ownerRecommendedstringMaintainer or accountable role. Cross-checks E3 Concision (frontmatter holds machine-readable metadata) and the Maintainable principle.
last_reviewedRecommendedISO dateDate the document was last reviewed end-to-end. Useful for staleness alerts.
risk_levelRecommendedenumlow, standard, high. Drives audit-pass requirements: high-stakes docs require the four-pass review (see rubric audit-passes section); standard docs run the two-pass; low-stakes drafts may use a single pass.
source_policyOptionalenumprimary-required, secondary-ok, internal-only. Sets the strictness for G1 Verifiability.
update_triggersOptionallistEvents that should prompt re-review (release cuts, regulatory changes, dependency upgrades).
evaluation_modeOptionalenumself, external, tooling-only. Records whether the rubric is being applied by the author, by an external reviewer, or by deterministic tooling only. Cross-checks the rubric’s self-eval-overrate note.
rubric_versionRequired for eval YAMLsstringPinned rubric revision (e.g., pp20v1). Set automatically by pprose report from-metrics. Not required on the underlying artifact.

Minimum agent-evaluable set: title, description, date, status, purpose, audience, scope, owner, last_reviewed, risk_level.

Documents without explicit risk_level are treated as standard for review purposes. Documents without last_reviewed are treated as “last reviewed at date” until proven otherwise.

Applicability Profiles

The full 20-dimension rubric is sized for high-stakes documents (decision memos, audits, deep research). Applying it uniformly to a short status note produces performative-rigor failure: more scoring, less reader value. The profiles below tell agents and reviewers which dimensions are required, conditional, or typically NA based on the artifact’s risk_level and doc type. risk_level in frontmatter is the primary switch.

Profilerisk_levelRequired dimensionsConditional dimensionsTypically NA
Low-stakes note (status update, standup, brief progress note)lowP1 Suitability, E1 Clarity, E3 Concision, F3 FormattingG1 Verifiability only for material claimsG3 Relevance, R1-R4 (Discipline, Soundness, Precision, Parsimony), J1-J3 (Calibration, Fairness, Robustness)
Standard internal doc (memo, brief, internal report)standardAll Purpose (P1-P4); all Expression (E1-E3); all Form (F1-F3); G1 Verifiability; G2 Factuality; R2 SoundnessG3 Relevance, R1 Discipline, R4 Parsimony, J1 Calibration, J2 Fairness, J3 Robustness when the doc makes those kinds of claimsR3 Precision unless terminology is contested
Decision memo / audit / deep researchhighAll 20 unless explicitly NAFour-pass audit (lint / claim / reasoning / purpose; see rubric §Audit Passes for High-Stakes Evals)None by default; NA only when explicitly stated and justified
Reference / runbookstandard (override)P1 Suitability, P2 Scope, F1 Organization, F3 Formatting, R3 Precision; plus the Maintainable principleG1-G3 if the reference cites sources or makes verifiable claims; E2 Coherence on extended explanationsJ2 Fairness, J3 Robustness unless interpretive claims appear

Two operational notes:

  • Default is Standard. When in doubt, score the Standard profile. Promoting a document to High requires high-stakes content (binding decisions, audits, external research) or an explicit risk_level: high setting.
  • NA is honest, not lazy. A reference doc with no probability claims should mark J1 Calibration NA, not force a numeric score; NA dimensions are excluded from any mean, so genuinely-not-applicable dimensions never drag down the rollup.

The profiles do not override the alignment property: any score 1-4 still requires a matching violation citation under that dimension. They only tell the reviewer which dimensions to engage at all.

How Metrics Interact with the Rubric

Quantitative metrics are not scores. A banned-register hit is a candidate flag, not an E1 Clarity violation: the reviewer may accept the hit if the word is earned by an inline citation. A [VERIFIED] tag without a paired source pointer is a G1 Verifiability flag, not a hard fail: the reviewer may accept if the source is in the surrounding paragraph.

The lint pass uses metrics to catch defects deterministically. The remaining three passes (claim audit, reasoning audit, purpose audit) use judgment that metrics cannot substitute for. See the Audit Passes for High-Stakes Evals section in practical-prose-rubric.md.