ReveilleDigest Bot
What it does for you
A dry-run daily digest studio with schedule previews and validated Slack/Discord exports.

Screenshots

In more detail
Reveille is a daily digest desk. It pulls progress and reading notes from a tracker, build notes, feeds, and small data files, and prepares one message for Slack or Discord. It never sends anything: you see the full message, the exact payload, and when it would go out, before any delivery is wired up.
Honest limits
Actual Slack and Discord delivery is not implemented, and external feed fetching isn't either. No webhook was called, nothing was scheduled, and the CLI made zero network calls. 35 tests is a smaller suite than most in this batch. Daylight saving transitions need more coverage before this should ever run a real scheduler.
How I built it
This one was on the Codex list in 00-system/capstone-split.md. The folder already had the digest parsing, assembly, scheduling, and formatting core plus fixtures from an earlier interrupted session. Codex tested that core, kept it, and finished the rest: a preview studio where I pick sections, platform, time zone, and a cron schedule, a dry-run command-line tool that writes local files and a run record, the local server, and the tests. About 0.13 hours this session, with the earlier core work not counted.
I set the boundary up front: dry-run only, and no writes to the central tracker or logs. That's the split protocol. Codex wrote its LOG-ENTRY.json in the project folder and Claude Code merged it after re-running the checks. Because the build touched scheduling and webhooks, it also got a safety audit before merging. No subagents were used.
One pure assembly model feeds multiple platform formatters, and payload validation plus retry checks sit apart from any delivery code. The schedule preview shows five future run times without registering a single operating-system task.
What I learned
- A schedule preview can test time zone offsets (summer and winter) and weekday rules without ever starting a background job.
- Formatting and delivery are separate jobs. A good preview can check platform limits without a webhook.
- Feed deduplication means "no repeated keys," not "no older items." A second run can still surface older entries you haven't seen, and a test that assumed otherwise was wrong.
- Mask secrets where the error is created, before it goes into a retry log, not only in the final console printer.
- A small one: a UI selector used the single-ID helper for a group of checkboxes.
querySelectorAllfixed it.
What carried forward
Reveille reused the core that was already in its folder rather than starting over, which is exactly what rule 2 of the split file asked for. It follows the shared house rules (tested pure module, serve.mjs on 5155, ?demo=1, dark and light themes). No later project imports its code.
If I took it further
With a separate go-ahead, I'd add one tightly controlled delivery adapter, test it against provider responses, and widen the DST coverage before letting it run on a clock.
#055 Built with Codex September 23, 2026 35 automated checks