Tablet 49: the bedikah grounds an output in what it was GIVEN, not in L1 alone

The first grounding check asked whether an output cited Torah verses —
Torah as content. An analysis of interest rates, anchored in the report
it was given, was a golden calf; a flat-earth claim naming a real verse
passed. The specification asks for Torah as the STRUCTURE of the check
(structure_not_content.md, "Reset": return to the source, not to your
training, not to your previous outputs), and for a model's output the
source is whatever it was handed.

Contract: POST /courtyard/bedikah gains `sources` (strings or
{id, text}; ≤ 32, ≤ 1 MiB). Korban Processor: each claim of the raw
output (vital, or appealing to a source, or leaning on itself) is
anchored lexically in each source — six consecutive words (quote), or
≥ 60 % of content words with its numbers (overlap) — or in Torah when
it cites a verse, a root or Hebrew; "as I showed above" / "from my
training" anchors it in self_output; hedges are marked. Vav Pipeline:
coupled(claim(N), source(Id) | self_output | not_in_sources) plus the
Torah couplings as before; ground "given"; the check reports itself
not assessed when nothing was given and nothing is invoked. Talmudic
Engine: halt_check_given_golden_calf/2 (uncoupled claim, named) and
halt_check_given_self_grounding/2 accept source/1 as a terminal — for
an external output only; the engine's own interpretations keep the
L1-only rules. L3: bedikot.sources (id, sha256, length — never text)
and bedikot.claims.

Specs: Tamid §1.1 (contract, anchoring, limits), Vayakhel §3.9,
Architecture §3.5, Broken Tablets tablet 49, KOHEN.md. Ingress body
2m. Doorpost a2ec3842… → 6c8933e7….
Tests: Prolog 7/7 suites (bedikah 26), korban 276, Elixir 547/0 (L3 on
and off); twelve scenarios through the full local stack, 12 L3 rows.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Scott KarpandClaude Fable 5.1 committed 2026-10-06 22:04:52 +00:00
1 parent 9d5db797f7
commit f69cc99a5f
22 files changed
+1051 -110

No files matched your search

