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:
@@ -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(),
|
||||||
|
|||||||
@@ -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#*|}"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user