Skip to content

feat(lenses): Exodus 21-30 lens content, batch 3 of Exodus pilot (#820, #1781)#1799

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

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

Conversation

@CraigBuckmaster
Copy link
Copy Markdown
Owner

Summary

Batch 3 of the Exodus pilot. Book of the Covenant (ex21–23) + covenant ratification (ex24) + tabernacle instructions (ex25–30). 35 entries across 10 chapters, all 100/100 on lens_quality_scorer after one small fix pass.

The lowest per-chapter density of any batch in the pilot — average 3.5 lenses/chapter — and that's correct. Legal codes and architectural specifications don't need six lenses each; forcing them would dilute. ex24 is the only peak (5 lenses) because covenant ratification is the chapter where law-and-construction become liturgy.

Per-chapter lens distribution

Chapter Lenses Notes
ex21 — Servants; injury laws 3 literary, redemptive, canonical
ex22 — Property + vulnerable protection 3 literary, redemptive, canonical
ex23 — Justice + festivals + angel 4 literary, redemptive, typological, canonical
ex24 — Covenant ratification 5 literary, typological, christocentric, redemptive, canonical
ex25 — Ark; mercy seat; lampstand 4 grammatical, typological, christocentric, canonical
ex26 — Coverings; veils 3 literary, typological, christocentric
ex27 — Bronze altar; courtyard 3 literary, typological, redemptive
ex28 — Priestly garments 3 grammatical, typological, christocentric
ex29 — Priestly consecration 4 literary, typological, christocentric, devotional
ex30 — Incense; basin; oil 3 literary, typological, canonical

Total 35 entries, average 3.5 lenses/chapter.

Theological highlights

  • ex24 christocentric: v 8's "blood of the covenant" is the formula Christ redeploys verbatim at Mt 26:28 ("this is my blood of the covenant"). The Last Supper deliberately rewrites Sinai into the upper room — same blood-grammar, new mediator.
  • ex25 grammatical: kapporet (mercy seat) from root kafar ("to cover, atone") — not throne-cushion but atonement-cover. Cherubim guarding the mercy seat (v 18) recall Gen 3:24's cherubim guarding Eden; Christ as both throne and atonement reopens what Eden's cherubim closed.
  • ex25 canonical: v 40's "according to the pattern shown to you on the mountain" → Heb 8:5 ("a copy and shadow of the heavenly things") → Heb 9:24 (Christ entering the heavenly archetype). The tabernacle is reverse-engineered from heaven.
  • ex26 typological: the inner veil (vv 31–33) is built to be torn — Mark 15:38 tears it from top to bottom; Heb 10:19–20 names Christ's flesh the new way through. Cherubim woven into the veil match the ark's cherubim — guards on both sides of the boundary.
  • ex28 typological: Aaron carries the twelve tribes' names on his shoulders and over his heart (vv 9–12, 29) — high priest physically bears Israel into God's presence. Heb 4:14: Christ as great high priest carries his people the same way.
  • ex29 christocentric: blood on ear/thumb/toe (v 20) consecrates hearing, doing, walking — whole-life purification. Heb 7:27: Christ's once-for-all sacrifice abolishes the cycle while fulfilling its meaning.
  • ex30 typological: the half-shekel atonement-money is "the same for rich and poor" (v 15) — covenant atonement levels the human field. The pattern points to one ransom, every soul, no scaling.
  • ex23 typological: "my angel will go before you" with "my name in him" (vv 20–21) — patristic readers saw the angel of Yahweh as pre-incarnate appearance. Defensible across multiple traditions.

Pipeline gates (all green)

Gate Result
schema_validator.py 142820 passed / 0 failed
lens_quality_scorer.py 35/35 entries at 100/100 after fix pass
build_sqlite.py 8 lenses, 290 contents (255 baseline + 35 new)
validate_sqlite.py 101 passed / 0 failed

Drafting note — token-swap fixes (lesson surfaced)

Three entries needed a single fix iteration. The pattern:

Entry Issue
ex25 typological used "thread" (a canonical token) without a typological token
ex25 canonical used "pattern" (a typological token) without a canonical token
ex28 typological lacked any of: type/foreshadow/anticipates/echoes/prefigures

Same root cause as the gen42/43 structural/narrator fix in batch 4 of the Genesis pilot: the rubric must_have_one_of lists are strict substring matches, and the typological/canonical token sets overlap conceptually but are scored disjointly. Drafting under the assumption that "this is clearly a typological entry" doesn't help if the entry uses canonical tokens — the scorer doesn't read the lens label, only the substrings.

Suggested rubric improvement (would be ~5 min): the rubric file already separates these lists; consider adding a small overlap allowance (e.g., "thread" → counts for both) or making each lens's must_have_one_of more distinct. Alternatively, add this to the drafting checklist: "verify each lens entry contains a token from that lens's specific list, not the conceptual neighbour".

Three quick str_replace swaps fixed all three. No content rewrite.

Branch / merge notes

Watch list for tier-2 audit

Five entries flagged for editor review:

  1. ex23 typological — "patristic readers saw the angel of Yahweh as pre-incarnate appearance" — defensible across Justin/Irenaeus/Calvin but is a classical Reformed reading; some Eastern traditions are more hesitant.
  2. ex24 christocentric — Mt 26:28 cited verbatim of v 8 ("blood of the covenant"); the connection is direct lexical citation but reads tightly compressed.
  3. ex25 christocentric — Gen 3:24 cherubim → ex 25:18 cherubim → Christ reopens Eden is a defensible patristic-Reformed move but covers a lot of ground in three lines.
  4. ex26 typological — "the chapter's veil is built to be torn" is rhetorically strong; sound but interpretive.
  5. ex28 christocentric — gold-plate "holy to the LORD" → Christ "bears not flawed worship but the worshippers themselves" is a creative theological move; defensible but worth tier-2 calibration.

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.

Roadmap

After this lands, batch 4 (ex31–ex40) closes the Exodus pilot. Golden calf, glory, covenant renewal, tabernacle construction. Expected high density on ex32 (calf), ex33 (glory), ex34 (renewal); construction chapters (ex36–39) will be sparse like this batch.

Refs #820. Closes part of #1781.

#1781)

Book of the Covenant + tabernacle instructions. Lower per-chapter density
(legal/architectural genre): 35 entries across 10 chapters, average 3.5
lenses/chapter. All 100/100 on lens_quality_scorer.

Per-chapter distribution:
- ex21 (servants; injury laws)              3 lenses
- ex22 (property; vulnerable-protection)    3 lenses
- ex23 (justice; festivals; angel)          4 lenses
- ex24 (covenant ratification)              5 lenses (peak)
- ex25 (ark; mercy seat; lampstand)         4 lenses
- ex26 (coverings; veils)                   3 lenses
- ex27 (bronze altar; courtyard)            3 lenses
- ex28 (priestly garments)                  3 lenses
- ex29 (priestly consecration)              4 lenses
- ex30 (incense; basin; oil)                3 lenses

Theological highlights:
- ex24 christocentric: v 8's 'blood of the covenant' is the formula
  Christ redeploys verbatim at Mt 26:28 — Sinai becomes upper room.
- ex25 grammatical: kapporet = mercy seat, root kafar (atone). Cherubim
  guarding the mercy seat (v 18) recall Eden's cherubim (Gen 3:24);
  Christ reopens what they closed.
- ex26 typological: the inner veil (vv 31-33) is built to be torn
  (Mark 15:38, Heb 10:19-20) — woven cherubim match the ark's cherubim.
- ex28 typological: Aaron carries Israel's names on shoulders + heart;
  Christ as great high priest (Heb 4:14) carries his people the same way.
- ex29 christocentric: blood on ear/thumb/toe (v 20) consecrates
  hearing/doing/walking; Heb 7:27 abolishes the cycle while fulfilling it.
- ex30 typological: half-shekel atonement-money the same for rich and
  poor (v 15) — one ransom, no scaling, prefiguring Christ's.
- ex23 typological: 'my angel... with my name in him' (vv 20-21) read
  by patristics as pre-incarnate appearance.

Pipeline gates (all green):
- schema_validator.py: 0 failed (142820 passed)
- lens_quality_scorer.py: 35/35 entries 100/100 (one fix iteration —
  three rubric-token misses fixed in seconds)
- build_sqlite.py: 8 lenses, 290 contents (255 baseline + 35 new)
- validate_sqlite.py: 0 failed

Drafting note: three rubric-token swaps needed (ex25 typological,
ex25 canonical, ex28 typological). I had used 'thread' (canonical
token) in a typological entry and 'pattern' (typological token) in a
canonical entry — same lesson as the genesis batch 5 'structural'/
'narrator' issue. The lens_rubrics.json must_have_one_of lists are
strict substring matches, so token-token swaps don't carry over
between lenses. Worth a small rubric improvement: typological's tokens
overlap heavily with canonical's, and the scorer treats them as
disjoint. Future drafts should check both lists when in doubt.

Branched off latest master pre-#1798 merge; once #1798 lands, the
live lens_contents row count will be 303 + 35 = 338.
@github-actions
Copy link
Copy Markdown

Content Pipeline Results

✅ All pipeline checks passed

Step Status Details
Schema Validation 142820 passed, 0 failed
Build DB
DB Integrity 101 passed, 0 failed

@github-actions
Copy link
Copy Markdown

Test Results

✅ All tests passed

Passed Failed Total
Tests ✅ 4001 ❌ 0 4001
Suites ✅ 532 ❌ 0 532

Coverage

Statements Branches Functions Lines

⏱️ Duration: 93.7s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant