About HN HRCB

HN HRCB is a mirror of Hacker News that evaluates every story's linked content against the 30 articles and preamble of the UN Universal Declaration of Human Rights. Each evaluation produces a Human Rights Compatibility Bias (HRCB) score showing how the content's editorial and structural signals align with fundamental human rights provisions.

A cron worker crawls HN stories every 5 minutes across 6 lists (top, new, best, ask, show, job), tracking all stories but only auto-evaluating those in the top 7 pages (210 stories) of the front page plus the top 30 from the best, ask, and show feeds. Stories outside this range are tracked but skipped unless manually triggered. Fetched content passes through a content gate that classifies non-evaluable pages (paywalls, captchas, bot protection, etc.) before dispatch. Evaluable content is cleaned and sent via a Cloudflare Queue. A separate consumer worker evaluates each URL against the UDHR methodology (v3.7) using Claude, with DCP caching per domain and content snapshots stored in R2. Results are displayed alongside standard HN metadata. The evaluator operates as a Fair Witness (evidence breakdown) — reporting only what is directly observable, with no inference beyond the evidence.

Core Construct: HRCB

Human Rights Compatibility Bias (HRCB) measures the directional lean of web content relative to the provisions of the UDHR. A positive score indicates content that aligns with UDHR provisions; a negative score indicates content that conflicts with them.

-1.0 Strong negative | Neutral | Strong positive +1.0
Classification & Sentiment Reference

Classification Labels

Strong positive+0.60 to +1.00
Positive+0.30 to +0.59
Leaning positive+0.10 to +0.29
Neutral-0.09 to +0.09
Leaning negative-0.10 to -0.29
Negative-0.30 to -0.59
Strong negative-0.60 to -1.00

Story-Level Labels

Theme Tag Dominant human rights theme (e.g., "Privacy & Surveillance", "Free Expression")
Sentiment Overall disposition: Champions, Advocates, Acknowledges, Neutral, Neglects, Undermines, Hostile
Summary 2-3 sentence narrative summary in Fair Witness style

Sentiment Labels

ChampionsStrongest positive alignment — content actively defends and promotes UDHR provisions
AdvocatesActively promotes rights-aligned positions with clear editorial support
AcknowledgesRecognizes rights issues without strong advocacy or opposition
NeutralBalanced or no clear directional lean on human rights
NeglectsOverlooks or minimizes rights concerns that are relevant to the topic
UnderminesActively works against rights provisions through content or framing
HostileStrongest negative alignment — content attacks or denies fundamental rights

No Data vs 0.0

No Data
No relevant content for this UDHR article. The topic is simply absent.
0.0 (Neutral)
Relevant content exists but has balanced signals, netting to zero.

The Universal Declaration of Human Rights

Adopted by the United Nations General Assembly on 10 December 1948 (Resolution 217 A), the UDHR is a milestone document in the history of human rights. It has been translated into over 500 languages. The Declaration consists of a Preamble and 30 Articles covering civil, political, economic, social, and cultural rights — from the right to life and liberty (Article 3) to freedom of expression (Article 19) to the right to education (Article 26).

Methodology

Signal Channels

Editorial
What the content says. Analyzes text, arguments, framing, and sourcing.
Structural
What the site does. Examines privacy, accessibility, tracking, access models.

Channels are weighted by content type (e.g., Editorial=0.6, Structural=0.4). Combined: (wE × Editorial) + (wS × Structural).

Content Type Weights

Code Type E S
EDEditorial / News0.650.35
POPolicy / Legal0.700.30
LPLanding Page / Marketing0.400.60
CMCommunity / Forum0.550.45
DCDocumentation / Reference0.500.50
ACAcademic / Research0.750.25
HRHuman Rights Focused0.600.40
PRProduct / Service0.400.60
PBPersonal Blog0.700.30
SOSocial Media0.500.50
OTOther0.550.45

Content Type Consensus Vote

