Surface ao schedule + ao daemon as primary product feature. The scheduler
exists; recipes don't. This adds the always-on lane that the user actually
runs as flagship usage:
- examples/schedules/dream-nightly.yaml — dream.run @ 23:00
- examples/schedules/forge-daily.yaml — wiki.forge @ 22:00
- examples/schedules/compile-weekly.yaml — compile @ Sun 02:00
- examples/schedules/defrag-weekly.yaml — compile --defrag-only @ Sun 03:00
- examples/schedules/evolve-ondemand.yaml — manual fire on GOALS regression
- docs/scheduling.md — operator guide (catalog +
custom-schedule path + run inspection via ao watch / ao schedule list)
All 5 recipes validated through cli/internal/schedule.Load() (the same path
ao schedule add invokes before POSTing to the daemon). The 6th recipe,
feedback-drain-hourly.yaml, lands in the soc-sx99.6 commit since it depends
on the --drain flag introduced there.
Closes soc-sx99.4.
Substrate audit found 1,508/3,735 (40%) citations with feedback_at zero-sentinel:
the close-loop fires but a large fraction of citation events never produce a
utility update. --drain walks .agents/ao/citations.jsonl, applies a default
reward + α-update via UpdateLearningUtility, and clears the sentinel.
- --drain + --drain-reward + --dry-run flags
- Idempotent: re-runs only drain still-unfed entries
- Real-corpus check on this repo: 2,053/3,828 (53.6%) unfed → confirms bug
- L2 integration tests: seed → drain → assert utility moved + feedback_at
populated; idempotency; dry-run no-mutation; skip-already-fed
- Health check G in scripts/check-memrl-health.sh fails when sentinel rate >5%
- examples/schedules/feedback-drain-hourly.yaml recipe wired in
Closes soc-sx99.6.