[Epic] Data corpus & generator #38

Closed
opened 2026-07-01 00:51:44 +00:00 by manlycucumber · 2 comments
manlycucumber commented 2026-07-01 00:51:44 +00:00 (Migrated from github.com)

Produce the generated static CC0 corpus (temporal definitions, sanctoral entries, precedence data) via a Node build-time generator. Done when the engine loads only generated data, the generator is reproducible, and provenance is recorded per string.

Epic — child issues are tracked as sub-issues.

Produce the generated static CC0 corpus (temporal definitions, sanctoral entries, precedence data) via a Node build-time generator. Done when the engine loads only generated data, the generator is reproducible, and provenance is recorded per string. _Epic — child issues are tracked as sub-issues._
manlycucumber commented 2026-07-02 05:22:18 +00:00 (Migrated from github.com)

Architecture approved (2026-07-02)

Design pass complete and approved. Amended Done criterion: the engine loads all liturgical facts as generated data; computation and rules remain versioned PHP (parameters-as-data, not a rules-DSL).

  • Input: hand-authored cited YAML facts (tools/generator/facts/) — the clean-room boundary. Output: generated, committed, CC0 NDJSON (data/corpus/, edition-keyed tree). PHP loaders behind the existing SanctoralData seam + two new seams for temporal/precedence.
  • Data: the full ~200-entry cited sanctoral calendar; the Easter-offset skeleton + per-archetype temporal rank/colour/name; the n.91 tier table + membership lists. Code (unchanged): Computus, the block-filler sweeps, DayResolver, occurrence/concurrence/transfer.
  • Latin titles: invariant fallback on identity + optional per-edition override.
  • Born-cited: per-datum Citation + a fail-closed generator gate (blocks on any uncited datum, dangling source key, or a title transcribed from a restrictively-licensed source). New Introibo\Core\Citation\ namespace.
  • Reproducibility: canonical sorted serializer, no wall-clock, pinned Node toolchain, CI rebuild-and-diff. Corpus is committed, never generate-on-install.
  • Safety gate: freeze today's resolveYear() output across 1583–2200 as a golden fixture before extraction, assert byte-identical after — transfers the verified engine's guarantee across the data seam.

Build order: #39 schema → #40 generator → #44 provenance/CC0 → #41 sanctoral dataset → #42 temporal → #43 precedence.

## Architecture approved (2026-07-02) Design pass complete and approved. **Amended Done criterion:** *the engine loads all liturgical **facts** as generated data; computation and rules remain versioned PHP* (parameters-as-data, not a rules-DSL). - **Input:** hand-authored **cited YAML facts** (`tools/generator/facts/`) — the clean-room boundary. **Output:** generated, committed, **CC0 NDJSON** (`data/corpus/`, edition-keyed tree). PHP loaders behind the existing `SanctoralData` seam + two new seams for temporal/precedence. - **Data:** the full ~200-entry cited sanctoral calendar; the Easter-offset skeleton + per-**archetype** temporal rank/colour/name; the n.91 tier table + membership lists. **Code (unchanged):** Computus, the block-filler sweeps, `DayResolver`, occurrence/concurrence/transfer. - **Latin titles:** invariant fallback on identity + optional per-edition override. - **Born-cited:** per-datum `Citation` + a **fail-closed generator gate** (blocks on any uncited datum, dangling source key, or a title transcribed from a restrictively-licensed source). New `Introibo\Core\Citation\` namespace. - **Reproducibility:** canonical sorted serializer, no wall-clock, pinned Node toolchain, CI rebuild-and-diff. Corpus is committed, never generate-on-install. - **Safety gate:** freeze today's `resolveYear()` output across **1583–2200 as a golden fixture before extraction**, assert byte-identical after — transfers the verified engine's guarantee across the data seam. Build order: #39 schema → #40 generator → #44 provenance/CC0 → #41 sanctoral dataset → #42 temporal → #43 precedence.
manlycucumber commented 2026-07-02 16:56:46 +00:00 (Migrated from github.com)

Epic complete

All seven children are merged to develop (signed + DCO, CI-green):

# Deliverable
#39 Frozen corpus JSON Schemas (draft 2020-12) + layout
#40 Node generator pipeline (cited YAML → canonical NDJSON + MANIFEST; build/verify)
#44 Born-cited provenance gate (fail-closed) + CC0 dataset licensing
#365 resolveYear() frozen 1584–2200 as a golden fixture — the corpus-swap safety gate
#41 Full cited 1962 General Roman Calendar sanctoral (297 entries) → CorpusSanctoralData
#42 Temporal definitions as data — the Easter/season skeleton (part 1) + the 61-archetype office overlay (part 2) → TemporalDefinitions / TemporalAttributes
#43 Precedence table as data — the n.91 tiers, membership sets, and commemoration limits → PrecedenceTable

The engine is now data-for-code across the board: the entire liturgical content of the 1962 calendar — sanctoral, temporal, and precedence — lives in the cited CC0 corpus behind read seams, while computation (date arithmetic, naming grammar, precedence branching) stays in PHP. Every swap was proven byte-identical against the golden fixture, so the whole refactor is inert by construction. This is the seam #59 reuses to add the 1954/1955 and Novus Ordo editions, and the foundation the validation harness (#45) and resolution trace (#233) build on next.

## Epic complete ✅ All seven children are merged to `develop` (signed + DCO, CI-green): | # | Deliverable | |---|---| | #39 | Frozen corpus JSON Schemas (draft 2020-12) + layout | | #40 | Node generator pipeline (cited YAML → canonical NDJSON + MANIFEST; `build`/`verify`) | | #44 | Born-cited provenance gate (fail-closed) + CC0 dataset licensing | | #365 | `resolveYear()` frozen 1584–2200 as a golden fixture — the corpus-swap safety gate | | #41 | Full cited 1962 General Roman Calendar sanctoral (297 entries) → `CorpusSanctoralData` | | #42 | Temporal definitions as data — the Easter/season skeleton (part 1) + the 61-archetype office overlay (part 2) → `TemporalDefinitions` / `TemporalAttributes` | | #43 | Precedence table as data — the n.91 tiers, membership sets, and commemoration limits → `PrecedenceTable` | The engine is now **data-for-code across the board**: the entire liturgical content of the 1962 calendar — sanctoral, temporal, and precedence — lives in the cited CC0 corpus behind read seams, while computation (date arithmetic, naming grammar, precedence branching) stays in PHP. Every swap was proven **byte-identical** against the golden fixture, so the whole refactor is inert by construction. This is the seam #59 reuses to add the 1954/1955 and Novus Ordo editions, and the foundation the validation harness (#45) and resolution trace (#233) build on next.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Directorium/Core#38
No description provided.