🔴 **GENERATED — do not hand-edit.** Written by `tools/ops/learn.py` from
`data/learnings/LEARNINGS.jsonl`. To add a lesson: `learn.py add`. Editing this
file directly means the next `add` silently overwrites your text.
Every entry is a correction someone made and the rule that came out of it.
Aga and Nic both write here; the ledger syncs both ways within ~15 minutes.
**4 lesson(s)** · scopes: all (1), analytics (1), ops (1), paid (2)
Rule going forward: Prove the collaboration loop by writing from the collaborator checkout and reading it on the Mac — never by reading the sync code and assuming it works.
Rule going forward: A probe that produces FALSE failures is worse than no probe: it sends someone to rotate a working credential. Always send a real User-Agent, probe the endpoint the tools actually use (not /me), and treat Meta's (#4) as a retry-later warning rather than an auth failure.
Rule going forward: .env.example is executable configuration, not documentation — postCreate.sh reads it to decide what to write. Any file that DRIVES behaviour must travel in the manifest alongside the thing it drives, and setup must be verified by booting a fresh Codespace, never by re-running setup over gh codespace ssh (an ssh session does not inherit the injected secrets).
Rule going forward: Founder financials and the founder c-suite never leave Aga's machine. Before adding ANY file to the sync manifest, content-audit it for cash/burn/runway figures and personal data — withholding a file is not the same as removing the number, because the same figures get pasted into other shared files. tools/ops/fleet_log.py selfcheck now scans the whole shared set and fails on a founder figure.