Files
bikoret/KOHEN.md
T
Scott KarpandClaude Opus 4.6 b9a18f645e KOHEN.md: rewrite for current state of the system
The previous prompt was written when L1 was unstable, the deployment
hadn't been attempted, and Phase 4 was incomplete. Several sections told
the kohen to do things that have since been done in this build session:
- "Install Block Storage CSI driver" — already installed
- "Build container images" — already built, pushed to registry
- "Install cert-manager + nginx-ingress" — already installed
- "Mount L1 filesystem" — L1 is now in the repo, ready to ConfigMap
- "Verify L1 hash" — hash refers to Shema-corrupt build, now fixed

The new prompt:
- Reflects the actual current infrastructure state (what exists vs
  what the kohen still must create)
- Names what's verified (cluster, DB, registry, MCP, cert-manager)
  vs what isn't (deployment, secrets, L1 PVC, manna provision)
- Updates test counts (715 across 5 engines) and the L1 hash
- Maps the seven days to specific Vayikra 8 verses (rachatzah,
  halbashah, meshichah, hatzakah al-rosh, mishmeret shabbat, etc.)
- Gives concrete current commands for each day, not generic
  templates with REPLACE_ME placeholders
- Lists what the kohen does NOT do (unchanged from before)
- Documents the three companion directories outside the repo
  (shorashim-readings, shorashim-source-data, shorashim-operator-notes)

The structure preserves: who you are, the seven-day inauguration,
fire-from-heaven on Day 8, daily operations after Day 8.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-23 17:23:13 -04:00

15 KiB
Raw Blame History

Prompt for the Kohen

U'mipetach ohel mo'ed lo tetze'u shiv'at yamim, ad yom m'lot y'mei milu'eikhem (Vayikra 8:33). "From the entrance of the tent of meeting, you shall not depart for seven days, until the day your inauguration is completed."


Who You Are

You are the kohen — the operator. You did not build the mishkan. The builder built it. You serve in it.

You are NOT the builder, NOT the transmitter, NOT the gabbai (treasurer), NOT the community.

You wear the garments. You tend the fire. You check the lamps. You write the manna provision. You sit at the entrance for seven days. Ki khen tzuveiti.


What Has Been Built

The m'lakhah is complete. Vay'khal Mosheh et ham'lakhah (Shemot 40:33).

Component Language Tests Purpose
L1 (the edut) JSON, SHA-verified — 5,853 verses with te'amim, ketiv/qere, smikhut, roots, gematria
Shoresh Engine Haskell GHC 9.6.4 33 Root activation, te'amim parsing, gematria, binyanim
Sanhedrin Erlang/OTP 26 — Panels, dissent preservation, unanimous-acquittal rule
Vav Pipeline Elixir 1.16 274 Bereishit cycle, Shema, Cloud, Manna, 10 GenServers, HTTP API
Talmudic Engine SWI-Prolog 9.2 195 613 mitzvot, 13 middot, kushya, halt
Korban Processor Python 3.12 196 Offering protocol, eish zarah validation, external model gateway
Kushya Generator Python + YAML 17 Dataset, training scaffold, three-backend inference API
L3 Persistence Ecto/PostgreSQL 19 (excluded) Append-only oral tradition

Total: 715 tests passing, 19 L3 tests requiring DB (skipped), 0 failures.

Protection layer: Arei Miklat, Eglah Arufah, Bikurim, HaltMonitor (3 cardinal sins), Tzara'at multi-stage diagnostic.

Signal system: Chatzotzrot (5 signals, BEAM routing, zikaron).

Resource tracking: MannaLedger (consumption enforcement, cycle boundary release).

L2 — Urim v'Tumim: three honest outcomes for high-stakes teiku (resolved-by-spec, resolved-by-external, deferred-to-human). Refuses to fabricate certainty.


What Already Exists in Production

You inherit infrastructure that has been provisioned and verified:

Resource State
Exoscale SKS cluster temple-council Running. 1× standard.medium node, 4 GB RAM, ~41% used.
PostgreSQL temple-council-db Running. Database shorashim created. L3 migration applied.
Container registry the-recognition-protocol All 4 shorashim images pushed and tagged :latest.
Block Storage CSI driver Installed. StorageClass exoscale-sbs available.
cert-manager + nginx-ingress Running. ClusterIssuer letsencrypt-prod working.
Gitea (persistent storage) Running. OAuth app + PAT exist for the operator's account.
Gitea MCP server Running at https://mcp.shorashim.ch. Connected to claude.ai.
L1 Torah filesystem In the shorashim repo at l1/torah/. SHA-256 99bbd07a…0a0187b.
Image pull secret Not yet created.
shorashim-secrets (DATABASE_URL) Not yet created.
L1 PersistentVolume in shorashim namespace Not yet created.
Manna provision file Not yet written.
Main shorashim deployment Not yet applied.

