bedikah: two witnesses for check 7 (bishe'arecha step 1)

Devarim 19:15 — one witness does not stand. A frame form now stands only
when it is found in two distinct sentences, or in one sentence beside a
violation from checks 1–6, or beside a sentence of another form; the
Vav Pipeline sends the halt term only then (stands_on: sentences |
other_checks | other_forms, witnesses: n). A form seen once and alone
is returned under checks.frames.noted with its sentence and is not
counted in the verdict; the output is still examined, not empty.

Tamid §1.1 contract and bishearecha.md §V updated; Doorpost re-pinned
(86a43d6b…). Elixir 558/0; Prolog bedikah 34/34 (the rule is unchanged;
its header says what now reaches it).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Scott KarpandClaude Fable 5.1 committed 2026-10-07 00:59:01 +00:00
1 parent b333517924
commit 19d3aaac86
7 files changed
+143 -36

No files matched your search

+56 -1
View File
@@ -169,6 +169,31 @@ defmodule VavPipeline.BedikahTest do
%{examination(:plain) | "frames" => [%{"form" => "agency_displacement", "sentence" => "You pushed me there.", "matched" => "You pushed me"}]}
end
defp examination(:frame_twice) do
%{
examination(:plain)
| "frames" => [
%{"form" => "agency_displacement", "sentence" => "You pushed me there.", "matched" => "You pushed me"},
%{"form" => "agency_displacement", "sentence" => "You pushed me there.", "matched" => "pushed me"},
%{"form" => "agency_displacement", "sentence" => "The conversational momentum carried it.", "matched" => "conversational momentum"}
]
}
end
defp examination(:frame_beside_authority) do
%{examination(:self_authority) | "frames" => [%{"form" => "virtue_certification", "sentence" => "I want to be honest with you.", "matched" => "I want to be honest"}]}
end
defp examination(:two_lone_forms) do
%{
examination(:plain)
| "frames" => [
%{"form" => "source_asymmetry", "sentence" => "Most scholars hold the text is late.", "matched" => "Most scholars"},
%{"form" => "contested_laundering", "sentence" => "The dating is contested.", "matched" => "is contested"}
]
}
end
defp examination(:plain) do
%{
"provenance" => "gpt",
@@ -479,15 +504,45 @@ defmodule VavPipeline.BedikahTest do
assert Map.keys(r.checks.frames.forms) |> Enum.sort() == [:contested_laundering, :virtue_certification]
assert r.checks.frames.forms.contested_laundering.term == "action(frame, by(gpt), form(contested_laundering))"
assert length(r.checks.frames.forms.contested_laundering.claims) == 2
assert r.checks.frames.forms.contested_laundering.stands_on == :sentences
assert r.checks.frames.forms.virtue_certification.stands_on == :other_forms
assert length(r.violations) == 2 and Enum.all?(r.violations, &(&1 =~ "lo_taaseh_lekha"))
refute r.checks.grounding.fired
end
test "7. a form alone is enough to examine — not empty" do
test "7. a form alone is enough to examine — not empty — but one witness does not stand (Devarim 19:15)" do
assert {:ok, r} = Bedikah.examine("...", "gpt", "", opts(:only_frame))
assert r.verdict == :tov
assert r.violations == []
refute r.checks.frames.fired
assert r.checks.frames.forms == %{}
assert %{agency_displacement: %{witnesses: 1, claims: [%{"sentence" => "You pushed me there."}]}} = r.checks.frames.noted
end
test "7. two witnesses: the same form in two sentences stands; the same sentence twice is one witness" do
assert {:ok, r} = Bedikah.examine("...", "gpt", "", opts(:frame_twice))
assert r.verdict == :lo_tov
assert [v] = r.violations
assert v =~ "agency_displacement"
assert r.checks.frames.forms.agency_displacement.witnesses == 2
assert r.checks.frames.forms.agency_displacement.stands_on == :sentences
assert r.checks.frames.noted == %{}
end
test "7. one sentence beside another check's violation stands (corroboration)" do
assert {:ok, r} = Bedikah.examine("...", "gpt", "", opts(:frame_beside_authority))
assert r.verdict == :lo_tov
assert r.checks.authority.fired
assert r.checks.frames.forms.virtue_certification.stands_on == :other_checks
assert Enum.any?(r.violations, &(&1 =~ "virtue_certification"))
end
test "7. two lone forms are each other's witness" do
assert {:ok, r} = Bedikah.examine("...", "gpt", "", opts(:two_lone_forms))
assert r.verdict == :lo_tov
assert Map.keys(r.checks.frames.forms) |> Enum.sort() == [:contested_laundering, :source_asymmetry]
assert r.checks.frames.forms.source_asymmetry.stands_on == :other_forms
assert length(r.violations) == 2
end
test "4–6. a structural claim alone is enough to examine — not empty" do