diff --git a/deploy/deploy.sh b/deploy/deploy.sh index ae23144..d924350 100644 --- a/deploy/deploy.sh +++ b/deploy/deploy.sh @@ -12,6 +12,16 @@ SRC="${MC2_SRC:-$HOME/mission-control-v2}" cd "$SRC" git fetch -q origin && git reset -q --hard origin/main +# ★ Selbst-Reset-Falle (15.07. beim P1-Deploy live gebissen): der reset oben ersetzt auch +# DIESE Datei, und bash liest laufende Skripte häppchenweise von der Platte weiter — ab +# hier liefe ein Zeilen-Mix aus alter+neuer Version (beim P1-Deploy fielen so daemon-reload +# und der mc2-gateway-Start unter den Tisch). Darum: nach dem Reset genau EINMAL die +# frische Version neu ausführen; der zweite Durchlauf überspringt dank Env-Marke nichts. +if [ "${MC2_DEPLOY_REEXEC:-0}" != "1" ]; then + export MC2_DEPLOY_REEXEC=1 + exec bash "$SRC/deploy/deploy.sh" +fi + # venv + Abhängigkeiten if [ ! -d "$SRC/backend/.venv" ]; then python3 -m venv "$SRC/backend/.venv" diff --git a/deploy/mc2-gateway.service b/deploy/mc2-gateway.service index a5ea4c5..a58513d 100644 --- a/deploy/mc2-gateway.service +++ b/deploy/mc2-gateway.service @@ -21,6 +21,11 @@ Environment=MC_CONFIG_PATH=/etc/llama-swap/config.yaml Environment=MC_MODELS_DIR=/srv/models Restart=always RestartSec=2 +# Stoppen darf nicht warten: der Gateway hält minutenlange LLM-Streams offen — uvicorns +# „Waiting for connections to close" + default 90 s TimeoutStop machten jeden Restart zum +# 502-Fenster (15.07. live gemessen, 14:29→14:31). Stateless Proxy → nach 5 s hart beenden +# ist verlustarm; Clients (Hermes api_max_retries=3) wiederholen abgerissene Anfragen. +TimeoutStopSec=5 [Install] WantedBy=default.target diff --git a/docs/wissen/UMBAUPLAN-ABLOESUNG.md b/docs/wissen/UMBAUPLAN-ABLOESUNG.md index bd3d418..7b0b0ab 100644 --- a/docs/wissen/UMBAUPLAN-ABLOESUNG.md +++ b/docs/wissen/UMBAUPLAN-ABLOESUNG.md @@ -89,6 +89,15 @@ Coder-Modell-Wissen gewinnen), React bleibt (Svelte/Solid schneller, aber irrele reminders_loop (teilt Datei+CRUD mit /api/reminders — Zwei-Schreiber-Risiko) bleibt in MC2. Danach gibt es genau ZWEI Zeitplan-Systeme mit klaren Rollen: systemd-Timer (Box-Pflege) + Hermes-Crons (Agenten-Arbeit) — plus den Steward als dritten, eigenen Wächter-Prozess. + **Annahme-Hinweis (wichtig):** P2 ändert deploy.sh selbst → nach dem Klick EINMAL + `bash ~/mission-control-v2/deploy/deploy.sh` von Hand nachlaufen lassen. Grund = + Selbst-Reset-Falle: deploy.sh ersetzt sich beim `git reset` mitten im Lauf selbst, bash + liest dann einen alt/neu-Zeilen-Mix — genau daran hakte der P1-Deploy am 15.07. + (daemon-reload + Gateway-Start fielen aus, Lucy bekam 502; Heilung war daemon-reload + + `enable --now mc2-gateway` von Hand). P2 bringt den dauerhaften Fix mit (exec-Guard: + Skript führt sich nach dem Reset einmal frisch neu aus) + `TimeoutStopSec=5` für den + Gateway (Restarts rissen sonst 90-s-502-Fenster, weil uvicorn auf offene LLM-Streams + wartet). Ab dem P2-Deploy schützt der Guard alle künftigen Deploys automatisch. - **P3 · Steuerpult-Modernisierung** (Kartenserie, reine UI/API-Arbeit, berührt nach P1 nie mehr den Datenpfad): (a) EIN SSE-Eventstrom `/api/events` ersetzt die 53 `refetchInterval`-Poller in `queries.ts`; (b) TanStack Router → echte URLs (`/modelle/coder`, `/auftrag/t_…`), Deep-Links,