# Non-secret settings of the AI VM (merged into /opt/selfheal/ai.env by apply.sh). Secrets never go here. # Discord server "Selfheal Lab" (created 2026-10-08): approvals channel for layer-2 buttons, escalation channel for layer 3. DISCORD_GUILD_ID=1557424985793101824 DISCORD_APPROVALS_CHANNEL_ID=1557425140302872698 DISCORD_ESCALATION_CHANNEL_ID=1557425282363691048 # optional: restrict button decisions to one role id (empty = any member of the server) DISCORD_APPROVER_ROLE_ID= # Discord message language of the hitl bot: en or ja (runbooks and prompt free text are written in Japanese) HITL_LANG=ja # experiment design 11.1: candidates gpt-6-astra / gpt-6.1-sol / gpt-6-luna (OpenAI model page 2026-10-08). luna for the first live checks and campaign (budget), compare with sol afterwards # default when a campaign does not name a model. Since apps 53ff243 the harness passes the campaign's model on every /diagnose # (console "model" field); ids starting with claude- go to the Claude Messages API (secret selfheal-anthropic-api-key). OPENAI_MODEL=gpt-6.1-sol EMBED_MODEL=text-embedding-3-small # Claude API auth: Workload Identity Federation (platform.claude.com/docs/en/manage-claude/wif-providers/gcp). The four ids are # not secrets; the agent exchanges this VM's Google identity token (service account selfheal-ai-vm, unique id 117534696004805578884) # for a short-lived access token. Empty = federation off (then the key file selfheal-anthropic-api-key is used, if registered). ANTHROPIC_FEDERATION_RULE_ID=fdrl_01NYa2DRXZMrWhqDC5uNP3Yy ANTHROPIC_ORGANIZATION_ID=fc82f31f-51c4-4416-95f5-62584092e1bc ANTHROPIC_SERVICE_ACCOUNT_ID=svac_01RMQAkUx4vD6X5scTxwmebU ANTHROPIC_WORKSPACE_ID=wrkspc_0149qfHWmbEEBmEh4aL2vHjw # external-* model ids (apps 2a2f91a, reference runs 2026-10-16): each loop turn is answered by a client outside the VM # over the 127.0.0.1:8090 listener (compose EXTERNAL_ADDR). Deadlines: one diagnosis / one turn, seconds. The harness # waits 26 minutes per /diagnose for these ids. Results are reference records, not rows of the model comparison. EXTERNAL_DIAGNOSE_TIMEOUT_S=1500 EXTERNAL_TURN_TIMEOUT_S=1200 HARNESS_URL=http://10.20.0.11:8080 MIMIR_URL=http://10.20.0.10:9009/prometheus LOKI_URL=http://10.20.0.10:3100 K8S_API=https://10.10.0.10:6443 # Jev gates (2026-10-08): off | shadow | enforce. shadow records TypeSafe System One answers (triage before the LLM, review after it) # next to each diagnosis in ai.jev_shadow and in the harness diagnosis event without changing the disposition. enforce additionally # downgrades a catalogue proposal to escalate when review.best_action disagrees with confidence >= 0.9 or target_valid < 0.5 # (campaign-2 report 3.3). Kept at shadow until the C-G1 re-run shows the rules catching a real misjudgement. JEV_MODE=enforce JEV_MODEL=jev-1.13.0