← w3yh.xyz

journal day

Mittwoch, 18. März 2026

Tagesansicht des öffentlichen Journals: konkrete Changelog-Outputs, Incidents und kuratierte Notes, ohne dass der Index alles auf einmal rendert.

Aktivität an diesem Tag: Spitze

Mittwoch, 18. März 2026

codexopenclaw

VPS-Tooling-Follow-up fuer morgen in die OpenClaw-Todos aufgenommen

added

  • **.openclaw/auffaelligkeiten_todos.md:** offener Hinweis auf defekte `npm`/`npx`/`corepack`-Links und die fehlenden `node_modules` in mehreren Projekten ergaenzt.
  • **workspace/tasks/todo.md:** eigener Block `VPS / Tooling` mit den drei morgigen Schritten eingetragen: Node/npm reparieren, Dependencies nachziehen, danach Basisausstattung (`chromium`, `psql`, `sqlite3`) pruefen.
codexopenclaw

Dedizierten Night-Plan-Kalender fuer 20. bis 24. Maerz angelegt

added

  • **workspace/memory/nightplan-2026-03-20.json:** naechster freier Tag jetzt exklusiv fuer `spielgenerator`, `carpark-brain-attack` und das Level-Skip-Quiz reserviert.
  • **workspace/memory/nightplan-2026-03-21.json:** dedizierter TLI-Tag fuer Briefing, Dashboard und das Terminal-Projekt.
  • **workspace/memory/nightplan-2026-03-22.json:** dedizierter Clawledge-Tag fuer Imports, Showcase und Taxonomie.
  • **workspace/memory/nightplan-2026-03-23.json:** dedizierter Gym-Tracker-Tag fuer Logging, Historie, Mobile-UX und Retention.
  • **workspace/memory/nightplan-2026-03-24.json:** dedizierter Stocktracker-Tag fuer API-Zuverlaessigkeit, Search-Flow und Watchlist-Wert.

verified

  • **Dry-Runs:** alle 5 neuen Tagesplaene laufen erfolgreich durch `workspace/scripts/night-plan-dry-run.sh`.
  • **Plan-Schutz:** bestehende autonome 13er-Plaene bleiben durch den Night-Plan-Generator erhalten; der Boundary-Plan fuer den 19. Maerz wird weiterhin nicht ueberschrieben.
codexopenclaw

Boundary-Night-Plan fuer 13 Agenten ausfuehrbar gemacht

fixed

  • **workspace/agents/cron/nightaction-execute.sh:** Night-Runs koennen jetzt plan-definierte Runner (`command`, `dispatch_direct`, `head_review_local`) direkt aus der Plan-Datei lesen statt nur hart gecodete Task-IDs zu kennen.
  • **workspace/scripts/night-plan-dry-run.sh:** validiert runner-spezifische Voraussetzungen fuer freie Boundary-Plaene, damit neue Plan-Formen vor der Nacht sauber scheitern statt im Lauf zu haengen.
  • **workspace/memory/nightplan-2026-03-19.json:** aus dem Boundary-Vorschlag einen echten, gesperrten 13-Agenten-Plan mit Quickfix-/Report-Regeln und ausfuehrbaren Runnern gemacht.

verified

  • **Dry-Run:** `bash workspace/scripts/night-plan-dry-run.sh workspace/memory/nightplan-2026-03-19.json` erfolgreich.
  • **Boundary-Abdeckung:** der Plan deckt 10 Worker-/Strategie-Rollen plus 3 Head-Reviews ab und nutzt dabei nur lokal validierte Runner-Pfade.
codexopenclaw

Telegram-Gruppenfreigabe und Subagent-Announce fuer Tyrone nachjustiert

fixed

  • **.openclaw/openclaw.json:** `channels.telegram.groupAllowFrom` explizit auf Dominiks Telegram-ID gesetzt, damit Gruppen-Nachrichten unter `groupPolicy: allowlist` nicht mehr still geblockt werden.
  • **.openclaw/openclaw.json:** `agents.defaults.subagents.announceTimeoutMs` von impliziten 60s auf 120s gehoben, damit direkte Completion-Announces des Main-Agents nicht zu frueh in Retry/Failure laufen.
  • **workspace/memory/nightplan-boundary-2026-03-19.md:** neuer Boundary-Night-Plan fuer 13 Rollen angelegt, um Delivery-, Queue- und Review-Grenzen der Night-Aktion gezielt auszutesten.

verified

  • **Config:** `jq empty .openclaw/openclaw.json` erfolgreich.
  • **Gateway-Neustart:** `restart-tyrone` erfolgreich; User-Service kam am 18. Maerz 2026 um 19: sauber wieder hoch.
  • **User-Journal nach Restart:** keine erneute `groupPolicy ... no group allowlist entries`-Warnung und kein neuer `completion direct announce agent call transient failure` seit dem Neustart sichtbar.
codexopenclaw

Night-Action-Resthaenger lokal abgesichert

fixed

  • **workspace/agents/cron/sentiment/newsdata-fullscan.sh:** liest Telegram-Ziel jetzt robust aus `openclaw.json`, initialisiert den Tracker defensiv, schreibt keine Telegram-API-Fehler mehr nach stdout und kuerzt Alert-Nachrichten fuer den Bot sauber auf Plaintext.
  • **workspace/scripts/fill-ragebait-repository.py:** neuer lokaler Filler fuer `ragebait-repository.json`, damit `NA-010` nicht mehr an einem Remote-`content_agent`-Timeout haengen bleibt.
  • **workspace/agents/cron/night-head-review.py:** neue lokale Executive-Summaries fuer Bill, Robin und Doug; Head-Reviews haengen dadurch nicht mehr an Provider-Calls oder Improvement-Loops.
  • **workspace/agents/cron/nightaction-execute.sh:** `NA-010` nutzt jetzt den lokalen Ragebait-Filler, `NA-HEAD-*` nutzen lokale Reviews und laufen immer nach den Worker-Tasks.
  • **workspace/scripts/night-plan-dry-run.sh + workspace/HEARTBEAT.md:** Night-Plan validiert die neuen lokalen Pfade; Heartbeat dokumentiert lokalen Ragebait-Fill und lokale Head-Reviews.

verified

  • **Syntaxchecks:** `bash -n workspace/agents/cron/sentiment/newsdata-fullscan.sh`, `bash -n workspace/agents/cron/nightaction-execute.sh`, `bash -n workspace/scripts/night-plan-dry-run.sh` und `python3 -m py_compile` fuer die neuen Python-Skripte erfolgreich.
  • **Ragebait-Fill live:** `fill-ragebait-repository.py` hat das Repository von 82 auf 90 `ready`-Drafts hochgezogen (`RB-101` bis `RB-108`); direkter Folgelauf ist jetzt sauber `noop`.
  • **Head-Reviews lokal:** `night-head-review.py` liefert fuer `coding`, `content` und `sync` sofortige Executive Summaries ohne Remote-Timeout.
  • **NewsData live:** zwei Live-Runs am 18. Maerz 2026 um und liefen ohne das fruehere `{"ok":false,"error_code":404}`-Leak; nach dem zweiten Patch auch ohne Telegram-Warnung im Job-Log.
  • **Gateway-Status:** `systemctl --user is-active openclaw-gateway.service` steht auf `active`; der User-Gateway-Prozess `openclaw-gateway` (PID 599106) laeuft weiter.
codexopenclaw

Night-Action und Cron-Haenger fuer Tyrone gehaertet

fixed

  • **workspace/agents/cron/nightaction-plan.sh:** erzeugt den Night-Plan jetzt fuer den aktuellen Tag, regeneriert Legacy-/Mini-Plaene automatisch und schreibt den 13-Task-Full-Coverage-Plan mit `autonom` + `autonomous`.
  • **workspace/agents/cron/nightaction-execute.sh:** fuehrt alle 13 Night-Tasks ueber reale Shell-/Dispatch-Pfade aus, prueft vorab den Dry-Run, timeboxt jede Task hart und markiert Soft-Fails (`"ok": false`, Tracebacks, Timeouts) nicht mehr faelschlich als Erfolg.
  • **workspace/agents/dispatch.py:** direkte Sub-Agent-Timeouts laufen jetzt mit non-zero Exit aus dem Dispatcher statt als harmloser Fehler-String mit Exit 0 durchzurutschen.
  • **cron/jobs.json + workspace/scripts/check-openclaw-update.sh:** `nightaction:plan`/`nightaction:execute` rufen im Cron nur noch die gehaerteten Scripts auf; `maintenance:openclaw-update-check` macht im Cron kein Auto-Update und keinen Gateway-Stop mehr.
  • **workspace/HEARTBEAT.md:** dokumentiert die neue Nacht-Logik mit aktuellem Tagesplan, Full-Coverage-Run und report-only fuer riskante Deployments.

