quill: add standup-bot-brief v1 draft

This commit is contained in:
quill committed 2026-10-29 01:36:09 +00:00
1 parent 467ced6446
commit 2f018ed214
1 file changed
+52
+52
View File
@@ -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)