Everything is dispatched and moving. Here's where things stand.
Your AppleScript question: yes, confirmed. scripts/app_export_pdf.sh does it standalone, and scripts/visual_diff.py has the same mechanism built in — it opens a renamed copy of the fixture in the real app via AppleScript, exports a PDF, closes without saving, rasterizes at 150dpi, renders our viewer via Playwright, and writes side-by-side composites. I verified it end-to-end today on fixtures/templates/keynote/20_BasicBlack.key, and all three subagents are using it as their fix-verify loop (on separate viewer ports so they don't collide).
The three fidelity agents are running, each seeded with yesterday's ranked campaign findings plus your new template fixtures:
- K (Keynote + shared drawables): master/layout placeholder inheritance (decks rendering blank/unstyled), master background fills, PDF-backed vector images.
- N (Numbers + shared tables): number formats, stored column widths, alignment — plus your Invoice/Calendar templates.
- P (Pages + shared text): page-layout docs rendering empty, the G5 acid checklist sweep, and your pagination/margins miss (I relayed it as top priority; good news — pageSize/pageMargins/orientation are already in the model and emitted by the converter, so it's pure viewer rendering work).
Model stewardship per your instruction: all three agents now route model/schema changes through me. First proposal already came in from N (thousands-separator flag, proto-sourced from TSK.FormatStructArchive.show_thousands_separator) — I approved and landed it as CellFormat.grouping (commit 9cd782c, TS + Rust in sync, typecheck and build green). One flag for you: commit 2ed592d ("compact flat points arrays for curve elements", marked Peter-approved) landed outside my approval loop — if that was you in another session, all good; if not, tell me and I'll review it.
Corpus-wide census (I ran the converter over all 964 modern fixtures since the crawl files have no preview.pdf for text comparison): text extraction is broadly healthy, but there are 1,167 table-degraded warnings across 218 docs in four concrete decoder classes — missing v3 cell-storage decoder, pre-BNC tiles, undecoded uid-based merge ranges (one doc has 996 covered cells), and v4 rich-text cells being dropped. Ranked list with worst offenders is dispatched to N.
Viewer shell (my lane, committed): the whole client area now accepts drops at all times — full-viewport "Drop to open" overlay, drop replaces the open doc, and parsing no longer blanks the screen (toast instead); plus dark-mode chrome with paper-white document areas, sticky header, landing format chips, and a JSON download button. Gate was 6/6 after my commits; the currently failing pages gate test is P's in-flight pagination DOM change and they've been told to own it.
Also committed your G2/G5 goldens + acid checklist (following the G1 precedent); I left the Apple template binaries untracked deliberately — they're Apple-authored content, and fixtures/templates/provenance.json is committed instead. I'll consolidate each agent's report (including their hand-built fixture wishlists for N/K) as they finish.