# 2026-02-07 (Saturday) ## Cron Bug Fix 🐛 - **Root cause**: `recomputeNextRuns()` in `/app/src/cron/service/store.ts` (line ~409 in ensureLoaded) recomputes `nextRunAtMs` for ALL jobs before `runDueJobs()` runs. For recurring schedules (cron/every), `computeNextRunAtMs()` always returns the NEXT occurrence after `now`, advancing the schedule past the current time. `runDueJobs()` then finds no due jobs. - One-shot `at` jobs were unaffected because `computeJobNextRunAtMs` returns the original timestamp for them. - **Fix**: Patched `/app/dist/gateway-cli-D6nsc3s0.js` — in `recomputeNextRuns`, added check to skip recomputing if `nextRunAtMs <= now` (job is due, let it execute first). - **Impact**: All 8 news cron jobs (Der Standard + AI News × 4 times/day) had NEVER fired since creation on Feb 6. - Hard-killed gateway (PID 2) to force container restart and load patched JS bundle. - Verified: recurring `every` job fired correctly after patch. Real news jobs scheduled for 14:00 Vienna. - **TODO**: File upstream bug report on OpenClaw GitHub (issue in `recomputeNextRuns` race condition). ## GPD Win 4 Optimization - User working on improving performance/watt on GPD Win 4 2025 (HX 370, Bazzite 43, FSR 4 enabled) - Discussed: TDP tuning (15-20W sweet spot), core parking via PowerTools Decky plugin, resolution/FSR upscaling, fan curves, frame limiting - Core parking: disable SMT, reduce threads to 4 for GPU-bound games - BIOS: UMA frame buffer option not available on HX 370 model (others report same) - Recommended removing ReShade since FSR 4 handles upscaling - ProtonGE: update every 2-4 weeks or when a game has issues ## Android → Snapcast Streaming (Reference) - No native AirPlay-like solution for Android → Snapcast - **Best option:** DLNA/UPnP — gmrender-resurrect piped into Snapcast server + BubbleUPnP app on phone - **Alternatives:** Bluetooth A2DP sink (range limited), TCP source (no good Android app yet), AirPlay via Android app (hacky) - User interested but not urgent — revisit when asked ## Cron Bug — Already Fixed Upstream - Bug fixed in OpenClaw **2026.2.6** (we're on 2026.2.4) - Changelog: "prevent recomputeNextRuns from skipping due jobs when timer fires late by reordering onTimer flow" - PR #10776 by @tyler6204 - User wants to update OpenClaw (asked, not done yet) ## Cron Jobs Consolidated - 8 news jobs → 2 jobs using multi-time cron expressions: `0 10,14,18,22 * * *` - Der Standard: job ID `917a96d5-14e7-4057-96e5-d83f2729ed9b` - AI News: job ID `a8991f6b-a31a-4997-bc92-b286573241d4` - Both confirmed working after fix (14:00 Vienna delivery successful) ## Tasks CLI (`bin/tasks`) - Renamed from `brain-dump` to `tasks` - Data file: `memory/tasks.json` (was `memory/brain-dump.json`) - Commands: list, add, edit, done, show, nudged, recurring - Supports both regular tasks and recurring items - `--due` flag with nudge intervals: now=1d, soon=3d, someday=7d - Merged `--note` and `--context` into single `--context` field - Design decision: tasks tool is for actionable items ONLY, not knowledge storage. Reference info goes in memory files where `memory_search` finds it. ## Audiobookshelf Integration - Built `bin/audiobooks` CLI tool - URL: https://audiobooks.cloonar.com - Credentials stored in `.credentials/audiobookshelf.env` - Commands: current, recent, finished, stats, libraries - Currently listening: "Die zweite Legion" (Askir Band 2) by Richard Schwartz — 44% done, 8h 46m remaining - Purpose: wind-down suggestions ("pick up your audiobook") ## Infuse + Jellyfin - User uses Infuse app on Apple TV with Jellyfin server - Asked about syncing watch state from Infuse → Jellyfin - Infuse has native Jellyfin integration that auto-syncs watch state - InfuseSync plugin also available (github.com/firecore/InfuseSync) - Need to confirm: is user using Jellyfin connection or direct file share? - Task added: `47eaa129` — look into Jellyfin playing stats with Intune app on iOS ## Improvement Ideas Discussed - Better wind-down: concrete suggestions using audiobook/TV data instead of vague nagging - Proactive calendar prep: weather, travel time, context from previous visits - Email triage: decided not worth it (user still uses mail client) - Workout: not needed (has working app already) - Decided: keep wind-down in main session (not separate agent) for better context ## Calendar - Marie besuchen 13:00-17:00 (reminder sent at 11:30 Vienna)