feat(slack+web): daily brief + pitch analyzer + brainstorm portal
Summary
Two CEO-requested features shipped in sequence:
A · Daily Brief (Slack)
-
notify_daily_brief— idempotent per UTC calendar day (newlast_daily_brief_datestate field). - Aggregates: approvals pending, 24h campaign activity + spend delta, top p7+ trends, active experiments, readiness status.
- Wired into
run_notifierso the scheduler posts automatically once/day. - CLI:
cmoagent slack daily-brief [--force] [--dry-run]. - Slash:
/cmo daily [force].
B · Pitch Analyzer (Slack + Web + CLI)
-
pitch_analyzer.pywithPitchRequest/PitchAnalysis/PitchVerdictimmutable dataclasses. - Two planners: deterministic heuristic (no deps) + Claude-backed (falls back on any failure).
- Pulls last 30 days of
market_signalsand keyword-filters them before scoring. - Verdict = green / amber / red + 0..1 success probability + niche fit + opportunity cost + opportunities/risks/next steps + rationale.
- Slack:
/cmo pitch <title> [:: <concept>]. - CLI:
uv run python -m agents.gaming_cmo pitch \"<title>\" --concept .... - Web:
POST /api/pitch/analyze+/brainstorm/portal (form + result panel + trend context).
Test plan
-
288/288 tests pass (44 new covering daily brief dedup, force override, aggregation math, pitch scoring, saturation handling, trend context integration, Slack rendering). -
CLI smoke test: offline pitch analysis returns structured verdict. -
Verify /brainstorm portal renders and posts to /api/pitch/analyze once deployed. -
Confirm /cmo dailyposts and/cmo pitchworks in #cmo-agent channel post-deploy.