Files
discord_bot/specs/SPEC-005-tasks.md

2.5 KiB

SPEC-005 — Self-tasking

The sigmoid "boreness" loop becomes a persistent task queue (schema v5): generators propose, a scheduler executes — through the normal responder path, so every SAF gate, quota and kill-switch applies. Default off (tasks-enabled, kitchen stays quiet unless opted in); generators are individually selectable per persona (tasks-generators). Marked experimental per plan v4.

TSK-01 — Tasks are persistent queue rows (coverage: test)

A task is a store row: kind, channel, due-at, payload (the prompt the responder will run), state (queued/approval/done/cancelled/ failed). Enqueued tasks survive restarts.

TSK-02 — Due tasks run through the responder path (coverage: test)

The scheduler executes due queued tasks as system messages via the normal respond flow (inheriting budget, gates, envelope), marks them done/failed, and records the outcome as an observation so memory learns what the bot did on its own.

TSK-03 — Off by default (coverage: test)

Without tasks-enabled = true nothing is generated and nothing is executed. A restaurant server does not improvise unless asked to.

TSK-04 — Per-channel daily cap (coverage: test)

At most tasks-max-per-channel-per-day (default 2) task executions per channel per day, counted in the ledger; further due tasks stay queued for the next day.

TSK-05 — Approval mode (coverage: test)

With tasks-approval = true, generated tasks enter state approval and a staff alert announces them; !bot task-approve <id> moves them to the queue, !bot task-cancel <id> kills them (works for queued tasks too). Staged-rollout path from the review.

TSK-06 — Kill-switches govern execution (coverage: test)

Task execution respects bot_initiated_allowed()!bot tasks off, pause, quiet mode and quiet hours all stop the scheduler tick.

TSK-07 — Idle-impulse generator (boreness, demoted) (coverage: test)

When the chat channel has been idle longer than idle-impulse-hours (default 12), the generator enqueues one impulse task with the configured boreness prompt — deterministic threshold instead of the old 7-second sigmoid dice loop, bounded by TSK-04. The on_boreness loop is gone.

TSK-08 — Follow-up generator proposes from memory (coverage: test)

Periodically (taskgen-interval-hours, default 6) the follow-up generator asks memory-model (strict structured outputs) whether the recent episodes/facts warrant one follow-up task (channel, prompt, due-in-hours). A null/failed proposal enqueues nothing.