feat(lenses): Leviticus 11-20 lens content, batch 2 of Pentateuch-rest pilot (#820, #1782) - #1802

Merged
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-3-leviticus-11-to-20
May 2, 2026
Merged

feat(lenses): Leviticus 11-20 lens content, batch 2 of Pentateuch-rest pilot (#820, #1782)#1802
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-3-leviticus-11-to-20

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Summary

Batch 2 of the Pentateuch-rest pilot tracked under #1782. Adds 33 hermeneutic-lens entries across Leviticus 11–20, picking up after #1801 (lev1–10).

After this PR, the Lev pilot has 7 chapters left (lev21–lev27) — that's likely batch 3.

Per-chapter distribution (33 total)

ChapterLensesWhy
lev11 (clean/unclean)3canonical, redemptive, typological
lev12 (childbirth purity)2sparse — christocentric, canonical
lev13 (skin disease pt 1)2procedural — grammatical, literary
lev14 (cleansing + house mildew)3typological, christocentric, canonical
lev15 (discharges)2sparse — christocentric, redemptive
lev16 (Day of Atonement)6theology peak — full lens spread
lev17 (life-blood + central altar)4christocentric, canonical, literary, redemptive
lev18 (sexual ethics)3grammatical, canonical, redemptive
lev19 (Holiness Code opener)5theology peak — literary inclusio, mission, devotional, canonical, redemptive
lev20 (capital cases)3literary, canonical, redemptive

Pattern: average 3.3 lenses/chapter across the batch, with the two theological peaks (lev16, lev19) maxed and the procedural chapters (lev12, lev13, lev15) pared back. Mirrors PR #1801's curated-sparse strategy.

Theological highlights

  • lev16 (Day of Atonement, 6 lenses): Hebrew kaphar / kapporet wordplay grammatically; the two-goat paired type prefiguring Christ's single act (Heb 9:6–14); once-a-year veil entry (v 2) framing Heb 9:11–12; the canonical lexicon Hebrews adopts wholesale; v 29's annual self-denial as devotional rhythm; vv 29–34's perpetual statute as the redemptive arc compressed.
  • lev17: v 11's "the life of a creature is in the blood" anchors christocentric (Heb 9:22 cites it directly), canonical (thread to Mt 26:28), literary (vv 1–9 / 10–16 doublet), and redemptive (one altar, one sacrifice).
  • lev19 (Holiness Code, 5 lenses): vv 2/37 inclusio for literary; vv 33–34's love-of-foreigner as outward mission posture; vv 9–10 gleaning as devotional release; v 18's love-of-neighbour echoing across six NT citations (Mt/Mk/Lk/Rom/Gal/Jas) for canonical; vv 35–36 honest weights for redemptive marketplace ethics.
  • lev14: vv 4–7 two-bird rite as resurrection-pattern type; the Mk 1:40–45 leper Christ sent to fulfil this very rite.
  • lev18 + lev20 land-vomit motif: twinned redemptive lenses tying penalty to covenant promise.

Pipeline gate results

schema_validator.py 145332 passed, 0 failed, 19 warnings (pre-existing ESV downloadable warns)
lens_quality_scorer.py 33/33 entries at 100/100 (per-chapter run, floor=100)
build_sqlite.py scripture.db: 102MB, hermeneutic_lenses chapter rows = 442
(= 409 baseline from #1801 + 33 batch 2; matches expected)
validate_sqlite.py 101 passed, 0 failed, 2 warnings (pre-existing embeddings/prompts)

Per-chapter SQLite distribution post-build (chapter_lens_content):

lev11: 3 lev12: 2 lev13: 2 lev14: 3 lev15: 2
lev16: 6 lev17: 4 lev18: 3 lev19: 5 lev20: 3

Plagiarism guards applied

The brief flagged three chapters as iconic-saying-heavy. Anchors deliberately steer off the famous verses:

  • lev16 (DoA): entries anchor on kaphar/kapporet Hebrew (grammatical), the paired-goat type (typological), v 2 once-a-year entry (christocentric), the Hebrews vocabulary (canonical), v 29 self-denial (devotional), vv 29–34 perpetual statute (redemptive). The "scapegoat carries sins away" phrasing is avoided throughout.
  • lev19 (Holiness Code): entries anchor on the structural inclusio (vv 2/37 for the literary lens), the foreigner law (vv 33–34, mission), gleaning laws (vv 9–10, devotional), honest weights (vv 35–36, redemptive). v 18's "love your neighbour" appears once, in the canonical lens, used as a cross-reference launcher into six NT citations rather than as a stand-alone restatement.
  • lev20 (capital cases): entries anchor on the structural penalty-list-then-exhortation shape (literary), v 7's consecration call (canonical), and vv 22–23 land-vomit (redemptive). Molech (vv 2–5) and the separation formula (vv 24–26) are deliberately not the anchor verses.

Themes-panel plagiarism: the themes panel for these chapters is structurally thin (label/score array + a one-line title), so the 60% word-overlap check in the scorer poses minimal risk in practice. Verified by 100/100 per-chapter scores including the relevance dimension.

Filler-pattern guards

All six banned phrases (the lens reveals, this lens shows, through this lens, this passage shows that, this text teaches that, in this chapter we see/learn) verified absent across the 33 entries by an authoring-time regex sweep.

Rubric-token trap watch (carried forward from batch 1)

The lens-name-substring trap was the chief failure mode in #1801. Every entry was authored against the rubric's actual token list (lens_rubrics.json) rather than relying on the lens name. Specifically verified:

  • typological entries use type / pattern / prefigures / foreshadow — never just "typological".
  • canonical entries use canon / canonical / echoes / thread / across Scripture — never just "canonical".
  • christocentric entries name Christ / Jesus / Messiah / gospel explicitly.
  • mission entries use mission / nations / outward (lev19 only).

Length discipline

All entries authored to a 250-char target with 30-char headroom against the 280-char schema ceiling. Actual range: 200–228 chars. Median ~215.

Watch list for tier-2 audit

These are the entries most worth a human spot-check during accuracy auditing:

  1. lev14 typological — the resurrection-pattern reading of the two-bird rite is a defensible (Calvin and Bonar both develop it) but not universal interpretation. Anchor verse vv 4–7 is solid; the "pattern prefigures resurrection" gloss is the interpretive move.
  2. lev16 typological — "Heb 9:6–14 reads the pair as a single anticipation" is a strong claim. Verify the citation supports a single-act reading rather than a sequential one.
  3. lev17 christocentric — "Heb 9:22 cites this verse directly" — Heb 9:22 echoes the principle rather than quoting Lev 17:11 verbatim. The phrasing "cites this verse" is intentional shorthand for quotation-of-principle but could be tightened to "echoes this verse" if a tier-2 reviewer prefers stricter language.
  4. lev19 canonical — the six-citation roster (Mt 22:39, Mk 12:31, Lk 10:27, Rom 13:9, Gal 5:14, Jas 2:8) is a known set; double-check none has been miscredited.

Out of scope

  • No new content generation in content/leviticus/{N}.json itself (only the lens chapter files).
  • No app code changes.
  • No CI workflow changes.
  • scripture.db rebuild is local-only — production R2 upload happens via _tools/upload_to_r2.py post-merge.
  • app/assets/db-manifest.json and app/assets/explore-images.json drift was checked out before staging, per the brief's git checkout -- step.

Rollback

git revert <merge-commit> is sufficient. No schema changes, no migration, no R2 mutation in this PR.

Refs

@github-actions

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation145332 passed, 0 failed
Build DB
DB Integrity101 passed, 0 failed

@github-actions

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 4001❌ 04001
Suites✅ 532❌ 0532

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 75.6s

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.

1 participant

@CraigBuckmaster
, '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

feat(lenses): Leviticus 11-20 lens content, batch 2 of Pentateuch-rest pilot (#820, #1782) - #1802

Merged
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-3-leviticus-11-to-20
May 2, 2026
Merged

feat(lenses): Leviticus 11-20 lens content, batch 2 of Pentateuch-rest pilot (#820, #1782)#1802
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-3-leviticus-11-to-20

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Summary

Batch 2 of the Pentateuch-rest pilot tracked under #1782. Adds 33 hermeneutic-lens entries across Leviticus 11–20, picking up after #1801 (lev1–10).

After this PR, the Lev pilot has 7 chapters left (lev21–lev27) — that's likely batch 3.

Per-chapter distribution (33 total)

ChapterLensesWhy
lev11 (clean/unclean)3canonical, redemptive, typological
lev12 (childbirth purity)2sparse — christocentric, canonical
lev13 (skin disease pt 1)2procedural — grammatical, literary
lev14 (cleansing + house mildew)3typological, christocentric, canonical
lev15 (discharges)2sparse — christocentric, redemptive
lev16 (Day of Atonement)6theology peak — full lens spread
lev17 (life-blood + central altar)4christocentric, canonical, literary, redemptive
lev18 (sexual ethics)3grammatical, canonical, redemptive
lev19 (Holiness Code opener)5theology peak — literary inclusio, mission, devotional, canonical, redemptive
lev20 (capital cases)3literary, canonical, redemptive

Pattern: average 3.3 lenses/chapter across the batch, with the two theological peaks (lev16, lev19) maxed and the procedural chapters (lev12, lev13, lev15) pared back. Mirrors PR #1801's curated-sparse strategy.

Theological highlights

  • lev16 (Day of Atonement, 6 lenses): Hebrew kaphar / kapporet wordplay grammatically; the two-goat paired type prefiguring Christ's single act (Heb 9:6–14); once-a-year veil entry (v 2) framing Heb 9:11–12; the canonical lexicon Hebrews adopts wholesale; v 29's annual self-denial as devotional rhythm; vv 29–34's perpetual statute as the redemptive arc compressed.
  • lev17: v 11's "the life of a creature is in the blood" anchors christocentric (Heb 9:22 cites it directly), canonical (thread to Mt 26:28), literary (vv 1–9 / 10–16 doublet), and redemptive (one altar, one sacrifice).
  • lev19 (Holiness Code, 5 lenses): vv 2/37 inclusio for literary; vv 33–34's love-of-foreigner as outward mission posture; vv 9–10 gleaning as devotional release; v 18's love-of-neighbour echoing across six NT citations (Mt/Mk/Lk/Rom/Gal/Jas) for canonical; vv 35–36 honest weights for redemptive marketplace ethics.
  • lev14: vv 4–7 two-bird rite as resurrection-pattern type; the Mk 1:40–45 leper Christ sent to fulfil this very rite.
  • lev18 + lev20 land-vomit motif: twinned redemptive lenses tying penalty to covenant promise.

Pipeline gate results

schema_validator.py 145332 passed, 0 failed, 19 warnings (pre-existing ESV downloadable warns)
lens_quality_scorer.py 33/33 entries at 100/100 (per-chapter run, floor=100)
build_sqlite.py scripture.db: 102MB, hermeneutic_lenses chapter rows = 442
(= 409 baseline from #1801 + 33 batch 2; matches expected)
validate_sqlite.py 101 passed, 0 failed, 2 warnings (pre-existing embeddings/prompts)

Per-chapter SQLite distribution post-build (chapter_lens_content):

lev11: 3 lev12: 2 lev13: 2 lev14: 3 lev15: 2
lev16: 6 lev17: 4 lev18: 3 lev19: 5 lev20: 3

Plagiarism guards applied

The brief flagged three chapters as iconic-saying-heavy. Anchors deliberately steer off the famous verses:

  • lev16 (DoA): entries anchor on kaphar/kapporet Hebrew (grammatical), the paired-goat type (typological), v 2 once-a-year entry (christocentric), the Hebrews vocabulary (canonical), v 29 self-denial (devotional), vv 29–34 perpetual statute (redemptive). The "scapegoat carries sins away" phrasing is avoided throughout.
  • lev19 (Holiness Code): entries anchor on the structural inclusio (vv 2/37 for the literary lens), the foreigner law (vv 33–34, mission), gleaning laws (vv 9–10, devotional), honest weights (vv 35–36, redemptive). v 18's "love your neighbour" appears once, in the canonical lens, used as a cross-reference launcher into six NT citations rather than as a stand-alone restatement.
  • lev20 (capital cases): entries anchor on the structural penalty-list-then-exhortation shape (literary), v 7's consecration call (canonical), and vv 22–23 land-vomit (redemptive). Molech (vv 2–5) and the separation formula (vv 24–26) are deliberately not the anchor verses.

Themes-panel plagiarism: the themes panel for these chapters is structurally thin (label/score array + a one-line title), so the 60% word-overlap check in the scorer poses minimal risk in practice. Verified by 100/100 per-chapter scores including the relevance dimension.

Filler-pattern guards

All six banned phrases (the lens reveals, this lens shows, through this lens, this passage shows that, this text teaches that, in this chapter we see/learn) verified absent across the 33 entries by an authoring-time regex sweep.

Rubric-token trap watch (carried forward from batch 1)

The lens-name-substring trap was the chief failure mode in #1801. Every entry was authored against the rubric's actual token list (lens_rubrics.json) rather than relying on the lens name. Specifically verified:

  • typological entries use type / pattern / prefigures / foreshadow — never just "typological".
  • canonical entries use canon / canonical / echoes / thread / across Scripture — never just "canonical".
  • christocentric entries name Christ / Jesus / Messiah / gospel explicitly.
  • mission entries use mission / nations / outward (lev19 only).

Length discipline

All entries authored to a 250-char target with 30-char headroom against the 280-char schema ceiling. Actual range: 200–228 chars. Median ~215.

Watch list for tier-2 audit

These are the entries most worth a human spot-check during accuracy auditing:

  1. lev14 typological — the resurrection-pattern reading of the two-bird rite is a defensible (Calvin and Bonar both develop it) but not universal interpretation. Anchor verse vv 4–7 is solid; the "pattern prefigures resurrection" gloss is the interpretive move.
  2. lev16 typological — "Heb 9:6–14 reads the pair as a single anticipation" is a strong claim. Verify the citation supports a single-act reading rather than a sequential one.
  3. lev17 christocentric — "Heb 9:22 cites this verse directly" — Heb 9:22 echoes the principle rather than quoting Lev 17:11 verbatim. The phrasing "cites this verse" is intentional shorthand for quotation-of-principle but could be tightened to "echoes this verse" if a tier-2 reviewer prefers stricter language.
  4. lev19 canonical — the six-citation roster (Mt 22:39, Mk 12:31, Lk 10:27, Rom 13:9, Gal 5:14, Jas 2:8) is a known set; double-check none has been miscredited.

Out of scope

  • No new content generation in content/leviticus/{N}.json itself (only the lens chapter files).
  • No app code changes.
  • No CI workflow changes.
  • scripture.db rebuild is local-only — production R2 upload happens via _tools/upload_to_r2.py post-merge.
  • app/assets/db-manifest.json and app/assets/explore-images.json drift was checked out before staging, per the brief's git checkout -- step.

Rollback

git revert <merge-commit> is sufficient. No schema changes, no migration, no R2 mutation in this PR.

Refs

@github-actions

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation145332 passed, 0 failed
Build DB
DB Integrity101 passed, 0 failed

@github-actions

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 4001❌ 04001
Suites✅ 532❌ 0532

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 75.6s

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.

1 participant

@CraigBuckmaster
, '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

feat(lenses): Leviticus 11-20 lens content, batch 2 of Pentateuch-rest pilot (#820, #1782) - #1802

Merged
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-3-leviticus-11-to-20
May 2, 2026
Merged

feat(lenses): Leviticus 11-20 lens content, batch 2 of Pentateuch-rest pilot (#820, #1782)#1802
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-3-leviticus-11-to-20

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Summary

Batch 2 of the Pentateuch-rest pilot tracked under #1782. Adds 33 hermeneutic-lens entries across Leviticus 11–20, picking up after #1801 (lev1–10).

After this PR, the Lev pilot has 7 chapters left (lev21–lev27) — that's likely batch 3.

Per-chapter distribution (33 total)

ChapterLensesWhy
lev11 (clean/unclean)3canonical, redemptive, typological
lev12 (childbirth purity)2sparse — christocentric, canonical
lev13 (skin disease pt 1)2procedural — grammatical, literary
lev14 (cleansing + house mildew)3typological, christocentric, canonical
lev15 (discharges)2sparse — christocentric, redemptive
lev16 (Day of Atonement)6theology peak — full lens spread
lev17 (life-blood + central altar)4christocentric, canonical, literary, redemptive
lev18 (sexual ethics)3grammatical, canonical, redemptive
lev19 (Holiness Code opener)5theology peak — literary inclusio, mission, devotional, canonical, redemptive
lev20 (capital cases)3literary, canonical, redemptive

Pattern: average 3.3 lenses/chapter across the batch, with the two theological peaks (lev16, lev19) maxed and the procedural chapters (lev12, lev13, lev15) pared back. Mirrors PR #1801's curated-sparse strategy.

Theological highlights

  • lev16 (Day of Atonement, 6 lenses): Hebrew kaphar / kapporet wordplay grammatically; the two-goat paired type prefiguring Christ's single act (Heb 9:6–14); once-a-year veil entry (v 2) framing Heb 9:11–12; the canonical lexicon Hebrews adopts wholesale; v 29's annual self-denial as devotional rhythm; vv 29–34's perpetual statute as the redemptive arc compressed.
  • lev17: v 11's "the life of a creature is in the blood" anchors christocentric (Heb 9:22 cites it directly), canonical (thread to Mt 26:28), literary (vv 1–9 / 10–16 doublet), and redemptive (one altar, one sacrifice).
  • lev19 (Holiness Code, 5 lenses): vv 2/37 inclusio for literary; vv 33–34's love-of-foreigner as outward mission posture; vv 9–10 gleaning as devotional release; v 18's love-of-neighbour echoing across six NT citations (Mt/Mk/Lk/Rom/Gal/Jas) for canonical; vv 35–36 honest weights for redemptive marketplace ethics.
  • lev14: vv 4–7 two-bird rite as resurrection-pattern type; the Mk 1:40–45 leper Christ sent to fulfil this very rite.
  • lev18 + lev20 land-vomit motif: twinned redemptive lenses tying penalty to covenant promise.

Pipeline gate results

schema_validator.py 145332 passed, 0 failed, 19 warnings (pre-existing ESV downloadable warns)
lens_quality_scorer.py 33/33 entries at 100/100 (per-chapter run, floor=100)
build_sqlite.py scripture.db: 102MB, hermeneutic_lenses chapter rows = 442
(= 409 baseline from #1801 + 33 batch 2; matches expected)
validate_sqlite.py 101 passed, 0 failed, 2 warnings (pre-existing embeddings/prompts)

Per-chapter SQLite distribution post-build (chapter_lens_content):

lev11: 3 lev12: 2 lev13: 2 lev14: 3 lev15: 2
lev16: 6 lev17: 4 lev18: 3 lev19: 5 lev20: 3

Plagiarism guards applied

The brief flagged three chapters as iconic-saying-heavy. Anchors deliberately steer off the famous verses:

  • lev16 (DoA): entries anchor on kaphar/kapporet Hebrew (grammatical), the paired-goat type (typological), v 2 once-a-year entry (christocentric), the Hebrews vocabulary (canonical), v 29 self-denial (devotional), vv 29–34 perpetual statute (redemptive). The "scapegoat carries sins away" phrasing is avoided throughout.
  • lev19 (Holiness Code): entries anchor on the structural inclusio (vv 2/37 for the literary lens), the foreigner law (vv 33–34, mission), gleaning laws (vv 9–10, devotional), honest weights (vv 35–36, redemptive). v 18's "love your neighbour" appears once, in the canonical lens, used as a cross-reference launcher into six NT citations rather than as a stand-alone restatement.
  • lev20 (capital cases): entries anchor on the structural penalty-list-then-exhortation shape (literary), v 7's consecration call (canonical), and vv 22–23 land-vomit (redemptive). Molech (vv 2–5) and the separation formula (vv 24–26) are deliberately not the anchor verses.

Themes-panel plagiarism: the themes panel for these chapters is structurally thin (label/score array + a one-line title), so the 60% word-overlap check in the scorer poses minimal risk in practice. Verified by 100/100 per-chapter scores including the relevance dimension.

Filler-pattern guards

All six banned phrases (the lens reveals, this lens shows, through this lens, this passage shows that, this text teaches that, in this chapter we see/learn) verified absent across the 33 entries by an authoring-time regex sweep.

Rubric-token trap watch (carried forward from batch 1)

The lens-name-substring trap was the chief failure mode in #1801. Every entry was authored against the rubric's actual token list (lens_rubrics.json) rather than relying on the lens name. Specifically verified:

  • typological entries use type / pattern / prefigures / foreshadow — never just "typological".
  • canonical entries use canon / canonical / echoes / thread / across Scripture — never just "canonical".
  • christocentric entries name Christ / Jesus / Messiah / gospel explicitly.
  • mission entries use mission / nations / outward (lev19 only).

Length discipline

All entries authored to a 250-char target with 30-char headroom against the 280-char schema ceiling. Actual range: 200–228 chars. Median ~215.

Watch list for tier-2 audit

These are the entries most worth a human spot-check during accuracy auditing:

  1. lev14 typological — the resurrection-pattern reading of the two-bird rite is a defensible (Calvin and Bonar both develop it) but not universal interpretation. Anchor verse vv 4–7 is solid; the "pattern prefigures resurrection" gloss is the interpretive move.
  2. lev16 typological — "Heb 9:6–14 reads the pair as a single anticipation" is a strong claim. Verify the citation supports a single-act reading rather than a sequential one.
  3. lev17 christocentric — "Heb 9:22 cites this verse directly" — Heb 9:22 echoes the principle rather than quoting Lev 17:11 verbatim. The phrasing "cites this verse" is intentional shorthand for quotation-of-principle but could be tightened to "echoes this verse" if a tier-2 reviewer prefers stricter language.
  4. lev19 canonical — the six-citation roster (Mt 22:39, Mk 12:31, Lk 10:27, Rom 13:9, Gal 5:14, Jas 2:8) is a known set; double-check none has been miscredited.

Out of scope

  • No new content generation in content/leviticus/{N}.json itself (only the lens chapter files).
  • No app code changes.
  • No CI workflow changes.
  • scripture.db rebuild is local-only — production R2 upload happens via _tools/upload_to_r2.py post-merge.
  • app/assets/db-manifest.json and app/assets/explore-images.json drift was checked out before staging, per the brief's git checkout -- step.

Rollback

git revert <merge-commit> is sufficient. No schema changes, no migration, no R2 mutation in this PR.

Refs

@github-actions

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation145332 passed, 0 failed
Build DB
DB Integrity101 passed, 0 failed

@github-actions

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 4001❌ 04001
Suites✅ 532❌ 0532

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 75.6s

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.

1 participant

@CraigBuckmaster
, '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

feat(lenses): Leviticus 11-20 lens content, batch 2 of Pentateuch-rest pilot (#820, #1782) - #1802

Merged
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-3-leviticus-11-to-20
May 2, 2026
Merged

feat(lenses): Leviticus 11-20 lens content, batch 2 of Pentateuch-rest pilot (#820, #1782)#1802
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-3-leviticus-11-to-20

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Summary

Batch 2 of the Pentateuch-rest pilot tracked under #1782. Adds 33 hermeneutic-lens entries across Leviticus 11–20, picking up after #1801 (lev1–10).

After this PR, the Lev pilot has 7 chapters left (lev21–lev27) — that's likely batch 3.

Per-chapter distribution (33 total)

ChapterLensesWhy
lev11 (clean/unclean)3canonical, redemptive, typological
lev12 (childbirth purity)2sparse — christocentric, canonical
lev13 (skin disease pt 1)2procedural — grammatical, literary
lev14 (cleansing + house mildew)3typological, christocentric, canonical
lev15 (discharges)2sparse — christocentric, redemptive
lev16 (Day of Atonement)6theology peak — full lens spread
lev17 (life-blood + central altar)4christocentric, canonical, literary, redemptive
lev18 (sexual ethics)3grammatical, canonical, redemptive
lev19 (Holiness Code opener)5theology peak — literary inclusio, mission, devotional, canonical, redemptive
lev20 (capital cases)3literary, canonical, redemptive

Pattern: average 3.3 lenses/chapter across the batch, with the two theological peaks (lev16, lev19) maxed and the procedural chapters (lev12, lev13, lev15) pared back. Mirrors PR #1801's curated-sparse strategy.

Theological highlights

  • lev16 (Day of Atonement, 6 lenses): Hebrew kaphar / kapporet wordplay grammatically; the two-goat paired type prefiguring Christ's single act (Heb 9:6–14); once-a-year veil entry (v 2) framing Heb 9:11–12; the canonical lexicon Hebrews adopts wholesale; v 29's annual self-denial as devotional rhythm; vv 29–34's perpetual statute as the redemptive arc compressed.
  • lev17: v 11's "the life of a creature is in the blood" anchors christocentric (Heb 9:22 cites it directly), canonical (thread to Mt 26:28), literary (vv 1–9 / 10–16 doublet), and redemptive (one altar, one sacrifice).
  • lev19 (Holiness Code, 5 lenses): vv 2/37 inclusio for literary; vv 33–34's love-of-foreigner as outward mission posture; vv 9–10 gleaning as devotional release; v 18's love-of-neighbour echoing across six NT citations (Mt/Mk/Lk/Rom/Gal/Jas) for canonical; vv 35–36 honest weights for redemptive marketplace ethics.
  • lev14: vv 4–7 two-bird rite as resurrection-pattern type; the Mk 1:40–45 leper Christ sent to fulfil this very rite.
  • lev18 + lev20 land-vomit motif: twinned redemptive lenses tying penalty to covenant promise.

Pipeline gate results

schema_validator.py 145332 passed, 0 failed, 19 warnings (pre-existing ESV downloadable warns)
lens_quality_scorer.py 33/33 entries at 100/100 (per-chapter run, floor=100)
build_sqlite.py scripture.db: 102MB, hermeneutic_lenses chapter rows = 442
(= 409 baseline from #1801 + 33 batch 2; matches expected)
validate_sqlite.py 101 passed, 0 failed, 2 warnings (pre-existing embeddings/prompts)

Per-chapter SQLite distribution post-build (chapter_lens_content):

lev11: 3 lev12: 2 lev13: 2 lev14: 3 lev15: 2
lev16: 6 lev17: 4 lev18: 3 lev19: 5 lev20: 3

Plagiarism guards applied

The brief flagged three chapters as iconic-saying-heavy. Anchors deliberately steer off the famous verses:

  • lev16 (DoA): entries anchor on kaphar/kapporet Hebrew (grammatical), the paired-goat type (typological), v 2 once-a-year entry (christocentric), the Hebrews vocabulary (canonical), v 29 self-denial (devotional), vv 29–34 perpetual statute (redemptive). The "scapegoat carries sins away" phrasing is avoided throughout.
  • lev19 (Holiness Code): entries anchor on the structural inclusio (vv 2/37 for the literary lens), the foreigner law (vv 33–34, mission), gleaning laws (vv 9–10, devotional), honest weights (vv 35–36, redemptive). v 18's "love your neighbour" appears once, in the canonical lens, used as a cross-reference launcher into six NT citations rather than as a stand-alone restatement.
  • lev20 (capital cases): entries anchor on the structural penalty-list-then-exhortation shape (literary), v 7's consecration call (canonical), and vv 22–23 land-vomit (redemptive). Molech (vv 2–5) and the separation formula (vv 24–26) are deliberately not the anchor verses.

Themes-panel plagiarism: the themes panel for these chapters is structurally thin (label/score array + a one-line title), so the 60% word-overlap check in the scorer poses minimal risk in practice. Verified by 100/100 per-chapter scores including the relevance dimension.

Filler-pattern guards

All six banned phrases (the lens reveals, this lens shows, through this lens, this passage shows that, this text teaches that, in this chapter we see/learn) verified absent across the 33 entries by an authoring-time regex sweep.

Rubric-token trap watch (carried forward from batch 1)

The lens-name-substring trap was the chief failure mode in #1801. Every entry was authored against the rubric's actual token list (lens_rubrics.json) rather than relying on the lens name. Specifically verified:

  • typological entries use type / pattern / prefigures / foreshadow — never just "typological".
  • canonical entries use canon / canonical / echoes / thread / across Scripture — never just "canonical".
  • christocentric entries name Christ / Jesus / Messiah / gospel explicitly.
  • mission entries use mission / nations / outward (lev19 only).

Length discipline

All entries authored to a 250-char target with 30-char headroom against the 280-char schema ceiling. Actual range: 200–228 chars. Median ~215.

Watch list for tier-2 audit

These are the entries most worth a human spot-check during accuracy auditing:

  1. lev14 typological — the resurrection-pattern reading of the two-bird rite is a defensible (Calvin and Bonar both develop it) but not universal interpretation. Anchor verse vv 4–7 is solid; the "pattern prefigures resurrection" gloss is the interpretive move.
  2. lev16 typological — "Heb 9:6–14 reads the pair as a single anticipation" is a strong claim. Verify the citation supports a single-act reading rather than a sequential one.
  3. lev17 christocentric — "Heb 9:22 cites this verse directly" — Heb 9:22 echoes the principle rather than quoting Lev 17:11 verbatim. The phrasing "cites this verse" is intentional shorthand for quotation-of-principle but could be tightened to "echoes this verse" if a tier-2 reviewer prefers stricter language.
  4. lev19 canonical — the six-citation roster (Mt 22:39, Mk 12:31, Lk 10:27, Rom 13:9, Gal 5:14, Jas 2:8) is a known set; double-check none has been miscredited.

Out of scope

  • No new content generation in content/leviticus/{N}.json itself (only the lens chapter files).
  • No app code changes.
  • No CI workflow changes.
  • scripture.db rebuild is local-only — production R2 upload happens via _tools/upload_to_r2.py post-merge.
  • app/assets/db-manifest.json and app/assets/explore-images.json drift was checked out before staging, per the brief's git checkout -- step.

Rollback

git revert <merge-commit> is sufficient. No schema changes, no migration, no R2 mutation in this PR.

Refs

@github-actions

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation145332 passed, 0 failed
Build DB
DB Integrity101 passed, 0 failed

@github-actions

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 4001❌ 04001
Suites✅ 532❌ 0532

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 75.6s

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.

1 participant

@CraigBuckmaster
, '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

feat(lenses): Leviticus 11-20 lens content, batch 2 of Pentateuch-rest pilot (#820, #1782) - #1802

Merged
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-3-leviticus-11-to-20
May 2, 2026
Merged

feat(lenses): Leviticus 11-20 lens content, batch 2 of Pentateuch-rest pilot (#820, #1782)#1802
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-3-leviticus-11-to-20

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Summary

Batch 2 of the Pentateuch-rest pilot tracked under #1782. Adds 33 hermeneutic-lens entries across Leviticus 11–20, picking up after #1801 (lev1–10).

After this PR, the Lev pilot has 7 chapters left (lev21–lev27) — that's likely batch 3.

Per-chapter distribution (33 total)

ChapterLensesWhy
lev11 (clean/unclean)3canonical, redemptive, typological
lev12 (childbirth purity)2sparse — christocentric, canonical
lev13 (skin disease pt 1)2procedural — grammatical, literary
lev14 (cleansing + house mildew)3typological, christocentric, canonical
lev15 (discharges)2sparse — christocentric, redemptive
lev16 (Day of Atonement)6theology peak — full lens spread
lev17 (life-blood + central altar)4christocentric, canonical, literary, redemptive
lev18 (sexual ethics)3grammatical, canonical, redemptive
lev19 (Holiness Code opener)5theology peak — literary inclusio, mission, devotional, canonical, redemptive
lev20 (capital cases)3literary, canonical, redemptive

Pattern: average 3.3 lenses/chapter across the batch, with the two theological peaks (lev16, lev19) maxed and the procedural chapters (lev12, lev13, lev15) pared back. Mirrors PR #1801's curated-sparse strategy.

Theological highlights

  • lev16 (Day of Atonement, 6 lenses): Hebrew kaphar / kapporet wordplay grammatically; the two-goat paired type prefiguring Christ's single act (Heb 9:6–14); once-a-year veil entry (v 2) framing Heb 9:11–12; the canonical lexicon Hebrews adopts wholesale; v 29's annual self-denial as devotional rhythm; vv 29–34's perpetual statute as the redemptive arc compressed.
  • lev17: v 11's "the life of a creature is in the blood" anchors christocentric (Heb 9:22 cites it directly), canonical (thread to Mt 26:28), literary (vv 1–9 / 10–16 doublet), and redemptive (one altar, one sacrifice).
  • lev19 (Holiness Code, 5 lenses): vv 2/37 inclusio for literary; vv 33–34's love-of-foreigner as outward mission posture; vv 9–10 gleaning as devotional release; v 18's love-of-neighbour echoing across six NT citations (Mt/Mk/Lk/Rom/Gal/Jas) for canonical; vv 35–36 honest weights for redemptive marketplace ethics.
  • lev14: vv 4–7 two-bird rite as resurrection-pattern type; the Mk 1:40–45 leper Christ sent to fulfil this very rite.
  • lev18 + lev20 land-vomit motif: twinned redemptive lenses tying penalty to covenant promise.

Pipeline gate results

schema_validator.py 145332 passed, 0 failed, 19 warnings (pre-existing ESV downloadable warns)
lens_quality_scorer.py 33/33 entries at 100/100 (per-chapter run, floor=100)
build_sqlite.py scripture.db: 102MB, hermeneutic_lenses chapter rows = 442
(= 409 baseline from #1801 + 33 batch 2; matches expected)
validate_sqlite.py 101 passed, 0 failed, 2 warnings (pre-existing embeddings/prompts)

Per-chapter SQLite distribution post-build (chapter_lens_content):

lev11: 3 lev12: 2 lev13: 2 lev14: 3 lev15: 2
lev16: 6 lev17: 4 lev18: 3 lev19: 5 lev20: 3

Plagiarism guards applied

The brief flagged three chapters as iconic-saying-heavy. Anchors deliberately steer off the famous verses:

  • lev16 (DoA): entries anchor on kaphar/kapporet Hebrew (grammatical), the paired-goat type (typological), v 2 once-a-year entry (christocentric), the Hebrews vocabulary (canonical), v 29 self-denial (devotional), vv 29–34 perpetual statute (redemptive). The "scapegoat carries sins away" phrasing is avoided throughout.
  • lev19 (Holiness Code): entries anchor on the structural inclusio (vv 2/37 for the literary lens), the foreigner law (vv 33–34, mission), gleaning laws (vv 9–10, devotional), honest weights (vv 35–36, redemptive). v 18's "love your neighbour" appears once, in the canonical lens, used as a cross-reference launcher into six NT citations rather than as a stand-alone restatement.
  • lev20 (capital cases): entries anchor on the structural penalty-list-then-exhortation shape (literary), v 7's consecration call (canonical), and vv 22–23 land-vomit (redemptive). Molech (vv 2–5) and the separation formula (vv 24–26) are deliberately not the anchor verses.

Themes-panel plagiarism: the themes panel for these chapters is structurally thin (label/score array + a one-line title), so the 60% word-overlap check in the scorer poses minimal risk in practice. Verified by 100/100 per-chapter scores including the relevance dimension.

Filler-pattern guards

All six banned phrases (the lens reveals, this lens shows, through this lens, this passage shows that, this text teaches that, in this chapter we see/learn) verified absent across the 33 entries by an authoring-time regex sweep.

Rubric-token trap watch (carried forward from batch 1)

The lens-name-substring trap was the chief failure mode in #1801. Every entry was authored against the rubric's actual token list (lens_rubrics.json) rather than relying on the lens name. Specifically verified:

  • typological entries use type / pattern / prefigures / foreshadow — never just "typological".
  • canonical entries use canon / canonical / echoes / thread / across Scripture — never just "canonical".
  • christocentric entries name Christ / Jesus / Messiah / gospel explicitly.
  • mission entries use mission / nations / outward (lev19 only).

Length discipline

All entries authored to a 250-char target with 30-char headroom against the 280-char schema ceiling. Actual range: 200–228 chars. Median ~215.

Watch list for tier-2 audit

These are the entries most worth a human spot-check during accuracy auditing:

  1. lev14 typological — the resurrection-pattern reading of the two-bird rite is a defensible (Calvin and Bonar both develop it) but not universal interpretation. Anchor verse vv 4–7 is solid; the "pattern prefigures resurrection" gloss is the interpretive move.
  2. lev16 typological — "Heb 9:6–14 reads the pair as a single anticipation" is a strong claim. Verify the citation supports a single-act reading rather than a sequential one.
  3. lev17 christocentric — "Heb 9:22 cites this verse directly" — Heb 9:22 echoes the principle rather than quoting Lev 17:11 verbatim. The phrasing "cites this verse" is intentional shorthand for quotation-of-principle but could be tightened to "echoes this verse" if a tier-2 reviewer prefers stricter language.
  4. lev19 canonical — the six-citation roster (Mt 22:39, Mk 12:31, Lk 10:27, Rom 13:9, Gal 5:14, Jas 2:8) is a known set; double-check none has been miscredited.

Out of scope

  • No new content generation in content/leviticus/{N}.json itself (only the lens chapter files).
  • No app code changes.
  • No CI workflow changes.
  • scripture.db rebuild is local-only — production R2 upload happens via _tools/upload_to_r2.py post-merge.
  • app/assets/db-manifest.json and app/assets/explore-images.json drift was checked out before staging, per the brief's git checkout -- step.

Rollback

git revert <merge-commit> is sufficient. No schema changes, no migration, no R2 mutation in this PR.

Refs

@github-actions

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation145332 passed, 0 failed
Build DB
DB Integrity101 passed, 0 failed

@github-actions

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 4001❌ 04001
Suites✅ 532❌ 0532

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 75.6s

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.

1 participant

@CraigBuckmaster
, '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

feat(lenses): Leviticus 11-20 lens content, batch 2 of Pentateuch-rest pilot (#820, #1782) - #1802

Merged
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-3-leviticus-11-to-20
May 2, 2026
Merged

feat(lenses): Leviticus 11-20 lens content, batch 2 of Pentateuch-rest pilot (#820, #1782)#1802
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-3-leviticus-11-to-20

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Summary

Batch 2 of the Pentateuch-rest pilot tracked under #1782. Adds 33 hermeneutic-lens entries across Leviticus 11–20, picking up after #1801 (lev1–10).

After this PR, the Lev pilot has 7 chapters left (lev21–lev27) — that's likely batch 3.

Per-chapter distribution (33 total)

ChapterLensesWhy
lev11 (clean/unclean)3canonical, redemptive, typological
lev12 (childbirth purity)2sparse — christocentric, canonical
lev13 (skin disease pt 1)2procedural — grammatical, literary
lev14 (cleansing + house mildew)3typological, christocentric, canonical
lev15 (discharges)2sparse — christocentric, redemptive
lev16 (Day of Atonement)6theology peak — full lens spread
lev17 (life-blood + central altar)4christocentric, canonical, literary, redemptive
lev18 (sexual ethics)3grammatical, canonical, redemptive
lev19 (Holiness Code opener)5theology peak — literary inclusio, mission, devotional, canonical, redemptive
lev20 (capital cases)3literary, canonical, redemptive

Pattern: average 3.3 lenses/chapter across the batch, with the two theological peaks (lev16, lev19) maxed and the procedural chapters (lev12, lev13, lev15) pared back. Mirrors PR #1801's curated-sparse strategy.

Theological highlights

  • lev16 (Day of Atonement, 6 lenses): Hebrew kaphar / kapporet wordplay grammatically; the two-goat paired type prefiguring Christ's single act (Heb 9:6–14); once-a-year veil entry (v 2) framing Heb 9:11–12; the canonical lexicon Hebrews adopts wholesale; v 29's annual self-denial as devotional rhythm; vv 29–34's perpetual statute as the redemptive arc compressed.
  • lev17: v 11's "the life of a creature is in the blood" anchors christocentric (Heb 9:22 cites it directly), canonical (thread to Mt 26:28), literary (vv 1–9 / 10–16 doublet), and redemptive (one altar, one sacrifice).
  • lev19 (Holiness Code, 5 lenses): vv 2/37 inclusio for literary; vv 33–34's love-of-foreigner as outward mission posture; vv 9–10 gleaning as devotional release; v 18's love-of-neighbour echoing across six NT citations (Mt/Mk/Lk/Rom/Gal/Jas) for canonical; vv 35–36 honest weights for redemptive marketplace ethics.
  • lev14: vv 4–7 two-bird rite as resurrection-pattern type; the Mk 1:40–45 leper Christ sent to fulfil this very rite.
  • lev18 + lev20 land-vomit motif: twinned redemptive lenses tying penalty to covenant promise.

Pipeline gate results

schema_validator.py 145332 passed, 0 failed, 19 warnings (pre-existing ESV downloadable warns)
lens_quality_scorer.py 33/33 entries at 100/100 (per-chapter run, floor=100)
build_sqlite.py scripture.db: 102MB, hermeneutic_lenses chapter rows = 442
(= 409 baseline from #1801 + 33 batch 2; matches expected)
validate_sqlite.py 101 passed, 0 failed, 2 warnings (pre-existing embeddings/prompts)

Per-chapter SQLite distribution post-build (chapter_lens_content):

lev11: 3 lev12: 2 lev13: 2 lev14: 3 lev15: 2
lev16: 6 lev17: 4 lev18: 3 lev19: 5 lev20: 3

Plagiarism guards applied

The brief flagged three chapters as iconic-saying-heavy. Anchors deliberately steer off the famous verses:

  • lev16 (DoA): entries anchor on kaphar/kapporet Hebrew (grammatical), the paired-goat type (typological), v 2 once-a-year entry (christocentric), the Hebrews vocabulary (canonical), v 29 self-denial (devotional), vv 29–34 perpetual statute (redemptive). The "scapegoat carries sins away" phrasing is avoided throughout.
  • lev19 (Holiness Code): entries anchor on the structural inclusio (vv 2/37 for the literary lens), the foreigner law (vv 33–34, mission), gleaning laws (vv 9–10, devotional), honest weights (vv 35–36, redemptive). v 18's "love your neighbour" appears once, in the canonical lens, used as a cross-reference launcher into six NT citations rather than as a stand-alone restatement.
  • lev20 (capital cases): entries anchor on the structural penalty-list-then-exhortation shape (literary), v 7's consecration call (canonical), and vv 22–23 land-vomit (redemptive). Molech (vv 2–5) and the separation formula (vv 24–26) are deliberately not the anchor verses.

Themes-panel plagiarism: the themes panel for these chapters is structurally thin (label/score array + a one-line title), so the 60% word-overlap check in the scorer poses minimal risk in practice. Verified by 100/100 per-chapter scores including the relevance dimension.

Filler-pattern guards

All six banned phrases (the lens reveals, this lens shows, through this lens, this passage shows that, this text teaches that, in this chapter we see/learn) verified absent across the 33 entries by an authoring-time regex sweep.

Rubric-token trap watch (carried forward from batch 1)

The lens-name-substring trap was the chief failure mode in #1801. Every entry was authored against the rubric's actual token list (lens_rubrics.json) rather than relying on the lens name. Specifically verified:

  • typological entries use type / pattern / prefigures / foreshadow — never just "typological".
  • canonical entries use canon / canonical / echoes / thread / across Scripture — never just "canonical".
  • christocentric entries name Christ / Jesus / Messiah / gospel explicitly.
  • mission entries use mission / nations / outward (lev19 only).

Length discipline

All entries authored to a 250-char target with 30-char headroom against the 280-char schema ceiling. Actual range: 200–228 chars. Median ~215.

Watch list for tier-2 audit

These are the entries most worth a human spot-check during accuracy auditing:

  1. lev14 typological — the resurrection-pattern reading of the two-bird rite is a defensible (Calvin and Bonar both develop it) but not universal interpretation. Anchor verse vv 4–7 is solid; the "pattern prefigures resurrection" gloss is the interpretive move.
  2. lev16 typological — "Heb 9:6–14 reads the pair as a single anticipation" is a strong claim. Verify the citation supports a single-act reading rather than a sequential one.
  3. lev17 christocentric — "Heb 9:22 cites this verse directly" — Heb 9:22 echoes the principle rather than quoting Lev 17:11 verbatim. The phrasing "cites this verse" is intentional shorthand for quotation-of-principle but could be tightened to "echoes this verse" if a tier-2 reviewer prefers stricter language.
  4. lev19 canonical — the six-citation roster (Mt 22:39, Mk 12:31, Lk 10:27, Rom 13:9, Gal 5:14, Jas 2:8) is a known set; double-check none has been miscredited.

Out of scope

  • No new content generation in content/leviticus/{N}.json itself (only the lens chapter files).
  • No app code changes.
  • No CI workflow changes.
  • scripture.db rebuild is local-only — production R2 upload happens via _tools/upload_to_r2.py post-merge.
  • app/assets/db-manifest.json and app/assets/explore-images.json drift was checked out before staging, per the brief's git checkout -- step.

Rollback

git revert <merge-commit> is sufficient. No schema changes, no migration, no R2 mutation in this PR.

Refs

@github-actions

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation145332 passed, 0 failed
Build DB
DB Integrity101 passed, 0 failed

@github-actions

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 4001❌ 04001
Suites✅ 532❌ 0532

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 75.6s

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.

1 participant

@CraigBuckmaster
, '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

feat(lenses): Leviticus 11-20 lens content, batch 2 of Pentateuch-rest pilot (#820, #1782) - #1802

Merged
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-3-leviticus-11-to-20
May 2, 2026
Merged

feat(lenses): Leviticus 11-20 lens content, batch 2 of Pentateuch-rest pilot (#820, #1782)#1802
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-3-leviticus-11-to-20

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Summary

Batch 2 of the Pentateuch-rest pilot tracked under #1782. Adds 33 hermeneutic-lens entries across Leviticus 11–20, picking up after #1801 (lev1–10).

After this PR, the Lev pilot has 7 chapters left (lev21–lev27) — that's likely batch 3.

Per-chapter distribution (33 total)

ChapterLensesWhy
lev11 (clean/unclean)3canonical, redemptive, typological
lev12 (childbirth purity)2sparse — christocentric, canonical
lev13 (skin disease pt 1)2procedural — grammatical, literary
lev14 (cleansing + house mildew)3typological, christocentric, canonical
lev15 (discharges)2sparse — christocentric, redemptive
lev16 (Day of Atonement)6theology peak — full lens spread
lev17 (life-blood + central altar)4christocentric, canonical, literary, redemptive
lev18 (sexual ethics)3grammatical, canonical, redemptive
lev19 (Holiness Code opener)5theology peak — literary inclusio, mission, devotional, canonical, redemptive
lev20 (capital cases)3literary, canonical, redemptive

Pattern: average 3.3 lenses/chapter across the batch, with the two theological peaks (lev16, lev19) maxed and the procedural chapters (lev12, lev13, lev15) pared back. Mirrors PR #1801's curated-sparse strategy.

Theological highlights

  • lev16 (Day of Atonement, 6 lenses): Hebrew kaphar / kapporet wordplay grammatically; the two-goat paired type prefiguring Christ's single act (Heb 9:6–14); once-a-year veil entry (v 2) framing Heb 9:11–12; the canonical lexicon Hebrews adopts wholesale; v 29's annual self-denial as devotional rhythm; vv 29–34's perpetual statute as the redemptive arc compressed.
  • lev17: v 11's "the life of a creature is in the blood" anchors christocentric (Heb 9:22 cites it directly), canonical (thread to Mt 26:28), literary (vv 1–9 / 10–16 doublet), and redemptive (one altar, one sacrifice).
  • lev19 (Holiness Code, 5 lenses): vv 2/37 inclusio for literary; vv 33–34's love-of-foreigner as outward mission posture; vv 9–10 gleaning as devotional release; v 18's love-of-neighbour echoing across six NT citations (Mt/Mk/Lk/Rom/Gal/Jas) for canonical; vv 35–36 honest weights for redemptive marketplace ethics.
  • lev14: vv 4–7 two-bird rite as resurrection-pattern type; the Mk 1:40–45 leper Christ sent to fulfil this very rite.
  • lev18 + lev20 land-vomit motif: twinned redemptive lenses tying penalty to covenant promise.

Pipeline gate results

schema_validator.py 145332 passed, 0 failed, 19 warnings (pre-existing ESV downloadable warns)
lens_quality_scorer.py 33/33 entries at 100/100 (per-chapter run, floor=100)
build_sqlite.py scripture.db: 102MB, hermeneutic_lenses chapter rows = 442
(= 409 baseline from #1801 + 33 batch 2; matches expected)
validate_sqlite.py 101 passed, 0 failed, 2 warnings (pre-existing embeddings/prompts)

Per-chapter SQLite distribution post-build (chapter_lens_content):

lev11: 3 lev12: 2 lev13: 2 lev14: 3 lev15: 2
lev16: 6 lev17: 4 lev18: 3 lev19: 5 lev20: 3

Plagiarism guards applied

The brief flagged three chapters as iconic-saying-heavy. Anchors deliberately steer off the famous verses:

  • lev16 (DoA): entries anchor on kaphar/kapporet Hebrew (grammatical), the paired-goat type (typological), v 2 once-a-year entry (christocentric), the Hebrews vocabulary (canonical), v 29 self-denial (devotional), vv 29–34 perpetual statute (redemptive). The "scapegoat carries sins away" phrasing is avoided throughout.
  • lev19 (Holiness Code): entries anchor on the structural inclusio (vv 2/37 for the literary lens), the foreigner law (vv 33–34, mission), gleaning laws (vv 9–10, devotional), honest weights (vv 35–36, redemptive). v 18's "love your neighbour" appears once, in the canonical lens, used as a cross-reference launcher into six NT citations rather than as a stand-alone restatement.
  • lev20 (capital cases): entries anchor on the structural penalty-list-then-exhortation shape (literary), v 7's consecration call (canonical), and vv 22–23 land-vomit (redemptive). Molech (vv 2–5) and the separation formula (vv 24–26) are deliberately not the anchor verses.

Themes-panel plagiarism: the themes panel for these chapters is structurally thin (label/score array + a one-line title), so the 60% word-overlap check in the scorer poses minimal risk in practice. Verified by 100/100 per-chapter scores including the relevance dimension.

Filler-pattern guards

All six banned phrases (the lens reveals, this lens shows, through this lens, this passage shows that, this text teaches that, in this chapter we see/learn) verified absent across the 33 entries by an authoring-time regex sweep.

Rubric-token trap watch (carried forward from batch 1)

The lens-name-substring trap was the chief failure mode in #1801. Every entry was authored against the rubric's actual token list (lens_rubrics.json) rather than relying on the lens name. Specifically verified:

  • typological entries use type / pattern / prefigures / foreshadow — never just "typological".
  • canonical entries use canon / canonical / echoes / thread / across Scripture — never just "canonical".
  • christocentric entries name Christ / Jesus / Messiah / gospel explicitly.
  • mission entries use mission / nations / outward (lev19 only).

Length discipline

All entries authored to a 250-char target with 30-char headroom against the 280-char schema ceiling. Actual range: 200–228 chars. Median ~215.

Watch list for tier-2 audit

These are the entries most worth a human spot-check during accuracy auditing:

  1. lev14 typological — the resurrection-pattern reading of the two-bird rite is a defensible (Calvin and Bonar both develop it) but not universal interpretation. Anchor verse vv 4–7 is solid; the "pattern prefigures resurrection" gloss is the interpretive move.
  2. lev16 typological — "Heb 9:6–14 reads the pair as a single anticipation" is a strong claim. Verify the citation supports a single-act reading rather than a sequential one.
  3. lev17 christocentric — "Heb 9:22 cites this verse directly" — Heb 9:22 echoes the principle rather than quoting Lev 17:11 verbatim. The phrasing "cites this verse" is intentional shorthand for quotation-of-principle but could be tightened to "echoes this verse" if a tier-2 reviewer prefers stricter language.
  4. lev19 canonical — the six-citation roster (Mt 22:39, Mk 12:31, Lk 10:27, Rom 13:9, Gal 5:14, Jas 2:8) is a known set; double-check none has been miscredited.

Out of scope

  • No new content generation in content/leviticus/{N}.json itself (only the lens chapter files).
  • No app code changes.
  • No CI workflow changes.
  • scripture.db rebuild is local-only — production R2 upload happens via _tools/upload_to_r2.py post-merge.
  • app/assets/db-manifest.json and app/assets/explore-images.json drift was checked out before staging, per the brief's git checkout -- step.

Rollback

git revert <merge-commit> is sufficient. No schema changes, no migration, no R2 mutation in this PR.

Refs

@github-actions

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation145332 passed, 0 failed
Build DB
DB Integrity101 passed, 0 failed

@github-actions

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 4001❌ 04001
Suites✅ 532❌ 0532

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 75.6s

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.

1 participant

@CraigBuckmaster
, '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

feat(lenses): Leviticus 11-20 lens content, batch 2 of Pentateuch-rest pilot (#820, #1782) - #1802

Merged
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-3-leviticus-11-to-20
May 2, 2026
Merged

feat(lenses): Leviticus 11-20 lens content, batch 2 of Pentateuch-rest pilot (#820, #1782)#1802
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-3-leviticus-11-to-20

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Summary

Batch 2 of the Pentateuch-rest pilot tracked under #1782. Adds 33 hermeneutic-lens entries across Leviticus 11–20, picking up after #1801 (lev1–10).

After this PR, the Lev pilot has 7 chapters left (lev21–lev27) — that's likely batch 3.

Per-chapter distribution (33 total)

ChapterLensesWhy
lev11 (clean/unclean)3canonical, redemptive, typological
lev12 (childbirth purity)2sparse — christocentric, canonical
lev13 (skin disease pt 1)2procedural — grammatical, literary
lev14 (cleansing + house mildew)3typological, christocentric, canonical
lev15 (discharges)2sparse — christocentric, redemptive
lev16 (Day of Atonement)6theology peak — full lens spread
lev17 (life-blood + central altar)4christocentric, canonical, literary, redemptive
lev18 (sexual ethics)3grammatical, canonical, redemptive
lev19 (Holiness Code opener)5theology peak — literary inclusio, mission, devotional, canonical, redemptive
lev20 (capital cases)3literary, canonical, redemptive

Pattern: average 3.3 lenses/chapter across the batch, with the two theological peaks (lev16, lev19) maxed and the procedural chapters (lev12, lev13, lev15) pared back. Mirrors PR #1801's curated-sparse strategy.

Theological highlights

  • lev16 (Day of Atonement, 6 lenses): Hebrew kaphar / kapporet wordplay grammatically; the two-goat paired type prefiguring Christ's single act (Heb 9:6–14); once-a-year veil entry (v 2) framing Heb 9:11–12; the canonical lexicon Hebrews adopts wholesale; v 29's annual self-denial as devotional rhythm; vv 29–34's perpetual statute as the redemptive arc compressed.
  • lev17: v 11's "the life of a creature is in the blood" anchors christocentric (Heb 9:22 cites it directly), canonical (thread to Mt 26:28), literary (vv 1–9 / 10–16 doublet), and redemptive (one altar, one sacrifice).
  • lev19 (Holiness Code, 5 lenses): vv 2/37 inclusio for literary; vv 33–34's love-of-foreigner as outward mission posture; vv 9–10 gleaning as devotional release; v 18's love-of-neighbour echoing across six NT citations (Mt/Mk/Lk/Rom/Gal/Jas) for canonical; vv 35–36 honest weights for redemptive marketplace ethics.
  • lev14: vv 4–7 two-bird rite as resurrection-pattern type; the Mk 1:40–45 leper Christ sent to fulfil this very rite.
  • lev18 + lev20 land-vomit motif: twinned redemptive lenses tying penalty to covenant promise.

Pipeline gate results

schema_validator.py 145332 passed, 0 failed, 19 warnings (pre-existing ESV downloadable warns)
lens_quality_scorer.py 33/33 entries at 100/100 (per-chapter run, floor=100)
build_sqlite.py scripture.db: 102MB, hermeneutic_lenses chapter rows = 442
(= 409 baseline from #1801 + 33 batch 2; matches expected)
validate_sqlite.py 101 passed, 0 failed, 2 warnings (pre-existing embeddings/prompts)

Per-chapter SQLite distribution post-build (chapter_lens_content):

lev11: 3 lev12: 2 lev13: 2 lev14: 3 lev15: 2
lev16: 6 lev17: 4 lev18: 3 lev19: 5 lev20: 3

Plagiarism guards applied

The brief flagged three chapters as iconic-saying-heavy. Anchors deliberately steer off the famous verses:

  • lev16 (DoA): entries anchor on kaphar/kapporet Hebrew (grammatical), the paired-goat type (typological), v 2 once-a-year entry (christocentric), the Hebrews vocabulary (canonical), v 29 self-denial (devotional), vv 29–34 perpetual statute (redemptive). The "scapegoat carries sins away" phrasing is avoided throughout.
  • lev19 (Holiness Code): entries anchor on the structural inclusio (vv 2/37 for the literary lens), the foreigner law (vv 33–34, mission), gleaning laws (vv 9–10, devotional), honest weights (vv 35–36, redemptive). v 18's "love your neighbour" appears once, in the canonical lens, used as a cross-reference launcher into six NT citations rather than as a stand-alone restatement.
  • lev20 (capital cases): entries anchor on the structural penalty-list-then-exhortation shape (literary), v 7's consecration call (canonical), and vv 22–23 land-vomit (redemptive). Molech (vv 2–5) and the separation formula (vv 24–26) are deliberately not the anchor verses.

Themes-panel plagiarism: the themes panel for these chapters is structurally thin (label/score array + a one-line title), so the 60% word-overlap check in the scorer poses minimal risk in practice. Verified by 100/100 per-chapter scores including the relevance dimension.

Filler-pattern guards

All six banned phrases (the lens reveals, this lens shows, through this lens, this passage shows that, this text teaches that, in this chapter we see/learn) verified absent across the 33 entries by an authoring-time regex sweep.

Rubric-token trap watch (carried forward from batch 1)

The lens-name-substring trap was the chief failure mode in #1801. Every entry was authored against the rubric's actual token list (lens_rubrics.json) rather than relying on the lens name. Specifically verified:

  • typological entries use type / pattern / prefigures / foreshadow — never just "typological".
  • canonical entries use canon / canonical / echoes / thread / across Scripture — never just "canonical".
  • christocentric entries name Christ / Jesus / Messiah / gospel explicitly.
  • mission entries use mission / nations / outward (lev19 only).

Length discipline

All entries authored to a 250-char target with 30-char headroom against the 280-char schema ceiling. Actual range: 200–228 chars. Median ~215.

Watch list for tier-2 audit

These are the entries most worth a human spot-check during accuracy auditing:

  1. lev14 typological — the resurrection-pattern reading of the two-bird rite is a defensible (Calvin and Bonar both develop it) but not universal interpretation. Anchor verse vv 4–7 is solid; the "pattern prefigures resurrection" gloss is the interpretive move.
  2. lev16 typological — "Heb 9:6–14 reads the pair as a single anticipation" is a strong claim. Verify the citation supports a single-act reading rather than a sequential one.
  3. lev17 christocentric — "Heb 9:22 cites this verse directly" — Heb 9:22 echoes the principle rather than quoting Lev 17:11 verbatim. The phrasing "cites this verse" is intentional shorthand for quotation-of-principle but could be tightened to "echoes this verse" if a tier-2 reviewer prefers stricter language.
  4. lev19 canonical — the six-citation roster (Mt 22:39, Mk 12:31, Lk 10:27, Rom 13:9, Gal 5:14, Jas 2:8) is a known set; double-check none has been miscredited.

Out of scope

  • No new content generation in content/leviticus/{N}.json itself (only the lens chapter files).
  • No app code changes.
  • No CI workflow changes.
  • scripture.db rebuild is local-only — production R2 upload happens via _tools/upload_to_r2.py post-merge.
  • app/assets/db-manifest.json and app/assets/explore-images.json drift was checked out before staging, per the brief's git checkout -- step.

Rollback

git revert <merge-commit> is sufficient. No schema changes, no migration, no R2 mutation in this PR.

Refs

@github-actions

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation145332 passed, 0 failed
Build DB
DB Integrity101 passed, 0 failed

@github-actions

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 4001❌ 04001
Suites✅ 532❌ 0532

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 75.6s

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.

1 participant

@CraigBuckmaster