Summary
Extend report delivery beyond Slack markdown: when the weekly management report is ready, deliver it to managers as a Google Doc plus a structured JSON export containing every teammate's confirmed entries for that week.
Design reference: docs/DESIGN.md §5.4 (Synthesizer), §10 (Configuration), team scale notes (Postgres person roster, no per-user env vars)
Why M5.1 (separate from M5)
M5 (#8) covers synthesizer skill invocation, audit chain (report_run / report_entry), and posting markdown to REPORT_CHANNEL_ID.
M5.1 adds manager-facing artifacts needed for ~20-person team operations:
- Editable Google Doc (current manual workflow parity)
- Machine-readable JSON for dashboards, archival, or downstream tooling
Deliverables
1. JSON export
- CLI:
status report --week YYYY-MM-DD --format json -o report-2026-08-14.json
- Payload includes:
week_ending
entries[] — all confirmed status_entry rows (person, epic, state, outcome, evidence, blocker, ask)
participation[] — per-person status (confirmed, expired, sent, send_failed, on_leave)
flags[] — unacknowledged flags for the week
report_run metadata when persisted (run id, prompt_version, generated_at)
- Stable schema documented in
docs/DESIGN.md §7
2. Google Docs delivery
- Google Cloud project + Docs API credentials (service account or OAuth — document chosen approach)
- Create or update a Doc from synthesizer markdown (template doc optional)
- Share with manager recipients (Google group or explicit emails)
- Config env vars (names TBD):
GOOGLE_*, REPORT_DOC_FOLDER_ID, MANAGER_EMAILS or roster-driven via person table
3. Manager notification
- Slack DM or email to managers with:
- Link to Google Doc
- Path/attachment reference to JSON export (or upload to shared drive)
- Triggered by
status report --deliver-managers or as part of M6 lock-and-report
4. Person roster (no per-teammate env vars)
- Managers and teammates tracked in Postgres
person table (slack_user_id, jira_account_id, github_login, optional manager_id)
- Batch seed script for ~20 teammates (CSV/SQL) — not env var explosion
Acceptance criteria
Depends on
Out of scope
Branch / PR
- Branch:
feat/m5.1-manager-delivery
- Base:
main (after M5)
- PR title:
feat(report): Google Doc and JSON delivery for managers (M5.1)
Summary
Extend report delivery beyond Slack markdown: when the weekly management report is ready, deliver it to managers as a Google Doc plus a structured JSON export containing every teammate's confirmed entries for that week.
Design reference:
docs/DESIGN.md§5.4 (Synthesizer), §10 (Configuration), team scale notes (Postgrespersonroster, no per-user env vars)Why M5.1 (separate from M5)
M5 (#8) covers synthesizer skill invocation, audit chain (
report_run/report_entry), and posting markdown toREPORT_CHANNEL_ID.M5.1 adds manager-facing artifacts needed for ~20-person team operations:
Deliverables
1. JSON export
status report --week YYYY-MM-DD --format json -o report-2026-08-14.jsonweek_endingentries[]— all confirmedstatus_entryrows (person, epic, state, outcome, evidence, blocker, ask)participation[]— per-person status (confirmed, expired, sent, send_failed, on_leave)flags[]— unacknowledged flags for the weekreport_runmetadata when persisted (run id, prompt_version, generated_at)docs/DESIGN.md§72. Google Docs delivery
GOOGLE_*,REPORT_DOC_FOLDER_ID,MANAGER_EMAILSor roster-driven viapersontable3. Manager notification
status report --deliver-managersor as part of M6lock-and-report4. Person roster (no per-teammate env vars)
persontable (slack_user_id,jira_account_id,github_login, optionalmanager_id)Acceptance criteria
status report --deliver-managersdeploy/secrets.example.yaml(no credentials committed)Depends on
Out of scope
Branch / PR
feat/m5.1-manager-deliverymain(after M5)feat(report): Google Doc and JSON delivery for managers (M5.1)