chore: add an optional Divinum Officium Perl oracle adapter (#50) #430
No reviewers
Labels
No labels
area: build
area: ci
area: compare
area: data
area: engine
area: model
area: provenance
area: rite
area: validation
backport
blocked
breaking
confirmed
dependencies
duplicate
epic
github_actions
invalid
needs-info
needs-triage
php
priority: high
priority: low
priority: medium
regression
type: bug
type: chore
type: correction
type: docs
type: enhancement
type: feature
type: fix
type: perf
type: refactor
type: security
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Directorium/Core!430
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "chore/50-divinum-officium-oracle"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #50.
Adds Divinum Officium (DO) as an optional tertiary oracle in the validation harness (#45), after Computus (#46), missalemeum (#47/#48), and SSPX (#49).
Why optional
DO is an independent Perl implementation of the traditional office/calendar — a strong cross-check, but Perl + a DO checkout are heavyweight. Per the issue, the core suite must have no Perl requirement, so this oracle runs only when a checkout is configured and skips gracefully otherwise. (The live site is Cloudflare-gated, confirming DO is a local oracle, not an HTTP one.)
What's verified where — honest split
extractClass()parser (DO office → 1960 class1..4)N. classisoutput (10 cases)The live end-to-end path can't run in CI (no Perl/DO; DO isn't meant for automated network access), so it's maintainer-verified. To prevent silent rot, the parser is covered directly, and the live test fails loudly ("no class was parsed") if DO is present but its output no longer matches — never a silent pass.
What's here
tools/oracles/divinum-officium-bridge.pl— thin wrapper invoking DO's own headless entry point exactly as DO'sregress/scripts/generate-diff.shdoes:perl officium.pl "version=Rubrics 1960 - 1960" "command=prayMatutinum" "date=MM-DD-YYYY". (Perl syntax-checked; error paths smoke-tested.)tests/Validation/DivinumOfficiumOracle.php— availability gate (DIVINUM_OFFICIUM_PATH+perl),proc_openbridge invocation, and the pureextractClass()parser.tests/Validation/DivinumOfficiumOracleTest.php— parser data-provider tests + skip-path test (both CI) + the maintainer-gated live comparison.tools/oracles/README-divinum-officium.md— setup (git clone …,DIVINUM_OFFICIUM_PATH=… phpunit --filter DivinumOfficiumOracleTest).Sample
The contested sample is deliberately unambiguous (Epiphany, Maundy Thursday, Easter, Pentecost, Assumption, All Saints, Nativity, St Pius X III-class, plus a commemoration-grade feria) — great feasts any correct 1960 engine agrees on, plus guard days for the two bugs the harness already caught (#422 Triduum, #424 commemoration-grade). Kept away from the corpus-rank grey area so a maintainer's DO run is a clean pass/fail.
Gate:
lintclean,analyse[OK],test641 passing (1 skipped: the maintainer-gated live test).