ADR-0010 Amendment 2 — Deduction-rule signal-state labelling
Status: Accepted Date: 2026-05-21 Amends: ADR-0010 (Universal rule layer — UN-prefixed rules) Context: Cycle 6 (deduction-rule signal-state labelling)
What changed
ADR-0010 and its Amendment 1 documented the universal-rule layer and the fallback-chain requirement for geographically scoped sources. Both amendments were silent on how the scoring type of a rule should be surfaced in the UI. Cycle 6 resolves a labelling contradiction that emerged on institution detail pages.
Problem
Deduction rules (E7, S6, G5, G7) start at base_score = 5 (100 on the 0–100 scale) and
lose points per adverse finding within a 24-month window. When no findings exist:
score_value = 100confidence = 0.00(scraper returned confirmed-not-found, not a strong positive signal)- UI signal-state label: "positive"
This is a contradiction. "Positive" implies affirmative evidence was found; a deduction rule at base score is instead "the scraper ran and found nothing adverse." The distinction matters for how an analyst reads the rule table — a deduction rule at 100 is not the same as a positive rule at 100.
Resolution (migration 025)
A rule_type TEXT NOT NULL DEFAULT 'positive' CHECK (rule_type IN ('positive', 'deduction'))
column was added to the rule table. Deduction rules (E7, S6, G5, G7) were backfilled to
rule_type = 'deduction'; all other rules default to 'positive'.
Signal-state labels on the institution detail page now use rule_type:
| Condition | Old label | New label |
|---|---|---|
Deduction rule, covered, no findings (score_value ≥ 100) |
positive | no findings |
Deduction rule, covered, findings found (score_value < 100) |
not found | findings |
Positive rule, covered, evidence found (score_value > 0) |
positive | positive (unchanged) |
Positive rule, covered, no evidence (score_value = 0) |
not found | not found (unchanged) |
| Any rule, not covered | no scraper | no scraper (unchanged) |
A small ded chip is shown on deduction rule rows on the institution detail page and in the
rule catalogue on /methodology.
Coverage diagnostic (approach b)
The source_institution_status view remains a 6-status taxonomy (data / inherited / silent /
skip / failed / missing). All three deduction-rule sources (BANKTRACK-PROFILES,
GOOGLE-NEWS-RSS, NGO-TARGETS) also feed positive rules — a 7th no_findings status would
be semantically ambiguous at the source level.
Instead, the /coverage matrix and per-institution Coverage panel mark sources that feed at
least one deduction rule with a small d indicator. A silent cell on these sources may be
honest no-findings (deduction rule found nothing adverse) rather than a coverage gap. The
distinction is documented in docs/design/coverage-diagnostics.md addendum (cycle 6).
Related artefacts
- Migration
025_rule_type.sql— addsrule_typecolumn, backfills deduction rules src/routes/institution.js— updated signal-state labellingviews/institution.ejs—dedchip on rule rows;dedbadge on deduction-source coverage rowssrc/routes/coverage.js+views/coverage.ejs— deduction-source column markerssrc/routes/methodology.js+views/methodology.ejs— rule catalogue type column; §3.1docs/design/coverage-diagnostics.md— cycle 6 addendum