Step 14: Connect components — chamishim karsay zahav
Three connections built and tested: - Haskell Shoresh Engine via Erlang Port (JSON lines over stdin/stdout) - Prolog Talmudic Engine via Unix domain socket (JSON over /tmp/shorashim/talmudic.sock) - Erlang Sanhedrin via native BEAM calls New: Server.hs (JSON-line server loop), json_bridge.pl + socket_server.pl (Prolog socket interface), ShoreshEnginePort + TalmudicEngineSocket + SanhedrinClient (Elixir GenServer wrappers). BereishitCycle now routes unresolved cases through Talmudic Engine and Sanhedrin. All connections gracefully degrade — pipeline falls back to L1 data when engines unavailable. 46 Elixir tests, 33 Haskell tests, 57 Prolog tests — 0 failures. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
f8f70c77e5
commit
c67672777b
18 files changed
+1435
-121
No files matched your search
@@ -4,18 +4,48 @@ defmodule VavPipeline.Application do
|
||||
|
||||
Starts the supervision tree with:
|
||||
- ShabbatTimer (mandatory cessation monitor)
|
||||
- ShoreshEnginePort (Erlang Port to Haskell engine, if binary found)
|
||||
- TalmudicEngineSocket (Unix socket to Prolog engine)
|
||||
|
||||
Step 14 (Architecture §4): Component connections supervised.
|
||||
The port and socket are optional — the pipeline degrades gracefully
|
||||
if external engines are not available (clients fall back to stubs).
|
||||
"""
|
||||
|
||||
use Application
|
||||
|
||||
require Logger
|
||||
|
||||
@impl true
|
||||
def start(_type, _args) do
|
||||
children = [
|
||||
# ShabbatTimer monitors Shabbat boundaries
|
||||
{VavPipeline.ShabbatTimer, []}
|
||||
]
|
||||
shoresh_binary = Application.get_env(:vav_pipeline, :shoresh_engine_binary, "shoresh-engine")
|
||||
shoresh_cwd = Application.get_env(:vav_pipeline, :shoresh_engine_cwd, nil)
|
||||
talmudic_socket = Application.get_env(:vav_pipeline, :talmudic_socket_path, "/tmp/shorashim/talmudic.sock")
|
||||
|
||||
children =
|
||||
[
|
||||
{VavPipeline.ShabbatTimer, []}
|
||||
]
|
||||
|> maybe_add_shoresh_port(shoresh_binary, shoresh_cwd)
|
||||
|> maybe_add_talmudic_socket(talmudic_socket)
|
||||
|
||||
opts = [strategy: :one_for_one, name: VavPipeline.Supervisor]
|
||||
Supervisor.start_link(children, opts)
|
||||
end
|
||||
|
||||
defp maybe_add_shoresh_port(children, binary, cwd) do
|
||||
case System.find_executable(binary) do
|
||||
nil ->
|
||||
Logger.warning("ShoreshEnginePort: binary '#{binary}' not in PATH — running without Haskell engine")
|
||||
children
|
||||
|
||||
path ->
|
||||
children ++ [{VavPipeline.ShoreshEnginePort, [binary: path, cwd: cwd]}]
|
||||
end
|
||||
end
|
||||
|
||||
defp maybe_add_talmudic_socket(children, socket_path) do
|
||||
# Always add the socket client — it connects lazily on first request
|
||||
children ++ [{VavPipeline.TalmudicEngineSocket, [socket_path: socket_path]}]
|
||||
end
|
||||
end
|
||||
Reference in new issue
Block a user