# `festivals/` — sources and verification notes

Internal record of what the Festivals & Vrats (observance reference) 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, `FESTIVAL_SOURCES`, is a deliberately source-free disclaimer (it names
no references); research provenance lives here and in code comments only.

## What this module is

Descriptive observance reference, as a standalone module (like `tirtha/` and
`vaar/` — no `Category` value, no `getContentForDeity` wiring; reverse lookup
via `getFestivalsForDeity`). One unified `FestivalEntry` shape discriminated on
`FestivalCategory` (`ekadashi | tithi-vrat | festival`), with category-specific
optional fields and cross-link arrays into the existing modules.

**Description-only — NO dates, NO panchang.** Each entry names the *tithi /
pakṣa / month* an observance falls on (those are NAMES, fully in scope) but
ships **no computed calendar date or time** — date calculation is deliberately
out of scope (asserted by an audit invariant that rejects any Gregorian year or
clock time in a user-facing field).

This is **researched, cross-checked, shipped-provisional** content — the same
footing as the puja/tirtha/vaar modules, not the hand-typed-from-one-canonical-
text footing of the aartis/chalisas. Every story is a **sense-summary** anchored
to the cited text (never a copied translation), and every entry ships
`reviewPending: true`.

| Batch | `category` | Count | Status |
|---|---|---|---|
| Ekādaśīs (24 regular + 2 Adhika-māsa) | `ekadashi` | 26 | `draft` (Batch A) |
| Tithi-vrats (Pradoṣa / Sankaṣṭī / Pūrṇimā / Amāvasyā / Masik Śivarātri / Vinayaka Chaturthī) | `tithi-vrat` | 6 | `draft` (Batch B + E) |
| Festivals (Mahāśivarātri, Janmāṣṭamī, Navarātri, Dīwālī, …) | `festival` | 31 | `draft` (Batch C + D + E) |
| **Total shipped** | | **63** | |

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

1. **Standalone module** like `tirtha/` — no `Category` value, no
   `getContentForDeity` wiring; reverse lookup via `getFestivalsForDeity`.
2. **Unified `FestivalEntry` + discriminator**, not a per-category discriminated
   union (so `getAllFestivals()` returns one array type).
3. **26 flat Ekādaśī entries** (not a 12×2 grid): the 24 per-month names +
   the 2 Adhika-māsa Ekādaśīs (Padminī, Paramā) flagged `isAdhikaMaasa: true`.
4. **Fuller paragraph stories** (not just significance) — so this is a researched
   authoring block, cross-checked ≥2 sources per entry.
5. **`KathaSlug` typed cross-link** (the type already existed in `kathas/`; just
   referenced here) alongside `PujaSlug` / `MantraSlug` / `SuktaSlug` /
   `StotraSlug` typed links and a loose `scriptureSlug`.

## Sourcing posture (Ekādaśīs)

