UNPKG

hindu-devotional-texts

Version:

Hand-curated, typed, authoritative Hindu devotional content — aartis, chalisas, kathas, stotras, mantras, ashtottaras & sahasranamas, Vedic suktas, daily prayers, puja vidhi, Navratri, tirthas, the festival/ekadashi calendar, and full scriptures (Bhagavad

393 lines (310 loc) • 21 kB
# `scriptures/` — accuracy audit (2026-05-20) This is the audit record that closed out a cross-source verification pass on the two scriptures imported in the previous session (`bhagavad-geeta` and `sundarkand`). It catalogues every defect found, the sources that confirmed each, and the deterministic transform applied. The fix script (`scripts/audit-fix.cjs`) is re-runnable; the verification script (`scripts/audit-verify.cjs`) re-asserts every invariant. ## TL;DR - **Bhagavad Geeta**: cross-checked 24 verses against IIT-Kanpur Gita Supersite (5 famous + 14 random, plus 5 confirmed at the matra-corrected positions); all 25 previously-repaired matra verses re-verified canonical against two sources; ran a full-corpus 701-verse comparison against Sanskrit Documents with orthographic-variant normalisation. **6 defects fixed** (1 missing suffix, 14-verse phantom-र, 1 letter substitution, 1 verse-initial vowel, 3 decomposed-nukta long ṛ, 1 stray nukta) — total 21 verses changed. - **Sundarkand**: spot-checked 10 doha-segments against Drik Panchang and Sanskrit Documents Tulsidas. **2 defects fixed** — segment 44 missing a ृ matra, and the three opening mangalacharan shlokas restored (previously a documented soft spot) after confirming the text across three sources. - **All invariants pass post-fix** — 45/45 in `audit-verify.cjs`, including IAST round-trip across all 701 Geeta verses. ## A. Bhagavad Geeta verse-text accuracy ### A1 / A2 — Cross-check against IIT Kanpur Cross-checked 24 verses end-to-end against IIT Kanpur Gita Supersite, akshara- level (whitespace ignored, speaker-tag handling). 23 of 24 matched exactly. Five additional famous verses (2.7, 5.1, 7.3, 12.17, 12.19) and 15 verses from the matra-fix family were also checked and confirmed canonical. Famous verses verified: 1.1, 2.47, 4.7, 4.8, 9.22, 11.32, 15.1, 18.66, 18.78. Random verses verified: 1.26, 2.16, 3.6, 5.24, 6.23, 7.5, 8.23, 9.31, 10.21, 12.4, 13.30, 14.15, 16.5, 17.25 (defect found, see below), 18.45. The one mismatch (17.25) is a real defect — see §A3 below. ### A2 — All 25 matra-corrected verses Re-verified each of the 25 verses repaired in the previous session (निश्चित / त्रिविध / भक्ति / व्यक्ति family). Results: - **5 verses** (2.7, 5.1, 7.3, 12.17, 12.19): our repair produces the same form IIT Kanpur uses — exact akshara match. - **20 verses**: IIT Kanpur **itself** still carries the malformed `्ि` / `ि्` cluster in their digital edition. Our shipped form is the canonical (matra correctly placed on the consonant), with character multiset identical to IIT's malformed version — confirming the repair is purely an order-fix, not content modification. The canonical direction was independently confirmed via Mukundananda's holy-bhagavad-gita.org for 3.2, 13.5, and 7.17 — all three show the form our repair produces, not IIT's malformed form. ### A3 — Cross-check against Sanskrit Documents (full corpus, all 701 verses) Used the all-in-one Devanagari Gita at `sanskritdocuments.org/doc_giitaa/bhagvadnew.html`. Parsed all 701 verses, ran a substring/multiset comparison against the shipped data with orthographic- variant normalisation (anusvara ↔ homorganic nasal, avagraha/visarga normalisation, nukta-decomposition). Result: **547 verses byte-identical, 87 differ only in known orthographic variants** (anusvara `ं` vs homorganic `ङ्/ञ्/ण्/न्/म््` before plosives — IIT style vs SD style; sandhi-applied vs sandhi-elided compound boundaries), **67 had remaining differences**, of which: - **18 were parser artifacts** (chapter-starts include the preceding chapter's closing colophon and the following chapter's dhyāna shloka in SD's layout — false positives). - **8 were SD-internal parenthetical alternative readings** in SD's edition apparatus (e.g. `(सौमदत्तिर्जयद्रथश्च…)` after 1.8) — not present in IIT or in our shipped form, so not a defect. - **3 were edition-level textual variants** between IIT and SD — both readings attested by scholarly sources, our shipped follows IIT: - 2.33 `अथ चैत्त्वमिमं` (IIT, shipped) vs `अथ चेत्त्वमिमं` (SD, Mukundananda) — `चै` vs `चे`. The `चेत्` reading parses as "and if" grammatically; IIT prints `चैत्`. Edition disagreement, no fix. - 2.64 `रागद्वेषवियुक्तैस्तु` (IIT, shipped, Mukundananda) vs `विमुक्तैस्तु` (SD) — 3 sources agree on `वियुक्तैस्तु`; no fix. - 18.68 `य इमं परमं गुह्यं` (IIT, gita/gita, shipped) vs `य इदं परमं गुह्यं` (SD, Mukundananda) — `इमं` ("this here") vs `इदं` ("this"). Edition variant; no fix. - **6 real defects** found (one or more authoritative sources show the canonical form is different from what we shipped). These are documented below and **all fixed**. #### Defect 1 — 17.25 missing instrumental-plural suffix - **shipped**: `…मोक्षकाङ्क्षि।।17.25।।` - **canonical**: `…मोक्षकाङ्क्षिभिः।।17.25।।` - **sources confirming the canonical**: - IIT Kanpur Supersite (`भि:` rendered with ASCII colon for visarga, same character). - Sanskrit Documents (`मोक्षकाङ्क्षिभिः ॥ १७-२५॥`). - Swami Mukundananda (`मोक्षकाङ्क्षिभि:`). - **fix transform**: append `भिः` immediately before `।।17.25।।`. Single replacement, multiset diff is exactly the addition of "भिः". #### Defect 2 — 14 verses with phantom `र` in the शृ-imperative The Sanskrit imperative root `śṛ-` ("listen!") spells canonically as `शृ` (श + ृ vocalic-R matra). The source dataset encodes 14 instances as `श्रृ` (श + ्virama + र + ृ), i.e. inserting an extra `र` consonant between श and the vocalic-R matra. This is a non-canonical Unicode form: there's no `r` phoneme in `śṛṇu`/`śṛṇoti`. - **verses**: 2.29, 2.39, 5.8, 10.1, 10.18, 13.4, 16.6, 17.2, 17.7, 18.4, 18.29, 18.36, 18.64, 18.71. - **sources confirming canonical `शृ`**: - IIT Kanpur for 2.39 (canonical `शृणु`); for 2.29 IIT itself carries the same malformed `श्रृणोति` — they share the defect. - Mukundananda for 2.29 (`शृ्णोति` — a different defect at IIT's word, but the imperative root is `शृ`, not `श्रृ`) and 2.39 (clean `शृणु`). - Sanskrit Documents uses `श‍ृ` (ZWJ-separated rendering of the same `शृ`). - **fix transform**: replace `श्रृण` with `शृण` everywhere. 14 replacements; multiset diff per verse is the removal of one `्` + one `र`. #### Defect 3 — 1.34 letter substitution: `श्चशुर` → `श्वशुर` - **shipped**: `मातुलाः श्चशुराः पौत्राः…` - **canonical**: `मातुलाः श्वशुराः पौत्राः…` ("uncles, fathers-in-law, grandsons" — `śvaśura` is "father-in-law"). - The defect: the source has `च` (palatal stop) where canonical is `व`. The word `श्चशुर` is not a Sanskrit word. - **sources confirming canonical**: - IIT Kanpur (`मातुलाः श्वशुराः`). - Mukundananda (`मातुला: श्वशुरा:`). - Sanskrit Documents (`मातुलाः श्वशुराः`). - **fix transform**: single replacement `श्चशुराः` → `श्वशुराः`. #### Defect 4 — 16.20 verse-initial vowel: `असुरीं` → `आसुरीं` - **shipped**: `असुरीं योनिमापन्ना…` (asurīṃ — "asura-feminine") - **canonical**: `आसुरीं योनिमापन्ना…` (āsurīṃ — "demoniacal-feminine [womb]", the adjective from `āsura`). - Grammatically the verse asks about those who attain an *āsurī*-yoni — the adjectival, long-vowel form is the standard reading. - **sources confirming canonical**: - IIT Kanpur (`आसुरीं योनिमापन्ना`). - Mukundananda (`आसुरीं योनिमापन्ना`). - Sanskrit Documents (`आसुरीं योनिमापन्ना`). - **fix transform**: replace verse-initial `असुरीं ` with `आसुरीं `. #### Defect 5 — 3 verses with decomposed long vocalic-R (`ृ + ़` → `ॄ`) Sanskrit Unicode provides a precomposed long-vocalic-R matra `ॄ` (U+0944). Three verses in the source dataset use the non-canonical decomposed encoding `ृ + ़` (short vocalic-R + combining nukta), which both renders correctly in many fonts but doesn't round-trip cleanly through transliteration and isn't the canonical Unicode form. - **verses**: 1.26 (`पितृ़न` → `पितॄन्`, also `भ्रातृ़न्` → `भ्रातॄन्`), 9.25 (`पितृ़न्`), 10.29 (`पितृ़णाम`). - **sources confirming canonical `ॄ`**: - Sanskrit Documents (`पितॄन`, `भ्रातॄन्`, `पितॄणाम`). - **fix transform**: replace `ृ + U+093C` with `ॄ`. Four occurrences across three verses; multiset diff per occurrence is `−U+093C` and `ृ → ॄ`. - **collateral benefit**: the IAST for these verses was producing literal Unicode nuktas in the output (e.g. `pitṛ़n` instead of `pitṝn`). After the fix, sanscript emits the canonical `ṝ`. #### Defect 6 — 4.31 stray nukta between vowel sign and avagraha - **shipped**: `नायं लोकोऽस्त्ययज्ञस्य कुतो़ऽन्यः…` — `कुतो + nukta + अवग्रह`. - **canonical**: `नायं लोकोऽस्त्ययज्ञस्य कुतोऽन्यः…`. - The nukta has no role here (no consonant to modify) — pure encoding noise. - **sources confirming canonical**: - IIT Kanpur (verified via raw HTML). - The IAST artifact `kuto़'nyaḥ` in the shipped data was itself diagnostic. - **fix transform**: replace `कुतो़ऽन्यः` with `कुतोऽन्यः`. Multiset diff is `−U+093C`. ### A4 — Colophons and missing verses Sanskrit Documents and Gita Press editions include a closing colophon after each chapter — `ॐ तत्सदिति श्रीमद्भगवद्गीतासूपनिषत्सु ब्रह्मविद्यायां योगशास्त्रे श्रीकृष्णार्जुनसंवादे [chapter-name]-योगो नाम [chapter-ordinal]ोऽध्यायः ॥ N॥`. Our import does not include these. The colophons are paratext (the Gita itself does not internally describe its own chapter boundaries); whether to include them is an editorial choice rather than a defect. **Not fixed** — flagging as a soft spot. A future session that decides to ship them can pull all 18 from SD's `bhagvadnew.html` deterministically. Verse counts: all 18 chapters present, gap-free and sequential, matching the canonical counts (47, 72, 43, 42, 29, 47, 30, 28, 34, 42, 55, 20, 35, 27, 20, 24, 28, 78 — total 701). No missing verses. ## B. Sundarkand verse-text accuracy ### B1 / B3 — Cross-check against Drik Panchang and Sanskrit Documents Spot-checked 10 doha-segments (1, 2, 3, 30, 39, 45, 56, 58, 59, 60) against Drik Panchang per-page lyrics, then ran a full-text substring comparison of all 60 segments against Sanskrit Documents' Tulsidas Sundarkand HTML (`sanskritdocuments.org/doc_z_otherlang_hindi/sundarakaaNDa.html`). 52 of 60 matched as exact substrings in SD; 8 differed in minor ways. Of those: - **6 are SD-format artifacts**: SD uses `दो.` / `सो.` / `छं.` short labels and inserts hyphens at line breaks (e.g. `बचावन-बात…`). None are defects. - **1 is a known Awadhi spelling difference**: segment 15 `तत्व` (shipped, Drik) vs `तत्त्व` (SD). Drik agrees with our shipped against SD's Sanskritised double-त; we keep the Awadhi-natural form. - **1 is a real defect** — segment 44, see below. ### Defect — segment 44 missing ृ matra - **shipped**: `जौं पै दुष्टहदय सोइ होई…` - **canonical**: `जौं पै दुष्टहृदय सोइ होई…` (`hṛdaya`, heart). - **sources confirming canonical**: - Drik Panchang (`दुष्ट हृदय`). - Sanskrit Documents (`दुष्टहृदय`). - **fix transform**: replace `दुष्टहदय` with `दुष्टहृदय`. Multiset diff is exactly the addition of one `ृ` matra. ### B2 — Mangalacharan shlokas (closed) The three Sanskrit shlokas that open Tulsidas's Sundarkand (`शान्तं शाश्वतम्…`, `नान्या स्पृहा…`, `अतुलितबलधाम्…`) were absent from the WirelessAlien source dataset and flagged as a soft spot in the previous session. This audit confirmed identical text across **three** independent authoritative sources: 1. **Drik Panchang** (`drikpanchang.com/lyrics/ramcharitmanas/sundarkand/sundarkand-lyrics.html`). 2. **Sanskrit Documents Tulsidas** (`sanskritdocuments.org/doc_z_otherlang_hindi/sundarakaaNDa.html`). 3. **BhaktiBharat** (the source cited in the previous session's SOURCES.md note — confirmed independently here). Where the three sources differed only on minor orthography (`पुङ्गव`/`पुंगव`, `चूड़ामणिम्`/`चूडामणिम्`), we used the form that matches the rest of the corpus's homorganic-nasal style. **Schema choice**: inserted as 3 leading `ScriptureVerse` entries inside the existing single `Chapter` rather than as a new chapter — this keeps the doha- segment indices (60) intact at positions 4..63 and matches how printed editions render the opening: the shlokas precede the first chaupai inside the same kand. Total verses now 63. This closes the Phase 4 Sundarkand soft spot for the mangalacharan. ### Remaining soft spots (unchanged) The other previously-documented soft spots remain unchanged: - No human verification against a printed Gita Press edition (both scriptures). - IAST is machine-generated and has not had a human Sanskrit-reviewer pass (Geeta). - Sundarkand verse-end markers stay `।।N।।` ASCII-digit form (source's convention). - No translations. - No Awadhi Roman-script chant for Sundarkand. ## C. IAST quality The shipped IAST is strict-IAST (śāstrīya), not the popular hybrid (`śh`, `ṣh`, `ch`, hyphen-separated compounds) used by sites like Mukundananda. It follows the source Devanagari's compound joining (sandhi-applied form, compounds joined without hyphens) and uses `|` / `||` for `daṇḍa` / `double-daṇḍa`. Round-trip verified for **all 701 verses** post-fix (the previous round-trip also passed; the audit fix only widened the toleration to cover daṇḍa-form mismatches in the trailing verse-id marker). Known sanscript artifacts (unchanged from the previous session's posture): 1. `oṃ` ↔ `ॐ` re-ligature — when the source contains a syllable that transliterates to `oṃ` (e.g. 9.17 `…पवित्रमों…`, 10.41 `…तेजों…`), the IAST→Devanagari back-transliteration may re-segment the surrounding consonant, splitting it off from the `ओम्` syllable. Documented and tolerated in the verification's normalisation. 2. Compounds rendered as joined words rather than hyphenated. Faithful to source; intentional. 3. Daṇḍa rendered as ASCII `|`. Convention choice. 4. Avagraha rendered as ASCII `'`. Convention choice. The four-verse stray-nukta defect (Defect 5/6 above) was also producing literal Unicode nuktas in the IAST output; fixing the Devanagari fixed the IAST as a byproduct. ## D. Source-defect scan ### Bhagavad Geeta (`gita/gita`) Per-chapter verse counts checked against canonical: all 18 match exactly, gap-free and sequential (47, 72, 43, 42, 29, 47, 30, 28, 34, 42, 55, 20, 35, 27, 20, 24, 28, 78 — total 701). All defects found in `gita/gita` are listed under §A3 above (six distinct defect classes, 21 verses changed). A note on IIT Kanpur as a "trusted" source: IIT Kanpur Gita Supersite is a high-quality scholarly edition but is **not** byte-canonical — it shares the matra defect with `gita/gita` for 20 of 25 verses, and itself prints `श्रृणोति` rather than `शृणोति` at 2.29. Treat it as one source among several, not the canonical reference. ### Sundarkand (`WirelessAlien/Ramcharitmanas`) Found defects: see §B (segment 44 missing matra, mangalacharan absent — both addressed). All 60 segments have both `चौपाई` and `दोहा/सोरठा` labels and the correct sequence of doha numbers 1..60 (with the expected क/ख splits at 39, 49, 56). The dataset uses inconsistent nukta encoding for the Awadhi retroflex flap (both precomposed `ड़`/`ढ़` and decomposed `ड`+`़` / `ढ`+`़` forms appear), which the previous session's note already covered. The variant is rendered identically by all major fonts; not a defect. ## E. Chapter titles and schema ### Geeta `titleSanskrit` Compared the shipped chapter Sanskrit titles to the colophon names in Sanskrit Documents' bhagvadnew.html. Most match exactly; a few notes: - **Ch 2**: shipped `सांख्ययोग` (anusvara) vs colophon `साङ्ख्ययोगः` (homorganic) — orthographic variant only; the rest of the corpus uses anusvara consistently. - **Ch 5**: shipped `कर्मसंन्यासयोग` vs colophon `संन्यासयोगः` — the gita/gita source has the longer name (also widely attested in printed editions). - **Ch 6**: shipped `ध्यानयोग` ("Yoga of meditation") vs colophon `आत्मसंयमयोगः` ("Yoga of self-restraint") — both names refer to the same chapter; the gita/gita source uses the popular short name. - **Ch 13**: shipped includes a hyphen (`क्षेत्र-क्षेत्रज्ञविभागयोग`); the colophon does not. These are all variant-acceptable names; no fix proposed. A future verification pass against printed Gita Press editions can choose between the popular and colophon forms. ### Geeta `titleEnglish` Shipped uses the `name_meaning` descriptive titles from `gita/gita` (e.g. "Arjuna's Dilemma", "Transcendental Knowledge"). These are not the scholarly "Yoga of …" renderings (e.g. "The Yoga of Arjuna's Dejection"). Both styles have precedent. **Recommendation**: keep the descriptive titles as the primary `titleEnglish`. A future schema extension could add an optional `titleColophonEnglish` for the scholarly form; not done here. ### Sundarkand schema Currently a single `Chapter` with N `ScriptureVerse` entries (now 63 — 3 mangalacharan + 60 doha-segments). The natural citation unit is the doha number, so verse index 4..63 maps to doha 1..60. An alternative would be 60 separate `Chapter`s (one per doha-segment, each holding the chaupai couplets and the closing doha), with the mangalacharan as either a dedicated opening chapter or three "verses" inside chapter 1. The current schema mirrors the Geeta's ("chapter = major division, verse = single named unit"). The 60-chapter schema would over-fragment a small text and complicates the mangalacharan placement. **Recommendation**: keep the current schema; the cost of changing it is higher than the consumer-side benefit. Consumers wanting per-doha pagination can split on the trailing `।।N।।` / `।।N(क)।।` / `।।N(ख)।।` marker. ## Reproduction ```bash # In a fresh checkout: npm install npm run build node scripts/audit-verify.cjs # asserts all 45 invariants ``` To re-apply the fix (idempotent — second run will refuse, asserting expected pattern counts): ```bash node scripts/audit-fix.cjs ``` The audit fetched data from: - IIT Kanpur Gita Supersite — `gitasupersite.iitk.ac.in/srimad?…` - Sanskrit Documents — `sanskritdocuments.org/doc_giitaa/bhagvadnew.html` and `…/doc_z_otherlang_hindi/sundarakaaNDa.html` - Drik Panchang — `drikpanchang.com/lyrics/ramcharitmanas/sundarkand/…` - Holy Bhagavad Gita (Mukundananda) — `holy-bhagavad-gita.org/chapter/…/verse/…` - BhaktiBharat — `bhaktibharat.com/granth/…sundar-kand-mangalacharan` A snapshot of the comparison data lives in `/tmp/hdt-audit/` during the session that ran this; it is **not** committed.