Replies: 4 comments
Progress Update — 2026-04-04Phase 1: COMPLETE ✅ (closed #3803)Shipped across 3 PRs:
Implemented vs planned:
Design pivot: The original plan called for SVG shapes + Radix Tooltip to improve on tiny colored dots. PR #3774 went further by introducing text labels ( Current component usage:
Phase 2: NOT STARTED (issue #3804 open)Remaining work for directory pages:
Phase 3: NOT STARTED (issue #3805 open)Entity aggregate badge — blocked on Phase 2, and the plan recommends evaluating whether Tier 3 adds value based on Phase 1-2 feedback first. |
Progress Update — 2026-04-05Tier 1 Dots: Comprehensive Coverage (PR #3904)Shipped source-check dots to all remaining structured data tables across the site. 25 files changed, covering: Organization tabs (10 new):
People sections (4 new):
Other entity pages (3 new):
Political components (5 new):
FactBase shared components (3 new):
All dots currently show white ("not run") where no verdict data exists. They'll light up automatically as source-check runs are configured for each record type. Remaining work
|
|
Superseded by Discussion #3993 (Source-Check → Sourcing Rename — Implementation Plan). The architecture and naming decisions in this discussion have been consolidated into the 7-phase sourcing rename plan. Key changes: routes become |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Verification Dots Everywhere — Three-Tier Progressive Disclosure
TL;DR
Verification dots (colored indicators showing source-check status) currently appear on ~40% of data displays. The backend already supports 15+ record types with verdicts fetched at build time, but most org profile tabs, directory pages, and FactBase components don't render them. This plan adds dots to every remaining data display using a three-tier system: inline dots (Tier 1), section summary banners (Tier 2), and entity-level aggregate badges (Tier 3). Phase 1 is the highest-value work: FactBase components + high-coverage org sections + accessibility upgrades (shapes, accessible tooltips). Only directories with actual verdict coverage get dots; 0%-coverage directories are deferred until backfill runs.
Problem
Users cannot see whether structured data has been verified unless they happen to be on one of the ~12 pages that currently render verification dots. The Divisions tab shows green dots next to source-checked divisions, but the adjacent Funding tab shows no dots even though investments and publications have source-check verdicts available. This inconsistency undermines trust: users don't know if "no dot" means "not checked" or "checked and fine" or "this page just doesn't show dots." The fix is purely frontend — all verdict data is already computed and available at build time.
Current State
Components:
RecordVerificationDotcomponents/verification/RecordVerificationDot.tsxVerificationDot(FactBase)components/wiki/factbase/VerificationDot.tsxVerificationSummaryBannercomponents/directory/VerificationSummaryBanner.tsxEntityVerificationBadgeSource-check coverage:
Proposed Approach
Three-Tier Progressive Disclosure (adapted from Discussion #3586, refined by red-team):
Design decisions:
checked > 0. Always show collapsed single-line form ("8 of 12 records source-checked"). No configurable thresholds — simple guard is sufficient.@radix-ui/react-tooltip(not currently in deps) to replace HTMLtitleattributes. Supports hover + tap.Shape mapping (all 11 verdict values across both systems):
●emerald-500(green)▲red-500(red)◐amber-500(amber)◐blue-400(blue)○muted-foreground/40(gray)●blue-500(blue)Key Decisions
RecordVerificationDot+VerificationDot). They serve different data shapes. Visual consistency via shared color/shape config is sufficient. Vocabulary unification (Unify verdict vocabularies: source-check vs citation pipeline #3447) deferred.Architecture
Data flow (existing — no changes):
Phase 3 (entity aggregate — inline):
Files (all paths relative to
apps/web/src/):components/verification/verdict-config.tscomponents/verification/RecordVerificationDot.tsxtitlewith Radix Tooltip; 24px tap zone via paddingcomponents/wiki/factbase/VerificationDot.tsxcomponents/wiki/factbase/FBEntitySidebar.tsxcomponents/wiki/FBF.tsxgetKBLatest()fact ID, line ~65)components/wiki/factbase/FBFactTable.tsxapp/organizations/[slug]/main-content-sections.tsxapp/organizations/[slug]/divisions-section.tsxapp/organizations/[slug]/page.tsxapp/publications/publications-table.tsxapp/publications/page.tsxapp/legislation/legislation-table.tsxapp/legislation/page.tsxapp/investments/page.tsxapp/people/people-table.tsxapp/people/page.tsxroutes/tablebase/personnel.tscomponents/verification/EntityVerificationBadge.tsxapp/organizations/[slug]/page.tsxapp/people/[slug]/page.tsxImplementation Phases
Prerequisites (not a phase)
@radix-ui/react-tooltip(not currently in package.json).Phase 1: FactBase Components + Org Dots + Accessibility — M (1-2 sessions)
Goal: Users see verification dots on FBEntitySidebar, FBF, FBFactTable, investment and division org sections, and summary banners. Dots use shapes for colorblind accessibility and accessible tooltips.
@radix-ui/react-tooltipverdict-config.ts(filled circle, triangle, half-circle, outline)RecordVerificationDot: SVG shapes, Radix Tooltip, 24px tap zone via transparent paddingVerificationDot: same shape + tooltip changesgetKBFactVerification()+VerificationDotto FBEntitySidebar rowsVerificationDotto FBF tooltip (usinggetKBLatest()fact ID)VerificationDotcolumn to FBFactTable (after Value column)RecordVerificationDotto InvestorParticipationSection (investment,inv.key)RecordVerificationDotto DivisionsOverview compact cards (division,d.key)VerificationSummaryBannerto org tab sections (show whenchecked > 0)Note on org publications:
KeyPublicationsSectionusesLiteraturePaperobjects, not KB records with verdict keys. Adding dots here requires mapping paper titles/DOIs to publication record IDs. Defer to Phase 2 when the mapping is clarified.Quality gates:
pnpm buildpasses; visually verify on ARIA (divisions 81%), Anthropic (personnel 75%), a FactBase-heavy entity page; verify shapes are distinguishable without color; verify Radix tooltip works on mobileExit criteria: FactBase components and high-coverage org sections render accessible dots
Phase 2: Directory Page Dots + Server-Paginated Tables — M (1-2 sessions)
Goal: Public-facing directory tables with verdict coverage show dots. Server-paginated tables get verdict data from API.
verdictJoinConditionhelperVerificationSummaryBannerabove each directory tableQuality gates:
pnpm build+pnpm testpass; check all modified directories; verify people page 2+ shows dots in server modeExit criteria: All directories with >0% coverage show dots; server-paginated tables work
Phase 3: Entity Aggregate Badge (Tier 3) — S (1 session)
Goal: Org and person headers show aggregate verification badges. Evaluate whether Tier 3 adds value based on Phase 1-2 user feedback before building.
EntityVerificationBadgecomponent ("42/128 checked", color gradient)getRecordVerdictStats()per typeQuality gates:
pnpm buildpasses; badge on Anthropic, ARIA; badge hidden on zero-check entities; badge red on high-contradiction entitiesExit criteria: Entity badges render on qualifying entities
Future Work (not in this plan)
safety-milestonescollection, already covered byFBEntityFactswhich has dotsScope Cuts
FBEntityFactswhich has dots. No additional work needed.checked > 0guards are sufficient. Add tunable constants if user feedback indicates noise.Quality & Verification Infrastructure
Tests:
EntityVerificationBadge: zero checked, all confirmed, all contradicted (must NOT say "verified"), mixed verdictsRecordVerificationDottests cover rendering; new tests focus on shape rendering and tooltip accessibilitySmoke test:
pnpm build(primary gate — exercises all server components)UI verification:
Deploy steps:
Documentation:
Risks & Mitigations
Open Questions
Rejected Approaches
"Dots at the Source" (Minimalist) — Only 3 FactBase components. Rejected: user wants dots "basically everywhere."
"Verdict-Aware DataTable" (Auto-inject) — Directory tables don't share a DataTable component; no central injection point.
"Verdicts in Data Pipeline" — Increases database.json by ~700KB; couples data schema to presentation.
"Column Everywhere" — Empty columns on low-coverage tables are anti-information (Discussion #3586).
"Configurable Thresholds" — Premature. Simple
checked > 0guards are sufficient.Red Team Log
Round 1: Technical Critic (4 blocking, 4 significant)
Round 1: UX Critic (2 blocking, 5 significant)
Round 1: Scope Critic
Round 2: Revision Reviewer
Round 2: Implementability Reviewer
Supersedes
Related issues:
All reactions