How closeness scoring works
How closeness scoring works
Back to README · conventions
Three lenses. The site shows each tradition’s results through three lenses, side by side:
- Scripture closeness: agreement with the grammatical-historical reading of the biblical texts for each question (§3b).
- Fathers closeness (proximity-weighted): closeness to the patristic verdicts, weighted by how early the evidence is (§1–3a).
- Weighted average (reader’s lens):
lens(t) = w × scripture(t) + (1 − w) × fathers(t), with w = 0.5 by default and adjustable by the reader with the slider on the homepage. If a tradition has only one of the two scores, the lens shows that one.
The third lens is optional and not the verdict. The traditions themselves differ on how Scripture and tradition should be weighted (see Scripture and tradition), so the site does not choose a weighting; the default 50/50 is a neutral starting point, not a claim. The underlying verdicts and their reasoning, not any of the three numbers, are the research’s conclusions. The old unweighted patristic score is kept in the data as overall_unweighted for comparison only.
Traditions are read from the data, so the lenses and per-doctrine matrix show however many traditions the doctrine pages cover. All three lenses are tier-weighted (§3e).
The patristic scores summarise what the category files already say. They add no new judgement: each score is read mechanically off a category’s post-750 development table, using the rules below, and every score cites the row (with its anchor) it came from. The generated scores are in data/closeness.yaml, produced by scripts/build_data.py on every build, so new categories are scored automatically.
1. Rubric: verdict to a 0–4 closeness score
For each category question (Q1, B1, S1, …) and each of the nine traditions (Catholic, Orthodox, Oriental Orthodox, Lutheran, Anglican, Presbyterian, Reformed Baptist, General Baptist, Anabaptist), the tradition’s row in the post-750 table is split at commas and semicolons, and the question IDs it names are read (ranges such as B1–B4 count every question in the range).
| Score | Meaning | Rule |
|---|---|---|
| 4 | Matches the fathers | The question is listed under Closest to the fathers on and not under Departs or sharpens on. |
| 3 | Matches one patristic strand, or partly | Listed under Closest with “partly”, or the question’s verdict is itself split (wording “Split”, “vs”, or “East: … West”) so a tradition can only follow one strand. |
| 2 | Mixed | Listed under both columns, or under Departs with “partly”. |
| 1 | Departs or sharpens | Listed under Departs or sharpens on only. |
| 0 | Rejects | Listed under Departs with “rejected” or “no change” (denying the verdict outright). |
| not assessed | — | The file does not state this tradition’s position on this question. No score is guessed, and it is left out of the averages. |
Rule O (overrides). Where a row names a position in words rather than by question ID (for example “Nicaea II” or “Vigilantius’s side”), or the Overall verdict states it explicitly (“No tradition departs on O1”), the score is set by hand in scripts/closeness_overrides.json. Each override quotes its basis and cites its anchor, and is marked * on the scores page. Row notes that map to no question (e.g. “limited atonement”) are listed under each category on the scores page and are not scored.
2. Confidence weighting
Each question’s weight comes from the Confidence column of its verdict:
| Confidence | Weight w |
|---|---|
| High | 1.0 |
| Medium–high | 0.75 |
| Medium | 0.5 |
| Low–medium | 0.375 |
| Low | 0.25 |
When a cell gives two levels (e.g. “High / medium”, or “High; infants’ fate low consensus”), the lower one is used, so a partly uncertain verdict counts for less.
3. Formula
For tradition t, over the set Q(t) of questions where t has a score s:
closeness(t) = Σ_{q ∈ Q(t)} w_q · s_{q,t} ÷ Σ_{q ∈ Q(t)} w_q (0–4)
percent(t) = closeness(t) ÷ 4 × 100The same formula gives each category’s mini ranking (over that category’s questions) and the overall ranking (over all questions in all categories). Each ranking also shows how many questions a tradition’s score rests on; a score resting on fewer than half the questions is shown faded, since it is less reliable.
3a. Source-proximity tiers
| Tier | Span | Weight |
|---|---|---|
| Scripture | — | benchmark (separate axis) |
| T1 Apostolic Fathers | to c. 150 | 1.0 |
| T2 | 150–250 | 0.8 |
| T3 | 250–451 | 0.6 |
| T4 | 451–750 (Nicaea II, 787, included) | 0.4 |
The weights fall by 0.2 per tier. That is a deliberately simple, linear choice; it is not derived from anything. Proximity factor of a question = the mean tier weight of the dated key sources in its verdict row. The patristic weight is confidence weight × proximity factor. So a verdict resting only on 8th-century evidence counts 40% as much as an equally confident verdict resting on T1. Developmental questions (B2, R1, R4, I3: dates of attestation and history of disputes) get factor 1.0, because their late date is the finding.
3b. Scripture axis
For each non-developmental question, scripts/scripture_scores.json records the grammatical-historical reading (also printed in each reasoning file’s Step X.4), a Scripture confidence (weighted with the same scale as §2), and a 0–4 score per tradition with a one-line basis citing its confession. Rubric: 4 = the tradition’s position states what the texts state; 3 = consistent with the texts but goes beyond them, or underplays part of them; 2 = adds a claim the texts do not support, or strains a text; 1 = conflicts with the plain sense of a text; 0 = denies it. Questions that are not about Scripture (Q3, E3, O3) and developmental ones are left out. Only the canon all four traditions accept is scored. 2 Maccabees and the other deuterocanonical books are noted where relevant (L2), but they are not scored, and that choice disadvantages Catholic and Orthodox positions on L2.
3c. The weighted-average lens
An earlier version fixed a 60/40 blend as a headline score. That was removed. The blend now exists only as the reader-adjustable third lens described above, computed in the browser (with a 50/50 server-rendered default). It is never stored as a score in data/closeness.yaml.
3d. Judgement calls
The Scripture scores are judgements, not mechanical readings. The calls most likely to be disputed, in either direction, are listed here so readers can check them:
- B1 baptismal regeneration: the plain sense of John 3:5, Acts 2:38, Titus 3:5 and 1 Pet 3:21 is read as tying new birth to the washing.
- B3 mode: βαπτίζω and the burial imagery are read as favouring immersion.
- E1 real presence: the realist reading of 1 Cor 10–11 is judged the more natural one.
- E2 sacrifice: Hebrews’ ἐφάπαξ (“once for all”) is read against a repeated propitiatory offering.
- R2, R3 relics: miracles through relics are affirmed from 2 Kings 13 and Acts 19, while honorific prostration is read against from Acts 10 and Rev 19.
- I1, I2 images: the cherubim precedent is weighed against Deut 4 and Exod 20:5.
- S2, S3, S4 salvation: real choice and bondage held together; election by God’s purpose (Rom 9) preferred to foreseen faith; no parallel reprobation decree; preservation and warnings held together.
- Q1, Q2, Q6 justification: δικαιόω read as declarative; positive imputation treated as an inference, not an explicit text.
- L2, L3 afterlife: only the canon all four traditions share is scored, so 2 Maccabees is noted but not scored on L2, which affects the Catholic and Orthodox positions there.
- Where a tradition goes beyond the text in either direction, it is capped at 3.
Readers who dispute a reading can change one line in scripts/scripture_scores.json and rebuild.
3e. Tier weighting (“most correct”)
Since the tier migration (triage, structure), every ranking on the home page is tier-weighted and doctrine-balanced. First, each doctrine’s questions are averaged into one doctrine score, confidence-weighted as in §2 and §3. Then:
most_correct(t) = Σ_d w(tier_d) · score(t, d) / Σ_d w(tier_d) w = first-order 3, second-order 2, third-order 1- Doctrines a tradition isn’t scored on drop out of both sums. Doctrines not yet researched count for nothing.
- Each doctrine counts once, however many questions it has, so S19 (7 questions) does not outweigh S05 (1).
- The per-question variant, Σ w(tier)·w(q)·s / Σ w(tier)·w(q), is published as
most_correct_per_questionindata/closeness.yamlfor comparison. - The same rule applies to the fathers lens. The reader’s weighted-average lens blends the two tier-weighted scores.
- The untiered totals (
overall,overall_scripture) are still generated.scripts/parity_check.pychecks them, and every per-question score, against git tagpre-tier-migration. The migration changed none of them.
Tier sensitivity. Some traditions place a doctrine in a different tier (triage §3; each doctrine page lists them under “Where the tier is contested”). For each tradition, the score is recomputed with its own tiers, and the scores page shows whether its rank changes.
3f. In the faith
This uses first-order doctrines only, scored against Scripture. The band follows the weakest-link rule, applied to each question (decision of 2026-10-10):
| Band | Rule |
|---|---|
| holds all | every scored first-order question scores at least 3/4 |
| holds with qualifications | at least one first-order question scores below 3/4, and none at 1/4 or below |
| denies one or more | at least one first-order question scores 1/4 or below |
- The band depends only on the lowest first-order question. It does not use doctrine averages, so adding further questions to a doctrine cannot dilute a real qualification. (Under the earlier doctrine-average rule, adding F12.2 lifted Orthodox F12 from 2 to 3 and removed its qualification; that no longer happens.)
- Questions marked “not a Scripture question” have no Scripture score and do not count.
- The percentage shown is still the mean of the doctrine averages (each doctrine weighted equally). It is reported for information and never decides the band.
- The site names every triggering question, with its score and basis, and links to its verdict row.
- The band is marked provisional while any first-order doctrine is unresearched.
- A second figure uses each tradition’s own first-order list (scores page).
3g. Shaped by
This is built directly from scripts/emphasis.json. Each tradition gets an emphasis of 0–2 for each doctrine, from its own confessions, and each value carries a citation:
- 0: not a confessional point
- 1: stated
- 2: a defining or polemical point
shaped_by(t)[tier] = Σ emphasis(t, d) over doctrines d in that tier / Σ emphasis(t, d) over all doctrines
top 3 distinctives = the second- or third-order doctrines with the highest emphasis (ties: tier order, then doctrine number)- This doesn’t depend on Scripture or patristic scores. A doctrine counts here even if it has no Scripture score (for example S02, infant baptism, which is developmental).
- It describes how a tradition’s identity is weighted, not whether it is right.
- The earlier “distance from the median” rule was dropped.
Ranking the top three distinctives. Only second- and third-order doctrines are eligible. They are ordered by:
- emphasis (0–2), highest first;
- then the number of confessional articles, chapters, canons or anathemas the tradition devotes to the doctrine (
articlesinscripts/emphasis.json, witharticles_basissaying what was counted; where no hand count is given, the number of articles in the citation is used); - then how far the tradition’s Scripture score on the doctrine departs from the median of the nine traditions (larger first);
- then doctrine ID, so the result is deterministic.
Rule 2 measures how much confessional space a tradition gives the doctrine; rule 3 favours doctrines on which it actually stands apart. Both are shown on the data (articles, departure).
Nine traditions
The old “Presbyterian” column is now Presbyterian (WCF 1646 with the Larger and Shorter Catechisms), and its scores are unchanged. Five traditions were added, all scored from classic formulations only: Anglican, Oriental Orthodox, Reformed Baptist, General Baptist and Anabaptist (sources in notes/confessions.md). Their fathers scores are set explicitly under rule O, in closeness_overrides.json, and each cites its tradition’s post-750 section. Their Scripture scores are in scripture_scores.json. Cells that were “not assessed” for Catholic, Orthodox, Lutheran and Presbyterian were filled where the category file supports a position; existing scores were not changed. Every Oriental Orthodox cell is to verify (thin sources).
4. Limits
- Scores inherit the provisional status of the verdicts. Change a verdict or a post-750 row, and the score changes on the next build.
- Every question counts as one unit (times its confidence); the rubric does not judge which questions matter most.
- “Not assessed” is common (see the scores page): a tradition with few assessed questions can rank high on little evidence. Check the question count next to each score.
Coverage
A cell is one question for one tradition. For the Scripture measure, only Scripture questions count; for the fathers measure, every question counts. A tradition’s coverage is the number of its cells that carry a score, out of those that could be scored, reported overall and by tier (I, II, III).
- Cells are left not assessed when a position cannot be sourced (see the verification rules). They are never filled with a guess, and percentages average only scored cells.
- So a ranking based on fewer cells is less certain. If the unscored cells would have scored low, a thinly covered tradition is ranked too high, and vice versa.
- Every ranking on the home page, the scores page and each doctrine page shows each tradition’s coverage beside its name. A tradition whose coverage is more than 10 points below the median of the nine is flagged ⚠ (computed separately for the Scripture and fathers measures, and per doctrine on doctrine pages).
- Coverage is computed by
scripts/build_data.py(coverageindata/closeness.yaml).
Ranking order
Every ranking (homepage, scores page, doctrine pages, tier views and the reader sliders) sorts on the unrounded score, not on the rounded percentage or the two-decimal average shown. Tier-weighted totals are also built from unrounded doctrine averages. Ties (scores equal to within 10⁻⁹) are broken by the number of questions scored, more first, and then by the fixed tradition order used throughout the site (Catholic, Orthodox, Oriental Orthodox, Lutheran, Anglican, Presbyterian, Reformed Baptist, General Baptist, Anabaptist). Two traditions showing the same percentage may therefore appear in either order, but a lower displayed percentage never appears above a higher one. scripts/check_rankings.py checks every ranking list on each build.