Monday digest
Part 3 · AI-first build · Option B
Weekly lifecycle digest
Every Monday: what changed, what is broken, and who does what this week. Numbers are computed by code, written up by Claude, and checked by code before anyone sees them.
How it works
- LoadThe assignment workbook (8 weeks), plus any week you upload in the same format. Parsed in your browser; raw rows never leave it.
- ComputeA deterministic engine (
engine.js) computes the 4 Monday KPIs, every rate, the trailing 4-week baseline and the rule alerts: attribution gaps, spam above Gmail's 0.10% guideline, unsubscribe spikes, volume shifts, activation drops, blasts to trials, timer-based onboarding. - WriteOnly the computed facts go to Claude (
, structured JSON output) through a server function that holds the API key. Claude prioritizes and writes; it may only cite numbers that are in the facts. - CheckEvery number in Claude's text is matched against the facts, in the server and again in the page (
guard.js). One unknown number and the AI text is discarded, and the rule-based digest is shown instead, with the reason.
Guardrails
- API key stored as an encrypted server secret; the browser never sees it.
- Same facts, same digest: results are cached, so re-running a week costs nothing.
- A daily cap on live calls; past it, or if the API is down, the page shows a recorded run (labeled) or the rule-based digest.
- Refusals fall back server-side to another model; truncated or unparseable output is rejected.
- Uploads are validated: missing columns stop the run; impossible funnels (import > connect) are flagged as data issues.
The prompt
Output schema (JSON)
ShipFlow is fictional; all data comes from the assignment workbook. The sample week 9 file is synthetic and labeled as such.