Construction §1.2 specified an L1 that was never built: WLC 4.22 from a Sefaria export cross-validated against TANACH.us, a gematria lookup table, a squashfs image mounted read-only, a verse format with fields named `hebrew`, `consonantal`, `cantillation`. Each property was checked against the sources on disk and the 5,853 verse files before it was rewritten. - Edition: WLC 4.20, as the Open Scriptures Hebrew Bible carries it (every Torah file's header says "Updated to WLC version 4.20"). - Sources: openscriptures/morphhb @ 3d15126 for the text, lemma and morphology; openscriptures/HebrewLexicon @ 21c9add for the roots. Licences stated. ONE source for the text — the two-source cross-validation the section prescribed has not been done, and the section now says so. - Builder, extent (5 / 187 / 5,853 / 79,982), the real verse and word format, ketiv/qere (67 pairs, 64 verses), smikhut (9,203 pairs, 4,106 verses), shoresh (57,487 words, 1,378 roots, by lemma). - Gematria: not stored; computed when read. - Petuchah/setumah: in the source (233 + 394 milestones across the five books), NOT carried into L1 — the builder does not read them. Stated. - Verification procedure: the six steps that are actually performed — pinned checkouts, build_l1.py and its counts, the hash, the three places the hash is bound, root-owned read-only in the images, the witness and verify_l1.py. specs/shorashim_terumah.md §E1 matched the old section; corrected (source, ketiv/qere format, smikhut built, gematria not an index, paragraph markers ⚠️). l1/README.md no longer says squashfs. Doorpost @expected_hash 3f6d47a0… → 21f1a4d5…, in this commit, with the witnessed file that moved it (vayakhel). Read before committing: Elixir 484/0 (seeds 0, 42); verify_l1.py OK (l1/README.md is outside the hashed tree); pipeline image reports specification_identity verified 21f1a4d5…, l1_hash pass. Left as written: tamid's runbook steps that mount L1 from a squashfs image; architecture §3.7 and §4's build steps (squashfs, Sefaria); pekudei's cost line naming Sefaria. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
130 lines
6.0 KiB
Markdown
130 lines
6.0 KiB
Markdown
# 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](https://github.com/openscriptures/morphhb) 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 baked into every image at `/mnt/torah`, owned by root with no write bit (directories 555, files 444): the service user can read it and cannot change it. The pipeline reads and hashes the whole tree at startup and every ten minutes, and will not run a cycle on a scroll that does not match its pinned hash. `scripts/verify_l1.py` does the same reading by hand. 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`:
|
||
|
||
```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, as Brown-Driver-Briggs files the word's lemma | Read from the OSHB lexical index by `lemma` — see *Roots* below |
|
||
|
||
## Roots
|
||
|
||
The text of L1 is the WLC. The `shoresh` on each word is not text; it is a
|
||
reading of the text, and it is read from a lexicon, not guessed.
|
||
|
||
Every word in the WLC carries its lemma (a Strong's number). The
|
||
[OSHB Hebrew Lexicon](https://github.com/openscriptures/HebrewLexicon)
|
||
(`LexicalIndex.xml`, `AugIndex.xml`) files each lemma under its
|
||
Brown-Driver-Briggs root. `scripts/build_l1.py` follows that filing:
|
||
|
||
| The lexicon says | `shoresh` | Words | Example |
|
||
|---|---|---|---|
|
||
| the lemma is a root (`main`) | that root | 23,750 | וַיַּרְא → ראה |
|
||
| the lemma is filed under a root (`sub`) | that root | 31,066 | מִזְבֵּחַ → זבח, לְבָבְךָ → לבב |
|
||
| the lemma stands alone (`single`) | the word itself | 2,671 | מֹשֶׁה → משה |
|
||
| no etymology recorded | *absent* | 3,002 | יוֹסֵף, מִצְרַיִם |
|
||
| — particle, preposition, conjunction, pronoun | *absent*, by rule | 19,493 | אֵת, אֲשֶׁר, כִּי |
|
||
|
||
Roots are written as the lexicon writes them: mostly three letters, some
|
||
two (בן, יד), some four or more (שמאל).
|
||
|
||
Until 2026-10-04 this field was derived by stripping letters from the
|
||
consonants and keeping the first three: וירא ("and he saw") was recorded
|
||
as ירא ("fear"), ויהי as יהי, שמים as שמ, and every word with a pronominal
|
||
suffix had no root at all. That is broken tablet 34. Only `shoresh`
|
||
changed in the re-engraving — every other field of every verse is
|
||
byte-identical to the previous L1 (hash `99bbd07a…`).
|
||
|
||
Sources at the time of engraving are recorded in `build_report.json`
|
||
(`sources`): morphhb `3d15126`, HebrewLexicon `21c9add`.
|
||
|
||
## Counts
|
||
|
||
- **5 books**, 187 chapters, 5853 verses, 79982 words
|
||
- **1378 unique shoreshim** (roots); 57,487 words carry one
|
||
- **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.*
|