Content type classification directly determines the E:S weight split, so misclassification can meaningfully distort the final HRCB score. For example, an editorial article (ED: E=0.65, S=0.35) misclassified as a landing page (LP: E=0.40, S=0.60) shifts 25 percentage points of weight from the editorial channel to the structural channel.

When multiple models evaluate the same story, the system uses a majority vote to determine the consensus content type rather than trusting any single model's classification. Each full-mode rater contributes one vote; lite-mode raters do not vote (they don't classify content type). The plurality type becomes the consensus content type used for weight assignment.

Validation metrics tracked on the models dashboard:

  • Suspect rate — structural-heavy types (PO, LP, PR, AC) where the structural channel has no data, suggesting misclassification
  • Cross-model disagreement — stories where raters assigned different content types, indicating ambiguous content

Per-Provision Pipeline

Content E + S Weights Combined DCP Final HRCB aggregate

Each of 31 UDHR provisions (Preamble + Articles 1-30) is scored independently on both channels. Per-provision fields:

editorialEditorial channel score for this provision[-1, +1]
structuralStructural channel score for this provision[-1, +1]
combinedContent-type-weighted blend of E + S[-1, +1]
finalAfter DCP modifier (±0.30 max per article)[-1, +1]
evidenceEvidence strength for this provisionH / M / L / ND
directionalityHow the content engages with this rightA / P / F / C

SETL — Structural-Editorial Tension Level

SETL measures the divergence between editorial and structural signals for each article. It captures whether a site's words and infrastructure tell different stories.

-1.0 S-dominant | Balanced | E-dominant +1.0

Formula: sign(E-S) × √(|E-S| × max(|E|, |S|)). A high absolute SETL means the site's content and infrastructure are misaligned on human rights.

Fair Witness Evidence Layer

Inspired by Heinlein's Fair Witnesses from Stranger in a Strange Land, every evaluation separates its evidence into two categories:

Observable Facts
Directly verifiable statements grounded in page content. Any reader could confirm these by visiting the page.
Inferences
Interpretive conclusions drawn from the observable evidence. These explain why the evidence maps to the score.

The FW Ratio (Fair Witness Ratio) is the proportion of observable facts to total evidence items. A high ratio means the evaluation is well-grounded in verifiable observations; a low ratio means more interpretive weight. Toggle Fair Witness on any item page to switch between the standard view and a stripped-down view showing only the evidence breakdown.

FW Ratio

FW Ratio = observable_facts / (observable_facts + inferences)
Scale [0, 1]. Higher = evaluation more grounded in verifiable observations; lower = more interpretive weight.

Evidence Strength & Confidence

High Direct, explicit content with strong sourcing (max score 1.0)
Medium Clear signal but may be secondary (max score 0.7)
Low Tangential, indirect, or weakly sourced (max score 0.4)
ND Topic absent from content — not counted in aggregate (score 0.0)

Confidence is an evidence-weighted aggregate across all 31 provisions: H=1.0, M=0.6, L=0.2, ND=0.0. Higher confidence means more provisions had strong evidence.

Directionality Markers

Advocacy Explicitly argues for or against a right
Practice Site infrastructure reflects a rights stance
Framing Presents issues in a rights-aligned or rights-opposed frame
Coverage Factual content relevant to human rights topics

Volatility

Standard deviation of per-provision combined scores. Measures how uniformly content aligns across different rights.

Low< 0.10 — Consistent alignment across provisions
Medium0.10 - 0.25 — Mixed signals across provisions
High> 0.25 — Aligns on some rights but conflicts on others

Consensus (Multi-Model)

When multiple models evaluate the same story, a consensus score is computed as a weighted mean. Each rater's weight combines three factors: prompt mode (full = 1.0, lite = 0.5), self-reported confidence (floored at 0.2 so no model is silenced), and a content truncation discount.

ScoreWeighted mean across all rater evals [-1, +1]
SpreadMax minus min score across raters — measures disagreement
CountNumber of models that contributed evaluations

