Skip to content

ADR-0008: Universal hard-exclusion flag semantics

Status: Accepted Date: 2026-05-19 Supersedes:Superseded by:

Context

The institution-index page design (mock v3, design notes 2026-05-19) introduced flag chips that appear on every row, regardless of sector. The chips communicate hard-exclusion signals — categories of activity that some users will treat as disqualifying irrespective of where the institution scores on the blended ESG composite.

Two chips are in the initial set:

  • Fossil-fuel exposure
  • Weapons exposure

The mock treats these as universal: every row carries the chips, sectors differ only in how the underlying rule is evaluated.

The existing rule catalogue (ADR-0003) doesn't yet describe this. The signal sources listed are framework-membership and disclosure-style; nothing in the catalogue produces a fossil-fuel-financing or weapons-exposure rule today. ADR-0005 establishes themes as UI-only grouping inside the scored rule set, which is a different concern from hard-exclusion flags sitting outside it.

Without this ADR, the v3 mock's chips don't have a rule-catalogue home. Cycle 3 (read interface) can ship the visual treatment with NO DATA chips throughout — that's a true reflection of today's state — but the underlying semantics need to be settled before any flag-feeding scraper lands (cycle 7: BankTrack + PAX).

Decision

Hard-exclusion flags are a category of signal that sits alongside the blended ESG composite, not inside it.

Properties

  1. Binary outcome. A flag is tripped or not. There is no partial credit, no confidence-weighting that softens the outcome, no aggregation across pillars.
  2. No contribution to composite or pillar scores. Flags do not feed score_composite, score_pillar, or score_sub_criterion. They are computed and stored separately. Coverage-weighted scoring (ADR-0001) is unaffected by flag state.
  3. Universal applicability. Every institution carries every flag, regardless of sector. Sector affects how the flag is evaluated, not whether it exists.
  4. Three display states. TRIPPED (red), CLEAR (green), NO DATA (grey). NO DATA is the default until the relevant feeding source is live.

States

State Meaning Visual
TRIPPED Signal evidence exceeds the threshold for this flag Red
CLEAR Signal evidence exists and falls below the threshold Green
NO DATA No signal evidence available — neither presence nor absence Grey

NO DATA is distinct from CLEAR. CLEAR means "we looked and the institution is below threshold." NO DATA means "we haven't looked yet, or no source covers this institution."

Evaluation by sector

The same flag may be evaluated through different mechanisms depending on the institution's sector. Implementation is free to model this as one rule with a sector-aware evaluator or as parallel sector-specific rules, provided the chip presents uniformly to the user regardless of evaluation path.

For the initial two flags:

Flag Financials (sector 40) Non-financials
Fossil fuel Financing data (BankTrack, priority 5) GICS classification (Energy sector codes)
Weapons Financing data (PAX, priority 6) GICS classification (Aerospace & Defence)

Thresholds are out of scope for this ADR and are owned by the feeding-source rules themselves.

Surfacing

  • Institution index (/): chip per flag, per row, per mock v3.
  • Institution detail (/institution/:lei): a top-level flag-summary panel matching the index treatment. Adding this panel to mock v4 is a follow-up parked alongside this ADR.
  • /methodology: flags listed separately from scored rules. Each flag documents its evaluation logic per sector and the feeding source(s).

Extensibility

This ADR establishes the category. New flags can be added without a new ADR provided they satisfy the four properties above (binary, no composite contribution, universal applicability, three display states). Flags that violate any of these properties need their own ADR.

Consequences

Positive

  • The v3 index mock and the (to-be-extended) v4 detail mock have a rule- catalogue home. Cycle 3 can ship the visual treatment honestly with NO DATA chips and they'll light up correctly as feeding sources land.
  • Flags being outside the composite means coverage-weighted scoring stays semantically clean — coverage measures "what fraction of applicable scored rules have signals" and isn't muddied by hard-exclusion logic that some users treat as overriding the score entirely.
  • The category is extensible without further ADRs as long as new flags fit the shape.

Negative

  • Two parallel surfaces — scored rules and flags — increase the documentation burden on /methodology. Mitigated by listing them separately rather than trying to integrate them.
  • NO DATA being the visual default for today's pilot means the chips will read as grey across the board until cycle 7 (BankTrack + PAX) lands for the financials and a GICS-classification step is added for non-financials. This is honest but visually quiet — the design accepts this.

Neutral

  • Implementation freedom on rule-table representation (one rule with sector- aware evaluator vs. parallel sector-specific rules) means the build phase picks the pattern that fits the existing codebase best. Either is acceptable provided chip rendering is uniform.

Open items

  1. GICS-classification step for non-financials. No scraper or evaluator today reads GICS sector codes for flag-evaluation purposes. Adding this is a small piece of build work that should be sequenced before or alongside the BankTrack/PAX cycle so non-financial rows can light up too.
  2. Watchlist relationship. Some hard-exclusions might be better expressed as watchlist entries rather than universal flags (e.g. specific controversy findings rather than category-level exposure). Boundary to be revisited when the watchlist schema is designed (cycle 5, BHRRC).
  3. Detail-page flag-summary panel. Mock v4 predates this ADR and doesn't include a flag-summary panel. Adding one is a small follow-up parked under this ADR.

References

  • ADR-0001 (coverage-weighted scoring) — flags do not contribute to composite
  • ADR-0002 (UI architecture) — server-rendered HTML, chips per mock v3
  • ADR-0003 (source register) — BankTrack and PAX are listed as priority 5/6 feeding sources
  • ADR-0005 (rule grouping) — themes are UI-only grouping for scored rules, a separate concern from flags
  • Institution-index mock v3 (2026-05-19 chat session)
  • Institution-index design notes (2026-05-19 chat session)