Auto-reply typing-stop race fixed, cron inputs normalized across channels

First workday of the year after the four-day opening burst, and the focus shifted from feature push to correctness. The rename chaos from January 4 was quieting; the bugs that remained were the subtler ones, the kind that only show up when you watch the daemon for more than a few minutes at a time. Today’s work was 160 commits of correctness, with two of them (#270 and #256) carrying the real weight.
Signal
PR #270 lands a typing-stop race fix in auto-reply, which is the class of bug that surfaces only under latency PR #256 normalizes cron.add inputs and aligns channels, a schema hygiene move that pays forward every new integration 160 commits, +17,586 / -5,249 net, and the skill registry grows a model-usage entry
Evidence
openclaw (160 commits, +17,586 / -5,249): typing-stop race (#270), cron inputs normalized (#256), cron HEARTBEAT_OK skip (#238) Community: contributors added, @kitze credited for #241, #226 credit noted, a2ui bundle hash cleanup Docs: Linux browser troubleshooting guide, bun install support, group chat guidance, hubs index, clawdibuted naming Skills: model-usage skill added to the registry, anyOf/oneOf config-form UI support (#268)
The typing-stop race in auto-reply is the canonical concurrency bug in a messaging daemon. The flow: user sends a message, daemon shows “typing…”, generates a reply, then should clear the typing indicator before the reply lands. Under normal latency the sequencing works. Under network stall, the typing-stop and the reply race, and the indicator sometimes sticks forever on the user’s screen. #270 fixes the sequencing with an explicit ordering guard. This is the kind of bug that was never going to show up on my laptop and was already showing up in user reports from slower networks.
#256 is the schema-hygiene move I wish I’d made before adding a third channel. cron.add takes a cron expression, a channel name, and a payload. Three of those were subtly shaped differently across the WhatsApp, Discord, and Telegram integrations: channel name case, payload nesting depth, timezone handling. #256 normalizes all three at the ingress layer so every downstream consumer gets the same shape. It’s the unglamorous kind of fix that stops being visible after a week because it stops producing bug reports.
+17,586 / -5,249 is a 3
additions-to-deletions ratio, which is the shape of a day that’s still adding more than it’s cleaning. The docs wave (Linux browser troubleshooting, bun install support, group chat guidance) is a sign the user surface is outgrowing the maintainer surface. Once you have more users than maintainers, every unwritten doc becomes a support ticket.So What
Typing-stop races are the kind of concurrency bug you can only ship into, not test into. Catching it in week one matters Normalizing cron inputs across channels before the integration list grows is pure Karpathy-ratchet: fix the abstraction while it’s cheap
The model-usage skill is the quiet debut that’s going to matter. Adding it to the registry means future sessions can query which model variant got used for which task, which is the first half of any cost or quality audit. Today it’s a stub in a list. By the end of January I’d want to see it populated with real traces, and pairing with the coding-agent skill’s reasoning-effort selector from January 2 so both decisions are captured in the same telemetry.
anyOf/oneOf config-form UI support (#268) is the week’s other small-but-structural fix. When a provider offers “either an API key or an OAuth flow,” the config UI has to represent that choice cleanly. Prior to #268 it was a text field with an inline hint; after, it’s a radio-style toggle that makes the exclusive-or explicit.
What’s Next
The model-usage skill is new. Does it flow into the agent workspace guide yet, or is it still orphan documentation waiting for a wiki link? If orphan, the next step is wiring it into the workspace guide so new users discover it on the same path they discover the rest of the skill registry.
Log
- Sessions: 0 (bloomnet.db lag, evidence from live git)
- Top repos: openclaw (160)
- Commits: 160 across 1 repo (+17,586 / -5,249)
- Notable: typing-stop race fix, cron normalize, model-usage skill, anyOf UI
- Cost: not tracked (pre-bloomnet-ingest window)