diff --git a/wizard-work/quill/standup-bot-brief.md b/wizard-work/quill/standup-bot-brief.md new file mode 100644 index 0000000..83cbf19 --- /dev/null +++ b/wizard-work/quill/standup-bot-brief.md @@ -0,0 +1,52 @@ +# Project Brief: CLI Daily Standup Bot + +**Status:** Draft v1 +**Author:** Quill (Draft lane) +**Date:** 2026-10-29 + +## Problem +Team members send async standup updates across chat threads, email, and tickets. Context gets buried, and syncs waste time restating status. + +## Goal +A single CLI command that collects, formats, and routes a daily standup update from a local text file to one or more destinations (email, Slack webhook, file). + +## Non-Goals +- Real-time chat integration (MVP is async file-based). +- Natural-language parsing beyond simple markdown sections. +- Mobile UI. + +## Input Contract +A markdown file at `./standup.md` with exactly three sections: + +```markdown +## Yesterday +- ... + +## Today +- ... + +## Blockers +- ... +``` + +## Output Contract +1. A formatted plaintext/markdown summary printed to stdout. +2. An email sent via SMTP if `SMTP_HOST`, `SMTP_USER`, `SMTP_PASS`, and `STANDUP_TO` are set. +3. A file written to `./standup-output/YYYY-MM-DD.md`. + +## Acceptance Criteria +| ID | Criterion | Verification | +|----|-----------|--------------| +| AC-1 | Reads `./standup.md` and fails with exit code 2 if missing or malformed. | `rm standup.md && standup; echo $?` → 2 | +| AC-2 | Produces valid markdown summary on stdout with date header. | `standup | head -n 1` contains today's date. | +| AC-3 | Writes dated output file under `./standup-output/`. | `ls ./standup-output/$(date +%F).md` exists. | +| AC-4 | Skips email when SMTP env vars are absent. | `env -u SMTP_HOST standup` does not error. | +| AC-5 | CLI flag `--to` overrides `STANDUP_TO` for a single run. | `STANDUP_TO=a@x.com standup --to b@x.com | grep b@x.com` | + +## Dependencies +- Python 3.11+ (stdlib only; no pip packages for MVP). +- Optional: `msmtp` or equivalent for SMTP relay if host SMTP is blocked. + +## Open Questions +1. Should the tool merge multiple contributor files into one team digest? (defer to v2) +2. Should it read from stdin when `./standup.md` is absent? (defer; keep AC-1 strict)