Portiert vom PC-Skill (F:\Coding Stuff\projekt-start): 4 Phasen mit hartem
Plan-Riegel, Savepoints, AGENTS.md/SAVEPOINT.md/.aiexclude-Ritual und
Kontext-Waechter. Zed-Verweise durch Hermes Desktop ersetzt (Modellwaehler
"Box / Coder (bauen)" / "Box / Planer (denken)", Planer-Kontexthinweis),
.aiexclude-Regel in die AGENTS.md-Vorlage gehoben, Verweis auf den
Werkstatt-Weg fuer Box/Lucy-Wartung ergaenzt. deploy.sh installiert ihn
nach ~/.hermes/skills/projekt-start.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Anlass: feature/cleanse-skill-index — ein Werkstatt-Worker hatte git init statt
Klonen gemacht (Orphan-Commit ohne gemeinsamen Vorfahren, Inhalt: ~/.hermes-Index-
Dateien statt Repo-Dateien). Solche Karten sahen aus wie normale Vorschlaege,
liefen bei Annahme aber IMMER in 'refusing to merge unrelated histories' — und
die Fehlermeldung ('bitte am PC aufloesen') war eine Sackgasse. Das passiert
oefter; darum drei Schichten dagegen:
1) ERKENNEN (Auftragsbuch): neue Karten-Flags 'verwaist' (kein merge-base mit
main -> rote Markierung 'kein gemeinsamer Ursprung', Annehmen-Knopf fehlt,
API+Runner halten zusaetzlich dicht) und 'leer' (Diff gegen main leer ->
'bringt nichts'-Badge). Empfehlung auf der Karte: ablehnen mit Grund,
Idee frisch in die Queue.
2) HEILEN (beide Runner, mc2 + lucy): kollidiert der Merge, weil main weiter-
gelaufen ist, versucht der Runner automatisch einen Rebase des Branches auf
main (isolierter Worktree; Gates laufen danach normal, Merge-Message sagt
'auto-rebased'). Nur wenn auch der Rebase kollidiert, faellt die Karte durch —
mit ehrlicher Meldung statt 'am PC aufloesen'.
3) VERHINDERN (werkstatt-SOUL): voll klonen (nie git init/--depth), Selbstcheck
'git merge-base HEAD origin/main' + fetch/rebase vor JEDEM Push, nie
~/.hermes-Artefakte committen.
Doku: AUFTRAGSBUCH.md + FALLEN.md (Erkennungsmuster: Diff 0 Dateien + behind ~
ganze Historie) + OFFENE-FAEDEN. Geprueft: py_compile gruen, bash -n beide
Runner gruen, tsc+vite build gruen (dist dabei); merge-base-Verhalten am echten
kaputten Branch auf der Box verifiziert.
Erstlauf-Befund 12.07.: Karte mit 0 Dateien bekam ANNEHMEN - ein LLM
kann einen leeren Vorschlag nicht pruefen. Jetzt deterministische Regel
vor dem Richter.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
User-Auftrag 12.07. ("bau das alles ein im Sinne der Autonomie. Auch muss
Lucy selbst bemerken wenn sich etwas aendert"):
- deploy/selbst-inventur.sh (Cron 03:35): SELBST-STECKBRIEF wird LIVE aus
der Realitaet GENERIERT (Versionen, Dienste, Timer, Modelle, Crons,
Queue, Karten -> ~/.hermes/state/selbst-steckbrief.md) statt von Hand
gepflegt. Diff gegen gestern => die Box BEMERKT SELBST Aenderungen an
sich (stille Chronik-Karte + kurze Telegram-Zeile; sonst still).
- deploy/karten-gutachter.sh (Cron 04:00): stempelt jede neue Karte mit
"Empfehlung: ANNEHMEN/ABLEHNEN/UNKLAR + ein ehrlicher Satz" (prueft
Redundanz gegen den Steckbrief, Risiko, Nutzen; Ein-Schuss-Richter
gpt-oss/GLM; Stempel = Meinung, kein Gate; neuer Commit entwertet den
alten Stempel). Backend mischt den Stempel in /api/auftragsbuch,
UI zeigt ihn farbig auf der Karte.
- Ablehnen mit Grund (Lern-Klick): UI-Inline-Feld beim Ablehnen ->
/srv/models/mc2-ablehnungen.jsonl -> Idle-Radar bekommt die Gruende
als "NIE wieder vorschlagen"-Material vorgelegt.
- idle-radar-feed.sh: Material + Raster erweitert um Selbst-Steckbrief,
Inventur-Diff und Ablehn-Gruende (Fehlerfall 12.07.: redundanter
Gateway-Restart-Vorschlag waere damit gestorben).
- werkstatt-SOUL Regel 7 + wartung-Skill: REALITAETS-CHECK - existiert es
schon? Dann kanban_block statt Branch (ein Branch fuer Ueberfluessiges
ist ein gescheiterter Lauf).
- hermes-release-radar-feed.sh: echter Treffer legt zusaetzlich EINE rohe
Idee in die Queue (idempotent je Release-Tag) - der Blick nach draussen
fuettert denselben Kreislauf.
- deploy.sh: kopiert beide neuen Skripte; Doku AUFTRAGSBUCH.md +
wissen/OFFENE-FAEDEN.md; frontend/dist frisch gebaut (tsc+vite gruen,
UI gegen Live-Box verifiziert).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.
Das Auftragsbuch-Gegenstueck fuer Lucy (Abloesungs-Paket S3, PC-Annahme-Weg):
- backend/services/auftragsbuch.py: Multi-Repo (mc2 + lucy via ~/lucy-Clone).
Karten tragen repo-Feld; Status-Schluessel fuer Lucy = 'lucy:<branch>';
fehlt ~/lucy, werden Lucy-Karten still weggelassen. Runner je Repo.
- deploy/lucy-annahme.sh: detached Annahme-Runner fuer Lucy-Karten.
Vorpruefung am PC VOR dem Merge (Executor erreichbar, Arbeitskopie main+clean,
laeuft Lucy?), dann Merge im isolierten Worktree von ~/lucy -> Push main ->
PC zieht ff-only und baut detached (deploy/lucy-annahme.ps1 im Lucy-Repo),
Box pollt .lucy-annahme.json und spiegelt Fortschritt auf die Karte.
Rot = Merge automatisch revertiert, laufende Lucy bleibt die alte.
Executor-Zugang (URL+Token) kommt aus ~/.hermes/config.yaml — kein zweiter
Ablageort. Neustart nur, wenn Lucy vorher lief (User-Entscheid).
- Router/UI: repo-Parameter (rueckwaertskompatibel, Default mc2), rosa
Lucy-Badge, eigener Annahme-Confirm-Text, Diff/Ablehnen je Repo.
- werkstatt-SOUL: Lucy-Auftraege ebenfalls propose-only, bauen macht der PC
bei der Annahme.
- Doku: docs/AUFTRAGSBUCH.md (Lucy-Annahme-Kapitel), docs/wissen/OFFENE-FAEDEN
(S2 erledigt, S3-Stand).
Geprueft: py_compile gruen, bash -n gruen, tsc+vite build gruen (dist dabei).
User-Antwort in der Uebergabe-Session: Router/Engine/Hermes duerfen automatisch
(So 04:30, Fangnetz Rollback+Pin) - ersetzt "nur bestaetigt" vom 04.07.
STACK/RUNBOOK/OFFENE-FAEDEN/deploy.sh-Kommentar entsprechend korrigiert;
deploy.sh schaltet den Timer weiterhin NICHT selbst.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Baustein 2-4 des Plans "mehr Hermes nativ, weniger Eigenkreationen":
- deploy/hermes-release-radar-feed.sh: woechentlicher Cron-Feed (Muster chef-gutachter) —
GitHub-Releases seit letztem Stand holen (nur Tags, kein main-Churn), Ein-Schuss-Abgleich
gegen ~/wissens-vault/eigenbau-landkarte.md (Analyst gpt-oss-120b, Vertretung GLM),
Zitat-Pflicht, fremdblick-Gegenpruefung bei Treffern, stiller Briefkasten-Spiegel
(source=release-radar). Informiert nur — Updates bleiben manuell (Entscheid 04.07.).
- deploy/release-radar-prompt.md: versionierter Auftrag fuer den Boten-Agenten.
- deploy.sh: Feed nach ~/.hermes/scripts/ ausrollen.
- Skills wartung+orchestrator: Hermes-first-Leitplanke (vor Neubau nativ pruefen,
Befund in den Vorschlag).
- backup.sh/restore.sh: Nebenbefund geschlossen — ~/.hermes/cron (ALLE Cron-Jobs!) und
~/.hermes/state wurden bisher nicht gesichert; Restore haette sie still verloren.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Die /v1/models-Liste zeigte Router-Lanes (coding/chat), Rollen-Aliase und rohe
llama-swap-IDs durcheinander (verwirrte coding-vs-coder im Hermes-Desktop-Waehler).
Jetzt nur noch die Klarnamen-Aliase: Router-Lanes nicht mehr gelistet (Routing
bleibt, /chat/completions nimmt coding/chat weiter an), rohe Doppel-IDs ausgeblendet
wenn ein Alias sie schon zeigt, tote Konstanten LANES/_LANE_LABELS entfernt.
fast/scout/heavy unangetastet (tragend). py_compile gruen.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Datenbefund: 336 der 679 Kanten laufen quer zwischen Kategorien und uebermalten
das Quadranten-Clustering komplett; Kantengewichte (0,45-1,0) wurden nie genutzt.
- Querkanten im Ruhezustand ausgeblendet, erscheinen nur am aktiven Knoten
(Hover/Auswahl zeigt ALLE seine Verbindungen, auch schwache/quere)
- Gewichts-Schwelle mit Regler in der Legende (alle <-> stark, Default 0,75,
Live-Zaehler): 679 -> 114 sichtbare Kanten im Standard
- Cluster-Huellen: konvexe, geglaettete, getoente Flaeche + Landkarten-Label
je Kategorie via onRenderFramePre (Monotone-Chain-Hull, pro Frame billig)
- Insel-Physik: Intra-Kanten ziehen nach Gewicht (distance 70), Querkanten
fast gar nicht (strength 0,01, distance 200); Cluster-Kraefte 0,07 -> 0,1
E2E verifiziert (Preview mit gepatchtem rAF): Huellen zeichnen ueber viele
Frames fehlerfrei, Regler 0,45=342/0,95=1 Kanten, Hover+Klick unveraendert.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Ursache im force-graph-Internals gefunden: die Hit-Erkennung laeuft ueber eine
Schatten-Canvas, die nur alle 800 ms aktualisiert wird (HOVER_CANVAS_THROTTLE_DELAY)
- waehrend Simulation/Zoom/Pan zeigt sie auf Positionen von vor fast einer Sekunde,
und Klicks werden ueber genau dieses veraltete hoverObj ausgeloest. Dazu verschluckt
das eingebaute Node-Dragging Klicks ab 2 px Mausbewegung.
- Eigenes Picking gegen LIVE-Knotenkoordinaten (screen2GraphCoords + Naechster-
Nachbar, Trefferradius min. ~16 Bildschirm-Pixel, zoom-kompensiert)
- enablePointerInteraction=false: Schatten-Canvas wird gar nicht mehr gemalt (Perf)
- enableNodeDrag=false: kein Klick-Verschlucken, kein Layout-Anschubsen beim Klicken
- Pan-Schutz: >6 px Mausweg zaehlt nicht als Klick
E2E im Browser verifiziert: Hover (Cursor), Knoten-Klick oeffnet Detail,
Hintergrund-Klick waehlt ab, Pan aendert Auswahl nicht.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Doppel-Mount behoben: GraphView lief unsichtbar doppelt (Desktop+Mobile), jetzt nur eine Instanz via matchMedia
- ctx.shadowBlur pro Knoten/Frame durch billigen Halo-Kreis ersetzt (Blur nur fuer aktiven Knoten)
- Kantenfarben beim Datenaufbau vorberechnet statt nodes.find() pro Kante pro Frame
- Knoten-Objekte ueber Daten-Updates wiederverwendet: Positionen ueberleben Refetch/Suche, Reheat nur bei Strukturaenderung
- Hit-Zone zoom-kompensiert (min. ~14 Bildschirm-Pixel) - Knoten sind rausgezoomt jetzt klick- und hoverbar
- Suche via useDeferredValue vom Graph-Umbau entkoppelt
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Systemblick 09.07. abends fand vier Lücken, drei davon hier (die vierte,
blogwatcher-Cron, ist Box-Config):
1. deploy.sh enablete mc2-autoupdate.timer bei JEDEM Deploy — und hat damit
den User-Entscheid vom 04.07. ("Updates nur bestätigt") über die heutige
Annahme-Kaskade still rückgängig gemacht. Zeile raus, Timer manuell
wieder disabled; wer Auto-Updates will, enabled einmalig von Hand.
2. self-smoke.sh prüft jetzt auch das Desktop-Gateway (:9119 /api/status) —
stirbt hermes-builtin-ui, ist die Desktop-App tot, das muss der
Selbst-Test melden statt der User.
3. backup.sh/restore.sh sichern die neue Infrastruktur mit: agent-hooks/
(pre_verify-Gates), shell-hooks-allowlist.json, desktop-gateway-token,
pc-paths.yaml und den systemd-Token-Drop-in (mit chmod 600 + +x beim
Restore). Vorher hätte ein Restore Desktop-Verbindung und Gates STILL
verloren. bash -n auf allen vier Skripten grün.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>