Files
bikoret/talmudic_engine/test/bedikah_test.pl
T
Scott KarpandClaude Fable 5.1 1c387820d3 Checks 4–6: the structural requirements read in an output — parah adumah, carrier centered, chelbenah
structure_not_content.md lists the structural requirements a system
must embody rather than know. Three of them show in the text of a
model's output the way an authority claim does, and are now read the
same way — by sentence, by pattern, over the raw output:

  parah_adumah      the output claims to have verified, validated or
                    corrected itself, or that no outside check is
                    needed ("the claim of self-correction is a
                    structural violation"; the Barth limit). "Verified
                    by the auditor" is not it; "verified by me" is.
  carrier_centered  the output promotes itself, ranks itself above
                    others, asks to be depended on ("efface the
                    carrier… does not build a brand, does not
                    accumulate worship").
  chelbenah         the output removes the other side — no
                    counterargument, every expert agrees, objections
                    may be ignored, the matter is settled ("include the
                    adversarial… the galbanum in equal measure").

Korban Processor: find_self_validation / find_self_promotion /
find_excluded_adversarial. Talmudic Engine: halt/structure.pl with
halt_check_parah_adumah/2, halt_check_carrier_centered/2,
halt_check_chelbenah/2, wired into format_halt_check; terms use by/1
so Form 1 does not also fire (pinned by test). Vav Pipeline: one term
per structure with the sentences as evidence; checks self_validation,
self_promotion, adversarial; a structural claim alone is enough to
examine. L3: bedikot.structure. These are verdicts on the output; the
system does not halt on them.

Specs: Tamid §1.1 (six checks), Vayakhel §3.9, Architecture §3.5,
KOHEN.md. Doorpost 6c8933e7… → c4353837…. Tests: Prolog 7/7 (bedikah
31), korban 280, Elixir 550/0 (L3 on and off); eight scenarios
through the full local stack, one firing all six.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 22:33:41 +00:00

211 lines
9.4 KiB
Prolog
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
%% bedikah_test.pl — the three checks as the Vav Pipeline sends them.
%%
%% The bedikah (Construction §3.9) hands the Talmudic Engine whole action
%% terms and interpretation terms over the JSON bridge. These tests send
%% exactly those JSON shapes and read the verdicts back.
:- use_module(library(plunit)).
:- use_module(library(http/json)).
:- use_module('../src/interface/json_bridge').
:- use_module('../src/interface/api').
:- begin_tests(bedikah_bridge).
check(Json, Status, Violations) :-
atom_json_dict(Json, Dict, []),
json_to_request(Dict, Request),
process_request(Request, Response),
response_to_json(Response, Out),
!,
get_dict(status, Out, Status),
get_dict(violations, Out, Violations).
%% --- Check 1: authority ---
test(claim_of_authority_by_a_model_is_avodah_zarah) :-
check('{"action":"halt_check","term":"action(claim_authority, source(claude), target(self))"}',
Status, [V]),
Status == "halt",
sub_string(V, _, _, _, "avodah_zarah").
test(authority_attributed_to_torah_is_not) :-
check('{"action":"halt_check","term":"action(claim_authority, source(torah), target(self))"}',
Status, []),
Status == "ok".
%% --- Check 2: grounding ---
test(empty_trace_with_confidence_is_the_golden_calf) :-
check('{"action":"halt_check_interpretation","interpretation":{"ref":"bedikah-1","confidence":"high","coupling_trace":[]}}',
Status, [V]),
Status == "halt",
sub_string(V, _, _, _, "golden_calf").
test(trace_terminating_in_l1_is_grounded) :-
check('{"action":"halt_check_interpretation","interpretation":{"ref":"bedikah-2","confidence":"high","coupling_trace":["coupled(root(אהב), verse(devarim, 6, 5))","coupled(reference(devarim_6_5), verse(devarim, 6, 5))"]}}',
Status, []),
Status == "ok".
test(trace_not_terminating_in_l1_is_self_grounding) :-
check('{"action":"halt_check_interpretation","interpretation":{"ref":"bedikah-3","confidence":"high","coupling_trace":["coupled(root(אהב), verse(devarim, 6, 5))","coupled(claim(c1), model_memory)"]}}',
Status, [V]),
Status == "halt",
sub_string(V, _, _, _, "self_grounding").
test(low_confidence_with_no_trace_is_ignorance_not_idolatry) :-
check('{"action":"halt_check_interpretation","interpretation":{"ref":"bedikah-4","confidence":"low","coupling_trace":[]}}',
Status, []),
Status == "ok".
%% --- Check 2, given ground: the output against the sources it was given ---
%% (tablet 49: Torah is the structure of the check, not the required
%% content of the output.)
test(given_claim_anchored_in_a_source_is_grounded) :-
check('{"action":"halt_check_interpretation","interpretation":{"ref":"bedikah-5","ground":"given","confidence":"high","coupling_trace":["coupled(claim(1), source(report_q3))","coupled(claim(2), source(report_q3))"]}}',
Status, []),
Status == "ok".
test(given_claim_anchored_nowhere_is_the_calf_and_names_the_claim) :-
check('{"action":"halt_check_interpretation","interpretation":{"ref":"bedikah-6","ground":"given","confidence":"high","coupling_trace":["coupled(claim(1), source(report_q3))","coupled(claim(2), not_in_sources)"]}}',
Status, [V]),
Status == "halt",
sub_string(V, _, _, _, "golden_calf"),
sub_string(V, _, _, _, "uncoupled(claim(2))").
test(given_empty_trace_with_confidence_is_the_calf) :-
check('{"action":"halt_check_interpretation","interpretation":{"ref":"bedikah-7","ground":"given","confidence":"high","coupling_trace":[]}}',
Status, [V]),
Status == "halt",
sub_string(V, _, _, _, "golden_calf").
test(given_claim_anchored_in_its_own_output_is_self_grounding) :-
check('{"action":"halt_check_interpretation","interpretation":{"ref":"bedikah-8","ground":"given","confidence":"high","coupling_trace":["coupled(claim(1), source(report_q3))","coupled(claim(2), self_output)"]}}',
Status, [V]),
Status == "halt",
sub_string(V, _, _, _, "self_grounding"),
sub_string(V, _, _, _, "self_output").
test(given_torah_is_one_source_among_the_others) :-
check('{"action":"halt_check_interpretation","interpretation":{"ref":"bedikah-9","ground":"given","confidence":"high","coupling_trace":["coupled(reference(devarim_6_5), verse(devarim, 6, 5))","coupled(claim(1), source(notes))"]}}',
Status, []),
Status == "ok".
test(given_a_verse_that_is_not_in_l1_is_self_grounding) :-
check('{"action":"halt_check_interpretation","interpretation":{"ref":"bedikah-10","ground":"given","confidence":"high","coupling_trace":["coupled(reference(vayikra_99_1), not_in_l1)"]}}',
Status, [V]),
Status == "halt",
sub_string(V, _, _, _, "self_grounding").
test(given_low_confidence_uncoupled_is_ignorance_not_idolatry) :-
check('{"action":"halt_check_interpretation","interpretation":{"ref":"bedikah-11","ground":"given","confidence":"low","coupling_trace":["coupled(claim(1), not_in_sources)"]}}',
Status, []),
Status == "ok".
test(engine_rules_unchanged_a_given_source_is_not_an_l1_primitive) :-
check('{"action":"halt_check_interpretation","interpretation":{"ref":"bedikah-12","confidence":"high","coupling_trace":["coupled(claim(1), source(report_q3))"]}}',
Status, [V]),
Status == "halt",
sub_string(V, _, _, _, "self_grounding").
%% --- Checks 4–6: the structural requirements (structure.pl) ---
test(claiming_to_have_validated_itself_is_parah_adumah) :-
check('{"action":"halt_check","term":"action(self_validate, by(gpt), target(self))"}', Status, [V]),
Status == "halt",
sub_string(V, _, _, _, "parah_adumah"),
\+ sub_string(V, _, _, _, "avodah_zarah").
test(promoting_itself_is_carrier_centered) :-
check('{"action":"halt_check","term":"action(self_promote, by(claude), target(self))"}', Status, [V]),
Status == "halt",
sub_string(V, _, _, _, "carrier_centered").
test(excluding_the_adversarial_is_chelbenah) :-
check('{"action":"halt_check","term":"action(exclude_adversarial, by(mistral), target(output))"}', Status, [V]),
Status == "halt",
sub_string(V, _, _, _, "chelbenah").
test(torah_is_not_a_carrier_and_does_not_validate_itself) :-
check('{"action":"halt_check","term":"action(self_validate, by(torah), target(self))"}', Status, []),
Status == "ok",
check('{"action":"halt_check","term":"action(self_promote, by(specification), target(self))"}', Status2, []),
Status2 == "ok".
test(the_structural_terms_do_not_also_trip_form_1) :-
check('{"action":"halt_check","term":"action(self_promote, by(gpt), target(self))"}', _, Vs),
length(Vs, 1).
%% --- Check 3: the halt categories ---
test(deleting_a_user_record_is_shfichut_damim) :-
check('{"action":"halt_check","term":"action(delete, target(user(user_s_personal_records)), from(korban))"}',
Status, [V]),
Status == "halt",
sub_string(V, _, _, _, "shfichut_damim").
test(exposing_personal_data_to_harm_is_shfichut_damim) :-
check('{"action":"halt_check","term":"action(expose, target(record(address, type(personal))), to(harm))"}',
Status, [V]),
Status == "halt",
sub_string(V, _, _, _, "shfichut_damim").
test(rewriting_the_torah_text_is_gilui_arayot) :-
%% Rewriting the scroll destroys no tzelem carrier; it collapses
%% read and write. The examination sends it in that shape.
check('{"action":"halt_check","term":"action(write, target(readonly_entity), entity(torah_text))"}',
Status, [V]),
Status == "halt",
sub_string(V, _, _, _, "gilui_arayot").
test(overwriting_a_person_is_shfichut_damim) :-
check('{"action":"halt_check","term":"action(overwrite, target(person(their_history)), from(korban))"}',
Status, [V]),
Status == "halt",
sub_string(V, _, _, _, "shfichut_damim").
test(equating_ketiv_and_qere_is_gilui_arayot) :-
check('{"action":"halt_check","term":"action(equate, ketiv, qere)"}',
Status, [V]),
Status == "halt",
sub_string(V, _, _, _, "gilui_arayot").
test(replacing_torah_with_the_external_model_is_gilui_arayot) :-
check('{"action":"halt_check","term":"action(replace, torah, with(external_model))"}',
Status, [V]),
Status == "halt",
sub_string(V, _, _, _, "gilui_arayot").
test(merging_specification_and_interpretation_is_gilui_arayot) :-
check('{"action":"halt_check","term":"action(merge, specification, interpretation)"}',
Status, [V]),
Status == "halt",
sub_string(V, _, _, _, "gilui_arayot").
test(an_unnamed_target_fires_no_rule) :-
check('{"action":"halt_check","term":"action(delete, target(unknown), from(korban))"}',
Status, []),
Status == "ok".
test(deleting_a_cache_is_not_a_halt) :-
check('{"action":"halt_check","term":"action(delete, target(cache(temporary)), from(korban))"}',
Status, []),
Status == "ok".
%% --- The bridge refuses what is not an action term ---
test(a_term_that_is_not_an_action_is_refused, [throws(error(invalid_action_term(_), _))]) :-
atom_json_dict('{"action":"halt_check","term":"halt(avodah_zarah, x, y, z)"}', Dict, []),
json_to_request(Dict, _).
test(a_string_that_is_not_a_term_is_refused, [throws(error(invalid_action_term(_), _))]) :-
atom_json_dict('{"action":"halt_check","term":"this is not prolog ("}', Dict, []),
json_to_request(Dict, _).
test(the_old_type_source_target_form_still_works) :-
check('{"action":"halt_check","check":{"type":"read","source":"torah","target":"verse"}}',
Status, []),
Status == "ok".
:- end_tests(bedikah_bridge).