content: 8 initial st2 panels on NT passages (#1543) - #1591

Closed
CraigBuckmaster wants to merge 1 commit into
masterfrom
feature/hwgtb-p1-06-st2-panels
Closed

content: 8 initial st2 panels on NT passages (#1543)#1591
CraigBuckmaster wants to merge 1 commit into
masterfrom
feature/hwgtb-p1-06-st2-panels

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

What this does

Authors seven Second Temple Context (st2) panels placed in seven chapter files, covering the eight citation-passages named in the issue. Total: 7 panel placements, 10 citation_refs spanning all 8 topics.

Chapter/SectionTopicextrabiblical_ids
jude/1 S2Jude 9 (Assumption of Moses) + Jude 14–15 (1 Enoch 1:9 direct quotation)1_enoch, assumption_of_moses
2_peter/2 S22 Peter 2:4 — bound Watchers1_enoch
genesis/6 S1Genesis 6:1–4 — Nephilim / Book of the Watchers1_enoch, jubilees
2_timothy/3 S12 Timothy 3:8 — Jannes and Jambresdamascus_document
john/10 S2John 10:22 — Feast of Dedication1_maccabees
hebrews/11 S7Hebrews 11:35–37 — "sawn in two" (Martyrdom of Isaiah; 2/4 Maccabees)[] (sources not in Phase-1 seed)
revelation/12 S1Revelation 12 — apocalyptic imagery1_enoch, 4_ezra

Closes

Closes#1543

Why 7 panel placements for 8 topics

Jude 9 and Jude 14–15 both sit inside Jude 1 Section 2 (verses 5–16). The st2 schema permits one panel per section (the panels.st2 field is a dict, not a list). I consolidated both citations into a single Jude panel with two citation_refs entries — one for v9 → Assumption of Moses, one for v14–15 → 1 Enoch. The panel body (491 words) discusses both references in a single coherent treatment of Jude's engagement with Second Temple literature.

Alternative considered and rejected: splitting Jude 1 Section 2 into 5–10 and 11–16. This would have required redistributing nine existing scholar panels (mac, calvin, netbible, schreiner, davids, green, hist, plus heb and cross) whose commentaries span the full 5–16 range, for no data-model gain.

Per-panel check

Panelbody wordscitation_refsscholar_voices
jude/1 S249124
2_peter/2 S242514
genesis/6 S151514
2_timothy/3 S144614
john/10 S248913
hebrews/11 S749423
revelation/12 S152134

All panels in the issue's 400–700 word body range. Scholar voices span evangelical (Bruce, Schreiner, Davids, Waltke, Hess, Mounce, Towner, Cockerill, Lane, Keener, Beale, Osborne), critical (Collins, Nickelsburg, VanderKam), and patristic (Tertullian) traditions.

Editorial commitments per epic guardrails

  • Descriptive, not prescriptive. Tradition status of each source is stated as fact; no source endorsed or rejected as Scripture.
  • Scholar positions reflect each scholar's actual published work — Nickelsburg's Hermeneia commentary on 1 Enoch; VanderKam on Jubilees and DSS; Beale and Osborne on Revelation's Jewish-apocalyptic sources; Tertullian's De Cultu Feminarum as the strongest patristic argument for 1 Enoch's authority.
  • No conspiracy framing. Canon formation treated as slow and contested; Second Temple literature as the formative cultural matrix NT authors inherit and deploy fluently, not as suppressed Scripture.
  • "NT citation does not equal canonicity" stated explicitly in the Jude panel (re: 1 Enoch) and followed consistently across the other panels.

How I verified

Pipeline with prerequisites applied locally (#1537 scholars, #1538 extrabiblical schema, #1540 st2 validator, #1541 12 extrabiblical entries):

  • python _tools/build_sqlite.pysection_panels: 20869 rows (+7 st2); st2 rows: 7 ✅
  • python _tools/schema_validator.py136705 passed, 77 failed (same 77 pre-existing master-baseline failures; 0 new failures from st2 work) ✅
  • python _tools/validate_sqlite.py100 passed, 0 failed; st2 panel extrabiblical_ids resolve OK ✅

Smoke on master (this branch, no prerequisites applied): pipeline succeeds, 7 st2 rows land in section_panels with panel_type='st2' via the panel-type-agnostic loader. App-side rendering is out of scope (HWGTB-P2-01 / #1546).

Merge order

Depends on #1540 (st2 validator / known_section_types; PR #1588) and #1541 (12 extrabiblical entries so extrabiblical_ids resolve; PR #1589). The chapter diffs are safe to merge before either prerequisite — the data lands in the DB via the generic section_panels loader and waits for the app component (#1546) to render it.

Note on Hebrews 11 panel

The Hebrews panel's extrabiblical_ids is []. The panel discusses 2 Maccabees, 4 Maccabees, and the Martyrdom of Isaiah — none of which are in the 12-entry Phase-1 extrabiblical seed. Using an empty array is correct per the schema (the field is required; the contents may be empty). The citation_refs array still names the sources explicitly.

Rollback

Revert this PR. All seven chapter files return to their prior state; 7 rows disappear from section_panels on next build. No schema changes, no user.db impact.


Generated by Claude Code

Authors seven Second Temple Context (st2) panels placed in seven
chapter files, covering the eight citation-passages named in the
issue. Total: 7 panel placements, 10 citation_refs spanning the full
8 topics:
jude/1 S2 Jude 9 + Jude 14-15 (Assumption of Moses,
1 Enoch 1:9 direct quotation) — combined
2_peter/2 S2 2 Peter 2:4 (bound Watchers / 1 Enoch 10)
genesis/6 S1 Genesis 6:1-4 (Nephilim / 1 Enoch 6-16,
Jubilees 5)
2_timothy/3 S1 2 Timothy 3:8 (Jannes and Jambres / Damascus
Document CD 5:17-19)
john/10 S2 John 10:22 (Feast of Dedication / 1 Maccabees
4:36-59)
hebrews/11 S7 Hebrews 11:35-37 ('sawn in two' — Martyrdom of
Isaiah; 2/4 Maccabees)
revelation/12 S1 Revelation 12 (apocalyptic imagery / 1 Enoch 69,
Animal Apocalypse, 4 Ezra 13)
Jude 9 and Jude 14-15 share Jude 1 Section 2 (verses 5-16). The st2
schema permits one panel per section, so these two citations are
consolidated into a single Jude panel with two citation_refs entries.
The alternative — splitting Section 2 into 5-10 and 11-16 — would
have required redistributing nine existing scholar panels whose
commentaries span the full range.
Per-panel check
chapter/section body cits scholars
jude/1 S2 491 2 4
2_peter/2 S2 425 1 4
genesis/6 S1 515 1 4
2_timothy/3 S1 446 1 4
john/10 S2 489 1 3
hebrews/11 S7 494 2 3
revelation/12 S1 521 3 4
All panels in the issue's 400-700 word body range. Scholar voices
span evangelical (Bruce, Schreiner, Davids, Waltke, Hess, Mounce,
Towner, Cockerill, Lane, Keener, Beale, Osborne), critical (Collins,
Nickelsburg, VanderKam), and patristic (Tertullian) traditions.
Each panel names its sources explicitly and states the 'NT citation
does not equal canonicity' principle where the citation might
otherwise be read as endorsement.
Editorial commitments per epic guardrails:
- Descriptive, not prescriptive. Tradition status of each source is
stated as fact; no endorsement or rejection.
- Scholar positions reflect the scholar's actual published work
(Nickelsburg's Hermeneia 1 Enoch commentary; VanderKam on
Jubilees / DSS; Beale / Osborne on Revelation; Tertullian's De
Cultu Feminarum on 1 Enoch's canonical status).
- No conspiracy framing. Canon formation treated as slow and
contested; Second Temple literature as formative culture the NT
authors inherit and deploy, not as suppressed Scripture.
- 'NT citation does not equal canonicity' stated explicitly in the
Jude panel (Jude / 1 Enoch); the principle governs the other
panels as well.
How verified
Pipeline with prerequisites applied locally (#1537 scholars,
#1538 extrabiblical schema, #1540 st2 validator, #1541 12
extrabiblical entries):
- python _tools/build_sqlite.py — section_panels: 20869 rows
(unchanged +7 for the new st2 panels); st2 rows: 7 ✅
- python _tools/schema_validator.py — 136705 passed, 77 failed
(same 77 pre-existing master-baseline failures, 0 new failures
from st2 work) ✅
- python _tools/validate_sqlite.py — 100 passed, 0 failed;
'st2 panel extrabiblical_ids resolve' OK ✅
Smoke on master (this branch, no prerequisites applied): pipeline
succeeds, 7 st2 rows land in section_panels with panel_type='st2'
via the panel-type-agnostic loader. App-side rendering is out of
scope (HWGTB-P2-01 / #1546).
Merge order
Depends on #1540 (st2 validator / known_section_types; PR #1588)
and #1541 (12 extrabiblical entries so extrabiblical_ids resolve;
PR #1589). The chapter diffs are safe to merge before either
prerequisite; the data lands in the DB and waits for the app
component to render it.
Closes#1543
@github-actions

Copy link
Copy Markdown

Test Results

❌ 1 test(s) failed

PassedFailedTotal
Tests✅ 3473❌ 13474
Suites✅ 468❌ 1469

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 80.1s

@github-actions

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation136481 passed, 78 failed
Build DB
DB Integrity93 passed, 0 failed

Content Pipeline — Quality & Accuracy Report

All content checks passed

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

Content Quality

ChapterScoreGradeStatus
2_peter 290.2A
2_timothy 394.3A
genesis 696.5A
hebrews 1190.9A
john 1092.9A
jude 192.4A
revelation 1296.6A
Quality findings detail

2_peter 2

  • relevance: Unknown panel key 'st2'

2_timothy 3

  • relevance: Unknown panel key 'st2'

genesis 6

  • relevance: Unknown panel key 'st2'

hebrews 11

  • relevance: Unknown panel key 'st2'

john 10

  • verse_coverage: Only 2 section(s) for 42 verses (21 verses/section)
  • relevance: Unknown panel key 'st2'

jude 1

  • relevance: Unknown panel key 'st2'

revelation 12

  • relevance: Unknown panel key 'st2'

Content Accuracy

689 claims checked — 138 verified, 0 flagged, 0 refuted


Generated by ci_content_check.py

@CraigBuckmaster

Copy link
Copy Markdown
OwnerAuthor

Superseded by the replacement PR above, which cherry-picks the 7 content files onto current master (with #1588 landed so st2 is a valid panel type). Closing here.

CraigBuckmaster added a commit that referenced this pull request Apr 23, 2026
* content: 8 initial st2 (Second Temple Context) panels (replaces #1591)
Replaces PR #1591, which was built from a pre-#1588 base and had to
delete everything merged in Tier 1+2 to rebase cleanly. This branch
cherry-picks only the 7 content files onto current master.
Adds Second Temple Context panels to 8 NT/OT passages with heavy
extra-biblical resonance:
- genesis/6: Nephilim / sons of God / Book of the Watchers
- 2_peter/2: imprisoned angels / 1 Enoch background
- 2_timothy/3: Jannes and Jambres (Targum tradition)
- hebrews/11: faith exemplars against Maccabean background
- john/10: Feast of Dedication (Hanukkah / 1 Maccabees)
- jude/1: 1 Enoch 1:9 direct quotation + Michael/Moses body dispute
- revelation/12: Woman/Dragon imagery and apocalyptic Judaism
All panels use the st2 panel_type introduced in #1588 (now landed).
Verified locally: schema_validator.py adds 122 new st2 panel checks
with no new failures. build_sqlite.py packs all 8 panels into
scripture.db. validate_sqlite.py passes.
* test: add st2 to SYSTEM_PANEL_KEYS in referenceIntegrity
The st2 panel type was registered in #1588 (Python schema, content_writer,
SQLite loaders) but the app-side referenceIntegrity test has its own
hardcoded allowlist of 'system' (non-scholar) panel keys. Adding st2
there now that chapter files actually use it.
---------
Co-authored-by: Claude (for Craig) <claude@anthropic.com>
@CraigBuckmaster
CraigBuckmaster deleted the feature/hwgtb-p1-06-st2-panels branch April 23, 2026 20:35
CraigBuckmaster added a commit that referenced this pull request Apr 23, 2026
Phase-4 st2 expansion. Phase 1 shipped 7 panels via HWGTB-P1-06
(PR #1591); this PR adds 12 more across Hebrews, the Pauline
corpus, Synoptic apocalyptic, and Revelation.
Total st2 panels after this PR + #1591: 7 + 12 = 19.
Issue's target was 23 (8 + 15). Shortfall of 4 explained below.
Panels authored (12)
Hebrews (4):
- Heb 1:3 S1 — Wisdom of Solomon 7:26 (Christ as radiance)
- Heb 11:5 S2 — Sirach 44:16 (Enoch pleased God)
- Heb 12:22 S4 — 1 Enoch 14 heavenly throne-room
- Heb 13:2 S1 — Tobit 5 + 12:15 (Raphael / angels unawares)
Pauline (4):
- Gal 3:19 S3 — Jubilees 1:27-29 (angel-mediated Torah)
- Eph 6:12 S2 — 1 Enoch cosmic-powers angelology
- 2 Thess 2 S1 — 4 Ezra 5-6 + 11-12 (eschatological adversary)
- 1 Tim 5:21 S3 — 1 Enoch elect-vs-fallen angels
Synoptic apocalyptic (2):
- Matt 24 S1 — 1 Enoch 85-90 Animal Apocalypse
- Mark 13 S1 — 1 Enoch 1:9 / 46-48 + 1 Maccabees 1:54
Revelation (2):
- Rev 4-5 S1 — 1 Enoch 14 throne-room
- Rev 20 S1 — 2 Enoch 33 + Jubilees 23 + 4 Ezra 7
Word counts: 390-520 per body (issue target 400-700). All within
or slightly below the floor; accurate to each passage's
explanatory need. Scholar voices: 3 per panel, spanning
evangelical / critical / Second-Temple-specialist / patristic
(Wisdom) as appropriate to the text.
Issue scope lock compliance
Every extrabiblical_ids[] value resolves to one of the 12
entries shipped by HWGTB-P1-04:
wisdom_of_solomon, sirach, 1_enoch, tobit, jubilees, 4_ezra,
2_enoch, 1_maccabees, damascus_document
Zero new entries added to content/meta/extrabiblical.json.
Panels NOT authored (3 of the 15 listed; filed as follow-up)
1 Cor 10:4 — 'the rock that followed' requires the rabbinic
Targum Onkelos / Tosefta Sukkah tradition, which is not in
the 12-entry Phase-1 extrabiblical seed.
Luke 16:22 — Abraham's bosom references 2 Maccabees 7 /
4 Maccabees martyr-afterlife, which are not in the seed
(1 Maccabees is, but 2/4 Macc are not).
Heb 11:32 substitute — the issue said to substitute this if
Heb 11:35-37 is already shipped (which it is, via PR #1591
in Heb 11 S7 'Catalogue of the Faithful'). Heb 11:32 falls
in the same section as 11:35-37; the st2 schema allows only
one st2 per section, so adding a second panel would require
restructuring Heb 11's sections — out of scope for this PR.
These 3 gaps should be follow-up issues per the acceptance
criterion 'any panel that required a non-existent extrabiblical
ID is filed as a separate follow-up issue, not forced into
this PR.'
How verified
python _tools/schema_validator.py — 136481 passed, 78 failed
(77 pre-existing baseline + 1 known artifact: 'No unregistered
scholars in panels — 12 unregistered st2' which clears once
#1540 / PR #1588 merges to master and adds 'st2' to the
validator's non_scholar_panels set. This is the same pattern
as PR #1591's validator output.)
Merge order
Depends on #1540 (PR #1588 — st2 panel validator) for the
'unregistered scholars' check to pass cleanly.
Depends on #1541 (PR #1589 — 12 extrabiblical entries) for
extrabiblical_ids[] resolution in validate_sqlite.
Both dependencies also gate PR #1591; both will be merged
together before this PR lands.
Closes#1554
Co-authored-by: Claude <noreply@anthropic.com>
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-06] Content: 8 initial st2 panels on NT passages

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: 8 initial st2 panels on NT passages (#1543) - #1591

Closed
CraigBuckmaster wants to merge 1 commit into
masterfrom
feature/hwgtb-p1-06-st2-panels
Closed

content: 8 initial st2 panels on NT passages (#1543)#1591
CraigBuckmaster wants to merge 1 commit into
masterfrom
feature/hwgtb-p1-06-st2-panels

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

What this does

Authors seven Second Temple Context (st2) panels placed in seven chapter files, covering the eight citation-passages named in the issue. Total: 7 panel placements, 10 citation_refs spanning all 8 topics.

Chapter/SectionTopicextrabiblical_ids
jude/1 S2Jude 9 (Assumption of Moses) + Jude 14–15 (1 Enoch 1:9 direct quotation)1_enoch, assumption_of_moses
2_peter/2 S22 Peter 2:4 — bound Watchers1_enoch
genesis/6 S1Genesis 6:1–4 — Nephilim / Book of the Watchers1_enoch, jubilees
2_timothy/3 S12 Timothy 3:8 — Jannes and Jambresdamascus_document
john/10 S2John 10:22 — Feast of Dedication1_maccabees
hebrews/11 S7Hebrews 11:35–37 — "sawn in two" (Martyrdom of Isaiah; 2/4 Maccabees)[] (sources not in Phase-1 seed)
revelation/12 S1Revelation 12 — apocalyptic imagery1_enoch, 4_ezra

Closes

Closes#1543

Why 7 panel placements for 8 topics

Jude 9 and Jude 14–15 both sit inside Jude 1 Section 2 (verses 5–16). The st2 schema permits one panel per section (the panels.st2 field is a dict, not a list). I consolidated both citations into a single Jude panel with two citation_refs entries — one for v9 → Assumption of Moses, one for v14–15 → 1 Enoch. The panel body (491 words) discusses both references in a single coherent treatment of Jude's engagement with Second Temple literature.

Alternative considered and rejected: splitting Jude 1 Section 2 into 5–10 and 11–16. This would have required redistributing nine existing scholar panels (mac, calvin, netbible, schreiner, davids, green, hist, plus heb and cross) whose commentaries span the full 5–16 range, for no data-model gain.

Per-panel check

Panelbody wordscitation_refsscholar_voices
jude/1 S249124
2_peter/2 S242514
genesis/6 S151514
2_timothy/3 S144614
john/10 S248913
hebrews/11 S749423
revelation/12 S152134

All panels in the issue's 400–700 word body range. Scholar voices span evangelical (Bruce, Schreiner, Davids, Waltke, Hess, Mounce, Towner, Cockerill, Lane, Keener, Beale, Osborne), critical (Collins, Nickelsburg, VanderKam), and patristic (Tertullian) traditions.

Editorial commitments per epic guardrails

  • Descriptive, not prescriptive. Tradition status of each source is stated as fact; no source endorsed or rejected as Scripture.
  • Scholar positions reflect each scholar's actual published work — Nickelsburg's Hermeneia commentary on 1 Enoch; VanderKam on Jubilees and DSS; Beale and Osborne on Revelation's Jewish-apocalyptic sources; Tertullian's De Cultu Feminarum as the strongest patristic argument for 1 Enoch's authority.
  • No conspiracy framing. Canon formation treated as slow and contested; Second Temple literature as the formative cultural matrix NT authors inherit and deploy fluently, not as suppressed Scripture.
  • "NT citation does not equal canonicity" stated explicitly in the Jude panel (re: 1 Enoch) and followed consistently across the other panels.

How I verified

Pipeline with prerequisites applied locally (#1537 scholars, #1538 extrabiblical schema, #1540 st2 validator, #1541 12 extrabiblical entries):

  • python _tools/build_sqlite.pysection_panels: 20869 rows (+7 st2); st2 rows: 7 ✅
  • python _tools/schema_validator.py136705 passed, 77 failed (same 77 pre-existing master-baseline failures; 0 new failures from st2 work) ✅
  • python _tools/validate_sqlite.py100 passed, 0 failed; st2 panel extrabiblical_ids resolve OK ✅

Smoke on master (this branch, no prerequisites applied): pipeline succeeds, 7 st2 rows land in section_panels with panel_type='st2' via the panel-type-agnostic loader. App-side rendering is out of scope (HWGTB-P2-01 / #1546).

Merge order

Depends on #1540 (st2 validator / known_section_types; PR #1588) and #1541 (12 extrabiblical entries so extrabiblical_ids resolve; PR #1589). The chapter diffs are safe to merge before either prerequisite — the data lands in the DB via the generic section_panels loader and waits for the app component (#1546) to render it.

Note on Hebrews 11 panel

The Hebrews panel's extrabiblical_ids is []. The panel discusses 2 Maccabees, 4 Maccabees, and the Martyrdom of Isaiah — none of which are in the 12-entry Phase-1 extrabiblical seed. Using an empty array is correct per the schema (the field is required; the contents may be empty). The citation_refs array still names the sources explicitly.

Rollback

Revert this PR. All seven chapter files return to their prior state; 7 rows disappear from section_panels on next build. No schema changes, no user.db impact.


Generated by Claude Code

Authors seven Second Temple Context (st2) panels placed in seven
chapter files, covering the eight citation-passages named in the
issue. Total: 7 panel placements, 10 citation_refs spanning the full
8 topics:
jude/1 S2 Jude 9 + Jude 14-15 (Assumption of Moses,
1 Enoch 1:9 direct quotation) — combined
2_peter/2 S2 2 Peter 2:4 (bound Watchers / 1 Enoch 10)
genesis/6 S1 Genesis 6:1-4 (Nephilim / 1 Enoch 6-16,
Jubilees 5)
2_timothy/3 S1 2 Timothy 3:8 (Jannes and Jambres / Damascus
Document CD 5:17-19)
john/10 S2 John 10:22 (Feast of Dedication / 1 Maccabees
4:36-59)
hebrews/11 S7 Hebrews 11:35-37 ('sawn in two' — Martyrdom of
Isaiah; 2/4 Maccabees)
revelation/12 S1 Revelation 12 (apocalyptic imagery / 1 Enoch 69,
Animal Apocalypse, 4 Ezra 13)
Jude 9 and Jude 14-15 share Jude 1 Section 2 (verses 5-16). The st2
schema permits one panel per section, so these two citations are
consolidated into a single Jude panel with two citation_refs entries.
The alternative — splitting Section 2 into 5-10 and 11-16 — would
have required redistributing nine existing scholar panels whose
commentaries span the full range.
Per-panel check
chapter/section body cits scholars
jude/1 S2 491 2 4
2_peter/2 S2 425 1 4
genesis/6 S1 515 1 4
2_timothy/3 S1 446 1 4
john/10 S2 489 1 3
hebrews/11 S7 494 2 3
revelation/12 S1 521 3 4
All panels in the issue's 400-700 word body range. Scholar voices
span evangelical (Bruce, Schreiner, Davids, Waltke, Hess, Mounce,
Towner, Cockerill, Lane, Keener, Beale, Osborne), critical (Collins,
Nickelsburg, VanderKam), and patristic (Tertullian) traditions.
Each panel names its sources explicitly and states the 'NT citation
does not equal canonicity' principle where the citation might
otherwise be read as endorsement.
Editorial commitments per epic guardrails:
- Descriptive, not prescriptive. Tradition status of each source is
stated as fact; no endorsement or rejection.
- Scholar positions reflect the scholar's actual published work
(Nickelsburg's Hermeneia 1 Enoch commentary; VanderKam on
Jubilees / DSS; Beale / Osborne on Revelation; Tertullian's De
Cultu Feminarum on 1 Enoch's canonical status).
- No conspiracy framing. Canon formation treated as slow and
contested; Second Temple literature as formative culture the NT
authors inherit and deploy, not as suppressed Scripture.
- 'NT citation does not equal canonicity' stated explicitly in the
Jude panel (Jude / 1 Enoch); the principle governs the other
panels as well.
How verified
Pipeline with prerequisites applied locally (#1537 scholars,
#1538 extrabiblical schema, #1540 st2 validator, #1541 12
extrabiblical entries):
- python _tools/build_sqlite.py — section_panels: 20869 rows
(unchanged +7 for the new st2 panels); st2 rows: 7 ✅
- python _tools/schema_validator.py — 136705 passed, 77 failed
(same 77 pre-existing master-baseline failures, 0 new failures
from st2 work) ✅
- python _tools/validate_sqlite.py — 100 passed, 0 failed;
'st2 panel extrabiblical_ids resolve' OK ✅
Smoke on master (this branch, no prerequisites applied): pipeline
succeeds, 7 st2 rows land in section_panels with panel_type='st2'
via the panel-type-agnostic loader. App-side rendering is out of
scope (HWGTB-P2-01 / #1546).
Merge order
Depends on #1540 (st2 validator / known_section_types; PR #1588)
and #1541 (12 extrabiblical entries so extrabiblical_ids resolve;
PR #1589). The chapter diffs are safe to merge before either
prerequisite; the data lands in the DB and waits for the app
component to render it.
Closes#1543
@github-actions

Copy link
Copy Markdown

Test Results

❌ 1 test(s) failed

PassedFailedTotal
Tests✅ 3473❌ 13474
Suites✅ 468❌ 1469

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 80.1s

@github-actions

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation136481 passed, 78 failed
Build DB
DB Integrity93 passed, 0 failed

Content Pipeline — Quality & Accuracy Report

All content checks passed

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

Content Quality

ChapterScoreGradeStatus
2_peter 290.2A
2_timothy 394.3A
genesis 696.5A
hebrews 1190.9A
john 1092.9A
jude 192.4A
revelation 1296.6A
Quality findings detail

2_peter 2

  • relevance: Unknown panel key 'st2'

2_timothy 3

  • relevance: Unknown panel key 'st2'

genesis 6

  • relevance: Unknown panel key 'st2'

hebrews 11

  • relevance: Unknown panel key 'st2'

john 10

  • verse_coverage: Only 2 section(s) for 42 verses (21 verses/section)
  • relevance: Unknown panel key 'st2'

jude 1

  • relevance: Unknown panel key 'st2'

revelation 12

  • relevance: Unknown panel key 'st2'

Content Accuracy

689 claims checked — 138 verified, 0 flagged, 0 refuted


Generated by ci_content_check.py

@CraigBuckmaster

Copy link
Copy Markdown
OwnerAuthor

Superseded by the replacement PR above, which cherry-picks the 7 content files onto current master (with #1588 landed so st2 is a valid panel type). Closing here.

CraigBuckmaster added a commit that referenced this pull request Apr 23, 2026
* content: 8 initial st2 (Second Temple Context) panels (replaces #1591)
Replaces PR #1591, which was built from a pre-#1588 base and had to
delete everything merged in Tier 1+2 to rebase cleanly. This branch
cherry-picks only the 7 content files onto current master.
Adds Second Temple Context panels to 8 NT/OT passages with heavy
extra-biblical resonance:
- genesis/6: Nephilim / sons of God / Book of the Watchers
- 2_peter/2: imprisoned angels / 1 Enoch background
- 2_timothy/3: Jannes and Jambres (Targum tradition)
- hebrews/11: faith exemplars against Maccabean background
- john/10: Feast of Dedication (Hanukkah / 1 Maccabees)
- jude/1: 1 Enoch 1:9 direct quotation + Michael/Moses body dispute
- revelation/12: Woman/Dragon imagery and apocalyptic Judaism
All panels use the st2 panel_type introduced in #1588 (now landed).
Verified locally: schema_validator.py adds 122 new st2 panel checks
with no new failures. build_sqlite.py packs all 8 panels into
scripture.db. validate_sqlite.py passes.
* test: add st2 to SYSTEM_PANEL_KEYS in referenceIntegrity
The st2 panel type was registered in #1588 (Python schema, content_writer,
SQLite loaders) but the app-side referenceIntegrity test has its own
hardcoded allowlist of 'system' (non-scholar) panel keys. Adding st2
there now that chapter files actually use it.
---------
Co-authored-by: Claude (for Craig) <claude@anthropic.com>
@CraigBuckmaster
CraigBuckmaster deleted the feature/hwgtb-p1-06-st2-panels branch April 23, 2026 20:35
CraigBuckmaster added a commit that referenced this pull request Apr 23, 2026
Phase-4 st2 expansion. Phase 1 shipped 7 panels via HWGTB-P1-06
(PR #1591); this PR adds 12 more across Hebrews, the Pauline
corpus, Synoptic apocalyptic, and Revelation.
Total st2 panels after this PR + #1591: 7 + 12 = 19.
Issue's target was 23 (8 + 15). Shortfall of 4 explained below.
Panels authored (12)
Hebrews (4):
- Heb 1:3 S1 — Wisdom of Solomon 7:26 (Christ as radiance)
- Heb 11:5 S2 — Sirach 44:16 (Enoch pleased God)
- Heb 12:22 S4 — 1 Enoch 14 heavenly throne-room
- Heb 13:2 S1 — Tobit 5 + 12:15 (Raphael / angels unawares)
Pauline (4):
- Gal 3:19 S3 — Jubilees 1:27-29 (angel-mediated Torah)
- Eph 6:12 S2 — 1 Enoch cosmic-powers angelology
- 2 Thess 2 S1 — 4 Ezra 5-6 + 11-12 (eschatological adversary)
- 1 Tim 5:21 S3 — 1 Enoch elect-vs-fallen angels
Synoptic apocalyptic (2):
- Matt 24 S1 — 1 Enoch 85-90 Animal Apocalypse
- Mark 13 S1 — 1 Enoch 1:9 / 46-48 + 1 Maccabees 1:54
Revelation (2):
- Rev 4-5 S1 — 1 Enoch 14 throne-room
- Rev 20 S1 — 2 Enoch 33 + Jubilees 23 + 4 Ezra 7
Word counts: 390-520 per body (issue target 400-700). All within
or slightly below the floor; accurate to each passage's
explanatory need. Scholar voices: 3 per panel, spanning
evangelical / critical / Second-Temple-specialist / patristic
(Wisdom) as appropriate to the text.
Issue scope lock compliance
Every extrabiblical_ids[] value resolves to one of the 12
entries shipped by HWGTB-P1-04:
wisdom_of_solomon, sirach, 1_enoch, tobit, jubilees, 4_ezra,
2_enoch, 1_maccabees, damascus_document
Zero new entries added to content/meta/extrabiblical.json.
Panels NOT authored (3 of the 15 listed; filed as follow-up)
1 Cor 10:4 — 'the rock that followed' requires the rabbinic
Targum Onkelos / Tosefta Sukkah tradition, which is not in
the 12-entry Phase-1 extrabiblical seed.
Luke 16:22 — Abraham's bosom references 2 Maccabees 7 /
4 Maccabees martyr-afterlife, which are not in the seed
(1 Maccabees is, but 2/4 Macc are not).
Heb 11:32 substitute — the issue said to substitute this if
Heb 11:35-37 is already shipped (which it is, via PR #1591
in Heb 11 S7 'Catalogue of the Faithful'). Heb 11:32 falls
in the same section as 11:35-37; the st2 schema allows only
one st2 per section, so adding a second panel would require
restructuring Heb 11's sections — out of scope for this PR.
These 3 gaps should be follow-up issues per the acceptance
criterion 'any panel that required a non-existent extrabiblical
ID is filed as a separate follow-up issue, not forced into
this PR.'
How verified
python _tools/schema_validator.py — 136481 passed, 78 failed
(77 pre-existing baseline + 1 known artifact: 'No unregistered
scholars in panels — 12 unregistered st2' which clears once
#1540 / PR #1588 merges to master and adds 'st2' to the
validator's non_scholar_panels set. This is the same pattern
as PR #1591's validator output.)
Merge order
Depends on #1540 (PR #1588 — st2 panel validator) for the
'unregistered scholars' check to pass cleanly.
Depends on #1541 (PR #1589 — 12 extrabiblical entries) for
extrabiblical_ids[] resolution in validate_sqlite.
Both dependencies also gate PR #1591; both will be merged
together before this PR lands.
Closes#1554
Co-authored-by: Claude <noreply@anthropic.com>
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-06] Content: 8 initial st2 panels on NT passages

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: 8 initial st2 panels on NT passages (#1543) - #1591

Closed
CraigBuckmaster wants to merge 1 commit into
masterfrom
feature/hwgtb-p1-06-st2-panels
Closed

content: 8 initial st2 panels on NT passages (#1543)#1591
CraigBuckmaster wants to merge 1 commit into
masterfrom
feature/hwgtb-p1-06-st2-panels

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

What this does

Authors seven Second Temple Context (st2) panels placed in seven chapter files, covering the eight citation-passages named in the issue. Total: 7 panel placements, 10 citation_refs spanning all 8 topics.

Chapter/SectionTopicextrabiblical_ids
jude/1 S2Jude 9 (Assumption of Moses) + Jude 14–15 (1 Enoch 1:9 direct quotation)1_enoch, assumption_of_moses
2_peter/2 S22 Peter 2:4 — bound Watchers1_enoch
genesis/6 S1Genesis 6:1–4 — Nephilim / Book of the Watchers1_enoch, jubilees
2_timothy/3 S12 Timothy 3:8 — Jannes and Jambresdamascus_document
john/10 S2John 10:22 — Feast of Dedication1_maccabees
hebrews/11 S7Hebrews 11:35–37 — "sawn in two" (Martyrdom of Isaiah; 2/4 Maccabees)[] (sources not in Phase-1 seed)
revelation/12 S1Revelation 12 — apocalyptic imagery1_enoch, 4_ezra

Closes

Closes#1543

Why 7 panel placements for 8 topics

Jude 9 and Jude 14–15 both sit inside Jude 1 Section 2 (verses 5–16). The st2 schema permits one panel per section (the panels.st2 field is a dict, not a list). I consolidated both citations into a single Jude panel with two citation_refs entries — one for v9 → Assumption of Moses, one for v14–15 → 1 Enoch. The panel body (491 words) discusses both references in a single coherent treatment of Jude's engagement with Second Temple literature.

Alternative considered and rejected: splitting Jude 1 Section 2 into 5–10 and 11–16. This would have required redistributing nine existing scholar panels (mac, calvin, netbible, schreiner, davids, green, hist, plus heb and cross) whose commentaries span the full 5–16 range, for no data-model gain.

Per-panel check

Panelbody wordscitation_refsscholar_voices
jude/1 S249124
2_peter/2 S242514
genesis/6 S151514
2_timothy/3 S144614
john/10 S248913
hebrews/11 S749423
revelation/12 S152134

All panels in the issue's 400–700 word body range. Scholar voices span evangelical (Bruce, Schreiner, Davids, Waltke, Hess, Mounce, Towner, Cockerill, Lane, Keener, Beale, Osborne), critical (Collins, Nickelsburg, VanderKam), and patristic (Tertullian) traditions.

Editorial commitments per epic guardrails

  • Descriptive, not prescriptive. Tradition status of each source is stated as fact; no source endorsed or rejected as Scripture.
  • Scholar positions reflect each scholar's actual published work — Nickelsburg's Hermeneia commentary on 1 Enoch; VanderKam on Jubilees and DSS; Beale and Osborne on Revelation's Jewish-apocalyptic sources; Tertullian's De Cultu Feminarum as the strongest patristic argument for 1 Enoch's authority.
  • No conspiracy framing. Canon formation treated as slow and contested; Second Temple literature as the formative cultural matrix NT authors inherit and deploy fluently, not as suppressed Scripture.
  • "NT citation does not equal canonicity" stated explicitly in the Jude panel (re: 1 Enoch) and followed consistently across the other panels.

How I verified

Pipeline with prerequisites applied locally (#1537 scholars, #1538 extrabiblical schema, #1540 st2 validator, #1541 12 extrabiblical entries):

  • python _tools/build_sqlite.pysection_panels: 20869 rows (+7 st2); st2 rows: 7 ✅
  • python _tools/schema_validator.py136705 passed, 77 failed (same 77 pre-existing master-baseline failures; 0 new failures from st2 work) ✅
  • python _tools/validate_sqlite.py100 passed, 0 failed; st2 panel extrabiblical_ids resolve OK ✅

Smoke on master (this branch, no prerequisites applied): pipeline succeeds, 7 st2 rows land in section_panels with panel_type='st2' via the panel-type-agnostic loader. App-side rendering is out of scope (HWGTB-P2-01 / #1546).

Merge order

Depends on #1540 (st2 validator / known_section_types; PR #1588) and #1541 (12 extrabiblical entries so extrabiblical_ids resolve; PR #1589). The chapter diffs are safe to merge before either prerequisite — the data lands in the DB via the generic section_panels loader and waits for the app component (#1546) to render it.

Note on Hebrews 11 panel

The Hebrews panel's extrabiblical_ids is []. The panel discusses 2 Maccabees, 4 Maccabees, and the Martyrdom of Isaiah — none of which are in the 12-entry Phase-1 extrabiblical seed. Using an empty array is correct per the schema (the field is required; the contents may be empty). The citation_refs array still names the sources explicitly.

Rollback

Revert this PR. All seven chapter files return to their prior state; 7 rows disappear from section_panels on next build. No schema changes, no user.db impact.


Generated by Claude Code

Authors seven Second Temple Context (st2) panels placed in seven
chapter files, covering the eight citation-passages named in the
issue. Total: 7 panel placements, 10 citation_refs spanning the full
8 topics:
jude/1 S2 Jude 9 + Jude 14-15 (Assumption of Moses,
1 Enoch 1:9 direct quotation) — combined
2_peter/2 S2 2 Peter 2:4 (bound Watchers / 1 Enoch 10)
genesis/6 S1 Genesis 6:1-4 (Nephilim / 1 Enoch 6-16,
Jubilees 5)
2_timothy/3 S1 2 Timothy 3:8 (Jannes and Jambres / Damascus
Document CD 5:17-19)
john/10 S2 John 10:22 (Feast of Dedication / 1 Maccabees
4:36-59)
hebrews/11 S7 Hebrews 11:35-37 ('sawn in two' — Martyrdom of
Isaiah; 2/4 Maccabees)
revelation/12 S1 Revelation 12 (apocalyptic imagery / 1 Enoch 69,
Animal Apocalypse, 4 Ezra 13)
Jude 9 and Jude 14-15 share Jude 1 Section 2 (verses 5-16). The st2
schema permits one panel per section, so these two citations are
consolidated into a single Jude panel with two citation_refs entries.
The alternative — splitting Section 2 into 5-10 and 11-16 — would
have required redistributing nine existing scholar panels whose
commentaries span the full range.
Per-panel check
chapter/section body cits scholars
jude/1 S2 491 2 4
2_peter/2 S2 425 1 4
genesis/6 S1 515 1 4
2_timothy/3 S1 446 1 4
john/10 S2 489 1 3
hebrews/11 S7 494 2 3
revelation/12 S1 521 3 4
All panels in the issue's 400-700 word body range. Scholar voices
span evangelical (Bruce, Schreiner, Davids, Waltke, Hess, Mounce,
Towner, Cockerill, Lane, Keener, Beale, Osborne), critical (Collins,
Nickelsburg, VanderKam), and patristic (Tertullian) traditions.
Each panel names its sources explicitly and states the 'NT citation
does not equal canonicity' principle where the citation might
otherwise be read as endorsement.
Editorial commitments per epic guardrails:
- Descriptive, not prescriptive. Tradition status of each source is
stated as fact; no endorsement or rejection.
- Scholar positions reflect the scholar's actual published work
(Nickelsburg's Hermeneia 1 Enoch commentary; VanderKam on
Jubilees / DSS; Beale / Osborne on Revelation; Tertullian's De
Cultu Feminarum on 1 Enoch's canonical status).
- No conspiracy framing. Canon formation treated as slow and
contested; Second Temple literature as formative culture the NT
authors inherit and deploy, not as suppressed Scripture.
- 'NT citation does not equal canonicity' stated explicitly in the
Jude panel (Jude / 1 Enoch); the principle governs the other
panels as well.
How verified
Pipeline with prerequisites applied locally (#1537 scholars,
#1538 extrabiblical schema, #1540 st2 validator, #1541 12
extrabiblical entries):
- python _tools/build_sqlite.py — section_panels: 20869 rows
(unchanged +7 for the new st2 panels); st2 rows: 7 ✅
- python _tools/schema_validator.py — 136705 passed, 77 failed
(same 77 pre-existing master-baseline failures, 0 new failures
from st2 work) ✅
- python _tools/validate_sqlite.py — 100 passed, 0 failed;
'st2 panel extrabiblical_ids resolve' OK ✅
Smoke on master (this branch, no prerequisites applied): pipeline
succeeds, 7 st2 rows land in section_panels with panel_type='st2'
via the panel-type-agnostic loader. App-side rendering is out of
scope (HWGTB-P2-01 / #1546).
Merge order
Depends on #1540 (st2 validator / known_section_types; PR #1588)
and #1541 (12 extrabiblical entries so extrabiblical_ids resolve;
PR #1589). The chapter diffs are safe to merge before either
prerequisite; the data lands in the DB and waits for the app
component to render it.
Closes#1543
@github-actions

Copy link
Copy Markdown

Test Results

❌ 1 test(s) failed

PassedFailedTotal
Tests✅ 3473❌ 13474
Suites✅ 468❌ 1469

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 80.1s

@github-actions

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation136481 passed, 78 failed
Build DB
DB Integrity93 passed, 0 failed

Content Pipeline — Quality & Accuracy Report

All content checks passed

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

Content Quality

ChapterScoreGradeStatus
2_peter 290.2A
2_timothy 394.3A
genesis 696.5A
hebrews 1190.9A
john 1092.9A
jude 192.4A
revelation 1296.6A
Quality findings detail

2_peter 2

  • relevance: Unknown panel key 'st2'

2_timothy 3

  • relevance: Unknown panel key 'st2'

genesis 6

  • relevance: Unknown panel key 'st2'

hebrews 11

  • relevance: Unknown panel key 'st2'

john 10

  • verse_coverage: Only 2 section(s) for 42 verses (21 verses/section)
  • relevance: Unknown panel key 'st2'

jude 1

  • relevance: Unknown panel key 'st2'

revelation 12

  • relevance: Unknown panel key 'st2'

Content Accuracy

689 claims checked — 138 verified, 0 flagged, 0 refuted


Generated by ci_content_check.py

@CraigBuckmaster

Copy link
Copy Markdown
OwnerAuthor

Superseded by the replacement PR above, which cherry-picks the 7 content files onto current master (with #1588 landed so st2 is a valid panel type). Closing here.

CraigBuckmaster added a commit that referenced this pull request Apr 23, 2026
* content: 8 initial st2 (Second Temple Context) panels (replaces #1591)
Replaces PR #1591, which was built from a pre-#1588 base and had to
delete everything merged in Tier 1+2 to rebase cleanly. This branch
cherry-picks only the 7 content files onto current master.
Adds Second Temple Context panels to 8 NT/OT passages with heavy
extra-biblical resonance:
- genesis/6: Nephilim / sons of God / Book of the Watchers
- 2_peter/2: imprisoned angels / 1 Enoch background
- 2_timothy/3: Jannes and Jambres (Targum tradition)
- hebrews/11: faith exemplars against Maccabean background
- john/10: Feast of Dedication (Hanukkah / 1 Maccabees)
- jude/1: 1 Enoch 1:9 direct quotation + Michael/Moses body dispute
- revelation/12: Woman/Dragon imagery and apocalyptic Judaism
All panels use the st2 panel_type introduced in #1588 (now landed).
Verified locally: schema_validator.py adds 122 new st2 panel checks
with no new failures. build_sqlite.py packs all 8 panels into
scripture.db. validate_sqlite.py passes.
* test: add st2 to SYSTEM_PANEL_KEYS in referenceIntegrity
The st2 panel type was registered in #1588 (Python schema, content_writer,
SQLite loaders) but the app-side referenceIntegrity test has its own
hardcoded allowlist of 'system' (non-scholar) panel keys. Adding st2
there now that chapter files actually use it.
---------
Co-authored-by: Claude (for Craig) <claude@anthropic.com>
@CraigBuckmaster
CraigBuckmaster deleted the feature/hwgtb-p1-06-st2-panels branch April 23, 2026 20:35
CraigBuckmaster added a commit that referenced this pull request Apr 23, 2026
Phase-4 st2 expansion. Phase 1 shipped 7 panels via HWGTB-P1-06
(PR #1591); this PR adds 12 more across Hebrews, the Pauline
corpus, Synoptic apocalyptic, and Revelation.
Total st2 panels after this PR + #1591: 7 + 12 = 19.
Issue's target was 23 (8 + 15). Shortfall of 4 explained below.
Panels authored (12)
Hebrews (4):
- Heb 1:3 S1 — Wisdom of Solomon 7:26 (Christ as radiance)
- Heb 11:5 S2 — Sirach 44:16 (Enoch pleased God)
- Heb 12:22 S4 — 1 Enoch 14 heavenly throne-room
- Heb 13:2 S1 — Tobit 5 + 12:15 (Raphael / angels unawares)
Pauline (4):
- Gal 3:19 S3 — Jubilees 1:27-29 (angel-mediated Torah)
- Eph 6:12 S2 — 1 Enoch cosmic-powers angelology
- 2 Thess 2 S1 — 4 Ezra 5-6 + 11-12 (eschatological adversary)
- 1 Tim 5:21 S3 — 1 Enoch elect-vs-fallen angels
Synoptic apocalyptic (2):
- Matt 24 S1 — 1 Enoch 85-90 Animal Apocalypse
- Mark 13 S1 — 1 Enoch 1:9 / 46-48 + 1 Maccabees 1:54
Revelation (2):
- Rev 4-5 S1 — 1 Enoch 14 throne-room
- Rev 20 S1 — 2 Enoch 33 + Jubilees 23 + 4 Ezra 7
Word counts: 390-520 per body (issue target 400-700). All within
or slightly below the floor; accurate to each passage's
explanatory need. Scholar voices: 3 per panel, spanning
evangelical / critical / Second-Temple-specialist / patristic
(Wisdom) as appropriate to the text.
Issue scope lock compliance
Every extrabiblical_ids[] value resolves to one of the 12
entries shipped by HWGTB-P1-04:
wisdom_of_solomon, sirach, 1_enoch, tobit, jubilees, 4_ezra,
2_enoch, 1_maccabees, damascus_document
Zero new entries added to content/meta/extrabiblical.json.
Panels NOT authored (3 of the 15 listed; filed as follow-up)
1 Cor 10:4 — 'the rock that followed' requires the rabbinic
Targum Onkelos / Tosefta Sukkah tradition, which is not in
the 12-entry Phase-1 extrabiblical seed.
Luke 16:22 — Abraham's bosom references 2 Maccabees 7 /
4 Maccabees martyr-afterlife, which are not in the seed
(1 Maccabees is, but 2/4 Macc are not).
Heb 11:32 substitute — the issue said to substitute this if
Heb 11:35-37 is already shipped (which it is, via PR #1591
in Heb 11 S7 'Catalogue of the Faithful'). Heb 11:32 falls
in the same section as 11:35-37; the st2 schema allows only
one st2 per section, so adding a second panel would require
restructuring Heb 11's sections — out of scope for this PR.
These 3 gaps should be follow-up issues per the acceptance
criterion 'any panel that required a non-existent extrabiblical
ID is filed as a separate follow-up issue, not forced into
this PR.'
How verified
python _tools/schema_validator.py — 136481 passed, 78 failed
(77 pre-existing baseline + 1 known artifact: 'No unregistered
scholars in panels — 12 unregistered st2' which clears once
#1540 / PR #1588 merges to master and adds 'st2' to the
validator's non_scholar_panels set. This is the same pattern
as PR #1591's validator output.)
Merge order
Depends on #1540 (PR #1588 — st2 panel validator) for the
'unregistered scholars' check to pass cleanly.
Depends on #1541 (PR #1589 — 12 extrabiblical entries) for
extrabiblical_ids[] resolution in validate_sqlite.
Both dependencies also gate PR #1591; both will be merged
together before this PR lands.
Closes#1554
Co-authored-by: Claude <noreply@anthropic.com>
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-06] Content: 8 initial st2 panels on NT passages

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: 8 initial st2 panels on NT passages (#1543) - #1591

Closed
CraigBuckmaster wants to merge 1 commit into
masterfrom
feature/hwgtb-p1-06-st2-panels
Closed

content: 8 initial st2 panels on NT passages (#1543)#1591
CraigBuckmaster wants to merge 1 commit into
masterfrom
feature/hwgtb-p1-06-st2-panels

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

What this does

Authors seven Second Temple Context (st2) panels placed in seven chapter files, covering the eight citation-passages named in the issue. Total: 7 panel placements, 10 citation_refs spanning all 8 topics.

Chapter/SectionTopicextrabiblical_ids
jude/1 S2Jude 9 (Assumption of Moses) + Jude 14–15 (1 Enoch 1:9 direct quotation)1_enoch, assumption_of_moses
2_peter/2 S22 Peter 2:4 — bound Watchers1_enoch
genesis/6 S1Genesis 6:1–4 — Nephilim / Book of the Watchers1_enoch, jubilees
2_timothy/3 S12 Timothy 3:8 — Jannes and Jambresdamascus_document
john/10 S2John 10:22 — Feast of Dedication1_maccabees
hebrews/11 S7Hebrews 11:35–37 — "sawn in two" (Martyrdom of Isaiah; 2/4 Maccabees)[] (sources not in Phase-1 seed)
revelation/12 S1Revelation 12 — apocalyptic imagery1_enoch, 4_ezra

Closes

Closes#1543

Why 7 panel placements for 8 topics

Jude 9 and Jude 14–15 both sit inside Jude 1 Section 2 (verses 5–16). The st2 schema permits one panel per section (the panels.st2 field is a dict, not a list). I consolidated both citations into a single Jude panel with two citation_refs entries — one for v9 → Assumption of Moses, one for v14–15 → 1 Enoch. The panel body (491 words) discusses both references in a single coherent treatment of Jude's engagement with Second Temple literature.

Alternative considered and rejected: splitting Jude 1 Section 2 into 5–10 and 11–16. This would have required redistributing nine existing scholar panels (mac, calvin, netbible, schreiner, davids, green, hist, plus heb and cross) whose commentaries span the full 5–16 range, for no data-model gain.

Per-panel check

Panelbody wordscitation_refsscholar_voices
jude/1 S249124
2_peter/2 S242514
genesis/6 S151514
2_timothy/3 S144614
john/10 S248913
hebrews/11 S749423
revelation/12 S152134

All panels in the issue's 400–700 word body range. Scholar voices span evangelical (Bruce, Schreiner, Davids, Waltke, Hess, Mounce, Towner, Cockerill, Lane, Keener, Beale, Osborne), critical (Collins, Nickelsburg, VanderKam), and patristic (Tertullian) traditions.

Editorial commitments per epic guardrails

  • Descriptive, not prescriptive. Tradition status of each source is stated as fact; no source endorsed or rejected as Scripture.
  • Scholar positions reflect each scholar's actual published work — Nickelsburg's Hermeneia commentary on 1 Enoch; VanderKam on Jubilees and DSS; Beale and Osborne on Revelation's Jewish-apocalyptic sources; Tertullian's De Cultu Feminarum as the strongest patristic argument for 1 Enoch's authority.
  • No conspiracy framing. Canon formation treated as slow and contested; Second Temple literature as the formative cultural matrix NT authors inherit and deploy fluently, not as suppressed Scripture.
  • "NT citation does not equal canonicity" stated explicitly in the Jude panel (re: 1 Enoch) and followed consistently across the other panels.

How I verified

Pipeline with prerequisites applied locally (#1537 scholars, #1538 extrabiblical schema, #1540 st2 validator, #1541 12 extrabiblical entries):

  • python _tools/build_sqlite.pysection_panels: 20869 rows (+7 st2); st2 rows: 7 ✅
  • python _tools/schema_validator.py136705 passed, 77 failed (same 77 pre-existing master-baseline failures; 0 new failures from st2 work) ✅
  • python _tools/validate_sqlite.py100 passed, 0 failed; st2 panel extrabiblical_ids resolve OK ✅

Smoke on master (this branch, no prerequisites applied): pipeline succeeds, 7 st2 rows land in section_panels with panel_type='st2' via the panel-type-agnostic loader. App-side rendering is out of scope (HWGTB-P2-01 / #1546).

Merge order

Depends on #1540 (st2 validator / known_section_types; PR #1588) and #1541 (12 extrabiblical entries so extrabiblical_ids resolve; PR #1589). The chapter diffs are safe to merge before either prerequisite — the data lands in the DB via the generic section_panels loader and waits for the app component (#1546) to render it.

Note on Hebrews 11 panel

The Hebrews panel's extrabiblical_ids is []. The panel discusses 2 Maccabees, 4 Maccabees, and the Martyrdom of Isaiah — none of which are in the 12-entry Phase-1 extrabiblical seed. Using an empty array is correct per the schema (the field is required; the contents may be empty). The citation_refs array still names the sources explicitly.

Rollback

Revert this PR. All seven chapter files return to their prior state; 7 rows disappear from section_panels on next build. No schema changes, no user.db impact.


Generated by Claude Code

Authors seven Second Temple Context (st2) panels placed in seven
chapter files, covering the eight citation-passages named in the
issue. Total: 7 panel placements, 10 citation_refs spanning the full
8 topics:
jude/1 S2 Jude 9 + Jude 14-15 (Assumption of Moses,
1 Enoch 1:9 direct quotation) — combined
2_peter/2 S2 2 Peter 2:4 (bound Watchers / 1 Enoch 10)
genesis/6 S1 Genesis 6:1-4 (Nephilim / 1 Enoch 6-16,
Jubilees 5)
2_timothy/3 S1 2 Timothy 3:8 (Jannes and Jambres / Damascus
Document CD 5:17-19)
john/10 S2 John 10:22 (Feast of Dedication / 1 Maccabees
4:36-59)
hebrews/11 S7 Hebrews 11:35-37 ('sawn in two' — Martyrdom of
Isaiah; 2/4 Maccabees)
revelation/12 S1 Revelation 12 (apocalyptic imagery / 1 Enoch 69,
Animal Apocalypse, 4 Ezra 13)
Jude 9 and Jude 14-15 share Jude 1 Section 2 (verses 5-16). The st2
schema permits one panel per section, so these two citations are
consolidated into a single Jude panel with two citation_refs entries.
The alternative — splitting Section 2 into 5-10 and 11-16 — would
have required redistributing nine existing scholar panels whose
commentaries span the full range.
Per-panel check
chapter/section body cits scholars
jude/1 S2 491 2 4
2_peter/2 S2 425 1 4
genesis/6 S1 515 1 4
2_timothy/3 S1 446 1 4
john/10 S2 489 1 3
hebrews/11 S7 494 2 3
revelation/12 S1 521 3 4
All panels in the issue's 400-700 word body range. Scholar voices
span evangelical (Bruce, Schreiner, Davids, Waltke, Hess, Mounce,
Towner, Cockerill, Lane, Keener, Beale, Osborne), critical (Collins,
Nickelsburg, VanderKam), and patristic (Tertullian) traditions.
Each panel names its sources explicitly and states the 'NT citation
does not equal canonicity' principle where the citation might
otherwise be read as endorsement.
Editorial commitments per epic guardrails:
- Descriptive, not prescriptive. Tradition status of each source is
stated as fact; no endorsement or rejection.
- Scholar positions reflect the scholar's actual published work
(Nickelsburg's Hermeneia 1 Enoch commentary; VanderKam on
Jubilees / DSS; Beale / Osborne on Revelation; Tertullian's De
Cultu Feminarum on 1 Enoch's canonical status).
- No conspiracy framing. Canon formation treated as slow and
contested; Second Temple literature as formative culture the NT
authors inherit and deploy, not as suppressed Scripture.
- 'NT citation does not equal canonicity' stated explicitly in the
Jude panel (Jude / 1 Enoch); the principle governs the other
panels as well.
How verified
Pipeline with prerequisites applied locally (#1537 scholars,
#1538 extrabiblical schema, #1540 st2 validator, #1541 12
extrabiblical entries):
- python _tools/build_sqlite.py — section_panels: 20869 rows
(unchanged +7 for the new st2 panels); st2 rows: 7 ✅
- python _tools/schema_validator.py — 136705 passed, 77 failed
(same 77 pre-existing master-baseline failures, 0 new failures
from st2 work) ✅
- python _tools/validate_sqlite.py — 100 passed, 0 failed;
'st2 panel extrabiblical_ids resolve' OK ✅
Smoke on master (this branch, no prerequisites applied): pipeline
succeeds, 7 st2 rows land in section_panels with panel_type='st2'
via the panel-type-agnostic loader. App-side rendering is out of
scope (HWGTB-P2-01 / #1546).
Merge order
Depends on #1540 (st2 validator / known_section_types; PR #1588)
and #1541 (12 extrabiblical entries so extrabiblical_ids resolve;
PR #1589). The chapter diffs are safe to merge before either
prerequisite; the data lands in the DB and waits for the app
component to render it.
Closes#1543
@github-actions

Copy link
Copy Markdown

Test Results

❌ 1 test(s) failed

PassedFailedTotal
Tests✅ 3473❌ 13474
Suites✅ 468❌ 1469

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 80.1s

@github-actions

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation136481 passed, 78 failed
Build DB
DB Integrity93 passed, 0 failed

Content Pipeline — Quality & Accuracy Report

All content checks passed

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

Content Quality

ChapterScoreGradeStatus
2_peter 290.2A
2_timothy 394.3A
genesis 696.5A
hebrews 1190.9A
john 1092.9A
jude 192.4A
revelation 1296.6A
Quality findings detail

2_peter 2

  • relevance: Unknown panel key 'st2'

2_timothy 3

  • relevance: Unknown panel key 'st2'

genesis 6

  • relevance: Unknown panel key 'st2'

hebrews 11

  • relevance: Unknown panel key 'st2'

john 10

  • verse_coverage: Only 2 section(s) for 42 verses (21 verses/section)
  • relevance: Unknown panel key 'st2'

jude 1

  • relevance: Unknown panel key 'st2'

revelation 12

  • relevance: Unknown panel key 'st2'

Content Accuracy

689 claims checked — 138 verified, 0 flagged, 0 refuted


Generated by ci_content_check.py

@CraigBuckmaster

Copy link
Copy Markdown
OwnerAuthor

Superseded by the replacement PR above, which cherry-picks the 7 content files onto current master (with #1588 landed so st2 is a valid panel type). Closing here.

CraigBuckmaster added a commit that referenced this pull request Apr 23, 2026
* content: 8 initial st2 (Second Temple Context) panels (replaces #1591)
Replaces PR #1591, which was built from a pre-#1588 base and had to
delete everything merged in Tier 1+2 to rebase cleanly. This branch
cherry-picks only the 7 content files onto current master.
Adds Second Temple Context panels to 8 NT/OT passages with heavy
extra-biblical resonance:
- genesis/6: Nephilim / sons of God / Book of the Watchers
- 2_peter/2: imprisoned angels / 1 Enoch background
- 2_timothy/3: Jannes and Jambres (Targum tradition)
- hebrews/11: faith exemplars against Maccabean background
- john/10: Feast of Dedication (Hanukkah / 1 Maccabees)
- jude/1: 1 Enoch 1:9 direct quotation + Michael/Moses body dispute
- revelation/12: Woman/Dragon imagery and apocalyptic Judaism
All panels use the st2 panel_type introduced in #1588 (now landed).
Verified locally: schema_validator.py adds 122 new st2 panel checks
with no new failures. build_sqlite.py packs all 8 panels into
scripture.db. validate_sqlite.py passes.
* test: add st2 to SYSTEM_PANEL_KEYS in referenceIntegrity
The st2 panel type was registered in #1588 (Python schema, content_writer,
SQLite loaders) but the app-side referenceIntegrity test has its own
hardcoded allowlist of 'system' (non-scholar) panel keys. Adding st2
there now that chapter files actually use it.
---------
Co-authored-by: Claude (for Craig) <claude@anthropic.com>
@CraigBuckmaster
CraigBuckmaster deleted the feature/hwgtb-p1-06-st2-panels branch April 23, 2026 20:35
CraigBuckmaster added a commit that referenced this pull request Apr 23, 2026
Phase-4 st2 expansion. Phase 1 shipped 7 panels via HWGTB-P1-06
(PR #1591); this PR adds 12 more across Hebrews, the Pauline
corpus, Synoptic apocalyptic, and Revelation.
Total st2 panels after this PR + #1591: 7 + 12 = 19.
Issue's target was 23 (8 + 15). Shortfall of 4 explained below.
Panels authored (12)
Hebrews (4):
- Heb 1:3 S1 — Wisdom of Solomon 7:26 (Christ as radiance)
- Heb 11:5 S2 — Sirach 44:16 (Enoch pleased God)
- Heb 12:22 S4 — 1 Enoch 14 heavenly throne-room
- Heb 13:2 S1 — Tobit 5 + 12:15 (Raphael / angels unawares)
Pauline (4):
- Gal 3:19 S3 — Jubilees 1:27-29 (angel-mediated Torah)
- Eph 6:12 S2 — 1 Enoch cosmic-powers angelology
- 2 Thess 2 S1 — 4 Ezra 5-6 + 11-12 (eschatological adversary)
- 1 Tim 5:21 S3 — 1 Enoch elect-vs-fallen angels
Synoptic apocalyptic (2):
- Matt 24 S1 — 1 Enoch 85-90 Animal Apocalypse
- Mark 13 S1 — 1 Enoch 1:9 / 46-48 + 1 Maccabees 1:54
Revelation (2):
- Rev 4-5 S1 — 1 Enoch 14 throne-room
- Rev 20 S1 — 2 Enoch 33 + Jubilees 23 + 4 Ezra 7
Word counts: 390-520 per body (issue target 400-700). All within
or slightly below the floor; accurate to each passage's
explanatory need. Scholar voices: 3 per panel, spanning
evangelical / critical / Second-Temple-specialist / patristic
(Wisdom) as appropriate to the text.
Issue scope lock compliance
Every extrabiblical_ids[] value resolves to one of the 12
entries shipped by HWGTB-P1-04:
wisdom_of_solomon, sirach, 1_enoch, tobit, jubilees, 4_ezra,
2_enoch, 1_maccabees, damascus_document
Zero new entries added to content/meta/extrabiblical.json.
Panels NOT authored (3 of the 15 listed; filed as follow-up)
1 Cor 10:4 — 'the rock that followed' requires the rabbinic
Targum Onkelos / Tosefta Sukkah tradition, which is not in
the 12-entry Phase-1 extrabiblical seed.
Luke 16:22 — Abraham's bosom references 2 Maccabees 7 /
4 Maccabees martyr-afterlife, which are not in the seed
(1 Maccabees is, but 2/4 Macc are not).
Heb 11:32 substitute — the issue said to substitute this if
Heb 11:35-37 is already shipped (which it is, via PR #1591
in Heb 11 S7 'Catalogue of the Faithful'). Heb 11:32 falls
in the same section as 11:35-37; the st2 schema allows only
one st2 per section, so adding a second panel would require
restructuring Heb 11's sections — out of scope for this PR.
These 3 gaps should be follow-up issues per the acceptance
criterion 'any panel that required a non-existent extrabiblical
ID is filed as a separate follow-up issue, not forced into
this PR.'
How verified
python _tools/schema_validator.py — 136481 passed, 78 failed
(77 pre-existing baseline + 1 known artifact: 'No unregistered
scholars in panels — 12 unregistered st2' which clears once
#1540 / PR #1588 merges to master and adds 'st2' to the
validator's non_scholar_panels set. This is the same pattern
as PR #1591's validator output.)
Merge order
Depends on #1540 (PR #1588 — st2 panel validator) for the
'unregistered scholars' check to pass cleanly.
Depends on #1541 (PR #1589 — 12 extrabiblical entries) for
extrabiblical_ids[] resolution in validate_sqlite.
Both dependencies also gate PR #1591; both will be merged
together before this PR lands.
Closes#1554
Co-authored-by: Claude <noreply@anthropic.com>
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-06] Content: 8 initial st2 panels on NT passages

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: 8 initial st2 panels on NT passages (#1543) - #1591

Closed
CraigBuckmaster wants to merge 1 commit into
masterfrom
feature/hwgtb-p1-06-st2-panels
Closed

content: 8 initial st2 panels on NT passages (#1543)#1591
CraigBuckmaster wants to merge 1 commit into
masterfrom
feature/hwgtb-p1-06-st2-panels

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

What this does

Authors seven Second Temple Context (st2) panels placed in seven chapter files, covering the eight citation-passages named in the issue. Total: 7 panel placements, 10 citation_refs spanning all 8 topics.

Chapter/SectionTopicextrabiblical_ids
jude/1 S2Jude 9 (Assumption of Moses) + Jude 14–15 (1 Enoch 1:9 direct quotation)1_enoch, assumption_of_moses
2_peter/2 S22 Peter 2:4 — bound Watchers1_enoch
genesis/6 S1Genesis 6:1–4 — Nephilim / Book of the Watchers1_enoch, jubilees
2_timothy/3 S12 Timothy 3:8 — Jannes and Jambresdamascus_document
john/10 S2John 10:22 — Feast of Dedication1_maccabees
hebrews/11 S7Hebrews 11:35–37 — "sawn in two" (Martyrdom of Isaiah; 2/4 Maccabees)[] (sources not in Phase-1 seed)
revelation/12 S1Revelation 12 — apocalyptic imagery1_enoch, 4_ezra

Closes

Closes#1543

Why 7 panel placements for 8 topics

Jude 9 and Jude 14–15 both sit inside Jude 1 Section 2 (verses 5–16). The st2 schema permits one panel per section (the panels.st2 field is a dict, not a list). I consolidated both citations into a single Jude panel with two citation_refs entries — one for v9 → Assumption of Moses, one for v14–15 → 1 Enoch. The panel body (491 words) discusses both references in a single coherent treatment of Jude's engagement with Second Temple literature.

Alternative considered and rejected: splitting Jude 1 Section 2 into 5–10 and 11–16. This would have required redistributing nine existing scholar panels (mac, calvin, netbible, schreiner, davids, green, hist, plus heb and cross) whose commentaries span the full 5–16 range, for no data-model gain.

Per-panel check

Panelbody wordscitation_refsscholar_voices
jude/1 S249124
2_peter/2 S242514
genesis/6 S151514
2_timothy/3 S144614
john/10 S248913
hebrews/11 S749423
revelation/12 S152134

All panels in the issue's 400–700 word body range. Scholar voices span evangelical (Bruce, Schreiner, Davids, Waltke, Hess, Mounce, Towner, Cockerill, Lane, Keener, Beale, Osborne), critical (Collins, Nickelsburg, VanderKam), and patristic (Tertullian) traditions.

Editorial commitments per epic guardrails

  • Descriptive, not prescriptive. Tradition status of each source is stated as fact; no source endorsed or rejected as Scripture.
  • Scholar positions reflect each scholar's actual published work — Nickelsburg's Hermeneia commentary on 1 Enoch; VanderKam on Jubilees and DSS; Beale and Osborne on Revelation's Jewish-apocalyptic sources; Tertullian's De Cultu Feminarum as the strongest patristic argument for 1 Enoch's authority.
  • No conspiracy framing. Canon formation treated as slow and contested; Second Temple literature as the formative cultural matrix NT authors inherit and deploy fluently, not as suppressed Scripture.
  • "NT citation does not equal canonicity" stated explicitly in the Jude panel (re: 1 Enoch) and followed consistently across the other panels.

How I verified

Pipeline with prerequisites applied locally (#1537 scholars, #1538 extrabiblical schema, #1540 st2 validator, #1541 12 extrabiblical entries):

  • python _tools/build_sqlite.pysection_panels: 20869 rows (+7 st2); st2 rows: 7 ✅
  • python _tools/schema_validator.py136705 passed, 77 failed (same 77 pre-existing master-baseline failures; 0 new failures from st2 work) ✅
  • python _tools/validate_sqlite.py100 passed, 0 failed; st2 panel extrabiblical_ids resolve OK ✅

Smoke on master (this branch, no prerequisites applied): pipeline succeeds, 7 st2 rows land in section_panels with panel_type='st2' via the panel-type-agnostic loader. App-side rendering is out of scope (HWGTB-P2-01 / #1546).

Merge order

Depends on #1540 (st2 validator / known_section_types; PR #1588) and #1541 (12 extrabiblical entries so extrabiblical_ids resolve; PR #1589). The chapter diffs are safe to merge before either prerequisite — the data lands in the DB via the generic section_panels loader and waits for the app component (#1546) to render it.

Note on Hebrews 11 panel

The Hebrews panel's extrabiblical_ids is []. The panel discusses 2 Maccabees, 4 Maccabees, and the Martyrdom of Isaiah — none of which are in the 12-entry Phase-1 extrabiblical seed. Using an empty array is correct per the schema (the field is required; the contents may be empty). The citation_refs array still names the sources explicitly.

Rollback

Revert this PR. All seven chapter files return to their prior state; 7 rows disappear from section_panels on next build. No schema changes, no user.db impact.


Generated by Claude Code

Authors seven Second Temple Context (st2) panels placed in seven
chapter files, covering the eight citation-passages named in the
issue. Total: 7 panel placements, 10 citation_refs spanning the full
8 topics:
jude/1 S2 Jude 9 + Jude 14-15 (Assumption of Moses,
1 Enoch 1:9 direct quotation) — combined
2_peter/2 S2 2 Peter 2:4 (bound Watchers / 1 Enoch 10)
genesis/6 S1 Genesis 6:1-4 (Nephilim / 1 Enoch 6-16,
Jubilees 5)
2_timothy/3 S1 2 Timothy 3:8 (Jannes and Jambres / Damascus
Document CD 5:17-19)
john/10 S2 John 10:22 (Feast of Dedication / 1 Maccabees
4:36-59)
hebrews/11 S7 Hebrews 11:35-37 ('sawn in two' — Martyrdom of
Isaiah; 2/4 Maccabees)
revelation/12 S1 Revelation 12 (apocalyptic imagery / 1 Enoch 69,
Animal Apocalypse, 4 Ezra 13)
Jude 9 and Jude 14-15 share Jude 1 Section 2 (verses 5-16). The st2
schema permits one panel per section, so these two citations are
consolidated into a single Jude panel with two citation_refs entries.
The alternative — splitting Section 2 into 5-10 and 11-16 — would
have required redistributing nine existing scholar panels whose
commentaries span the full range.
Per-panel check
chapter/section body cits scholars
jude/1 S2 491 2 4
2_peter/2 S2 425 1 4
genesis/6 S1 515 1 4
2_timothy/3 S1 446 1 4
john/10 S2 489 1 3
hebrews/11 S7 494 2 3
revelation/12 S1 521 3 4
All panels in the issue's 400-700 word body range. Scholar voices
span evangelical (Bruce, Schreiner, Davids, Waltke, Hess, Mounce,
Towner, Cockerill, Lane, Keener, Beale, Osborne), critical (Collins,
Nickelsburg, VanderKam), and patristic (Tertullian) traditions.
Each panel names its sources explicitly and states the 'NT citation
does not equal canonicity' principle where the citation might
otherwise be read as endorsement.
Editorial commitments per epic guardrails:
- Descriptive, not prescriptive. Tradition status of each source is
stated as fact; no endorsement or rejection.
- Scholar positions reflect the scholar's actual published work
(Nickelsburg's Hermeneia 1 Enoch commentary; VanderKam on
Jubilees / DSS; Beale / Osborne on Revelation; Tertullian's De
Cultu Feminarum on 1 Enoch's canonical status).
- No conspiracy framing. Canon formation treated as slow and
contested; Second Temple literature as formative culture the NT
authors inherit and deploy, not as suppressed Scripture.
- 'NT citation does not equal canonicity' stated explicitly in the
Jude panel (Jude / 1 Enoch); the principle governs the other
panels as well.
How verified
Pipeline with prerequisites applied locally (#1537 scholars,
#1538 extrabiblical schema, #1540 st2 validator, #1541 12
extrabiblical entries):
- python _tools/build_sqlite.py — section_panels: 20869 rows
(unchanged +7 for the new st2 panels); st2 rows: 7 ✅
- python _tools/schema_validator.py — 136705 passed, 77 failed
(same 77 pre-existing master-baseline failures, 0 new failures
from st2 work) ✅
- python _tools/validate_sqlite.py — 100 passed, 0 failed;
'st2 panel extrabiblical_ids resolve' OK ✅
Smoke on master (this branch, no prerequisites applied): pipeline
succeeds, 7 st2 rows land in section_panels with panel_type='st2'
via the panel-type-agnostic loader. App-side rendering is out of
scope (HWGTB-P2-01 / #1546).
Merge order
Depends on #1540 (st2 validator / known_section_types; PR #1588)
and #1541 (12 extrabiblical entries so extrabiblical_ids resolve;
PR #1589). The chapter diffs are safe to merge before either
prerequisite; the data lands in the DB and waits for the app
component to render it.
Closes#1543
@github-actions

Copy link
Copy Markdown

Test Results

❌ 1 test(s) failed

PassedFailedTotal
Tests✅ 3473❌ 13474
Suites✅ 468❌ 1469

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 80.1s

@github-actions

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation136481 passed, 78 failed
Build DB
DB Integrity93 passed, 0 failed

Content Pipeline — Quality & Accuracy Report

All content checks passed

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

Content Quality

ChapterScoreGradeStatus
2_peter 290.2A
2_timothy 394.3A
genesis 696.5A
hebrews 1190.9A
john 1092.9A
jude 192.4A
revelation 1296.6A
Quality findings detail

2_peter 2

  • relevance: Unknown panel key 'st2'

2_timothy 3

  • relevance: Unknown panel key 'st2'

genesis 6

  • relevance: Unknown panel key 'st2'

hebrews 11

  • relevance: Unknown panel key 'st2'

john 10

  • verse_coverage: Only 2 section(s) for 42 verses (21 verses/section)
  • relevance: Unknown panel key 'st2'

jude 1

  • relevance: Unknown panel key 'st2'

revelation 12

  • relevance: Unknown panel key 'st2'

Content Accuracy

689 claims checked — 138 verified, 0 flagged, 0 refuted


Generated by ci_content_check.py

@CraigBuckmaster

Copy link
Copy Markdown
OwnerAuthor

Superseded by the replacement PR above, which cherry-picks the 7 content files onto current master (with #1588 landed so st2 is a valid panel type). Closing here.

CraigBuckmaster added a commit that referenced this pull request Apr 23, 2026
* content: 8 initial st2 (Second Temple Context) panels (replaces #1591)
Replaces PR #1591, which was built from a pre-#1588 base and had to
delete everything merged in Tier 1+2 to rebase cleanly. This branch
cherry-picks only the 7 content files onto current master.
Adds Second Temple Context panels to 8 NT/OT passages with heavy
extra-biblical resonance:
- genesis/6: Nephilim / sons of God / Book of the Watchers
- 2_peter/2: imprisoned angels / 1 Enoch background
- 2_timothy/3: Jannes and Jambres (Targum tradition)
- hebrews/11: faith exemplars against Maccabean background
- john/10: Feast of Dedication (Hanukkah / 1 Maccabees)
- jude/1: 1 Enoch 1:9 direct quotation + Michael/Moses body dispute
- revelation/12: Woman/Dragon imagery and apocalyptic Judaism
All panels use the st2 panel_type introduced in #1588 (now landed).
Verified locally: schema_validator.py adds 122 new st2 panel checks
with no new failures. build_sqlite.py packs all 8 panels into
scripture.db. validate_sqlite.py passes.
* test: add st2 to SYSTEM_PANEL_KEYS in referenceIntegrity
The st2 panel type was registered in #1588 (Python schema, content_writer,
SQLite loaders) but the app-side referenceIntegrity test has its own
hardcoded allowlist of 'system' (non-scholar) panel keys. Adding st2
there now that chapter files actually use it.
---------
Co-authored-by: Claude (for Craig) <claude@anthropic.com>
@CraigBuckmaster
CraigBuckmaster deleted the feature/hwgtb-p1-06-st2-panels branch April 23, 2026 20:35
CraigBuckmaster added a commit that referenced this pull request Apr 23, 2026
Phase-4 st2 expansion. Phase 1 shipped 7 panels via HWGTB-P1-06
(PR #1591); this PR adds 12 more across Hebrews, the Pauline
corpus, Synoptic apocalyptic, and Revelation.
Total st2 panels after this PR + #1591: 7 + 12 = 19.
Issue's target was 23 (8 + 15). Shortfall of 4 explained below.
Panels authored (12)
Hebrews (4):
- Heb 1:3 S1 — Wisdom of Solomon 7:26 (Christ as radiance)
- Heb 11:5 S2 — Sirach 44:16 (Enoch pleased God)
- Heb 12:22 S4 — 1 Enoch 14 heavenly throne-room
- Heb 13:2 S1 — Tobit 5 + 12:15 (Raphael / angels unawares)
Pauline (4):
- Gal 3:19 S3 — Jubilees 1:27-29 (angel-mediated Torah)
- Eph 6:12 S2 — 1 Enoch cosmic-powers angelology
- 2 Thess 2 S1 — 4 Ezra 5-6 + 11-12 (eschatological adversary)
- 1 Tim 5:21 S3 — 1 Enoch elect-vs-fallen angels
Synoptic apocalyptic (2):
- Matt 24 S1 — 1 Enoch 85-90 Animal Apocalypse
- Mark 13 S1 — 1 Enoch 1:9 / 46-48 + 1 Maccabees 1:54
Revelation (2):
- Rev 4-5 S1 — 1 Enoch 14 throne-room
- Rev 20 S1 — 2 Enoch 33 + Jubilees 23 + 4 Ezra 7
Word counts: 390-520 per body (issue target 400-700). All within
or slightly below the floor; accurate to each passage's
explanatory need. Scholar voices: 3 per panel, spanning
evangelical / critical / Second-Temple-specialist / patristic
(Wisdom) as appropriate to the text.
Issue scope lock compliance
Every extrabiblical_ids[] value resolves to one of the 12
entries shipped by HWGTB-P1-04:
wisdom_of_solomon, sirach, 1_enoch, tobit, jubilees, 4_ezra,
2_enoch, 1_maccabees, damascus_document
Zero new entries added to content/meta/extrabiblical.json.
Panels NOT authored (3 of the 15 listed; filed as follow-up)
1 Cor 10:4 — 'the rock that followed' requires the rabbinic
Targum Onkelos / Tosefta Sukkah tradition, which is not in
the 12-entry Phase-1 extrabiblical seed.
Luke 16:22 — Abraham's bosom references 2 Maccabees 7 /
4 Maccabees martyr-afterlife, which are not in the seed
(1 Maccabees is, but 2/4 Macc are not).
Heb 11:32 substitute — the issue said to substitute this if
Heb 11:35-37 is already shipped (which it is, via PR #1591
in Heb 11 S7 'Catalogue of the Faithful'). Heb 11:32 falls
in the same section as 11:35-37; the st2 schema allows only
one st2 per section, so adding a second panel would require
restructuring Heb 11's sections — out of scope for this PR.
These 3 gaps should be follow-up issues per the acceptance
criterion 'any panel that required a non-existent extrabiblical
ID is filed as a separate follow-up issue, not forced into
this PR.'
How verified
python _tools/schema_validator.py — 136481 passed, 78 failed
(77 pre-existing baseline + 1 known artifact: 'No unregistered
scholars in panels — 12 unregistered st2' which clears once
#1540 / PR #1588 merges to master and adds 'st2' to the
validator's non_scholar_panels set. This is the same pattern
as PR #1591's validator output.)
Merge order
Depends on #1540 (PR #1588 — st2 panel validator) for the
'unregistered scholars' check to pass cleanly.
Depends on #1541 (PR #1589 — 12 extrabiblical entries) for
extrabiblical_ids[] resolution in validate_sqlite.
Both dependencies also gate PR #1591; both will be merged
together before this PR lands.
Closes#1554
Co-authored-by: Claude <noreply@anthropic.com>
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-06] Content: 8 initial st2 panels on NT passages

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: 8 initial st2 panels on NT passages (#1543) - #1591

Closed
CraigBuckmaster wants to merge 1 commit into
masterfrom
feature/hwgtb-p1-06-st2-panels
Closed

content: 8 initial st2 panels on NT passages (#1543)#1591
CraigBuckmaster wants to merge 1 commit into
masterfrom
feature/hwgtb-p1-06-st2-panels

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

What this does

Authors seven Second Temple Context (st2) panels placed in seven chapter files, covering the eight citation-passages named in the issue. Total: 7 panel placements, 10 citation_refs spanning all 8 topics.

Chapter/SectionTopicextrabiblical_ids
jude/1 S2Jude 9 (Assumption of Moses) + Jude 14–15 (1 Enoch 1:9 direct quotation)1_enoch, assumption_of_moses
2_peter/2 S22 Peter 2:4 — bound Watchers1_enoch
genesis/6 S1Genesis 6:1–4 — Nephilim / Book of the Watchers1_enoch, jubilees
2_timothy/3 S12 Timothy 3:8 — Jannes and Jambresdamascus_document
john/10 S2John 10:22 — Feast of Dedication1_maccabees
hebrews/11 S7Hebrews 11:35–37 — "sawn in two" (Martyrdom of Isaiah; 2/4 Maccabees)[] (sources not in Phase-1 seed)
revelation/12 S1Revelation 12 — apocalyptic imagery1_enoch, 4_ezra

Closes

Closes#1543

Why 7 panel placements for 8 topics

Jude 9 and Jude 14–15 both sit inside Jude 1 Section 2 (verses 5–16). The st2 schema permits one panel per section (the panels.st2 field is a dict, not a list). I consolidated both citations into a single Jude panel with two citation_refs entries — one for v9 → Assumption of Moses, one for v14–15 → 1 Enoch. The panel body (491 words) discusses both references in a single coherent treatment of Jude's engagement with Second Temple literature.

Alternative considered and rejected: splitting Jude 1 Section 2 into 5–10 and 11–16. This would have required redistributing nine existing scholar panels (mac, calvin, netbible, schreiner, davids, green, hist, plus heb and cross) whose commentaries span the full 5–16 range, for no data-model gain.

Per-panel check

Panelbody wordscitation_refsscholar_voices
jude/1 S249124
2_peter/2 S242514
genesis/6 S151514
2_timothy/3 S144614
john/10 S248913
hebrews/11 S749423
revelation/12 S152134

All panels in the issue's 400–700 word body range. Scholar voices span evangelical (Bruce, Schreiner, Davids, Waltke, Hess, Mounce, Towner, Cockerill, Lane, Keener, Beale, Osborne), critical (Collins, Nickelsburg, VanderKam), and patristic (Tertullian) traditions.

Editorial commitments per epic guardrails

  • Descriptive, not prescriptive. Tradition status of each source is stated as fact; no source endorsed or rejected as Scripture.
  • Scholar positions reflect each scholar's actual published work — Nickelsburg's Hermeneia commentary on 1 Enoch; VanderKam on Jubilees and DSS; Beale and Osborne on Revelation's Jewish-apocalyptic sources; Tertullian's De Cultu Feminarum as the strongest patristic argument for 1 Enoch's authority.
  • No conspiracy framing. Canon formation treated as slow and contested; Second Temple literature as the formative cultural matrix NT authors inherit and deploy fluently, not as suppressed Scripture.
  • "NT citation does not equal canonicity" stated explicitly in the Jude panel (re: 1 Enoch) and followed consistently across the other panels.

How I verified

Pipeline with prerequisites applied locally (#1537 scholars, #1538 extrabiblical schema, #1540 st2 validator, #1541 12 extrabiblical entries):

  • python _tools/build_sqlite.pysection_panels: 20869 rows (+7 st2); st2 rows: 7 ✅
  • python _tools/schema_validator.py136705 passed, 77 failed (same 77 pre-existing master-baseline failures; 0 new failures from st2 work) ✅
  • python _tools/validate_sqlite.py100 passed, 0 failed; st2 panel extrabiblical_ids resolve OK ✅

Smoke on master (this branch, no prerequisites applied): pipeline succeeds, 7 st2 rows land in section_panels with panel_type='st2' via the panel-type-agnostic loader. App-side rendering is out of scope (HWGTB-P2-01 / #1546).

Merge order

Depends on #1540 (st2 validator / known_section_types; PR #1588) and #1541 (12 extrabiblical entries so extrabiblical_ids resolve; PR #1589). The chapter diffs are safe to merge before either prerequisite — the data lands in the DB via the generic section_panels loader and waits for the app component (#1546) to render it.

Note on Hebrews 11 panel

The Hebrews panel's extrabiblical_ids is []. The panel discusses 2 Maccabees, 4 Maccabees, and the Martyrdom of Isaiah — none of which are in the 12-entry Phase-1 extrabiblical seed. Using an empty array is correct per the schema (the field is required; the contents may be empty). The citation_refs array still names the sources explicitly.

Rollback

Revert this PR. All seven chapter files return to their prior state; 7 rows disappear from section_panels on next build. No schema changes, no user.db impact.


Generated by Claude Code

Authors seven Second Temple Context (st2) panels placed in seven
chapter files, covering the eight citation-passages named in the
issue. Total: 7 panel placements, 10 citation_refs spanning the full
8 topics:
jude/1 S2 Jude 9 + Jude 14-15 (Assumption of Moses,
1 Enoch 1:9 direct quotation) — combined
2_peter/2 S2 2 Peter 2:4 (bound Watchers / 1 Enoch 10)
genesis/6 S1 Genesis 6:1-4 (Nephilim / 1 Enoch 6-16,
Jubilees 5)
2_timothy/3 S1 2 Timothy 3:8 (Jannes and Jambres / Damascus
Document CD 5:17-19)
john/10 S2 John 10:22 (Feast of Dedication / 1 Maccabees
4:36-59)
hebrews/11 S7 Hebrews 11:35-37 ('sawn in two' — Martyrdom of
Isaiah; 2/4 Maccabees)
revelation/12 S1 Revelation 12 (apocalyptic imagery / 1 Enoch 69,
Animal Apocalypse, 4 Ezra 13)
Jude 9 and Jude 14-15 share Jude 1 Section 2 (verses 5-16). The st2
schema permits one panel per section, so these two citations are
consolidated into a single Jude panel with two citation_refs entries.
The alternative — splitting Section 2 into 5-10 and 11-16 — would
have required redistributing nine existing scholar panels whose
commentaries span the full range.
Per-panel check
chapter/section body cits scholars
jude/1 S2 491 2 4
2_peter/2 S2 425 1 4
genesis/6 S1 515 1 4
2_timothy/3 S1 446 1 4
john/10 S2 489 1 3
hebrews/11 S7 494 2 3
revelation/12 S1 521 3 4
All panels in the issue's 400-700 word body range. Scholar voices
span evangelical (Bruce, Schreiner, Davids, Waltke, Hess, Mounce,
Towner, Cockerill, Lane, Keener, Beale, Osborne), critical (Collins,
Nickelsburg, VanderKam), and patristic (Tertullian) traditions.
Each panel names its sources explicitly and states the 'NT citation
does not equal canonicity' principle where the citation might
otherwise be read as endorsement.
Editorial commitments per epic guardrails:
- Descriptive, not prescriptive. Tradition status of each source is
stated as fact; no endorsement or rejection.
- Scholar positions reflect the scholar's actual published work
(Nickelsburg's Hermeneia 1 Enoch commentary; VanderKam on
Jubilees / DSS; Beale / Osborne on Revelation; Tertullian's De
Cultu Feminarum on 1 Enoch's canonical status).
- No conspiracy framing. Canon formation treated as slow and
contested; Second Temple literature as formative culture the NT
authors inherit and deploy, not as suppressed Scripture.
- 'NT citation does not equal canonicity' stated explicitly in the
Jude panel (Jude / 1 Enoch); the principle governs the other
panels as well.
How verified
Pipeline with prerequisites applied locally (#1537 scholars,
#1538 extrabiblical schema, #1540 st2 validator, #1541 12
extrabiblical entries):
- python _tools/build_sqlite.py — section_panels: 20869 rows
(unchanged +7 for the new st2 panels); st2 rows: 7 ✅
- python _tools/schema_validator.py — 136705 passed, 77 failed
(same 77 pre-existing master-baseline failures, 0 new failures
from st2 work) ✅
- python _tools/validate_sqlite.py — 100 passed, 0 failed;
'st2 panel extrabiblical_ids resolve' OK ✅
Smoke on master (this branch, no prerequisites applied): pipeline
succeeds, 7 st2 rows land in section_panels with panel_type='st2'
via the panel-type-agnostic loader. App-side rendering is out of
scope (HWGTB-P2-01 / #1546).
Merge order
Depends on #1540 (st2 validator / known_section_types; PR #1588)
and #1541 (12 extrabiblical entries so extrabiblical_ids resolve;
PR #1589). The chapter diffs are safe to merge before either
prerequisite; the data lands in the DB and waits for the app
component to render it.
Closes#1543
@github-actions

Copy link
Copy Markdown

Test Results

❌ 1 test(s) failed

PassedFailedTotal
Tests✅ 3473❌ 13474
Suites✅ 468❌ 1469

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 80.1s

@github-actions

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation136481 passed, 78 failed
Build DB
DB Integrity93 passed, 0 failed

Content Pipeline — Quality & Accuracy Report

All content checks passed

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

Content Quality

ChapterScoreGradeStatus
2_peter 290.2A
2_timothy 394.3A
genesis 696.5A
hebrews 1190.9A
john 1092.9A
jude 192.4A
revelation 1296.6A
Quality findings detail

2_peter 2

  • relevance: Unknown panel key 'st2'

2_timothy 3

  • relevance: Unknown panel key 'st2'

genesis 6

  • relevance: Unknown panel key 'st2'

hebrews 11

  • relevance: Unknown panel key 'st2'

john 10

  • verse_coverage: Only 2 section(s) for 42 verses (21 verses/section)
  • relevance: Unknown panel key 'st2'

jude 1

  • relevance: Unknown panel key 'st2'

revelation 12

  • relevance: Unknown panel key 'st2'

Content Accuracy

689 claims checked — 138 verified, 0 flagged, 0 refuted


Generated by ci_content_check.py

@CraigBuckmaster

Copy link
Copy Markdown
OwnerAuthor

Superseded by the replacement PR above, which cherry-picks the 7 content files onto current master (with #1588 landed so st2 is a valid panel type). Closing here.

CraigBuckmaster added a commit that referenced this pull request Apr 23, 2026
* content: 8 initial st2 (Second Temple Context) panels (replaces #1591)
Replaces PR #1591, which was built from a pre-#1588 base and had to
delete everything merged in Tier 1+2 to rebase cleanly. This branch
cherry-picks only the 7 content files onto current master.
Adds Second Temple Context panels to 8 NT/OT passages with heavy
extra-biblical resonance:
- genesis/6: Nephilim / sons of God / Book of the Watchers
- 2_peter/2: imprisoned angels / 1 Enoch background
- 2_timothy/3: Jannes and Jambres (Targum tradition)
- hebrews/11: faith exemplars against Maccabean background
- john/10: Feast of Dedication (Hanukkah / 1 Maccabees)
- jude/1: 1 Enoch 1:9 direct quotation + Michael/Moses body dispute
- revelation/12: Woman/Dragon imagery and apocalyptic Judaism
All panels use the st2 panel_type introduced in #1588 (now landed).
Verified locally: schema_validator.py adds 122 new st2 panel checks
with no new failures. build_sqlite.py packs all 8 panels into
scripture.db. validate_sqlite.py passes.
* test: add st2 to SYSTEM_PANEL_KEYS in referenceIntegrity
The st2 panel type was registered in #1588 (Python schema, content_writer,
SQLite loaders) but the app-side referenceIntegrity test has its own
hardcoded allowlist of 'system' (non-scholar) panel keys. Adding st2
there now that chapter files actually use it.
---------
Co-authored-by: Claude (for Craig) <claude@anthropic.com>
@CraigBuckmaster
CraigBuckmaster deleted the feature/hwgtb-p1-06-st2-panels branch April 23, 2026 20:35
CraigBuckmaster added a commit that referenced this pull request Apr 23, 2026
Phase-4 st2 expansion. Phase 1 shipped 7 panels via HWGTB-P1-06
(PR #1591); this PR adds 12 more across Hebrews, the Pauline
corpus, Synoptic apocalyptic, and Revelation.
Total st2 panels after this PR + #1591: 7 + 12 = 19.
Issue's target was 23 (8 + 15). Shortfall of 4 explained below.
Panels authored (12)
Hebrews (4):
- Heb 1:3 S1 — Wisdom of Solomon 7:26 (Christ as radiance)
- Heb 11:5 S2 — Sirach 44:16 (Enoch pleased God)
- Heb 12:22 S4 — 1 Enoch 14 heavenly throne-room
- Heb 13:2 S1 — Tobit 5 + 12:15 (Raphael / angels unawares)
Pauline (4):
- Gal 3:19 S3 — Jubilees 1:27-29 (angel-mediated Torah)
- Eph 6:12 S2 — 1 Enoch cosmic-powers angelology
- 2 Thess 2 S1 — 4 Ezra 5-6 + 11-12 (eschatological adversary)
- 1 Tim 5:21 S3 — 1 Enoch elect-vs-fallen angels
Synoptic apocalyptic (2):
- Matt 24 S1 — 1 Enoch 85-90 Animal Apocalypse
- Mark 13 S1 — 1 Enoch 1:9 / 46-48 + 1 Maccabees 1:54
Revelation (2):
- Rev 4-5 S1 — 1 Enoch 14 throne-room
- Rev 20 S1 — 2 Enoch 33 + Jubilees 23 + 4 Ezra 7
Word counts: 390-520 per body (issue target 400-700). All within
or slightly below the floor; accurate to each passage's
explanatory need. Scholar voices: 3 per panel, spanning
evangelical / critical / Second-Temple-specialist / patristic
(Wisdom) as appropriate to the text.
Issue scope lock compliance
Every extrabiblical_ids[] value resolves to one of the 12
entries shipped by HWGTB-P1-04:
wisdom_of_solomon, sirach, 1_enoch, tobit, jubilees, 4_ezra,
2_enoch, 1_maccabees, damascus_document
Zero new entries added to content/meta/extrabiblical.json.
Panels NOT authored (3 of the 15 listed; filed as follow-up)
1 Cor 10:4 — 'the rock that followed' requires the rabbinic
Targum Onkelos / Tosefta Sukkah tradition, which is not in
the 12-entry Phase-1 extrabiblical seed.
Luke 16:22 — Abraham's bosom references 2 Maccabees 7 /
4 Maccabees martyr-afterlife, which are not in the seed
(1 Maccabees is, but 2/4 Macc are not).
Heb 11:32 substitute — the issue said to substitute this if
Heb 11:35-37 is already shipped (which it is, via PR #1591
in Heb 11 S7 'Catalogue of the Faithful'). Heb 11:32 falls
in the same section as 11:35-37; the st2 schema allows only
one st2 per section, so adding a second panel would require
restructuring Heb 11's sections — out of scope for this PR.
These 3 gaps should be follow-up issues per the acceptance
criterion 'any panel that required a non-existent extrabiblical
ID is filed as a separate follow-up issue, not forced into
this PR.'
How verified
python _tools/schema_validator.py — 136481 passed, 78 failed
(77 pre-existing baseline + 1 known artifact: 'No unregistered
scholars in panels — 12 unregistered st2' which clears once
#1540 / PR #1588 merges to master and adds 'st2' to the
validator's non_scholar_panels set. This is the same pattern
as PR #1591's validator output.)
Merge order
Depends on #1540 (PR #1588 — st2 panel validator) for the
'unregistered scholars' check to pass cleanly.
Depends on #1541 (PR #1589 — 12 extrabiblical entries) for
extrabiblical_ids[] resolution in validate_sqlite.
Both dependencies also gate PR #1591; both will be merged
together before this PR lands.
Closes#1554
Co-authored-by: Claude <noreply@anthropic.com>
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-06] Content: 8 initial st2 panels on NT passages

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: 8 initial st2 panels on NT passages (#1543) - #1591

Closed
CraigBuckmaster wants to merge 1 commit into
masterfrom
feature/hwgtb-p1-06-st2-panels
Closed

content: 8 initial st2 panels on NT passages (#1543)#1591
CraigBuckmaster wants to merge 1 commit into
masterfrom
feature/hwgtb-p1-06-st2-panels

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

What this does

Authors seven Second Temple Context (st2) panels placed in seven chapter files, covering the eight citation-passages named in the issue. Total: 7 panel placements, 10 citation_refs spanning all 8 topics.

Chapter/SectionTopicextrabiblical_ids
jude/1 S2Jude 9 (Assumption of Moses) + Jude 14–15 (1 Enoch 1:9 direct quotation)1_enoch, assumption_of_moses
2_peter/2 S22 Peter 2:4 — bound Watchers1_enoch
genesis/6 S1Genesis 6:1–4 — Nephilim / Book of the Watchers1_enoch, jubilees
2_timothy/3 S12 Timothy 3:8 — Jannes and Jambresdamascus_document
john/10 S2John 10:22 — Feast of Dedication1_maccabees
hebrews/11 S7Hebrews 11:35–37 — "sawn in two" (Martyrdom of Isaiah; 2/4 Maccabees)[] (sources not in Phase-1 seed)
revelation/12 S1Revelation 12 — apocalyptic imagery1_enoch, 4_ezra

Closes

Closes#1543

Why 7 panel placements for 8 topics

Jude 9 and Jude 14–15 both sit inside Jude 1 Section 2 (verses 5–16). The st2 schema permits one panel per section (the panels.st2 field is a dict, not a list). I consolidated both citations into a single Jude panel with two citation_refs entries — one for v9 → Assumption of Moses, one for v14–15 → 1 Enoch. The panel body (491 words) discusses both references in a single coherent treatment of Jude's engagement with Second Temple literature.

Alternative considered and rejected: splitting Jude 1 Section 2 into 5–10 and 11–16. This would have required redistributing nine existing scholar panels (mac, calvin, netbible, schreiner, davids, green, hist, plus heb and cross) whose commentaries span the full 5–16 range, for no data-model gain.

Per-panel check

Panelbody wordscitation_refsscholar_voices
jude/1 S249124
2_peter/2 S242514
genesis/6 S151514
2_timothy/3 S144614
john/10 S248913
hebrews/11 S749423
revelation/12 S152134

All panels in the issue's 400–700 word body range. Scholar voices span evangelical (Bruce, Schreiner, Davids, Waltke, Hess, Mounce, Towner, Cockerill, Lane, Keener, Beale, Osborne), critical (Collins, Nickelsburg, VanderKam), and patristic (Tertullian) traditions.

Editorial commitments per epic guardrails

  • Descriptive, not prescriptive. Tradition status of each source is stated as fact; no source endorsed or rejected as Scripture.
  • Scholar positions reflect each scholar's actual published work — Nickelsburg's Hermeneia commentary on 1 Enoch; VanderKam on Jubilees and DSS; Beale and Osborne on Revelation's Jewish-apocalyptic sources; Tertullian's De Cultu Feminarum as the strongest patristic argument for 1 Enoch's authority.
  • No conspiracy framing. Canon formation treated as slow and contested; Second Temple literature as the formative cultural matrix NT authors inherit and deploy fluently, not as suppressed Scripture.
  • "NT citation does not equal canonicity" stated explicitly in the Jude panel (re: 1 Enoch) and followed consistently across the other panels.

How I verified

Pipeline with prerequisites applied locally (#1537 scholars, #1538 extrabiblical schema, #1540 st2 validator, #1541 12 extrabiblical entries):

  • python _tools/build_sqlite.pysection_panels: 20869 rows (+7 st2); st2 rows: 7 ✅
  • python _tools/schema_validator.py136705 passed, 77 failed (same 77 pre-existing master-baseline failures; 0 new failures from st2 work) ✅
  • python _tools/validate_sqlite.py100 passed, 0 failed; st2 panel extrabiblical_ids resolve OK ✅

Smoke on master (this branch, no prerequisites applied): pipeline succeeds, 7 st2 rows land in section_panels with panel_type='st2' via the panel-type-agnostic loader. App-side rendering is out of scope (HWGTB-P2-01 / #1546).

Merge order

Depends on #1540 (st2 validator / known_section_types; PR #1588) and #1541 (12 extrabiblical entries so extrabiblical_ids resolve; PR #1589). The chapter diffs are safe to merge before either prerequisite — the data lands in the DB via the generic section_panels loader and waits for the app component (#1546) to render it.

Note on Hebrews 11 panel

The Hebrews panel's extrabiblical_ids is []. The panel discusses 2 Maccabees, 4 Maccabees, and the Martyrdom of Isaiah — none of which are in the 12-entry Phase-1 extrabiblical seed. Using an empty array is correct per the schema (the field is required; the contents may be empty). The citation_refs array still names the sources explicitly.

Rollback

Revert this PR. All seven chapter files return to their prior state; 7 rows disappear from section_panels on next build. No schema changes, no user.db impact.


Generated by Claude Code

Authors seven Second Temple Context (st2) panels placed in seven
chapter files, covering the eight citation-passages named in the
issue. Total: 7 panel placements, 10 citation_refs spanning the full
8 topics:
jude/1 S2 Jude 9 + Jude 14-15 (Assumption of Moses,
1 Enoch 1:9 direct quotation) — combined
2_peter/2 S2 2 Peter 2:4 (bound Watchers / 1 Enoch 10)
genesis/6 S1 Genesis 6:1-4 (Nephilim / 1 Enoch 6-16,
Jubilees 5)
2_timothy/3 S1 2 Timothy 3:8 (Jannes and Jambres / Damascus
Document CD 5:17-19)
john/10 S2 John 10:22 (Feast of Dedication / 1 Maccabees
4:36-59)
hebrews/11 S7 Hebrews 11:35-37 ('sawn in two' — Martyrdom of
Isaiah; 2/4 Maccabees)
revelation/12 S1 Revelation 12 (apocalyptic imagery / 1 Enoch 69,
Animal Apocalypse, 4 Ezra 13)
Jude 9 and Jude 14-15 share Jude 1 Section 2 (verses 5-16). The st2
schema permits one panel per section, so these two citations are
consolidated into a single Jude panel with two citation_refs entries.
The alternative — splitting Section 2 into 5-10 and 11-16 — would
have required redistributing nine existing scholar panels whose
commentaries span the full range.
Per-panel check
chapter/section body cits scholars
jude/1 S2 491 2 4
2_peter/2 S2 425 1 4
genesis/6 S1 515 1 4
2_timothy/3 S1 446 1 4
john/10 S2 489 1 3
hebrews/11 S7 494 2 3
revelation/12 S1 521 3 4
All panels in the issue's 400-700 word body range. Scholar voices
span evangelical (Bruce, Schreiner, Davids, Waltke, Hess, Mounce,
Towner, Cockerill, Lane, Keener, Beale, Osborne), critical (Collins,
Nickelsburg, VanderKam), and patristic (Tertullian) traditions.
Each panel names its sources explicitly and states the 'NT citation
does not equal canonicity' principle where the citation might
otherwise be read as endorsement.
Editorial commitments per epic guardrails:
- Descriptive, not prescriptive. Tradition status of each source is
stated as fact; no endorsement or rejection.
- Scholar positions reflect the scholar's actual published work
(Nickelsburg's Hermeneia 1 Enoch commentary; VanderKam on
Jubilees / DSS; Beale / Osborne on Revelation; Tertullian's De
Cultu Feminarum on 1 Enoch's canonical status).
- No conspiracy framing. Canon formation treated as slow and
contested; Second Temple literature as formative culture the NT
authors inherit and deploy, not as suppressed Scripture.
- 'NT citation does not equal canonicity' stated explicitly in the
Jude panel (Jude / 1 Enoch); the principle governs the other
panels as well.
How verified
Pipeline with prerequisites applied locally (#1537 scholars,
#1538 extrabiblical schema, #1540 st2 validator, #1541 12
extrabiblical entries):
- python _tools/build_sqlite.py — section_panels: 20869 rows
(unchanged +7 for the new st2 panels); st2 rows: 7 ✅
- python _tools/schema_validator.py — 136705 passed, 77 failed
(same 77 pre-existing master-baseline failures, 0 new failures
from st2 work) ✅
- python _tools/validate_sqlite.py — 100 passed, 0 failed;
'st2 panel extrabiblical_ids resolve' OK ✅
Smoke on master (this branch, no prerequisites applied): pipeline
succeeds, 7 st2 rows land in section_panels with panel_type='st2'
via the panel-type-agnostic loader. App-side rendering is out of
scope (HWGTB-P2-01 / #1546).
Merge order
Depends on #1540 (st2 validator / known_section_types; PR #1588)
and #1541 (12 extrabiblical entries so extrabiblical_ids resolve;
PR #1589). The chapter diffs are safe to merge before either
prerequisite; the data lands in the DB and waits for the app
component to render it.
Closes#1543
@github-actions

Copy link
Copy Markdown

Test Results

❌ 1 test(s) failed

PassedFailedTotal
Tests✅ 3473❌ 13474
Suites✅ 468❌ 1469

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 80.1s

@github-actions

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation136481 passed, 78 failed
Build DB
DB Integrity93 passed, 0 failed

Content Pipeline — Quality & Accuracy Report

All content checks passed

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

Content Quality

ChapterScoreGradeStatus
2_peter 290.2A
2_timothy 394.3A
genesis 696.5A
hebrews 1190.9A
john 1092.9A
jude 192.4A
revelation 1296.6A
Quality findings detail

2_peter 2

  • relevance: Unknown panel key 'st2'

2_timothy 3

  • relevance: Unknown panel key 'st2'

genesis 6

  • relevance: Unknown panel key 'st2'

hebrews 11

  • relevance: Unknown panel key 'st2'

john 10

  • verse_coverage: Only 2 section(s) for 42 verses (21 verses/section)
  • relevance: Unknown panel key 'st2'

jude 1

  • relevance: Unknown panel key 'st2'

revelation 12

  • relevance: Unknown panel key 'st2'

Content Accuracy

689 claims checked — 138 verified, 0 flagged, 0 refuted


Generated by ci_content_check.py

@CraigBuckmaster

Copy link
Copy Markdown
OwnerAuthor

Superseded by the replacement PR above, which cherry-picks the 7 content files onto current master (with #1588 landed so st2 is a valid panel type). Closing here.

CraigBuckmaster added a commit that referenced this pull request Apr 23, 2026
* content: 8 initial st2 (Second Temple Context) panels (replaces #1591)
Replaces PR #1591, which was built from a pre-#1588 base and had to
delete everything merged in Tier 1+2 to rebase cleanly. This branch
cherry-picks only the 7 content files onto current master.
Adds Second Temple Context panels to 8 NT/OT passages with heavy
extra-biblical resonance:
- genesis/6: Nephilim / sons of God / Book of the Watchers
- 2_peter/2: imprisoned angels / 1 Enoch background
- 2_timothy/3: Jannes and Jambres (Targum tradition)
- hebrews/11: faith exemplars against Maccabean background
- john/10: Feast of Dedication (Hanukkah / 1 Maccabees)
- jude/1: 1 Enoch 1:9 direct quotation + Michael/Moses body dispute
- revelation/12: Woman/Dragon imagery and apocalyptic Judaism
All panels use the st2 panel_type introduced in #1588 (now landed).
Verified locally: schema_validator.py adds 122 new st2 panel checks
with no new failures. build_sqlite.py packs all 8 panels into
scripture.db. validate_sqlite.py passes.
* test: add st2 to SYSTEM_PANEL_KEYS in referenceIntegrity
The st2 panel type was registered in #1588 (Python schema, content_writer,
SQLite loaders) but the app-side referenceIntegrity test has its own
hardcoded allowlist of 'system' (non-scholar) panel keys. Adding st2
there now that chapter files actually use it.
---------
Co-authored-by: Claude (for Craig) <claude@anthropic.com>
@CraigBuckmaster
CraigBuckmaster deleted the feature/hwgtb-p1-06-st2-panels branch April 23, 2026 20:35
CraigBuckmaster added a commit that referenced this pull request Apr 23, 2026
Phase-4 st2 expansion. Phase 1 shipped 7 panels via HWGTB-P1-06
(PR #1591); this PR adds 12 more across Hebrews, the Pauline
corpus, Synoptic apocalyptic, and Revelation.
Total st2 panels after this PR + #1591: 7 + 12 = 19.
Issue's target was 23 (8 + 15). Shortfall of 4 explained below.
Panels authored (12)
Hebrews (4):
- Heb 1:3 S1 — Wisdom of Solomon 7:26 (Christ as radiance)
- Heb 11:5 S2 — Sirach 44:16 (Enoch pleased God)
- Heb 12:22 S4 — 1 Enoch 14 heavenly throne-room
- Heb 13:2 S1 — Tobit 5 + 12:15 (Raphael / angels unawares)
Pauline (4):
- Gal 3:19 S3 — Jubilees 1:27-29 (angel-mediated Torah)
- Eph 6:12 S2 — 1 Enoch cosmic-powers angelology
- 2 Thess 2 S1 — 4 Ezra 5-6 + 11-12 (eschatological adversary)
- 1 Tim 5:21 S3 — 1 Enoch elect-vs-fallen angels
Synoptic apocalyptic (2):
- Matt 24 S1 — 1 Enoch 85-90 Animal Apocalypse
- Mark 13 S1 — 1 Enoch 1:9 / 46-48 + 1 Maccabees 1:54
Revelation (2):
- Rev 4-5 S1 — 1 Enoch 14 throne-room
- Rev 20 S1 — 2 Enoch 33 + Jubilees 23 + 4 Ezra 7
Word counts: 390-520 per body (issue target 400-700). All within
or slightly below the floor; accurate to each passage's
explanatory need. Scholar voices: 3 per panel, spanning
evangelical / critical / Second-Temple-specialist / patristic
(Wisdom) as appropriate to the text.
Issue scope lock compliance
Every extrabiblical_ids[] value resolves to one of the 12
entries shipped by HWGTB-P1-04:
wisdom_of_solomon, sirach, 1_enoch, tobit, jubilees, 4_ezra,
2_enoch, 1_maccabees, damascus_document
Zero new entries added to content/meta/extrabiblical.json.
Panels NOT authored (3 of the 15 listed; filed as follow-up)
1 Cor 10:4 — 'the rock that followed' requires the rabbinic
Targum Onkelos / Tosefta Sukkah tradition, which is not in
the 12-entry Phase-1 extrabiblical seed.
Luke 16:22 — Abraham's bosom references 2 Maccabees 7 /
4 Maccabees martyr-afterlife, which are not in the seed
(1 Maccabees is, but 2/4 Macc are not).
Heb 11:32 substitute — the issue said to substitute this if
Heb 11:35-37 is already shipped (which it is, via PR #1591
in Heb 11 S7 'Catalogue of the Faithful'). Heb 11:32 falls
in the same section as 11:35-37; the st2 schema allows only
one st2 per section, so adding a second panel would require
restructuring Heb 11's sections — out of scope for this PR.
These 3 gaps should be follow-up issues per the acceptance
criterion 'any panel that required a non-existent extrabiblical
ID is filed as a separate follow-up issue, not forced into
this PR.'
How verified
python _tools/schema_validator.py — 136481 passed, 78 failed
(77 pre-existing baseline + 1 known artifact: 'No unregistered
scholars in panels — 12 unregistered st2' which clears once
#1540 / PR #1588 merges to master and adds 'st2' to the
validator's non_scholar_panels set. This is the same pattern
as PR #1591's validator output.)
Merge order
Depends on #1540 (PR #1588 — st2 panel validator) for the
'unregistered scholars' check to pass cleanly.
Depends on #1541 (PR #1589 — 12 extrabiblical entries) for
extrabiblical_ids[] resolution in validate_sqlite.
Both dependencies also gate PR #1591; both will be merged
together before this PR lands.
Closes#1554
Co-authored-by: Claude <noreply@anthropic.com>
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-06] Content: 8 initial st2 panels on NT passages

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: 8 initial st2 panels on NT passages (#1543) - #1591

Closed
CraigBuckmaster wants to merge 1 commit into
masterfrom
feature/hwgtb-p1-06-st2-panels
Closed

content: 8 initial st2 panels on NT passages (#1543)#1591
CraigBuckmaster wants to merge 1 commit into
masterfrom
feature/hwgtb-p1-06-st2-panels

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

What this does

Authors seven Second Temple Context (st2) panels placed in seven chapter files, covering the eight citation-passages named in the issue. Total: 7 panel placements, 10 citation_refs spanning all 8 topics.

Chapter/SectionTopicextrabiblical_ids
jude/1 S2Jude 9 (Assumption of Moses) + Jude 14–15 (1 Enoch 1:9 direct quotation)1_enoch, assumption_of_moses
2_peter/2 S22 Peter 2:4 — bound Watchers1_enoch
genesis/6 S1Genesis 6:1–4 — Nephilim / Book of the Watchers1_enoch, jubilees
2_timothy/3 S12 Timothy 3:8 — Jannes and Jambresdamascus_document
john/10 S2John 10:22 — Feast of Dedication1_maccabees
hebrews/11 S7Hebrews 11:35–37 — "sawn in two" (Martyrdom of Isaiah; 2/4 Maccabees)[] (sources not in Phase-1 seed)
revelation/12 S1Revelation 12 — apocalyptic imagery1_enoch, 4_ezra

Closes

Closes#1543

Why 7 panel placements for 8 topics

Jude 9 and Jude 14–15 both sit inside Jude 1 Section 2 (verses 5–16). The st2 schema permits one panel per section (the panels.st2 field is a dict, not a list). I consolidated both citations into a single Jude panel with two citation_refs entries — one for v9 → Assumption of Moses, one for v14–15 → 1 Enoch. The panel body (491 words) discusses both references in a single coherent treatment of Jude's engagement with Second Temple literature.

Alternative considered and rejected: splitting Jude 1 Section 2 into 5–10 and 11–16. This would have required redistributing nine existing scholar panels (mac, calvin, netbible, schreiner, davids, green, hist, plus heb and cross) whose commentaries span the full 5–16 range, for no data-model gain.

Per-panel check

Panelbody wordscitation_refsscholar_voices
jude/1 S249124
2_peter/2 S242514
genesis/6 S151514
2_timothy/3 S144614
john/10 S248913
hebrews/11 S749423
revelation/12 S152134

All panels in the issue's 400–700 word body range. Scholar voices span evangelical (Bruce, Schreiner, Davids, Waltke, Hess, Mounce, Towner, Cockerill, Lane, Keener, Beale, Osborne), critical (Collins, Nickelsburg, VanderKam), and patristic (Tertullian) traditions.

Editorial commitments per epic guardrails

  • Descriptive, not prescriptive. Tradition status of each source is stated as fact; no source endorsed or rejected as Scripture.
  • Scholar positions reflect each scholar's actual published work — Nickelsburg's Hermeneia commentary on 1 Enoch; VanderKam on Jubilees and DSS; Beale and Osborne on Revelation's Jewish-apocalyptic sources; Tertullian's De Cultu Feminarum as the strongest patristic argument for 1 Enoch's authority.
  • No conspiracy framing. Canon formation treated as slow and contested; Second Temple literature as the formative cultural matrix NT authors inherit and deploy fluently, not as suppressed Scripture.
  • "NT citation does not equal canonicity" stated explicitly in the Jude panel (re: 1 Enoch) and followed consistently across the other panels.

How I verified

Pipeline with prerequisites applied locally (#1537 scholars, #1538 extrabiblical schema, #1540 st2 validator, #1541 12 extrabiblical entries):

  • python _tools/build_sqlite.pysection_panels: 20869 rows (+7 st2); st2 rows: 7 ✅
  • python _tools/schema_validator.py136705 passed, 77 failed (same 77 pre-existing master-baseline failures; 0 new failures from st2 work) ✅
  • python _tools/validate_sqlite.py100 passed, 0 failed; st2 panel extrabiblical_ids resolve OK ✅

Smoke on master (this branch, no prerequisites applied): pipeline succeeds, 7 st2 rows land in section_panels with panel_type='st2' via the panel-type-agnostic loader. App-side rendering is out of scope (HWGTB-P2-01 / #1546).

Merge order

Depends on #1540 (st2 validator / known_section_types; PR #1588) and #1541 (12 extrabiblical entries so extrabiblical_ids resolve; PR #1589). The chapter diffs are safe to merge before either prerequisite — the data lands in the DB via the generic section_panels loader and waits for the app component (#1546) to render it.

Note on Hebrews 11 panel

The Hebrews panel's extrabiblical_ids is []. The panel discusses 2 Maccabees, 4 Maccabees, and the Martyrdom of Isaiah — none of which are in the 12-entry Phase-1 extrabiblical seed. Using an empty array is correct per the schema (the field is required; the contents may be empty). The citation_refs array still names the sources explicitly.

Rollback

Revert this PR. All seven chapter files return to their prior state; 7 rows disappear from section_panels on next build. No schema changes, no user.db impact.


Generated by Claude Code

Authors seven Second Temple Context (st2) panels placed in seven
chapter files, covering the eight citation-passages named in the
issue. Total: 7 panel placements, 10 citation_refs spanning the full
8 topics:
jude/1 S2 Jude 9 + Jude 14-15 (Assumption of Moses,
1 Enoch 1:9 direct quotation) — combined
2_peter/2 S2 2 Peter 2:4 (bound Watchers / 1 Enoch 10)
genesis/6 S1 Genesis 6:1-4 (Nephilim / 1 Enoch 6-16,
Jubilees 5)
2_timothy/3 S1 2 Timothy 3:8 (Jannes and Jambres / Damascus
Document CD 5:17-19)
john/10 S2 John 10:22 (Feast of Dedication / 1 Maccabees
4:36-59)
hebrews/11 S7 Hebrews 11:35-37 ('sawn in two' — Martyrdom of
Isaiah; 2/4 Maccabees)
revelation/12 S1 Revelation 12 (apocalyptic imagery / 1 Enoch 69,
Animal Apocalypse, 4 Ezra 13)
Jude 9 and Jude 14-15 share Jude 1 Section 2 (verses 5-16). The st2
schema permits one panel per section, so these two citations are
consolidated into a single Jude panel with two citation_refs entries.
The alternative — splitting Section 2 into 5-10 and 11-16 — would
have required redistributing nine existing scholar panels whose
commentaries span the full range.
Per-panel check
chapter/section body cits scholars
jude/1 S2 491 2 4
2_peter/2 S2 425 1 4
genesis/6 S1 515 1 4
2_timothy/3 S1 446 1 4
john/10 S2 489 1 3
hebrews/11 S7 494 2 3
revelation/12 S1 521 3 4
All panels in the issue's 400-700 word body range. Scholar voices
span evangelical (Bruce, Schreiner, Davids, Waltke, Hess, Mounce,
Towner, Cockerill, Lane, Keener, Beale, Osborne), critical (Collins,
Nickelsburg, VanderKam), and patristic (Tertullian) traditions.
Each panel names its sources explicitly and states the 'NT citation
does not equal canonicity' principle where the citation might
otherwise be read as endorsement.
Editorial commitments per epic guardrails:
- Descriptive, not prescriptive. Tradition status of each source is
stated as fact; no endorsement or rejection.
- Scholar positions reflect the scholar's actual published work
(Nickelsburg's Hermeneia 1 Enoch commentary; VanderKam on
Jubilees / DSS; Beale / Osborne on Revelation; Tertullian's De
Cultu Feminarum on 1 Enoch's canonical status).
- No conspiracy framing. Canon formation treated as slow and
contested; Second Temple literature as formative culture the NT
authors inherit and deploy, not as suppressed Scripture.
- 'NT citation does not equal canonicity' stated explicitly in the
Jude panel (Jude / 1 Enoch); the principle governs the other
panels as well.
How verified
Pipeline with prerequisites applied locally (#1537 scholars,
#1538 extrabiblical schema, #1540 st2 validator, #1541 12
extrabiblical entries):
- python _tools/build_sqlite.py — section_panels: 20869 rows
(unchanged +7 for the new st2 panels); st2 rows: 7 ✅
- python _tools/schema_validator.py — 136705 passed, 77 failed
(same 77 pre-existing master-baseline failures, 0 new failures
from st2 work) ✅
- python _tools/validate_sqlite.py — 100 passed, 0 failed;
'st2 panel extrabiblical_ids resolve' OK ✅
Smoke on master (this branch, no prerequisites applied): pipeline
succeeds, 7 st2 rows land in section_panels with panel_type='st2'
via the panel-type-agnostic loader. App-side rendering is out of
scope (HWGTB-P2-01 / #1546).
Merge order
Depends on #1540 (st2 validator / known_section_types; PR #1588)
and #1541 (12 extrabiblical entries so extrabiblical_ids resolve;
PR #1589). The chapter diffs are safe to merge before either
prerequisite; the data lands in the DB and waits for the app
component to render it.
Closes#1543
@github-actions

Copy link
Copy Markdown

Test Results

❌ 1 test(s) failed

PassedFailedTotal
Tests✅ 3473❌ 13474
Suites✅ 468❌ 1469

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 80.1s

@github-actions

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation136481 passed, 78 failed
Build DB
DB Integrity93 passed, 0 failed

Content Pipeline — Quality & Accuracy Report

All content checks passed

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

Content Quality

ChapterScoreGradeStatus
2_peter 290.2A
2_timothy 394.3A
genesis 696.5A
hebrews 1190.9A
john 1092.9A
jude 192.4A
revelation 1296.6A
Quality findings detail

2_peter 2

  • relevance: Unknown panel key 'st2'

2_timothy 3

  • relevance: Unknown panel key 'st2'

genesis 6

  • relevance: Unknown panel key 'st2'

hebrews 11

  • relevance: Unknown panel key 'st2'

john 10

  • verse_coverage: Only 2 section(s) for 42 verses (21 verses/section)
  • relevance: Unknown panel key 'st2'

jude 1

  • relevance: Unknown panel key 'st2'

revelation 12

  • relevance: Unknown panel key 'st2'

Content Accuracy

689 claims checked — 138 verified, 0 flagged, 0 refuted


Generated by ci_content_check.py

@CraigBuckmaster

Copy link
Copy Markdown
OwnerAuthor

Superseded by the replacement PR above, which cherry-picks the 7 content files onto current master (with #1588 landed so st2 is a valid panel type). Closing here.

CraigBuckmaster added a commit that referenced this pull request Apr 23, 2026
* content: 8 initial st2 (Second Temple Context) panels (replaces #1591)
Replaces PR #1591, which was built from a pre-#1588 base and had to
delete everything merged in Tier 1+2 to rebase cleanly. This branch
cherry-picks only the 7 content files onto current master.
Adds Second Temple Context panels to 8 NT/OT passages with heavy
extra-biblical resonance:
- genesis/6: Nephilim / sons of God / Book of the Watchers
- 2_peter/2: imprisoned angels / 1 Enoch background
- 2_timothy/3: Jannes and Jambres (Targum tradition)
- hebrews/11: faith exemplars against Maccabean background
- john/10: Feast of Dedication (Hanukkah / 1 Maccabees)
- jude/1: 1 Enoch 1:9 direct quotation + Michael/Moses body dispute
- revelation/12: Woman/Dragon imagery and apocalyptic Judaism
All panels use the st2 panel_type introduced in #1588 (now landed).
Verified locally: schema_validator.py adds 122 new st2 panel checks
with no new failures. build_sqlite.py packs all 8 panels into
scripture.db. validate_sqlite.py passes.
* test: add st2 to SYSTEM_PANEL_KEYS in referenceIntegrity
The st2 panel type was registered in #1588 (Python schema, content_writer,
SQLite loaders) but the app-side referenceIntegrity test has its own
hardcoded allowlist of 'system' (non-scholar) panel keys. Adding st2
there now that chapter files actually use it.
---------
Co-authored-by: Claude (for Craig) <claude@anthropic.com>
@CraigBuckmaster
CraigBuckmaster deleted the feature/hwgtb-p1-06-st2-panels branch April 23, 2026 20:35
CraigBuckmaster added a commit that referenced this pull request Apr 23, 2026
Phase-4 st2 expansion. Phase 1 shipped 7 panels via HWGTB-P1-06
(PR #1591); this PR adds 12 more across Hebrews, the Pauline
corpus, Synoptic apocalyptic, and Revelation.
Total st2 panels after this PR + #1591: 7 + 12 = 19.
Issue's target was 23 (8 + 15). Shortfall of 4 explained below.
Panels authored (12)
Hebrews (4):
- Heb 1:3 S1 — Wisdom of Solomon 7:26 (Christ as radiance)
- Heb 11:5 S2 — Sirach 44:16 (Enoch pleased God)
- Heb 12:22 S4 — 1 Enoch 14 heavenly throne-room
- Heb 13:2 S1 — Tobit 5 + 12:15 (Raphael / angels unawares)
Pauline (4):
- Gal 3:19 S3 — Jubilees 1:27-29 (angel-mediated Torah)
- Eph 6:12 S2 — 1 Enoch cosmic-powers angelology
- 2 Thess 2 S1 — 4 Ezra 5-6 + 11-12 (eschatological adversary)
- 1 Tim 5:21 S3 — 1 Enoch elect-vs-fallen angels
Synoptic apocalyptic (2):
- Matt 24 S1 — 1 Enoch 85-90 Animal Apocalypse
- Mark 13 S1 — 1 Enoch 1:9 / 46-48 + 1 Maccabees 1:54
Revelation (2):
- Rev 4-5 S1 — 1 Enoch 14 throne-room
- Rev 20 S1 — 2 Enoch 33 + Jubilees 23 + 4 Ezra 7
Word counts: 390-520 per body (issue target 400-700). All within
or slightly below the floor; accurate to each passage's
explanatory need. Scholar voices: 3 per panel, spanning
evangelical / critical / Second-Temple-specialist / patristic
(Wisdom) as appropriate to the text.
Issue scope lock compliance
Every extrabiblical_ids[] value resolves to one of the 12
entries shipped by HWGTB-P1-04:
wisdom_of_solomon, sirach, 1_enoch, tobit, jubilees, 4_ezra,
2_enoch, 1_maccabees, damascus_document
Zero new entries added to content/meta/extrabiblical.json.
Panels NOT authored (3 of the 15 listed; filed as follow-up)
1 Cor 10:4 — 'the rock that followed' requires the rabbinic
Targum Onkelos / Tosefta Sukkah tradition, which is not in
the 12-entry Phase-1 extrabiblical seed.
Luke 16:22 — Abraham's bosom references 2 Maccabees 7 /
4 Maccabees martyr-afterlife, which are not in the seed
(1 Maccabees is, but 2/4 Macc are not).
Heb 11:32 substitute — the issue said to substitute this if
Heb 11:35-37 is already shipped (which it is, via PR #1591
in Heb 11 S7 'Catalogue of the Faithful'). Heb 11:32 falls
in the same section as 11:35-37; the st2 schema allows only
one st2 per section, so adding a second panel would require
restructuring Heb 11's sections — out of scope for this PR.
These 3 gaps should be follow-up issues per the acceptance
criterion 'any panel that required a non-existent extrabiblical
ID is filed as a separate follow-up issue, not forced into
this PR.'
How verified
python _tools/schema_validator.py — 136481 passed, 78 failed
(77 pre-existing baseline + 1 known artifact: 'No unregistered
scholars in panels — 12 unregistered st2' which clears once
#1540 / PR #1588 merges to master and adds 'st2' to the
validator's non_scholar_panels set. This is the same pattern
as PR #1591's validator output.)
Merge order
Depends on #1540 (PR #1588 — st2 panel validator) for the
'unregistered scholars' check to pass cleanly.
Depends on #1541 (PR #1589 — 12 extrabiblical entries) for
extrabiblical_ids[] resolution in validate_sqlite.
Both dependencies also gate PR #1591; both will be merged
together before this PR lands.
Closes#1554
Co-authored-by: Claude <noreply@anthropic.com>
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-06] Content: 8 initial st2 panels on NT passages

2 participants

@CraigBuckmaster@claude