# `tirtha/` — sources and verification notes

Internal record of what the Tīrtha (sacred-geography) module ships, how it was
sourced, the normalisations applied, and the remaining soft spots. **Not**
surfaced in any user-facing field — the one exported prose object,
`TIRTHA_SOURCES`, is a deliberately source-free disclaimer (it names no
references); research provenance lives here and in code comments only.

## What this module is

Finite, canonical pan-Hindu sacred-geography lists, as a standalone module
(like `vaar/` — no `Category` value, no `getContentForDeity` wiring; reverse
lookup via `getTirthasForDeity`). Six lists, one unified `TirthaEntry` shape
discriminated on `category`:

| List | `category` | Count |
|---|---|---|
| Dvādaśa Jyotirliṅga | `jyotirlinga` | 12 |
| Śakti Pīṭha (union of the principal traditions) | `shakti-peetha` | 78 |
| Char Dhām | `char-dham` | 4 |
| Chota Char Dhām | `chota-char-dham` | 4 |
| Sapta Purī | `sapta-puri` | 7 |
| Sacred rivers (sapta nadī) | `sacred-river` | 7 |
| **Total** | | **112** |

Plus three reference ślokas exported as `TirthaSloka` consts:
`DVADASHA_JYOTIRLINGA_STOTRA`, `SAPTA_PURI_SLOKA`, `SAPTA_NADI_SLOKA`.

This is **researched, cross-checked, shipped-provisional** content — the same
footing as the puja/navratri/vaar modules, not the hand-typed-from-one-canonical-
text footing of the aartis/chalisas. Every datum traces to the references below
and never to model memory; coverage-tracker rows are `draft`.

## Decisions taken (Ishank, 2026-06-01)

1. **Śakti Pīṭha model = tagged union, not "the 51" (revised 2026-06-01).**
   There is no single canonical Śakti-Pīṭha list — the count runs 51 / 52 / 64 /
   108 across texts and the named sets only partly overlap, so claiming "the 51"
   is false-canonical and always "misses" someone's site (the trigger was a
   reader asking why Naimiṣāraṇya and Uttarakhand were absent). **Option A**
   chosen: ship the *union* of the principal enumerations, with each pīṭha
   carrying which traditions include it (`isAshtadasha`, `isAdiShaktiPeetha`,
   `inSati51`, `inAshtottara108`), and anchor invariants on the two *fixed*
   canonical sets (the 18 Aṣṭādaśa, the 4 Ādi) rather than a count. **78 records:**
   the 51 Sati-aṅga spine + the 9 Aṣṭādaśa Mahā not in it + Tārā-Tāriṇī (4th Ādi)
   + the 17 identifiable physical sites unique to the Devī Bhāgavata 108.
2. **The 108 = Devī Bhāgavata Aṣṭottara-śata, identifiable sites only (Ishank).**
   Add the ~17 entries of the 108 that are real, mappable places; document the
   ~35 unidentifiable / non-geographic ones by name (below) rather than ship
   them as map pins. (108 *Divya Desams* — the Vaiṣṇava set — remain deferred;
   not to be confused with the 108 Śakti Pīṭhas.)
3. **Standalone module** like `vaar/` — no `Category` value, no
   `getContentForDeity` wiring.
4. **Unified `TirthaEntry` + discriminator**, not a per-category discriminated
   union.

## Sourcing posture, per list

- **Jyotirliṅgas (12).** Stotra order and per-liṅga location/state/significance
  cross-checked against English Wikipedia "Jyotirlinga" + the dedicated
  "Vaidyanath Jyotirlinga" / "Nageshvara Jyotirlinga" articles + pilgrimage
  references; the **Dvādaśa-Jyotirliṅga Stotra** Devanagari is verbatim from
  Sanskrit Documents (`doc_shiva/jyotirling.html`). The numbering follows the
  stotra ("Saurāṣṭre Somanāthaṃ ca Śrīśaile Mallikārjunam…"): Somnath 1,
  Mallikarjuna 2, Mahākāla 3, Omkareshwar 4, Vaidyanath 5, Bhimashankar 6,
  Rameshwar 7, Nageshwar 8, Kashi Vishwanath 9, Trimbakeshwar 10, Kedarnath 11,
  Grishneshwar 12.
