Skip to content

feat: mint canonical IDs for circumscription types (ctype:) - #8

Merged
JohnRDOrazio merged 3 commits into
mainfrom
feat/circumscription-types
Aug 8, 2026
Merged

feat: mint canonical IDs for circumscription types (ctype:)#8
JohnRDOrazio merged 3 commits into
mainfrom
feat/circumscription-types

Conversation

@JohnRDOrazio

@JohnRDOrazio JohnRDOrazio commented Aug 7, 2026

Copy link
Copy Markdown
Member

Makes type a canonicalized cross-reference rather than a free string.

Until now the type enumeration existed only as prose in docs/schema-proposal.md — fourteen snake_case tokens in a parenthesis. This mints them as canonical IDs in a companion registry, data/circumscription_types.json, so a circumscription's type resolves to an entry with its own identity, Latin name, and juridic basis.

Why a cross-reference

It is what the family already does. COECDR embeds CRPDR rp: IDs in its Reigning pontiff column; CDOCTDR embeds CRMEDR mr: IDs for eulogies. An entry now reads:

{
  "id": "circ:us-boston",
  "name": "Archdiocese of Boston",
  "nation": "US",
  "church_sui_iuris": "latin",
  "type": "ctype:archdiocese"
}

The sixteen types

Covering exactly the scope the README already claims, plus two the schema proposal's open question 5 raises:

ID Latin church territorial governed by
ctype:diocese dioecesis latin diocesan bishop
ctype:archdiocese archidioecesis latin archbishop
ctype:eparchy eparchia eastern eparchial bishop
ctype:archeparchy archieparchia eastern archeparch
ctype:exarchate exarchatus eastern exarch
ctype:apostolic-exarchate exarchatus apostolicus eastern apostolic exarch
ctype:territorial-prelature praelatura territorialis latin prelate
ctype:territorial-abbacy abbatia territorialis latin abbot
ctype:apostolic-vicariate vicariatus apostolicus latin vicar apostolic
ctype:apostolic-prefecture praefectura apostolica latin prefect apostolic
ctype:apostolic-administration administratio apostolica both apostolic administrator
ctype:mission-sui-iuris missio sui iuris latin ecclesiastical superior
ctype:military-ordinariate ordinariatus militaris both military ordinary
ctype:personal-ordinariate ordinariatus personalis latin ordinary
ctype:personal-prelature praelatura personalis latin prelate
ctype:ordinariate-for-eastern-faithful ordinariatus pro fidelibus ritus orientalis eastern ordinary

Each entry also carries juridic_reference — CIC can. 369 for a diocese, can. 370 for territorial prelatures and abbacies, can. 371 §1 and §2 for the missionary forms, can. 294–297 for personal prelatures, CCEO can. 177 and 311 for the Eastern forms, Spirituali Militum Curae (1986) and Anglicanorum coetibus (2009) for the two ordinariate forms — and a note recording what distinguishes it.

Two entries carry "juridic_reference": null deliberately: ctype:mission-sui-iuris and ctype:ordinariate-for-eastern-faithful. Neither is defined in the 1983 Code; both are recognized in the Annuario and in practice. Null is honest here, and marks the citation as outstanding rather than implying none exists.

The territorial flag makes the personal structures legible as a class — it is the property that makes rule 5 necessary, and the reason circ:int-opus-dei has no nation.

Enforcement

generate_seed.py now asserts that every type resolves against the types registry:

AssertionError: unknown circumscription types: ['ctype:bogus-type']

Verified by injecting a bad value: the generator exits 1 rather than shipping an unresolvable reference. The existing duplicate-ID assertion is unchanged. data/circumscriptions.json changes by exactly one line — Opus Dei's personal_prelature becomes ctype:personal-prelature, the only typed entry in the seed.

Three new open questions

Added to docs/schema-proposal.md:

  1. (amended) Ordinariates for Eastern faithful and apostolic exarchates are now provisionally minted, so the question can be decided against concrete entries rather than in the abstract.
  2. English or Latin identifiers? ctype:territorial-abbacy as minted, or ctype:abbatia-territorialis following CDOCTDR's use of the Latin lemma. Latin would be language-neutral and match the Annuario; English matches the enumeration this repository already documented. name_la is carried either way, so this is about the identifier alone.
  3. Patriarchal and major archiepiscopal sees. Presently archeparchies, with the dignity of the church sui iuris carried by church_sui_iuris. The Annuario lists them distinctly; whether they warrant their own type IDs is unsettled.

Note on merging

This adds open questions 6 and 7. #1 also adds a question numbered 6. Whichever lands second needs renumbering — a trivial conflict, but worth knowing about rather than discovering.

Relation to open issues

This is the data #7 is blocked on: with type populated, the per-type registry tables become producible. It also gives #3 (ctype:territorial-abbacy), #4 (ctype:military-ordinariate), #5 (ctype:personal-ordinariate) and #6 (ctype:apostolic-prefecture) a value to assign as each is resolved.

Populating type across the other 2,934 entries remains a separate authoritative pass against the Annuario, as docs/schema-proposal.md § "Seed and its limits" already records.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Added a canonical registry of 16 ecclesiastical circumscription types with English and Latin names, applicability, territoriality, leadership, references, and notes.
    • Introduced standardized ctype: identifiers for circumscription types.
  • Data Updates

    • Updated the Opus Dei entry to use the new personal prelature identifier.
    • Added validation to ensure all listed types are recognized.
  • Documentation

    • Documented the registry, type resolution, schema changes, and outstanding classification questions.

`type` was planned as a free-string enumeration listed only in prose in the
schema proposal. This makes it a cross-reference into a companion registry,
`data/circumscription_types.json`, following the convention already used
across the family: COECDR embeds CRPDR `rp:` IDs, CDOCTDR embeds CRMEDR
`mr:` IDs.

Sixteen types are minted under the placeholder prefix `ctype:`, covering the
scope the README already claims: dioceses and archdioceses of the Latin
Church; eparchies, archeparchies, exarchates and apostolic exarchates of the
Eastern Catholic Churches; territorial prelatures and abbacies; apostolic
vicariates, prefectures and administrations; military and personal
ordinariates; personal prelatures; missions sui iuris; and ordinariates for
Eastern faithful without their own hierarchy.

