feat(lenses): Exodus 1-10 lens content, batch 1 of Exodus pilot (#820, #1781) - #1797

Merged
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-2-exodus-1-to-10
Apr 29, 2026
Merged

feat(lenses): Exodus 1-10 lens content, batch 1 of Exodus pilot (#820, #1781)#1797
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-2-exodus-1-to-10

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Summary

Opens the Exodus pilot. Same curated-sparse cadence proven across the Genesis pilot, now applied to Exodus 1–10. 41 entries across 10 chapters, all scoring 100/100 on lens_quality_scorer after two minor restatements.

Per-chapter lens distribution

ChapterLensesNotes
ex1 — Israel multiplies; midwives' courage4literary, redemptive, canonical, devotional
ex2 — Moses' birth and rescue5grammatical, literary, typological, redemptive, devotional
ex3 — Burning bush; "I AM"6theology peak — divine name, presence, commission
ex4 — Objections; signs; circumcision crisis4grammatical, redemptive, canonical, devotional
ex5 — First confrontation; bricks without straw3literary, redemptive, devotional — sparse, frustration
ex6 — Renewed commission; YHWH name5grammatical, redemptive, canonical, christocentric, devotional
ex7 — Aaron's staff; first plague4literary, typological, redemptive, canonical
ex8 — Plagues 2–43literary, canonical, devotional — sparse, repetitive cycle
ex9 — Plagues 5–7 (incl. Rom 9:17 anchor)4redemptive, mission, canonical, devotional
ex10 — Plagues 8–93literary, redemptive, canonical

Total: 41 entries. Average 4.1 lenses/chapter — within the curated-sparse band. ex3 maxed at 6 because it's the theological centre of the book; ex5/ex8/ex10 sparse because they are narrative repetition or frustration chapters where forcing a sixth lens would dilute.

First missional lens of the pilot: ex9. Verse 16 ("that my name may be proclaimed in all the earth") is the OT's most explicit missional charter and is cited at Rom 9:17 — earning the lens a place where Genesis only had it once (gen10/gen12).

Theological highlights

  • ex3 christocentric: John 8:58's "before Abraham was, I AM" explicitly cites Ex 3:14 — and the bush that burns without being consumed (v 2) was read by Patristic readers as a type of the incarnation (presence sustaining its vessel without destroying it).
  • ex2 typological: Moses saved from genocide, drawn from water, called out of Egypt — the pattern Matthew 2:13–15 explicitly applies to Christ saved from Herod and called out of Egypt. Anchored, not invented.
  • ex9 mission: v 16's "that my name may be proclaimed in all the earth" → Rom 9:17 (Paul's argument from Pharaoh in his doctrine of election). Exodus's local conflict becomes the New Testament's missional theology.
  • ex10 canonical: Three days of darkness (vv 22–23) anticipates Amos 8:9, Joel 2:31, and the three-hour darkness at the cross (Mt 27:45) — judgement preceding redemption is the canonical pattern.
  • ex7 typological: Aaron's staff "swallows" (Hebrew בלע, bala') the magicians' (v 12) — same verb at 1 Cor 15:54 ("death swallowed up in victory"). Genuine Hebrew wordplay running across testaments.
  • ex2 literary: Moses' "basket" in v 3 is Hebrew tebah — used only of Noah's ark elsewhere (Gen 6:14). The narrative literally floats salvation on the same word twice.

Pipeline gates (all green)

GateResult
schema_validator.py141484 passed / 0 failed / 19 unrelated content warnings
lens_quality_scorer.py41/41 entries at 100/100 (all four dimensions full marks)
build_sqlite.py8 lenses, 209 contents
validate_sqlite.py101 passed / 0 failed

Drafting discipline — lessons applied and surfaced

The 250-char ceiling held — no entry exceeded 245 chars on first draft.

Two restatements needed, both for relevance (themes-panel word overlap above the 60% threshold):

EntryFirst-draft overlapAfter restate
ex2 redemptive (v 24, "God remembered his covenant")76%<50%
ex6 grammatical (v 3, YHWH self-disclosure)61%<50%

Both were 93/100 on the scorer (passing the 90 floor as drafted) but lifted to 100 by switching to less-paraphrased phrasing — ex2's restatement now anchors on Hebrew zakar and parallels at Gen 8:1 / 1 Sam 1:19; ex6's now leans on yada' and the relational/informational distinction.

Pattern to flag for future Exodus batches: chapters with iconic single verses where the themes panel itself is a dense paraphrase of that verse will hit the plagiarism threshold easily. Worth building this into the drafting checklist:

  • For verse anchors that are quoted in the themes panel (ex 2:24, 3:14, 6:3, 9:16, etc.), draft the entry deliberately to anchor on a different lexical handle than the themes panel uses.
  • A Hebrew/Greek term, a canonical parallel, or a different verse in the same chapter all work as alternative handles.

No banned filler patterns; no should_avoid matches; no should_avoid lens-specific avoid-phrases. The lens quality cadence is healthy.

Watch list for tier-2 audit

Six entries flagged for editor scrutiny on a deeper read.

  1. ex3 typological — "Patristic readers saw a type of the incarnation" (bush-not-consumed). Defensible (Gregory of Nyssa, Cyril of Alexandria, the standard Eastern reading) but brings patristic-specific imagery; some Reformed editors might prefer "anticipation" framing.
  2. ex3 christocentric — Tying Jn 8:58 directly to Ex 3:14 is the standard Christological reading but compresses fast; an editor may want to note the linguistic parallel (egō eimi / ehyeh) more explicitly.
  3. ex7 typologicalbala' ("swallow") connecting Aaron's staff to 1 Cor 15:54 is real lexical data but is a pattern claim that some traditions would prefer as "echoes" rather than a hard typology.
  4. ex9 mission — quoting v 16 then citing Rom 9:17 within a four-line entry: tightly compressed; sound but worth pacing slower in a tier-2 expansion.
  5. ex10 canonical — chaining vv 22–23 → Amos 8:9 → Joel 2:31 → Mt 27:45 in one sentence is theologically defensible but covers a lot of ground; an editor may want to slow this connection.
  6. ex2 typological — Mt 2:13–15 is an explicit citation; this one is on solid ground, but the framing "the pattern Matthew 2:13–15 cites" reads slightly forced. Cosmetic.

Branch / merge notes

Rollback plan

Revert the merge commit. The 10 new chapter files are additive and isolated under content/hermeneutic_lenses/chapters/; no existing content, schema, or app code is touched. SQLite rebuilds deterministically.

Roadmap

After this lands, batches 2–4 of Exodus complete the Exodus pilot:

  • Batch 2: ex11–ex20 (Passover, Red Sea, song of Moses, manna, water from rock — major typological density expected, possibly 5+ lens average)
  • Batch 3: ex21–ex30 (Book of the Covenant, tabernacle instructions — mostly legal/architectural, lower lens average)
  • Batch 4: ex31–ex40 (Sabbath, golden calf, glory, tabernacle construction — golden calf chapter likely 6 lenses)

Refs #820. Closes part of #1781.

