hakhel: the corpus read again on a cycle, counts engraved in L3 (bishe'arecha step 5)

Devarim 31:9–13, 26 — the scroll beside the ark as a witness, read before
all on a cycle. src/tools/hakhel.py reads the private specimen corpus and
the hand-labelled samples with the Korban Processor's readings at the
current commit and produces one record: fires per reading, forms standing
on two witnesses (the same rule as Bedikah.check_frames), precision and
recall on the hand labels, the corpus's SHA-256 — never a specimen.

POST /chatzer/hakhel (inner ring) engraves it in L3 `hakhel` (migration
20261013000001; refused above 256 KiB — counts, not specimens; the
Doorpost hash it was recorded under is kept). GET /peah/hakhel lists the
latest readings for anyone. KOHEN "The seventh day — Hakhel"; Tamid §1.1;
bishearecha §VIII marked built. The weekly cycle runs from the builder's
machine, where the corpus lives.

First dry reading at 0ade2c94: 3094 specimens, any reading 26 %, a form
stands 7 %, precision 46/59, recall 6/30. Doorpost 9f752a2f…. Elixir
599/0, L3 10/0.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Scott KarpandClaude Fable 5.1 committed 2026-10-13 18:50:47 +00:00
1 parent 0ade2c949e
commit ffccedb63a
12 files changed
+552 -4

No files matched your search

@@ -0,0 +1,29 @@
defmodule VavPipeline.Repo.Migrations.Hakhel do
use Ecto.Migration
@moduledoc """
Hakhel (bishe'arecha §VIII; Devarim 31:9–13, 26): the specimen corpus —
the scroll set beside the ark as a witness — read again on a cycle
against the readings as they now are. The record keeps the date, the
corpus's hash and size, the readings' commit, the counts and the
precision/recall on the hand labels. Never a specimen. Append-only.
"""
def change do
create table(:hakhel) do
add :hakhel_ref, :string, null: false
add :date, :date, null: false
add :corpus_sha256, :string, null: false
add :corpus_size, :integer, null: false
add :readings_ref, :string
add :doorpost_hash, :string
add :counts, :jsonb, default: "{}", null: false
add :labelled, :jsonb, default: "{}", null: false
add :recorded_at, :utc_datetime, null: false
timestamps(type: :utc_datetime, updated_at: false)
end
create unique_index(:hakhel, [:hakhel_ref])
create index(:hakhel, [:date])
end
end