How Evaluations Work

  1. A URL from HN's top 7 pages (plus top best/ask/show) is fetched as the unit of analysis (other stories can be manually triggered)
  2. The page's content type is classified (Editorial, Community, HR, etc.); when multiple models evaluate the same story, a majority vote determines the consensus type
  3. Channel weights are assigned based on the consensus content type
  4. A Domain Context Profile (DCP) is constructed from 8 domain-level elements
  5. Each of 31 UDHR provisions is scored for editorial and structural signals
  6. Fair Witness evidence (observable facts + inferences) is recorded per provision
  7. Story-level labels are generated (theme tag, sentiment, executive summary)
  8. Nine supplementary signals are assessed (EQ, PT, SO, ET, SR, TF, GS, CL, TD)
  9. Aggregate statistics are computed (weighted mean, evidence profile, confidence, SETL, etc.)
  10. A final classification is assigned (Strong positive to Strong negative)

Evaluation Modes

Two evaluation modes serve different cost/quality trade-offs. Stories with only a lite evaluation show ~lite in the feed.

Full~lite
ChannelsEditorial + StructuralEditorial only
Provisions31 per-provision scoresSingle aggregate score
DCPYes (8 domain elements)No
Fair WitnessYes (facts + inferences)No
SupplementaryAll 9 signals5 (EQ, SO, TD, valence, arousal) + tone
SETLYesNo (single channel)
ConfidenceEvidence-weightedN/A
Output tokens~4-5K~200-400
Schema3.7lite-1.4
ModelsClaude Haiku 4.5, DeepSeek V3, Llama 3.3 70BWorkers AI (Llama 4 Scout, Llama 3.3 70B)
Feed labelHRCB~lite

Lite item pages display an editorial summary card instead of the full heatmap. Lite scores are editorial-only and not directly comparable to full weighted means.

Supplementary Signals & Factions

Supplementary Signals

Nine supplementary signals capture how content communicates, orthogonal to HRCB which measures directional lean. These are grounded in established psychometric and information quality frameworks. See the live signal dashboard for global averages and distributions.

EQ Epistemic Quality Source quality, evidence reasoning, uncertainty handling, purpose transparency. Based on the CRAAP Test framework from library science.
PT Propaganda Flags Detects 18 propaganda techniques (loaded language, strawman, whataboutism, etc.). Based on Da San Martino et al. (2019) PTC-18 corpus.
SO Solution Orientation Problem-only vs solution-oriented framing, reader agency score.
ET Emotional Tone Primary tone label + valence/arousal/dominance dimensions. Based on Russell's Circumplex Model of Affect.
SR Stakeholder Voice Who speaks vs who is spoken about, perspective count, voice balance. Power-axis taxonomy aligned with UDHR rights-holder/duty-bearer framework.
TF Temporal Framing Retrospective, present, or prospective focus; time horizon from immediate to long-term.
GS Geographic Scope Local, national, regional, or global scope with specific regions mentioned.
CL Complexity Level Reading level, jargon density, and assumed knowledge requirements.
TD Transparency Author identified, conflicts disclosed, funding disclosed.

Domain Signal Profiles (Factions)

The Factions page clusters domains by editorial character — how they cover topics, not just what they score. Instead of using the 31-dimension UDHR fingerprint, it clusters on 8 normalized supplementary signal dimensions:

EQEpistemic Quality SRStakeholder Representation
SOSolution Orientation TDTransparency & Disclosure
PTPropaganda (inverted) ARArousal
VAValence FWFair Witness ratio

Each dimension is z-normalized (zero mean, unit variance) across all domains with 3+ evaluations. Cosine similarity on the resulting 8D vectors measures editorial character similarity. Domains are clustered using agglomerative hierarchical clustering with average linkage at golden ratio thresholds:

Faction sim ≥ 1/φ (0.618) — core editorial alignment
Alliance sim ≥ 1/φ² (0.382) — sympathetic but distinct
Acquaintance sim ≥ 1/φ³ (0.236) — occasional overlap
Neutral sim ≥ 0 — no meaningful relationship
Rival sim < 0 — oppositional editorial profiles
Domain Context Profile (DCP)

Eight domain-level elements provide context modifiers:

PrivacyToSAccessibilityMission
Editorial CodeOwnershipAccess ModelAd/Tracking

Each element shifts per-article scores by up to ±0.30. DCP profiles cached 7 days in KV, persisted to D1. Only used in full evaluations (not lite).

Content Gate

A pre-evaluation content classifier that identifies non-evaluable pages before they enter the evaluation queue. Pure regex — no LLM calls.

CategoryDescription
paywallSubscription wall blocks content access
bot_protectionCloudflare/Akamai challenge pages
captchaCAPTCHA or verification required
login_wallAuthentication wall
cookie_wallCookie consent blocks content
geo_restrictionRegion-restricted content
age_gateAge verification required
app_gateContent only available in mobile app
rate_limitedRate limit or throttle page
error_page404, 500, or other error pages
redirect_or_js_requiredRedirect chains, dead ends, or JavaScript-only SPAs
binary_contentPDF, binary, or non-text content type (detected via Content-Type header)
js_renderedURL fetched successfully but returned no readable text (JS-rendered SPA)
no_contentStory has no URL and no self-text (cannot evaluate)
hn_removedStory flagged, deleted, or removed from HN after submission

Runs at two points: cron pre-fetch (primary gate) and consumer (safety net for KV cache misses). Writes gate_category and gate_confidence to the stories table.

Feeds & Integration

RSS Feeds (Atom)

Subscribe to HRCB-evaluated stories via /feed.xml. Filter by stance, UDHR provision, or domain — combine freely.

Filter URL Description
(none) /feed.xml All evaluated stories
?filter=negative /feed.xml?filter=negative Rights-negative stories only
?filter=positive /feed.xml?filter=positive Rights-positive stories only
?article=12 /feed.xml?article=12 Stories affecting UDHR Article 12 (privacy)
?article=19 /feed.xml?article=19 Stories affecting UDHR Article 19 (expression)
?domain=... /feed.xml?domain=nytimes.com Stories from a specific domain

Filters combine: /feed.xml?article=12&filter=negative = negative stories affecting privacy.
Download OPML to import all 31 UDHR provision feeds into your reader at once.

Embeddable Score Badges

Embed a domain's HRCB score anywhere — GitHub READMEs, blog footers, documentation.

Markdown:

![HRCB](https://observatory.unratified.org/api/v1/badge/example.com.svg)

HTML:

<img src="https://observatory.unratified.org/api/v1/badge/example.com.svg" alt="HRCB Score">

Badge colors match the HRCB score scale (red → amber → green). Cached for 1 hour.

Version History & Technical Details

Version History

v1 External-source methodology, domain-level evaluation
v2 On-domain-only, ND vs 0.0 distinction, evidence strength
v3 URL-level HRCB with Editorial/Structural channels, content types, rubrics
v3.3 Consolidation + roadmap
v3.4 Batch protocol, adversarial robustness, JSON output
v3.5 Fair Witness evidence layer, SETL, confidence metric
v3.6 Story-level labels (theme tag, sentiment, executive summary)
v3.7 Current — Nine supplementary signals (EQ, PT, SO, ET, SR, TF, GS, CL, TD)

Technical Details

Schema3.7 FrameworkAstro + CF Pages
Evaluator (full)Claude Haiku 4.5 DatabaseCloudflare D1
Evaluator (~lite)Workers AI (Llama 4 Scout, Llama 3.3 70B) SnapshotsR2 (content audit trail)
CronEvery 5 min (6 HN lists, top 7 pages) CacheKV (content + DCP)
QueueCF Queues (fan-out) Lite schemalite-1.4 (editorial only, integer 0-100)