{"slug": "i-was-filming-a-demo-of-my-monitoring-tool-the-monitor-wasn-t-monitoring", "title": "I Was Filming a Demo of My Monitoring Tool. The Monitor Wasn't Monitoring.", "summary": "A developer discovered that their Sentry monitoring integration for a Cloudflare Worker fleet was silently failing. Despite deploying Sentry.withMonitor() without errors, the cron monitor never registered because the schedule configuration was missing. The bug was found only when filming a demo video, not through testing.", "body_md": "*This is a submission for DEV's Summer Bug Smash: Smash Stories powered by Sentry.*\n\n`workers-monitor`\n\nis a Cloudflare Worker I run to watch a small fleet of\n\nmy own Workers. Hourly cron, deterministic threshold gate, Claude Haiku\n\njudgement only if the gate trips, Telegram alert if Haiku confirms\n\nsomething's actually wrong. A quiet hour makes zero LLM calls.\n\n[github.com/dannwaneri/workers-monitor](https://github.com/dannwaneri/workers-monitor)\n\nIt pages me on Telegram when something's wrong with the fleet it\n\nwatches. What it didn't have, until recently, was an equivalent safety\n\nnet for itself — if `workers-monitor`\n\nbroke, nobody got told. So I added\n\nSentry: automatic error capture, and `Sentry.withMonitor()`\n\naround the\n\nhourly run so a dead cron trigger would be caught immediately instead of\n\nsilently waiting up to 24 hours for the next daily heartbeat to go quiet.\n\nI deployed it. A cron tick ran clean. I moved on, fairly pleased with\n\nmyself.\n\nA few days later I sat down to record a demo video of the Sentry\n\nintegration — screen capture, narration, the whole thing, for a separate\n\npart of this challenge. Simple plan: open the Sentry dashboard, show the\n\ncaptured errors, show the cron monitor's check-in, done.\n\nI opened the Monitors page to get the screenshot.\n\nThere was nothing there. Just Sentry's own auto-created generic \"Error\n\nMonitor\" — no `workers-monitor-hourly-poll`\n\n, no Cron-type entry\n\nwhatsoever, despite the code having run successfully, every hour, for\n\ndays. I'd been carrying around a completely false belief: that deploying\n\n`Sentry.withMonitor()`\n\nand watching it execute without error meant it was\n\nmonitoring. It wasn't. It never had been.\n\n``` js\nSentry.withMonitor(\"workers-monitor-hourly-poll\", () => run(event, env))\n```\n\nNothing about this throws. It compiles. It deploys. The wrapped function\n\nruns exactly as intended, every hour, on schedule. And it still wasn't\n\ndoing the one thing it existed to do.\n\nBy accident, honestly. Not through review, not through testing — I found\n\nit because I was trying to film proof that something worked, and the\n\nproof wasn't there. If I hadn't been making a video, I might not have\n\nlooked at that specific dashboard page for weeks.\n\n`withMonitor`\n\n's check-in has nowhere to attach without a schedule —\n\nSentry needs to know what \"on time\" even means for this monitor before it\n\nwill create a Cron Monitor entity to check in against. Without that\n\nconfig, the call silently has no monitor to report to.\n\n``` js\nSentry.withMonitor(\n  \"workers-monitor-hourly-poll\",\n  () => run(event, env),\n  {\n    schedule: { type: \"crontab\", value: \"0 * * * *\" }, // matches the real cron trigger\n    checkinMargin: 5,\n    maxRuntime: 5,\n    timezone: \"UTC\",\n  },\n)\n```\n\nOne config object. I deployed it, then made myself actually wait for a\n\nreal hourly tick — not a local test, the genuine production cron —\n\nbefore I let myself believe it was fixed. `workers-monitor-hourly-poll`\n\nshowed up as a real Cron monitor afterward, \"Every hour\" schedule and\n\nall.\n\nBecause it's the same lie twice, if I'm honest about it. I built a\n\nmonitoring tool because I don't trust systems to tell me the truth about\n\ntheir own state unprompted. Then I shipped a piece of that exact tool\n\nwithout applying the same skepticism to itself. \"It ran without throwing\"\n\nis not evidence of \"it's doing its job\" — I know that, I'd have said it\n\nconfidently to anyone who asked — and I still fell for the gap between\n\nthose two claims on my own code, in the one project whose entire purpose\n\nis not falling for that gap.\n\nReal Sentry dashboard, the actual moment the cron monitor showed up after the fix not a re-enactment.\n\nTreat \"I deployed it and it didn't error\" as a hypothesis, not a\n\nconclusion — for every feature, not just the ones I already suspect are\n\nfragile. The KV read bug I fixed earlier in this project (a separate\n\nentry, if you're comparing notes) came from a structured spec review.\n\nThis one came from dumb luck — I happened to need a screenshot. I'd\n\nrather it come from the habit than the accident next time.\n\n[github.com/dannwaneri/workers-monitor/pull/3](https://github.com/dannwaneri/workers-monitor/pull/3)\n\nOne file changed, 14 insertions, 1 deletion — the isolated fix, nothing\n\nelse riding along with it.", "url": "https://wpnews.pro/news/i-was-filming-a-demo-of-my-monitoring-tool-the-monitor-wasn-t-monitoring", "canonical_source": "https://dev.to/dannwaneri/i-was-filming-a-demo-of-my-monitoring-tool-the-monitor-wasnt-monitoring-1p7d", "published_at": "2026-07-27 08:40:19+00:00", "updated_at": "2026-07-27 09:06:54.241744+00:00", "lang": "en", "topics": ["developer-tools"], "entities": ["Sentry", "Cloudflare", "workers-monitor", "Claude Haiku", "Telegram"], "alternates": {"html": "https://wpnews.pro/news/i-was-filming-a-demo-of-my-monitoring-tool-the-monitor-wasn-t-monitoring", "markdown": "https://wpnews.pro/news/i-was-filming-a-demo-of-my-monitoring-tool-the-monitor-wasn-t-monitoring.md", "text": "https://wpnews.pro/news/i-was-filming-a-demo-of-my-monitoring-tool-the-monitor-wasn-t-monitoring.txt", "jsonld": "https://wpnews.pro/news/i-was-filming-a-demo-of-my-monitoring-tool-the-monitor-wasn-t-monitoring.jsonld"}}