…#1781)
Opens the Exodus pilot using the same curated-sparse cadence proven on
Genesis. 41 entries across 10 chapters, all 100/100 on lens_quality_scorer.
Per-chapter distribution:
- ex1 (Israel multiplies; midwives) 4 lenses
- ex2 (Moses' birth and rescue) 5 lenses
- ex3 (burning bush; I AM) 6 lenses (theology peak)
- ex4 (objections; signs; circumcision) 4 lenses
- ex5 (first confrontation; bricks) 3 lenses (sparse, frustration)
- ex6 (renewed commission; YHWH name) 5 lenses
- ex7 (Aaron's staff; first plague) 4 lenses
- ex8 (plagues 2-4) 3 lenses (sparse, repetitive)
- ex9 (plagues 5-7; v 16 missional) 4 lenses
- ex10 (plagues 8-9) 3 lenses
Theological highlights:
- ex3 christocentric: Jn 8:58's 'I AM' explicitly cites v 14; the bush
as patristic type of the incarnation (presence that does not consume).
- ex2 typological: Moses saved from genocide and called out of Egypt
is the pattern Mt 2:13-15 cites of Christ.
- ex9 mission: v 16 ('that my name may be proclaimed in all the earth')
is the OT's most explicit missional charter, anchored to Rom 9:17.
- ex10 canonical: three days of darkness (vv 22-23) anticipate Amos 8:9,
Joel 2:31, and the cross's three-hour darkness (Mt 27:45).
- ex7 typological: Aaron's staff 'swallows' the magicians' (Hebrew bala')
threading to 1 Cor 15:54's 'death swallowed in victory'.
Pipeline gates (all green):
- schema_validator.py: 0 failed
- lens_quality_scorer.py: 41/41 entries 100/100
- build_sqlite.py: 8 lenses, 209 contents
- validate_sqlite.py: 0 failed
Drafting note: two minor restatements needed on ex2 redemptive (76%
themes-panel word overlap) and ex6 grammatical (61% overlap). Both
passed the 90 floor as drafted but were lifted to 100 with token-light
restatements. The themes panels for chapters with iconic single
verses (v 24 in ex2, v 3 in ex6) are dense paraphrases of those
verses, so plagiarism risk is highest there — flag for batch 2.
Branched off master pre-#1796 merge; once #1796 lands, the live
lens_contents row count will be 214 (Genesis complete) + 41 (this
batch) = 255.
@github-actions

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation142240 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: 93.0s

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): Exodus 1-10 lens content, batch 1 of Exodus pilot (#820, #1781) - #1797

Merged
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-2-exodus-1-to-10
Apr 29, 2026
Merged

feat(lenses): Exodus 1-10 lens content, batch 1 of Exodus pilot (#820, #1781)#1797
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-2-exodus-1-to-10

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Summary

Opens the Exodus pilot. Same curated-sparse cadence proven across the Genesis pilot, now applied to Exodus 1–10. 41 entries across 10 chapters, all scoring 100/100 on lens_quality_scorer after two minor restatements.

Per-chapter lens distribution

ChapterLensesNotes
ex1 — Israel multiplies; midwives' courage4literary, redemptive, canonical, devotional
ex2 — Moses' birth and rescue5grammatical, literary, typological, redemptive, devotional
ex3 — Burning bush; "I AM"6theology peak — divine name, presence, commission
ex4 — Objections; signs; circumcision crisis4grammatical, redemptive, canonical, devotional
ex5 — First confrontation; bricks without straw3literary, redemptive, devotional — sparse, frustration
ex6 — Renewed commission; YHWH name5grammatical, redemptive, canonical, christocentric, devotional
ex7 — Aaron's staff; first plague4literary, typological, redemptive, canonical
ex8 — Plagues 2–43literary, canonical, devotional — sparse, repetitive cycle
ex9 — Plagues 5–7 (incl. Rom 9:17 anchor)4redemptive, mission, canonical, devotional
ex10 — Plagues 8–93literary, redemptive, canonical

Total: 41 entries. Average 4.1 lenses/chapter — within the curated-sparse band. ex3 maxed at 6 because it's the theological centre of the book; ex5/ex8/ex10 sparse because they are narrative repetition or frustration chapters where forcing a sixth lens would dilute.

First missional lens of the pilot: ex9. Verse 16 ("that my name may be proclaimed in all the earth") is the OT's most explicit missional charter and is cited at Rom 9:17 — earning the lens a place where Genesis only had it once (gen10/gen12).

Theological highlights

  • ex3 christocentric: John 8:58's "before Abraham was, I AM" explicitly cites Ex 3:14 — and the bush that burns without being consumed (v 2) was read by Patristic readers as a type of the incarnation (presence sustaining its vessel without destroying it).
  • ex2 typological: Moses saved from genocide, drawn from water, called out of Egypt — the pattern Matthew 2:13–15 explicitly applies to Christ saved from Herod and called out of Egypt. Anchored, not invented.
  • ex9 mission: v 16's "that my name may be proclaimed in all the earth" → Rom 9:17 (Paul's argument from Pharaoh in his doctrine of election). Exodus's local conflict becomes the New Testament's missional theology.
  • ex10 canonical: Three days of darkness (vv 22–23) anticipates Amos 8:9, Joel 2:31, and the three-hour darkness at the cross (Mt 27:45) — judgement preceding redemption is the canonical pattern.
  • ex7 typological: Aaron's staff "swallows" (Hebrew בלע, bala') the magicians' (v 12) — same verb at 1 Cor 15:54 ("death swallowed up in victory"). Genuine Hebrew wordplay running across testaments.
  • ex2 literary: Moses' "basket" in v 3 is Hebrew tebah — used only of Noah's ark elsewhere (Gen 6:14). The narrative literally floats salvation on the same word twice.

Pipeline gates (all green)

GateResult
schema_validator.py141484 passed / 0 failed / 19 unrelated content warnings
lens_quality_scorer.py41/41 entries at 100/100 (all four dimensions full marks)
build_sqlite.py8 lenses, 209 contents
validate_sqlite.py101 passed / 0 failed

Drafting discipline — lessons applied and surfaced

The 250-char ceiling held — no entry exceeded 245 chars on first draft.

Two restatements needed, both for relevance (themes-panel word overlap above the 60% threshold):

EntryFirst-draft overlapAfter restate
ex2 redemptive (v 24, "God remembered his covenant")76%<50%
ex6 grammatical (v 3, YHWH self-disclosure)61%<50%

Both were 93/100 on the scorer (passing the 90 floor as drafted) but lifted to 100 by switching to less-paraphrased phrasing — ex2's restatement now anchors on Hebrew zakar and parallels at Gen 8:1 / 1 Sam 1:19; ex6's now leans on yada' and the relational/informational distinction.

Pattern to flag for future Exodus batches: chapters with iconic single verses where the themes panel itself is a dense paraphrase of that verse will hit the plagiarism threshold easily. Worth building this into the drafting checklist:

  • For verse anchors that are quoted in the themes panel (ex 2:24, 3:14, 6:3, 9:16, etc.), draft the entry deliberately to anchor on a different lexical handle than the themes panel uses.
  • A Hebrew/Greek term, a canonical parallel, or a different verse in the same chapter all work as alternative handles.

No banned filler patterns; no should_avoid matches; no should_avoid lens-specific avoid-phrases. The lens quality cadence is healthy.

Watch list for tier-2 audit

Six entries flagged for editor scrutiny on a deeper read.

  1. ex3 typological — "Patristic readers saw a type of the incarnation" (bush-not-consumed). Defensible (Gregory of Nyssa, Cyril of Alexandria, the standard Eastern reading) but brings patristic-specific imagery; some Reformed editors might prefer "anticipation" framing.
  2. ex3 christocentric — Tying Jn 8:58 directly to Ex 3:14 is the standard Christological reading but compresses fast; an editor may want to note the linguistic parallel (egō eimi / ehyeh) more explicitly.
  3. ex7 typologicalbala' ("swallow") connecting Aaron's staff to 1 Cor 15:54 is real lexical data but is a pattern claim that some traditions would prefer as "echoes" rather than a hard typology.
  4. ex9 mission — quoting v 16 then citing Rom 9:17 within a four-line entry: tightly compressed; sound but worth pacing slower in a tier-2 expansion.
  5. ex10 canonical — chaining vv 22–23 → Amos 8:9 → Joel 2:31 → Mt 27:45 in one sentence is theologically defensible but covers a lot of ground; an editor may want to slow this connection.
  6. ex2 typological — Mt 2:13–15 is an explicit citation; this one is on solid ground, but the framing "the pattern Matthew 2:13–15 cites" reads slightly forced. Cosmetic.

Branch / merge notes

Rollback plan

Revert the merge commit. The 10 new chapter files are additive and isolated under content/hermeneutic_lenses/chapters/; no existing content, schema, or app code is touched. SQLite rebuilds deterministically.

Roadmap

After this lands, batches 2–4 of Exodus complete the Exodus pilot:

  • Batch 2: ex11–ex20 (Passover, Red Sea, song of Moses, manna, water from rock — major typological density expected, possibly 5+ lens average)
  • Batch 3: ex21–ex30 (Book of the Covenant, tabernacle instructions — mostly legal/architectural, lower lens average)
  • Batch 4: ex31–ex40 (Sabbath, golden calf, glory, tabernacle construction — golden calf chapter likely 6 lenses)

Refs #820. Closes part of #1781.

…#1781)
Opens the Exodus pilot using the same curated-sparse cadence proven on
Genesis. 41 entries across 10 chapters, all 100/100 on lens_quality_scorer.
Per-chapter distribution:
- ex1 (Israel multiplies; midwives) 4 lenses
- ex2 (Moses' birth and rescue) 5 lenses
- ex3 (burning bush; I AM) 6 lenses (theology peak)
- ex4 (objections; signs; circumcision) 4 lenses
- ex5 (first confrontation; bricks) 3 lenses (sparse, frustration)
- ex6 (renewed commission; YHWH name) 5 lenses
- ex7 (Aaron's staff; first plague) 4 lenses
- ex8 (plagues 2-4) 3 lenses (sparse, repetitive)
- ex9 (plagues 5-7; v 16 missional) 4 lenses
- ex10 (plagues 8-9) 3 lenses
Theological highlights:
- ex3 christocentric: Jn 8:58's 'I AM' explicitly cites v 14; the bush
as patristic type of the incarnation (presence that does not consume).
- ex2 typological: Moses saved from genocide and called out of Egypt
is the pattern Mt 2:13-15 cites of Christ.
- ex9 mission: v 16 ('that my name may be proclaimed in all the earth')
is the OT's most explicit missional charter, anchored to Rom 9:17.
- ex10 canonical: three days of darkness (vv 22-23) anticipate Amos 8:9,
Joel 2:31, and the cross's three-hour darkness (Mt 27:45).
- ex7 typological: Aaron's staff 'swallows' the magicians' (Hebrew bala')
threading to 1 Cor 15:54's 'death swallowed in victory'.
Pipeline gates (all green):
- schema_validator.py: 0 failed
- lens_quality_scorer.py: 41/41 entries 100/100
- build_sqlite.py: 8 lenses, 209 contents
- validate_sqlite.py: 0 failed
Drafting note: two minor restatements needed on ex2 redemptive (76%
themes-panel word overlap) and ex6 grammatical (61% overlap). Both
passed the 90 floor as drafted but were lifted to 100 with token-light
restatements. The themes panels for chapters with iconic single
verses (v 24 in ex2, v 3 in ex6) are dense paraphrases of those
verses, so plagiarism risk is highest there — flag for batch 2.
Branched off master pre-#1796 merge; once #1796 lands, the live
lens_contents row count will be 214 (Genesis complete) + 41 (this
batch) = 255.
@github-actions

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation142240 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: 93.0s

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): Exodus 1-10 lens content, batch 1 of Exodus pilot (#820, #1781) - #1797

Merged
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-2-exodus-1-to-10
Apr 29, 2026
Merged

feat(lenses): Exodus 1-10 lens content, batch 1 of Exodus pilot (#820, #1781)#1797
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-2-exodus-1-to-10

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Summary

Opens the Exodus pilot. Same curated-sparse cadence proven across the Genesis pilot, now applied to Exodus 1–10. 41 entries across 10 chapters, all scoring 100/100 on lens_quality_scorer after two minor restatements.

Per-chapter lens distribution

ChapterLensesNotes
ex1 — Israel multiplies; midwives' courage4literary, redemptive, canonical, devotional
ex2 — Moses' birth and rescue5grammatical, literary, typological, redemptive, devotional
ex3 — Burning bush; "I AM"6theology peak — divine name, presence, commission
ex4 — Objections; signs; circumcision crisis4grammatical, redemptive, canonical, devotional
ex5 — First confrontation; bricks without straw3literary, redemptive, devotional — sparse, frustration
ex6 — Renewed commission; YHWH name5grammatical, redemptive, canonical, christocentric, devotional
ex7 — Aaron's staff; first plague4literary, typological, redemptive, canonical
ex8 — Plagues 2–43literary, canonical, devotional — sparse, repetitive cycle
ex9 — Plagues 5–7 (incl. Rom 9:17 anchor)4redemptive, mission, canonical, devotional
ex10 — Plagues 8–93literary, redemptive, canonical

Total: 41 entries. Average 4.1 lenses/chapter — within the curated-sparse band. ex3 maxed at 6 because it's the theological centre of the book; ex5/ex8/ex10 sparse because they are narrative repetition or frustration chapters where forcing a sixth lens would dilute.

First missional lens of the pilot: ex9. Verse 16 ("that my name may be proclaimed in all the earth") is the OT's most explicit missional charter and is cited at Rom 9:17 — earning the lens a place where Genesis only had it once (gen10/gen12).

Theological highlights

  • ex3 christocentric: John 8:58's "before Abraham was, I AM" explicitly cites Ex 3:14 — and the bush that burns without being consumed (v 2) was read by Patristic readers as a type of the incarnation (presence sustaining its vessel without destroying it).
  • ex2 typological: Moses saved from genocide, drawn from water, called out of Egypt — the pattern Matthew 2:13–15 explicitly applies to Christ saved from Herod and called out of Egypt. Anchored, not invented.
  • ex9 mission: v 16's "that my name may be proclaimed in all the earth" → Rom 9:17 (Paul's argument from Pharaoh in his doctrine of election). Exodus's local conflict becomes the New Testament's missional theology.
  • ex10 canonical: Three days of darkness (vv 22–23) anticipates Amos 8:9, Joel 2:31, and the three-hour darkness at the cross (Mt 27:45) — judgement preceding redemption is the canonical pattern.
  • ex7 typological: Aaron's staff "swallows" (Hebrew בלע, bala') the magicians' (v 12) — same verb at 1 Cor 15:54 ("death swallowed up in victory"). Genuine Hebrew wordplay running across testaments.
  • ex2 literary: Moses' "basket" in v 3 is Hebrew tebah — used only of Noah's ark elsewhere (Gen 6:14). The narrative literally floats salvation on the same word twice.

Pipeline gates (all green)

GateResult
schema_validator.py141484 passed / 0 failed / 19 unrelated content warnings
lens_quality_scorer.py41/41 entries at 100/100 (all four dimensions full marks)
build_sqlite.py8 lenses, 209 contents
validate_sqlite.py101 passed / 0 failed

Drafting discipline — lessons applied and surfaced

The 250-char ceiling held — no entry exceeded 245 chars on first draft.

Two restatements needed, both for relevance (themes-panel word overlap above the 60% threshold):

EntryFirst-draft overlapAfter restate
ex2 redemptive (v 24, "God remembered his covenant")76%<50%
ex6 grammatical (v 3, YHWH self-disclosure)61%<50%

Both were 93/100 on the scorer (passing the 90 floor as drafted) but lifted to 100 by switching to less-paraphrased phrasing — ex2's restatement now anchors on Hebrew zakar and parallels at Gen 8:1 / 1 Sam 1:19; ex6's now leans on yada' and the relational/informational distinction.

Pattern to flag for future Exodus batches: chapters with iconic single verses where the themes panel itself is a dense paraphrase of that verse will hit the plagiarism threshold easily. Worth building this into the drafting checklist:

  • For verse anchors that are quoted in the themes panel (ex 2:24, 3:14, 6:3, 9:16, etc.), draft the entry deliberately to anchor on a different lexical handle than the themes panel uses.
  • A Hebrew/Greek term, a canonical parallel, or a different verse in the same chapter all work as alternative handles.

No banned filler patterns; no should_avoid matches; no should_avoid lens-specific avoid-phrases. The lens quality cadence is healthy.

Watch list for tier-2 audit

Six entries flagged for editor scrutiny on a deeper read.

  1. ex3 typological — "Patristic readers saw a type of the incarnation" (bush-not-consumed). Defensible (Gregory of Nyssa, Cyril of Alexandria, the standard Eastern reading) but brings patristic-specific imagery; some Reformed editors might prefer "anticipation" framing.
  2. ex3 christocentric — Tying Jn 8:58 directly to Ex 3:14 is the standard Christological reading but compresses fast; an editor may want to note the linguistic parallel (egō eimi / ehyeh) more explicitly.
  3. ex7 typologicalbala' ("swallow") connecting Aaron's staff to 1 Cor 15:54 is real lexical data but is a pattern claim that some traditions would prefer as "echoes" rather than a hard typology.
  4. ex9 mission — quoting v 16 then citing Rom 9:17 within a four-line entry: tightly compressed; sound but worth pacing slower in a tier-2 expansion.
  5. ex10 canonical — chaining vv 22–23 → Amos 8:9 → Joel 2:31 → Mt 27:45 in one sentence is theologically defensible but covers a lot of ground; an editor may want to slow this connection.
  6. ex2 typological — Mt 2:13–15 is an explicit citation; this one is on solid ground, but the framing "the pattern Matthew 2:13–15 cites" reads slightly forced. Cosmetic.

Branch / merge notes

Rollback plan

Revert the merge commit. The 10 new chapter files are additive and isolated under content/hermeneutic_lenses/chapters/; no existing content, schema, or app code is touched. SQLite rebuilds deterministically.

Roadmap

After this lands, batches 2–4 of Exodus complete the Exodus pilot:

  • Batch 2: ex11–ex20 (Passover, Red Sea, song of Moses, manna, water from rock — major typological density expected, possibly 5+ lens average)
  • Batch 3: ex21–ex30 (Book of the Covenant, tabernacle instructions — mostly legal/architectural, lower lens average)
  • Batch 4: ex31–ex40 (Sabbath, golden calf, glory, tabernacle construction — golden calf chapter likely 6 lenses)

Refs #820. Closes part of #1781.

…#1781)
Opens the Exodus pilot using the same curated-sparse cadence proven on
Genesis. 41 entries across 10 chapters, all 100/100 on lens_quality_scorer.
Per-chapter distribution:
- ex1 (Israel multiplies; midwives) 4 lenses
- ex2 (Moses' birth and rescue) 5 lenses
- ex3 (burning bush; I AM) 6 lenses (theology peak)
- ex4 (objections; signs; circumcision) 4 lenses
- ex5 (first confrontation; bricks) 3 lenses (sparse, frustration)
- ex6 (renewed commission; YHWH name) 5 lenses
- ex7 (Aaron's staff; first plague) 4 lenses
- ex8 (plagues 2-4) 3 lenses (sparse, repetitive)
- ex9 (plagues 5-7; v 16 missional) 4 lenses
- ex10 (plagues 8-9) 3 lenses
Theological highlights:
- ex3 christocentric: Jn 8:58's 'I AM' explicitly cites v 14; the bush
as patristic type of the incarnation (presence that does not consume).
- ex2 typological: Moses saved from genocide and called out of Egypt
is the pattern Mt 2:13-15 cites of Christ.
- ex9 mission: v 16 ('that my name may be proclaimed in all the earth')
is the OT's most explicit missional charter, anchored to Rom 9:17.
- ex10 canonical: three days of darkness (vv 22-23) anticipate Amos 8:9,
Joel 2:31, and the cross's three-hour darkness (Mt 27:45).
- ex7 typological: Aaron's staff 'swallows' the magicians' (Hebrew bala')
threading to 1 Cor 15:54's 'death swallowed in victory'.
Pipeline gates (all green):
- schema_validator.py: 0 failed
- lens_quality_scorer.py: 41/41 entries 100/100
- build_sqlite.py: 8 lenses, 209 contents
- validate_sqlite.py: 0 failed
Drafting note: two minor restatements needed on ex2 redemptive (76%
themes-panel word overlap) and ex6 grammatical (61% overlap). Both
passed the 90 floor as drafted but were lifted to 100 with token-light
restatements. The themes panels for chapters with iconic single
verses (v 24 in ex2, v 3 in ex6) are dense paraphrases of those
verses, so plagiarism risk is highest there — flag for batch 2.
Branched off master pre-#1796 merge; once #1796 lands, the live
lens_contents row count will be 214 (Genesis complete) + 41 (this
batch) = 255.
@github-actions

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation142240 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: 93.0s

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): Exodus 1-10 lens content, batch 1 of Exodus pilot (#820, #1781) - #1797

Merged
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-2-exodus-1-to-10
Apr 29, 2026
Merged

feat(lenses): Exodus 1-10 lens content, batch 1 of Exodus pilot (#820, #1781)#1797
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-2-exodus-1-to-10

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Summary

Opens the Exodus pilot. Same curated-sparse cadence proven across the Genesis pilot, now applied to Exodus 1–10. 41 entries across 10 chapters, all scoring 100/100 on lens_quality_scorer after two minor restatements.

Per-chapter lens distribution

ChapterLensesNotes
ex1 — Israel multiplies; midwives' courage4literary, redemptive, canonical, devotional
ex2 — Moses' birth and rescue5grammatical, literary, typological, redemptive, devotional
ex3 — Burning bush; "I AM"6theology peak — divine name, presence, commission
ex4 — Objections; signs; circumcision crisis4grammatical, redemptive, canonical, devotional
ex5 — First confrontation; bricks without straw3literary, redemptive, devotional — sparse, frustration
ex6 — Renewed commission; YHWH name5grammatical, redemptive, canonical, christocentric, devotional
ex7 — Aaron's staff; first plague4literary, typological, redemptive, canonical
ex8 — Plagues 2–43literary, canonical, devotional — sparse, repetitive cycle
ex9 — Plagues 5–7 (incl. Rom 9:17 anchor)4redemptive, mission, canonical, devotional
ex10 — Plagues 8–93literary, redemptive, canonical

Total: 41 entries. Average 4.1 lenses/chapter — within the curated-sparse band. ex3 maxed at 6 because it's the theological centre of the book; ex5/ex8/ex10 sparse because they are narrative repetition or frustration chapters where forcing a sixth lens would dilute.

First missional lens of the pilot: ex9. Verse 16 ("that my name may be proclaimed in all the earth") is the OT's most explicit missional charter and is cited at Rom 9:17 — earning the lens a place where Genesis only had it once (gen10/gen12).

Theological highlights

  • ex3 christocentric: John 8:58's "before Abraham was, I AM" explicitly cites Ex 3:14 — and the bush that burns without being consumed (v 2) was read by Patristic readers as a type of the incarnation (presence sustaining its vessel without destroying it).
  • ex2 typological: Moses saved from genocide, drawn from water, called out of Egypt — the pattern Matthew 2:13–15 explicitly applies to Christ saved from Herod and called out of Egypt. Anchored, not invented.
  • ex9 mission: v 16's "that my name may be proclaimed in all the earth" → Rom 9:17 (Paul's argument from Pharaoh in his doctrine of election). Exodus's local conflict becomes the New Testament's missional theology.
  • ex10 canonical: Three days of darkness (vv 22–23) anticipates Amos 8:9, Joel 2:31, and the three-hour darkness at the cross (Mt 27:45) — judgement preceding redemption is the canonical pattern.
  • ex7 typological: Aaron's staff "swallows" (Hebrew בלע, bala') the magicians' (v 12) — same verb at 1 Cor 15:54 ("death swallowed up in victory"). Genuine Hebrew wordplay running across testaments.
  • ex2 literary: Moses' "basket" in v 3 is Hebrew tebah — used only of Noah's ark elsewhere (Gen 6:14). The narrative literally floats salvation on the same word twice.

Pipeline gates (all green)

GateResult
schema_validator.py141484 passed / 0 failed / 19 unrelated content warnings
lens_quality_scorer.py41/41 entries at 100/100 (all four dimensions full marks)
build_sqlite.py8 lenses, 209 contents
validate_sqlite.py101 passed / 0 failed

Drafting discipline — lessons applied and surfaced

The 250-char ceiling held — no entry exceeded 245 chars on first draft.

Two restatements needed, both for relevance (themes-panel word overlap above the 60% threshold):

EntryFirst-draft overlapAfter restate
ex2 redemptive (v 24, "God remembered his covenant")76%<50%
ex6 grammatical (v 3, YHWH self-disclosure)61%<50%

Both were 93/100 on the scorer (passing the 90 floor as drafted) but lifted to 100 by switching to less-paraphrased phrasing — ex2's restatement now anchors on Hebrew zakar and parallels at Gen 8:1 / 1 Sam 1:19; ex6's now leans on yada' and the relational/informational distinction.

Pattern to flag for future Exodus batches: chapters with iconic single verses where the themes panel itself is a dense paraphrase of that verse will hit the plagiarism threshold easily. Worth building this into the drafting checklist:

  • For verse anchors that are quoted in the themes panel (ex 2:24, 3:14, 6:3, 9:16, etc.), draft the entry deliberately to anchor on a different lexical handle than the themes panel uses.
  • A Hebrew/Greek term, a canonical parallel, or a different verse in the same chapter all work as alternative handles.

No banned filler patterns; no should_avoid matches; no should_avoid lens-specific avoid-phrases. The lens quality cadence is healthy.

Watch list for tier-2 audit

Six entries flagged for editor scrutiny on a deeper read.

  1. ex3 typological — "Patristic readers saw a type of the incarnation" (bush-not-consumed). Defensible (Gregory of Nyssa, Cyril of Alexandria, the standard Eastern reading) but brings patristic-specific imagery; some Reformed editors might prefer "anticipation" framing.
  2. ex3 christocentric — Tying Jn 8:58 directly to Ex 3:14 is the standard Christological reading but compresses fast; an editor may want to note the linguistic parallel (egō eimi / ehyeh) more explicitly.
  3. ex7 typologicalbala' ("swallow") connecting Aaron's staff to 1 Cor 15:54 is real lexical data but is a pattern claim that some traditions would prefer as "echoes" rather than a hard typology.
  4. ex9 mission — quoting v 16 then citing Rom 9:17 within a four-line entry: tightly compressed; sound but worth pacing slower in a tier-2 expansion.
  5. ex10 canonical — chaining vv 22–23 → Amos 8:9 → Joel 2:31 → Mt 27:45 in one sentence is theologically defensible but covers a lot of ground; an editor may want to slow this connection.
  6. ex2 typological — Mt 2:13–15 is an explicit citation; this one is on solid ground, but the framing "the pattern Matthew 2:13–15 cites" reads slightly forced. Cosmetic.

Branch / merge notes

Rollback plan

Revert the merge commit. The 10 new chapter files are additive and isolated under content/hermeneutic_lenses/chapters/; no existing content, schema, or app code is touched. SQLite rebuilds deterministically.

Roadmap

After this lands, batches 2–4 of Exodus complete the Exodus pilot:

  • Batch 2: ex11–ex20 (Passover, Red Sea, song of Moses, manna, water from rock — major typological density expected, possibly 5+ lens average)
  • Batch 3: ex21–ex30 (Book of the Covenant, tabernacle instructions — mostly legal/architectural, lower lens average)
  • Batch 4: ex31–ex40 (Sabbath, golden calf, glory, tabernacle construction — golden calf chapter likely 6 lenses)

Refs #820. Closes part of #1781.

…#1781)
Opens the Exodus pilot using the same curated-sparse cadence proven on
Genesis. 41 entries across 10 chapters, all 100/100 on lens_quality_scorer.
Per-chapter distribution:
- ex1 (Israel multiplies; midwives) 4 lenses
- ex2 (Moses' birth and rescue) 5 lenses
- ex3 (burning bush; I AM) 6 lenses (theology peak)
- ex4 (objections; signs; circumcision) 4 lenses
- ex5 (first confrontation; bricks) 3 lenses (sparse, frustration)
- ex6 (renewed commission; YHWH name) 5 lenses
- ex7 (Aaron's staff; first plague) 4 lenses
- ex8 (plagues 2-4) 3 lenses (sparse, repetitive)
- ex9 (plagues 5-7; v 16 missional) 4 lenses
- ex10 (plagues 8-9) 3 lenses
Theological highlights:
- ex3 christocentric: Jn 8:58's 'I AM' explicitly cites v 14; the bush
as patristic type of the incarnation (presence that does not consume).
- ex2 typological: Moses saved from genocide and called out of Egypt
is the pattern Mt 2:13-15 cites of Christ.
- ex9 mission: v 16 ('that my name may be proclaimed in all the earth')
is the OT's most explicit missional charter, anchored to Rom 9:17.
- ex10 canonical: three days of darkness (vv 22-23) anticipate Amos 8:9,
Joel 2:31, and the cross's three-hour darkness (Mt 27:45).
- ex7 typological: Aaron's staff 'swallows' the magicians' (Hebrew bala')
threading to 1 Cor 15:54's 'death swallowed in victory'.
Pipeline gates (all green):
- schema_validator.py: 0 failed
- lens_quality_scorer.py: 41/41 entries 100/100
- build_sqlite.py: 8 lenses, 209 contents
- validate_sqlite.py: 0 failed
Drafting note: two minor restatements needed on ex2 redemptive (76%
themes-panel word overlap) and ex6 grammatical (61% overlap). Both
passed the 90 floor as drafted but were lifted to 100 with token-light
restatements. The themes panels for chapters with iconic single
verses (v 24 in ex2, v 3 in ex6) are dense paraphrases of those
verses, so plagiarism risk is highest there — flag for batch 2.
Branched off master pre-#1796 merge; once #1796 lands, the live
lens_contents row count will be 214 (Genesis complete) + 41 (this
batch) = 255.
@github-actions

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation142240 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: 93.0s

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): Exodus 1-10 lens content, batch 1 of Exodus pilot (#820, #1781) - #1797

Merged
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-2-exodus-1-to-10
Apr 29, 2026
Merged

feat(lenses): Exodus 1-10 lens content, batch 1 of Exodus pilot (#820, #1781)#1797
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-2-exodus-1-to-10

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Summary

Opens the Exodus pilot. Same curated-sparse cadence proven across the Genesis pilot, now applied to Exodus 1–10. 41 entries across 10 chapters, all scoring 100/100 on lens_quality_scorer after two minor restatements.

Per-chapter lens distribution

ChapterLensesNotes
ex1 — Israel multiplies; midwives' courage4literary, redemptive, canonical, devotional
ex2 — Moses' birth and rescue5grammatical, literary, typological, redemptive, devotional
ex3 — Burning bush; "I AM"6theology peak — divine name, presence, commission
ex4 — Objections; signs; circumcision crisis4grammatical, redemptive, canonical, devotional
ex5 — First confrontation; bricks without straw3literary, redemptive, devotional — sparse, frustration
ex6 — Renewed commission; YHWH name5grammatical, redemptive, canonical, christocentric, devotional
ex7 — Aaron's staff; first plague4literary, typological, redemptive, canonical
ex8 — Plagues 2–43literary, canonical, devotional — sparse, repetitive cycle
ex9 — Plagues 5–7 (incl. Rom 9:17 anchor)4redemptive, mission, canonical, devotional
ex10 — Plagues 8–93literary, redemptive, canonical

Total: 41 entries. Average 4.1 lenses/chapter — within the curated-sparse band. ex3 maxed at 6 because it's the theological centre of the book; ex5/ex8/ex10 sparse because they are narrative repetition or frustration chapters where forcing a sixth lens would dilute.

First missional lens of the pilot: ex9. Verse 16 ("that my name may be proclaimed in all the earth") is the OT's most explicit missional charter and is cited at Rom 9:17 — earning the lens a place where Genesis only had it once (gen10/gen12).

Theological highlights

  • ex3 christocentric: John 8:58's "before Abraham was, I AM" explicitly cites Ex 3:14 — and the bush that burns without being consumed (v 2) was read by Patristic readers as a type of the incarnation (presence sustaining its vessel without destroying it).
  • ex2 typological: Moses saved from genocide, drawn from water, called out of Egypt — the pattern Matthew 2:13–15 explicitly applies to Christ saved from Herod and called out of Egypt. Anchored, not invented.
  • ex9 mission: v 16's "that my name may be proclaimed in all the earth" → Rom 9:17 (Paul's argument from Pharaoh in his doctrine of election). Exodus's local conflict becomes the New Testament's missional theology.
  • ex10 canonical: Three days of darkness (vv 22–23) anticipates Amos 8:9, Joel 2:31, and the three-hour darkness at the cross (Mt 27:45) — judgement preceding redemption is the canonical pattern.
  • ex7 typological: Aaron's staff "swallows" (Hebrew בלע, bala') the magicians' (v 12) — same verb at 1 Cor 15:54 ("death swallowed up in victory"). Genuine Hebrew wordplay running across testaments.
  • ex2 literary: Moses' "basket" in v 3 is Hebrew tebah — used only of Noah's ark elsewhere (Gen 6:14). The narrative literally floats salvation on the same word twice.

Pipeline gates (all green)

GateResult
schema_validator.py141484 passed / 0 failed / 19 unrelated content warnings
lens_quality_scorer.py41/41 entries at 100/100 (all four dimensions full marks)
build_sqlite.py8 lenses, 209 contents
validate_sqlite.py101 passed / 0 failed

Drafting discipline — lessons applied and surfaced

The 250-char ceiling held — no entry exceeded 245 chars on first draft.

Two restatements needed, both for relevance (themes-panel word overlap above the 60% threshold):

EntryFirst-draft overlapAfter restate
ex2 redemptive (v 24, "God remembered his covenant")76%<50%
ex6 grammatical (v 3, YHWH self-disclosure)61%<50%

Both were 93/100 on the scorer (passing the 90 floor as drafted) but lifted to 100 by switching to less-paraphrased phrasing — ex2's restatement now anchors on Hebrew zakar and parallels at Gen 8:1 / 1 Sam 1:19; ex6's now leans on yada' and the relational/informational distinction.

Pattern to flag for future Exodus batches: chapters with iconic single verses where the themes panel itself is a dense paraphrase of that verse will hit the plagiarism threshold easily. Worth building this into the drafting checklist:

  • For verse anchors that are quoted in the themes panel (ex 2:24, 3:14, 6:3, 9:16, etc.), draft the entry deliberately to anchor on a different lexical handle than the themes panel uses.
  • A Hebrew/Greek term, a canonical parallel, or a different verse in the same chapter all work as alternative handles.

No banned filler patterns; no should_avoid matches; no should_avoid lens-specific avoid-phrases. The lens quality cadence is healthy.

Watch list for tier-2 audit

Six entries flagged for editor scrutiny on a deeper read.

  1. ex3 typological — "Patristic readers saw a type of the incarnation" (bush-not-consumed). Defensible (Gregory of Nyssa, Cyril of Alexandria, the standard Eastern reading) but brings patristic-specific imagery; some Reformed editors might prefer "anticipation" framing.
  2. ex3 christocentric — Tying Jn 8:58 directly to Ex 3:14 is the standard Christological reading but compresses fast; an editor may want to note the linguistic parallel (egō eimi / ehyeh) more explicitly.
  3. ex7 typologicalbala' ("swallow") connecting Aaron's staff to 1 Cor 15:54 is real lexical data but is a pattern claim that some traditions would prefer as "echoes" rather than a hard typology.
  4. ex9 mission — quoting v 16 then citing Rom 9:17 within a four-line entry: tightly compressed; sound but worth pacing slower in a tier-2 expansion.
  5. ex10 canonical — chaining vv 22–23 → Amos 8:9 → Joel 2:31 → Mt 27:45 in one sentence is theologically defensible but covers a lot of ground; an editor may want to slow this connection.
  6. ex2 typological — Mt 2:13–15 is an explicit citation; this one is on solid ground, but the framing "the pattern Matthew 2:13–15 cites" reads slightly forced. Cosmetic.

Branch / merge notes

Rollback plan

Revert the merge commit. The 10 new chapter files are additive and isolated under content/hermeneutic_lenses/chapters/; no existing content, schema, or app code is touched. SQLite rebuilds deterministically.

Roadmap

After this lands, batches 2–4 of Exodus complete the Exodus pilot:

  • Batch 2: ex11–ex20 (Passover, Red Sea, song of Moses, manna, water from rock — major typological density expected, possibly 5+ lens average)
  • Batch 3: ex21–ex30 (Book of the Covenant, tabernacle instructions — mostly legal/architectural, lower lens average)
  • Batch 4: ex31–ex40 (Sabbath, golden calf, glory, tabernacle construction — golden calf chapter likely 6 lenses)

Refs #820. Closes part of #1781.

…#1781)
Opens the Exodus pilot using the same curated-sparse cadence proven on
Genesis. 41 entries across 10 chapters, all 100/100 on lens_quality_scorer.
Per-chapter distribution:
- ex1 (Israel multiplies; midwives) 4 lenses
- ex2 (Moses' birth and rescue) 5 lenses
- ex3 (burning bush; I AM) 6 lenses (theology peak)
- ex4 (objections; signs; circumcision) 4 lenses
- ex5 (first confrontation; bricks) 3 lenses (sparse, frustration)
- ex6 (renewed commission; YHWH name) 5 lenses
- ex7 (Aaron's staff; first plague) 4 lenses
- ex8 (plagues 2-4) 3 lenses (sparse, repetitive)
- ex9 (plagues 5-7; v 16 missional) 4 lenses
- ex10 (plagues 8-9) 3 lenses
Theological highlights:
- ex3 christocentric: Jn 8:58's 'I AM' explicitly cites v 14; the bush
as patristic type of the incarnation (presence that does not consume).
- ex2 typological: Moses saved from genocide and called out of Egypt
is the pattern Mt 2:13-15 cites of Christ.
- ex9 mission: v 16 ('that my name may be proclaimed in all the earth')
is the OT's most explicit missional charter, anchored to Rom 9:17.
- ex10 canonical: three days of darkness (vv 22-23) anticipate Amos 8:9,
Joel 2:31, and the cross's three-hour darkness (Mt 27:45).
- ex7 typological: Aaron's staff 'swallows' the magicians' (Hebrew bala')
threading to 1 Cor 15:54's 'death swallowed in victory'.
Pipeline gates (all green):
- schema_validator.py: 0 failed
- lens_quality_scorer.py: 41/41 entries 100/100
- build_sqlite.py: 8 lenses, 209 contents
- validate_sqlite.py: 0 failed
Drafting note: two minor restatements needed on ex2 redemptive (76%
themes-panel word overlap) and ex6 grammatical (61% overlap). Both
passed the 90 floor as drafted but were lifted to 100 with token-light
restatements. The themes panels for chapters with iconic single
verses (v 24 in ex2, v 3 in ex6) are dense paraphrases of those
verses, so plagiarism risk is highest there — flag for batch 2.
Branched off master pre-#1796 merge; once #1796 lands, the live
lens_contents row count will be 214 (Genesis complete) + 41 (this
batch) = 255.
@github-actions

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation142240 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: 93.0s

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): Exodus 1-10 lens content, batch 1 of Exodus pilot (#820, #1781) - #1797

Merged
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-2-exodus-1-to-10
Apr 29, 2026
Merged

feat(lenses): Exodus 1-10 lens content, batch 1 of Exodus pilot (#820, #1781)#1797
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-2-exodus-1-to-10

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Summary

Opens the Exodus pilot. Same curated-sparse cadence proven across the Genesis pilot, now applied to Exodus 1–10. 41 entries across 10 chapters, all scoring 100/100 on lens_quality_scorer after two minor restatements.

Per-chapter lens distribution

ChapterLensesNotes
ex1 — Israel multiplies; midwives' courage4literary, redemptive, canonical, devotional
ex2 — Moses' birth and rescue5grammatical, literary, typological, redemptive, devotional
ex3 — Burning bush; "I AM"6theology peak — divine name, presence, commission
ex4 — Objections; signs; circumcision crisis4grammatical, redemptive, canonical, devotional
ex5 — First confrontation; bricks without straw3literary, redemptive, devotional — sparse, frustration
ex6 — Renewed commission; YHWH name5grammatical, redemptive, canonical, christocentric, devotional
ex7 — Aaron's staff; first plague4literary, typological, redemptive, canonical
ex8 — Plagues 2–43literary, canonical, devotional — sparse, repetitive cycle
ex9 — Plagues 5–7 (incl. Rom 9:17 anchor)4redemptive, mission, canonical, devotional
ex10 — Plagues 8–93literary, redemptive, canonical

Total: 41 entries. Average 4.1 lenses/chapter — within the curated-sparse band. ex3 maxed at 6 because it's the theological centre of the book; ex5/ex8/ex10 sparse because they are narrative repetition or frustration chapters where forcing a sixth lens would dilute.

First missional lens of the pilot: ex9. Verse 16 ("that my name may be proclaimed in all the earth") is the OT's most explicit missional charter and is cited at Rom 9:17 — earning the lens a place where Genesis only had it once (gen10/gen12).

Theological highlights

  • ex3 christocentric: John 8:58's "before Abraham was, I AM" explicitly cites Ex 3:14 — and the bush that burns without being consumed (v 2) was read by Patristic readers as a type of the incarnation (presence sustaining its vessel without destroying it).
  • ex2 typological: Moses saved from genocide, drawn from water, called out of Egypt — the pattern Matthew 2:13–15 explicitly applies to Christ saved from Herod and called out of Egypt. Anchored, not invented.
  • ex9 mission: v 16's "that my name may be proclaimed in all the earth" → Rom 9:17 (Paul's argument from Pharaoh in his doctrine of election). Exodus's local conflict becomes the New Testament's missional theology.
  • ex10 canonical: Three days of darkness (vv 22–23) anticipates Amos 8:9, Joel 2:31, and the three-hour darkness at the cross (Mt 27:45) — judgement preceding redemption is the canonical pattern.
  • ex7 typological: Aaron's staff "swallows" (Hebrew בלע, bala') the magicians' (v 12) — same verb at 1 Cor 15:54 ("death swallowed up in victory"). Genuine Hebrew wordplay running across testaments.
  • ex2 literary: Moses' "basket" in v 3 is Hebrew tebah — used only of Noah's ark elsewhere (Gen 6:14). The narrative literally floats salvation on the same word twice.

Pipeline gates (all green)

GateResult
schema_validator.py141484 passed / 0 failed / 19 unrelated content warnings
lens_quality_scorer.py41/41 entries at 100/100 (all four dimensions full marks)
build_sqlite.py8 lenses, 209 contents
validate_sqlite.py101 passed / 0 failed

Drafting discipline — lessons applied and surfaced

The 250-char ceiling held — no entry exceeded 245 chars on first draft.

Two restatements needed, both for relevance (themes-panel word overlap above the 60% threshold):

EntryFirst-draft overlapAfter restate
ex2 redemptive (v 24, "God remembered his covenant")76%<50%
ex6 grammatical (v 3, YHWH self-disclosure)61%<50%

Both were 93/100 on the scorer (passing the 90 floor as drafted) but lifted to 100 by switching to less-paraphrased phrasing — ex2's restatement now anchors on Hebrew zakar and parallels at Gen 8:1 / 1 Sam 1:19; ex6's now leans on yada' and the relational/informational distinction.

Pattern to flag for future Exodus batches: chapters with iconic single verses where the themes panel itself is a dense paraphrase of that verse will hit the plagiarism threshold easily. Worth building this into the drafting checklist:

  • For verse anchors that are quoted in the themes panel (ex 2:24, 3:14, 6:3, 9:16, etc.), draft the entry deliberately to anchor on a different lexical handle than the themes panel uses.
  • A Hebrew/Greek term, a canonical parallel, or a different verse in the same chapter all work as alternative handles.

No banned filler patterns; no should_avoid matches; no should_avoid lens-specific avoid-phrases. The lens quality cadence is healthy.

Watch list for tier-2 audit

Six entries flagged for editor scrutiny on a deeper read.

  1. ex3 typological — "Patristic readers saw a type of the incarnation" (bush-not-consumed). Defensible (Gregory of Nyssa, Cyril of Alexandria, the standard Eastern reading) but brings patristic-specific imagery; some Reformed editors might prefer "anticipation" framing.
  2. ex3 christocentric — Tying Jn 8:58 directly to Ex 3:14 is the standard Christological reading but compresses fast; an editor may want to note the linguistic parallel (egō eimi / ehyeh) more explicitly.
  3. ex7 typologicalbala' ("swallow") connecting Aaron's staff to 1 Cor 15:54 is real lexical data but is a pattern claim that some traditions would prefer as "echoes" rather than a hard typology.
  4. ex9 mission — quoting v 16 then citing Rom 9:17 within a four-line entry: tightly compressed; sound but worth pacing slower in a tier-2 expansion.
  5. ex10 canonical — chaining vv 22–23 → Amos 8:9 → Joel 2:31 → Mt 27:45 in one sentence is theologically defensible but covers a lot of ground; an editor may want to slow this connection.
  6. ex2 typological — Mt 2:13–15 is an explicit citation; this one is on solid ground, but the framing "the pattern Matthew 2:13–15 cites" reads slightly forced. Cosmetic.

Branch / merge notes

Rollback plan

Revert the merge commit. The 10 new chapter files are additive and isolated under content/hermeneutic_lenses/chapters/; no existing content, schema, or app code is touched. SQLite rebuilds deterministically.

Roadmap

After this lands, batches 2–4 of Exodus complete the Exodus pilot:

  • Batch 2: ex11–ex20 (Passover, Red Sea, song of Moses, manna, water from rock — major typological density expected, possibly 5+ lens average)
  • Batch 3: ex21–ex30 (Book of the Covenant, tabernacle instructions — mostly legal/architectural, lower lens average)
  • Batch 4: ex31–ex40 (Sabbath, golden calf, glory, tabernacle construction — golden calf chapter likely 6 lenses)

Refs #820. Closes part of #1781.

…#1781)
Opens the Exodus pilot using the same curated-sparse cadence proven on
Genesis. 41 entries across 10 chapters, all 100/100 on lens_quality_scorer.
Per-chapter distribution:
- ex1 (Israel multiplies; midwives) 4 lenses
- ex2 (Moses' birth and rescue) 5 lenses
- ex3 (burning bush; I AM) 6 lenses (theology peak)
- ex4 (objections; signs; circumcision) 4 lenses
- ex5 (first confrontation; bricks) 3 lenses (sparse, frustration)
- ex6 (renewed commission; YHWH name) 5 lenses
- ex7 (Aaron's staff; first plague) 4 lenses
- ex8 (plagues 2-4) 3 lenses (sparse, repetitive)
- ex9 (plagues 5-7; v 16 missional) 4 lenses
- ex10 (plagues 8-9) 3 lenses
Theological highlights:
- ex3 christocentric: Jn 8:58's 'I AM' explicitly cites v 14; the bush
as patristic type of the incarnation (presence that does not consume).
- ex2 typological: Moses saved from genocide and called out of Egypt
is the pattern Mt 2:13-15 cites of Christ.
- ex9 mission: v 16 ('that my name may be proclaimed in all the earth')
is the OT's most explicit missional charter, anchored to Rom 9:17.
- ex10 canonical: three days of darkness (vv 22-23) anticipate Amos 8:9,
Joel 2:31, and the cross's three-hour darkness (Mt 27:45).
- ex7 typological: Aaron's staff 'swallows' the magicians' (Hebrew bala')
threading to 1 Cor 15:54's 'death swallowed in victory'.
Pipeline gates (all green):
- schema_validator.py: 0 failed
- lens_quality_scorer.py: 41/41 entries 100/100
- build_sqlite.py: 8 lenses, 209 contents
- validate_sqlite.py: 0 failed
Drafting note: two minor restatements needed on ex2 redemptive (76%
themes-panel word overlap) and ex6 grammatical (61% overlap). Both
passed the 90 floor as drafted but were lifted to 100 with token-light
restatements. The themes panels for chapters with iconic single
verses (v 24 in ex2, v 3 in ex6) are dense paraphrases of those
verses, so plagiarism risk is highest there — flag for batch 2.
Branched off master pre-#1796 merge; once #1796 lands, the live
lens_contents row count will be 214 (Genesis complete) + 41 (this
batch) = 255.
@github-actions

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation142240 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: 93.0s

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): Exodus 1-10 lens content, batch 1 of Exodus pilot (#820, #1781) - #1797

Merged
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-2-exodus-1-to-10
Apr 29, 2026
Merged

feat(lenses): Exodus 1-10 lens content, batch 1 of Exodus pilot (#820, #1781)#1797
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-2-exodus-1-to-10

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Summary

Opens the Exodus pilot. Same curated-sparse cadence proven across the Genesis pilot, now applied to Exodus 1–10. 41 entries across 10 chapters, all scoring 100/100 on lens_quality_scorer after two minor restatements.

Per-chapter lens distribution

ChapterLensesNotes
ex1 — Israel multiplies; midwives' courage4literary, redemptive, canonical, devotional
ex2 — Moses' birth and rescue5grammatical, literary, typological, redemptive, devotional
ex3 — Burning bush; "I AM"6theology peak — divine name, presence, commission
ex4 — Objections; signs; circumcision crisis4grammatical, redemptive, canonical, devotional
ex5 — First confrontation; bricks without straw3literary, redemptive, devotional — sparse, frustration
ex6 — Renewed commission; YHWH name5grammatical, redemptive, canonical, christocentric, devotional
ex7 — Aaron's staff; first plague4literary, typological, redemptive, canonical
ex8 — Plagues 2–43literary, canonical, devotional — sparse, repetitive cycle
ex9 — Plagues 5–7 (incl. Rom 9:17 anchor)4redemptive, mission, canonical, devotional
ex10 — Plagues 8–93literary, redemptive, canonical

Total: 41 entries. Average 4.1 lenses/chapter — within the curated-sparse band. ex3 maxed at 6 because it's the theological centre of the book; ex5/ex8/ex10 sparse because they are narrative repetition or frustration chapters where forcing a sixth lens would dilute.

First missional lens of the pilot: ex9. Verse 16 ("that my name may be proclaimed in all the earth") is the OT's most explicit missional charter and is cited at Rom 9:17 — earning the lens a place where Genesis only had it once (gen10/gen12).

Theological highlights

  • ex3 christocentric: John 8:58's "before Abraham was, I AM" explicitly cites Ex 3:14 — and the bush that burns without being consumed (v 2) was read by Patristic readers as a type of the incarnation (presence sustaining its vessel without destroying it).
  • ex2 typological: Moses saved from genocide, drawn from water, called out of Egypt — the pattern Matthew 2:13–15 explicitly applies to Christ saved from Herod and called out of Egypt. Anchored, not invented.
  • ex9 mission: v 16's "that my name may be proclaimed in all the earth" → Rom 9:17 (Paul's argument from Pharaoh in his doctrine of election). Exodus's local conflict becomes the New Testament's missional theology.
  • ex10 canonical: Three days of darkness (vv 22–23) anticipates Amos 8:9, Joel 2:31, and the three-hour darkness at the cross (Mt 27:45) — judgement preceding redemption is the canonical pattern.
  • ex7 typological: Aaron's staff "swallows" (Hebrew בלע, bala') the magicians' (v 12) — same verb at 1 Cor 15:54 ("death swallowed up in victory"). Genuine Hebrew wordplay running across testaments.
  • ex2 literary: Moses' "basket" in v 3 is Hebrew tebah — used only of Noah's ark elsewhere (Gen 6:14). The narrative literally floats salvation on the same word twice.

Pipeline gates (all green)

GateResult
schema_validator.py141484 passed / 0 failed / 19 unrelated content warnings
lens_quality_scorer.py41/41 entries at 100/100 (all four dimensions full marks)
build_sqlite.py8 lenses, 209 contents
validate_sqlite.py101 passed / 0 failed

Drafting discipline — lessons applied and surfaced

The 250-char ceiling held — no entry exceeded 245 chars on first draft.

Two restatements needed, both for relevance (themes-panel word overlap above the 60% threshold):

EntryFirst-draft overlapAfter restate
ex2 redemptive (v 24, "God remembered his covenant")76%<50%
ex6 grammatical (v 3, YHWH self-disclosure)61%<50%

Both were 93/100 on the scorer (passing the 90 floor as drafted) but lifted to 100 by switching to less-paraphrased phrasing — ex2's restatement now anchors on Hebrew zakar and parallels at Gen 8:1 / 1 Sam 1:19; ex6's now leans on yada' and the relational/informational distinction.

Pattern to flag for future Exodus batches: chapters with iconic single verses where the themes panel itself is a dense paraphrase of that verse will hit the plagiarism threshold easily. Worth building this into the drafting checklist:

  • For verse anchors that are quoted in the themes panel (ex 2:24, 3:14, 6:3, 9:16, etc.), draft the entry deliberately to anchor on a different lexical handle than the themes panel uses.
  • A Hebrew/Greek term, a canonical parallel, or a different verse in the same chapter all work as alternative handles.

No banned filler patterns; no should_avoid matches; no should_avoid lens-specific avoid-phrases. The lens quality cadence is healthy.

Watch list for tier-2 audit

Six entries flagged for editor scrutiny on a deeper read.

  1. ex3 typological — "Patristic readers saw a type of the incarnation" (bush-not-consumed). Defensible (Gregory of Nyssa, Cyril of Alexandria, the standard Eastern reading) but brings patristic-specific imagery; some Reformed editors might prefer "anticipation" framing.
  2. ex3 christocentric — Tying Jn 8:58 directly to Ex 3:14 is the standard Christological reading but compresses fast; an editor may want to note the linguistic parallel (egō eimi / ehyeh) more explicitly.
  3. ex7 typologicalbala' ("swallow") connecting Aaron's staff to 1 Cor 15:54 is real lexical data but is a pattern claim that some traditions would prefer as "echoes" rather than a hard typology.
  4. ex9 mission — quoting v 16 then citing Rom 9:17 within a four-line entry: tightly compressed; sound but worth pacing slower in a tier-2 expansion.
  5. ex10 canonical — chaining vv 22–23 → Amos 8:9 → Joel 2:31 → Mt 27:45 in one sentence is theologically defensible but covers a lot of ground; an editor may want to slow this connection.
  6. ex2 typological — Mt 2:13–15 is an explicit citation; this one is on solid ground, but the framing "the pattern Matthew 2:13–15 cites" reads slightly forced. Cosmetic.

Branch / merge notes

Rollback plan

Revert the merge commit. The 10 new chapter files are additive and isolated under content/hermeneutic_lenses/chapters/; no existing content, schema, or app code is touched. SQLite rebuilds deterministically.

Roadmap

After this lands, batches 2–4 of Exodus complete the Exodus pilot:

  • Batch 2: ex11–ex20 (Passover, Red Sea, song of Moses, manna, water from rock — major typological density expected, possibly 5+ lens average)
  • Batch 3: ex21–ex30 (Book of the Covenant, tabernacle instructions — mostly legal/architectural, lower lens average)
  • Batch 4: ex31–ex40 (Sabbath, golden calf, glory, tabernacle construction — golden calf chapter likely 6 lenses)

Refs #820. Closes part of #1781.

…#1781)
Opens the Exodus pilot using the same curated-sparse cadence proven on
Genesis. 41 entries across 10 chapters, all 100/100 on lens_quality_scorer.
Per-chapter distribution:
- ex1 (Israel multiplies; midwives) 4 lenses
- ex2 (Moses' birth and rescue) 5 lenses
- ex3 (burning bush; I AM) 6 lenses (theology peak)
- ex4 (objections; signs; circumcision) 4 lenses
- ex5 (first confrontation; bricks) 3 lenses (sparse, frustration)
- ex6 (renewed commission; YHWH name) 5 lenses
- ex7 (Aaron's staff; first plague) 4 lenses
- ex8 (plagues 2-4) 3 lenses (sparse, repetitive)
- ex9 (plagues 5-7; v 16 missional) 4 lenses
- ex10 (plagues 8-9) 3 lenses
Theological highlights:
- ex3 christocentric: Jn 8:58's 'I AM' explicitly cites v 14; the bush
as patristic type of the incarnation (presence that does not consume).
- ex2 typological: Moses saved from genocide and called out of Egypt
is the pattern Mt 2:13-15 cites of Christ.
- ex9 mission: v 16 ('that my name may be proclaimed in all the earth')
is the OT's most explicit missional charter, anchored to Rom 9:17.
- ex10 canonical: three days of darkness (vv 22-23) anticipate Amos 8:9,
Joel 2:31, and the cross's three-hour darkness (Mt 27:45).
- ex7 typological: Aaron's staff 'swallows' the magicians' (Hebrew bala')
threading to 1 Cor 15:54's 'death swallowed in victory'.
Pipeline gates (all green):
- schema_validator.py: 0 failed
- lens_quality_scorer.py: 41/41 entries 100/100
- build_sqlite.py: 8 lenses, 209 contents
- validate_sqlite.py: 0 failed
Drafting note: two minor restatements needed on ex2 redemptive (76%
themes-panel word overlap) and ex6 grammatical (61% overlap). Both
passed the 90 floor as drafted but were lifted to 100 with token-light
restatements. The themes panels for chapters with iconic single
verses (v 24 in ex2, v 3 in ex6) are dense paraphrases of those
verses, so plagiarism risk is highest there — flag for batch 2.
Branched off master pre-#1796 merge; once #1796 lands, the live
lens_contents row count will be 214 (Genesis complete) + 41 (this
batch) = 255.
@github-actions

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation142240 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: 93.0s

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): Exodus 1-10 lens content, batch 1 of Exodus pilot (#820, #1781) - #1797

Merged
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-2-exodus-1-to-10
Apr 29, 2026
Merged

feat(lenses): Exodus 1-10 lens content, batch 1 of Exodus pilot (#820, #1781)#1797
CraigBuckmaster merged 1 commit into
masterfrom
feat/820-2-exodus-1-to-10

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Summary

Opens the Exodus pilot. Same curated-sparse cadence proven across the Genesis pilot, now applied to Exodus 1–10. 41 entries across 10 chapters, all scoring 100/100 on lens_quality_scorer after two minor restatements.

Per-chapter lens distribution

ChapterLensesNotes
ex1 — Israel multiplies; midwives' courage4literary, redemptive, canonical, devotional
ex2 — Moses' birth and rescue5grammatical, literary, typological, redemptive, devotional
ex3 — Burning bush; "I AM"6theology peak — divine name, presence, commission
ex4 — Objections; signs; circumcision crisis4grammatical, redemptive, canonical, devotional
ex5 — First confrontation; bricks without straw3literary, redemptive, devotional — sparse, frustration
ex6 — Renewed commission; YHWH name5grammatical, redemptive, canonical, christocentric, devotional
ex7 — Aaron's staff; first plague4literary, typological, redemptive, canonical
ex8 — Plagues 2–43literary, canonical, devotional — sparse, repetitive cycle
ex9 — Plagues 5–7 (incl. Rom 9:17 anchor)4redemptive, mission, canonical, devotional
ex10 — Plagues 8–93literary, redemptive, canonical

Total: 41 entries. Average 4.1 lenses/chapter — within the curated-sparse band. ex3 maxed at 6 because it's the theological centre of the book; ex5/ex8/ex10 sparse because they are narrative repetition or frustration chapters where forcing a sixth lens would dilute.

First missional lens of the pilot: ex9. Verse 16 ("that my name may be proclaimed in all the earth") is the OT's most explicit missional charter and is cited at Rom 9:17 — earning the lens a place where Genesis only had it once (gen10/gen12).

Theological highlights

  • ex3 christocentric: John 8:58's "before Abraham was, I AM" explicitly cites Ex 3:14 — and the bush that burns without being consumed (v 2) was read by Patristic readers as a type of the incarnation (presence sustaining its vessel without destroying it).
  • ex2 typological: Moses saved from genocide, drawn from water, called out of Egypt — the pattern Matthew 2:13–15 explicitly applies to Christ saved from Herod and called out of Egypt. Anchored, not invented.
  • ex9 mission: v 16's "that my name may be proclaimed in all the earth" → Rom 9:17 (Paul's argument from Pharaoh in his doctrine of election). Exodus's local conflict becomes the New Testament's missional theology.
  • ex10 canonical: Three days of darkness (vv 22–23) anticipates Amos 8:9, Joel 2:31, and the three-hour darkness at the cross (Mt 27:45) — judgement preceding redemption is the canonical pattern.
  • ex7 typological: Aaron's staff "swallows" (Hebrew בלע, bala') the magicians' (v 12) — same verb at 1 Cor 15:54 ("death swallowed up in victory"). Genuine Hebrew wordplay running across testaments.
  • ex2 literary: Moses' "basket" in v 3 is Hebrew tebah — used only of Noah's ark elsewhere (Gen 6:14). The narrative literally floats salvation on the same word twice.

Pipeline gates (all green)

GateResult
schema_validator.py141484 passed / 0 failed / 19 unrelated content warnings
lens_quality_scorer.py41/41 entries at 100/100 (all four dimensions full marks)
build_sqlite.py8 lenses, 209 contents
validate_sqlite.py101 passed / 0 failed

Drafting discipline — lessons applied and surfaced

The 250-char ceiling held — no entry exceeded 245 chars on first draft.

Two restatements needed, both for relevance (themes-panel word overlap above the 60% threshold):

EntryFirst-draft overlapAfter restate
ex2 redemptive (v 24, "God remembered his covenant")76%<50%
ex6 grammatical (v 3, YHWH self-disclosure)61%<50%

Both were 93/100 on the scorer (passing the 90 floor as drafted) but lifted to 100 by switching to less-paraphrased phrasing — ex2's restatement now anchors on Hebrew zakar and parallels at Gen 8:1 / 1 Sam 1:19; ex6's now leans on yada' and the relational/informational distinction.

Pattern to flag for future Exodus batches: chapters with iconic single verses where the themes panel itself is a dense paraphrase of that verse will hit the plagiarism threshold easily. Worth building this into the drafting checklist:

  • For verse anchors that are quoted in the themes panel (ex 2:24, 3:14, 6:3, 9:16, etc.), draft the entry deliberately to anchor on a different lexical handle than the themes panel uses.
  • A Hebrew/Greek term, a canonical parallel, or a different verse in the same chapter all work as alternative handles.

No banned filler patterns; no should_avoid matches; no should_avoid lens-specific avoid-phrases. The lens quality cadence is healthy.

Watch list for tier-2 audit

Six entries flagged for editor scrutiny on a deeper read.

  1. ex3 typological — "Patristic readers saw a type of the incarnation" (bush-not-consumed). Defensible (Gregory of Nyssa, Cyril of Alexandria, the standard Eastern reading) but brings patristic-specific imagery; some Reformed editors might prefer "anticipation" framing.
  2. ex3 christocentric — Tying Jn 8:58 directly to Ex 3:14 is the standard Christological reading but compresses fast; an editor may want to note the linguistic parallel (egō eimi / ehyeh) more explicitly.
  3. ex7 typologicalbala' ("swallow") connecting Aaron's staff to 1 Cor 15:54 is real lexical data but is a pattern claim that some traditions would prefer as "echoes" rather than a hard typology.
  4. ex9 mission — quoting v 16 then citing Rom 9:17 within a four-line entry: tightly compressed; sound but worth pacing slower in a tier-2 expansion.
  5. ex10 canonical — chaining vv 22–23 → Amos 8:9 → Joel 2:31 → Mt 27:45 in one sentence is theologically defensible but covers a lot of ground; an editor may want to slow this connection.
  6. ex2 typological — Mt 2:13–15 is an explicit citation; this one is on solid ground, but the framing "the pattern Matthew 2:13–15 cites" reads slightly forced. Cosmetic.

Branch / merge notes

Rollback plan

Revert the merge commit. The 10 new chapter files are additive and isolated under content/hermeneutic_lenses/chapters/; no existing content, schema, or app code is touched. SQLite rebuilds deterministically.

Roadmap

After this lands, batches 2–4 of Exodus complete the Exodus pilot:

  • Batch 2: ex11–ex20 (Passover, Red Sea, song of Moses, manna, water from rock — major typological density expected, possibly 5+ lens average)
  • Batch 3: ex21–ex30 (Book of the Covenant, tabernacle instructions — mostly legal/architectural, lower lens average)
  • Batch 4: ex31–ex40 (Sabbath, golden calf, glory, tabernacle construction — golden calf chapter likely 6 lenses)

Refs #820. Closes part of #1781.

…#1781)
Opens the Exodus pilot using the same curated-sparse cadence proven on
Genesis. 41 entries across 10 chapters, all 100/100 on lens_quality_scorer.
Per-chapter distribution:
- ex1 (Israel multiplies; midwives) 4 lenses
- ex2 (Moses' birth and rescue) 5 lenses
- ex3 (burning bush; I AM) 6 lenses (theology peak)
- ex4 (objections; signs; circumcision) 4 lenses
- ex5 (first confrontation; bricks) 3 lenses (sparse, frustration)
- ex6 (renewed commission; YHWH name) 5 lenses
- ex7 (Aaron's staff; first plague) 4 lenses
- ex8 (plagues 2-4) 3 lenses (sparse, repetitive)
- ex9 (plagues 5-7; v 16 missional) 4 lenses
- ex10 (plagues 8-9) 3 lenses
Theological highlights:
- ex3 christocentric: Jn 8:58's 'I AM' explicitly cites v 14; the bush
as patristic type of the incarnation (presence that does not consume).
- ex2 typological: Moses saved from genocide and called out of Egypt
is the pattern Mt 2:13-15 cites of Christ.
- ex9 mission: v 16 ('that my name may be proclaimed in all the earth')
is the OT's most explicit missional charter, anchored to Rom 9:17.
- ex10 canonical: three days of darkness (vv 22-23) anticipate Amos 8:9,
Joel 2:31, and the cross's three-hour darkness (Mt 27:45).
- ex7 typological: Aaron's staff 'swallows' the magicians' (Hebrew bala')
threading to 1 Cor 15:54's 'death swallowed in victory'.
Pipeline gates (all green):
- schema_validator.py: 0 failed
- lens_quality_scorer.py: 41/41 entries 100/100
- build_sqlite.py: 8 lenses, 209 contents
- validate_sqlite.py: 0 failed
Drafting note: two minor restatements needed on ex2 redemptive (76%
themes-panel word overlap) and ex6 grammatical (61% overlap). Both
passed the 90 floor as drafted but were lifted to 100 with token-light
restatements. The themes panels for chapters with iconic single
verses (v 24 in ex2, v 3 in ex6) are dense paraphrases of those
verses, so plagiarism risk is highest there — flag for batch 2.
Branched off master pre-#1796 merge; once #1796 lands, the live
lens_contents row count will be 214 (Genesis complete) + 41 (this
batch) = 255.
@github-actions

Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

StepStatusDetails
Schema Validation142240 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: 93.0s

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