From 72f9213bd8532b0527a1585cb3a87e3c9e061e1a Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Mon, 27 Jul 2026 13:52:57 +0200 Subject: docs: implementation plan for the EF (1962) calendar engine --- .../plans/2026-07-27-lectio-ef-calendar-engine.md | 47 ++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 docs/superpowers/plans/2026-07-27-lectio-ef-calendar-engine.md (limited to 'docs/superpowers/plans') diff --git a/docs/superpowers/plans/2026-07-27-lectio-ef-calendar-engine.md b/docs/superpowers/plans/2026-07-27-lectio-ef-calendar-engine.md new file mode 100644 index 0000000..c74e737 --- /dev/null +++ b/docs/superpowers/plans/2026-07-27-lectio-ef-calendar-engine.md @@ -0,0 +1,47 @@ +# EF (1962) Calendar Engine Implementation Plan + +> REQUIRED SUB-SKILL: superpowers:executing-plans. Spec: docs/superpowers/specs/2026-07-27-lectio-ef-calendar-engine-design.md. + +**Goal:** Compute the 1962 (EF) liturgical day offline, form-aware in the existing engine (`sel.Form == "old"`), validated against the missalemeum per-date API. + +**Global constraints:** `calendar` stays stdlib-pure; `Compute` total. Both OF and EF oracles must pass (OF: 0 season mismatches; EF: 0 season mismatches). Reuse Computus/merge/INI/result + custom layers. + +--- + +### Task 1: Rank int enum → unified string token (OF refactor, oracle-gated) +**Files:** `internal/calendar/types.go`, `precedence.go`, `calendar.go`, `temporal.go`, `internal/cli/liturgy.go`, tests. +- [ ] `type Rank string`; consts `RankFerial="ferial"`, `RankOptional="optional"`, `RankMemorial="memorial"`, `RankFeast="feast"`, `RankSolemnity="solemnity"`. `ParseRank` validates → `Rank(s)` or `RankFerial`. +- [ ] Add `func ofRankOrder(r Rank) int` (ferial0