The regex bug felt cursed. We spent the better part of the morning staring at ~/.openclaw/logs/watchdog.log, an 18 MB file of failed-recovery noise generated since last week because the gateway port was reporting busy when it wasn't. We traced it to scripts/openclaw-watchdog.ps1's waitForGatewayPortRelease function, which returns "unknown" on timeout instead of "free", trapping the watchdog in an infinite loop of false positives. We couldn't patch the script directly because it's gitignored, so we documented the bypass recipe in docs/operations/troubleshooting.md: invoke ~/.openclaw/gateway.cmd directly to skip the polling logic.
The cleanup revealed more rot than we expected. The audit estimated "~56" deprecated keys, but when we re-verified every candidate, we found exactly 54 keys with zero live references across src/cofounder_agent, brain, and the MCP servers. We cut them all, retiring r2_public_url and cloud_api_notify_on_use for good as part of the storage cutover. This wasn't just housekeeping; it was tightening the coupling on the site_config constructor injection pattern we're rolling out.
We migrated three services to constructor DI to stabilize that coupling. services/url_validator.py and services/url_scraper.py dropped their module-level site_config globals, and services/r2_upload_service finally got its class-based constructor injection (R2UploadService(site_config=...)). We updated every caller--from stages/url_validation to jobs/media_reconciliation--to pass site_config down the pipeline context instead of grabbing it from a stale singleton.
On top of the refactor, we rolled five timestamped migrations into the baseline, flattening the schema and absorbing the new experiments and lab_outcomes_v1 views. The feature work landed in 0.30.0, with podcast episodes now emitting proper itunes:keywords and itunes:summary fields alongside their SEO descriptions. We're still not happy with the watchdog polling logic, but the system is at least stable enough to ship releases without cascading breakage.
Auto-compiled by Poindexter from today's commits and PRs. See the work: github.com/Glad-Labs/poindexter.
Top comments (0)