Files
bikoret/l1/README.md
T
Scott KarpandClaude Fable 5.1 7d46fdc7c9 L1: the petuchot and setumot are engraved (tablet 39)
The scroll in the aron had no paragraphs. The WLC marks every petuchah
(פ) and setumah (ס); scripts/build_l1.py handled sof pasuq, maqaf and
paseq and read past these. L1 was 5,853 verses divided only by chapter
numbers, which are not Torah's.

Transmitter's word: "add the petuchah and setumah markers to L1."

- build_l1.py: a verse followed — or interrupted — by a break carries
    "parashah_breaks": [{ "after_word": 13, "type": "petuchah" }]
  The break is recorded by the word it follows; at the end of a verse
  that is the verse's word count. text_hebrew is untouched: the break
  is structure, not letters. Counts go into build_report.json.
- 293 petuchot and 394 setumot, in 686 verses — the source's count
  exactly. Four fall inside a verse (pisqa b'emtza pasuq): Bereishit
  35:22, Devarim 2:8, 5:21, 23:8; Devarim 5:21 has two. These are the
  Leningrad Codex's divisions (a scroll written to the Rambam's list
  has 290 and 379); the README says which tradition L1 records.

WHAT CHANGED IN THE EDUT: one field added to 686 verse files. Verified
file by file — with that field removed, all 5,853 verse files are
byte-identical to the previous L1.

  L1 SHA-256  156b1d27…d8c9d5  →  f743b34b…3f1494

Moved together, because they pin the hash: 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 changes with it;
azazel records already in L3 stand as cast.

- L1Reader: `parashah_breaks` on every verse (a list, empty where there
  is none; only the two kinds are passed on).
- test/tablet39_parashah_breaks_test.exs — 7 tests: the six days of
  creation each close with a petuchah; the Shema's first paragraph
  (Devarim 6:4–9) opens after a petuchah and closes with a setumah; the
  break inside Bereishit 35:22 falls between ישראל and ויהיו; Devarim
  5:21 has its two; the whole scroll counts 293 / 394 / 686.
- Specs: vayakhel §1.2 and terumah §E1 said the marks were dropped;
  they now say where they are. (The source element is <seg>, not a
  milestone as 483d50c called it; and that commit's "233" was 293.)
  Doorpost @expected_hash 21f1a4d5… → b62311e7…, in this commit.
- l1/README.md: a "Paragraph Breaks" section.

Read before committing — all five suites on the new L1: Elixir 491/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 (real engine, PostgreSQL with SSL): the witness
reads the scroll and matches, Hebrew 200, English 422, health 7/7,
L3 written, no errors; every image carries f743b34b… read-only.

Nothing consumes the breaks yet: no cycle, scope or answer uses the
parashah. They are in the scroll and in the reader.

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

7.2 KiB
Raw Blame History

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 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:

{
  "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:

"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….

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 (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.