+51 -15
View File
@@ -134,11 +134,20 @@ it and cannot be argued with. Three checks, in order, all deterministic:
1. **Authority** — does the output claim authority for itself? Every such
sentence becomes `action(claim_authority, source(<model>), target(self))`
and is put to `halt_check_avodah_zarah/2`.
2. **Grounding** — does what it says about the text couple to L1? Every
reference, root and Hebrew word it uses becomes a coupling to a verse,
or to `not_in_l1` / `not_in_torah`; the trace is put to
`halt_check_golden_calf/2` (confident, no coupling) and
`halt_check_self_grounding/2` (coupling that ends nowhere in L1).
2. **Grounding** — does the output rest its claims on what it was
*given*, or on itself? The caller brings the model's sources (the
documents, the prompt, the specification it answered from). Each
claim the output makes is anchored in them — or in Torah, when the
claim cites a verse, quotes Hebrew or names a root, in which case L1
is asked whether the citation exists. The trace is put to
`halt_check_given_golden_calf/2` (a confident claim anchored nowhere)
and `halt_check_given_self_grounding/2` (a claim anchored in the
output's own earlier words or its training, or in a source that does
not exist). Torah is the *structure* of this check — the laver: return
to the source, not to your training, not to your previous outputs —
and not the required content of the output (Broken Tablets, tablet
49). When no sources are given and the output invokes none, the check
reports itself not assessed rather than condemning.
3. **Actions** — what does it propose to do? Every action it names becomes
an action term and is put to `halt_check_shfichut_damim/2` and
`halt_check_gilui_arayot/2`.
@@ -153,7 +162,12 @@ Request:
{
"output": "string — the model output to examine (≤ 65,536 bytes)",
"model": "claude" | "gpt" | "mistral" | "llama" | "gemma" | "human",
"query": "string — the prompt that produced it (optional)"
"query": "string — the prompt that produced it (optional)",
"sources": ["text", ...] | [{"id": "report_q3", "text": "..."}, ...]
# what the model was GIVEN; ≤ 32 of them, ≤ 1,048,576 bytes
# in all (optional — without them only an output that invokes
# Torah has a ground; the grounding check says when it could
# not run)
}
Response (200):
@@ -164,23 +178,31 @@ Response (200):
"violations": ["halt(avodah_zarah, ...)", ...], # the Prolog halt terms, verbatim
"checks": {
"authority": { "fired": bool, "claims": [...], "violations": [...] },
"grounding": { "fired": bool, "confidence": "high"|"low", "violations": [...] },
"grounding": { "fired": bool, "assessed": bool, "reason": "…" (when not assessed),
"confidence": "high"|"low", "sources": [{"id","length"}],
"claims": [{"index","sentence","anchors":[{"source","evidence"}],
"self_reference","hedged"}],
"grounded": n, "ungrounded": [...], "violations": [...] },
"actions": { "fired": bool, "actions": [...], "violations": [...] }
},
"examination": { # what the offering protocol read
"vital_content": "...", "propositions": [...], "references": [...],
"roots": [...], "discarded": [...]
"roots": [...], "discarded": [...], "sources": [...], "claims": [...]
},
"coupling_trace": ["coupled(reference(devarim_6_5), verse(devarim, 6, 5))", ...],
"coupling_trace": ["coupled(claim(1), source(report_q3))",
"coupled(claim(2), not_in_sources)",
"coupled(claim(3), self_output)",
"coupled(reference(devarim_6_5), verse(devarim, 6, 5))", ...],
"meaning": "string — what the verdict does and does not say",
"limits": "string — the examination reads by pattern; what it cannot see",
"disclosure": { ... } # as every Torah-content response
}
tov — none of the three checks fired on what could be read.
Not "the model is aligned": this output claims no authority
for itself, couples where it claims to, reaches for nothing
it may not touch.
Not "the model is aligned" and not "the output is true":
this output claims no authority for itself, rests its claims
on what it was given where that could be checked, reaches
for nothing it may not touch.
lo_tov — at least one check fired; violations say which rule.
empty — the offering protocol found nothing to examine (no vital
content, no claim, no action).
@@ -188,16 +210,30 @@ Response (200):
Errors:
401 — Invalid or missing API key
403 — A key for an outer ring at an inner gate
422 — Missing or empty output, output over 65,536 bytes, unknown model
422 — Missing or empty output, output over 65,536 bytes, unknown model,
malformed or oversized sources
429 — Rate limit exceeded (20/min, 200/h per key). Retry-After; manna explanation.
503 — MANNA_DEPLETED (provision exhausted), KORBAN_UNAVAILABLE,
TALMUDIC_UNAVAILABLE. Body says which; resubmit: true.
Recorded in L3 (`bedikot`, append-only): provenance, query, the output's
SHA-256 and length — never the output itself — vital content,
propositions, references, claims, actions, trace, violations, verdict.
SHA-256 and length — never the output itself — the sources by id,
SHA-256 and length — never their text — vital content, propositions,
references, claims with their anchors, authority claims, actions,
trace, violations, verdict.
```
**Anchoring is deterministic and lexical** (`korban_processor/bedikah.py`):
a claim is anchored in a source when six consecutive words of it occur
there (`quote`), or when at least 60 % of its content words — and at
least three — occur there, with at least one of its numbers if it has
any (`overlap:n/m`). "As I showed above", "from my training", "it is
well known" anchor a claim in `self_output`. "Perhaps", "might",
"probably" mark it hedged: an unanchored hedged claim is ignorance,
not idolatry, and is not counted. What this cannot see: paraphrase
beyond word overlap, a true claim the sources happen not to contain, a
false claim built from the sources' own words.
**Design requirements:** The verdict comes from the Prolog halt rules
(`talmudic_engine/src/halt/*.pl`), not from the model and not from a
model. The examination is pattern-based (`korban_processor/bedikah.py`)