peah: hear the verse the question is standing in (kohen Day 7, tablet 30)

Every Hebrew question was answered against Bereishit 1:1 —
extract_scope_from_question/1 ignored its argument. ויאמר אלהים יהי אור
(1:3) and ויהי ערב ויהי בקר (1:5) came back sourced from 1:1 with roots
"not in this verse". The grounding check passed by construction.

- L1Index: inverted index consonants → verses over l1/torah, built in
  handle_continue right after start (5853 verses, ~1 s), read-only after.
- ScopeResolver: explicit reference (bereishit/Genesis/בראשית 1:3) first;
  then quoted Torah — most question words in a verse, ties to the verse
  where they stand together in order, then Torah order; else default.
  A reference to a verse L1 lacks is a 422 KIYOR_VALIDATION_FAILED with
  the correction, not a silent 1:1.
- Router: processing.scope reports verse + resolved_by; a default scope
  carries a note saying the verse was assumed, not heard.
- test/tablet30_scope_test.exs: the five Day-7 offerings through the
  real router land on 1:1, 1:1, 1:3, 1:5, 1:1; Shema → Devarim 6:4;
  reference, invalid reference, default confession. 14 tests.
- KOHEN.md Day 7: what to expect in sources[0].ref.

454 tests, 0 failures on seeds 0 1 2 3 42 99. Seed 191243 fails
LivenessTest before and after this change — pre-existing, not touched.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Scott KarpandClaude Fable 5.1 committed 2026-10-04 15:13:26 +00:00
1 parent d6d4475da3
commit c795225709
6 files changed
+626 -16

No files matched your search

+5
View File
@@ -405,6 +405,11 @@ curl http://<host>/kodesh/health | jq '.checks'
# Architecture Step 22 it is answered with 422 TEIKU_NO_ROOTS and does
# NOT write L3 — by design (BUILD_KORBAN.md:123). The L3 count below is
# expected to rise by the number of Hebrew questions, not by ten.
#
# Tablet 30 (Day 7, 2026-10-04): the verse in the answer must be the
# verse in the question. Expect sources[0].ref = Bereishit 1:1, 1:1,
# 1:3, 1:5, 1:1 in that order, and processing.scope.resolved_by =
# "text_match". A "default" there means the question was not heard.
for q in "בראשית ברא אלהים" "את השמים ואת הארץ" "ויאמר אלהים יהי אור" "ויהי ערב ויהי בקר" "ברא אלהים"; do
curl -s -X POST http://<host>/peah/ask \
-H 'Content-Type: application/json' \