The 24 names + their month/pakṣa were taken from the English Wikipedia
"Ekadashi" enumeration and cross-checked against the per-Ekādaśī vrat-katha
pages. The **stories** were anchored, wherever possible, to the actual
**translated Padma Purāṇa** text (the Kriyāyogasāra Ekādaśī-māhātmya, Uttara-
khaṇḍa chapters ~38–61, Kṛṣṇa narrating to Yudhiṣṭhira) on a public Purāṇa
library, then cross-checked against ≥1 independent vrat-katha page. The
intercalary Padminī/Paramā pair was cross-checked across multiple devotional
references. (Per house style, none of those digitization sources is named in any
shipped field; `storySource` names only the **scriptural origin** — the Purāṇa +
narrator frame — which is content, like a sūkta's `vedicSource`.)

### Month / pakṣa scheme

Month names follow the **Pūrṇimānta** scheme used by the standard lists: a
kṛṣṇa-pakṣa Ekādaśī is named for the month whose Pūrṇimā *follows* it, so it
shifts one month earlier in the **Amānta** reckoning (e.g. **Ajā** =
Bhādrapada-kṛṣṇa Pūrṇimānta = Śrāvaṇa-kṛṣṇa Amānta). The data orders the 24
Chaitra → Phālguna, kṛṣṇa-pakṣa entry first within each month; the 2 Adhika-māsa
Ekādaśīs are appended (they are intercalary and recur only once every ~3 years).

### `storySource` attributions

- **Default (most entries):** Padma Purāṇa (Ekādaśī-māhātmya), Kṛṣṇa →
  Yudhiṣṭhira. Nirjalā keeps the inner frame (Vyāsa → Bhīma); Kāmikā keeps its
  inner frame (Brahmā → Nārada).
- **Exceptions (genuine departures from the Padma-Purāṇa pattern):**
  - **Āmalakī** → **Brahmāṇḍa Purāṇa** (attributed by two independent sources).
  - **Pauṣa Putradā** and **Ṣaṭtilā** → **Bhaviṣyottara Purāṇa** *tradition*
    (the popular katha frames it as Kṛṣṇa's discourse without naming a text;
    "Bhaviṣyottara" is the standard traditional attribution but the precise
    chapter is not confirmed — flagged as a soft spot below).

## Cross-links wired

- **Every Ekādaśī** → `deity: 'vishnu'` + `mantraSlugs: ['om-namo-narayanaya']`
  (the Vaiṣṇava chant; all 26).
- **Mokṣadā** → `scriptureSlug: 'bhagavad-geeta'` (tradition identifies the day
  with Gītā Jayantī).
- **Vijayā** → `mantraSlugs: ['om-namo-narayanaya', 'rama-taraka']` (the story is
  Rāma's pre-Laṅkā vrat).
- **Devaśayanī** and **Prabodhinī** → `suktaSlugs: ['narayana-suktam']` (the
  Cāturmāsya sleep/awakening of Viṣṇu).

The audit asserts every cross-link slug resolves to a real shipped item.

## Sourcing posture (tithi-vrats — Batch B, 2026-06-01)

Five recurring tithi-vrats, each cross-checked across ≥2 references (English
Wikipedia + vrat-kathā / panchang-style pages), shipped `reviewPending`. Per the
Batch-A precedent, `story` / `storySource` are **optional** here — present where a
single text is confidently attributable, soft where multi-Purāṇic, absent where
there is no single narrative at all:

- **Pradoṣa Vrat** (Trayodaśī, both pakṣas → śiva). Significance = the twilight
  (pradoṣa-kāla) Śiva fast; the weekday variants (Soma/Bhauma/Guru/Śukra/Śani)
  are noted in prose, **not** split into separate entries. Story = the samudra-
  manthana / Nīlakaṇṭha account ending in Śiva's Pradoṣa-nṛtya between Nandi's
  horns. `storySource` is **soft** — the account spans the Śiva / Skanda (and
  Padma) Purāṇas with no single confident locus.
- **Sankaṣṭī Chaturthī** (Kṛṣṇa Chaturthī, monthly → gaṇeśa). Significance = the
  Sankaṣṭa-hara fast to moonrise; Aṅgārakī (Tuesday) noted. Story + `storySource`
  = **Gaṇeśa Purāṇa (Upāsanā-khaṇḍa)**, the boon to the sage Aṅgāraka (Maṅgala),
  named by two independent references.
- **Pūrṇimā (Satyanārāyaṇa Vrat)** (full moon, monthly → vishnu). Story +
  `storySource` = **Skanda Purāṇa (Revā-khaṇḍa)**, Sūta → the sages at
  Naimiṣāraṇya — the standard attribution (recension split flagged below). Cross-
  links the existing `satyanarayan` katha + puja.
- **Amāvasyā** (new moon, monthly → **null**, pitṛ). Ships **significance-only**:
  the pitṛ-tarpaṇa / śrāddha observance has no single narrative text, so it
  carries **no `story` and no `storySource`** — the entry that exercises the
  optional-storySource path. Notable new moons (Mahālaya, Mauni, Somavatī,
  Kārtika) are named in prose.
- **Masik Śivarātri** (Kṛṣṇa Caturdaśī, monthly → śiva). Ships significance-only;
  `storySource` is a **soft** Skanda-Purāṇa (Śivarātri-māhātmya) note. Its
  founding narratives (liṅgodbhava, the unwitting hunter, Śiva–Pārvatī marriage)
  belong to the supreme **Mahāśivarātri**, deferred to the festival batch
  (Batch C) to avoid duplication.

### Cross-links wired (Batch B)

- **Pradoṣa / Masik Śivarātri** → `om-namah-shivaya` + `maha-mrityunjaya`,
  `rudrabhishek` puja, `sri-rudram` sūkta, `lingashtakam` + `bilvashtakam`
  stotras (Pradoṣa adds `shiva-tandava-stotram`).
- **Sankaṣṭī Chaturthī** → `om-gan-ganapataye-namah`, `ganesh` puja.
- **Pūrṇimā** → `satyanarayan` katha + `satyanarayan` puja, `om-namo-narayanaya`.
- **Amāvasyā** → none (pitṛ observance, no roster deity).

## Sourcing posture (festivals — Batch C, 2026-06-01)

Sixteen major calendar festivals, ordered through the lunar year Chaitra →
Phālguna (solar Makara Sankrānti sits in its Māgha season). Each cross-checked
across ≥2 references (English Wikipedia / Britannica + purāṇic / festival pages),
shipped `reviewPending`. `month` / `tithi` / `paksha` ship as NAMES; multi-day
spans (Navarātri's nine nights, Dīwālī's five days, Gaṇeśa Chaturthī's ten days)
are carried in **prose**, never as date math (per the no-new-field decision).

**Deity assignments — the judgement calls (Ishank's recommended map, executed):**

| Festival | `deity` | Note |
|---|---|---|
| Rāma Navamī, Vijayadaśamī | `rama` | Vijayadaśamī fuses two strands → **rama** primary (Rāvaṇa-vadha); the Durgā/Mahiṣāsura strand is told in prose + `storySource`. |
| Hanumān Jayantī | `hanuman` | — |
| Akṣaya Tṛtīyā | `vishnu` | Multi-strand (Paraśurāma anchor); significance-only, **no `storySource`**. |
| Guru Pūrṇimā | **`null`** | Honours the guru / Vyāsa; not a single-deity roster festival. Significance-only. |
| Rakṣā Bandhan | **`null`** | Social / sibling festival; no roster deity. Story = Bhaviṣya-Purāṇa Indra–Śacī. |
| Janmāṣṭamī, Govardhan Pūjā | `krishna` | Bhāgavata Purāṇa (Daśama Skandha). |
| Gaṇeśa Chaturthī | `ganesha` | Śiva Purāṇa (birth of Gaṇeśa). |
| Navarātri, Mahā Navamī | `durga` | Devī Māhātmya (Mārkaṇḍeya Purāṇa). Mahā Navamī cross-refs Navarātri for the full story. |
| Dīwālī | `lakshmi` | Genuinely multi-strand (Rāma's return / Narakāsura / Lakṣmī from the churning) → **no single `storySource`**; strands in prose. |
| Makara Sankrānti | `surya` | Solar festival — **no `month`/`tithi`/`paksha`** (timing is the Sun's transit), significance-only. |
| Vasant Pañcamī | `saraswati` | Soft `storySource` (Devī Bhāgavata / Brahmavaivarta). |
| Mahāśivarātri | `shiva` | Liṅga Purāṇa (liṅgodbhava) + Śiva Purāṇa (the hunter). Distinct from the Batch-B **Masik Śivarātri**. |
| Holī | `vishnu` | Holikā Dahan = Prahlāda → **vishnu** (Narasiṃha); the Braj Rādhā–Kṛṣṇa colour-play noted in prose + cross-linked `hare-krishna-mahamantra`. |

**`storySource` present** on 12 (confident single text), **omitted** on the 4
genuinely multi-strand / non-narrative days: **Akṣaya Tṛtīyā, Guru Pūrṇimā,
Dīwālī, Makara Sankrānti** (these + Mahā Navamī ship significance-only — no
`story`).

## Sourcing posture (festivals — Batch D, 2026-06-01)

Nine further major festivals, appended to `festivals.ts` as a second calendar
pass (Chaitra → Kārtika; Onam's solar Chingam in its season). Chosen to fill the
**narasimha / sita / parvati / surya** roster and to light up the existing
**`karva-chauth` katha** + the previously-unused **`om-janakyai-namah` /
`om-parvatyai-namah`** roster mantras. Cross-checked ≥2 references, `reviewPending`.

| Festival | `deity` | tithi | `storySource` |
|---|---|---|---|
| Chaitra (Vasanta) Navarātri | durga | Chaitra śukla 1–9 | Devī Māhātmya (story under Navarātri; new-year/Gudi-Padwa + Rāma-Navamī culmination in prose) |
| Sītā Navamī (Janakī Navamī) | sita | Vaiśākha śukla 9 | Vālmīki Rāmāyaṇa (Janaka finds Sītā in the furrow) |
| Narasiṃha Jayantī | narasimha | Vaiśākha śukla 14 | Bhāgavata (Saptama Skandha) |
| Vat Sāvitrī Vrat | **null** | Jyeṣṭha Amāvasyā | Mahābhārata (Vana Parva, Sāvitrī-upākhyāna) |
| Nāga Pañcamī | **null** | Śrāvaṇa śukla 5 | Mahābhārata (Ādi Parva, Āstīka-parva) |
| Hartālikā Teej | parvati | Bhādrapada śukla 3 | soft (Śiva-Purāṇa / vrat-kathā) |
| Onam | vishnu | solar (Chingam / Thiruvonam) — **no month/tithi** | Bhāgavata (Vāmana–Bali, Aṣṭama Skandha) |
| Karva Chauth | parvati | Kārtika kṛṣṇa 4 | soft (vrat-kathā, Queen Vīravatī); cross-links the `karva-chauth` katha |
| Chhath Pūjā | surya | Kārtika śukla 6 | **omitted** — ancient Vedic Sun festival, no single narrative (significance-only) |

Deity-`null` again for the non-roster observances (Vat Sāvitrī's Sāvitrī/vaṭa,
Nāga Pañcamī's serpent deities). Onam ships **no month/tithi/paksha** (solar, like
Makara Sankrānti). Chhath is the only Batch-D significance-only entry.

## Sourcing posture (festivals — Batch E, 2026-06-01)

Six further festivals + one tithi-vrat — the long-tail / regional set, chosen to
**fill the `brahma` roster** (Gudi Padwa) and complete the Gaṇeśa-Chaturthī pair
(Vinayaka Chaturthī). Cross-checked ≥2 references, `reviewPending`.

| Observance | category | `deity` | `storySource` |
|---|---|---|---|
| Vinayaka Chaturthī | tithi-vrat | ganesha | **omitted** — bright-fortnight monthly Gaṇeśa vrat (Śukla Chaturthī), the complement to Sankaṣṭī (kṛṣṇa); significance-only |
| Gudi Padwa (Ugadi) | festival | **brahma** | **omitted** — Hindu lunar new year; the Brahmā-creation belief is in prose (fills the brahma roster + `om-brahmane-namah`) |
| Baisakhi (Mesha Sankrānti) | festival | surya | **omitted** — solar new year / harvest; **no month/tithi** (solar); Vishu/Puthandu/Pohela-Boishakh/Bihu folded in as regional names |
| Buddha Pūrṇimā | festival | vishnu | **omitted** — the Buddha as the ninth avatāra (the Hindu framing); significance-only |
| Ratha Yātrā | festival | krishna | Skanda Purāṇa (Puri Jagannātha tradition) |
| Tulsī Vivāh | festival | vishnu | Padma Purāṇa (Vṛndā–Jālandhara) |
| Kārtika Pūrṇimā (Dev Dīpāvalī) | festival | shiva | Tripura-saṃhāra (Śiva / Skanda Purāṇa tradition) |

### Not shipped — needs a roster decision

**Skanda Ṣaṣṭhī / Thaipusam** (Kārtikeya / Murugan) were requested but are **NOT
shipped**: the `Deity` union (in `src/types.ts`) has no Kārtikeya / Murugan slot,
and that file is in-flight / off-limits this session. Shoehorning them into
`'other'` would misrepresent a major deity, so they wait on a roster extension —
once `kartikeya` (or similar) is added to the union, Skanda Ṣaṣṭhī (Kārtika śukla
Ṣaṣṭhī) drops straight in. **Pongal** is already a regional name under Makara
Sankrānti; **Vishu / Puthandu** are folded into Baisakhi (the same Mesha
Sankrānti).

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

1. **The three phala-stuti Ekādaśīs ship with NO story.** The translated Padma
   Purāṇa chapters for **Aparā**, **Kāmikā** and **Pāpāṅkuśā** are pure
   merit-praise (phala-stuti) with no character narrative. The popular vrat-katha
   pages attach king/ghost/hunter stories to them (e.g. the "hunter Krodhana"
   tale for Pāpāṅkuśā), but those could **not** be verified against the primary
   text, so they are **deliberately not shipped**; only the verified doctrinal
   significance ships. (Asserted by an audit invariant pinning exactly these
   three as story-less.)
2. **Devaśayanī ↔ Parivartinī conflation in popular sources.** Many sites attach
   the *King Māndhātā / three-year drought* story to **Devaśayanī (Āṣāḍha
   śukla)**. The Padma Purāṇa primary text places that drought story on the
   **Bhādrapada-śukla** Ekādaśī (its "Padmā" chapter) and gives Devaśayanī the
   **Viṣṇu-sleep / Vāmana–Bali** story instead — which is what ships. The
   Bhādrapada entry is shipped as **Parivartinī** carrying **both** strands: the
   dominant popular **Vāmana–Bali** association (Viṣṇu turning over in sleep,
   hence *Parivartinī*) **and** the Padma Purāṇa Māndhātā-drought account, with
   `storySource` noting the split.
3. **Padminī's queen name is contested.** Shipped as **Padminī** (queen of
   Māhiṣmatī, wife of Kṛtavīrya, mother of the thousand-armed Kārtavīrya Arjuna),
   the reading carried by the majority of sources; one major panchang site
   instead names the queen **Pramadā**. The king (Kṛtavīrya) and the adviser
   (the sati Anasūyā) are consistent across sources. The variant is recorded
   here, not in data.
4. **Pauṣa Putradā / Ṣaṭtilā source text unconfirmed.** Traditionally
   Bhaviṣyottara-Purāṇa material, but the fetched pages frame them only as
   "Kṛṣṇa's discourse" without naming a chapter; `storySource` says "Bhaviṣyottara
   Purāṇa *tradition*" rather than over-claiming a verified locus. Pavitrā (the
   wife in the Paramā story) is named by secondary sources only — kept in the
   Paramā story as the widely-told reading, flagged here.
5. **Secondary-character names + exact phala numbers are devotional-tradition
   level**, not critical-edition level (e.g. "fifty-seven years" of lost tapasya
   in Pāpamocanī; "eighty-eight thousand brāhmaṇas" in Yoginī; the merchant's
   city in Mohinī). Every story is `reviewPending` pending a scholar pass against
   a printed Padma/Brahmāṇḍa/Bhaviṣyottara Purāṇa edition — the central debt.
6. **Per-datum citation against a named printed edition** — as with the
   tirtha/vaar modules, this is consensus traditional material cross-checked for
   agreement across ≥2 references, not yet pinned line-by-line to a cited printed
   edition.

### Batch B (tithi-vrats)

7. **Pradoṣa & Masik Śivarātri `storySource` are soft.** Both observances are
   extolled across multiple Śaiva Purāṇas (Śiva / Skanda / Padma) without a
   single confident chapter locus; the attributions name the *tradition*, not a
   verified verse. The weekday-Pradoṣa phala (Soma/Bhauma/Guru/Śukra/Śani) is
   widely-attested devotional material, not critical-edition pinned.
8. **Satyanārāyaṇa recension split.** The kathā is carried by BOTH the Skanda
   Purāṇa (Revā-khaṇḍa — the attribution shipped) and the Bhaviṣya Purāṇa
   (Pratisarga-parvan), and the secondary character names vary by recension (the
   merchant as Sādhu / Lakṣapati; the kings Ulkāmukha / Candracūḍa / Tuṅgadhvaja).
   The story ships the widely-recited arc (poor brāhmaṇa, woodcutter, the merchant
   Sādhu + daughter Kalāvatī, the cowherds) under the Skanda/Revā-khaṇḍa frame;
   the recension variance is recorded here, not in data.
9. **Sankaṣṭī's Gaṇeśa-Purāṇa locus** (Upāsanā-khaṇḍa, Aṅgāraka's boon) is named
   by two references but not yet pinned to a printed edition — confident enough to
   attribute, flagged here as not line-verified.
10. **Amāvasyā ships no story by design** — the monthly pitṛ observance is
    dharmaśāstra / śrāddha custom, not a single Purāṇic narrative; only the
    verified significance ships, with the notable new moons named in prose.

### Batch C (festivals)

11. **Multi-strand festivals deliberately omit a single `storySource`.**
    **Dīwālī** (Rāma's return / Narakāsura / Lakṣmī from the churning),
    **Akṣaya Tṛtīyā** (Paraśurāma / Gaṅgā / Vyāsa–Mahābhārata / Akṣaya-pātra) and
    **Makara Sankrānti** (solar, non-narrative) carry their strands in
    significance prose rather than over-claiming one text. **Guru Pūrṇimā** ships
    significance-only as a guru/Vyāsa observance.
12. **Vijayadaśamī & Holī fuse two strands; one deity is chosen.** Vijayadaśamī
    → **rama** (Rāvaṇa-vadha) with the Durgā/Mahiṣāsura strand in prose +
    `storySource`; Holī → **vishnu** (Prahlāda/Narasiṃha, the Holikā-Dahan
    anchor) with the Braj Rādhā–Kṛṣṇa colour-play in prose. A consumer wanting
    the Devī or Kṛṣṇa angle should read the prose, not just `deity`.
13. **Mahāśivarātri's `storySource` spans two texts** — the liṅgodbhava (Liṅga
    Purāṇa) and the unwitting-hunter vigil (Śiva / Skanda Purāṇa); both are named
    and the marriage-of-Śiva-Pārvatī association (contested in the scholarship as
    the actual day) is **not** shipped as the founding story. Vasant Pañcamī's
    `storySource` is soft (Devī Bhāgavata / Brahmavaivarta).
14. **Calendar reckoning is named, not computed.** Janmāṣṭamī's month shows the
    Pūrṇimānta/Amānta split (Bhādrapada vs Śrāvaṇa); Mahāśivarātri notes the
    Phālguna/Māgha variance; Hanumān Jayantī's many regional dates are noted in
    prose. As with every batch, no Gregorian date or panchang time ships — these
    are observance descriptions, not a calendar.

### Batch D (further festivals)

15. **Vat Sāvitrī & Karva Chauth deity calls are soft.** Vat Sāvitrī is centrally
    the Sāvitrī–Satyavān vrat at the vaṭa (which embodies the trimūrti) — shipped
    **`null`** (no Sāvitrī / Yama roster slot), though some traditions foreground
    Gaurī. Karva Chauth's devotion is offered to Gaurī (Pārvatī) in the popular
    telling → **`parvati`**; neither is a single-deity festival.
16. **Hartālikā Teej & Karva Chauth `storySource` are soft** — the Pārvatī-penance
    and Queen-Vīravatī vrat-kathās, not pinned to a single printed locus. Hariyālī
    Teej (Śrāvaṇa śukla 3) is noted as the monsoon variant in prose, not shipped as
    its own entry. Chhath ships **story-less** (ancient Sun festival, no single
    narrative — the Rāma–Sītā / Draupadī–Karṇa associations are not shipped).
17. **Chaitra Navarātri overlaps the autumn Navarātri by design** — it ships
    significance-focused (the spring / lunar-new-year character + the Rāma-Navamī
    culmination), cross-referencing the `navratri` entry for the shared Mahiṣāsura
    story rather than duplicating it. **Maṅgalā-Gaurī remains held back** (a
    Śrāvaṇa-Tuesday *vāra*-vrat — no tithi anchor; it belongs nearer the `vaar/`
    module than here).

### Batch E (long-tail / regional)

18. **Buddha Pūrṇimā deity = `vishnu` is the Hindu-avatāra framing** — the only
    basis on which a primarily-Buddhist festival sits in this collection; the
    avatāra inclusion is itself debated (some Daśāvatāra lists carry Balarama as
    the ninth). Shipped significance-only, no dates (the traditional birth /
    enlightenment / parinirvāṇa *places* are named, not years).
19. **Gudi Padwa → `brahma` & Baisakhi → `surya` are soft calls.** Gudi Padwa /
    Ugadi is a new-year festival; `brahma` reflects the traditional
    Brahmā-created-the-cosmos-on-this-day belief (no single confident text → no
    `storySource`). Baisakhi is framed as Mesha Sankrānti (solar → `surya`,
    parallel to Makara Sankrānti); its Sikh Khālsā meaning is noted in prose,
    without a date. Kārtika Pūrṇimā's `storySource` is the multi-Purāṇic
    Tripura-saṃhāra; the Matsya-Jayantī and Guru-Nanak strands are prose-only.

## Out of scope (by design)

- **No dates / no panchang.** The tithi/pakṣa/month a vrat falls on ships as a
  *name*; the computed Gregorian date, parana window, and hari-vāsara timings do
  **not** ship (an audit invariant rejects any year or clock time in a
  user-facing field). Date calculation remains out of scope for the whole module.
- **No puja-vidhi / samagri** for the Ekādaśīs (the `Katha` module is where
  full vrat procedures live; no per-Ekādaśī katha slugs exist yet, so `kathaSlug`
  is unset on all Batch-A entries).