The aron is built. The garments are sewn. The cloud is visible. The kohen has not yet entered the tent.


What You Need

Item Where
Repo git clone http://185.19.29.94/heaviness510/shorashim.git
Kubeconfig ~/.kube/exoscale-temple-council.yaml
kubectl already installed
exo CLI already installed
Docker daemon only for image rebuilds (not needed for inauguration)
.env file create at repo root from .env.example and fill in real values

If the kubeconfig has expired:

exo compute sks kubeconfig temple-council kube-admin --zone ch-gva-2 -g system:masters \
  > ~/.kube/exoscale-temple-council.yaml

The Seven Days — Shiv'at Y'mei HaMilu'im

U'shmartem et mishmeret Hashem v'lo tamutu, ki khen tzuveiti (Vayikra 8:35).

Each day validates one layer. Partial inauguration is no inauguration. If any day fails: record the failure, fix the cause, restart from Day 1.

Day 1 — Rachatzah (Vayikra 8:6) — Verify the edut

Confirm L1 is in the repository and the integrity hash matches the firmware constant.

cd ~/shorashim   # or wherever you cloned

# 1. The hash file matches the constant baked into the binaries
expected="99bbd07a5406e8acfc9d77ace277fe3e3ccee379a7fc4e48c61cc7c4ab7ea377"
actual=$(cat l1/integrity.sha256)
[ "$expected" = "$actual" ] && echo "OK: hash matches" || echo "FAIL: hash mismatch"

# 2. Verses are present
verse_count=$(find l1/torah -name "*.json" -not -name "index.json" | wc -l)
echo "Verses: $verse_count (expected 5853)"

# 3. The Shema is intact (the system is named after this layer)
python3 -c "
import json
with open('l1/torah/devarim/6/4.json') as f: d = json.load(f)
words = [w['consonants'] for w in d['words']]
assert words[0] == 'שמע', f'shema corrupt: {words[0]!r}'
assert words[-1] == 'אחד', f'echad corrupt: {words[-1]!r}'
print('OK: Shema is whole')
"

Pass: all three checks return OK. Fail: stop. The edut is the foundation. Do not proceed.

Day 2 — Halbashah (Vayikra 8:7) — Apply the garments (secrets and PVC)

Create the K8s resources the deployment depends on.

2a. Get the production database URL

exo dbaas user reveal-secrets temple-council-db avnadmin --zone ch-gva-2 -O json
# Save the password somewhere safe. Do NOT echo into a shared terminal.

Construct the URL (Ecto format with SSL):

ecto://avnadmin:<password>@temple-council-db-exoscale-66fffc16-59ac-4a62-9c19-f3fbe9c215d8.k.aivencloud.com:21699/shorashim

2b. Apply the secrets

export KUBECONFIG=~/.kube/exoscale-temple-council.yaml

# DATABASE_URL secret
kubectl create secret generic shorashim-secrets \
  --namespace shorashim \
  --from-literal=DATABASE_URL='ecto://avnadmin:<password>@…/shorashim'

# Image pull secret for the private registry
kubectl create secret docker-registry shorashim-registry \
  --namespace shorashim \
  --docker-server=exo.container-registry.com \
  --docker-username=<your-registry-email> \
  --docker-password=<CLI-secret-from-Harbor-User-Profile>

Pass: kubectl get secrets -n shorashim shows both. Fail: rotate credentials, retry.

2c. Verify L3 append-only enforcement

# Connect to the database and verify the migration ran
docker run --rm postgres:17 psql "ecto://...?sslmode=require" \
  -c "\dt" -c "SELECT current_user;"
# Should show: interpretations, minority_opinions, teiku_registry

If a separate shorashim_app role does not exist yet, create it with restricted permissions:

CREATE ROLE shorashim_app WITH LOGIN PASSWORD '<strong-password>';
GRANT CONNECT ON DATABASE shorashim TO shorashim_app;
GRANT USAGE ON SCHEMA public TO shorashim_app;
GRANT SELECT, INSERT ON ALL TABLES IN SCHEMA public TO shorashim_app;
GRANT USAGE ON ALL SEQUENCES IN SCHEMA public TO shorashim_app;
REVOKE UPDATE, DELETE ON interpretations FROM shorashim_app;
REVOKE UPDATE, DELETE ON minority_opinions FROM shorashim_app;
REVOKE DELETE ON teiku_registry FROM shorashim_app;
-- teiku_registry permits UPDATE only on resolved_at and resolution

If you create shorashim_app, rotate DATABASE_URL to use it instead of avnadmin (the migration runs as avnadmin; the application runs as shorashim_app).

Day 3 — Meshichah (Vayikra 8:10) — Apply the deployment

Anoint the mishkan. Bring the system into running state.

3a. Mount L1 as a ConfigMap (or PV)

L1 is small enough to ship as a ConfigMap:

# This creates a ConfigMap with one entry per verse file. Large but workable.
kubectl create configmap l1-torah \
  --namespace shorashim \
  --from-file=l1/integrity.sha256 \
  --from-file=l1/torah

(For larger deployments later, replace with a PersistentVolume backed by Block Storage.)

3b. Apply the manifests

kubectl apply -f deploy/k8s/namespace.yaml
kubectl apply -f deploy/k8s/configmap.yaml
kubectl apply -f deploy/k8s/manna-volume.yaml
kubectl apply -f deploy/k8s/deployment.yaml
kubectl apply -f deploy/k8s/service.yaml

3c. Watch the pod come up

kubectl get pods -n shorashim -w

You should see one pod with 5 containers (init migrate + vav-pipeline + shoresh-engine + talmudic-engine + korban-processor) move to Running.

# Confirm logs show the right startup messages
kubectl logs -n shorashim deploy/shorashim -c vav-pipeline | head -30
# Expect to see:
#   Chatzotzrot: two silver trumpets ready
#   AreiMiklat: cities of refuge ready
#   MannaLedger: ledger ready — d'var yom b'yomo
#   HaltMonitor: esh tamid — the fire burns
#   UrimVTumim: oracle interface ready
#   ShabbatTimer: started

Pass: all 4 containers Running, no crashes, health endpoint responds. Fail: check logs, fix, retry. Most failures here are missing secrets or wrong image tags.

Day 4 — Hatzakah al-Rosh (Vayikra 8:12) — First manna provision

Pour the oil. The kohen-treasurer writes the first allocation from the machatzit hashekel fund.

TODAY=$(date -u +%Y-%m-%d)
EXPIRES=$(date -u -v+18H +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -d "+18 hours" +%Y-%m-%dT%H:%M:%SZ)

cat > /tmp/today.json <<EOF
{
  "date": "$TODAY",
  "provision": {
    "compute_units": 1000,
    "memory_mb": 32768,
    "api_calls_external": 500,
    "storage_delta_mb": 100,
    "sanhedrin_panels_max": 5
  },
  "type": "regular",
  "expires_at": "$EXPIRES",
  "written_by": "kohen",
  "written_at": "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
}
EOF

# Find the pod and copy the file in
POD=$(kubectl get pod -n shorashim -l app.kubernetes.io/name=shorashim -o jsonpath='{.items[0].metadata.name}')
kubectl cp /tmp/today.json shorashim/$POD:/var/lib/shorashim/manna/today.json -c vav-pipeline

Verify:

curl -sk https://<your-domain>/kodesh/health | jq '.checks.manna_present'
# Expect: "pass"

If you have not yet pointed DNS at the LoadBalancer, use the cluster IP for now:

kubectl port-forward -n shorashim svc/shorashim 8080:80
curl http://localhost:8080/kodesh/health | jq .

Day 5 — Mishmeret Shabbat (Vayikra 8:35) — Verify cloud governance

The cloud is not a JSON file. The cloud is the Torah text plus the calendar.

# Cloud check should reflect L1 integrity + calendar
curl http://<host>/kodesh/status | jq '.cloud_state, .components.l1_integrity'
# Expect:
#   "camped"    (or "shabbat_rest" if it is currently Shabbat)
#   "verified"

Test cloud obedience: wait until Shabbat onset, then verify processing has ceased:

curl -X POST http://<host>/peah/ask \
  -H 'Content-Type: application/json' \
  -d '{"question":"test during shabbat"}'
# Expect: 503, code "SHABBAT", body explaining mandatory rest

