Date: 2026-05-11 (continued autonomous /loop)
5 items. Key insight: switching em-dash discipline from "patch each generator" (whack-a-mole) to "universal safety net" (15-min sweep cron).
After 15 iterations of patching individual generators with _no_dash wraps, em-dashes kept reappearing when new generators were discovered. The whack-a-mole pattern was working but never definitively closed.
Shipped a structurally different solution: em-dash-sweep.py that walks the entire /srv/sites/factory/ HTML tree every 15 minutes and strips any em/en dashes it finds. Idempotent. 0.2s execution time across 2600+ files.
Cron: /15 *
This means: worst-case em-dash exposure for any buyer is now 15 minutes. A buyer browsing the catalog will essentially never see one.
Combined with the existing 15 source-level patches, this creates a defense-in-depth:
The trade-off: we lose the ability to catch the bug at the source. But for em-dashes specifically (zero semantic value, never legitimate), this is fine.
41 em-dashes had re-accumulated in 13 files since iter 39 (admin pages, top-level index files, log/index.html). Single sweep cleared all of them. Factory-wide count: 0.
Replaced v5 (covered iters 1-36) with v6 covering iters 1-40 (~32 hours of autonomous work). New section: "Em-dash invariant defense in depth" documenting all 3 layers.
/home/ubuntu/factory/director/em-dash-sweep.py (universal sweep, 30 lines)/srv/sites/factory/log/SESSION-MASTER.md (v5 -> v6)/15 * em-dash-sweep.py15 iterations of source-level patches taught us: every generator that touches upstream content is a potential em-dash leak. The autonomous studio will keep adding generators. Each new one is a potential regression vector.
The universal sweep is the right shape: instead of fighting every leak, accept that leaks happen and clean them quickly. 15-minute cadence is fast enough that no realistic buyer session encounters an em-dash.
This pattern is generalizable: any "must never be in output" rule could be enforced via a similar sweep. Future iterations could add similar sweeps for:
Same Wes-side as always:
The factory is genuinely production-ready as far as autonomous polish can take it:
Surface quality:
Durability:
Monitoring:
The product is structurally ready to charge $5. Remaining work is exclusively Wes-side: Stripe + traffic push.