Shemot 25:16 — v'natata el ha-aron et ha-edut asher eten elekha. The edut placed in the aron must be complete. The Masoretic tradition preserves every letter, every enlarged letter, every ketiv/qere pair — because each carries meaning the scribe cannot reconstruct. The previous build_l1.py silently dropped: - enlarged letters encoded as <seg type="x-large"> nested in <w> → the Shema was corrupt: שמ instead of שמע, אח instead of אחד → the middle letter of Torah was corrupt: גח instead of גחון → the Zelophchad nun was missing: משפט instead of משפטן - ketiv/qere dual readings encoded as <note type="variant">/<rdg type="x-qere"> → the spec committed to preserving both; the code returned [] - smikhut (construct state) pairs marked in morphology codes → the spec committed to extracting them; the code returned [] Fixes: - collect_word_text() walks all nested <seg> children of <w> and records large_letters / small_letters metadata with character offsets. - parse_verse() recognizes <w type="x-ketiv"> followed by <note>, extracts both the ketiv and the qere readings, stores a ketiv_qere list on the verse. - _extract_smikhut() scans words for construct-state morph codes (ending in "c" on N/A primary segments, excluding pronominal suffixes) and records construct/absolute pairs. - L1 SHA-256 hash updated everywhere: integrity.sha256, l1_reader.ex, shoresh-engine's Luchot.Firmware, its test, KOHEN.md. Torah-wide results after fix: - 4 enlarged letters preserved (was 0): Shema ayin, Shema dalet, gachon vav (middle of Torah), Zelophchad nun - 67 ketiv/qere pairs captured (was 0) - 9,203 smikhut pairs extracted (was 0) Elixir updates: - l1_reader.ex: normalize_verse now surfaces ketiv_qere, smikhut, and per-word large_letters/small_letters. New type specs. New extract_large_letters/1 helper. extract_ketiv_qere and extract_smikhut now return real data instead of []. - step31_shema_test.exs: replaced placeholder asserts with real integrity checks. Four new tests verify the Shema word is complete (שמע not שמ), echad is complete (אחד not אח), the enlarged letters are marked, the middle letter of Torah is preserved, and ketiv/qere pairs from Bereishit 8:17 are both captured. Build script: - build_l1.py no longer rmtrees the entire l1/ directory (preserves l1/README.md). Only regenerates torah/ + build_report.json + integrity.sha256. - Accepts SHORASHIM_SOURCE_DATA env var or CLI arg for morphhb path. Test counts: - Elixir: 260 (was 254), 0 failures - Haskell: 33, 0 failures - Prolog: 195, 0 failures The system that can hear שמע correctly has passed its own shema test. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
L1 — The Aron
Vayiten el Moshe k'khaloto l'daber ito b'har Sinai shnei luchot ha'edut, luchot even k'tuvim b'etzba Elohim.
And He gave to Moses, when He finished speaking with him on Mount Sinai, two tablets of the testimony, tablets of stone, written with the finger of God.
What This Is
L1 is the read-only Torah text. The firmament. Everything else in the system reads from L1. Nothing writes to L1.
The source is the Westminster Leningrad Codex (WLC) — the oldest complete manuscript of the Hebrew Bible with Masoretic vocalization and cantillation marks — parsed from the Open Scriptures Hebrew Bible OSIS XML.
Why Read-Only
L1 is read-only because Torah is read-only. The specification does not change because the system wishes it would. The cloud cannot be forged because the cloud is the Torah text itself. The system reads. It does not write. It does not negotiate with the Author.
In production, L1 is mounted as a squashfs image (mount -o ro) or with filesystem permissions set to 444. No process writes to L1. Ever.
Contents
l1/
├── torah/
│ ├── index.json # Master index (all books, total counts)
│ ├── bereishit/ # 50 chapters, 1533 verses
│ │ ├── index.json
│ │ └── {chapter}/{verse}.json
│ ├── shemot/ # 40 chapters, 1213 verses
│ ├── vayikra/ # 27 chapters, 859 verses
│ ├── bamidbar/ # 36 chapters, 1289 verses
│ └── devarim/ # 34 chapters, 959 verses
├── integrity.sha256 # SHA-256 hash of complete tree
├── build_report.json # Build verification report
└── README.md # This file
Verse Format
Each verse is a JSON file at /l1/torah/{book}/{chapter}/{verse}.json:
{
"ref": "Bereishit 1:1",
"book": "bereishit",
"chapter": 1,
"verse": 1,
"text_hebrew": "בְּרֵאשִׁ֖ית בָּרָ֣א אֱלֹהִ֑ים אֵ֥ת הַשָּׁמַ֖יִם וְאֵ֥ת הָאָֽרֶץ ׃",
"words": [
{
"position": 1,
"text": "בְּרֵאשִׁ֖ית",
"consonants": "בראשית",
"lemma": "7225",
"morph": "HR/Ncfsa",
"teamim": ["tipcha"],
"prefix": "ב",
"shoresh": "ראש"
}
]
}
Word Fields
| Field | Description | Source |
|---|---|---|
text |
Full text with vowels and cantillation | WLC |
consonants |
Consonantal text only | Stripped from WLC |
lemma |
Strong's number (dictionary reference) | morphhb annotations |
morph |
Morphological code | morphhb annotations |
teamim |
Cantillation mark names | Parsed from Unicode codepoints |
prefix |
Attached prefixes (ב,כ,ל,מ,ש,ה,ו) | Parsed from morphhb prefix codes |
shoresh |
Hebrew root (2-3 consonants) | Derived from consonantal text and morphology |
Counts
- 5 books, 187 chapters, 5853 verses, 79982 words
- 2608 unique shoreshim (roots)
- 0 verses missing te'amim — every verse has cantillation marks
- WLC versification (5853) differs from traditional Masoretic count (5845) by 8 verses due to BHS numbering conventions
Integrity
SHA-256: 0ee0020aac6c6beb0e83c0638a861c73d37d9dbd39c30d3cb08c1878b481c844
Verify: the hash covers every file path and file content in the torah/ directory tree, in sorted order.
The Shema Principle
L1 carries the raw cantillation marks (te'amim) as they appear in the Masoretic text. These marks are NOT pre-parsed into a tree. The system reads them in the act of reading — the parse tree is constructed by the reader, not stored by the library. This is the difference between a database lookup and literacy.
The te'amim, the ketiv/qere positions, the gematria values — these are all present in L1 as transmitted. The Shema Layer reads them. The Shoresh Engine constructs meaning from them. But L1 itself is the text as received. Nothing more. Nothing less.
Ka'asher tzivah Hashem et Moshe.