Each entry carries the Latin name (the Annuario's own nomenclature), the
church the form belongs to, whether it is territorial, the title of the one
who governs it, and the governing canon or document.

generate_seed.py now asserts that every `type` resolves against the types
registry, so an unresolvable cross-reference fails the build rather than
shipping silently.

All IDs are drafts pending committee review; `ctype:` is a placeholder on the
same footing as `circ:`, pending open question 1.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@JohnRDOrazio, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 53 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: f3299836-3df3-4276-a2cf-c3f061b7a31f

📥 Commits

Reviewing files that changed from the base of the PR and between 3dac1af and 8bd972c.

📒 Files selected for processing (2)
  • data/circumscription_types.json
  • docs/schema-proposal.md
📝 Walkthrough

Walkthrough

The change adds a 16-entry circumscription type registry, defines ctype:<slug> identifiers, updates existing type references, documents registry resolution, and validates populated entry types during seed generation.

Changes

Circumscription type cross-reference

Layer / File(s) Summary
Canonical type registry and schema contract
data/circumscription_types.json, docs/schema-proposal.md, README.md
Defines the ctype:<slug> format, registry metadata, 16 type records, cross-registry conventions, and related taxonomy questions.
Canonical identifier migration
data/circumscriptions.json, scripts/generate_seed.py
Changes the Opus Dei type reference to ctype:personal-prelature. The schema example uses ctype:archdiocese.
Seed registry validation
scripts/generate_seed.py
Loads the type registry and fails seed generation when a populated entry uses an undefined type identifier.

Estimated code review effort: 3 (Moderate) | ~20 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: introducing canonical ctype: IDs for circumscription types.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/circumscription-types

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

The Abbazia territoriale di Santa Maria di Grottaferrata is of Byzantine rite
and is one of the three circumscriptions of the Chiesa bizantina cattolica in
Italia, alongside the eparchies of Lungro and Piana degli Albanesi. The
territorial abbacy is therefore not a Latin-only form.

The wider lesson is recorded as open question 8: `church` states which
churches are known to use each form, which is answerable only by enumerating
real circumscriptions. The seed is still Latin-rite only — all three
Italo-Albanian circumscriptions are absent from it — so the a-priori
classification cannot be trusted. The forms still marked `latin` need the
same check against the Annuario rather than against expectation.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@JohnRDOrazio

Copy link
Copy Markdown
Member Author

Corrected in 3dac1af: ctype:territorial-abbacy is both, not latin.

The Abbazia territoriale di Santa Maria di Grottaferrata is of Byzantine rite — one of the three circumscriptions of the Chiesa bizantina cattolica in Italia, alongside the eparchies of Lungro and Piana degli Albanesi, and still active under its own ordinary. The territorial abbacy is not a Latin-only form.

Worth recording why the error happened, because it generalizes. church states which churches are known to use each form. That is an empirical claim, answerable only by enumerating real circumscriptions — and the seed is Latin-rite only. All three Italo-Albanian circumscriptions are absent from it, so nothing in this repository could have contradicted the wrong classification.

The remaining latin entries — territorial prelature, apostolic vicariate, apostolic prefecture, mission sui iuris, personal prelature — were classified the same way and carry the same risk. They should be treated as unverified until checked against the Annuario, and I have not verified them.

That is now open question 8, and the file's $comment warns that a form marked latin may prove to be both once Eastern circumscriptions land.

Revised counts: latin 8, eastern 5, both 3.

… covered

The Bulgarian Greek Catholic Church had two Byzantine-rite apostolic
vicariates, Macedonia (Thessaloniki) and Thrace (Adrianople), both erected
1883 and suppressed 1926 into the Apostolic Exarchate of Sofia. Rule 3 keeps
suppressed circumscriptions referenceable forever, so this form must remain
typable for a Byzantine circumscription even though no Eastern apostolic
vicariate is currently active.

Checked the remaining `latin` values against Catholic-Hierarchy's structured
view of the Byzantine tradition, which shows only eparchy, archeparchy,
apostolic exarchate, apostolic administration and territorial abbey, and
against per-form surveys. No Eastern instance was found for diocese,
archdiocese, territorial prelature, apostolic prefecture, mission sui iuris,
personal prelature or personal ordinariate; all eight missions sui iuris are
Latin and the term is not used in the Eastern churches.

Two incidental confirmations: `ctype:apostolic-administration` as `both` is
right (Kazakhstan and Central Asia, and Belarus, are Byzantine), and
`ctype:ordinariate-for-eastern-faithful` corresponds to real entities (the
Ordinariate for Byzantine-Rite Catholics in Austria; the Ordinariate for
Catholics of Armenian Rite in Eastern Europe).

These sources are the verification aids the README already names, not
authorities. The Annuario Pontificio has not been consulted, and absence of
evidence is weaker than the two positives that forced a change — coverage of
suppressed Eastern circumscriptions is uneven. Open question 8 is rewritten
to say exactly that rather than to imply the field is settled.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@JohnRDOrazio

Copy link
Copy Markdown
Member Author

Verification pass on the remaining latin values — 8bd972c. One more correction, and a limitation worth stating up front.

Corrected

ctype:apostolic-vicariateboth. The Bulgarian Greek Catholic Church had two Byzantine-rite apostolic vicariates: Macedonia (Thessaloniki) and Thrace (Adrianople), both erected 1883, both suppressed 1926 into the Apostolic Exarchate of Sofia. None is currently active — the standing Eastern equivalent is the apostolic exarchate — but rule 3 keeps suppressed circumscriptions referenceable forever, so the form has to remain typable for a Byzantine circumscription. The historical scope this registry commits to is what makes latin wrong here.

Checked and unchanged

Catholic-Hierarchy's structured view of the Byzantine tradition shows only five type labels in use: eparchy, archeparchy, apostolic exarchate, apostolic administration, territorial abbey. No diocese, no archdiocese, no apostolic vicariate, no apostolic prefecture.

type verdict basis
ctype:diocese latin holds Eastern equivalent is eparchy throughout
ctype:archdiocese latin holds Eastern equivalent is archeparchy throughout
ctype:territorial-prelature latin holds no Eastern instance found
ctype:apostolic-prefecture latin holds no Eastern instance found, current or historical
ctype:mission-sui-iuris latin holds all 8 are Latin; term not used in the Eastern churches
ctype:personal-prelature latin holds Opus Dei only
ctype:personal-ordinariate latin holds 3, all Anglicanorum coetibus

Two incidental confirmations of values I had not been asked to check: ctype:apostolic-administration as both is right — Kazakhstan and Central Asia, and Belarus, are Byzantine — and ctype:ordinariate-for-eastern-faithful corresponds to real entities, the Ordinariate for Byzantine-Rite Catholics in Austria and the Ordinariate for Catholics of Armenian Rite in Eastern Europe.

The limitation

I did not verify against the Annuario Pontificio. It is not available online, and I have no copy. What I checked was Catholic-Hierarchy plus per-form surveys — the verification aids the README already names as not authorities.

That matters asymmetrically. The two corrections rest on positive findings, which are solid: one Byzantine abbacy and two Byzantine vicariates each definitively prove both. The seven that held rest on absence of evidence, which is weaker — particularly for suppressed Eastern circumscriptions, where these sources' coverage is uneven. A single overlooked historical jurisdiction would flip any of them the way Grottaferrata flipped the abbacy.

Open question 8 is rewritten to say this rather than to imply the field is now settled. Revised counts: latin 7, eastern 5, both 4.

@JohnRDOrazio
JohnRDOrazio merged commit d1fb03f into main Aug 8, 2026
1 check passed
@JohnRDOrazio
JohnRDOrazio deleted the feat/circumscription-types branch August 8, 2026 01:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant