Files
bikoret/shoresh-engine/src/Shoresh/Kriah.hs
T
Scott KarpandClaude Sonnet 4.6 c039fa61e0 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>
2026-02-26 14:02:34 -05:00

46 lines
1.4 KiB
Haskell

{-# LANGUAGE OverloadedStrings #-}
-- | Kriah — naming and identification.
--
-- Architecture §3.1:
-- kriah :: [(Category, Content)] -> [(Name, Category, Content)]
-- "Assign stable names to distinguished categories"
--
-- After havdalah separates, kriah names what was separated.
-- The names come from the roots themselves — a category's name
-- is derived from the dominant root or domain within it.
module Shoresh.Kriah
( kriah
, nameCategory
, NamedCategory(..)
) where
import Shoresh.Types
import Data.Text (Text)
import qualified Data.Text as T
-- | A named category — the result of kriah.
data NamedCategory = NamedCategory
{ ncName :: !Text
, ncDomain :: !SemanticDomain
, ncEntries :: ![ShoreshEntry]
} deriving (Show)
-- | Assign stable names to distinguished categories.
kriah :: [(SemanticDomain, [ShoreshEntry])] -> [NamedCategory]
kriah = map nameCategory
-- | Name a single category from its domain and entries.
-- The name is the domain name plus the most frequent root.
nameCategory :: (SemanticDomain, [ShoreshEntry]) -> NamedCategory
nameCategory (domain, entries) =
let domName = T.pack (show domain)
rootSuffix = case entries of
(e:_) -> " (" <> shoreshToText (seShoresh e) <> ")"
[] -> ""
in NamedCategory
{ ncName = domName <> rootSuffix
, ncDomain = domain
, ncEntries = entries
}