1. Yesterday's-high validity — scan.py now sets a per-row yesterday_high_caveat when the session used isn't pre (verified live: a postmarket test run correctly flagged both test tickers). REPORT_TEMPLATE.md instructs the report to surface it instead of presenting a wrong-day high as a clean breakout. 2. Stale earnings-calendar open question — WATCHLIST_CRITERIA.md now reflects that fetch_earnings_today() exists (best-effort via yfinance calendar), with a note that it's not authoritative. 3. Catalyst enforcement point — split into its own section in WATCHLIST_CRITERIA.md, explicit that it's judged downstream, not hard-filtered in scan.py. 4. "Open" proxy ambiguity — the gap-% open question now explicitly covers all three "Open >" fields, not just gap%. 5. Duplicated thresholds — REPORT_TEMPLATE.md now points to WATCHLIST_CRITERIA.md instead of restating numbers; SESSION_LOG.md's copy is now marked as a point-in-time mirror, not a second source of truth. 6. Manual em-dash check — analyze.py and merge.py now count em dashes in every draft and in the final REPORT.md, warning to stderr automatically on every run instead of relying on someone remembering to grep. 7. Template wording for merge context — reworded so it reads correctly whether the model is drafting fresh or merging existing drafts.