- **Śakti Pīṭhas (78).** The 51 spine = the traditional Tantra-Cūḍāmaṇi
  enumeration, taken from English Wikipedia "Shakta pithas" (the only source
  carrying complete Bhairava data) and cross-checked for body-part/location
  against an independent 51-list (theshivchalisa.com). The
  18 Aṣṭādaśa Mahā cross-checked against Wikipedia's dedicated 18-Mahā table +
  hindutempleguide.com + the "Laṅkāyāṃ Śāṅkarīdevī…" stotra text — all in
  agreement on the 18. The **4 Ādi** (Kāmākhyā, Kālīghāṭ, Vimalā, Tārā-Tāriṇī)
  from Wikipedia "Tara Tarini" (which enumerates the four). The **108** = the
  Devī Bhāgavata Aṣṭottara-śata (skandha 7, ch. 30), cross-validated across an
  English translation of DB 7.30 (bhagavathybhaagavatam7) + two independent
  full lists (dharmwani, allindiatemples). **17 identifiable** physical sites of
  the 108 are shipped (those not already in the spine), each `inAshtottara108`.
  Naimiṣāraṇya (Liṅgadhāriṇī, no. 2) and the Uttarakhand sites
  (Sanmārgadāyinī/Kedāra, Kumārī/Māyāpurī, Ratipriyā/Gaṅgādvāra, Urvaśī/Badarī)
  come from this list.
- **Char Dhām / Chota Char Dhām.** Wikipedia "Char Dham" / "Chota Char Dham" +
  pilgrimage references (cardinal directions agreed unanimously).
- **Sapta Purī (7).** Wikipedia "Sapta Puri" (en + hi) + greenmesg; śloka
  attributed to the Garuḍa Purāṇa.
- **Sacred rivers (7).** Wikipedia "Rivers in Hinduism" + Hindu Janajagruti
  Samiti; the sapta-nadī śloka from greenmesg + a temple liturgical page,
  verbatim-identical across both.

## IAST (the three ślokas)

The Devanagari of `DVADASHA_JYOTIRLINGA_STOTRA`, `SAPTA_PURI_SLOKA` and
`SAPTA_NADI_SLOKA` carries an `iast` **machine-generated** from the Devanagari
with `@indic-transliteration/sanscript` and **round-trip-verified**
(Dev→IAST→Dev normalises back), the same bar the Geeta IAST and the
puja/navratri/vaar mantras meet. Anusvāra is the project standard `ṃ` (never the
overdot `ṁ`). Asserted in `scripts/audit-verify.cjs`. No other Sanskrit ships in
this module (the per-entry `nameSanskrit` is a proper noun, not transliterated).

## `deity` cross-link rule

`deity` links a site to the per-deity roster content (`null` when the presiding
form is outside the 19-deity roster). The mapping is documented and applied
uniformly:

- **Jyotirliṅgas** → all `'shiva'`.
- **Char Dhām**: Badrinath → `vishnu`, Dwarka → `krishna`, Puri (Jagannath) →
  `krishna`, Rameswaram → `shiva`. **Chota**: Yamunotri/Gangotri → `null` (the
  river-goddesses are not in the roster), Kedarnath → `shiva`, Badrinath →
  `vishnu`.
- **Sapta Purī**: Ayodhya → `rama`, Mathura/Dwarka → `krishna`, Kashi/Avantika →
  `shiva`, Kanchi → `parvati` (Kāmākṣī), Haridwar → `null`.
- **Sacred rivers**: only Sarasvatī → `saraswati` (the goddess of knowledge);
  all other river-goddesses → `null`.
