Skip to content

Fix Greek reading boundaries and add missing weekday Menaion readings (supersedes #236) - #252

Merged
brianglass merged 3 commits into
mainfrom
greek-reading-boundaries
Oct 14, 2026
Merged

brianglass merged 3 commits into
mainfrom
greek-reading-boundaries

Conversation

@brianglass

Copy link
Copy Markdown
Owner

This carries @dgrahamlong's work from #236 (his commit, unchanged apart from a rebase onto main), plus two small follow-up commits. It's opened from this repo so the fixes can land in one deploy without touching his fork. Thank you, Deion, for a careful piece of work, and for finding the problem in the first place (#228).

See #236 for the full description. In short, the Greek tradition was serving many passages with Slavic (OCA) pericope boundaries, and the old audit compared only each citation's opening verse, so it never saw them.

Follow-up commits

  • Reuse existing pericopes and document the loader run order.
    • The fixture had two grk pericopes duplicating existing ones (Matt 16.13-19, Matt 27.62-66). They're dropped, and their readings point at the originals, which is what exact_pericope() produces.
    • load_shared_menaion.py now says it must run after load_exact_boundaries.py, fails with a clear message if it doesn't, and applies its rows in one transaction.
  • Leave the Holy Friday Gospel alone.
    • Both sources print Matthew 27:62-66 for Holy Friday. That's the Gospel of the Lamentations (Matins of Holy Saturday, served Friday evening), not of Vespers.
    • Swapping it into the Vespers slot dropped the composite Vespers Gospel for Greek users and left a Lamentations reading under a Vespers label.
    • The proper fix is to model the Lamentations as its own service, as a separate follow-up.

Independent checks

  • Fresh goarch.org harvest: every day from 2018 through 2027, with full citations.

  • Readings vs goarch.org, by whole verse set: I used a separate parser, not the one in this PR.

    main this PR
    2018–2027 90.8% (6,077 / 6,696) 98.6%
    2026 93.0% 670 / 672

    The two 2026 differences are Holy Friday (above) and Nov 27, 1 Timothy 4:4-8 vs 4:4-8, 16.

  • No regressions: no reading that main matches goarch.org on is lost.

  • Slavic is unaffected: readings, fasting, titles and saints are identical between main and this branch for every day of 2018–2027, on both calendars.

  • Reproducible from the loaders: loading main's fixture and running load_exact_boundaries.py, load_shared_menaion.py and load_ordo.py produces this fixture.

  • Tests: all 252 pass.

Left for follow-ups

  • More readings: the 10-year harvest shows recurring differences this PR doesn't take, each consistent across years:
    • Acts 9:19-31 (7 years)
    • Sep 20 Gospel, Luke 21:12-19 (7)
    • May 10 Gospel, Luke 6:12-19 (6)
    • 1 Timothy 4:4-8 (4)
    • Luke 4:38-44 (4)
    • Ephesians 4:14-17 (3)
  • Holy Friday: model the Lamentations as its own service.
  • Audit tooling: commit the full-citation harvest and a verse-set audit script, and correct the old 99.1% figure in docs/greek-lectionary.md.

Supersedes #236. Closes #228.

🤖 Generated with Claude Code

dgrahamlong and others added 3 commits October 14, 2026 11:30
…6 hid

Greek readings against goarch.org: 2024 89.5% -> 98.7%, 2025 90.3% ->
99.4%, 2026 92.9% -> 100%. Slavic output is unchanged.

- 62 pericope boundaries where goarch.org and antiochian.org agree and
  orthocal split the passage differently. Rows are keyed by the citation
  they replace and carry the years each source corroborates them, and
  the loader stops rather than overwrite a row it does not recognise.
- 11 weekday saints' readings that a 2026-only audit could not see,
  because each date falls on a Sunday in 2026.
- Weekday cycle rows are stored twice, once per Paschal year; overrides
  now apply to both copies.
- Chapterless books took an explicit chapter as the first verse, so
  "Jude 1:11-25" returned all 25 verses.
- A golden-file test characterizes every harvested antiochian.org
  reading (2018-2026) by verse set, so a fix for one year that breaks
  another shows up as a diff naming the date.
- Point the Holy Friday and Sep 13 Greek Gospels at the existing
  Matt 27.62-66 (pk 124) and Matt 16.13-19 (pk 72) pericopes and drop
  the duplicate 312grk/311grk copies. That is what
  load_exact_boundaries.py's exact_pericope() produces, so the fixture
  now matches a fresh run of the loaders against main.
- load_shared_menaion.py needs two pericopes that only
  load_exact_boundaries.py creates. Document the order, fail with a
  clear message instead of Pericope.DoesNotExist, and apply the rows in
  one transaction.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Both sources print Matthew 27:62-66 for Holy Friday, but that is the
Gospel of the Lamentations (Matins of Holy Saturday, served on Friday
evening), not of Vespers. Swapping it into the Vespers slot dropped the
composite Vespers Gospel for Greek users and left a Lamentations
reading under a Vespers label. Drop the row from the boundary table and
the fixture, and say why in the table and in the doc's addendum. The
proper fix is to model the Lamentations as its own service.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@brianglass
brianglass merged commit 87ac3ef into main Oct 14, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Greek-Gregorian Readings Divergent from both Antiochian and GOARCH sources

2 participants