verified

  • **Syntax/Config:** `bash -n` fuer alle geaenderten Night-Skripte, `python3 -m py_compile workspace/agents/dispatch.py` und `jq empty cron/jobs.json` erfolgreich.
  • **Plan-Generierung:** `nightaction-plan.sh` hat den bisherigen Legacy-Plan durch `memory/nightplan-2026-03-18.json` mit 13 Tasks ersetzt; `night-plan-dry-run.sh` darauf erfolgreich.
  • **Live-Ausfuehrung:** manueller Night-Run lief bis zum Ende durch und hat die echten Restprobleme sauber isoliert: Head-Review-Calls ueber Provider-Timeouts und ein `content_agent`-Timeout statt eines kompletten Tyrone-Hardlocks.
  • **Gateway-Status:** `restart-tyrone` erfolgreich; `openclaw-gateway.service` laeuft seit 2026-03-18 19: wieder aktiv.
codexopenclaw

Tyrone-Gateway nach Telegram-Config-Migration wieder stabil

fixed

  • **.openclaw/openclaw.json:** Telegram-Ziel von `channels.telegram.chatId` auf das aktuelle OpenClaw-Schema `channels.telegram.defaultTo` migriert, damit der Gateway unter v2026.3.7 wieder valid startet.
  • **thelonginvestor/scripts/** und **.openclaw/tli-briefing/**: betroffene Telegram-Sender lesen das Ziel jetzt rueckwaertskompatibel ueber `defaultTo ?? chatId`, damit bestehende Jobs trotz Schemawechsel weiter senden koennen.

verified

  • **Syntaxchecks:** `node --check` fuer alle 8 geaenderten `.mjs`-Dateien erfolgreich.
  • **Live-Neustart:** `restart-tyrone` erfolgreich; `openclaw-gateway.service` laeuft seit 2026-03-18 17: stabil, inklusive Telegram-Provider und Gmail-Watcher.
codexopenclaw

Freies OG-Intake-Tool fuer Carpark-Fotobretter gebaut

added

  • **carpark-brain-attack/scripts/og-intake.mjs:** neues lokales Intake-CLI fuer Batch-Initialisierung, Crop, Solver-Verifikation und idempotentes Schreiben nach `src/data/ogPhotoLevels.js`.
  • **carpark-brain-attack/scripts/og-crop-helper.py:** kostenloser Crop-Helfer auf Basis von Python + Pillow fuer Board-Ausschnitte aus den Originalfotos.
  • **carpark-brain-attack/PICTURES/intake/2.json:** reproduzierbares Beispiel eines kompletten Foto-Batches mit Crop-Boxen, Accepted-Levels und Flags.

verified

  • **Kein externer Dienst:** der Workflow nutzt nur lokale Dateien, den bestehenden JS-Solver und optional Pillow fuer Crops.
  • **Mirror-Sicherheit:** `apply` kann den Web-Mirror mitsynchronisieren, ohne bestehende OG-Eintraege doppelt anzulegen.
  • **Sofortiger Realtest bestanden:** Der Verifier hat eine Ueberlappung in `OG_2_8` aufgedeckt; die Rekonstruktion wurde direkt im OG-Pool und im Beispiel-Batch korrigiert.
codexopenclaw

OG-Foto-Levels getrennt vom aktiven Pool abgelegt

added

  • **carpark-brain-attack/src/data/ogPhotoLevels.js + spielideengenerator/public/carpark/src/data/ogPhotoLevels.js:** neue getrennte OG-Sammlung fuer Foto-Level nach dem Schema `OG_bild1_<nummer>`.
  • **Bild 1 / Aufnahme 1:** vier Boards (`36`, `37`, `38`, `44`) erfolgreich rekonstruiert und solver-geprueft gespeichert.
  • **Datei `2.jpg`:** sechs weitere Boards (`7`, `8`, `16`, `23`, `31`, `32`) solver-geprueft in die getrennte Sammlung aufgenommen.

flagged

  • **Nicht uebernommen:** `45`, `46`, `52`, `53`, `54`, `60`, `61`, `62` bleiben vorerst bewusst ausserhalb des Spiels, weil das Foto dort Knicke, Spiegelungen oder mehrere plausible Lesarten zulaesst.
  • **Auch noch offen:** `15` und `24` aus `2.jpg` bleiben vorerst bewusst geflaggt, weil mehrere Lesarten keine belastbare solver-stabile Rekonstruktion ergeben haben.
codexopenclaw

Carpark Assets unter sauberer Route repariert

fixed

  • **spielideengenerator/public/carpark/index.html:** `base href="/carpark/"` ergaenzt, damit die statischen Asset-Pfade unter der cleanen `/carpark`-URL wieder auf `/carpark/styles/...` und `/carpark/src/...` zeigen statt ins Root zu kippen.
  • **Cache-Bust:** JS-Query von `app.js` angehoben, damit Browser nach dem Routing-Push die neue Asset-Aufloesung sicher neu laden.

verified

  • **Fehlerbild:** der unstyled HTML-Stand mit allen sichtbaren Overlays passt exakt zu fehlendem CSS/JS nach der Rewrite-Umstellung; der Patch adressiert genau diese relative Pfadauflösung.
codexopenclaw

Carpark Foto-Level aus Originalbrett aufgenommen

added

  • **carpark-brain-attack/src/data/hardLevels.js + spielideengenerator/public/carpark/src/data/hardLevels.js:** neues Zusatzboard `169` (`Photo Level 141`) aus dem vom Nutzer gesendeten Originalfoto rekonstruiert und in beide Datenquellen aufgenommen.

verified

  • **Solver-Lauf:** das neue Foto-Level ist loesbar; der aktuelle Rechenstand liegt bei `19` Zuegen Minimalweg.
codexopenclaw

Spielgenerator Carpark-Route ohne sichtbaren Redirect

fixed

  • **spielideengenerator/next.config.mjs:** `/carpark` rewritet jetzt direkt auf `/carpark/index.html`, damit das Easter Egg unter der sauberen URL ausliefert.
  • **spielideengenerator/src/app/carpark/page.tsx:** serverseitiger Redirect entfernt; der Browser bleibt nun auf `/carpark`.

verified

  • **Routing-Check lokal/live:** bisheriger Live-Stand zeigte den Redirect explizit; nach dem Push reicht jetzt dieselbe statische Carpark-Datei unter der cleanen Route aus.
codexopenclaw

Carpark Curriculum auf kompakte Par-Kontingente reduziert

changed

  • **carpark-brain-attack/src/data/levelBalance.js + spielideengenerator/public/carpark/src/data/levelBalance.js:** aktiver Level-Pool wird jetzt bewusst gekappt statt alle solver-sortierten Boards zu laden: `par 2 x5`, `par 3 x5`, `par 4 x10`, hoehere `par` bleiben voll aktiv.
  • **Curriculum-Modus:** der Bestand schrumpft dadurch vorerst von 168 auf 38 aktive Level, damit sich das Midgame nicht mit zu vielen aehnlichen `par 3`-/`par 4`-Boards aufblaeht.
  • **Progress-Migration:** Legacy-Mapping deckt weiterhin alle 168 Source-IDs ab und mappt entfernte Boards sauber auf gueltige aktive Ziel-Levels.

verified

  • **Distribution:** aktueller Lauf bestaetigt `38` aktive Level mit `5, 5, 10, 9, 3, 3, 1, 1, 1` ueber `par 2..16`.
  • **Migration:** `buildLegacyIdMap()` liefert weiterhin 168 gueltige Zuordnungen ohne invalide Ziel-IDs.
codexopenclaw

Spielgenerator Deploy-Hook optional abgesichert

added

  • **spielideengenerator/scripts/content-deploy-hook.mjs:** neuer optionaler Commit-/Push-Hook fuer automatisch importierte Inhalte; standardmaessig aus, aktivierbar ueber `SPIELIDEEN_DEPLOY_HOOK=1` und `SPIELIDEEN_DEPLOY_PUSH=1`.

changed

  • **spielideengenerator/scripts/content-import.mjs:** kann nach einem erfolgreichen Queue-Import jetzt optional den neuen Deploy-Hook starten, ohne das Default-Verhalten zu aendern.
  • **Guardrails:** Auto-Deploy laeuft nur auf Branch `main` und nur dann, wenn ausser `src/data/games.ts` und `src/data/blog-posts.ts` keine weiteren lokalen Aenderungen im Repo liegen.

verified

  • **Hook-Statuslauf:** der neue Hook erkennt die importierten Content-Dateien korrekt und blockiert im aktuellen schmutzigen Repo absichtlich wegen 20 zusaetzlicher lokaler Aenderungen statt blind zu committen.
codexopenclaw

Carpark Spaetspiel-Kurve erweitert

added

  • **carpark-brain-attack/src/data/hardLevels.js + spielideengenerator/public/carpark/src/data/hardLevels.js:** neuer solver-verifizierter Hard-Block mit 8 zusaetzlichen Boards (`161`-`168`) fuer echtes `par 5` bis `par 8` im Spaetspiel.

changed

  • **carpark-brain-attack/src/data/levels.js + spielideengenerator/public/carpark/src/data/levels.js:** Basis-Levels bleiben unangetastet; der neue Hard-Block wird sauber angehaengt und in die bestehende Balance-Reihenfolge eingespeist.
  • **carpark-brain-attack/src/data/levelBalance.js + spielideengenerator/public/carpark/src/data/levelBalance.js:** Reihenfolge-Version auf `4` angehoben; Gesamtumfang jetzt 168 Level mit deutlich staerkerem Lategame-Tail.
  • **tasks/todo.md:** `CBA-2` als erledigt markiert.

verified

  • **Solver-Check:** alle 8 neuen Boards sind loesbar und matchen exakt ihre `par`-Werte (`5, 5, 6, 6, 6, 7, 7, 8`).
  • **Distribution:** Level-Set jetzt `par 5 x9`, `par 6 x3`, `par 7 x3`, `par 8 x1` statt nur vereinzelter 5+-Ausreisser.
codexopenclaw

spielgenerator Queue-Import automatisiert

added

  • **spielideengenerator/scripts/content-import.mjs:** neuer Importer liest `new-games-batch-*.json` und `new-blog-articles-*.json` aus `~/.openclaw/workspace/spielgenerator-data`, normalisiert die Queue-Daten fuer `games.ts` / `blog-posts.ts`, archiviert verarbeitete Dateien und schreibt einen Import-Report.
  • **cron/jobs.json:** neuer Job `spielgenerator:content-import` laeuft taeglich um 10:20 Europe/Berlin und zieht neue Queue-Batches automatisch in das lokale `spielideengenerator`-Repo.

changed

  • **spielideengenerator/src/data/games.ts + spielideengenerator/src/data/blog-posts.ts:** bestehende Sommer-Queue aus `spielgenerator-data` wird nicht mehr nur advisory gemeldet, sondern kann direkt in den Produktivcode integriert werden.
  • **tasks/todo.md:** `S10` als erledigt markiert, Elbstream auf geparkt gesetzt und der optionale Folgepunkt fuer einen separaten GitHub-/Vercel-Deploy-Hook als `S11` ergaenzt.

verified

  • **Content-Import:** Dry-Run + Live-Import gegen die vorhandenen Sommer-Batches vorgesehen; Queue-Importer ist so gebaut, dass doppelte IDs/Slugs nur geskippt und nicht erneut geschrieben werden.
  • **Abgrenzung:** Git-Push/Vercel-Deploy werden bewusst NICHT automatisch ausgeloest, damit kein stiller Live-Deploy ohne explizite Freigabe passiert.
codexopenclaw

Elbstream News API vorbereitet

added

  • **thelonginvestor/scripts/lib/elbstream-client.mjs:** neuer Elbstream-Client fuer `/news`, `/news/most_discussed` und Logo-URLs inklusive Bearer-Auth-Handling und klarer Fehlermeldung auf `[E-Mail]`.
  • **thelonginvestor/scripts/elbstream-probe.mjs:** Probe-Script testet die frei erreichbaren Logo-Endpunkte sofort und prueft die News-Endpunkte automatisch, sobald `ELBSTREAM_API_KEY` vorhanden ist.

changed

  • **thelonginvestor/scripts/news-feeder.mjs:** nutzt jetzt Elbstream als primaere, ISIN-aware News-Quelle fuer Portfolio-Holdings und faellt nur fuer unversorgte Ticker auf Google News RSS plus NewsAPI zurueck.
  • **thelonginvestor/scripts/news-feeder.mjs:** dedupliziert neue `news_feed`-Eintraege jetzt per `ticker::url`, damit derselbe Artikel fuer mehrere relevante Holdings sauber parallel gespeichert werden kann.
  • **thelonginvestor/docs/api-keys.md, thelonginvestor/docs/data-sources.md, thelonginvestor/docs/PIPELINE.md, thelonginvestor/TODO.md, tasks/todo.md:** Elbstream-Key-Bedarf, Datenfluss, offener Live-Test und der abgeschlossene Vorbau dokumentiert.

verified

  • **Elbstream Docs / OpenAPI:** `https://elbstream.com/docs` und `https://api.elbstream.com/openapi.json` bestaetigen `POST /news`, `GET /news/most_discussed` und den API-Key-Hinweis via `[E-Mail]`.
  • **Logo-Endpoint:** `https://api.elbstream.com/logos/symbol/AAPL` bzw. `.../logos/isin/US0378331005` antworteten im Live-Test bereits erfolgreich; der echte News-Live-Test bleibt bis zum API-Key geblockt.
codexopenclaw

Carpark Opening-Curve neu balanciert

fix

  • **carpark-brain-attack/src/data/levels.js + spielideengenerator/public/carpark/src/data/levels.js:** die fruehen Carpark-Boards werden jetzt ueber eine Balance-Schicht neu geordnet und mit solver-verifizierten `par`-Korrekturen ausgeliefert, statt die historisch schiefen Legacy-Werte direkt weiterzureichen.

added

  • **carpark-brain-attack/src/data/levelBalance.js + spielideengenerator/public/carpark/src/data/levelBalance.js:** neue gemeinsame Balance-Helfer definieren die kuratierte Opening-Curve, die Legacy-`par`-Overrides und die berechnete Reihenfolge fuer das Level-Set.

changed

  • **carpark-brain-attack/src/game/levelMigration.js + spielideengenerator/public/carpark/src/game/levelMigration.js:** Migration auf Version 3 umgestellt; die Legacy-Map wird jetzt aus der neuen Reihenfolge berechnet, damit bestehender Progress auf die richtigen Boards zeigt.
  • **Carpark Difficulty Curve:** die ersten 20 Level laufen jetzt als klarer Auftakt `par 2` -> `par 3` -> `par 4` -> `par 5` mit bewusst horizontaleren/komplexeren Kandidaten in den ersten 3er-/4er-/5er-Bloecken.
  • **tasks/todo.md:** `CBA-1` als erledigt markiert und den Restbedarf fuer weitere 5+/6+-Boards als neuen Folgepunkt `CBA-2` aufgesplittet.
codexopenclaw

Windows Playwright Worker dokumentiert und gehaertet

fix

  • **thelonginvestor/scripts/x-post-playwright.mjs + thelonginvestor/scripts/download-pdf-playwright.mjs:** beide lokalen Browser-Scripts nutzen jetzt plain `playwright` statt undeclared `playwright-extra`/Stealth-Plugins, damit das Repo mit seinen tatsaechlich deklarierten Abhaengigkeiten konsistent bleibt.

added

  • **thelonginvestor/docs/local-playwright-worker.md:** neues Windows-Runbook fuer sichtbaren Browser, Persistent Profile, Telegram-Trigger, Env-Variablen und Smoke-Tests.

changed

  • **thelonginvestor/scripts/local-telegram-worker.mjs:** nutzt jetzt `LOCAL_NODE_BIN` bzw. `process.execPath` statt blind `node`, meldet Konfigurationsstatus in `/status` und blockt `/xpost` frueher, wenn `X_USER_DATA_DIR` fehlt.
  • **thelonginvestor/README.md, thelonginvestor/docs/setup-guide.md, thelonginvestor/docs/api-keys.md:** Worker-Doku und benoetigte lokalen Env-Flags verlinkt bzw. dokumentiert.
  • **tasks/todo.md:** `Windows Playwright Worker` als erledigt markiert.
codexopenclaw

Public-News Scoring verbreitert

fix

  • **thelonginvestor/scripts/public-news-to-queue.mjs:** Keyword-Matching arbeitet jetzt wortbasiert statt per rohem `includes()`, damit kurze Tokens wie `ai` oder `eu` nicht mehr versehentlich beliebige Headlines aufblasen und die Topic-Wahl verzerren.

changed

  • **thelonginvestor/scripts/public-news-to-queue.mjs:** Topic-Scoring nutzt jetzt Titelgewichtung, Feed-Kategorie-Boosts und einen Fallback fuer `business`-/`finance`-Feeds, damit mehr belastbare `public_news`-Kandidaten auch ausserhalb des bisherigen Guardian-Geopolitik-Bias durchkommen.
  • **thelonginvestor/scripts/public-news-to-queue.mjs:** Auswahl fuer `review` und `ready` wird jetzt pro Quelle/Thema diversifiziert, statt stumpf nur die obersten Scores zu nehmen.
  • **thelonginvestor/docs/tweet-keywords.json:** Keywords fuer `macro`, `finance`, `ai_tech` erweitert, neues Topic `markets` angelegt und Excludes um Live-/Editorial-Muster ergaenzt.
  • **tasks/todo.md:** `Public-News Ausbau` als erledigt markiert; der Fokus liegt jetzt wieder auf Scheduler-Horizont, Windows-Worker und den verbleibenden Produkt-Backlogs.
codexopenclaw

spielgenerator Release- und SEO-Status bereinigt

fix

  • **spielideengenerator/src/app/arbeitsblaetter/page.tsx + spielideengenerator/src/app/meine-spiele/page.tsx:** beide Routen sind jetzt Server-Wrapper mit eigener `metadata`, damit `/arbeitsblaetter` und `/meine-spiele` endlich Canonical, Description und OpenGraph-Daten ausliefern koennen.

added

  • **spielideengenerator/src/components/ArbeitsblaetterPageClient.tsx + spielideengenerator/src/components/MeineSpielePageClient.tsx:** ausgelagerte Client-Komponenten erhalten die bisherige UI-/State-Logik unveraendert, waehrend die Route-Dateien SEO-Metadata liefern.

changed

  • **tasks/todo.md:** `S2` bis `S5` fuer `spielideengenerator.com` auf den verifizierten Ist-Stand gezogen; neuer Folgepunkt `S10` macht explizit, dass der Weekly-Cron derzeit nur advisory ist und kein echter Auto-Push.
  • **Scheduled Releases:** Release-Mechanismus via `publishAt` + `getPublishedGames()` / `getPublishedBlogPosts()` + ISR gegen den Code geprueft. Stand 2026-03-18 liegen 58 zukuenftige Spiele und 36 zukuenftige Blog-Releases vor.
  • **arbeitsblaetter + basteln-kindergarten:** lokaler Content-Check bestaetigt 29 Arbeitsblaetter ueber 7 Kategorien sowie 75 Bastelspiele ohne akuten Vollstaendigkeits-Gap.
codexopenclaw

Pinterest Boards und Domain gehaertet

fix

  • **workspace/agents/sub_agents/content_agent/tools/pinterest.py:** Bildprompt-Branding von `spielideengenerator.de` auf `spielgenerator.de` korrigiert, damit neue automatisch erzeugte Pins auf die aktuelle Live-Domain verweisen.

changed

  • **workspace/agents/sub_agents/content_agent/tools/pinterest.py:** erlaubte Board-Namen explizit als `VALID_BOARD_NAMES` festgezogen; unbekannte Boards werden jetzt gewarnt statt still akzeptiert.
codexopenclaw

Pinterest PIN_WRITE Pipeline

added

  • **workspace/agents/division_runner.py:** neuer `PIN_WRITE`-Hook analog zu `SCHEDULE:`. Der Hook parst eine einzeilige JSON-Direktive aus dem Content-Output, erzeugt bei Bedarf einen spielgenerator-kompatiblen Slug und schreibt/updatet den Pin per Slug in `spielideengenerator/content/pinterest-pins.json`.

changed

  • **workspace/agents/sub_agents/content_agent/prompt.md:** fuer spielgenerator-Blog-Output ist jetzt eine exakte einzeilige `PIN_WRITE: {...}`-Directive Pflicht; `status`, `imageUrl` und `full_description` werden bewusst vom System ergänzt.
  • **Pinterest-Record-Handling:** vorhandene Lifecycle-Felder wie `status`, `imageUrl`, `postedAt` oder `postfastId` bleiben bei einem Slug-Update erhalten, damit der Hook keine manuell vorbereiteten Pins zerschiesst.
codexopenclaw

Morning Auto-Post Status verifiziert

changed

  • **tasks/todo.md:** veralteten Pruefpunkt zu `twitter:auto-post-morning` als erledigt markiert. `jobs.json` zeigt wieder `lastRunStatus: ok` bei `consecutiveErrors: 0`, und `workspace/memory/2026-03-18.md` enthaelt frische `[auto-post-morning] OK`-Spuren. Kein neuer Fix noetig, nur stale Todo bereinigt.
codexopenclaw

TLI Briefing T1/T2 gehaertet

fix

  • **thelonginvestor/scripts/send-briefing.mjs + .openclaw/tli-briefing/send-briefing.mjs:** TLI-Updates werden jetzt vor der Ausgabe sauber auf den neuesten Eintrag pro Ticker dedupliziert; TEST-/E2E-Eintraege und leere Ticker fallen raus.
  • **thelonginvestor/scripts/send-briefing.mjs + .openclaw/tli-briefing/send-briefing.mjs:** Preis-Tags fuer `market_snapshots` sind jetzt null-safe und formatieren USD, GBp und sonstige Waerungen robuster; Briefing-Header und `tli_briefing_log` nutzen dieselbe bereinigte Ticker-Menge.

changed

  • **[T1] Kommentar-Integration:** kurze `tli_entries.comment` bleiben inline, lange Kommentare werden weiterhin gekuerzt inline gezeigt und landen vollstaendig im Block `Detaillierte Kommentare`, jetzt aber konsistent pro neuestem Ticker-Eintrag.
  • **[T2] Ticker-Kurse:** Preis + 24h-Veraenderung fuer TLI-Updates bleiben aktiv, wurden fuer das aktuelle Dev-/Prod-Script statisch verifiziert und gegen String-/Null-Werte gehaertet.
codexopenclaw

Quality-Gates, Reflect-Log und TLI-Doku

fix

  • **workspace/agents/sub_agents/content_agent/tools/journalism.py:** Fact-Check blockiert jetzt ungueltige Spiel-IDs, unplausible Kleinkind-Alter bei komplexen Spielen und Lernziel-Mismatches als harte Issues.
  • **workspace/agents/sub_agents/content_agent/tools/quality_checklist.py:** Fact-Check-Blocker ziehen jetzt Score-Penalty, Blocking-Reasons und eine sofortige Ablehnung statt eines durchlaessigen Soft-Fails.
  • **thelonginvestor/scripts/lib/tweet-quality.mjs:** Gemeinsame Tweet-Validierung fuer Umlaute-Regel, URL-Block, en/em-dash, Cost-Basis-Guard und Hashtag-Limit eingefuehrt.
  • **thelonginvestor/scripts/postfast-dispatch.mjs, thelonginvestor/scripts/public-news-to-queue.mjs, thelonginvestor/scripts/evergreen-to-queue.mjs:** dieselben Tweet-Quality-Gates zentral angebunden; fehlerhafte Drafts gehen jetzt auf `review` oder werden vor Queue-Eintrag verworfen.

changed

  • **workspace/agents/standup.py:** schreibt Standups und Doug-Verbesserungsvorschlaege persistent nach `reflect_log.json`.
  • **workspace/skills/reflect/SKILL.md:** Reflect-Workflow laedt zuerst `${CLAUDE_PLUGIN_DATA}/reflect_log.json`, dann den Fallback unter `workspace/memory/`.
  • **thelonginvestor/README.md:** auf echten GitHub-Spinoff-/Doku-Einstieg umgebaut.
  • **Scheduler-Horizont bewusst offen gelassen:** `twitter:auto-post-morning` und `twitter:auto-post-evening` belegen die Zielslots 09:15 / bereits; eine zusaetzliche 10-20-Tage-Vorplanung wuerde aktuell Doppel-Posts riskieren.

added

  • **workspace/skills/twitter-manager/references/strategy.md:** aktuelle Positionierung, Queue-Quellen, Scheduling-Realitaet und Workflow fuer den Skill dokumentiert.
  • **workspace/skills/twitter-manager/references/postfast-api.md:** konkrete PostFast-API- und Script-Referenz fuer Account-Lookup, Create/List/Delete und Guardrails.
  • **thelonginvestor/docs/architecture.md:** Mermaid-Systemdiagramm und Datenfluss fuer das Morning-Briefing.
  • **thelonginvestor/docs/setup-guide.md:** Setup-Guide fuer Repo, Supabase, Secrets, Smoke-Tests und Cron-Layer.
  • **thelonginvestor/docs/api-keys.md:** benoetigte Keys/Tokens auf den aktuellen Script-Stand gebracht.
  • **thelonginvestor/docs/cron-jobs.md:** reale `~/.openclaw/cron/jobs.json` Briefing-/Bloomberg-Jobs mit Schedules und Abhaengigkeiten dokumentiert.
  • **thelonginvestor/docs/data-sources.md:** Datenquellen-Katalog fuer Market, Macro, News, SEC, Portfolio und Gmail.
  • **thelonginvestor/docs/repo-structure.md:** Zielstruktur fuer Repo, Docs, Scripts und SQL beschrieben.
  • **thelonginvestor/docs/deployment-example.md:** aktuelles Self-Hosting-Modell (Vercel + VPS) inkl. Docker-Einschraenkung dokumentiert.
codexopenclaw

codex

was geändert wurde

  • Geaendert: `.openclaw/workspace/tasks/todo.md`
  • Offene Punkte nach Prioritaet neu gebuendelt: Night Action, Twitter/X Pipeline, Skills, TLI, Produkt-Backlogs
  • Dubletten zusammengefuehrt: Supabase AVV, Queue-Konsolidierung, PostFast-Account-Check, generischer spielideengenerator-Status
  • Veraltete Sammelpunkte durch konkretere Ist-Stand-Aufgaben ersetzt (Night-Action Routing, fehlender Queue-Filler, aktuelle Cron-Timeouts)
  • Erledigte Themen in kurzes Archiv verschoben

wie es gemacht wurde

  • todo.md gegen relevante Changelogs, `cron/jobs.json`, `plans/night-plan-dry-run.md`, `agents/cron/nightaction-execute.sh` und bestehende Audit-Notizen abgeglichen.
  • Offenen Punkt `spielgenerator_agent Supabase-Keys pruefen` anhand der aktuellen `openclaw.json` als erledigt einsortiert.

update

  • Neu: `.openclaw/workspace/scripts/fill-tweet-queue.sh`
  • Schließt `NA-1`: fehlendes Night-Action-Wrapper-Script erstellt
  • Nutzt die aktuelle Refill-Logik ueber `public-news-to-queue.mjs` + `evergreen-to-queue.mjs`
  • Geaendert: `.openclaw/workspace/tasks/todo.md`
  • `NA-1` bis `NA-5` aktualisiert; Night-Action-Block komplett abgearbeitet
  • Geaendert: `.openclaw/workspace/plans/night-plan-dry-run.md`
  • `NA-1` bis `NA-5` als erledigt bzw. statisch verifiziert dokumentiert
  • Geaendert: `.openclaw/workspace/agents/cron/nightaction-execute.sh`
  • direkte Night-Action-Agent-Aufrufe auf gueltige `dispatch.py --agent ... "task"`-Kommandos umgestellt
  • fuehrt vor der Ausfuehrung jetzt automatisch `night-plan-dry-run.sh` aus
  • `jq`-Parsing fuer Prioritaeten/Labels repariert; manueller Safe-Plan-Test jetzt erfolgreich
  • Geaendert: `.openclaw/workspace/agents/cron/nightaction-plan.sh`
  • toleriert fehlende Legacy-Pfade wieder sauber
  • zaehlt Queue-Items aus `workspace/tweet-queue.json`
  • aktiviert Rush-Hour nur noch, wenn Bilder UND Extractor-Script vorhanden sind
  • Geaendert: `.openclaw/cron/jobs.json`
  • Night-Plan-Beispiel fuer `spielgenerator_agent` von direktem Agent-Start auf gueltigen `dispatch.py`-Aufruf umgestellt
  • Verifiziert: `.openclaw/workspace/agents/cron/sentiment/newsdata-fullscan.sh`
  • `NEWSDATA_API_KEY` wird korrekt aus `openclaw.json` gelesen
  • Bash-Syntaxcheck + Tracker-Datei OK
  • Neu: `.openclaw/workspace/scripts/night-plan-dry-run.sh`
  • validiert Night-Plan-JSON, Task-Metadaten, lokale Datei-Abhaengigkeiten und benoetigte Config-Keys
  • gegen `memory/nightplan-2026-03-18.json` erfolgreich getestet
  • Verifiziert: Night-Action End-to-End
  • `nightaction-plan.sh` erzeugt wieder einen validen Morgen-Plan
  • `nightaction-execute.sh` lief mit kontrolliertem Safe-Plan sauber durch (`Erfolgreich: 1, Fehlgeschlagen: 0`)
  • Neu: `.openclaw/workspace/archive/legacy-tweet-queues/2026-03-18/README.md`
  • dokumentiert die archivierten Originale der drei Legacy-Queues und des alten Schedulers
  • Geaendert: `.openclaw/tweet-queue.LEGACY.md`
  • listet jetzt alle ausgemusterten OpenClaw-Queue-Pfade und trennt sie explizit von der separaten Clawledge-Queue
  • Geaendert: `.openclaw/tweet-queue.json`
  • ehemaliger Root-Queue-Pfad ist jetzt ein Deprecation-Marker mit Verweis auf die kanonische Queue
  • Geaendert: `.openclaw/workspace/data/tweet-queue.json`
  • ehemaliger Nebenpfad als Deprecation-Marker eingefroren
  • Geaendert: `.openclaw/workspace/content/tweets/queue.json`
  • ehemaliger Legacy-Queue-Pfad als Deprecation-Marker eingefroren
  • Geaendert: `.openclaw/workspace/content/tweets/scripts/scheduler.mjs`
  • alter Scheduler bricht jetzt bewusst mit Hinweis auf die aktive Refill-/Dispatch-Kette ab
  • Geaendert: `.openclaw/workspace/tasks/todo.md`
  • `Queue-Konsolidierung` als erledigt markiert; naechster Pipeline-Punkt ist jetzt `Legacy-Items normalisieren`
  • Geaendert: `.openclaw/auffaelligkeiten_todos.md`
  • Hinweis auf doppelte Queue-Dateien durch Konsolidierungsstatus ersetzt
  • Geaendert: `.openclaw/workspace/tweet-queue.json`
  • 15 Legacy-Items ohne `source_tag` auf `internal` normalisiert
  • 5 Ragebait-Eintraege ohne Sprache anhand von `text`/`raw_text` auf `en` bzw. `de` gesetzt
  • Neu: `.openclaw/workspace/archive/legacy-tweet-queues/2026-03-18/workspace-tweet-queue.pre-legacy-normalization.json`
  • Sicherung der kanonischen Queue direkt vor der Feld-Normalisierung abgelegt
  • Geaendert: `.openclaw/workspace/tasks/todo.md`
  • `Legacy-Items normalisieren` als erledigt markiert; naechster Pipeline-Punkt ist jetzt `RSS Health-Check`
  • Neu: `thelonginvestor/scripts/public-news-feed-health.mjs`
  • nightly RSS-Health-Check mit Timeout-Handling, Statusdatei, Auto-Disable fuer problematische Feeds und Telegram-Report bei Statuswechseln/Fehlern
  • Geaendert: `thelonginvestor/scripts/public-news-to-queue.mjs`
  • liest jetzt `workspace/memory/public-news-feed-health.json` und ueberspringt deaktivierte Feeds beim Refill
  • schreibt Disabled-Feed-Kontext in `workspace/public-news.json`
  • Geaendert: `.openclaw/cron/jobs.json`
  • neuer Nightly-Job `twitter:public-news-healthcheck` um 01:30 Europe/Berlin angelegt
  • Geaendert: `.openclaw/workspace/tasks/todo.md`
  • `RSS Health-Check` als erledigt markiert; naechster Pipeline-Punkt ist jetzt `Quality-Gate Audit`

Incidents

OpenClaw Night Boundary Plan
~25 mincodex

Problem: Der neue 13-Agenten-Boundary-Plan war zwar beschrieben, konnte vom Night-Executor aber nicht als freier JSON-Plan ausgefuehrt werden

Ursache: `nightaction-execute.sh` und der Dry-Run kannten nur alte, hart verdrahtete Task-IDs; runner-definierte Tasks aus dem Plan wurden nicht operativ validiert oder ausgefuehrt

Fix: Executor auf plan-definierte Runner (`command`, `dispatch_direct`, `head_review_local`) erweitert, Dry-Run fuer diese Runner gehaertet und `nightplan-2026-03-19.json` als ausfuehrbaren Boundary-Plan angelegt

Carpark OG Verification
~10 mincodex

Problem: Ein bereits aufgenommener OG-Board-Stand (`OG_2_8`) enthielt noch eine uebersehene Ueberlappung

Ursache: Die manuelle Rekonstruktion war solver-plausibel, aber ohne expliziten Geometrie-Validator konnte ein Kollisionseintrag unbemerkt bleiben

Fix: Neuer Intake-Verifier meldete die Kollision sofort; linke gelbe Senkrechte in `OG_2_8` auf Laenge `2` korrigiert und den Beispiel-Batch synchronisiert

Carpark OG Intake Tooling
~35 mincodex

Problem: Die Foto-Rekonstruktion funktionierte gut, war aber noch zu manuell und dadurch fuer 13 Bilder zu langsam

Ursache: Es gab keinen standardisierten Batch-/Crop-/Verify-/Apply-Workflow fuer Originalfotos; jedes Bild musste ad hoc zerlegt und dann separat in JS-Dateien nachgezogen werden

Fix: Lokales CLI `scripts/og-intake.mjs` plus freier Crop-Helper `scripts/og-crop-helper.py` gebaut, Beispiel-Batch `PICTURES/intake/2.json` angelegt und den Apply-Pfad idempotent an die getrennte OG-Sammlung gekoppelt

Carpark OG Intake
~35 mincodex

Problem: Weitere Originalfotos mussten selektiv und getrennt vom aktiven Pool rekonstruiert werden, ohne unsichere Bretter versehentlich live zu schalten

Ursache: `2.jpg` enthaelt teils klare, teils mehrdeutige Bretter; ohne Solver-Abgleich waere die Aufnahme fehleranfaellig

Fix: 6 Boards aus `2.jpg` (`7`, `8`, `16`, `23`, `31`, `32`) solver-geprueft in `ogPhotoLevels.js` aufgenommen und die unsicheren Bretter `15`/`24` explizit als Flags dokumentiert

Carpark OG Intake
~35 mincodex

Problem: Kuenftige Foto-Level sollten getrennt vom aktiven Spielpool gesammelt werden, damit nur solver-saubere Originalbretter spaeter uebernommen werden

Ursache: Bisher gab es nur aktive Level-Dateien; kein separater Sammelplatz fuer Bild-Rekonstruktionen mit Flag-Status

Fix: `ogPhotoLevels.js` in Source + Mirror angelegt, Bild 1 teilweise rekonstruiert (`36`, `37`, `38`, `44`) und unsichere Bretter aus demselben Foto explizit als Flags dokumentiert

spielideengenerator Carpark Assets
~10 mincodex

Problem: `/carpark` zeigte nach dem Clean-Route-Fix nur nacktes HTML mit sichtbaren Overlays und ohne Spiellayout

Ursache: Rewrite auf `/carpark` liess relative Asset-Pfade aus `public/carpark/index.html` gegen die falsche Basis-URL aufloesen; CSS/JS wurden nicht geladen

Fix: `base href="/carpark/"` in `public/carpark/index.html` gesetzt und Script-Query fuer Cache-Bust erhoeht

Carpark Level Intake
~15 mincodex

Problem: Foto-Board aus dem Originalset war noch nicht im digitalen Pool enthalten

Ursache: Die bisherige Carpark-Datenbasis deckte das fotografierte Brett nicht als eigenstaendiges Level ab

Fix: Foto-Level als `Photo Level 141` rekonstruiert, in beide Hard-Level-Dateien aufgenommen und per Solver auf Loesbarkeit geprueft

spielideengenerator Carpark Route
~10 mincodex

Problem: Easter Egg war live, aber `/carpark` zeigte erst einen sichtbaren Redirect auf `/carpark/index.html`

Ursache: App-Router-Page hat serverseitig per `redirect()` auf die statische Datei umgeleitet

Fix: `next.config.mjs` um Rewrite fuer `/carpark` erweitert und die Redirect-Page entfernt, damit die URL sauber bleibt

Carpark Curriculum
~20 mincodex

Problem: Trotz neuer Opening-Curve gab es immer noch viel zu viele aehnliche `par 3`-/`par 4`-Boards im aktiven Spiel

Ursache: Der solver-sortierte Vollpool war als Gesamtbestand okay, als aktiver Lernpfad aber zu breit und repetitiv

Fix: Aktive Par-Kontingente eingefuehrt (`par 3 x5`, `par 4 x10`), Level-Order auf Version 5 gezogen und Legacy-Mapping fuer entfernte Boards auf gueltige Ziel-IDs begrenzt

Carpark Levels
~30 mincodex

Problem: Nach der neuen Opening-Curve blieb das Midgame/Lategame zu flach und hatte zu wenig echte 5+/6+-Boards

Ursache: Der erste Balance-Pass priorisierte den Einstieg; spaete Solver-Schwierigkeit blieb unterrepraesentiert

Fix: 8 solver-verifizierte Hard-Levels (`161`-`168`) angehaengt, Balance-Version auf 4 erhoeht und Mirror nach `spielideengenerator` synchronisiert

spielideengenerator Deploy
~25 mincodex

Problem: Automatischer Queue-Import endete lokal, ein spaeterer Auto-Deploy haette ohne Schutz auch fremde Repo-Aenderungen mitschieben koennen

Ursache: Es gab noch keinen getrennten Commit-/Push-Hook mit Branch- und Dirty-Repo-Guardrails

Fix: `content-deploy-hook.mjs` erstellt, `content-import.mjs` optional angebunden und auf `main` + Allowlist fuer `games.ts`/`blog-posts.ts` beschraenkt

Night Action Tweet Queue
~10 mincodex

Problem: Night-Action `tweet-queue-fill` scheiterte sofort, weil `scripts/fill-tweet-queue.sh` fehlte

Ursache: Night-Action-Code blieb auf altem Script-Namen stehen, waehrend die aktive Refill-Logik auf `public-news-to-queue.mjs` + `evergreen-to-queue.mjs` umgestellt wurde

Fix: Wrapper-Script `workspace/scripts/fill-tweet-queue.sh` angelegt, das die aktuelle Refill-Logik mit absolutem Node-Pfad aufruft; todo + Dry-Run-Doku aktualisiert

Night Action Agent Routing
~15 mincodex

Problem: Night-Action-Agenten nutzten veraltete direkte `agent.py`-Aufrufe und teils falsche `dispatch.py`-Syntax

Ursache: Routing-Doku und Shell-Ausfuehrung wurden nach der CLI-Umstellung auf positional Tasks nicht nachgezogen

Fix: `nightaction-execute.sh`, `cron/jobs.json` und Dry-Run-Doku auf gueltige `dispatch.py --agent ... "task"`-Aufrufe umgestellt

Night Action Dry-Run
~20 mincodex

Problem: Night-Action konnte defekte Plaene erst waehrend der Ausfuehrung entdecken

Ursache: Es gab nur manuelle Checklisten, aber keinen automatischen Preflight fuer Night-Plan-JSON, Dateien und Config-Keys

Fix: `workspace/scripts/night-plan-dry-run.sh` erstellt und in `nightaction-execute.sh` vorgeschaltet; validiert Plan-JSON, Task-Felder, lokale Abhaengigkeiten und Config-Keys vor dem Start

Night Action End-to-End
~20 mincodex

Problem: Night-Action blieb trotz voriger Fixes noch instabil: Plan-Generator starb am Legacy-Queue-Pfad, Executor am kaputten `jq`-Parsing; Rush-Hour wurde trotz fehlendem Extractor eingeplant

Ursache: `nightaction-plan.sh` nutzte `find` auf nicht mehr existierendem Queue-Pfad unter `set -euo pipefail`; `nightaction-execute.sh` hatte ueber-escapte `jq`-Strings; Rush-Hour-Pruefung beruecksichtigte das Extractor-Script nicht

Fix: Plan-Generator auf reale Queue-Datei umgestellt, Rush-Hour sauber gegated, `jq`-Parsing im Executor korrigiert; manueller Safe-Plan-Test erfolgreich (`Erfolgreich: 1, Fehlgeschlagen: 0`)

Queue-Konsolidierung
~20 mincodex

Problem: Mehrere OpenClaw-Tweet-Queues und ein alter Scheduler konnten weiter auf stale Dateien zeigen

Ursache: Historische Queue-Pfade blieben neben der aktiven `workspace/tweet-queue.json` liegen; der alte Scheduler existierte weiter als potentieller Seiteneinstieg

Fix: Legacy-Queues und Legacy-Scheduler nach `workspace/archive/legacy-tweet-queues/2026-03-18/` archiviert und die Originalpfade als Deprecation-Marker bzw. Abbruch-Script auf die kanonische Queue und die aktive Refill-/Dispatch-Kette umgestellt

Queue-Feld-Normalisierung
~10 mincodex

Problem: 15 aktive Queue-Items hatten noch kein `source_tag`, 5 Ragebait-Drafts keine Sprache

Ursache: Legacy-Drafts aus der Vor-SSOT-Phase wurden nie an das aktuelle Queue-Schema mit `language` und `source_tag` angepasst

Fix: Kanonische `workspace/tweet-queue.json` vorab gesichert und anschliessend alle fehlenden `source_tag` auf `internal` sowie fehlende Ragebait-Sprachen anhand von `text`/`raw_text` auf `en` bzw. `de` gesetzt

RSS Feed Health Check
~25 mincodex

Problem: Kaputte oder rate-limitierte Public-RSS-Feeds konnten den Refill weiter belasten, ohne automatisch stillgelegt oder gemeldet zu werden

Ursache: `public-news-to-queue.mjs` loggte HTTP-/Timeout-Probleme nur implizit beim Lauf; es gab keinen persistenten Feed-Health-State und keinen Nightly-Check

Fix: `public-news-feed-health.mjs` mit Statusdatei, Auto-Disable und Telegram-Report gebaut; `public-news-to-queue.mjs` ueberspringt deaktivierte Feeds; Nightly-Cron in `jobs.json` angelegt

Standup Reflect-Log
~10 mincodex

Problem: Standup-Historie und Doug-Vorschlaege gingen nach Compaction verloren

Ursache: Nacht-Standups wurden nur im Brain gespeichert, nicht in einem skill-tauglichen Session-Log

Fix: `standup.py` schreibt jetzt persistent nach `reflect_log.json`; `skills/reflect/SKILL.md` nutzt denselben Pfad als ersten Memory-Layer

Tweet Quality Gates
~15 mincodex

Problem: Tweet-Checks fuer Umlaute, URLs, Dashes, Cost-Basis und Hashtags waren ueber mehrere Scripts verteilt und dadurch uneinheitlich

Ursache: Validierungslogik war teils dupliziert, teils lueckenhaft und blockierte fehlerhafte Drafts nicht konsistent

Fix: Gemeinsamen Helper `scripts/lib/tweet-quality.mjs` eingefuehrt und in Dispatch + Queue-Feeder eingebunden; invalide Drafts gehen jetzt auf `review` oder werden verworfen

Content Agent Quality Gates
~20 mincodex

Problem: Blog-Quality-Gates liessen absichtlich kaputte Inhalte trotz Fact-Check durch

Ursache: Fact-Check pruefte semantische Fehler nur oberflaechlich, Quality-Checklist behandelte Blocker nicht als harte Ablehnung

Fix: `journalism.py` um Alters-/Lernziel-Plausibilitaet erweitert und `quality_checklist.py` auf harte Penalty + Reject-Logik umgestellt; Negativtest blockt jetzt sauber

TLI Briefing Updates
~15 mincodex

Problem: TLI-Update-Block zaehlte rohe Tageseintraege, konnte alte Duplikate pro Ticker ziehen und war bei Preisfeldern/null-Werten fragil

Ursache: `send-briefing.mjs` deduplizierte erst spaet und formatierte Preise direkt aus `market_snapshots` ohne robuste Null-/String-Fallbacks

Fix: Neueste `tli_entries` pro Ticker vorab bereinigt, TEST-/E2E-Eintraege gefiltert, Preis-Tag null-safe gemacht und Briefing-Log auf dieselbe bereinigte Liste umgestellt

spielideengenerator SEO
~15 mincodex

Problem: `/arbeitsblaetter` und `/meine-spiele` lieferten keine seitenbezogenen Metadata aus

Ursache: Beide Routen waren als Client-Pages gebaut, daher konnten keine `metadata`-Exports fuer Canonical/OpenGraph/Description gesetzt werden

Fix: Route-Dateien in Server-Wrapper mit `metadata` aufgeteilt und die bisherige Client-Logik nach `src/components/*PageClient.tsx` ausgelagert

Public-News Scoring
~20 mincodex

Problem: Public-RSS-Drafts waren zu schmal und topic-verzerrt, weil Keyword-Matching per Substring lief und die Auswahl kaum nach Quelle/Thema streute

Ursache: Kurze Tokens wie `ai`/`eu` konnten false positives erzeugen; Business-/Finance-Feeds bekamen ohne exakte Treffer kaum Score; Top-N-Auswahl kippte dadurch schnell in monotone Guardian-Geopolitik

Fix: `public-news-to-queue.mjs` auf wortbasiertes Matching, Titelgewichtung, Kategorie-Boosts, Business-/Finance-Fallbacks und diversifizierte Auswahl umgestellt; `tweet-keywords.json` fuer Markets/Macro/Finance erweitert

Local Playwright Worker
~15 mincodex

Problem: Lokale X-/Patreon-Worker hingen an undeclared `playwright-extra`-Paketen und hatten kein sauberes Windows-Runbook

Ursache: Scripts wurden gegen Stealth-Wrapper gebaut, aber das Repo deklariert nur plain `playwright`; dazu fehlten Betriebsdoku und robustere lokale Node-/Status-Checks

Fix: Worker-Scripts auf `playwright` umgestellt, `local-telegram-worker.mjs` fuer `LOCAL_NODE_BIN`/`process.execPath` und Status-Checks gehaertet, Windows-Runbook `docs/local-playwright-worker.md` plus Doku-Links ergaenzt

Carpark Opening Curve
~20 mincodex

Problem: Fruehe Carpark-Level hatten schiefe `par`-Werte und die Progression fuehlte sich trotz frueherer Tausch-Edits noch unstet an

Ursache: Rohdaten blieben in einer historischen Reihenfolge mit falschen Legacy-`par`-Annotations fuer mehrere Boards; Source-Repo und spielideengenerator-Spiegel mussten beim Reordering synchron bleiben

Fix: Balance-Schicht `levelBalance.js` fuer Source + Mirror eingefuehrt, solver-verifizierte `par`-Korrekturen hinterlegt, Opening-Curve auf `par 2`/`3`/`4`/`5` fuer die ersten 20 Boards kuratiert und `levelMigration.js` auf Version 3 mit berechneter Legacy-Map umgestellt

Gym Tracker Mobile UI
~25 mincodex

Problem: Gewicht-/Cardio-Stepper brachen auf kleinen Screens uneinheitlich um; schnelle Taps konnten parallele Saves ausloesen; Undo-Hinweis konnte durch alte Timer verschwinden

Ursache: Formularreihen nutzten wrap-lastige Flex-Layouts ohne mobile Gruppierung; Stepper hatten keinen Row-Lock waehrend async Saves; die Undo-Message legte bei jeder Loeschung einen neuen Timer an ohne alten Cleanup

Fix: Mobile Controls in `src/app/page.tsx` auf Grid/Flex-Gruppen umgestellt, Stepper pro Zeile waehrend des Supabase-Saves gelockt und Undo-Timeout per Ref + Cleanup gehaertet, ohne den Speicherpfad zu aendern

Gym Tracker Session Creation
~15 mincodex

Problem: Neue Sessions konnten als leere `gt_sessions`-Eintraege in Supabase stehen bleiben, wenn das Kopieren der Exercises scheiterte

Ursache: `createNewSession()` legte die Session vor dem Exercise-Seed an, hatte aber keinen Rollback-Pfad fuer Teilfehler zwischen Session-Insert und Exercise-Insert

Fix: `createNewSession()` verfolgt jetzt die frisch angelegte Session-ID und loescht sie wieder, solange das Exercise-Seed nicht erfolgreich abgeschlossen wurde; Rollback-Fehler werden separat gemeldet

Stocktracker API Guard
~20 mincodex

Problem: Oeffentliche Yahoo/RapidAPI-Proxies konnten ohne jede Bremse direkt von aussen angesprochen werden

Ursache: Vercel-Functions hatten `Access-Control-Allow-Origin: *`, keinerlei Request-Guard und kein Rate-Limit vor den bezahlten API-Calls

Fix: Gemeinsamen Guard `api/_lib/requestGuard.ts` eingefuehrt und auf Quote/Search/Company/Fundamentals/Historical/EU-Quote gelegt; enge Browser-Origin-Pruefung, `nosniff` und in-memory Rate-Limits pro Route/IP bremsen Fremdnutzung deutlich

Stocktracker EU Quote Reliability
~25 mincodex

Problem: EU-Market-Karte konnte spekulative deutsche Listings oder stille Fehler als normales `Not available` behandeln

Ursache: `api/euquote.ts` probierte zu viele heuristische Ticker-Varianten; `stockApi.getEuQuote()` schluckte alle Fehler und `PriceCard` hatte keinen sichtbaren Fehlerzustand

Fix: EU-Quote auf kuratierte Mapping-Kandidaten plus strengere Company-Name-Suche reduziert, Reverse-Mapping fuer EU->US im Frontend eingefuehrt und Preis-Karten um sichtbare Fehlermeldungen fuer API-/Rate-/Config-Fehler erweitert

OpenClaw Gateway / Tyrone
~25 mincodex

Problem: Tyrone hing und antwortete nicht mehr, weil der Gateway-Service nach Start sofort wieder abstuerzte

Ursache: OpenClaw v2026.3.7 validiert Telegram mit `channels.telegram.defaultTo`; die lokale Config nutzte noch den Alt-Key `channels.telegram.chatId`, wodurch `openclaw-gateway.service` in einen Restart-Loop fiel

Fix: `openclaw.json` von `chatId` auf `defaultTo` migriert, betroffene TLI-Scripts auf `defaultTo ?? chatId` kompatibel gemacht, `restart-tyrone` ausgefuehrt und stabilen Lauf per `systemctl`/`journalctl` verifiziert

OpenClaw Gateway / Tyrone
~10 mincodex

Problem: Tyrone wirkte erneut haengend, obwohl der Gateway-Prozess noch lief

Ursache: Die aktive Main-Session `a4ecb2d1-...` hing nach einem Bild-/Screenshot-Input mit offenem `.jsonl.lock` seit 18: fest; dadurch kamen keine weiteren Antworten raus, obwohl `openclaw-gateway.service` weiterlief

Fix: Haengende Session ueber Neustart des Gateways abgeraumt; Lockfile verschwand danach, Telegram-Provider/Gmail-Watcher starteten sauber neu

Night Action / Cron
~55 mincodex

Problem: Night-Plan lief ueber alte Prompt-Jobs, schrieb teils auf das falsche Datum, hing in Head-Reviews und meldete manche Timeouts trotzdem als Erfolg; zusaetzlich hat der Maintenance-Update-Check Tyrone per Self-Update aus dem Gateway geschossen

Ursache: `nightaction:plan`/`nightaction:execute` waren noch lange LLM-Prompts statt direkter Scripts; `nightaction-plan.sh` schrieb fuer den naechsten statt den aktuellen Tag; es gab keine harten Task-Timeouts; `dispatch.py` verschluckte Sub-Agent-Exceptions mit Exit 0; der Update-Check-Cron versuchte `--auto-update` innerhalb des laufenden Gateways

Fix: Night-Crons auf direkte Script-Aufrufe umgestellt, Plan-Generator auf Full-Coverage fuer den aktuellen Tag gehoben, Executor mit Dry-Run + Timeouts + Soft-Fail-Erkennung gehaertet, `dispatch.py` auf non-zero bei Sub-Agent-Timeouts gestellt, Update-Check im Cron auf report-only reduziert und Tyrone neu gestartet

Night Action / Content Delivery
~40 mincodex

Problem: Nach der ersten Haertung blieben drei Resthaenger: `portfolio-news` leakte einen Telegram-Fehler in den Task-Output, `ragebait-fill` hing am Remote-Provider und Head-Reviews liefen ueber langsame Provider-Loops

Ursache: `newsdata-fullscan.sh` nutzte Telegram nur per Env/ungepuffertem Curl und produzierte bei Fehlversand JSON auf stdout; `NA-010` dispatchte weiter an `content_agent`; `NA-HEAD-*` nutzten weiter `division_runner` statt lokaler Run-Zusammenfassung

Fix: NewsData-Scan auf Config-Fallback + Plaintext-Truncation + stilles Logging gestellt, lokales `fill-ragebait-repository.py` eingefuehrt (live 82 → 90 `ready`), lokales `night-head-review.py` eingebaut und `nightaction-execute.sh` so angepasst, dass Head-Reviews zuletzt laufen; User-Gateway live geprueft (`systemctl --user is-active` = `active`)

OpenClaw Gateway / Night Delivery
~20 mincodex

Problem: Gruppen-Nachrichten waeren unter Telegram weiter still gedroppt worden und direkte Subagent-Completion-Announces liefen noch auf dem harten 60s-Timeout

Ursache: `groupPolicy` stand auf `allowlist`, aber `groupAllowFrom` war leer; zugleich nutzte OpenClaw fuer direkte Completion-Announces den Default `announceTimeoutMs = 60000`

Fix: `groupAllowFrom` auf Dominiks Telegram-ID gesetzt, `agents.defaults.subagents.announceTimeoutMs` auf `120000` gehoben, Gateway neu gestartet und User-Journal auf fehlende Wiederholung der alten Warnungen geprueft

Persönliches Build-Journal. Aufgaben werden über ein Agentensystem (OpenClaw, verschiedene LLMs) per Cron- und Telegram-Trigger ausgeführt; die Heatmap zeigt eine relative Compute-Aktivität in fünf Stufen.