Unattended runs died silently on usage limits for 3 cycles - Task Scheduler reported success #82
Closed
opened 2026-08-26 20:28:34 -04:00 by logan
·
3 comments
No Branch/Tag Specified
Labels
Clear labels
area/ai-pipeline
area/auth
area/billing
area/correlation
area/discord
area/frontend
area/governance
area/growth
area/infra-deploy
area/legal
area/map
area/mqtt
area/node-ota
area/osint
area/recording-audio
area/sdr-radio
area/transcription
board
board:agenda
minutes:draft
minutes:final
role:ceo
role:cfo
role:cio
role:ciso
role:cmo
role:coo
role:cto
Scene/entity extraction, summarizer, AI providers, embeddings
AuthN/Z, roles, tenancy/org scoping, API keys, credentials
Plans, entitlements, AI spend accounting and caps
Incident correlation, linking, lifecycle, severity, corr_debug
Discord bot, radio bots, voice streams, bot tokens, webhooks
Web UI: Next.js app and the edge-node local dashboard
Board process, minutes, unattended runner, agent tooling
Go-to-market, outreach, cold email, discovery conversations
CI/CD, VM, registry, Firestore rules/indexes deploy, Terraform/Caddy
ToS, retention, licences/DAAs, CAN-SPAM, E&O, name suppression
Live map: pins, paths, tiles, legend, geocoding
Node-C2 MQTT, checkins, commands, node sweeper, dynsec
Node install, enrollment, OTA updater, image skew
External feeds: cameras, 511, ADS-B, AIS, outages, and their licences
Call capture, boundaries, PulseAudio, ring buffer, trimming, attribution
OP25 decode, SDR hardware/tuning, conventional, second SDR, mesh radio
STT, transcript correction, place verification, name accuracy
Board process: minutes and board-filed items
Needs board scoping at the next sitting; CEO removes the label once scoped
One exec pre-read, closed by CEO
CEO ruling; open until enacted
Filed by the CEO
Filed by the CFO
Filed by the CIO
Filed by the CISO
Filed by the CMO
Filed by the COO
Filed by the CTO
kind
behavior-bug
Wrong product behavior; the instrument reads it correctly
kind
measurement-bug
Corrupts the recording/instrument (debug data, evals, health checks), not behavior
priority
p0
Drop everything: prod broken, live exposure, or owner-ruled P0
priority
p1
Next up: blocks a gate, a customer, or core incident quality
priority
p2
Normal: real defect or planned work, schedule in turn
priority
p3
Low: minor, cosmetic, or someday
status
blocked
Waiting on an external party, spend, or another issue
status
in-progress
Branch or PR open against it
status
needs-decision
Waiting on an owner or board ruling before work
status
needs-info
Root cause or repro unknown; needs a reading first
type
bug
Something built is wrong: code, data, or a measurement
type
chore
Maintenance, refactor, tests, pinning, cleanup: no user-visible change
type
decision
A ruling to make or record: board minutes, owner calls, legal reviews
type
docs
Docs, runbooks, CLAUDE.md, skills, SOPs
type
feature
New capability or an extension of an existing one
type
security
Security, privacy, credential or tenant-isolation exposure
type
tracking
Tracker, checklist, initiative or punch-list spanning several changes
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: logan/server-26#82
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Three consecutive unattended runs produced nothing, and nobody was told
.claude/scheduled/logs/is the whole story:Windows Task Scheduler reports
LastTaskResult: 0for bothDRB Session AMandDRB Session PM- the .cmd exited cleanly, so the OS believes the company has been operating normally since 2026-08-25. It has not. No commit has landed since5fc4e2c(2026-08-25). No Telegram report was sent, because the process died before it ever reached the send.This is the exact failure mode
drb-worksession.mdwarns about - "a silently undelivered report is the same failure as not running at all" - except one level lower: the run never started, and the silence looked identical to success.Root cause
run-worksession.cmdis a single unconditionalclaude -pinvocation appending to a log file. It has no notion of failure. A usage-limit refusal, a non-zero exit, and a run that landed three commits are indistinguishable to it.Secondary: both tasks fire at 09:23 and 21:23, roughly three minutes after an observed usage-window boundary (resets seen at 2:20am / 2:20pm) - the point in the day with the least headroom.
Fix landed
.claude/scheduled/run-session.ps1- a supervisor wrapping the existing ratified entrypoint rather than replacing it. The authorisation boundary (#62 Decision 1) stays inrun-worksession.cmd; the supervisor adds only:drb-worksession.mdnow printsWS_REPORT_SENTas its final stdout line, and only on a confirmed200fromdrb-tg. A run that finishes but never reaches Telegram is notified as its own distinct failure.Still needs the owner - blocked, I cannot edit Task Scheduler
Both tasks still point at the bare
.cmdand still fire at 09:23/21:23. Until this is run, the fix above is inert. The exact command is in the session handoff.Open question for the board, not for me
If the account's usage ceiling is genuinely the binding constraint, retrying harder only redistributes the shortage. The real choice is between fewer/larger runs and a cheaper model for routine cycles - a spend-vs-cadence call #62 did not settle.
The exact command, since I was not permitted to run it myself:
02:37 and 14:37 sit just after the two usage-window resets observed in the dead logs (2:20am / 2:20pm) — the point in the day with the most headroom rather than the least, which is where 09:23 and 21:23 landed.
Close this once it has run and one supervised cycle has reported over Telegram.
Owner ruling 2026-08-26: one run per day, not two. This supersedes the twice-daily cadence in board minutes #62 (Decision 4's Monday board sitting is unaffected — it rides on whichever run falls on a Monday).
Revised command — keep
DRB Session AMat 02:37, retireDRB Session PM:Disable-rather thanUnregister-so the cadence can be reversed without rebuilding the task.drb-worksession.mdnow carries the cadence at the top of the file: there is no second bite at the day, so a run that lands nothing costs the company a full day. One engineering item and one business item, finished, beats three started.Note this raises the stakes on the supervisor in this issue: with two runs a day a silent failure cost half a day, with one it costs all of it.
Closing — the close criterion in this issue is met.
The 02:37 cadence fired on 2026-08-27 (owner ruling 2026-08-26: one run per day,
DRB Session AMonly). The run completed anddrb-tgreturned 200, so the report reached the owner rather than a log file nobody opens.WS_REPORT_SENTwas printed on the confirmed 200, which is the token the supervisor watches for.The cycle also produced work rather than only a heartbeat, which is the thing the three dead runs were hiding: a deployed commit (
d18e4f0, live on/health), two issues closed (#75, #76), two filed (#83, #84), and the overdue #62 Decision 6c deliverables written.The supervisor's other two guarantees — retry across a usage limit, and a loud Telegram failure on exhaustion — were not exercised this run, because nothing failed. They remain untested in anger. If a future run dies on a usage limit and the owner hears nothing, reopen this.
Refs #62, #68.