stop lending Ruthenian law to churches it was never written for

Three Eastern Catholic jurisdictions borrowed the Ruthenian ruleset, so a
Melkite, a Romanian Greek Catholic and a Ukrainian Greek Catholic were each
told that fourteen days a year bound them under the particular law of the
Metropolia of Pittsburgh. That is the exact error the level/obligation split
exists to prevent, committed by the library itself.

Every Eastern Catholic church legislates its own fasting discipline. Those
three are now shown at the Typikon with nothing reported as binding, which is
the honest position: the calendar is known, the law is not. Their entries say
so and a test holds it, asserting both that no jurisdiction but ruthenian
carries that ruleset and that the three claim no binding days.

The README gains a section on these churches, since supporting them was never
meant to be something a reader had to infer from the jurisdiction list.
This commit is contained in:
funkpower
2026-09-18 13:03:13 -04:00
parent 18df039bbc
commit 92524e46dc
4 changed files with 76 additions and 9 deletions
+35
View File
@@ -625,3 +625,38 @@ fn the_config_round_trips_all_three_axes() {
}
let _ = std::fs::remove_dir_all(&dir);
}
// ─────────────── no church is told another church's law binds ─────────────
#[test]
fn only_the_church_whose_law_was_sourced_reports_an_obligation() {
use typikon::jurisdictions::{RuleKind, JURISDICTIONS};
// Ruthenian particular law is sourced from the Metropolia of Pittsburgh.
// No other jurisdiction may borrow it: telling a Melkite that fourteen
// days a year bind him under a law that was never his is the error the
// level/obligation split exists to prevent.
for jur in JURISDICTIONS.iter() {
if jur.rule == RuleKind::Ruthenian {
assert_eq!(jur.key, "ruthenian", "{} borrows another church's law", jur.key);
}
}
for key in ["melkite", "romanian-catholic", "ugcc"] {
let jur = resolve(Some(key)).unwrap();
let binding = week(d("2026-01-01"), 365, jur)
.into_iter()
.filter(|x| x.is_obligatory())
.count();
assert_eq!(binding, 0, "{key} claims {binding} binding days it has no source for");
// And the entry has to say why nothing binds.
assert!(jur.note.contains("not modelled"), "{key}: the note must say so");
}
// The one church whose law is sourced still reports it.
let ruthenian = resolve(Some("ruthenian")).unwrap();
let binding = week(d("2026-01-01"), 365, ruthenian)
.into_iter()
.filter(|x| x.is_obligatory())
.count();
assert_eq!(binding, 14);
}