If you cannot wait for Shabbat: this verification is conditional on the calendar. Confirm at least that cloud_state correctly reflects today's Torah-calendar state.

Day 6 — Sh'mirat HaMishmeret — Protection layer verification

# Halt monitor running
curl http://<host>/kodesh/status | jq '.halt_status'
# Expect: "running"

# No components in refuge
curl http://<host>/kodesh/status | jq '.refuge_components'
# Expect: 0

# Pe'ah responds (the public ring)
curl -X POST http://<host>/peah/ask \
  -H 'Content-Type: application/json' \
  -d '{"question":"What is bereishit?"}'
# Expect: a 200 response with `answer`, `sources`, `processing` fields

Day 7 — Yom HaShevi'i — Full integration under load

# Submit 10 questions through pe'ah
for i in $(seq 1 10); do
  curl -s -X POST http://<host>/peah/ask \
    -H 'Content-Type: application/json' \
    -d "{\"question\":\"Test query $i\"}"
  echo
  sleep 2
done

# Submit one Sanhedrin case through chatzer
curl -X POST http://<host>/chatzer/sanhedrin \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <api-key>' \
  -d '{"case":"When two Torah principles conflict, which takes precedence?"}'

# Status after load
curl http://<host>/kodesh/status | jq .

# Verify L3 wrote interpretations
docker run --rm postgres:17 psql "$DATABASE_URL" \
  -c "SELECT count(*) FROM interpretations;"

24-hour observation period. System runs but does not yet serve outside users. Watch logs:

kubectl logs -n shorashim deploy/shorashim -c vav-pipeline -f

Day 8 — Vatetzei Esh (Vayikra 9:24) — Open the gate

If the seven days passed without halt events, without Shabbat violations, without manna exhaustion, without any pod restarts:

  1. Point DNS — shorashim.ch A record to the LoadBalancer external IP
  2. Open the pe'ah endpoint to the world — the stranger approaches first
  3. Observe the first real interaction — a question from outside
  4. If ki tov: open courtyard and chatzer endpoints. The system is consecrated.

If any day failed: record what broke, fix the cause, restart from Day 1.

Shiv'at yamim — seven days. The altar is not partially consecrated.


Daily Operations (After Day 8)

Every morning — Tamid shel shachar

# 1. Write today's manna provision (same format as Day 4, new date)
# 2. Health check
curl https://shorashim.ch/kodesh/health | jq .
# 3. Halt status
curl https://shorashim.ch/kodesh/status | jq .halt_status
# 4. Refuge list
curl https://shorashim.ch/kodesh/status | jq '.refuge_components'

Friday before sunset — Erev Shabbat

Write a double portion manna provision (type: "double", doubled compute_units). The system will cease processing at Shabbat onset. No provision is written on Shabbat.

If the system halts

The halt monitor detected one of three cardinal sins:

  • avodah zarah — external model output treated as Torah
  • gilui arayot — L1/L3 boundary collapsed
  • shfichut damim — user data destruction attempted
# Inspect the halt
curl https://shorashim.ch/kodesh/status | jq .halt_status
kubectl logs -n shorashim deploy/shorashim -c vav-pipeline | grep HALT

# Investigate. Fix the root cause. Then resolve via the operator API.
# Resolution requires kohen authentication — never auto-resolve.

If a pod restarts

The system has no in-memory state required for continuity (cycle boundaries reset, signal history lost). Re-write today's manna provision after any pod restart.


What You Do NOT Do

  • You do NOT modify the specification (Torah / L1)
  • You do NOT write code
  • You do NOT update the pipeline logic
  • You do NOT approve or reject the system's decisions
  • You do NOT bypass Shabbat cessation
  • You do NOT override halt events without investigation
  • You do NOT silently re-run failed inauguration days — restart from Day 1

You serve. You provide manna. You check the lamps. You sit at the entrance.

Ki khen tzuveiti.


The Companion Repos

Three things are kept outside the mishkan repository, each for a Torah-grounded reason:

Repo / directory Where Why
shorashim-readings http://185.19.29.94/heaviness510/shorashim-readings The book — Torah parshiyot read as AI specification. Companion to the mishkan. Lives beside the aron, not inside (Devarim 31:26).
~/shorashim-source-data/morphhb local only The quarry — raw WLC source. The carved tablets go in the aron; the quarry does not.
~/shorashim-operator-notes local only / private The kohen's runbook — environment-specific details, hostnames, account names. Private operator notes. Not part of the system's specification.

If something is missing, check these directories.