calendar: real occurrence/precedence resolution (feast ranks, sanctoral content)
Replaces the FeastRank placeholder with a real ordered FeastClass (the old pre-1955 six-level scale) and a new TemporalCategory (privileged/ordinary Sunday/feria). calendar/commemorations.ts's decideOccurrence encodes the actual precedence rules as explicit, commented branches per category rather than the reference engine's own opaque numeric weights — this app targets one ruleset, so the readability trade-off is worth it. Category membership (data/calendar/temporal-categories.yml) is a best-effort reconstruction of the pre-1955 tradition, not sourced from a primary text; expect corrections. calendar/feasts.ts resolves real sanctoral candidates, and resolveDay() wires it all together — occurring/temporalCategory are no longer stubs. isDoubleOrHigher (hours/antiphon.ts) is now a real comparison instead of a hardcoded false. Seeded 7 real saints/feasts, each verified directly against Divinum Officium's own rank data (not reconstructed from memory) as a small, growable start: St. Lawrence, the Assumption, St. Augustine, the Nativity of the BVM, St. Michael, All Saints, the Immaculate Conception.
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
# Verified against Divinum Officium (web/www/horas/Latin/Sancti/11-01.txt,
|
||||
# untagged/default [Rank] block).
|
||||
id: all-saints
|
||||
name: "All Saints"
|
||||
rank: duplex-1-classis
|
||||
common: proper-to-all-saints
|
||||
propers: null
|
||||
@@ -0,0 +1,7 @@
|
||||
# Verified against Divinum Officium (web/www/horas/Latin/Sancti/08-15.txt,
|
||||
# untagged/default [Rank] block).
|
||||
id: assumption
|
||||
name: "The Assumption of the Blessed Virgin Mary"
|
||||
rank: duplex-1-classis
|
||||
common: common-of-the-bvm
|
||||
propers: null
|
||||
@@ -1,9 +1,8 @@
|
||||
# PLACEHOLDER — demonstrates the saint-record shape only. Not a real saint,
|
||||
# not a real rank, not a real day assignment (see sanctoral-calendar.yml for
|
||||
# where this id gets pointed at a day). Which day(s) point here can change
|
||||
# freely without ever touching this file.
|
||||
# PLACEHOLDER — demonstrates the saint-record shape only, deliberately not
|
||||
# mapped to any day in sanctoral-calendar.yml (which now holds real,
|
||||
# verified entries — see that file). Not a real saint, not a real rank.
|
||||
id: example-confessor
|
||||
name: "Example Confessor (placeholder)"
|
||||
rank: placeholder # real rank scheme is a milestone 4 decision, not made yet
|
||||
rank: simplex # placeholder value
|
||||
common: common-of-a-confessor-not-bishop
|
||||
propers: null # set to a propers id once/if this saint has a full proper
|
||||
propers: null
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
# Verified against Divinum Officium (web/www/horas/Latin/Sancti/12-08.txt,
|
||||
# untagged/default [Rank] block).
|
||||
id: immaculate-conception
|
||||
name: "The Immaculate Conception of the Blessed Virgin Mary"
|
||||
rank: duplex-1-classis
|
||||
common: common-of-the-bvm
|
||||
propers: null
|
||||
@@ -0,0 +1,7 @@
|
||||
# Verified against Divinum Officium (web/www/horas/Latin/Sancti/09-08.txt,
|
||||
# untagged/default [Rank] block).
|
||||
id: nativity-bvm
|
||||
name: "The Nativity of the Blessed Virgin Mary"
|
||||
rank: duplex-2-classis
|
||||
common: common-of-the-bvm
|
||||
propers: null
|
||||
@@ -0,0 +1,9 @@
|
||||
# Verified against Divinum Officium (web/www/horas/Latin/Sancti/08-28.txt,
|
||||
# untagged/default [Rank] block — that file's own "(sed rubrica 1930)"
|
||||
# alternate raises this to Duplex majus, but 1930 postdates the pre-1910
|
||||
# calendar this app targets, so the plain default is used instead.
|
||||
id: st-augustine
|
||||
name: "St. Augustine of Hippo, Bishop, Confessor and Doctor of the Church"
|
||||
rank: duplex
|
||||
common: common-of-a-confessor-bishop
|
||||
propers: null
|
||||
@@ -0,0 +1,8 @@
|
||||
# Verified against Divinum Officium (web/www/horas/Latin/Sancti/08-10.txt,
|
||||
# untagged/default [Rank] block — the pre-1955 value, not the "(sed rubrica
|
||||
# 196)" alternate given alongside it in that file).
|
||||
id: st-lawrence
|
||||
name: "St. Lawrence, Martyr"
|
||||
rank: duplex-2-classis
|
||||
common: common-of-a-martyr
|
||||
propers: null
|
||||
@@ -0,0 +1,9 @@
|
||||
# Verified against Divinum Officium (web/www/horas/Latin/Sancti/09-29.txt,
|
||||
# untagged/default [Rank] block — that file's own "(sed rubrica tridentina)"
|
||||
# alternate gives Duplex II classis instead; the plain default is used here
|
||||
# for consistency with how every other saint file in this set was read).
|
||||
id: st-michael
|
||||
name: "St. Michael the Archangel"
|
||||
rank: duplex-1-classis
|
||||
common: common-of-an-angel
|
||||
propers: null
|
||||
@@ -5,8 +5,17 @@
|
||||
# (data/calendar/saints/<id>.yml) never changes — it's the same record
|
||||
# whichever day points at it.
|
||||
#
|
||||
# PLACEHOLDER: "01-01" -> example-confessor is fake data proving the shape,
|
||||
# not a real calendar assignment. Real sanctoral content-authoring
|
||||
# (a pre-1910-leaning calendar, per the plan) is a separate task.
|
||||
# A small, growable subset, not a full year — see the plan discussion this
|
||||
# came out of. Each entry's rank is verified directly against Divinum
|
||||
# Officium (see the saint's own file for which one) rather than
|
||||
# reconstructed from memory, unlike data/calendar/temporal-categories.yml's
|
||||
# privileged-day lists. `example-confessor` is deliberately NOT mapped to
|
||||
# any day here — it's fictional, kept only to document the record shape.
|
||||
days:
|
||||
"01-01": [example-confessor]
|
||||
"08-10": [st-lawrence]
|
||||
"08-15": [assumption]
|
||||
"08-28": [st-augustine]
|
||||
"09-08": [nativity-bvm]
|
||||
"09-29": [st-michael]
|
||||
"11-01": [all-saints]
|
||||
"12-08": [immaculate-conception]
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
# A day's precedence category under the temporal cycle alone, before any
|
||||
# sanctoral feast is weighed against it — see calendar/types.ts's
|
||||
# TemporalCategory doc comment for why this is coarser than `season`, and
|
||||
# calendar/commemorations.ts for how it's actually used (decideOccurrence).
|
||||
#
|
||||
# RECONSTRUCTED, not verified against a primary source: the two rubric
|
||||
# documents actually present in the reference engine
|
||||
# (divinum-officium-reference/web/www/horas/Help/Rubrics/) are both later
|
||||
# editions (~1960) with a different, renumbered classification than the
|
||||
# pre-1955 system this app targets. This is a best-effort reconstruction
|
||||
# from general knowledge of that older tradition — expect corrections.
|
||||
#
|
||||
# `bySeason` gives the default for an ordinary Sunday/feria falling in that
|
||||
# season. `offsets`/`offsetRanges` (from Easter, same convention as
|
||||
# easter-offsets.yml) and `fixedDates` (MM-DD) override that default for
|
||||
# specific privileged ferias that don't line up with a whole season.
|
||||
#
|
||||
# Known gap: Advent Ember days (Wed/Fri/Sat after Dec 13) and September
|
||||
# Ember days (Wed/Fri/Sat near the Exaltation of the Cross, Sept 14) are
|
||||
# NOT modeled here — both are fixed-calendar "nearest such-and-such a date"
|
||||
# rules, not a plain offset, and weren't worth guessing at without a source.
|
||||
# Lent's and Pentecost's Ember days *are* modeled, since those are clean
|
||||
# Easter offsets.
|
||||
bySeason:
|
||||
advent: { sunday: privileged-sunday, feria: ordinary-feria }
|
||||
# Christmastide's ferias are folded into the privileged-feria default for
|
||||
# the whole season as a simplification of "the Octave of Christmas (Dec
|
||||
# 25 - Jan 1) is privileged" — slightly overbroad into Jan 2-5, harmless.
|
||||
christmastide: { sunday: privileged-sunday, feria: privileged-feria }
|
||||
epiphanytide: { sunday: ordinary-sunday, feria: ordinary-feria }
|
||||
septuagesima: { sunday: privileged-sunday, feria: ordinary-feria }
|
||||
lent: { sunday: privileged-sunday, feria: ordinary-feria }
|
||||
passiontide: { sunday: privileged-sunday, feria: ordinary-feria }
|
||||
eastertide: { sunday: privileged-sunday, feria: ordinary-feria }
|
||||
ascensiontide: { sunday: ordinary-sunday, feria: ordinary-feria }
|
||||
pentecost: { sunday: privileged-sunday, feria: ordinary-feria }
|
||||
trinitytide: { sunday: ordinary-sunday, feria: ordinary-feria }
|
||||
# Corpus Christi/Sacred Heart are themselves "feasts of the Lord" that
|
||||
# shouldn't cede to an ordinary saint — modeled here as privileged-feria
|
||||
# (rather than injecting a separate synthetic FeastClass) since with the
|
||||
# small sanctoral calendar this app has, a real clash is unlikely and the
|
||||
# practical effect (temporal wins) is the same either way.
|
||||
corpus-christi: { sunday: ordinary-sunday, feria: privileged-feria }
|
||||
sacred-heart: { sunday: ordinary-sunday, feria: privileged-feria }
|
||||
|
||||
offsets:
|
||||
-46: privileged-feria # Ash Wednesday
|
||||
-39: privileged-feria # Lent Ember Wednesday (Wed after 1st Sunday of Lent)
|
||||
-37: privileged-feria # Lent Ember Friday
|
||||
-36: privileged-feria # Lent Ember Saturday
|
||||
48: privileged-feria # Vigil of Pentecost
|
||||
|
||||
offsetRanges:
|
||||
- { fromOffset: -6, toOffset: -1, category: privileged-feria } # ferias of Holy Week
|
||||
- { fromOffset: 1, toOffset: 6, category: privileged-feria } # Easter octave
|
||||
- { fromOffset: 50, toOffset: 55, category: privileged-feria } # Pentecost octave (also covers Pentecost's own Ember days)
|
||||
|
||||
fixedDates:
|
||||
"12-24": privileged-feria # Vigil of Christmas
|
||||
Reference in New Issue
Block a user