Fix privileged-feria-major: nothing is ever commemorated, any rank
Deploy / deploy (push) Successful in 1m32s
Deploy / deploy (push) Successful in 1m32s
The Easter octave cascade built last commit reused the existing "duplex-majus+ still gets a bare commemoration" branch unchanged, trusting its own citation (St. Mark within the Easter Octave). That citation was a misreading. Live-verified: the Annunciation (Duplex I. classis) transfers with zero commemoration on Holy Thursday itself, and Chair of St. Peter at Antioch does the same on Ash Wednesday - the exception was wrong everywhere this category is used, not just Holy Week. privileged-feria-major now matches privileged-sunday exactly: unconditional transfer, no exceptions, any rank. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017XMSokiTD2Qc5vPP2YQu3Q
This commit is contained in:
@@ -18,12 +18,29 @@ describe('April sanctoral pull (first pass)', () => {
|
||||
expect(getDayCollect(day).status.en).toBe('verified');
|
||||
});
|
||||
|
||||
it('St. Mark is only ever commemorated, never wins, within the Easter Octave', () => {
|
||||
const day = resolveDay('2030-04-25');
|
||||
expect(day.winner.kind).toBe('temporal');
|
||||
expect(day.commemorations).toEqual([
|
||||
{ kind: 'sanctoral', id: 'st-mark', name: 'St. Mark, Evangelist', nameLa: 'Sanctus Marcus, Evangelista', rank: 'duplex-2-classis' },
|
||||
]);
|
||||
it('St. Mark gets nothing at all within the Easter Octave — not even a bare commemoration — and transfers past it instead', () => {
|
||||
// Corrected 2026-09-01: nothing is ever commemorated anywhere from
|
||||
// Palm Sunday through Low Sunday, no exception for any rank (direct
|
||||
// instruction; live-verified against the Annunciation on Holy
|
||||
// Thursday and Chair of St. Peter at Antioch on Ash Wednesday, both
|
||||
// Duplex-majus+ and both transferring with zero commemoration). Mark
|
||||
// (Duplex II. classis) transfers off Apr 25, 2030 the same way; vu's
|
||||
// own dense calendar that week pushes his actual landing all the way
|
||||
// to May 5 (every day in between already spoken for).
|
||||
const native = resolveDay('2030-04-25');
|
||||
expect(native.winner).toEqual({ kind: 'temporal', id: 'easter-sunday' });
|
||||
expect(native.commemorations).toEqual([]);
|
||||
expect(native.transferredAway?.candidate.id).toBe('st-mark');
|
||||
|
||||
const landing = resolveDay('2030-05-05');
|
||||
expect(landing.winner).toEqual({
|
||||
kind: 'sanctoral',
|
||||
id: 'st-mark',
|
||||
name: 'St. Mark, Evangelist',
|
||||
nameLa: 'Sanctus Marcus, Evangelista',
|
||||
rank: 'duplex-2-classis',
|
||||
transferredFrom: '2030-04-25',
|
||||
});
|
||||
});
|
||||
|
||||
it('St. Robert beats St. Catherine of Siena on their shared monastic-calendar date', () => {
|
||||
|
||||
@@ -89,22 +89,23 @@ describe('decideOccurrence — privileged-feria', () => {
|
||||
});
|
||||
|
||||
describe('decideOccurrence — privileged-feria-major', () => {
|
||||
it('is never displaced, same as privileged-sunday — duplex-majus and up are commemorated', () => {
|
||||
// Verified: St. Mark, Duplex II. classis, only ever commemorated —
|
||||
// never wins outright — within the Easter Octave.
|
||||
for (const rank of ['duplex-majus', 'duplex-2-classis', 'duplex-1-classis'] as const) {
|
||||
it('is never displaced, and never gives even a bare commemoration to any rank — everything transfers forward', () => {
|
||||
// Corrected 2026-09-01, direct instruction: nothing is ever
|
||||
// commemorated anywhere from Palm Sunday through Low Sunday — the
|
||||
// earlier "duplex-majus+ still gets a nod" claim (citing St. Mark,
|
||||
// Duplex II. classis, within the Easter Octave) was a misreading.
|
||||
// Live-checked two more dates: the Annunciation (Duplex I. classis)
|
||||
// transfers with zero commemoration on Holy Thursday itself in years
|
||||
// it lands there, and Chair of St. Peter at Antioch (Duplex majus)
|
||||
// does the same on Ash Wednesday — so the fix applies to every use
|
||||
// of this category, not just Holy Week.
|
||||
for (const rank of ['duplex-majus', 'duplex-2-classis', 'duplex-1-classis', 'duplex', 'semiduplex', 'simplex'] as const) {
|
||||
const result = decideOccurrence('privileged-feria-major', 'id', saint(rank));
|
||||
expect(result.winner).toEqual({ kind: 'temporal', id: 'id' });
|
||||
expect(result.commemorations).toEqual([{ kind: 'sanctoral', id: 'x', name: 'St. Ereden', rank }]);
|
||||
expect(result.commemorations).toEqual([]);
|
||||
expect(result.transfer).toEqual({ candidate: saint(rank), direction: 'forward' });
|
||||
}
|
||||
});
|
||||
|
||||
it('yields nothing short of duplex-majus — transfers instead', () => {
|
||||
const result = decideOccurrence('privileged-feria-major', 'id', saint('duplex'));
|
||||
expect(result.winner).toEqual({ kind: 'temporal', id: 'id' });
|
||||
expect(result.commemorations).toEqual([]);
|
||||
expect(result.transfer).toEqual({ candidate: saint('duplex'), direction: 'forward' });
|
||||
});
|
||||
});
|
||||
|
||||
describe('decideOccurrence — ordinary-sunday', () => {
|
||||
|
||||
@@ -171,15 +171,17 @@ describe('multi-hop forward transfer through Holy Week/the Easter Octave', () =>
|
||||
expect(tiburtius?.kind === 'sanctoral' ? tiburtius.transferredFrom : undefined).toBe('2033-04-14');
|
||||
});
|
||||
|
||||
it("2035: the Annunciation (native Easter Sunday itself, Duplex I. classis) transfers past the whole span with zero commemoration anywhere in it — matching the real reference engine's own behavior, not just a native-date-order queue effect", () => {
|
||||
it("2035: the Annunciation (native Easter Sunday itself, Duplex I. classis) transfers past the whole span with zero commemoration anywhere in it, queued behind two earlier-native-dated candidates also caught by the same span", () => {
|
||||
// Easter 2035 is Mar 25 -- the Annunciation's own fixed date. Live-
|
||||
// verified 2026-09-01: the real Monastic 1617 engine shows her
|
||||
// transferring off Easter Day with no commemoration anywhere in Holy
|
||||
// Week/the Octave/Low Sunday (Apr 1 that year), unlike a same-ranked
|
||||
// *native* occurrence there (e.g. St. Mark, Duplex II. classis,
|
||||
// commemorated when native within some other year's Octave) --
|
||||
// confirming a transferred-in candidate never gets the "duplex-majus+
|
||||
// still gets a nod" treatment on these days, only a native one does.
|
||||
// Week/the Octave/Low Sunday (Apr 1 that year) -- corrected the same
|
||||
// day, direct instruction: nothing is ever commemorated anywhere in
|
||||
// this span, at any rank, not even duplex-majus+ -- so a *native*
|
||||
// occurrence there (e.g. St. Mark within some other year's Octave)
|
||||
// gets exactly the same "transfers, no exception" treatment as a
|
||||
// transferred-in candidate passing through, not the "still gets a
|
||||
// nod" treatment this test used to assert existed.
|
||||
const easterSunday = resolveDay('2035-03-25');
|
||||
expect(easterSunday.winner).toEqual({ kind: 'temporal', id: 'easter-sunday' });
|
||||
expect(easterSunday.transferredAway?.candidate.id).toBe('annunciation');
|
||||
@@ -189,7 +191,12 @@ describe('multi-hop forward transfer through Holy Week/the Easter Octave', () =>
|
||||
expect(day.commemorations.some((c) => c.kind === 'sanctoral' && c.id === 'annunciation')).toBe(false);
|
||||
}
|
||||
|
||||
const landing = resolveDay('2035-04-04');
|
||||
// vu's own calendar also has St. Benedict (native Mar 21, also
|
||||
// Duplex I. classis, also impeded that year) and St. Gabriel the
|
||||
// Archangel (native Mar 24, Duplex majus) queued *ahead* of the
|
||||
// Annunciation by native date -- they land Apr 4 and Apr 5
|
||||
// respectively, pushing her actual landing to Apr 6.
|
||||
const landing = resolveDay('2035-04-06');
|
||||
expect(landing.winner).toEqual({
|
||||
kind: 'sanctoral',
|
||||
id: 'annunciation',
|
||||
|
||||
Reference in New Issue
Block a user