Lucy-Annahme-Fixes: Start-Process-Quoting, Python-3.14-Parse, Executor ohne Fensterblitz

Der erste Live-Lauf der Lucy-Annahme (wartung/pc-annahme-und-turncheck-aus) fand
zwei Bugs im Box-Runner — der Build selbst war gruen, nur Start und Abschluss
mussten manuell nachgezogen werden:

1) Start-Process -ArgumentList quotet Elemente NICHT (PS 5.1): der Runner-Pfad
   'F:\Coding Stuff\lucy\...' zerbrach am Leerzeichen, die gespawnte powershell
   starb still (kein Status, kein Log). Fix: Anfuehrungszeichen ins -File-Element
   eingebettet. (Der Probe-Test lief ueber einen Pfad OHNE Leerzeichen — deshalb
   nicht gefangen.)

2) Poll-Parser: \" in f-String-Ausdruecken ist seit Python 3.12 ein SyntaxError
   (Box: 3.14) -> der Poll blieb blind und haette den GRUENEN Merge nach 25 min
   revertiert. Fix: keine f-String-Quote-Akrobatik mehr, Werte in Variablen.
   Neuer Parser 1:1 auf der Box getestet.

3) executor.py /shell: CREATE_NO_WINDOW — der Executor laeuft unter pythonw,
   jede gespawnte powershell bekam ein SICHTBARES Konsolenfenster (Polling
   blitzte im 10-s-Takt auf dem Desktop). Nach Annahme: PC-Checkout pullen +
   HermesPCExecutor-Task neu starten (mache ich, steht auch in FALLEN.md).

