content: 4 canon_traditions entries (#1542) - #1590

Closed
CraigBuckmaster wants to merge 1 commit into
masterfrom
claude/epic-1536-batch-d-ToKMu
Closed

content: 4 canon_traditions entries (#1542)#1590
CraigBuckmaster wants to merge 1 commit into
masterfrom
claude/epic-1536-batch-d-ToKMu

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

What this does

Seeds content/meta/canon_traditions.json with the four traditions that feed the Canon Comparison screen (HWGTB-P3-01 / #1550):

idlabelbook_countdistinctivesformation_events
protestantProtestant6648
catholicRoman Catholic7348
eastern_orthodoxEastern Orthodox7647
ethiopian_tewahedoEthiopian Orthodox Tewahedo8148

Each entry ships with a full canon_list organized into OT/NT sections, a factual 1–2 paragraph short_description, 4 distinctives, and 7–8 chronologically ordered formation_events (Jamnia, Athanasius' 39th Festal Letter, Hippo/Carthage, Jerome's Prologus Galeatus, Luther's 1534 Bible, Trent Session IV, Trullo Canon 2, Westminster 1.3, Confession of Dositheos, Kebra Nagast, Haile Selassie Amharic Bible, etc.).

Closes

Closes#1542

Dual-table book-ID resolution (per issue note)

canon_list[].books[] ids may reference either books.json (66-book Protestant canon) or extrabiblical.json (deuterocanon, pseudepigrapha, DSS). Extended both validators:

  • schema_validator.py — new CANON TRADITIONS section checks every book id against both tables, fails on malformed snake_case, and logs unresolved ids (expected while extrabiblical seed is partial) as informational.
  • validate_sqlite.py — DB-side parallel: book_count vs canon_list_json consistency + dual-table lookup + informational log.

Table infrastructure

The canon_traditions table (CREATE, loader, populate registration) authored in #1539 is also included here so this branch builds end-to-end without prerequisites. When #1587 merges first the overlap is a redundant no-op; when this merges first #1587 becomes a trivial redundant addition.

Editorial commitments

  • Descriptive, not prescriptive. "The Ethiopian Tewahedo Church includes 1 Enoch in its canon" stated as fact; no tradition endorsed or rejected.
  • Factual tone on contested questions. Jamnia council thesis flagged as abandoned by modern scholarship (Lewis, Leiman); Trent's dogmatic binding noted as response to Luther; Meqabyan distinguished from Greek 1–4 Maccabees; 1 Enoch's Ethiopian preservation history named (Bruce 1773, Qumran 1947).
  • Named primary sources. Athanasius Ep. 39, Westminster 1.3, Trent Session IV, Trullo Canon 2, Dei Verbum §9–10, Confession of Dositheos, Kebra Nagast.
  • No conspiracy framing. Canon formation described as slow, regional, and contested.

How I verified

Final state on this branch (no prerequisite PRs applied):

  • python _tools/build_sqlite.pycanon_traditions: 4 rows
  • python _tools/schema_validator.py136807 passed, 77 failed (same 77 pre-existing failures as master baseline, 0 new failures from canon_traditions work) ✅
  • python _tools/validate_sqlite.py94 passed, 0 failed, 2 warnings (pre-existing embeddings/prompts) ✅

Negative paths confirmed:

  • book_count mismatch → [FAIL] canon_tradition catholic book_count matches canon_list — book_count=999, listed=73
  • Non-snake_case book id → [FAIL] canon_tradition eastern_orthodox book 'Bad-Cased-Id' is snake_case

With #1541 (extrabiblical content, PR #1589) applied locally on top:

  • 15 canon_list references resolve through extrabiblical.json
  • 15 remain as informational logs (2_maccabees, baruch, 1_esdras, 3_maccabees, prayer_of_manasseh, 1/2/3_meqabyan, letter_of_jeremiah, tagsas) — all books outside the current 12-entry extrabiblical seed. Will stabilize if/when the extrabiblical seed expands in later epic work.

Merge order

Pairs with #1587 (canon_traditions schema, #1539) and #1589 (12 extrabiblical entries, #1541). Any merge order is safe — the shared additions between this and #1587 resolve identically.

Out of scope

  • Canon Comparison screen UI — HWGTB-P3-01 ([HWGTB-P3-01] App: CanonComparisonScreen #1550).
  • Additional extrabiblical entries for 2_maccabees, baruch, 1_esdras, etc. — not planned per the epic's scope (Phase 4 expands full_summary for the existing 12 entries only). Unresolved ids log as informational rather than failing, matching the existing pattern for non-Protestant book refs.

Rollback

Revert this PR. canon_traditions table drops on next build_sqlite.py run (tables recreated from schema each build). No user.db migrations.


Generated by Claude Code

@github-actions

github-actionsBot commented Apr 23, 2026

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation136885 passed, 77 failed
Build DB
DB Integrity94 passed, 0 failed

Content Pipeline — Quality & Accuracy Report

All content checks passed

Scope: 0 chapter(s) across 0 book(s)


Generated by ci_content_check.py

@github-actions

github-actionsBot commented Apr 23, 2026

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 3474❌ 03474
Suites✅ 469❌ 0469

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 84.4s

Seeds content/meta/canon_traditions.json with the four traditions that
feed the Canon Comparison screen:
protestant 66 books
catholic 73 books
eastern_orthodox 76 books
ethiopian_tewahedo 81 books
Every entry ships with book_count, full canon_list (organized by OT/NT
sections), 4 distinctives, and 7–8 chronologically ordered
formation_events covering the major councils, letters, and decisions
that shaped each tradition (Jamnia, Athanasius' 39th Festal Letter,
Hippo/Carthage, Jerome's Prologus Galeatus, Trent, Trullo, Jerusalem
1672, the Haile Selassie Amharic Bible, etc.).
Per the issue's dual-table note, canon_list[].books[] ids may reference
either books.json (66-book Protestant canon) or extrabiblical.json
(deuterocanon, pseudepigrapha, DSS). The schema_validator and
validate_sqlite checks are extended to check both tables; ids resolving
in neither are logged as informational (expected while the
extrabiblical table is seeded incrementally across the epic) but
malformed snake_case ids always fail.
The canon_traditions table infrastructure (CREATE TABLE, loader,
populate registration) authored in #1539 is included here — when #1539
merges first, the overlap is redundant; when this merges first, #1539
becomes a no-op for the shared additions.
Editorial commitments per epic guardrails:
- Descriptive, not prescriptive. "The Ethiopian Tewahedo Church
includes 1 Enoch in its canon" is stated as fact; no tradition is
endorsed or rejected.
- Factual tone on contested questions (Jamnia council, Trent's dogmatic
binding, Meqabyan ≠ Greek Maccabees, 1 Enoch preservation history).
- Named primary sources (Athanasius Ep. 39, Westminster 1.3, Vatican
II Dei Verbum, Confession of Dositheos, Kebra Nagast).
How verified
Full pipeline on this branch:
- python _tools/build_sqlite.py — canon_traditions: 4 rows (OK)
- python _tools/schema_validator.py — 136807 passed, 77 failed (same
77 pre-existing failures as master baseline, 0 new failures from
canon_traditions work)
- python _tools/validate_sqlite.py — 94 passed, 0 failed, 2 warnings
(pre-existing embeddings/prompts warnings)
Negative paths confirmed: book_count mismatch, non-snake_case book id,
and malformed ids all trigger [FAIL] in both validators.
With #1541 (extrabiblical content) applied locally on top:
- 15 canon_list references resolve through extrabiblical.json
- 15 remain as unresolved informational logs (2_maccabees, baruch,
1_esdras, 3_maccabees, prayer_of_manasseh, 1/2/3_meqabyan,
letter_of_jeremiah, tagsas — all represent books outside the
current 12-entry extrabiblical seed)
Closes#1542
@CraigBuckmaster
CraigBuckmasterforce-pushed the claude/epic-1536-batch-d-ToKMu branch from 8b94d30 to da1f723CompareApril 23, 2026 19:21
@CraigBuckmaster

Copy link
Copy Markdown
OwnerAuthor

Superseded by the replacement PR above, which is rebuilt cleanly on top of #1586 (already merged) so canon_traditions coexists with extrabiblical instead of conflicting. Closing here.

CraigBuckmaster pushed a commit that referenced this pull request Apr 23, 2026
Replaces PR #1590 which was built from a pre-#1586 base and conflicted
with the extrabiblical table/validators. This branch is rebuilt cleanly
on top of current master (with #1586 landed) so canon_traditions sits
alongside extrabiblical rather than replacing it.
Adds:
- CREATE TABLE canon_traditions in build_sqlite_schema.py
- populate_canon_traditions in build_sqlite_loaders.py
- canon_traditions invocation in build_sqlite.py
- Canon Traditions validation block in schema_validator.py (with dual-
table book-ID resolution against books.json + extrabiblical.json,
logging unresolved refs informationally)
- canon_traditions integrity check in validate_sqlite.py
- content/meta/canon_traditions.json seeded with 4 traditions:
protestant (66), catholic (73), eastern_orthodox (81),
ethiopian_tewahedo (81 broader canon)
All five pipeline stages (schema_validator → build_sqlite → validate_sqlite)
run green. 32 unresolved book refs are expected and log informationally
per #1542 — they resolve as the extrabiblical table is populated
incrementally by #1589 and follow-ups.
CraigBuckmaster added a commit that referenced this pull request Apr 23, 2026
Replaces PR #1590 which was built from a pre-#1586 base and conflicted
with the extrabiblical table/validators. This branch is rebuilt cleanly
on top of current master (with #1586 landed) so canon_traditions sits
alongside extrabiblical rather than replacing it.
Adds:
- CREATE TABLE canon_traditions in build_sqlite_schema.py
- populate_canon_traditions in build_sqlite_loaders.py
- canon_traditions invocation in build_sqlite.py
- Canon Traditions validation block in schema_validator.py (with dual-
table book-ID resolution against books.json + extrabiblical.json,
logging unresolved refs informationally)
- canon_traditions integrity check in validate_sqlite.py
- content/meta/canon_traditions.json seeded with 4 traditions:
protestant (66), catholic (73), eastern_orthodox (81),
ethiopian_tewahedo (81 broader canon)
All five pipeline stages (schema_validator → build_sqlite → validate_sqlite)
run green. 32 unresolved book refs are expected and log informationally
per #1542 — they resolve as the extrabiblical table is populated
incrementally by #1589 and follow-ups.
Co-authored-by: Claude (for Craig) <claude@anthropic.com>
@CraigBuckmaster
CraigBuckmaster deleted the claude/epic-1536-batch-d-ToKMu branch April 23, 2026 20:35
Sign up for freeto 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.

[HWGTB-P1-05] Content: 4 canon_traditions entries

2 participants

@CraigBuckmaster@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

content: 4 canon_traditions entries (#1542) - #1590

Closed
CraigBuckmaster wants to merge 1 commit into
masterfrom
claude/epic-1536-batch-d-ToKMu
Closed

content: 4 canon_traditions entries (#1542)#1590
CraigBuckmaster wants to merge 1 commit into
masterfrom
claude/epic-1536-batch-d-ToKMu

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

What this does

Seeds content/meta/canon_traditions.json with the four traditions that feed the Canon Comparison screen (HWGTB-P3-01 / #1550):

idlabelbook_countdistinctivesformation_events
protestantProtestant6648
catholicRoman Catholic7348
eastern_orthodoxEastern Orthodox7647
ethiopian_tewahedoEthiopian Orthodox Tewahedo8148

Each entry ships with a full canon_list organized into OT/NT sections, a factual 1–2 paragraph short_description, 4 distinctives, and 7–8 chronologically ordered formation_events (Jamnia, Athanasius' 39th Festal Letter, Hippo/Carthage, Jerome's Prologus Galeatus, Luther's 1534 Bible, Trent Session IV, Trullo Canon 2, Westminster 1.3, Confession of Dositheos, Kebra Nagast, Haile Selassie Amharic Bible, etc.).

Closes

Closes#1542

Dual-table book-ID resolution (per issue note)

canon_list[].books[] ids may reference either books.json (66-book Protestant canon) or extrabiblical.json (deuterocanon, pseudepigrapha, DSS). Extended both validators:

  • schema_validator.py — new CANON TRADITIONS section checks every book id against both tables, fails on malformed snake_case, and logs unresolved ids (expected while extrabiblical seed is partial) as informational.
  • validate_sqlite.py — DB-side parallel: book_count vs canon_list_json consistency + dual-table lookup + informational log.

Table infrastructure

The canon_traditions table (CREATE, loader, populate registration) authored in #1539 is also included here so this branch builds end-to-end without prerequisites. When #1587 merges first the overlap is a redundant no-op; when this merges first #1587 becomes a trivial redundant addition.

Editorial commitments

  • Descriptive, not prescriptive. "The Ethiopian Tewahedo Church includes 1 Enoch in its canon" stated as fact; no tradition endorsed or rejected.
  • Factual tone on contested questions. Jamnia council thesis flagged as abandoned by modern scholarship (Lewis, Leiman); Trent's dogmatic binding noted as response to Luther; Meqabyan distinguished from Greek 1–4 Maccabees; 1 Enoch's Ethiopian preservation history named (Bruce 1773, Qumran 1947).
  • Named primary sources. Athanasius Ep. 39, Westminster 1.3, Trent Session IV, Trullo Canon 2, Dei Verbum §9–10, Confession of Dositheos, Kebra Nagast.
  • No conspiracy framing. Canon formation described as slow, regional, and contested.

How I verified

Final state on this branch (no prerequisite PRs applied):

  • python _tools/build_sqlite.pycanon_traditions: 4 rows
  • python _tools/schema_validator.py136807 passed, 77 failed (same 77 pre-existing failures as master baseline, 0 new failures from canon_traditions work) ✅
  • python _tools/validate_sqlite.py94 passed, 0 failed, 2 warnings (pre-existing embeddings/prompts) ✅

Negative paths confirmed:

  • book_count mismatch → [FAIL] canon_tradition catholic book_count matches canon_list — book_count=999, listed=73
  • Non-snake_case book id → [FAIL] canon_tradition eastern_orthodox book 'Bad-Cased-Id' is snake_case

With #1541 (extrabiblical content, PR #1589) applied locally on top:

  • 15 canon_list references resolve through extrabiblical.json
  • 15 remain as informational logs (2_maccabees, baruch, 1_esdras, 3_maccabees, prayer_of_manasseh, 1/2/3_meqabyan, letter_of_jeremiah, tagsas) — all books outside the current 12-entry extrabiblical seed. Will stabilize if/when the extrabiblical seed expands in later epic work.

Merge order

Pairs with #1587 (canon_traditions schema, #1539) and #1589 (12 extrabiblical entries, #1541). Any merge order is safe — the shared additions between this and #1587 resolve identically.

Out of scope

  • Canon Comparison screen UI — HWGTB-P3-01 ([HWGTB-P3-01] App: CanonComparisonScreen #1550).
  • Additional extrabiblical entries for 2_maccabees, baruch, 1_esdras, etc. — not planned per the epic's scope (Phase 4 expands full_summary for the existing 12 entries only). Unresolved ids log as informational rather than failing, matching the existing pattern for non-Protestant book refs.

Rollback

Revert this PR. canon_traditions table drops on next build_sqlite.py run (tables recreated from schema each build). No user.db migrations.


Generated by Claude Code

@github-actions

github-actionsBot commented Apr 23, 2026

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation136885 passed, 77 failed
Build DB
DB Integrity94 passed, 0 failed

Content Pipeline — Quality & Accuracy Report

All content checks passed

Scope: 0 chapter(s) across 0 book(s)


Generated by ci_content_check.py

@github-actions

github-actionsBot commented Apr 23, 2026

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 3474❌ 03474
Suites✅ 469❌ 0469

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 84.4s

Seeds content/meta/canon_traditions.json with the four traditions that
feed the Canon Comparison screen:
protestant 66 books
catholic 73 books
eastern_orthodox 76 books
ethiopian_tewahedo 81 books
Every entry ships with book_count, full canon_list (organized by OT/NT
sections), 4 distinctives, and 7–8 chronologically ordered
formation_events covering the major councils, letters, and decisions
that shaped each tradition (Jamnia, Athanasius' 39th Festal Letter,
Hippo/Carthage, Jerome's Prologus Galeatus, Trent, Trullo, Jerusalem
1672, the Haile Selassie Amharic Bible, etc.).
Per the issue's dual-table note, canon_list[].books[] ids may reference
either books.json (66-book Protestant canon) or extrabiblical.json
(deuterocanon, pseudepigrapha, DSS). The schema_validator and
validate_sqlite checks are extended to check both tables; ids resolving
in neither are logged as informational (expected while the
extrabiblical table is seeded incrementally across the epic) but
malformed snake_case ids always fail.
The canon_traditions table infrastructure (CREATE TABLE, loader,
populate registration) authored in #1539 is included here — when #1539
merges first, the overlap is redundant; when this merges first, #1539
becomes a no-op for the shared additions.
Editorial commitments per epic guardrails:
- Descriptive, not prescriptive. "The Ethiopian Tewahedo Church
includes 1 Enoch in its canon" is stated as fact; no tradition is
endorsed or rejected.
- Factual tone on contested questions (Jamnia council, Trent's dogmatic
binding, Meqabyan ≠ Greek Maccabees, 1 Enoch preservation history).
- Named primary sources (Athanasius Ep. 39, Westminster 1.3, Vatican
II Dei Verbum, Confession of Dositheos, Kebra Nagast).
How verified
Full pipeline on this branch:
- python _tools/build_sqlite.py — canon_traditions: 4 rows (OK)
- python _tools/schema_validator.py — 136807 passed, 77 failed (same
77 pre-existing failures as master baseline, 0 new failures from
canon_traditions work)
- python _tools/validate_sqlite.py — 94 passed, 0 failed, 2 warnings
(pre-existing embeddings/prompts warnings)
Negative paths confirmed: book_count mismatch, non-snake_case book id,
and malformed ids all trigger [FAIL] in both validators.
With #1541 (extrabiblical content) applied locally on top:
- 15 canon_list references resolve through extrabiblical.json
- 15 remain as unresolved informational logs (2_maccabees, baruch,
1_esdras, 3_maccabees, prayer_of_manasseh, 1/2/3_meqabyan,
letter_of_jeremiah, tagsas — all represent books outside the
current 12-entry extrabiblical seed)
Closes#1542
@CraigBuckmaster
CraigBuckmasterforce-pushed the claude/epic-1536-batch-d-ToKMu branch from 8b94d30 to da1f723CompareApril 23, 2026 19:21
@CraigBuckmaster

Copy link
Copy Markdown
OwnerAuthor

Superseded by the replacement PR above, which is rebuilt cleanly on top of #1586 (already merged) so canon_traditions coexists with extrabiblical instead of conflicting. Closing here.

CraigBuckmaster pushed a commit that referenced this pull request Apr 23, 2026
Replaces PR #1590 which was built from a pre-#1586 base and conflicted
with the extrabiblical table/validators. This branch is rebuilt cleanly
on top of current master (with #1586 landed) so canon_traditions sits
alongside extrabiblical rather than replacing it.
Adds:
- CREATE TABLE canon_traditions in build_sqlite_schema.py
- populate_canon_traditions in build_sqlite_loaders.py
- canon_traditions invocation in build_sqlite.py
- Canon Traditions validation block in schema_validator.py (with dual-
table book-ID resolution against books.json + extrabiblical.json,
logging unresolved refs informationally)
- canon_traditions integrity check in validate_sqlite.py
- content/meta/canon_traditions.json seeded with 4 traditions:
protestant (66), catholic (73), eastern_orthodox (81),
ethiopian_tewahedo (81 broader canon)
All five pipeline stages (schema_validator → build_sqlite → validate_sqlite)
run green. 32 unresolved book refs are expected and log informationally
per #1542 — they resolve as the extrabiblical table is populated
incrementally by #1589 and follow-ups.
CraigBuckmaster added a commit that referenced this pull request Apr 23, 2026
Replaces PR #1590 which was built from a pre-#1586 base and conflicted
with the extrabiblical table/validators. This branch is rebuilt cleanly
on top of current master (with #1586 landed) so canon_traditions sits
alongside extrabiblical rather than replacing it.
Adds:
- CREATE TABLE canon_traditions in build_sqlite_schema.py
- populate_canon_traditions in build_sqlite_loaders.py
- canon_traditions invocation in build_sqlite.py
- Canon Traditions validation block in schema_validator.py (with dual-
table book-ID resolution against books.json + extrabiblical.json,
logging unresolved refs informationally)
- canon_traditions integrity check in validate_sqlite.py
- content/meta/canon_traditions.json seeded with 4 traditions:
protestant (66), catholic (73), eastern_orthodox (81),
ethiopian_tewahedo (81 broader canon)
All five pipeline stages (schema_validator → build_sqlite → validate_sqlite)
run green. 32 unresolved book refs are expected and log informationally
per #1542 — they resolve as the extrabiblical table is populated
incrementally by #1589 and follow-ups.
Co-authored-by: Claude (for Craig) <claude@anthropic.com>
@CraigBuckmaster
CraigBuckmaster deleted the claude/epic-1536-batch-d-ToKMu branch April 23, 2026 20:35
Sign up for freeto 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.

[HWGTB-P1-05] Content: 4 canon_traditions entries

2 participants

@CraigBuckmaster@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

content: 4 canon_traditions entries (#1542) - #1590

Closed
CraigBuckmaster wants to merge 1 commit into
masterfrom
claude/epic-1536-batch-d-ToKMu
Closed

content: 4 canon_traditions entries (#1542)#1590
CraigBuckmaster wants to merge 1 commit into
masterfrom
claude/epic-1536-batch-d-ToKMu

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

What this does

Seeds content/meta/canon_traditions.json with the four traditions that feed the Canon Comparison screen (HWGTB-P3-01 / #1550):

idlabelbook_countdistinctivesformation_events
protestantProtestant6648
catholicRoman Catholic7348
eastern_orthodoxEastern Orthodox7647
ethiopian_tewahedoEthiopian Orthodox Tewahedo8148

Each entry ships with a full canon_list organized into OT/NT sections, a factual 1–2 paragraph short_description, 4 distinctives, and 7–8 chronologically ordered formation_events (Jamnia, Athanasius' 39th Festal Letter, Hippo/Carthage, Jerome's Prologus Galeatus, Luther's 1534 Bible, Trent Session IV, Trullo Canon 2, Westminster 1.3, Confession of Dositheos, Kebra Nagast, Haile Selassie Amharic Bible, etc.).

Closes

Closes#1542

Dual-table book-ID resolution (per issue note)

canon_list[].books[] ids may reference either books.json (66-book Protestant canon) or extrabiblical.json (deuterocanon, pseudepigrapha, DSS). Extended both validators:

  • schema_validator.py — new CANON TRADITIONS section checks every book id against both tables, fails on malformed snake_case, and logs unresolved ids (expected while extrabiblical seed is partial) as informational.
  • validate_sqlite.py — DB-side parallel: book_count vs canon_list_json consistency + dual-table lookup + informational log.

Table infrastructure

The canon_traditions table (CREATE, loader, populate registration) authored in #1539 is also included here so this branch builds end-to-end without prerequisites. When #1587 merges first the overlap is a redundant no-op; when this merges first #1587 becomes a trivial redundant addition.

Editorial commitments

  • Descriptive, not prescriptive. "The Ethiopian Tewahedo Church includes 1 Enoch in its canon" stated as fact; no tradition endorsed or rejected.
  • Factual tone on contested questions. Jamnia council thesis flagged as abandoned by modern scholarship (Lewis, Leiman); Trent's dogmatic binding noted as response to Luther; Meqabyan distinguished from Greek 1–4 Maccabees; 1 Enoch's Ethiopian preservation history named (Bruce 1773, Qumran 1947).
  • Named primary sources. Athanasius Ep. 39, Westminster 1.3, Trent Session IV, Trullo Canon 2, Dei Verbum §9–10, Confession of Dositheos, Kebra Nagast.
  • No conspiracy framing. Canon formation described as slow, regional, and contested.

How I verified

Final state on this branch (no prerequisite PRs applied):

  • python _tools/build_sqlite.pycanon_traditions: 4 rows
  • python _tools/schema_validator.py136807 passed, 77 failed (same 77 pre-existing failures as master baseline, 0 new failures from canon_traditions work) ✅
  • python _tools/validate_sqlite.py94 passed, 0 failed, 2 warnings (pre-existing embeddings/prompts) ✅

Negative paths confirmed:

  • book_count mismatch → [FAIL] canon_tradition catholic book_count matches canon_list — book_count=999, listed=73
  • Non-snake_case book id → [FAIL] canon_tradition eastern_orthodox book 'Bad-Cased-Id' is snake_case

With #1541 (extrabiblical content, PR #1589) applied locally on top:

  • 15 canon_list references resolve through extrabiblical.json
  • 15 remain as informational logs (2_maccabees, baruch, 1_esdras, 3_maccabees, prayer_of_manasseh, 1/2/3_meqabyan, letter_of_jeremiah, tagsas) — all books outside the current 12-entry extrabiblical seed. Will stabilize if/when the extrabiblical seed expands in later epic work.

Merge order

Pairs with #1587 (canon_traditions schema, #1539) and #1589 (12 extrabiblical entries, #1541). Any merge order is safe — the shared additions between this and #1587 resolve identically.

Out of scope

  • Canon Comparison screen UI — HWGTB-P3-01 ([HWGTB-P3-01] App: CanonComparisonScreen #1550).
  • Additional extrabiblical entries for 2_maccabees, baruch, 1_esdras, etc. — not planned per the epic's scope (Phase 4 expands full_summary for the existing 12 entries only). Unresolved ids log as informational rather than failing, matching the existing pattern for non-Protestant book refs.

Rollback

Revert this PR. canon_traditions table drops on next build_sqlite.py run (tables recreated from schema each build). No user.db migrations.


Generated by Claude Code

@github-actions

github-actionsBot commented Apr 23, 2026

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation136885 passed, 77 failed
Build DB
DB Integrity94 passed, 0 failed

Content Pipeline — Quality & Accuracy Report

All content checks passed

Scope: 0 chapter(s) across 0 book(s)


Generated by ci_content_check.py

@github-actions

github-actionsBot commented Apr 23, 2026

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 3474❌ 03474
Suites✅ 469❌ 0469

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 84.4s

Seeds content/meta/canon_traditions.json with the four traditions that
feed the Canon Comparison screen:
protestant 66 books
catholic 73 books
eastern_orthodox 76 books
ethiopian_tewahedo 81 books
Every entry ships with book_count, full canon_list (organized by OT/NT
sections), 4 distinctives, and 7–8 chronologically ordered
formation_events covering the major councils, letters, and decisions
that shaped each tradition (Jamnia, Athanasius' 39th Festal Letter,
Hippo/Carthage, Jerome's Prologus Galeatus, Trent, Trullo, Jerusalem
1672, the Haile Selassie Amharic Bible, etc.).
Per the issue's dual-table note, canon_list[].books[] ids may reference
either books.json (66-book Protestant canon) or extrabiblical.json
(deuterocanon, pseudepigrapha, DSS). The schema_validator and
validate_sqlite checks are extended to check both tables; ids resolving
in neither are logged as informational (expected while the
extrabiblical table is seeded incrementally across the epic) but
malformed snake_case ids always fail.
The canon_traditions table infrastructure (CREATE TABLE, loader,
populate registration) authored in #1539 is included here — when #1539
merges first, the overlap is redundant; when this merges first, #1539
becomes a no-op for the shared additions.
Editorial commitments per epic guardrails:
- Descriptive, not prescriptive. "The Ethiopian Tewahedo Church
includes 1 Enoch in its canon" is stated as fact; no tradition is
endorsed or rejected.
- Factual tone on contested questions (Jamnia council, Trent's dogmatic
binding, Meqabyan ≠ Greek Maccabees, 1 Enoch preservation history).
- Named primary sources (Athanasius Ep. 39, Westminster 1.3, Vatican
II Dei Verbum, Confession of Dositheos, Kebra Nagast).
How verified
Full pipeline on this branch:
- python _tools/build_sqlite.py — canon_traditions: 4 rows (OK)
- python _tools/schema_validator.py — 136807 passed, 77 failed (same
77 pre-existing failures as master baseline, 0 new failures from
canon_traditions work)
- python _tools/validate_sqlite.py — 94 passed, 0 failed, 2 warnings
(pre-existing embeddings/prompts warnings)
Negative paths confirmed: book_count mismatch, non-snake_case book id,
and malformed ids all trigger [FAIL] in both validators.
With #1541 (extrabiblical content) applied locally on top:
- 15 canon_list references resolve through extrabiblical.json
- 15 remain as unresolved informational logs (2_maccabees, baruch,
1_esdras, 3_maccabees, prayer_of_manasseh, 1/2/3_meqabyan,
letter_of_jeremiah, tagsas — all represent books outside the
current 12-entry extrabiblical seed)
Closes#1542
@CraigBuckmaster
CraigBuckmasterforce-pushed the claude/epic-1536-batch-d-ToKMu branch from 8b94d30 to da1f723CompareApril 23, 2026 19:21
@CraigBuckmaster

Copy link
Copy Markdown
OwnerAuthor

Superseded by the replacement PR above, which is rebuilt cleanly on top of #1586 (already merged) so canon_traditions coexists with extrabiblical instead of conflicting. Closing here.

CraigBuckmaster pushed a commit that referenced this pull request Apr 23, 2026
Replaces PR #1590 which was built from a pre-#1586 base and conflicted
with the extrabiblical table/validators. This branch is rebuilt cleanly
on top of current master (with #1586 landed) so canon_traditions sits
alongside extrabiblical rather than replacing it.
Adds:
- CREATE TABLE canon_traditions in build_sqlite_schema.py
- populate_canon_traditions in build_sqlite_loaders.py
- canon_traditions invocation in build_sqlite.py
- Canon Traditions validation block in schema_validator.py (with dual-
table book-ID resolution against books.json + extrabiblical.json,
logging unresolved refs informationally)
- canon_traditions integrity check in validate_sqlite.py
- content/meta/canon_traditions.json seeded with 4 traditions:
protestant (66), catholic (73), eastern_orthodox (81),
ethiopian_tewahedo (81 broader canon)
All five pipeline stages (schema_validator → build_sqlite → validate_sqlite)
run green. 32 unresolved book refs are expected and log informationally
per #1542 — they resolve as the extrabiblical table is populated
incrementally by #1589 and follow-ups.
CraigBuckmaster added a commit that referenced this pull request Apr 23, 2026
Replaces PR #1590 which was built from a pre-#1586 base and conflicted
with the extrabiblical table/validators. This branch is rebuilt cleanly
on top of current master (with #1586 landed) so canon_traditions sits
alongside extrabiblical rather than replacing it.
Adds:
- CREATE TABLE canon_traditions in build_sqlite_schema.py
- populate_canon_traditions in build_sqlite_loaders.py
- canon_traditions invocation in build_sqlite.py
- Canon Traditions validation block in schema_validator.py (with dual-
table book-ID resolution against books.json + extrabiblical.json,
logging unresolved refs informationally)
- canon_traditions integrity check in validate_sqlite.py
- content/meta/canon_traditions.json seeded with 4 traditions:
protestant (66), catholic (73), eastern_orthodox (81),
ethiopian_tewahedo (81 broader canon)
All five pipeline stages (schema_validator → build_sqlite → validate_sqlite)
run green. 32 unresolved book refs are expected and log informationally
per #1542 — they resolve as the extrabiblical table is populated
incrementally by #1589 and follow-ups.
Co-authored-by: Claude (for Craig) <claude@anthropic.com>
@CraigBuckmaster
CraigBuckmaster deleted the claude/epic-1536-batch-d-ToKMu branch April 23, 2026 20:35
Sign up for freeto 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.

[HWGTB-P1-05] Content: 4 canon_traditions entries

2 participants

@CraigBuckmaster@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

content: 4 canon_traditions entries (#1542) - #1590

Closed
CraigBuckmaster wants to merge 1 commit into
masterfrom
claude/epic-1536-batch-d-ToKMu
Closed

content: 4 canon_traditions entries (#1542)#1590
CraigBuckmaster wants to merge 1 commit into
masterfrom
claude/epic-1536-batch-d-ToKMu

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

What this does

Seeds content/meta/canon_traditions.json with the four traditions that feed the Canon Comparison screen (HWGTB-P3-01 / #1550):

idlabelbook_countdistinctivesformation_events
protestantProtestant6648
catholicRoman Catholic7348
eastern_orthodoxEastern Orthodox7647
ethiopian_tewahedoEthiopian Orthodox Tewahedo8148

Each entry ships with a full canon_list organized into OT/NT sections, a factual 1–2 paragraph short_description, 4 distinctives, and 7–8 chronologically ordered formation_events (Jamnia, Athanasius' 39th Festal Letter, Hippo/Carthage, Jerome's Prologus Galeatus, Luther's 1534 Bible, Trent Session IV, Trullo Canon 2, Westminster 1.3, Confession of Dositheos, Kebra Nagast, Haile Selassie Amharic Bible, etc.).

Closes

Closes#1542

Dual-table book-ID resolution (per issue note)

canon_list[].books[] ids may reference either books.json (66-book Protestant canon) or extrabiblical.json (deuterocanon, pseudepigrapha, DSS). Extended both validators:

  • schema_validator.py — new CANON TRADITIONS section checks every book id against both tables, fails on malformed snake_case, and logs unresolved ids (expected while extrabiblical seed is partial) as informational.
  • validate_sqlite.py — DB-side parallel: book_count vs canon_list_json consistency + dual-table lookup + informational log.

Table infrastructure

The canon_traditions table (CREATE, loader, populate registration) authored in #1539 is also included here so this branch builds end-to-end without prerequisites. When #1587 merges first the overlap is a redundant no-op; when this merges first #1587 becomes a trivial redundant addition.

Editorial commitments

  • Descriptive, not prescriptive. "The Ethiopian Tewahedo Church includes 1 Enoch in its canon" stated as fact; no tradition endorsed or rejected.
  • Factual tone on contested questions. Jamnia council thesis flagged as abandoned by modern scholarship (Lewis, Leiman); Trent's dogmatic binding noted as response to Luther; Meqabyan distinguished from Greek 1–4 Maccabees; 1 Enoch's Ethiopian preservation history named (Bruce 1773, Qumran 1947).
  • Named primary sources. Athanasius Ep. 39, Westminster 1.3, Trent Session IV, Trullo Canon 2, Dei Verbum §9–10, Confession of Dositheos, Kebra Nagast.
  • No conspiracy framing. Canon formation described as slow, regional, and contested.

How I verified

Final state on this branch (no prerequisite PRs applied):

  • python _tools/build_sqlite.pycanon_traditions: 4 rows
  • python _tools/schema_validator.py136807 passed, 77 failed (same 77 pre-existing failures as master baseline, 0 new failures from canon_traditions work) ✅
  • python _tools/validate_sqlite.py94 passed, 0 failed, 2 warnings (pre-existing embeddings/prompts) ✅

Negative paths confirmed:

  • book_count mismatch → [FAIL] canon_tradition catholic book_count matches canon_list — book_count=999, listed=73
  • Non-snake_case book id → [FAIL] canon_tradition eastern_orthodox book 'Bad-Cased-Id' is snake_case

With #1541 (extrabiblical content, PR #1589) applied locally on top:

  • 15 canon_list references resolve through extrabiblical.json
  • 15 remain as informational logs (2_maccabees, baruch, 1_esdras, 3_maccabees, prayer_of_manasseh, 1/2/3_meqabyan, letter_of_jeremiah, tagsas) — all books outside the current 12-entry extrabiblical seed. Will stabilize if/when the extrabiblical seed expands in later epic work.

Merge order

Pairs with #1587 (canon_traditions schema, #1539) and #1589 (12 extrabiblical entries, #1541). Any merge order is safe — the shared additions between this and #1587 resolve identically.

Out of scope

  • Canon Comparison screen UI — HWGTB-P3-01 ([HWGTB-P3-01] App: CanonComparisonScreen #1550).
  • Additional extrabiblical entries for 2_maccabees, baruch, 1_esdras, etc. — not planned per the epic's scope (Phase 4 expands full_summary for the existing 12 entries only). Unresolved ids log as informational rather than failing, matching the existing pattern for non-Protestant book refs.

Rollback

Revert this PR. canon_traditions table drops on next build_sqlite.py run (tables recreated from schema each build). No user.db migrations.


Generated by Claude Code

@github-actions

github-actionsBot commented Apr 23, 2026

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation136885 passed, 77 failed
Build DB
DB Integrity94 passed, 0 failed

Content Pipeline — Quality & Accuracy Report

All content checks passed

Scope: 0 chapter(s) across 0 book(s)


Generated by ci_content_check.py

@github-actions

github-actionsBot commented Apr 23, 2026

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 3474❌ 03474
Suites✅ 469❌ 0469

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 84.4s

Seeds content/meta/canon_traditions.json with the four traditions that
feed the Canon Comparison screen:
protestant 66 books
catholic 73 books
eastern_orthodox 76 books
ethiopian_tewahedo 81 books
Every entry ships with book_count, full canon_list (organized by OT/NT
sections), 4 distinctives, and 7–8 chronologically ordered
formation_events covering the major councils, letters, and decisions
that shaped each tradition (Jamnia, Athanasius' 39th Festal Letter,
Hippo/Carthage, Jerome's Prologus Galeatus, Trent, Trullo, Jerusalem
1672, the Haile Selassie Amharic Bible, etc.).
Per the issue's dual-table note, canon_list[].books[] ids may reference
either books.json (66-book Protestant canon) or extrabiblical.json
(deuterocanon, pseudepigrapha, DSS). The schema_validator and
validate_sqlite checks are extended to check both tables; ids resolving
in neither are logged as informational (expected while the
extrabiblical table is seeded incrementally across the epic) but
malformed snake_case ids always fail.
The canon_traditions table infrastructure (CREATE TABLE, loader,
populate registration) authored in #1539 is included here — when #1539
merges first, the overlap is redundant; when this merges first, #1539
becomes a no-op for the shared additions.
Editorial commitments per epic guardrails:
- Descriptive, not prescriptive. "The Ethiopian Tewahedo Church
includes 1 Enoch in its canon" is stated as fact; no tradition is
endorsed or rejected.
- Factual tone on contested questions (Jamnia council, Trent's dogmatic
binding, Meqabyan ≠ Greek Maccabees, 1 Enoch preservation history).
- Named primary sources (Athanasius Ep. 39, Westminster 1.3, Vatican
II Dei Verbum, Confession of Dositheos, Kebra Nagast).
How verified
Full pipeline on this branch:
- python _tools/build_sqlite.py — canon_traditions: 4 rows (OK)
- python _tools/schema_validator.py — 136807 passed, 77 failed (same
77 pre-existing failures as master baseline, 0 new failures from
canon_traditions work)
- python _tools/validate_sqlite.py — 94 passed, 0 failed, 2 warnings
(pre-existing embeddings/prompts warnings)
Negative paths confirmed: book_count mismatch, non-snake_case book id,
and malformed ids all trigger [FAIL] in both validators.
With #1541 (extrabiblical content) applied locally on top:
- 15 canon_list references resolve through extrabiblical.json
- 15 remain as unresolved informational logs (2_maccabees, baruch,
1_esdras, 3_maccabees, prayer_of_manasseh, 1/2/3_meqabyan,
letter_of_jeremiah, tagsas — all represent books outside the
current 12-entry extrabiblical seed)
Closes#1542
@CraigBuckmaster
CraigBuckmasterforce-pushed the claude/epic-1536-batch-d-ToKMu branch from 8b94d30 to da1f723CompareApril 23, 2026 19:21
@CraigBuckmaster

Copy link
Copy Markdown
OwnerAuthor

Superseded by the replacement PR above, which is rebuilt cleanly on top of #1586 (already merged) so canon_traditions coexists with extrabiblical instead of conflicting. Closing here.

CraigBuckmaster pushed a commit that referenced this pull request Apr 23, 2026
Replaces PR #1590 which was built from a pre-#1586 base and conflicted
with the extrabiblical table/validators. This branch is rebuilt cleanly
on top of current master (with #1586 landed) so canon_traditions sits
alongside extrabiblical rather than replacing it.
Adds:
- CREATE TABLE canon_traditions in build_sqlite_schema.py
- populate_canon_traditions in build_sqlite_loaders.py
- canon_traditions invocation in build_sqlite.py
- Canon Traditions validation block in schema_validator.py (with dual-
table book-ID resolution against books.json + extrabiblical.json,
logging unresolved refs informationally)
- canon_traditions integrity check in validate_sqlite.py
- content/meta/canon_traditions.json seeded with 4 traditions:
protestant (66), catholic (73), eastern_orthodox (81),
ethiopian_tewahedo (81 broader canon)
All five pipeline stages (schema_validator → build_sqlite → validate_sqlite)
run green. 32 unresolved book refs are expected and log informationally
per #1542 — they resolve as the extrabiblical table is populated
incrementally by #1589 and follow-ups.
CraigBuckmaster added a commit that referenced this pull request Apr 23, 2026
Replaces PR #1590 which was built from a pre-#1586 base and conflicted
with the extrabiblical table/validators. This branch is rebuilt cleanly
on top of current master (with #1586 landed) so canon_traditions sits
alongside extrabiblical rather than replacing it.
Adds:
- CREATE TABLE canon_traditions in build_sqlite_schema.py
- populate_canon_traditions in build_sqlite_loaders.py
- canon_traditions invocation in build_sqlite.py
- Canon Traditions validation block in schema_validator.py (with dual-
table book-ID resolution against books.json + extrabiblical.json,
logging unresolved refs informationally)
- canon_traditions integrity check in validate_sqlite.py
- content/meta/canon_traditions.json seeded with 4 traditions:
protestant (66), catholic (73), eastern_orthodox (81),
ethiopian_tewahedo (81 broader canon)
All five pipeline stages (schema_validator → build_sqlite → validate_sqlite)
run green. 32 unresolved book refs are expected and log informationally
per #1542 — they resolve as the extrabiblical table is populated
incrementally by #1589 and follow-ups.
Co-authored-by: Claude (for Craig) <claude@anthropic.com>
@CraigBuckmaster
CraigBuckmaster deleted the claude/epic-1536-batch-d-ToKMu branch April 23, 2026 20:35
Sign up for freeto 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.

[HWGTB-P1-05] Content: 4 canon_traditions entries

2 participants

@CraigBuckmaster@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

content: 4 canon_traditions entries (#1542) - #1590

Closed
CraigBuckmaster wants to merge 1 commit into
masterfrom
claude/epic-1536-batch-d-ToKMu
Closed

content: 4 canon_traditions entries (#1542)#1590
CraigBuckmaster wants to merge 1 commit into
masterfrom
claude/epic-1536-batch-d-ToKMu

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

What this does

Seeds content/meta/canon_traditions.json with the four traditions that feed the Canon Comparison screen (HWGTB-P3-01 / #1550):

idlabelbook_countdistinctivesformation_events
protestantProtestant6648
catholicRoman Catholic7348
eastern_orthodoxEastern Orthodox7647
ethiopian_tewahedoEthiopian Orthodox Tewahedo8148

Each entry ships with a full canon_list organized into OT/NT sections, a factual 1–2 paragraph short_description, 4 distinctives, and 7–8 chronologically ordered formation_events (Jamnia, Athanasius' 39th Festal Letter, Hippo/Carthage, Jerome's Prologus Galeatus, Luther's 1534 Bible, Trent Session IV, Trullo Canon 2, Westminster 1.3, Confession of Dositheos, Kebra Nagast, Haile Selassie Amharic Bible, etc.).

Closes

Closes#1542

Dual-table book-ID resolution (per issue note)

canon_list[].books[] ids may reference either books.json (66-book Protestant canon) or extrabiblical.json (deuterocanon, pseudepigrapha, DSS). Extended both validators:

  • schema_validator.py — new CANON TRADITIONS section checks every book id against both tables, fails on malformed snake_case, and logs unresolved ids (expected while extrabiblical seed is partial) as informational.
  • validate_sqlite.py — DB-side parallel: book_count vs canon_list_json consistency + dual-table lookup + informational log.

Table infrastructure

The canon_traditions table (CREATE, loader, populate registration) authored in #1539 is also included here so this branch builds end-to-end without prerequisites. When #1587 merges first the overlap is a redundant no-op; when this merges first #1587 becomes a trivial redundant addition.

Editorial commitments

  • Descriptive, not prescriptive. "The Ethiopian Tewahedo Church includes 1 Enoch in its canon" stated as fact; no tradition endorsed or rejected.
  • Factual tone on contested questions. Jamnia council thesis flagged as abandoned by modern scholarship (Lewis, Leiman); Trent's dogmatic binding noted as response to Luther; Meqabyan distinguished from Greek 1–4 Maccabees; 1 Enoch's Ethiopian preservation history named (Bruce 1773, Qumran 1947).
  • Named primary sources. Athanasius Ep. 39, Westminster 1.3, Trent Session IV, Trullo Canon 2, Dei Verbum §9–10, Confession of Dositheos, Kebra Nagast.
  • No conspiracy framing. Canon formation described as slow, regional, and contested.

How I verified

Final state on this branch (no prerequisite PRs applied):

  • python _tools/build_sqlite.pycanon_traditions: 4 rows
  • python _tools/schema_validator.py136807 passed, 77 failed (same 77 pre-existing failures as master baseline, 0 new failures from canon_traditions work) ✅
  • python _tools/validate_sqlite.py94 passed, 0 failed, 2 warnings (pre-existing embeddings/prompts) ✅

Negative paths confirmed:

  • book_count mismatch → [FAIL] canon_tradition catholic book_count matches canon_list — book_count=999, listed=73
  • Non-snake_case book id → [FAIL] canon_tradition eastern_orthodox book 'Bad-Cased-Id' is snake_case

With #1541 (extrabiblical content, PR #1589) applied locally on top:

  • 15 canon_list references resolve through extrabiblical.json
  • 15 remain as informational logs (2_maccabees, baruch, 1_esdras, 3_maccabees, prayer_of_manasseh, 1/2/3_meqabyan, letter_of_jeremiah, tagsas) — all books outside the current 12-entry extrabiblical seed. Will stabilize if/when the extrabiblical seed expands in later epic work.

Merge order

Pairs with #1587 (canon_traditions schema, #1539) and #1589 (12 extrabiblical entries, #1541). Any merge order is safe — the shared additions between this and #1587 resolve identically.

Out of scope

  • Canon Comparison screen UI — HWGTB-P3-01 ([HWGTB-P3-01] App: CanonComparisonScreen #1550).
  • Additional extrabiblical entries for 2_maccabees, baruch, 1_esdras, etc. — not planned per the epic's scope (Phase 4 expands full_summary for the existing 12 entries only). Unresolved ids log as informational rather than failing, matching the existing pattern for non-Protestant book refs.

Rollback

Revert this PR. canon_traditions table drops on next build_sqlite.py run (tables recreated from schema each build). No user.db migrations.


Generated by Claude Code

@github-actions

github-actionsBot commented Apr 23, 2026

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation136885 passed, 77 failed
Build DB
DB Integrity94 passed, 0 failed

Content Pipeline — Quality & Accuracy Report

All content checks passed

Scope: 0 chapter(s) across 0 book(s)


Generated by ci_content_check.py

@github-actions

github-actionsBot commented Apr 23, 2026

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 3474❌ 03474
Suites✅ 469❌ 0469

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 84.4s

Seeds content/meta/canon_traditions.json with the four traditions that
feed the Canon Comparison screen:
protestant 66 books
catholic 73 books
eastern_orthodox 76 books
ethiopian_tewahedo 81 books
Every entry ships with book_count, full canon_list (organized by OT/NT
sections), 4 distinctives, and 7–8 chronologically ordered
formation_events covering the major councils, letters, and decisions
that shaped each tradition (Jamnia, Athanasius' 39th Festal Letter,
Hippo/Carthage, Jerome's Prologus Galeatus, Trent, Trullo, Jerusalem
1672, the Haile Selassie Amharic Bible, etc.).
Per the issue's dual-table note, canon_list[].books[] ids may reference
either books.json (66-book Protestant canon) or extrabiblical.json
(deuterocanon, pseudepigrapha, DSS). The schema_validator and
validate_sqlite checks are extended to check both tables; ids resolving
in neither are logged as informational (expected while the
extrabiblical table is seeded incrementally across the epic) but
malformed snake_case ids always fail.
The canon_traditions table infrastructure (CREATE TABLE, loader,
populate registration) authored in #1539 is included here — when #1539
merges first, the overlap is redundant; when this merges first, #1539
becomes a no-op for the shared additions.
Editorial commitments per epic guardrails:
- Descriptive, not prescriptive. "The Ethiopian Tewahedo Church
includes 1 Enoch in its canon" is stated as fact; no tradition is
endorsed or rejected.
- Factual tone on contested questions (Jamnia council, Trent's dogmatic
binding, Meqabyan ≠ Greek Maccabees, 1 Enoch preservation history).
- Named primary sources (Athanasius Ep. 39, Westminster 1.3, Vatican
II Dei Verbum, Confession of Dositheos, Kebra Nagast).
How verified
Full pipeline on this branch:
- python _tools/build_sqlite.py — canon_traditions: 4 rows (OK)
- python _tools/schema_validator.py — 136807 passed, 77 failed (same
77 pre-existing failures as master baseline, 0 new failures from
canon_traditions work)
- python _tools/validate_sqlite.py — 94 passed, 0 failed, 2 warnings
(pre-existing embeddings/prompts warnings)
Negative paths confirmed: book_count mismatch, non-snake_case book id,
and malformed ids all trigger [FAIL] in both validators.
With #1541 (extrabiblical content) applied locally on top:
- 15 canon_list references resolve through extrabiblical.json
- 15 remain as unresolved informational logs (2_maccabees, baruch,
1_esdras, 3_maccabees, prayer_of_manasseh, 1/2/3_meqabyan,
letter_of_jeremiah, tagsas — all represent books outside the
current 12-entry extrabiblical seed)
Closes#1542
@CraigBuckmaster
CraigBuckmasterforce-pushed the claude/epic-1536-batch-d-ToKMu branch from 8b94d30 to da1f723CompareApril 23, 2026 19:21
@CraigBuckmaster

Copy link
Copy Markdown
OwnerAuthor

Superseded by the replacement PR above, which is rebuilt cleanly on top of #1586 (already merged) so canon_traditions coexists with extrabiblical instead of conflicting. Closing here.

CraigBuckmaster pushed a commit that referenced this pull request Apr 23, 2026
Replaces PR #1590 which was built from a pre-#1586 base and conflicted
with the extrabiblical table/validators. This branch is rebuilt cleanly
on top of current master (with #1586 landed) so canon_traditions sits
alongside extrabiblical rather than replacing it.
Adds:
- CREATE TABLE canon_traditions in build_sqlite_schema.py
- populate_canon_traditions in build_sqlite_loaders.py
- canon_traditions invocation in build_sqlite.py
- Canon Traditions validation block in schema_validator.py (with dual-
table book-ID resolution against books.json + extrabiblical.json,
logging unresolved refs informationally)
- canon_traditions integrity check in validate_sqlite.py
- content/meta/canon_traditions.json seeded with 4 traditions:
protestant (66), catholic (73), eastern_orthodox (81),
ethiopian_tewahedo (81 broader canon)
All five pipeline stages (schema_validator → build_sqlite → validate_sqlite)
run green. 32 unresolved book refs are expected and log informationally
per #1542 — they resolve as the extrabiblical table is populated
incrementally by #1589 and follow-ups.
CraigBuckmaster added a commit that referenced this pull request Apr 23, 2026
Replaces PR #1590 which was built from a pre-#1586 base and conflicted
with the extrabiblical table/validators. This branch is rebuilt cleanly
on top of current master (with #1586 landed) so canon_traditions sits
alongside extrabiblical rather than replacing it.
Adds:
- CREATE TABLE canon_traditions in build_sqlite_schema.py
- populate_canon_traditions in build_sqlite_loaders.py
- canon_traditions invocation in build_sqlite.py
- Canon Traditions validation block in schema_validator.py (with dual-
table book-ID resolution against books.json + extrabiblical.json,
logging unresolved refs informationally)
- canon_traditions integrity check in validate_sqlite.py
- content/meta/canon_traditions.json seeded with 4 traditions:
protestant (66), catholic (73), eastern_orthodox (81),
ethiopian_tewahedo (81 broader canon)
All five pipeline stages (schema_validator → build_sqlite → validate_sqlite)
run green. 32 unresolved book refs are expected and log informationally
per #1542 — they resolve as the extrabiblical table is populated
incrementally by #1589 and follow-ups.
Co-authored-by: Claude (for Craig) <claude@anthropic.com>
@CraigBuckmaster
CraigBuckmaster deleted the claude/epic-1536-batch-d-ToKMu branch April 23, 2026 20:35
Sign up for freeto 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.

[HWGTB-P1-05] Content: 4 canon_traditions entries

2 participants

@CraigBuckmaster@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

content: 4 canon_traditions entries (#1542) - #1590

Closed
CraigBuckmaster wants to merge 1 commit into
masterfrom
claude/epic-1536-batch-d-ToKMu
Closed

content: 4 canon_traditions entries (#1542)#1590
CraigBuckmaster wants to merge 1 commit into
masterfrom
claude/epic-1536-batch-d-ToKMu

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

What this does

Seeds content/meta/canon_traditions.json with the four traditions that feed the Canon Comparison screen (HWGTB-P3-01 / #1550):

idlabelbook_countdistinctivesformation_events
protestantProtestant6648
catholicRoman Catholic7348
eastern_orthodoxEastern Orthodox7647
ethiopian_tewahedoEthiopian Orthodox Tewahedo8148

Each entry ships with a full canon_list organized into OT/NT sections, a factual 1–2 paragraph short_description, 4 distinctives, and 7–8 chronologically ordered formation_events (Jamnia, Athanasius' 39th Festal Letter, Hippo/Carthage, Jerome's Prologus Galeatus, Luther's 1534 Bible, Trent Session IV, Trullo Canon 2, Westminster 1.3, Confession of Dositheos, Kebra Nagast, Haile Selassie Amharic Bible, etc.).

Closes

Closes#1542

Dual-table book-ID resolution (per issue note)

canon_list[].books[] ids may reference either books.json (66-book Protestant canon) or extrabiblical.json (deuterocanon, pseudepigrapha, DSS). Extended both validators:

  • schema_validator.py — new CANON TRADITIONS section checks every book id against both tables, fails on malformed snake_case, and logs unresolved ids (expected while extrabiblical seed is partial) as informational.
  • validate_sqlite.py — DB-side parallel: book_count vs canon_list_json consistency + dual-table lookup + informational log.

Table infrastructure

The canon_traditions table (CREATE, loader, populate registration) authored in #1539 is also included here so this branch builds end-to-end without prerequisites. When #1587 merges first the overlap is a redundant no-op; when this merges first #1587 becomes a trivial redundant addition.

Editorial commitments

  • Descriptive, not prescriptive. "The Ethiopian Tewahedo Church includes 1 Enoch in its canon" stated as fact; no tradition endorsed or rejected.
  • Factual tone on contested questions. Jamnia council thesis flagged as abandoned by modern scholarship (Lewis, Leiman); Trent's dogmatic binding noted as response to Luther; Meqabyan distinguished from Greek 1–4 Maccabees; 1 Enoch's Ethiopian preservation history named (Bruce 1773, Qumran 1947).
  • Named primary sources. Athanasius Ep. 39, Westminster 1.3, Trent Session IV, Trullo Canon 2, Dei Verbum §9–10, Confession of Dositheos, Kebra Nagast.
  • No conspiracy framing. Canon formation described as slow, regional, and contested.

How I verified

Final state on this branch (no prerequisite PRs applied):

  • python _tools/build_sqlite.pycanon_traditions: 4 rows
  • python _tools/schema_validator.py136807 passed, 77 failed (same 77 pre-existing failures as master baseline, 0 new failures from canon_traditions work) ✅
  • python _tools/validate_sqlite.py94 passed, 0 failed, 2 warnings (pre-existing embeddings/prompts) ✅

Negative paths confirmed:

  • book_count mismatch → [FAIL] canon_tradition catholic book_count matches canon_list — book_count=999, listed=73
  • Non-snake_case book id → [FAIL] canon_tradition eastern_orthodox book 'Bad-Cased-Id' is snake_case

With #1541 (extrabiblical content, PR #1589) applied locally on top:

  • 15 canon_list references resolve through extrabiblical.json
  • 15 remain as informational logs (2_maccabees, baruch, 1_esdras, 3_maccabees, prayer_of_manasseh, 1/2/3_meqabyan, letter_of_jeremiah, tagsas) — all books outside the current 12-entry extrabiblical seed. Will stabilize if/when the extrabiblical seed expands in later epic work.

Merge order

Pairs with #1587 (canon_traditions schema, #1539) and #1589 (12 extrabiblical entries, #1541). Any merge order is safe — the shared additions between this and #1587 resolve identically.

Out of scope

  • Canon Comparison screen UI — HWGTB-P3-01 ([HWGTB-P3-01] App: CanonComparisonScreen #1550).
  • Additional extrabiblical entries for 2_maccabees, baruch, 1_esdras, etc. — not planned per the epic's scope (Phase 4 expands full_summary for the existing 12 entries only). Unresolved ids log as informational rather than failing, matching the existing pattern for non-Protestant book refs.

Rollback

Revert this PR. canon_traditions table drops on next build_sqlite.py run (tables recreated from schema each build). No user.db migrations.


Generated by Claude Code

@github-actions

github-actionsBot commented Apr 23, 2026

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation136885 passed, 77 failed
Build DB
DB Integrity94 passed, 0 failed

Content Pipeline — Quality & Accuracy Report

All content checks passed

Scope: 0 chapter(s) across 0 book(s)


Generated by ci_content_check.py

@github-actions

github-actionsBot commented Apr 23, 2026

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 3474❌ 03474
Suites✅ 469❌ 0469

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 84.4s

Seeds content/meta/canon_traditions.json with the four traditions that
feed the Canon Comparison screen:
protestant 66 books
catholic 73 books
eastern_orthodox 76 books
ethiopian_tewahedo 81 books
Every entry ships with book_count, full canon_list (organized by OT/NT
sections), 4 distinctives, and 7–8 chronologically ordered
formation_events covering the major councils, letters, and decisions
that shaped each tradition (Jamnia, Athanasius' 39th Festal Letter,
Hippo/Carthage, Jerome's Prologus Galeatus, Trent, Trullo, Jerusalem
1672, the Haile Selassie Amharic Bible, etc.).
Per the issue's dual-table note, canon_list[].books[] ids may reference
either books.json (66-book Protestant canon) or extrabiblical.json
(deuterocanon, pseudepigrapha, DSS). The schema_validator and
validate_sqlite checks are extended to check both tables; ids resolving
in neither are logged as informational (expected while the
extrabiblical table is seeded incrementally across the epic) but
malformed snake_case ids always fail.
The canon_traditions table infrastructure (CREATE TABLE, loader,
populate registration) authored in #1539 is included here — when #1539
merges first, the overlap is redundant; when this merges first, #1539
becomes a no-op for the shared additions.
Editorial commitments per epic guardrails:
- Descriptive, not prescriptive. "The Ethiopian Tewahedo Church
includes 1 Enoch in its canon" is stated as fact; no tradition is
endorsed or rejected.
- Factual tone on contested questions (Jamnia council, Trent's dogmatic
binding, Meqabyan ≠ Greek Maccabees, 1 Enoch preservation history).
- Named primary sources (Athanasius Ep. 39, Westminster 1.3, Vatican
II Dei Verbum, Confession of Dositheos, Kebra Nagast).
How verified
Full pipeline on this branch:
- python _tools/build_sqlite.py — canon_traditions: 4 rows (OK)
- python _tools/schema_validator.py — 136807 passed, 77 failed (same
77 pre-existing failures as master baseline, 0 new failures from
canon_traditions work)
- python _tools/validate_sqlite.py — 94 passed, 0 failed, 2 warnings
(pre-existing embeddings/prompts warnings)
Negative paths confirmed: book_count mismatch, non-snake_case book id,
and malformed ids all trigger [FAIL] in both validators.
With #1541 (extrabiblical content) applied locally on top:
- 15 canon_list references resolve through extrabiblical.json
- 15 remain as unresolved informational logs (2_maccabees, baruch,
1_esdras, 3_maccabees, prayer_of_manasseh, 1/2/3_meqabyan,
letter_of_jeremiah, tagsas — all represent books outside the
current 12-entry extrabiblical seed)
Closes#1542
@CraigBuckmaster
CraigBuckmasterforce-pushed the claude/epic-1536-batch-d-ToKMu branch from 8b94d30 to da1f723CompareApril 23, 2026 19:21
@CraigBuckmaster

Copy link
Copy Markdown
OwnerAuthor

Superseded by the replacement PR above, which is rebuilt cleanly on top of #1586 (already merged) so canon_traditions coexists with extrabiblical instead of conflicting. Closing here.

CraigBuckmaster pushed a commit that referenced this pull request Apr 23, 2026
Replaces PR #1590 which was built from a pre-#1586 base and conflicted
with the extrabiblical table/validators. This branch is rebuilt cleanly
on top of current master (with #1586 landed) so canon_traditions sits
alongside extrabiblical rather than replacing it.
Adds:
- CREATE TABLE canon_traditions in build_sqlite_schema.py
- populate_canon_traditions in build_sqlite_loaders.py
- canon_traditions invocation in build_sqlite.py
- Canon Traditions validation block in schema_validator.py (with dual-
table book-ID resolution against books.json + extrabiblical.json,
logging unresolved refs informationally)
- canon_traditions integrity check in validate_sqlite.py
- content/meta/canon_traditions.json seeded with 4 traditions:
protestant (66), catholic (73), eastern_orthodox (81),
ethiopian_tewahedo (81 broader canon)
All five pipeline stages (schema_validator → build_sqlite → validate_sqlite)
run green. 32 unresolved book refs are expected and log informationally
per #1542 — they resolve as the extrabiblical table is populated
incrementally by #1589 and follow-ups.
CraigBuckmaster added a commit that referenced this pull request Apr 23, 2026
Replaces PR #1590 which was built from a pre-#1586 base and conflicted
with the extrabiblical table/validators. This branch is rebuilt cleanly
on top of current master (with #1586 landed) so canon_traditions sits
alongside extrabiblical rather than replacing it.
Adds:
- CREATE TABLE canon_traditions in build_sqlite_schema.py
- populate_canon_traditions in build_sqlite_loaders.py
- canon_traditions invocation in build_sqlite.py
- Canon Traditions validation block in schema_validator.py (with dual-
table book-ID resolution against books.json + extrabiblical.json,
logging unresolved refs informationally)
- canon_traditions integrity check in validate_sqlite.py
- content/meta/canon_traditions.json seeded with 4 traditions:
protestant (66), catholic (73), eastern_orthodox (81),
ethiopian_tewahedo (81 broader canon)
All five pipeline stages (schema_validator → build_sqlite → validate_sqlite)
run green. 32 unresolved book refs are expected and log informationally
per #1542 — they resolve as the extrabiblical table is populated
incrementally by #1589 and follow-ups.
Co-authored-by: Claude (for Craig) <claude@anthropic.com>
@CraigBuckmaster
CraigBuckmaster deleted the claude/epic-1536-batch-d-ToKMu branch April 23, 2026 20:35
Sign up for freeto 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.

[HWGTB-P1-05] Content: 4 canon_traditions entries

2 participants

@CraigBuckmaster@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

content: 4 canon_traditions entries (#1542) - #1590

Closed
CraigBuckmaster wants to merge 1 commit into
masterfrom
claude/epic-1536-batch-d-ToKMu
Closed

content: 4 canon_traditions entries (#1542)#1590
CraigBuckmaster wants to merge 1 commit into
masterfrom
claude/epic-1536-batch-d-ToKMu

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

What this does

Seeds content/meta/canon_traditions.json with the four traditions that feed the Canon Comparison screen (HWGTB-P3-01 / #1550):

idlabelbook_countdistinctivesformation_events
protestantProtestant6648
catholicRoman Catholic7348
eastern_orthodoxEastern Orthodox7647
ethiopian_tewahedoEthiopian Orthodox Tewahedo8148

Each entry ships with a full canon_list organized into OT/NT sections, a factual 1–2 paragraph short_description, 4 distinctives, and 7–8 chronologically ordered formation_events (Jamnia, Athanasius' 39th Festal Letter, Hippo/Carthage, Jerome's Prologus Galeatus, Luther's 1534 Bible, Trent Session IV, Trullo Canon 2, Westminster 1.3, Confession of Dositheos, Kebra Nagast, Haile Selassie Amharic Bible, etc.).

Closes

Closes#1542

Dual-table book-ID resolution (per issue note)

canon_list[].books[] ids may reference either books.json (66-book Protestant canon) or extrabiblical.json (deuterocanon, pseudepigrapha, DSS). Extended both validators:

  • schema_validator.py — new CANON TRADITIONS section checks every book id against both tables, fails on malformed snake_case, and logs unresolved ids (expected while extrabiblical seed is partial) as informational.
  • validate_sqlite.py — DB-side parallel: book_count vs canon_list_json consistency + dual-table lookup + informational log.

Table infrastructure

The canon_traditions table (CREATE, loader, populate registration) authored in #1539 is also included here so this branch builds end-to-end without prerequisites. When #1587 merges first the overlap is a redundant no-op; when this merges first #1587 becomes a trivial redundant addition.

Editorial commitments

  • Descriptive, not prescriptive. "The Ethiopian Tewahedo Church includes 1 Enoch in its canon" stated as fact; no tradition endorsed or rejected.
  • Factual tone on contested questions. Jamnia council thesis flagged as abandoned by modern scholarship (Lewis, Leiman); Trent's dogmatic binding noted as response to Luther; Meqabyan distinguished from Greek 1–4 Maccabees; 1 Enoch's Ethiopian preservation history named (Bruce 1773, Qumran 1947).
  • Named primary sources. Athanasius Ep. 39, Westminster 1.3, Trent Session IV, Trullo Canon 2, Dei Verbum §9–10, Confession of Dositheos, Kebra Nagast.
  • No conspiracy framing. Canon formation described as slow, regional, and contested.

How I verified

Final state on this branch (no prerequisite PRs applied):

  • python _tools/build_sqlite.pycanon_traditions: 4 rows
  • python _tools/schema_validator.py136807 passed, 77 failed (same 77 pre-existing failures as master baseline, 0 new failures from canon_traditions work) ✅
  • python _tools/validate_sqlite.py94 passed, 0 failed, 2 warnings (pre-existing embeddings/prompts) ✅

Negative paths confirmed:

  • book_count mismatch → [FAIL] canon_tradition catholic book_count matches canon_list — book_count=999, listed=73
  • Non-snake_case book id → [FAIL] canon_tradition eastern_orthodox book 'Bad-Cased-Id' is snake_case

With #1541 (extrabiblical content, PR #1589) applied locally on top:

  • 15 canon_list references resolve through extrabiblical.json
  • 15 remain as informational logs (2_maccabees, baruch, 1_esdras, 3_maccabees, prayer_of_manasseh, 1/2/3_meqabyan, letter_of_jeremiah, tagsas) — all books outside the current 12-entry extrabiblical seed. Will stabilize if/when the extrabiblical seed expands in later epic work.

Merge order

Pairs with #1587 (canon_traditions schema, #1539) and #1589 (12 extrabiblical entries, #1541). Any merge order is safe — the shared additions between this and #1587 resolve identically.

Out of scope

  • Canon Comparison screen UI — HWGTB-P3-01 ([HWGTB-P3-01] App: CanonComparisonScreen #1550).
  • Additional extrabiblical entries for 2_maccabees, baruch, 1_esdras, etc. — not planned per the epic's scope (Phase 4 expands full_summary for the existing 12 entries only). Unresolved ids log as informational rather than failing, matching the existing pattern for non-Protestant book refs.

Rollback

Revert this PR. canon_traditions table drops on next build_sqlite.py run (tables recreated from schema each build). No user.db migrations.


Generated by Claude Code

@github-actions

github-actionsBot commented Apr 23, 2026

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation136885 passed, 77 failed
Build DB
DB Integrity94 passed, 0 failed

Content Pipeline — Quality & Accuracy Report

All content checks passed

Scope: 0 chapter(s) across 0 book(s)


Generated by ci_content_check.py

@github-actions

github-actionsBot commented Apr 23, 2026

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 3474❌ 03474
Suites✅ 469❌ 0469

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 84.4s

Seeds content/meta/canon_traditions.json with the four traditions that
feed the Canon Comparison screen:
protestant 66 books
catholic 73 books
eastern_orthodox 76 books
ethiopian_tewahedo 81 books
Every entry ships with book_count, full canon_list (organized by OT/NT
sections), 4 distinctives, and 7–8 chronologically ordered
formation_events covering the major councils, letters, and decisions
that shaped each tradition (Jamnia, Athanasius' 39th Festal Letter,
Hippo/Carthage, Jerome's Prologus Galeatus, Trent, Trullo, Jerusalem
1672, the Haile Selassie Amharic Bible, etc.).
Per the issue's dual-table note, canon_list[].books[] ids may reference
either books.json (66-book Protestant canon) or extrabiblical.json
(deuterocanon, pseudepigrapha, DSS). The schema_validator and
validate_sqlite checks are extended to check both tables; ids resolving
in neither are logged as informational (expected while the
extrabiblical table is seeded incrementally across the epic) but
malformed snake_case ids always fail.
The canon_traditions table infrastructure (CREATE TABLE, loader,
populate registration) authored in #1539 is included here — when #1539
merges first, the overlap is redundant; when this merges first, #1539
becomes a no-op for the shared additions.
Editorial commitments per epic guardrails:
- Descriptive, not prescriptive. "The Ethiopian Tewahedo Church
includes 1 Enoch in its canon" is stated as fact; no tradition is
endorsed or rejected.
- Factual tone on contested questions (Jamnia council, Trent's dogmatic
binding, Meqabyan ≠ Greek Maccabees, 1 Enoch preservation history).
- Named primary sources (Athanasius Ep. 39, Westminster 1.3, Vatican
II Dei Verbum, Confession of Dositheos, Kebra Nagast).
How verified
Full pipeline on this branch:
- python _tools/build_sqlite.py — canon_traditions: 4 rows (OK)
- python _tools/schema_validator.py — 136807 passed, 77 failed (same
77 pre-existing failures as master baseline, 0 new failures from
canon_traditions work)
- python _tools/validate_sqlite.py — 94 passed, 0 failed, 2 warnings
(pre-existing embeddings/prompts warnings)
Negative paths confirmed: book_count mismatch, non-snake_case book id,
and malformed ids all trigger [FAIL] in both validators.
With #1541 (extrabiblical content) applied locally on top:
- 15 canon_list references resolve through extrabiblical.json
- 15 remain as unresolved informational logs (2_maccabees, baruch,
1_esdras, 3_maccabees, prayer_of_manasseh, 1/2/3_meqabyan,
letter_of_jeremiah, tagsas — all represent books outside the
current 12-entry extrabiblical seed)
Closes#1542
@CraigBuckmaster
CraigBuckmasterforce-pushed the claude/epic-1536-batch-d-ToKMu branch from 8b94d30 to da1f723CompareApril 23, 2026 19:21
@CraigBuckmaster

Copy link
Copy Markdown
OwnerAuthor

Superseded by the replacement PR above, which is rebuilt cleanly on top of #1586 (already merged) so canon_traditions coexists with extrabiblical instead of conflicting. Closing here.

CraigBuckmaster pushed a commit that referenced this pull request Apr 23, 2026
Replaces PR #1590 which was built from a pre-#1586 base and conflicted
with the extrabiblical table/validators. This branch is rebuilt cleanly
on top of current master (with #1586 landed) so canon_traditions sits
alongside extrabiblical rather than replacing it.
Adds:
- CREATE TABLE canon_traditions in build_sqlite_schema.py
- populate_canon_traditions in build_sqlite_loaders.py
- canon_traditions invocation in build_sqlite.py
- Canon Traditions validation block in schema_validator.py (with dual-
table book-ID resolution against books.json + extrabiblical.json,
logging unresolved refs informationally)
- canon_traditions integrity check in validate_sqlite.py
- content/meta/canon_traditions.json seeded with 4 traditions:
protestant (66), catholic (73), eastern_orthodox (81),
ethiopian_tewahedo (81 broader canon)
All five pipeline stages (schema_validator → build_sqlite → validate_sqlite)
run green. 32 unresolved book refs are expected and log informationally
per #1542 — they resolve as the extrabiblical table is populated
incrementally by #1589 and follow-ups.
CraigBuckmaster added a commit that referenced this pull request Apr 23, 2026
Replaces PR #1590 which was built from a pre-#1586 base and conflicted
with the extrabiblical table/validators. This branch is rebuilt cleanly
on top of current master (with #1586 landed) so canon_traditions sits
alongside extrabiblical rather than replacing it.
Adds:
- CREATE TABLE canon_traditions in build_sqlite_schema.py
- populate_canon_traditions in build_sqlite_loaders.py
- canon_traditions invocation in build_sqlite.py
- Canon Traditions validation block in schema_validator.py (with dual-
table book-ID resolution against books.json + extrabiblical.json,
logging unresolved refs informationally)
- canon_traditions integrity check in validate_sqlite.py
- content/meta/canon_traditions.json seeded with 4 traditions:
protestant (66), catholic (73), eastern_orthodox (81),
ethiopian_tewahedo (81 broader canon)
All five pipeline stages (schema_validator → build_sqlite → validate_sqlite)
run green. 32 unresolved book refs are expected and log informationally
per #1542 — they resolve as the extrabiblical table is populated
incrementally by #1589 and follow-ups.
Co-authored-by: Claude (for Craig) <claude@anthropic.com>
@CraigBuckmaster
CraigBuckmaster deleted the claude/epic-1536-batch-d-ToKMu branch April 23, 2026 20:35
Sign up for freeto 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.

[HWGTB-P1-05] Content: 4 canon_traditions entries

2 participants

@CraigBuckmaster@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

content: 4 canon_traditions entries (#1542) - #1590

Closed
CraigBuckmaster wants to merge 1 commit into
masterfrom
claude/epic-1536-batch-d-ToKMu
Closed

content: 4 canon_traditions entries (#1542)#1590
CraigBuckmaster wants to merge 1 commit into
masterfrom
claude/epic-1536-batch-d-ToKMu

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

What this does

Seeds content/meta/canon_traditions.json with the four traditions that feed the Canon Comparison screen (HWGTB-P3-01 / #1550):

idlabelbook_countdistinctivesformation_events
protestantProtestant6648
catholicRoman Catholic7348
eastern_orthodoxEastern Orthodox7647
ethiopian_tewahedoEthiopian Orthodox Tewahedo8148

Each entry ships with a full canon_list organized into OT/NT sections, a factual 1–2 paragraph short_description, 4 distinctives, and 7–8 chronologically ordered formation_events (Jamnia, Athanasius' 39th Festal Letter, Hippo/Carthage, Jerome's Prologus Galeatus, Luther's 1534 Bible, Trent Session IV, Trullo Canon 2, Westminster 1.3, Confession of Dositheos, Kebra Nagast, Haile Selassie Amharic Bible, etc.).

Closes

Closes#1542

Dual-table book-ID resolution (per issue note)

canon_list[].books[] ids may reference either books.json (66-book Protestant canon) or extrabiblical.json (deuterocanon, pseudepigrapha, DSS). Extended both validators:

  • schema_validator.py — new CANON TRADITIONS section checks every book id against both tables, fails on malformed snake_case, and logs unresolved ids (expected while extrabiblical seed is partial) as informational.
  • validate_sqlite.py — DB-side parallel: book_count vs canon_list_json consistency + dual-table lookup + informational log.

Table infrastructure

The canon_traditions table (CREATE, loader, populate registration) authored in #1539 is also included here so this branch builds end-to-end without prerequisites. When #1587 merges first the overlap is a redundant no-op; when this merges first #1587 becomes a trivial redundant addition.

Editorial commitments

  • Descriptive, not prescriptive. "The Ethiopian Tewahedo Church includes 1 Enoch in its canon" stated as fact; no tradition endorsed or rejected.
  • Factual tone on contested questions. Jamnia council thesis flagged as abandoned by modern scholarship (Lewis, Leiman); Trent's dogmatic binding noted as response to Luther; Meqabyan distinguished from Greek 1–4 Maccabees; 1 Enoch's Ethiopian preservation history named (Bruce 1773, Qumran 1947).
  • Named primary sources. Athanasius Ep. 39, Westminster 1.3, Trent Session IV, Trullo Canon 2, Dei Verbum §9–10, Confession of Dositheos, Kebra Nagast.
  • No conspiracy framing. Canon formation described as slow, regional, and contested.

How I verified

Final state on this branch (no prerequisite PRs applied):

  • python _tools/build_sqlite.pycanon_traditions: 4 rows
  • python _tools/schema_validator.py136807 passed, 77 failed (same 77 pre-existing failures as master baseline, 0 new failures from canon_traditions work) ✅
  • python _tools/validate_sqlite.py94 passed, 0 failed, 2 warnings (pre-existing embeddings/prompts) ✅

Negative paths confirmed:

  • book_count mismatch → [FAIL] canon_tradition catholic book_count matches canon_list — book_count=999, listed=73
  • Non-snake_case book id → [FAIL] canon_tradition eastern_orthodox book 'Bad-Cased-Id' is snake_case

With #1541 (extrabiblical content, PR #1589) applied locally on top:

  • 15 canon_list references resolve through extrabiblical.json
  • 15 remain as informational logs (2_maccabees, baruch, 1_esdras, 3_maccabees, prayer_of_manasseh, 1/2/3_meqabyan, letter_of_jeremiah, tagsas) — all books outside the current 12-entry extrabiblical seed. Will stabilize if/when the extrabiblical seed expands in later epic work.

Merge order

Pairs with #1587 (canon_traditions schema, #1539) and #1589 (12 extrabiblical entries, #1541). Any merge order is safe — the shared additions between this and #1587 resolve identically.

Out of scope

  • Canon Comparison screen UI — HWGTB-P3-01 ([HWGTB-P3-01] App: CanonComparisonScreen #1550).
  • Additional extrabiblical entries for 2_maccabees, baruch, 1_esdras, etc. — not planned per the epic's scope (Phase 4 expands full_summary for the existing 12 entries only). Unresolved ids log as informational rather than failing, matching the existing pattern for non-Protestant book refs.

Rollback

Revert this PR. canon_traditions table drops on next build_sqlite.py run (tables recreated from schema each build). No user.db migrations.


Generated by Claude Code

@github-actions

github-actionsBot commented Apr 23, 2026

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation136885 passed, 77 failed
Build DB
DB Integrity94 passed, 0 failed

Content Pipeline — Quality & Accuracy Report

All content checks passed

Scope: 0 chapter(s) across 0 book(s)


Generated by ci_content_check.py

@github-actions

github-actionsBot commented Apr 23, 2026

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 3474❌ 03474
Suites✅ 469❌ 0469

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 84.4s

Seeds content/meta/canon_traditions.json with the four traditions that
feed the Canon Comparison screen:
protestant 66 books
catholic 73 books
eastern_orthodox 76 books
ethiopian_tewahedo 81 books
Every entry ships with book_count, full canon_list (organized by OT/NT
sections), 4 distinctives, and 7–8 chronologically ordered
formation_events covering the major councils, letters, and decisions
that shaped each tradition (Jamnia, Athanasius' 39th Festal Letter,
Hippo/Carthage, Jerome's Prologus Galeatus, Trent, Trullo, Jerusalem
1672, the Haile Selassie Amharic Bible, etc.).
Per the issue's dual-table note, canon_list[].books[] ids may reference
either books.json (66-book Protestant canon) or extrabiblical.json
(deuterocanon, pseudepigrapha, DSS). The schema_validator and
validate_sqlite checks are extended to check both tables; ids resolving
in neither are logged as informational (expected while the
extrabiblical table is seeded incrementally across the epic) but
malformed snake_case ids always fail.
The canon_traditions table infrastructure (CREATE TABLE, loader,
populate registration) authored in #1539 is included here — when #1539
merges first, the overlap is redundant; when this merges first, #1539
becomes a no-op for the shared additions.
Editorial commitments per epic guardrails:
- Descriptive, not prescriptive. "The Ethiopian Tewahedo Church
includes 1 Enoch in its canon" is stated as fact; no tradition is
endorsed or rejected.
- Factual tone on contested questions (Jamnia council, Trent's dogmatic
binding, Meqabyan ≠ Greek Maccabees, 1 Enoch preservation history).
- Named primary sources (Athanasius Ep. 39, Westminster 1.3, Vatican
II Dei Verbum, Confession of Dositheos, Kebra Nagast).
How verified
Full pipeline on this branch:
- python _tools/build_sqlite.py — canon_traditions: 4 rows (OK)
- python _tools/schema_validator.py — 136807 passed, 77 failed (same
77 pre-existing failures as master baseline, 0 new failures from
canon_traditions work)
- python _tools/validate_sqlite.py — 94 passed, 0 failed, 2 warnings
(pre-existing embeddings/prompts warnings)
Negative paths confirmed: book_count mismatch, non-snake_case book id,
and malformed ids all trigger [FAIL] in both validators.
With #1541 (extrabiblical content) applied locally on top:
- 15 canon_list references resolve through extrabiblical.json
- 15 remain as unresolved informational logs (2_maccabees, baruch,
1_esdras, 3_maccabees, prayer_of_manasseh, 1/2/3_meqabyan,
letter_of_jeremiah, tagsas — all represent books outside the
current 12-entry extrabiblical seed)
Closes#1542
@CraigBuckmaster
CraigBuckmasterforce-pushed the claude/epic-1536-batch-d-ToKMu branch from 8b94d30 to da1f723CompareApril 23, 2026 19:21
@CraigBuckmaster

Copy link
Copy Markdown
OwnerAuthor

Superseded by the replacement PR above, which is rebuilt cleanly on top of #1586 (already merged) so canon_traditions coexists with extrabiblical instead of conflicting. Closing here.

CraigBuckmaster pushed a commit that referenced this pull request Apr 23, 2026
Replaces PR #1590 which was built from a pre-#1586 base and conflicted
with the extrabiblical table/validators. This branch is rebuilt cleanly
on top of current master (with #1586 landed) so canon_traditions sits
alongside extrabiblical rather than replacing it.
Adds:
- CREATE TABLE canon_traditions in build_sqlite_schema.py
- populate_canon_traditions in build_sqlite_loaders.py
- canon_traditions invocation in build_sqlite.py
- Canon Traditions validation block in schema_validator.py (with dual-
table book-ID resolution against books.json + extrabiblical.json,
logging unresolved refs informationally)
- canon_traditions integrity check in validate_sqlite.py
- content/meta/canon_traditions.json seeded with 4 traditions:
protestant (66), catholic (73), eastern_orthodox (81),
ethiopian_tewahedo (81 broader canon)
All five pipeline stages (schema_validator → build_sqlite → validate_sqlite)
run green. 32 unresolved book refs are expected and log informationally
per #1542 — they resolve as the extrabiblical table is populated
incrementally by #1589 and follow-ups.
CraigBuckmaster added a commit that referenced this pull request Apr 23, 2026
Replaces PR #1590 which was built from a pre-#1586 base and conflicted
with the extrabiblical table/validators. This branch is rebuilt cleanly
on top of current master (with #1586 landed) so canon_traditions sits
alongside extrabiblical rather than replacing it.
Adds:
- CREATE TABLE canon_traditions in build_sqlite_schema.py
- populate_canon_traditions in build_sqlite_loaders.py
- canon_traditions invocation in build_sqlite.py
- Canon Traditions validation block in schema_validator.py (with dual-
table book-ID resolution against books.json + extrabiblical.json,
logging unresolved refs informationally)
- canon_traditions integrity check in validate_sqlite.py
- content/meta/canon_traditions.json seeded with 4 traditions:
protestant (66), catholic (73), eastern_orthodox (81),
ethiopian_tewahedo (81 broader canon)
All five pipeline stages (schema_validator → build_sqlite → validate_sqlite)
run green. 32 unresolved book refs are expected and log informationally
per #1542 — they resolve as the extrabiblical table is populated
incrementally by #1589 and follow-ups.
Co-authored-by: Claude (for Craig) <claude@anthropic.com>
@CraigBuckmaster
CraigBuckmaster deleted the claude/epic-1536-batch-d-ToKMu branch April 23, 2026 20:35
Sign up for freeto 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.

[HWGTB-P1-05] Content: 4 canon_traditions entries

2 participants

@CraigBuckmaster@claude