---
updated: 2026-02-17T09:28
created: 2026-02-16T20:15
---
# Session State

## Active Task: Weekly Financial Report PDF Design

### Current State
We're iterating on the design of a weekly financial PDF report for Tari to hold Brandon accountable.

**Script:** `~/.openclaw/scripts/financial-report-pdf.py`
**Data:** `~/.openclaw/data/finance/report-data.json` (includes account_histories, balance_snapshots)
**Output:** `~/.openclaw/data/finance/reports/financial-report-2026-02-09-to-2026-02-15.pdf`

### Page Layout (v12 — current)
1. **Account Summary** — LOCKED. Metric cards, side-by-side charts (bar + line), net worth trends, narrative. Perfect.
2. **Goals, Targets & Compliance** — Redesigned by sub-agent. Goals table, targets table, grade card (F/20%), day-by-day compliance table with PASS/FAIL + red/green row tints, violations panel. Brandon says "closer" but wants boxes same width — DONE in v12.
3. **Weekly Cashflow + Monthly Comparison** — Combined onto one page in v12 (was separate). Daily spending bar chart included.
4. **Spending by Category** — Pie chart + sorted table, fits one page.
5. **Transactions** — Full transaction list.

### What Brandon Has Approved
- Page 1 (Account Summary) — LOCKED, don't touch
- Page structure (5 pages total as of v12)
- Side-by-side charts on page 1
- Individual account balance trend lines
- Monthly comparison moved to page 3 with cashflow

### What May Still Need Work
- Brandon hasn't confirmed v12 page 2 is final yet — may want more iteration
- Score card + violations panel widths matched in v12 but not yet confirmed visually by Brandon

### Pending Actions (from earlier session)
1. **Cozy Earth $116.37** — no receipt found. Awaiting Brandon's input on category.
2. **Recategorize transactions in Monarch:** Apple $37.95 → Subscriptions, Walmart $341.73 → Home/Cabin Supplies
3. **Verify tomorrow's 6am pulse** fires correctly from n8n workflow `GuERh3uI92IP8h9M`

### Key References
- Pulse script: `~/.openclaw/scripts/financial-pulse-v2.py`
- PDF report script: `~/.openclaw/scripts/financial-report-pdf.py`
- Report data: `~/.openclaw/data/finance/report-data.json` (has accounts, txns, balance_snapshots, account_histories)
- n8n workflow: `GuERh3uI92IP8h9M` (cron 0 6 * * * America/Denver)
- n8n API key expires: March 5, 2026
- Monarch session: refreshed today, stored at `~/.monarch-money/.mm/mm_session.pickle`
- Monarch snapshot API: `snapshotsForAccount(accountId: $id)` returns `{date, signedBalance}` per account
- Aggregate snapshots: `aggregateSnapshots(filters: {startDate, endDate, accountType})` for credit/depository/brokerage
- pymupdf installed in monarch venv for PDF→PNG rendering

### Design Decisions Made
- reportlab can't render emoji — use text (PASS/FAIL, letter grades)
- Individual account histories fetched via `snapshotsForAccount` GraphQL query
- Aggregate snapshots via `aggregateSnapshots` with accountType filter
- Side-by-side charts use Table with two Image cells
- Why column in compliance table uses Paragraph() for text wrapping
- FAIL rows: #fecaca background, PASS rows: #d1fae5 background
- Grade card uses inner Table for vertical stacking (letter + pct + days)