Beide Fallen + Fensterblitz in docs/wissen/FALLEN.md; OFFENE-FAEDEN: S3-Stand.
Geprueft: bash -n gruen, py_compile gruen, Parser auf Box-Python 3.14 verifiziert.
This commit is contained in:
Hitonabi
2026-07-12 15:18:20 +02:00
parent 3fa2fbb9d8
commit b4c405a127
4 changed files with 31 additions and 7 deletions
+4
View File
@@ -51,6 +51,10 @@ async def run_shell(req: dict):
["powershell", "-NoProfile", "-NonInteractive", "-Command", cmd], ["powershell", "-NoProfile", "-NonInteractive", "-Command", cmd],
capture_output=True, text=True, timeout=60, capture_output=True, text=True, timeout=60,
encoding="utf-8", errors="replace", encoding="utf-8", errors="replace",
# Der Executor läuft unter pythonw (kein eigenes Konsolenfenster) — ohne dieses
# Flag bekäme JEDE gespawnte powershell ein sichtbares Fenster (beim 10-s-Polling
# der Lucy-Annahme blitzte das im Sekundentakt auf dem Desktop, 12.07.).
creationflags=subprocess.CREATE_NO_WINDOW,
) )
return { return {
"stdout": result.stdout.strip(), "stdout": result.stdout.strip(),
+9 -2
View File
@@ -155,7 +155,10 @@ pc_shell "git -C '$PC_REPO' fetch origin main 2>&1; if (\$LASTEXITCODE -ne 0) {
pc_shell "if (Test-Path '$PC_RUNNER') { exit 0 } else { exit 1 }" >>"$LOG" 2>&1 \ pc_shell "if (Test-Path '$PC_RUNNER') { exit 0 } else { exit 1 }" >>"$LOG" 2>&1 \
|| revert_main "PC-Runner-Skript fehlt im Lucy-Repo (deploy/lucy-annahme.ps1)" || revert_main "PC-Runner-Skript fehlt im Lucy-Repo (deploy/lucy-annahme.ps1)"
pc_shell "Remove-Item -Force '$PC_STATUSFILE' -ErrorAction SilentlyContinue; Start-Process powershell -WindowStyle Hidden -ArgumentList '-NoProfile','-ExecutionPolicy','Bypass','-File','$PC_RUNNER','-WasRunning','$WAS_RUNNING'" >>"$LOG" 2>&1 \ # WICHTIG: -File-Pfad MUSS eingebettete Anführungszeichen tragen — Start-Process fügt
# die ArgumentList-Elemente OHNE Quoting zusammen; 'F:\Coding Stuff\…' zerbricht sonst am
# Leerzeichen und die gespawnte powershell stirbt still (erster Live-Lauf, 12.07.).
pc_shell "Remove-Item -Force '$PC_STATUSFILE' -ErrorAction SilentlyContinue; Start-Process powershell -WindowStyle Hidden -ArgumentList '-NoProfile','-ExecutionPolicy','Bypass','-File','\"$PC_RUNNER\"','-WasRunning','$WAS_RUNNING'" >>"$LOG" 2>&1 \
|| revert_main "PC-Build ließ sich nicht starten" || revert_main "PC-Build ließ sich nicht starten"
# ── Status-Datei pollen, Fortschritt in die UI spiegeln ───────────────────── # ── Status-Datei pollen, Fortschritt in die UI spiegeln ─────────────────────
@@ -167,6 +170,8 @@ while [ "$(date +%s)" -lt "$DEADLINE" ]; do
sleep 10 sleep 10
RAW="$(pc_shell "if (Test-Path '$PC_STATUSFILE') { Get-Content -Raw '$PC_STATUSFILE' }" 2>>"$LOG")" || continue RAW="$(pc_shell "if (Test-Path '$PC_STATUSFILE') { Get-Content -Raw '$PC_STATUSFILE' }" 2>>"$LOG")" || continue
[ -n "$RAW" ] || continue [ -n "$RAW" ] || continue
# Parse OHNE f-String-Escapes: \" in f-String-Ausdruecken ist seit Python 3.12/3.14
# ein SyntaxError (alter Pre-3.12-Stil) — genau das legte den ersten Live-Lauf lahm.
PARSED="$(printf '%s' "$RAW" | python3 -c ' PARSED="$(printf '%s' "$RAW" | python3 -c '
import json, sys import json, sys
try: try:
@@ -174,7 +179,9 @@ try:
except Exception: except Exception:
sys.exit(0) sys.exit(0)
detail = str(d.get("detail", "")).replace("|", "/").replace("\n", " ") detail = str(d.get("detail", "")).replace("|", "/").replace("\n", " ")
print(f"{1 if d.get(\"done\") else 0}|{1 if d.get(\"ok\") else 0}|{detail}") done = "1" if d.get("done") else "0"
ok = "1" if d.get("ok") else "0"
print(done + "|" + ok + "|" + detail)
')" ')"
[ -n "$PARSED" ] || continue [ -n "$PARSED" ] || continue
DONE="${PARSED%%|*}"; REST="${PARSED#*|}"; OK="${REST%%|*}"; DETAIL="${REST#*|}" DONE="${PARSED%%|*}"; REST="${PARSED#*|}"; OK="${REST%%|*}"; DETAIL="${REST#*|}"
+10
View File
@@ -102,6 +102,16 @@ Neue Fallen: hier eintragen, mit Datum und Symptom._
blind per Produkt-Gefühl. blind per Produkt-Gefühl.
- **Executor-Task** `HermesPCExecutor` läuft aus dem Repo mit pythonw → nach - **Executor-Task** `HermesPCExecutor` läuft aus dem Repo mit pythonw → nach
executor.py-Änderung Task neu starten; Logs in `%LOCALAPPDATA%\HermesPCExecutor\`. executor.py-Änderung Task neu starten; Logs in `%LOCALAPPDATA%\HermesPCExecutor\`.
- **`Start-Process -ArgumentList` quotet NICHT** (PS 5.1): Elemente werden mit Leerzeichen
zusammengefügt — ein Pfad wie `F:\Coding Stuff\…` zerbricht, die gespawnte powershell
stirbt STILL (kein Fenster, kein Log). → Anführungszeichen ins Element einbetten:
`'-File','"F:\Coding Stuff\…\skript.ps1"'`. Kostete den ersten Lucy-Annahme-Lauf (12.07.).
- **`\"` in f-String-AUSDRÜCKEN ist seit Python 3.12 ein SyntaxError** (Alt-Stil
`f"{d.get(\"x\")}"` lief nur pre-3.12; Box hat 3.14). In bash-eingebetteten
`python3 -c '…'`-Snippets braucht es die Escapes eh nicht (single-quoted) — Werte vorab
in Variablen ziehen statt Quote-Akrobatik. Kostete denselben Lauf (Poll parste nie).
- **pythonw + subprocess ohne `CREATE_NO_WINDOW`** = jedes gespawnte Konsolenprogramm
bekommt ein SICHTBARES Fenster (Executor-Polling blitzte im 10-s-Takt auf dem Desktop).
- **MSIX-Sandbox-Falle (Claude-Desktop-Tools):** Tools der Claude-App laufen im - **MSIX-Sandbox-Falle (Claude-Desktop-Tools):** Tools der Claude-App laufen im
MSIX-Container — Writes nach `AppData\Local\<app>` landen in MSIX-Container — Writes nach `AppData\Local\<app>` landen in
`AppData\Local\Packages\Claude_*\LocalCache\` (Merge-Read täuscht!). Windows-Apps NIE über `AppData\Local\Packages\Claude_*\LocalCache\` (Merge-Read täuscht!). Windows-Apps NIE über
+8 -5
View File
@@ -20,12 +20,15 @@ keine zweite Liste anlegen. Verdikte werden NICHT als „offen" geführt → [VE
(Zentrale/Telegram/Lucy), Bagatell-Pfad enabled; voller Kreislauf einmal komplett (Zentrale/Telegram/Lucy), Bagatell-Pfad enabled; voller Kreislauf einmal komplett
durchlaufen (`wartung/fix-double-zero-self-repair`). Rest: Live-Telegram-Test beim durchlaufen (`wartung/fix-double-zero-self-repair`). Rest: Live-Telegram-Test beim
nächsten echten Zuruf beobachten; Specifier schreibt Titel englisch (ggf. tunen). nächsten echten Zuruf beobachten; Specifier schreibt Titel englisch (ggf. tunen).
- **S3 „leg los lucy-pipeline" (12.07., diese Karte):** PC-Annahme-Weg gebaut - **S3 „leg los lucy-pipeline" (12.07., beide Karten angenommen):** PC-Annahme-Weg live
Auftragsbuch liest jetzt ZWEI Repos (mc2 + lucy), Lucy-Annahme = Merge auf der Box + Auftragsbuch liest ZWEI Repos (mc2 + lucy), Lucy-Annahme = Merge auf der Box +
dist-Build/Neustart am PC via PC-Executor (`deploy/lucy-annahme.sh` + dist-Build/Neustart am PC via PC-Executor (`deploy/lucy-annahme.sh` +
`deploy/lucy-annahme.ps1` im Lucy-Repo), Auto-Revert bei Rot. Erster echter Auftrag: `deploy/lucy-annahme.ps1` im Lucy-Repo), Auto-Revert bei Rot. Erster echter Auftrag
A4-Turncheck-Auswertung (Verdikt aus 680 echten Entscheidungen: Default AUS, opt-in) — durch: A4-Turncheck Default AUS (680 Entscheidungen, 79 % der Halte umsonst), dist am PC
liegt als Lucy-Karte bereit. **E2E-Beweis = Annahme-Klick der beiden Karten.** gebaut. **Erster Live-Lauf fand 2 Runner-Bugs** (Start-Process-Quoting bei Leerzeichen-Pfad,
f-String-`\"` auf Python 3.14 → Poll blind; Abschluss manuell nachgezogen, Build war grün) —
Fixes + Executor-Fensterblitz-Fix in Karte `wartung/lucy-annahme-fixes`. Details FALLEN.md.
**Der nächste Lucy-Auftrag ist der ehrliche Voll-Automatik-Test.**
- **S4 „leg los zuendung":** Idle-Radar / Fehler→Auftrag (Traum-Funde + Journal-Muster → - **S4 „leg los zuendung":** Idle-Radar / Fehler→Auftrag (Traum-Funde + Journal-Muster →
Queue-Kandidaten) · Großbau-Etappen-Regeln in Skills · Generalprobe ohne Claude. Queue-Kandidaten) · Großbau-Etappen-Regeln in Skills · Generalprobe ohne Claude.