diff --git a/deploy/agent-hooks/box-steckbrief-inject.sh b/deploy/agent-hooks/box-steckbrief-inject.sh index bfc9987..f99bd0f 100644 --- a/deploy/agent-hooks/box-steckbrief-inject.sh +++ b/deploy/agent-hooks/box-steckbrief-inject.sh @@ -29,6 +29,7 @@ hint="" ctx="$(cat </dev/null; then + LOST=$(git -C "$LIVE_CO" log --oneline origin/main..main 2>/dev/null | head -3 | tr '\n' ' ') + if [ -n "$LOST" ]; then + say "FAIL · Box-main trägt ungepushte Commits (Deploy würde sie vernichten): $LOST" + FAILED+=("Repo (ungepushte Commits auf Box-main: $LOST— vor dem nächsten Deploy nach origin retten)") + else + say "PASS · Repo-Wächter (Box-main == origin/main)" + fi +else + say "SKIP · Repo-Wächter (git fetch fehlgeschlagen)" +fi + # ── Meldung nur bei Rot ────────────────────────────────────────────────────── if [ "${#FAILED[@]}" -eq 0 ]; then say "Alle Selbst-Tests grün ($(date '+%F %H:%M'))." diff --git a/deploy/skills/orchestrator/SKILL.md b/deploy/skills/orchestrator/SKILL.md index a555550..fa3de49 100644 --- a/deploy/skills/orchestrator/SKILL.md +++ b/deploy/skills/orchestrator/SKILL.md @@ -86,10 +86,12 @@ Bevor du selbst Tasks aufteilst, befragst du zwingend **`gpt-oss-120b`** nach ei 3. Fuer jeden Teil-Task entscheide: (a) Artefakt, (b) Worker (`Qwen3-Coder-Next` + `build`/`refactor`), (c) Kontext. ### 2. Worktree anlegen (Slug = kurzer Kebab-Case-Name des Auftrags) +Worktrees liegen unter `~/.hermes/worktrees/` (NICHT /tmp — ueberlebt keinen Reboot und +hinterlaesst kaputte Worktree-Registrierungen, Review-Befund 15.07.): ``` -cd ~/mission-control-v2 && git fetch -q origin \ - && git worktree add /tmp/orch- -b orchestrator/ origin/main -mkdir -p /tmp/orch--work # Ablage fuer rohe Worker-Ausgaben +mkdir -p ~/.hermes/worktrees && cd ~/mission-control-v2 && git fetch -q origin \ + && git worktree add ~/.hermes/worktrees/orch- -b orchestrator/ origin/main +mkdir -p ~/.hermes/worktrees/orch--work # Ablage fuer rohe Worker-Ausgaben ``` ### 3. Routen — je Teil-Task ein Worker-Ein-Schuss (seriell) @@ -98,19 +100,19 @@ Fuer jeden Bau-Teil-Task: fertige Artefakte aus frueheren Schritten als Kontext mitgeben, wenn der Worker sie braucht. 2. Ruf den Worker auf und fang die Ausgabe roh ab: ``` - printf '%s' "$eingabe" | WORKER_ROLE=build ~/.hermes/scripts/worker.sh > /tmp/orch--work/.out + printf '%s' "$eingabe" | WORKER_ROLE=build ~/.hermes/scripts/worker.sh > ~/.hermes/worktrees/orch--work/.out ``` (Default-Modell ist `Qwen3-Coder-Next`. Fuer einen bewusst anderen Worker `WORKER_MODEL=`.) 3. **Pruefe die Ausgabe, bevor du sie verwendest:** Beginnt sie mit `FEHLT:`, hast du zu wenig Kontext gegeben → nachliefern und erneut rufen. Hat der Worker versehentlich einen ```-Codezaun oder Prosa drumherum gesetzt, entferne ihn. Dann schreibe das saubere Artefakt mit deinen - Datei-Tools an seinen Platz im Worktree (`/tmp/orch-/...`). Der Worker hat KEINE + Datei-Tools an seinen Platz im Worktree (`~/.hermes/worktrees/orch-/...`). Der Worker hat KEINE Datei-Haende — das Schreiben machst DU. 4. **Schreibziel-Pflicht (Vorfall 09.07.2026):** JEDES write_file/patch-Ziel MUSS mit - `/tmp/orch-/` beginnen — vor dem ersten Schreiben einmal laut pruefen. NIEMALS nach + `~/.hermes/worktrees/orch-/` beginnen — vor dem ersten Schreiben einmal laut pruefen. NIEMALS nach `~/mission-control-v2/...` schreiben (Live-Checkout!), NIEMALS Work-Dirs/Worktrees FREMDER Slugs wiederverwenden (beim Doku-Lauf landete ein Artefakt im Live-Checkout, weil das alte - `/tmp/orch-hermes-desktop-work` recycelt wurde). Existiert dein `/tmp/orch-` noch nicht, + `/tmp/orch-hermes-desktop-work` recycelt wurde). Existiert dein `~/.hermes/worktrees/orch-` noch nicht, ist das der Beweis, dass Schritt 2 fehlt — erst Worktree anlegen. 5. **Grosse Artefakte NIE im Klartext in deine Antwort** — sie gehoeren in Dateien im Worktree. Wer Dateiinhalte in die Antwort kippt, stirbt am Output-Limit mitten im Lauf (Doku-Lauf @@ -148,7 +150,7 @@ Grund wie in der Werkstatt („wer seine eigenen Hausaufgaben benotet, stimmt si **Zuerst ALLES stagen** — sonst fehlen NEUE Dateien im Diff (haeufigste Falle: `git diff` ignoriert untracked Dateien, die Kritiker bekaemen einen LEEREN Diff und wuerden alles blind ablehnen): ``` -git -C /tmp/orch- add -A +git -C ~/.hermes/worktrees/orch- add -A ``` Dann die Eingabe EINMAL bauen (mit `--cached`, damit die neuen Dateien drin sind): ``` @@ -159,7 +161,7 @@ ZERLEGUNG (deine Teil-Tasks, je 1 Zeile): <1..n> GIT-DIFF des Worktrees: -$(git -C /tmp/orch- diff --cached origin/main)" +$(git -C ~/.hermes/worktrees/orch- diff --cached origin/main)" ``` Ist dieser Diff LEER, hast du nicht gestaged (oder nichts gebaut) → NICHT weiter, erst beheben. **Kritik A — Kompetenz** (`Qwen3-Coder-Next`, starker Coder, vom Bauen noch geladen → KEIN Swap): @@ -212,7 +214,7 @@ Zugriff aufs Repo. Er sieht NUR, was du ihm auf stdin gibst. Deshalb: den Fokus. Ziel: das kleinste, das den Teil-Task eindeutig macht. ## Nach dem Commander-Entscheid (kommt als neuer Auftrag) -- „verwerfen" → `git worktree remove /tmp/orch- --force && git branch -D orchestrator/` - (+ `rm -rf /tmp/orch--work`; Remote-Branch loeschen, falls gepusht). +- „verwerfen" → `git worktree remove ~/.hermes/worktrees/orch- --force && git branch -D orchestrator/` + (+ `rm -rf ~/.hermes/worktrees/orch--work`; Remote-Branch loeschen, falls gepusht). - „merge" → das Mergen nach main + Deploy macht der PC/Claude (Frontend-Builds gibt es nur dort). Du pushst NIE nach main. diff --git a/deploy/skills/wartung/SKILL.md b/deploy/skills/wartung/SKILL.md index 275b56c..214ee0a 100644 --- a/deploy/skills/wartung/SKILL.md +++ b/deploy/skills/wartung/SKILL.md @@ -42,7 +42,8 @@ unangenommene Branches aufbauen — erst wenn die Vor-Etappe in main ist, kommt ## Ablauf 1. **Worktree anlegen** (Slug = kurzer Kebab-Case-Name des Auftrags): - `cd ~/mission-control-v2 && git fetch origin && git worktree add /tmp/wartung- -b wartung/ origin/main` + `mkdir -p ~/.hermes/worktrees && cd ~/mission-control-v2 && git fetch origin && git worktree add ~/.hermes/worktrees/wartung- -b wartung/ origin/main` + (Worktrees NIE unter /tmp — ueberlebt keinen Reboot, Review-Befund 15.07.) 2. **Patch** nur im Worktree. Minimal-invasiv, Stil der umgebenden Datei übernehmen (deutsche Kommentare, bestehende Muster). 3. **Selbst-Gate** (was zutrifft): @@ -76,7 +77,7 @@ unangenommene Branches aufbauen — erst wenn die Vor-Etappe in main ist, kommt GIT-DIFF des Worktrees: - diff origin/main>" | FREMDBLICK_MODE=code ~/.hermes/scripts/fremdblick.sh + diff origin/main>" | FREMDBLICK_MODE=code ~/.hermes/scripts/fremdblick.sh ``` Das läuft auf `Qwen3-Coder-Next` (128k, code-stark, anderes Modell als der Qwen3.6-Worker, @@ -113,7 +114,7 @@ unangenommene Branches aufbauen — erst wenn die Vor-Etappe in main ist, kommt ## Nach dem User-Entscheid (kommt als neuer Auftrag) -- „verwerfen" → `git worktree remove /tmp/wartung- --force && git branch -D wartung/` +- „verwerfen" → `git worktree remove ~/.hermes/worktrees/wartung- --force && git branch -D wartung/` (+ Remote-Branch löschen, falls gepusht: `git push origin --delete wartung/`) - „merge" → das Mergen nach main + Deploy macht der PC/Claude (Frontend-Builds gibt es nur dort). Du pushst NIE nach main — auch nicht mit Token.