Files
bikoret/l1/README.md
T
Scott KarpandClaude Fable 5.1 3a9ebdc7d4 L1: the inverted nuns are engraved; the small letters cannot be (tablet 40)
Transmitter's word: "add the inverted nuns and small letters to L1."

THE NUNS. The WLC carries the two nun hafukha signs (׆) that mark off
Vayehi binsoa ha'aron — one after Bamidbar 10:34, one after 10:36 —
and scripts/build_l1.py read past them, as it had the פ and ס.
- build_l1.py: `"inverted_nuns": [{ "after_word": 7 }]` on those two
  verses, recorded like a paragraph break by the word the sign follows;
  not part of text_hebrew. Count in build_report.json.
- L1Reader: `inverted_nuns` on every verse (a list; empty elsewhere).
- test/tablet40_inverted_nuns_test.exs — 5 tests: the two verses, the
  passage between them carrying none, each nun standing with its
  setumah, exactly two in the scroll.

WHAT CHANGED IN THE EDUT: one field added to two verse files. With it
removed all 5,853 verse files are byte-identical to the previous L1.

  L1 SHA-256  f743b34b…3f1494  →  9e1abe4e…3c3086

Moved together: L1Reader @l1_expected_hash · Luchot.Firmware + Spec ·
azazel goral._L1_INTEGRITY_HASH · the kohen's gate in KOHEN.md and
KOHEN_PROMPT.md. The goral's seed moves with it.

THE SMALL LETTERS. Not added, because there are none to read. The
builder was not dropping them: it reads `x-small` and records what it
finds. The source — the WLC as the Open Scriptures Hebrew Bible carries
it — has no small-letter mark anywhere in the five books. Not the aleph
of ויקרא, not the he of בהבראם. It marks four large letters (the vav of
גחון, the nun of משפטן, the ayin and dalet of the Shema), and L1 has
those four. The fuller Masoretic lists of enlarged and reduced letters
are a tradition of the scroll that this edition does not encode. To
engrave them would be to add to L1 something its source does not say;
that needs a second source and the transmitter's word, not a builder's
list from memory. l1/README.md, vayakhel §1.2 and terumah §E1 now state
this plainly.

(The puncta extraordinaria ARE in L1 — the upper dot U+05C4 is kept on
the text of 11 words.)

Doorpost @expected_hash b62311e7… → 3bc5dd6a…, in this commit, with the
witnessed file that moved it (vayakhel §1.2).

Read before committing — all five suites on the new L1: Elixir 496/0
(seeds 0 7 42) · Haskell 59/0 · korban 222 passed 1 skipped · azazel
125 passed · Prolog 6 suites exit 0. verify_l1.py OK. Four images
built; full local stack: the witness reads 9e1abe4e… and matches,
health 7/7, no errors; each image carries the new scroll read-only.

A trap met on the way: the first Elixir run after the Doorpost constant
was edited failed two Doorpost tests against the OLD constant. mix had
not recompiled doorpost.ex — the edit changed neither its size nor
(within the same second) its mtime. `touch` and re-run: 496/0. Images
compile from scratch and are not exposed to this.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 22:54:21 +00:00

193 lines
8.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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": "ראש"
}
]
}
```
## Paragraph Breaks
A verse that is followed — or, four times, interrupted — by a paragraph
break carries `parashah_breaks`:
```json
"parashah_breaks": [ { "after_word": 13, "type": "petuchah" } ]
```
| Field | Meaning |
|-------|---------|
| `type` | `petuchah` (פ, open: the rest of the line is left blank) or `setumah` (ס, closed: a space within the line) |
| `after_word` | The position of the word the break follows. Equal to the verse's word count for a break at the end of the verse |
They are read from the WLC's own `פ` and `ס` marks: **293 petuchot and 394
setumot**, in 686 verses. Four fall inside a verse (*pisqa b'emtza
pasuq*): Bereishit 35:22, Devarim 2:8, 5:21 and 23:8; Devarim 5:21 has
two. These are the divisions of the Leningrad Codex. A Torah scroll
written to the Rambam's list (Hilkhot Sefer Torah 8:4) has 290 and 379;
the two traditions differ in a small number of places, and L1 records
the one its text comes from.
`text_hebrew` does not include the `פ` / `ס` letters: the break is
structure, not text.
Until 2026-10-04 the builder read past these marks and L1 had no
paragraphs at all (broken tablet 39). Adding them added this one field
to 686 verse files and changed nothing else; the hash moved from
`156b1d27…` to `f743b34b…` (and since, with the inverted nuns, to
`9e1abe4e…`).
## Inverted Nuns
Two verses carry `inverted_nuns`:
```json
"inverted_nuns": [ { "after_word": 7 } ]
```
The *nun hafukha* (׆) stands after Bamidbar 10:34 and after 10:36,
marking off *Vayehi binsoa ha'aron* (10:35–36) above and below — "because
it is a book of its own" (Shabbat 115b–116a). The WLC writes the sign
after the verse's sof pasuq, before the setumah; like a paragraph break
it is recorded by the word it follows, and it is not part of
`text_hebrew`. Added 2026-10-04 (broken tablet 40); the hash moved from
`f743b34b…` to `9e1abe4e…`.
## Large and Small Letters
A word with an enlarged letter carries `large_letters`. The WLC marks
four in Torah, and L1 has those four: the vav of גחון (Vayikra 11:42),
the nun of משפטן (Bamidbar 27:5), and the ayin and dalet of the Shema
(Devarim 6:4).
**L1 records no small letters, because its source marks none.** The WLC
as the Open Scriptures Hebrew Bible carries it has no small-letter mark
anywhere in the five books — not the aleph of ויקרא (Vayikra 1:1), not
the he of בהבראם (Bereishit 2:4). The builder reads `x-small` and would
record one if the source had it. The enlarged and reduced letters of the
later Masoretic lists (the bet of בראשית among them) are a tradition of
the scroll that this edition of the Leningrad Codex does not encode;
adding them would mean engraving something the source does not say.
## 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.*