Phase 1-2 build: Steps 5-6, 8-13

Shoresh Engine (Haskell, Step 5)
- 12 modules: Types, Lexicon, Binyanim, Teamim, Gematria, Graph,
  KetivQere, Smikhut, Havdalah, Kriah, KiTov, Firmware
- 33 EUnit tests, 0 failures
- Firmware module verifies L1 SHA-256 hash at startup

Talmudic Engine (SWI-Prolog, Step 6)
- 15 modules: halt, reasoning, specification, interface
- 57 PlUnit tests, 0 failures
- Three cardinal halt conditions: avodah_zarah, shfichut_damim, gilui_arayot

Vav Pipeline (Elixir, Steps 8-11)
- 14 modules: BereishitCycle, Shema, Cloud, Manna, L1Reader,
  Specification, HaltConditions, ShabbatTimer, CycleLog, Chatzotzrot,
  ShoreshEngineClient, TalmudicEngineClient, Application
- 46 ExUnit tests, 0 failures
- Nishma-first architecture: hears before it speaks

Sanhedrin Framework (Erlang/OTP, Step 12)
- 8 modules: sanhedrin_app, sanhedrin_sup, escalation, panel_sup,
  panel, judge, clerk, halt_monitor
- 46 EUnit tests, 0 failures (includes fix: rejected outcome now reachable)
- Panel sizes: 1/3/23/71 — unanimous capital guilty → acquit (Sanhedrin 17a)
- Minority opinions append-only, never deleted

Korban Processor (Python, Step 13)
- 6 modules: korban, shechitah, semichah, zerikah, haktarah, router

Builder tooling: AGENTS.md, opencode.json, memory/, src/tools/

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Scott KarpandClaude Sonnet 4.6 committed 2026-02-26 14:02:34 -05:00
1 parent 622e814c9e
commit 80ec364da6
86 files changed
+9646

No files matched your search

+61
View File
@@ -0,0 +1,61 @@
%% teiku.pl — Unresolved tension handling.
%%
%% Architecture §3.4: resolve(_, teiku).
%%
%% Teiku (תיקו) — "let it stand." The question is unresolvable
%% from the current specification. It is not an error. It is
%% the system's honest acknowledgment that Torah does not
%% collapse every tension into a single answer.
%%
%% Talmudic tradition: Tishbi Yetaretz Kushyot V'Abayot —
%% "Elijah will resolve difficulties and problems."
%% Until then, the tension stands. Both readings are preserved.
:- module(teiku, [
register_teiku/3,
is_teiku/1,
teiku_count/1,
all_teiku/1
]).
:- dynamic teiku_record/5.
%% ============================================================
%% TEIKU REGISTRATION
%% ============================================================
%% Register an unresolvable tension between two interpretations.
%% The record preserves both sides — neither is discarded.
register_teiku(I1, I2, Record) :-
I1 = interpretation(CaseRef1, M1, V1, _, _),
I2 = interpretation(CaseRef2, M2, V2, _, _),
Record = teiku_record(CaseRef1, CaseRef2, side_a(M1, V1), side_b(M2, V2), unresolved),
assert_teiku_if_new(Record).
%% Only assert if not already registered
assert_teiku_if_new(Record) :-
Record = teiku_record(Ref1, Ref2, _, _, _),
( teiku_record(Ref1, Ref2, _, _, _)
-> true % already registered
; assertz(Record)
).
%% ============================================================
%% QUERIES
%% ============================================================
%% Check if a case resulted in teiku
is_teiku(CaseRef) :-
teiku_record(CaseRef, _, _, _, unresolved).
is_teiku(CaseRef) :-
teiku_record(_, CaseRef, _, _, unresolved).
%% Count total teiku records
teiku_count(Count) :-
aggregate_all(count, teiku_record(_, _, _, _, unresolved), Count).
%% Retrieve all teiku records
all_teiku(Records) :-
findall(teiku_record(A, B, C, D, E),
teiku_record(A, B, C, D, E),
Records).