--- id: "b8e4f1a2-3c6d-4e9f-a1b2-7d8e9f0a1b2c" name: "Daily TODO.md Stale Review" type: activity-definition version: "1.1" enabled: false owner: custodian governance: custodian status: paused created: "2026-07-08" updated: "2026-07-20" trigger: type: cron cron_expression: "30 8 * * *" timezone: Europe/Berlin misfire_policy: skip context_sources: - type: state-hub query: todo_md_staleness required: true params: stale_days: 6 bind_to: context.todo_staleness report_sinks: - type: state-hub-progress event_type: todo_md_stale_review author: activity-core --- # Daily TODO.md Stale Review > **Paused 2026-07-20.** The matched rule below always produces a > `TaskSpec` (`rules/actions.py::_task_spec_for_rule`), which > `RunActivityWorkflow` unconditionally routes through `emit_tasks` → > the deployment-wide `IssueSink` (`ISSUE_SINK_TYPE`, default `rest` → > issue-core → Forgejo). There is no per-activity sink override in the > current schema, and this activity is the fleet's *only* consumer of > `task_template` — it was the sole source of 5 stale-review Forgejo > issues (`the-custodian` #1–#5, opened 2026-07-08, all reviewed and > closed 2026-07-20). Per current policy, Forgejo issue tracking is not > the fleet coordination mechanism (binky-control housekeeping session, > 2026-07-20) — so this activity is disabled (`enabled: false`) rather > than left to recreate the same sidetrack daily. > > **Re-enable path:** redirect the rule's output onto the work-record > backbone (`work-record-types_v0.1.md`, `kind: intake` — "a stale TODO.md > is exactly a finding/directive") instead of `IssueSink`. This needs > either a new report-sink type in activity-core (file-based intake-item > authoring in the target repo, mirroring `state-hub-progress`) or routing > through the stage-3 promotion tooling seeded in `CUST-WP-0060`'s closure > review (item 6, added 2026-07-20). Do not re-enable with `enabled: true` > alone; that only restores the Forgejo-issue behavior. > > This file change is the ADR-001 source of truth; the live activity-core > DB row picks it up on the next `make sync-activity-definitions` run > (Railiance-deployed, not run from this edit). Runs daily at 08:30 Europe/Berlin (after WSJF triage at 07:20). Scans registered workstation repos for `TODO.md` files that have not changed in 6+ days and emits a review task per stale repo. Policy: TODO.md is a pragmatic interruption buffer only. Stale files should be reviewed — archive done items, delete noise, or promote durable work into a workplan via ADR-001. ```rule id: flag-stale-todo-md for_each: context.todo_staleness.repos bind_as: repo condition: 'context.repo.age_days >= 6' action: task_template: 'Review stale TODO.md — {context.repo.repo_slug}' description: >- TODO.md unchanged for {context.repo.age_days} days (mtime {context.repo.mtime}). Review open items: archive done work, delete noise, or promote valuable topics to a workplan file and run statehub fix-consistency. target_repo: context.repo.repo_slug priority: low labels: ["todo-md", "stale-review", "automated"] ```