Background
First production run that reached the pod. Schedule #5917 dispatched correctly and run issue #5919 was created with the right label and assignee; the dev loop correctly declined it (#5916 working). The runner then did nothing and the schedule was never released.
Pod a086e8a8-1bf3-4926-a3be-d49bf1098635-0:
04:51:59 raiser=workflow-runner.run_start interval_s=86400 cron raiser starting
04:52:11 spawned run_execute/main.lua
04:53:11 dept=workflow-runner.run_execute elapsed_ms=59590 MSG=framework ok
04:53:11 delivery acked
It ran for 59s, exited cleanly, acked, and raised no scheduled_run_result — so run_report never fired and no fkst-cron-run:v1 record was posted. #5919 is still open; #5917 is still fkst-cron-running and will sit there until its watchdog.
That is act_run taking its "not a scheduled run, clean no-op" path: select_run_issue returned nil despite #5919 existing, being open, carrying fkst-cron-dispatch:v1, and being assigned solely to the session creator.
Three defects, in priority order
1. The run issue is very likely invisible to the listing (root cause)
run_execute calls github.issue_list_intake(identity.repo, 50, 30) — the dev-intake listing helper. A run issue carries fkst-workflow-run-*, deliberately not the devloop family (#5893/#5894). If that helper scopes to the intake work-label family, the runner can never see a run issue at all.
This is an error in run_execute: it reuses an intake-shaped helper for a queue that is deliberately not dev intake. Fix by listing on the runner's own label family, or by fetching the run issue directly — the dispatch event already identifies it.
Rule out first, cheaply: confirm what issue_list_intake filters on.
2. The no-op path is silent (why this needed pod logs at all)
select_run_issue returning nil logs nothing. "Looked and found no run" and "never looked" are indistinguishable from outside, which is the expose-don't-swallow rule being violated. The no-op is legitimate — most sessions have no schedules — but it must say so: log the repo, the creator it matched on, and how many candidates it considered.
3. The raiser fires once per day
interval_s=86400. It fires at boot and then daily, so a run issue arriving after boot waits up to 24h. Wrong for a wake-on-run-issue design: the pod exists because a run issue woke it, but the raiser may already have fired before the issue is visible. A boot-once raiser is only correct if the run issue is guaranteed visible at boot — it is not.
Verification Checklist
Definition of Done
A dispatched run executes and reports, and a run that cannot be found says so.
Blocks #5846
Related to #5719
Background
First production run that reached the pod. Schedule #5917 dispatched correctly and run issue #5919 was created with the right label and assignee; the dev loop correctly declined it (#5916 working). The runner then did nothing and the schedule was never released.
Pod
a086e8a8-1bf3-4926-a3be-d49bf1098635-0:It ran for 59s, exited cleanly, acked, and raised no
scheduled_run_result— sorun_reportnever fired and nofkst-cron-run:v1record was posted. #5919 is still open; #5917 is stillfkst-cron-runningand will sit there until its watchdog.That is
act_runtaking its "not a scheduled run, clean no-op" path:select_run_issuereturned nil despite #5919 existing, being open, carryingfkst-cron-dispatch:v1, and being assigned solely to the session creator.Three defects, in priority order
1. The run issue is very likely invisible to the listing (root cause)
run_executecallsgithub.issue_list_intake(identity.repo, 50, 30)— the dev-intake listing helper. A run issue carriesfkst-workflow-run-*, deliberately not the devloop family (#5893/#5894). If that helper scopes to the intake work-label family, the runner can never see a run issue at all.This is an error in
run_execute: it reuses an intake-shaped helper for a queue that is deliberately not dev intake. Fix by listing on the runner's own label family, or by fetching the run issue directly — the dispatch event already identifies it.Rule out first, cheaply: confirm what
issue_list_intakefilters on.2. The no-op path is silent (why this needed pod logs at all)
select_run_issuereturning nil logs nothing. "Looked and found no run" and "never looked" are indistinguishable from outside, which is the expose-don't-swallow rule being violated. The no-op is legitimate — most sessions have no schedules — but it must say so: log the repo, the creator it matched on, and how many candidates it considered.3. The raiser fires once per day
interval_s=86400. It fires at boot and then daily, so a run issue arriving after boot waits up to 24h. Wrong for a wake-on-run-issue design: the pod exists because a run issue woke it, but the raiser may already have fired before the issue is visible. A boot-once raiser is only correct if the run issue is guaranteed visible at boot — it is not.Verification Checklist
run_executefinds a run issue carrying onlyfkst-workflow-run-*Definition of Done
A dispatched run executes and reports, and a run that cannot be found says so.
Blocks #5846
Related to #5719