Skip to content
Conventions

Conventions

Conventions

Back to README · notes index

Files

  • doctrines/<tier>/<id>-<slug>/_index.md: one page per doctrine, with its verdicts (tier, doctrine and question list in front matter; see structure).
  • doctrines/<tier>/<id>-<slug>/reasoning.md: numbered questions and steps (S04.1.1 Scripture, .2 patristic evidence, .3 weighing, .4 source proximity).
  • notes/shared/<former-category>.md: shared plan notes and post-750 development by tradition (anchors post-<tradition>).
  • categories/ and notes/reasoning/ hold only moved-page stubs that redirect old links.
  • notes/sources/<father>.md: one file per father or council, entries S1, S2, …

Front matter

Every markdown file starts with YAML front matter: title (required), plus category, status (skeleton / plan / draft / final) and last_updated where relevant.

Links and anchors

  • Use relative links to .md files only, e.g. ../notes/sources/augustine.md#augustine-s3. No absolute site URLs. Jekyll on GitHub Pages rewrites .md links (jekyll-relative-links); MkDocs resolves them natively.
  • Stable anchors are explicit HTML tags placed right before a heading: <a id="augustine-s3"></a>. This works in both Jekyll and MkDocs without extensions. Never renumber or reuse an ID; mark withdrawn entries as withdrawn.
  • ID patterns. Justification (the first category): sources <slug>-sN, reasoning qN, qN-stepM. Later categories put their entries in the same per-father file, under a ## Topic: section, with anchors <slug>-<topic>-sN. Topic codes: bap baptism, sal salvation, euc eucharist, atn atonement, osn original sin, rel relics, ico icons, aft afterlife. Reasoning anchors use the category’s question IDs (b1, s1, e1, a1, o1, r1, i1, l1 …, each with -stepM), plus post-<tradition>.

Citation rules

  • Every claim cites the exact patristic passage (work, book.chapter.section, edition/translation, page) and the exact Scripture text (book chapter:verse, LSB in English, Greek/Hebrew for key terms).
  • Anything not checked against the primary text is marked (to verify).
  • Status levels for each source entry: verified (English) means checked against a public-domain translation online. verified (… key Greek/Latin) means the original wording was also checked. secondary-attested means the wording comes from scholarly or secondary quotation of a named edition, with the primary text not inspected; such entries count at reduced weight. to verify means not accessed, and these carry no weight.

Verdicts and weighing

  • Each verdict links to its reasoning steps and the source notes behind them.
  • Each weighing step states the readings considered, the one chosen, and why: date, context, original-language sense, breadth of witness. It also says why each rejected reading lost and gives a confidence level. Splits are allowed.

Source proximity

On every question that is not developmental, evidence is weighed in this order. Full rules and weights are in scoring.md.

TierSpanWeightRead how
SScripture (shared 66-book canon; deuterocanon noted, not scored)benchmark, scored on its own axisgrammatical-historical exegesis: original language, immediate and book context, genre, author’s intent
T1Apostolic Fathers, to c. 1501.0each father in their own setting
T2c. 150–2500.8
T3c. 250–4510.6
T4c. 451–750 (Nicaea II, 787, is counted here for the icons category)0.4
  • Every reasoning section has a Step X.4: Source-proximity weighing (anchor <q>-step4). It states the Scripture reading, lists the key sources by tier, and says explicitly where a later consensus lacks early or biblical support.
  • Developmental questions ask when or whether something is attested, or what the history of a dispute was (B2, R1, R4, I3). They are not proximity-weighted and not scored against Scripture, because a late date is the finding itself, not a weakness.
  • A verdict changes only when the re-weighing supports the change. Every change is logged in proximity-changes.md.

Rendering

Plain CommonMark plus pipe tables. No Liquid/Jinja tags or engine-specific syntax. Don’t commit build output.

Tier and doctrine IDs (since the tier migration)

  • Doctrine IDs: a tier letter and two digits, F01–F16 (first-order), S01–S20 (second-order), T01–T18 (third-order). They are shown without the leading zero (F1, S4). The catalogue is in scripts/doctrines.json, from triage §2.
  • Question IDs: the doctrine ID, a dot and a number, for example S04.1. A step is S04.1.3.
  • Legacy codes (B1, Q3, salvation/S3 …) are kept forever as aliases in data/legacy_map.yaml. In prose, always write them with their former category (salvation/S3), because bare S3 and T1 collide with doctrine IDs.
  • Father eras: the source-proximity tiers are now called Era I–IV (Era I to c. 150, Era II 150–250, Era III 250–451, Era IV 451–750). Research written before the migration calls them T1–T4. Read those as Era I–IV, not as third-order doctrines.

Stable anchors

  • Canonical anchors:
    • #s04-1 for a question
    • #s04-1-step3 for a step
    • #origin for a doctrine’s origin block
    • #tier-sensitivity on the scores page
  • Legacy anchors: every moved question and step also carries its old anchor as an empty <a id> right before the heading (for example <a id="s03-1"></a><a id="b1"></a>). scripts/migrate_tiers.py writes them from front matter questions[].legacy_anchor, so authors never type them.
  • Source anchors (#justin-martyr-bap-s1) are never renamed. The topic infix is only part of the ID, not a location.
  • Origin anchors: when one doctrine page holds origin blocks from several former categories, those blocks’ anchors are prefixed with the category (#icons-unverified).
  • Checks:
    • scripts/check_anchors.py public fails the build check on any duplicate id.
    • scripts/check_map.py fails on any unmapped legacy question.
  • Old URLs:
    • /categories/<x>/ and /notes/reasoning/<x>/ are kept as moved-page stubs. They redirect #fragment links to the exact new anchor in the browser.
    • Whole-page moves and the /d/<id>/ and /q/<id>/ short links are 301s in site/static/_redirects.