Rubric changelog
Every material change to the rubric, reverse-chronological. Tagged in the public repo.
Every material change to the rubric is documented here. Versions are tagged in the public repo; entries link to the merged proposal and the resulting predicates.
A bump in the minor (e.g. v1.5 → v1.6) may flip letters without any evidence change. Affected assessments carry a rubric-shift note linking to the entry below.
v1.7.0M1 v4: severity-based scoring (Curve & Calibrate)2026-05-12#
- Replaced the four-integer deterministic-lookup rubric with a severity-based score pipeline per
PD-043. The letter is now derived from a 0–100 protocol risk score and a critical-flag count, not from category-color counts. - Per-category severity: each category receives a severity score
(red × 3 + yellow × 1) / (assessed × 3) × 100. Gray factors are excluded from the denominator; data gaps neither help nor hurt the protocol. - Protocol risk score: core-five-weighted average of per-category severities (core-five weight 1.5×; all others 1.0×), plus a critical-red penalty of 5 pts per critical-flag red, capped at 15. Total score capped at 100.
- Letter bands: F if critical_red_count ≥ 3 or score > 55; D if critical_red_count ≥ 2 or score > 35; C if score > 20; B if critical_red_count ≥ 1 or score > 12; A otherwise.
- Single-category cap: after the natural letter is assigned, a core-five category with severity ≥ 60 caps the letter at D; severity ≥ 90 forces F regardless of natural letter. Cap constants: D=60, F=90. Cap reason shown on the protocol page.
- Removed the
gray_on_core_fiveA-eligibility gate, the TVL ≥ $100M and age ≥ 12 months A floors, and the per-categoryCAT_RED_THRESHOLDoverride map. Critical-flag counts and category colors remain available for display but no longer drive the letter directly. - Calibration/launch result: initial calibration used the pre-backlog cohort; the launch generated-data tree expanded coverage substantially under
v1.7.0. The current protocol count and grade distribution should be read fromdata/api/v1.7.0/index.json; that file is the source of truth. - API:
data/api/v1.7.0/is the canonical tree. The v1.6.0 folder is archived for rollback and version-comparison. New envelope fields:risk_score,category_severities,cap_applied,cap_reason.
v1.7.0 patchRD-F-039 proposal execution recalibration2026-07-03#
- Recalibrated RD-F-039 application for governance proposal execution paths that use
callwithout executor-storagedelegatecall. Unrestricted proposal-supplied calls remain risk-bearing, but they are no longer treated as equivalent to arbitrary-code execution in the executor's own storage. - Applied the decision to the public v1.7.0 cohort only: Balancer, Ethena, Venus Protocol, JustLend DAO, Maple Finance, deBridge, Dolomite, Wormhole, and Stargate Finance.
- API impact: no schema, route, envelope, or rubric-version change. The public API remains
v1.7.0; affected protocol pages and the RD-F-039 factor page are regenerated from the public DB export.
v1.6.0Badge layer retired (superseded by v1.7.0)2026-05-11#
- Retired the badge layer entirely (CHRONIC / EVENT / ARCH / CLEAN). Per
PD-035the UI no longer renders any badge; perPD-036the backend no longer computes it.compose.pysimplified to return{letter}only. - Dropped the
headline_badgefield from the envelope schema indata/api/v1.6.0/. The v1.5.0 API folder is frozen as a legacy snapshot. - Preserved unchanged the four-count letter rubric (critical-flag, red-category, yellow-category, gray-on-core-five), category-red integrity rule, single-factor-sufficient overrides, and letter-ineligible states. v1.5 lookup logic is preserved verbatim; only the badge surfacing layer is gone.
- Active-incident state surfaces as a non-rubric presentation banner on the protocol detail page (per PD-033) drawn from the Cat 5 incident ledger. The structural letter grade is unaffected during incidents.
- F079 (root-cause distinctness) continues to score at the factor level; only the CHRONIC rollup that consumed it is dropped.
- Documented accessibility tradeoff: the canonical D3 design system uses color-on-tint patterns for letter pills and severity chips (e.g., grade-A green letter
#118a4don green tint#dff2e3at 10.5px). These render at ~3.8:1 contrast, under the WCAG 2 AA 4.5:1 threshold for small text. The patterns are load-bearing for the design's editorial identity; tightening contrast would change the visual contract. Body-text tokens (--fg-3,--fg-4) were darkened in this release for AA compliance (5.2:1 / 5.0:1). An opt-inHigh-contrast mode (AA button in the header) toggles adata-prefer-contrastattribute that swaps grade colors + tints for AA-clean variants without changing the default visual contract; see Design system v1.1 below.
Design system v1.1High-contrast mode (UI-only, no rubric change)2026-05-11#
- Added an opt-in High-contrast mode toggle (AA button) in the top bar next to the theme switcher. When enabled, the page sets a
data-prefer-contrastattribute on<html>, which swaps letter-grade foregrounds and tinted backgrounds for darker / lighter variants that pass WCAG-AA 4.5:1 on all small text. The preference persists vialocalStorage(rd-prefer-contrast) and applies on first paint to avoid FOUC. - Note: share-preview OG cards continue to use the canonical palette; they are server-rendered PNGs and do not inherit the per-user opt-in.
- Note: the rubric version (
v1.7.0) is unaffected this is a UI-only milestone tracked under the design system, not the rubric.
v1.5.0Cat 12 dissolved, yellow caps recalibrated2026-04-23#
- Dissolved Cat 12 (Legacy / deprecated state) per
PD-032. F166 → Cat 5 (Ops history); F167 → Cat 2 (Governance); F168 → Cat 9 (Post-deploy hygiene); F169 deleted outright. Cats 13/14 renumbered to 12/13. Net: 14 → 13 categories, 185 → 184 factors. - Tightened yellow caps proportionally to the new 13-category basis: B cap 11 → 10, C trigger 12 → 11. Preserves the same fraction of the category space (~77%) as the prior B/C boundary on 14 categories.
- Unchanged the ★ critical-factor count (20) and badge layer.
v1.4.0Active-incident demoted from F-trigger to EVENT badge2026-04-22#
- Demoted "active incident" from a direct F-trigger to an EVENT-badge-only signal. T-14 execution found the Aave v3 rsETH/Kelp and Compound v3 cases produced F grades on mature, structurally-sound protocols whose own architectural security was not at fault.
- Added a category-red integrity rule so active events do not cascade into multiple factor-level reds.
- Raised yellow caps on 8-protocol dry-run evidence to resolve residual C-compression. B cap 9 → 11; C trigger 10 → 12.
- Promoted F180 (immutable oracle address with no admin-replaceable wrapper) from critical-CANDIDATE to ★. ★ count: 19 → 20.