Stage 2a: text-ingestion core — NFC, verse-keying, versification-mismatch #498

Merged
manlycucumber merged 1 commit from feat/text-ingestion into develop 2026-07-18 06:38:32 +00:00

Decision-free half of Stage 2 (§4.2, #112-#114): the format-agnostic ingestion library ingest.mjs (NFC normalization, ingestVerse/ingestPsalter with integer-verse + mandatory-locator + dedup fail-closed + deterministic sort, detectVersificationMismatch for #114), the psalter-verse stream-row schema, and synthetic tests (81 generator tests). Born-cited gate enforces the Venite fail-closed policy (a reference-only source can never transcribe a verse). No real text yet — Stage 2b is gated on Open-Q #10 (imprints) and #12 (Venite Gallican/Romanum + full-psalter ERRATA). No corpus/golden/PHP surface moves; cockpit-validated (npm test + verify). Signed commit 04f37a2.

Decision-free half of Stage 2 (§4.2, #112-#114): the format-agnostic ingestion library `ingest.mjs` (NFC normalization, `ingestVerse`/`ingestPsalter` with integer-verse + mandatory-locator + dedup fail-closed + deterministic sort, `detectVersificationMismatch` for #114), the `psalter-verse` stream-row schema, and synthetic tests (81 generator tests). Born-cited gate enforces the Venite fail-closed policy (a reference-only source can never transcribe a verse). No real text yet — Stage 2b is gated on Open-Q #10 (imprints) and #12 (Venite Gallican/Romanum + full-psalter ERRATA). No corpus/golden/PHP surface moves; cockpit-validated (npm test + verify). Signed commit `04f37a2`.
feat(text): ingestion core — NFC, verse-keying, versification-mismatch (Stage 2a)
Some checks failed
ci / check (7.4) (pull_request) Successful in 1m5s
ci / check (8.1) (pull_request) Successful in 1m3s
ci / check (8.2) (pull_request) Successful in 1m0s
ci / check (8.3) (pull_request) Successful in 59s
ci / validate (1954) (pull_request) Successful in 31s
ci / validate (1955) (pull_request) Successful in 32s
ci / validate (1962) (pull_request) Successful in 32s
ci / validate (novus-ordo-2002) (pull_request) Successful in 33s
ci / validate (overlays) (pull_request) Successful in 36s
ci / corpus-verify (pull_request) Successful in 11s
CodeQL / Analyze (actions) (pull_request) Has been skipped
pr-title / lint (pull_request) Failing after 2s
project-status-rollup / rollup (pull_request) Has been skipped
04f37a2adb
The decision-free half of Stage 2 (office-text-layer.md §4.2, #112-#114): the format-agnostic
text-ingestion library `tools/generator/src/ingest.mjs` — `nfc` NFC normalization (the new
ingest-boundary requirement §8/#112), `ingestVerse`/`ingestPsalter` (integer-verse enforcement,
mandatory scan-locator, dedup fail-closed, deterministic psalm:verse sort), and
`detectVersificationMismatch` (#114: detect + report Latin/English divergence, never silently
pair) — plus the `psalter-verse` stream-row schema (the frozen text-leaf fill-shape + the
psalm:verse address) and thorough synthetic tests (81 generator tests total).

It never decides provenance: a verse becomes a `full` leaf cited to a PD `text` source with a
locator, so the born-cited gate enforces the §4.2c Venite fail-closed policy — a reference-only
source (br-1961) can never transcribe a verse. No real psalter text yet: Stage 2b (the source
parsers + vendored PD text) is gated on the imprint (#10) and Venite/ERRATA (#12) decisions.
No corpus data, golden, or PHP surface moves — validated on the cockpit (npm test + verify).
Sign in to join this conversation.
No reviewers
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!498
No description provided.