- **Śakti Pīṭhas** (nearest roster Devī slot): explicit Kālī / Guhyakālī /
  Mahākālī → `kali`; Kāmākṣī / Lalitā / Tripurasundarī / Viśālākṣī / Gaurī
  (saumya Śrī-Vidyā) → `parvati`; Mahālakṣmī / Rukmiṇī → `lakshmi`; Śāradā /
  Sarasvatī → `saraswati`; Sītā → `sita`; every other Devī/Śakti form → `durga`
  (the roster's pan-Devī slot). No Śakti-Pīṭha entry is `null` — they are all
  Devī forms.

## Śakti-Pīṭha tradition flags + the 108 merge

Because no single canonical list exists, the `shakti-peetha` records are a
*tagged union*. Counts as shipped:

| Flag | Meaning | Count | Fixed? |
|---|---|---|---|
| `isAshtadasha` | the 18 Aṣṭādaśa Mahā (Śaṅkara stotra) | 18 | yes |
| `isAdiShaktiPeetha` | the 4 Ādi (Kāmākhyā, Kālīghāṭ, Vimalā, Tārā-Tāriṇī) | 4 | yes |
| `inSati51` | the Sati-aṅga 51 (body-part list) | 51 | recension-variable |
| `inAshtottara108` | identifiable Devī Bhāgavata 108 sites | 32 | recension-variable |

Every record sets ≥1 flag. The audit asserts the two *fixed* sets exactly (18, 4)
and the variable ones as documented counts (51, ≥30) — never a single "the count."

**The 108 is a distinct tradition, NOT a superset of the 51.** It is a Devī+place
enumeration with **no body-parts and no Bhairavas** (those stay blank on the
108-only entries), and it does **not** contain Kāmākhyā or Jwālāmukhī under those
names (it lists Jālandhara as Viśvamukhī, and Kāmākhyā does not appear). Where a
108 entry corresponds to a spine site under a different name, the spine record is
cross-flagged `inAshtottara108` and the 108-name noted in its `significance`
(e.g. Gāyatrī/Puṣkar = Puruhūtā; Bhramarāmbā/Śrīśaila = Mādhavī; Narmadā/Amarkantak
= Caṇḍikā; Jayadurgā/Deoghar = Ārogyā; Tripuramālinī/Jālandhar = Viśvamukhī).

**108 entries intentionally NOT shipped as sites** (recorded here so nothing is
silently dropped). The Devī Bhāgavata 108 contains ~35 entries that are mythic,
celestial, or unidentifiable — shipping them as map pins in a geography module
would be bad data, so they live here only:
- **Explicitly non-geographic / conceptual** (nos. 102–108 and a few others):
  Pārvatī "consort of Śiva", Indrāṇī "Devaloka (heaven)", Sarasvatī "consort of
  Brahmā", Prabhā "light of the sun", Vaiṣṇavī "motherhood", Arundhatī "among
  chaste women", Tilottamā "among apsaras", Parameśvarī "Pātāla (netherworld)",
  Auṣadhi "Uttarakuru (mythic land)", Kuśodaka "Kuśadvīpa (mythic continent)",
  Nidhi "abode of Kubera".
- **Unidentifiable tīrtha-names** (no firm modern location in any source):
  Madotkaṭā/Chaitraratha, Viśveśvarī, Bilvapatrikā/Bilvaka, Jayā/Varāha-parvata,
  Rudrāṇī/Rudrakoṭi, Jalapriyā/Śivaliṅga, Kapilā/Mahāliṅga, Mukuteśvarī/Makoṭa,
  Lalitāmbikā/Santāna, Utpalākṣī, Mahotpalā, Nārāyaṇī/Supārśva, Rudrasundarī,
  Kalyāṇī/Malaya, Ramaṇā/Rāmatīrtha, Koṭavī/Kotitīrtha, Śubhānandā/Śivakuṇḍa,
  Umā/Vināyaka, Pracaṇḍā/Chāgalaṇḍa, Māṇḍavī, Svāhā, Abhayā/Uṣṇatīrtha,
  Devamātā/Sarasvatī-tīrtha, Pārāvārā, Mahābhāgā/Mahālaya, Siṃhikā, Atiśaṅkarī,
  Lolā/Utpala, Lakṣmī/Siddhavana, Anaṅgā/Bharatāśrama, Tuṣṭi/Viśveśvara,
  Śivadhāriṇī/Achoda, Satyavādinī, Vandanīyā/Aśvattha, Gāyatrī/Vedavadana, and
  the vague region-only entries (Kumudā/Viśvakāma at Mānasa, Rambhā/Malaya,
  Mṛgāvatī/Yamunā, Trisandhyā/Godāvarī, Nitambā/Vindhya, Pingaleśvarī/Payoṣṇī,
  Puṣṭi/Devadāruvana, Medhā/Kashmir, Bhīmā/Himādri, Kālā/Chandrabhāgā, etc.) and
  the uncertain Gujarat/Haryana tīrtha cluster (nos. 87–90) and other
  source-divergent identifications.
- **Source divergence:** the three full 108-lists agree on order/names except
  nos. 87–90 (one list drops two entries there); the Devī Bhāgavata 7.30
  translation order was followed as authoritative.

## Cross-list overlaps (intentional)

Some sites belong to more than one tradition; each membership is a separate
record with a distinct `id`, so the lists stay independently complete:

- **Kedarnath** — `kedarnath` (jyotirliṅga) + `kedarnath-chota` (Chota Char Dhām).
- **Badrinath** — `badrinath` (Char Dhām) + `badrinath-chota` (Chota Char Dhām).
- **Rameswaram** — `rameshwar` (jyotirliṅga) + `rameswaram` (Char Dhām).
- **Dwarka** — `dwarka` (Char Dhām) + `dwarka-puri` (Sapta Purī).
- **Kashi** — `kashi-vishwanath` (jyotirliṅga) + `kashi-puri` (Sapta Purī).
- **Ujjain** — `mahakaleshwar` (jyotirliṅga) + `avantika` (Sapta Purī) +
  `mahakali-ujjain` (Śakti Pīṭha).
- **Srisailam** — `mallikarjuna` (jyotirliṅga) + `bhramaramba` (Śakti Pīṭha).
- **Maihar vs Kashmir Śāradā** — `sharada-maihar` (Sati-aṅga 51, necklace) and
  `sharada-kashmir` (Aṣṭādaśa Mahā, the Kashmir Śāradā Pīṭha) are two distinct
  sites, frequently conflated; kept separate.

## Disagreements recorded

- **Vaidyanath jyotirliṅga site** — three claimants: Deoghar (Jharkhand,
  shipped — most widely accepted in pilgrim practice), Parli Vaijnath
  (Maharashtra — textually strongest, the stotra reads "Paralyāṃ Vaidyanāthaṃ"),
  Baijnath (Himachal). No official designation.
- **Nageshwar jyotirliṅga site** — three claimants: near Dwarka (Gujarat,
  shipped — most common), Aundha Nagnath (Maharashtra), Jageshwar (Uttarakhand).
  The Śiva Purāṇa only says "Dārukāvana on the western sea," which is ambiguous.
- **Sapta-Purī śloka closing pāda** — feminine (सप्तैता … मोक्षदायिकाः, shipped)
  vs masculine (सप्तैते … मोक्षदायकाः) both attested; first hemistich identical
  everywhere.
- **Sapta-nadī śloka** — the short-i vocative सरस्वति (metrically correct,
  shipped) vs the popular सरस्वती; no firm Purāṇic attribution exists (treated as
  a traditional nitya-karma invocation of uncertain origin — no source named in
  data).
- **Kanchi deity** — Kāmākṣī (goddess, the dominant association, shipped as
  `parvati`) vs Viṣṇu (Kanchipuram has both a Viṣṇu-Kāñcī and a Śiva/Śakti-Kāñcī
  quarter).

## Soft spots — owed before any row moves past `draft`

1. **Śakti-Pīṭha bundle is the largest soft spot.** There is **no single list
   all sources agree on** — handled by the tagged-union model (above), but the
   recension-variable parts remain provisional: several **body-part assignments
   vary by source** (Amarnath/Mahāmāyā throat, the Nepal cluster Manas/Guhyeshwari
   knees-vs-other, Kamakshi navel-vs-back, Puruhutika back-vs-hip, Manikyamba
   cheek-vs-navel) and the **Bhairava names are thinly sourced** — only one
   reference (Wikipedia) carried a complete Bhairava column, so `bhairava` is
   **single-sourced** and is **omitted** where no confident name was found
   (`ugratara-mahishi`, `sharada-maihar`, the 9 Aṣṭādaśa-Mahā extras, and all 17
   Devī-Bhāgavata-108-only entries, whose tradition pairs no Bhairavas). A
   scholar pass against a printed Śākta-pīṭha edition (Pīṭhanirṇaya / Tantra-
   Cūḍāmaṇi for the 51; a printed Devī Bhāgavata for the 108) is the central debt.
2. **`panchsagar` site is contested.** Shipped at **Varanasi** (the dominant
   identification — Vārāhī, lower teeth, in the Ganga), with the Champawat /
   Devidhura (Uttarakhand) claimant recorded in its `significance`. (Earlier
   draft marked it "Unidentified"; corrected after a reader query.)
3. **`inAshtottara108` count (32) is a soft total.** It is the *identifiable*
   subset of the Devī Bhāgavata 108 plus the spine cross-flags; the ~35
   unidentifiable/non-geographic 108 entries are listed above, not shipped. The
   audit asserts `>= 30`, not an exact 108.
4. **Per-datum citation against a named printed edition** — as with the vaar
   module, this is consensus traditional material cross-checked for agreement,
   not yet pinned line-by-line to a cited printed edition.
5. **No `storySlug` cross-links yet** — the optional katha cross-links
   (e.g. each jyotirliṅga's origin story) are left unset in v1; only `pujaSlug`
   (Rudrābhiṣeka / Satyanārāyaṇa) and `mantraSlug` (Pañcākṣarī) are wired.
