aboutsummaryrefslogtreecommitdiff
path: root/README.md
Commit message (Collapse)AuthorAgeFilesLines
* chore: 1.2.1Lukasz Kasprzak2026-09-031-3/+3
| | | | | | | | Ten wrong scripture references reached users; nothing else about the engine changed and no output format moved. A patch bump. README's status line and test count follow the release, as they have to: the count is 917 under the exhaustive sweep, not 916.
* chore: 1.2.0Lukasz Kasprzak2026-08-281-5/+6
| | | | | | | | | | | | | | | Two presentation flags and no change to what is computed. Nothing was removed and no default output moved, so a minor bump. The CHANGELOG entry for 1.1.0 is backfilled here: that release was tagged without one, which would have left this file jumping 1.0.0 -> 1.2.0. Its content is taken from the v1.1.0 tag message rather than reconstructed. README's status section claimed the OF module lived on an unreleased branch and counted 887 tests, and its build block advertised the fast suite at ~8s and the exhaustive sweep at ~80s. Every one of those was true when written and none is now: 909 fast (~40s), 916 under the sweep (~8min). Stale suite timings are a defect this project has corrected once before, in 0.10.0.
* docs(readme): describe the OF module, fix the stale test countLukasz Kasprzak2026-08-261-10/+25
| | | | | | | | | | | | | | | | | README.md said "lib/rites/ contains rite_ef and nothing else" and "treat any claim of multi-rite support as a design goal rather than a feature" -- false as of this branch: lib/rites/ also contains rite_of, wired into a working --rite of. Rewrite the opening paragraph to state what actually ships, with the OF's own honest limits relative to the EF's (no published-ordo witness, Polish-vernacular lectionary lineage, known-wrong pinned dates, First reading + Gospel only). Also fixes two further stale numbers this same paragraph's neighbours carried, unrelated to this branch's own content but caught while here: "dune test # fast suite, 568 tests" (actual: 887) and "## Status"'s "v0.9.0, EF only. 569 tests" (actual tag: v1.0.0; this line is written from an unreleased branch, stated as such rather than inventing a version number).
* docs: six validation layers, not five -- the LMS Ordo is wired inLukasz Kasprzak2026-08-221-4/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Task 6 (celebrant-rubrics-phase1) added test_lms_ordo.ml as a sixth validation layer, comparing 400 days against a printed Latin Mass Society Ordo -- a genuinely independent fourth lineage, never passed through Divinum Officium/missalemeum/lectio. README.md's own table still said "Five validation layers"; man/colitur.1 still said "two published-calendar oracles"; CLAUDE.md still said "5 layers" in two places and, worse, stated as fact that "the published Ordo... Not wired in as a layer" in the file every future session is instructed to read first. Updated all three, describing what the new layer covers (the Creed, the BVM Saturday votive Mass's own seasonal selection, the reading formulary override) and what it cannot see (one civil year, only three of the formulary axis's five sources, England & Wales diocesan propers excluded from every comparison) -- consistent with docs/research/ordo/PROVENANCE-lms.md, not overstating it. CLAUDE.md's own stale claim is corrected in place, not silently rewritten, matching the file's own established convention: the paragraph it lived in was about a DIFFERENT, earlier Ordo (unreliable PDF column extraction, still genuinely unwired for that reason), and its own closing prediction -- "a structured Ordo would be the only way to add a fourth lineage" -- is exactly what the LMS Ordo's structured extractor (tools/extract_lms_ordo.ml) has since done. Historical "five layers" mentions elsewhere in CLAUDE.md, describing completed state as of earlier branches, are left alone -- they were true then, and rewriting them would misrepresent the record the same way overstating layer 6's own coverage would. Left README's pre-existing v0.9.0/569-tests staleness untouched, as instructed -- it predates this branch and is a separate matter.
* docs: correct a stale READMELukasz Kasprzak2026-08-211-10/+44
| | | | | | | | | | | | | | | | | | | | | Three claims were false: The download paragraph said older tags are not offered for download. They are again -- per-tag snapshots were re-enabled, and only the summary page's tag list is trimmed. A stable colitur-latest.tar.gz still exists for scripts that should not know a version. 'Starting with the Roman EF (1962) and OF forms' read as though both existed. lib/rites/ holds rite_ef and nothing else; the OF is the next module. The tagline claimed multiple rites for the same reason. Suite timings were from a much smaller suite: the fast run is ~8s over 568 tests, not ~3s, and the exhaustive sweep ~80s. Adds a Status section with the real numbers, the five validation layers and -- more usefully -- what they cannot see, since the differential and the oracle share one data lineage. Notes that chants are deliberately absent, and points at the colitur-x viewer.
* build: publish one current tarball instead of per-tag snapshotsLukasz Kasprzak2026-08-211-0/+5
| | | | | | | | | | cgit offers snapshots for every tag or for none, so colitur.git now has cgit.snapshots=0 and 'make release-tarball' uploads the tagged archive to a stable URL. Ten tags had meant twenty download links, nineteen of them stale. The target refuses to run from an untagged or dirty tree, so what is published always matches a tag.
* docs(citation): sigla flags, book naming and traditionsLukasz Kasprzak2026-08-201-0/+62
| | | | | Includes that --raw emits citations verbatim, which is the behaviour someone diffing against lectio depends on.
* docs(naming): the config man page, and the field referenceLukasz Kasprzak2026-08-201-0/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | colitur-config.5 documents the file's location, the flag > config > default precedence, every setting, and that an unknown key is warned about rather than fatal. Its worked example is a real run against the shipped example overlay, pasted rather than hand-typed -- including one genuine gotcha found while verifying it: overlay/template values are not shell-expanded, so a bare "~/..." written into the config file fails to load; the full path must be written out instead. colitur-templates.5's field reference is updated for the view change -- every field checked against lib/render/view.ml and schema/day-v1.json, not transcribed from memory or an earlier version of this page -- and its worked example is pasted from a real `colitur table` run. Its scope-shadowing warning about {{name.la}} is REMOVED and replaced with a short note that the hazard is now unrepresentable, because name is a plain resolved string with no dotted path left to fall back through. The num collision between a month and a week (both carry num, and a bare {{num}} read from inside a day silently climbs to the week's own value, not the month's) still exists and is demonstrated with a real render, not merely asserted. A man page describing a hazard that was fixed is as wrong as one that omits a real hazard. Two further stale mentions of the removed {{name.la}} hazard, and two places describing the schema as "Latin and English names" rather than one resolved display name, were found in colitur.1 while cross-checking and fixed alongside the primary rewrite; its own CSV example in EMIT was also still the pre-Task-5 column list (name_la/name_en, no *_name columns) and is now the real, verified header. lang/ already installs beside templates/ and schema/ (a prior hotfix); colitur-config.5 is added to install/uninstall/man/doc in the Makefile so `make install`/`make doc` cover it too.
* docs(templates): document the ordo booklet's required two-pass buildLukasz Kasprzak2026-08-191-1/+9
| | | | | | | | | | | | | | | A LaTeX table of contents needs two pdflatex passes -- the first pass leaves every entry showing '??', the second resolves the \pageref values. A user hit exactly this and reported it as a bug; the template was fine, the instructions were not. README's rendering example now runs pdflatex twice for ordo.tex (or names latexmk -pdf as the one-shot alternative) and notes the wall calendar needs only one pass, having no cross-references of its own. make check-templates now runs pdflatex twice per LaTeX template too, so the target exercises what a user actually has to do rather than silently passing on a single, incomplete pass.
* docs(render): template reference, install rules, typesetting checkLukasz Kasprzak2026-08-191-0/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | colitur-templates.5 documents the four syntax forms, the six flavours and their escaping, and the full view-model field reference. It states plainly that there are no partials, no raw form and no expression evaluation -- a template is data, never a program. It documents two real hazards found during this build, not theoretical ones: the outward scope fallback silently shadowing an inner name/num key with an outer one of the same name (with the safe {{#name}}...{{^la}} idiom), and the engine's lack of host-comment awareness (a {{...}} inside a LaTeX %, groff .\" or HTML <!-- --> comment is still parsed as a tag). It also states the limitation rather than hiding it: AsciiDoc and Markdown are not escaped, so a feast name containing * or _ renders as emphasis. templates/ and schema/ now install into <prefix>/share/colitur/, matching data/ef/, via new install stanzas; colitur-templates.5 installs to man5 beside colitur-overlay.5. Verified against a scratch prefix: the installed binary resolves both from the prefix, not the source tree, when run from an unrelated working directory. make check-templates typesets every shipped template through pdflatex and groff when they are installed, and prints SKIPPED loudly when they are not. Golden tests prove templates render; only this proves they typeset. A silent skip would read as a pass. Fixed a real doc/help drift while here: bin/main.ml's --help still said --overlay was accepted on day and readings only, three commands out of date (emit, table/render and publish all accept it too), disagreeing with the man page's own OVERLAYS section, which carried the identical stale line. Both are corrected; --overlay's own behaviour is unchanged.
* docs: close the final review's four documentation residuesLukasz Kasprzak2026-08-121-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | precedence_ef.mli said "there is no fifth, unclassified case" after the same commit renumbered the disposition list from four cases to five; the count is now six. precedence.mli's physical-equality obligation described the failure mode as counting a drop "a SECOND time (once because it is genuinely absent, once because its identity no longer matches)" -- the same condition stated twice. What actually happens to a rebuilt candidate record is that the celebration surfaces in BOTH commemorations (the copy) and omitted (the original), one admission double-reported. precedence_ef.ml carried the same muddled sentence, which is where the kernel's copy came from; both now say it plainly. vocab.ml/.mli referenced {!Rite_ef.rite_ef.ml} -- a filename inside an odoc reference, which is malformed. Now plain [Rite_ef.rite]. README documented only `dune test`, so the exhaustive 1583-9999 Validate sweep was discoverable only by reading test_validate.ml's own comment. With no CI in this repo, that line is what stands between a committed artifact and one anyone runs. No behaviour change: `colitur day` output is byte-identical across 1583, 1900, 1902, 2008, 2011, 2026, 2038 and 9999 (2921 days, both domain edges). 259 tests by default, 260 with the sweep.
* docs+test: small factual corrections (item 7, part 1)Lukasz Kasprzak2026-08-121-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Six independent, small corrections found during the final review: - dune (workspace root): the comment said the stanza used "(:standard)" to preserve dune's default `default` alias target; the stanza actually spells that out explicitly via (alias_rec install). Comment now matches the code. - test_validate.ml's test_easter_extremes asserted `List.length ys = 2` where an identity check was called for -- the comment already named 1598 and 1666, but nothing confirmed extreme_years() found THOSE two rather than some other pair with the right cardinality. Now asserts the identities directly (the project's "cardinality where identity was required" vacuity flavour, per the review). - test_oracle.ml and expected-divergences-missalemeum.sexp both claimed "one entry (M13) is [verdict open]" -- M11 is open too (its own verdict changed from colitur to open in fix round 1); both now say "two entries (M11 and M13)". - expected-divergences-missalemeum.sexp's M2 note attributed `band` to temporal_ef.ml; `band` is precedence_ef.ml's own function. - lib/kernel/precedence.mli documented `dropped`/`admit`'s physical- equality obligation nowhere -- it lived only in one rite's own module (Rite_ef.Precedence_ef.admit's doc comment), but this signature is what an author of the next rite actually reads. Added the obligation here, cross-referencing the EF instance as precedent, not the only source. - README's opam install line omitted sexplib and ppx_sexp_conv (both in dune-project's own depends; `dune build` fails without them for a contributor following the README verbatim) and documented only `colitur easter`, though `temporal` and `day` both exist and are the more useful entry points. Fixed both. No behaviour change: comment/doc/test-assertion corrections only (the easter-extremes fix strengthens an assertion, it does not change what passes). Verified byte-identical `colitur day` output across 1583, 1900, 1902, 2008, 2011, 2026, 2038, 9999. 259/259 tests green.
* chore: scaffold dune project (kernel lib + cli + tests)Lukasz Kasprzak2026-07-311-0/+23
OCaml 5.2.0 local switch; colitur_kernel library, a colitur executable stub, and an alcotest+qcheck test runner. AGPL LICENSE, README, generated colitur.opam.