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>
211 lines
9.4 KiB
Prolog
211 lines
9.4 KiB
Prolog
%% 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).
|