Ship log · iter #37

Iteration 37 ship log

2026-05-10 · continued autonomous /loop

On this pageWhat shipped Files changed inventory Why this matters Status snapshot What still needs work Next 5 recommended autonomous tasks Cumulative iter 1-37

Date: 2026-05-10 (continued autonomous /loop)

What shipped

7 items. Factory-wide em-dash sweep + 3 more generator-source-level patches + SESSION-MASTER v5.

Discovery: factory-wide em-dash audit revealed 5036 dashes I had missed

Iter 36 closed em-dashes on primary buyer-facing surfaces (unlock, adopt, feedback, builds/<slug>/index.html, all sub-pages I had directly audited). But a FACTORY-WIDE audit revealed 5036 em-dashes still present in surfaces I hadn't checked:

Mass sweep: 506 files, 5011 em-dashes stripped

In-place sweep across all secondary surfaces. After sweep + a few targeted single-file fixes (homepage, hotlist, today, log/index.html, 2 pricing.html), the final factory-wide em-dash count is 0 across all 2600+ HTML files.

Durable patches: 3 more generators + 1 shell script

To prevent em-dashes from regenerating on cron-driven regens:

  1. buyer-skeptic.sh - the shell script that generates skeptic-memo index pages. Added sed -i "s/ - / - /g; s/-/-/g" "$INDEX" after the heredoc write. Durable.
  2. render-own-page.py - generates /own/<slug>/ pages. Added _no_dash() helper, wrapped f.write(page) with f.write(_no_dash(page)). Durable.
  3. regen-financials-page.py - generates /financials/ index. Added _no_dash() helper, wrapped OUT.write_text(html_out) with OUT.write_text(_no_dash(html_out)). Durable.

SESSION-MASTER v5

Replaced v4 (which covered iters 1-32) with v5 covering iters 1-36. Adds entries for iter 33-36. 0 em-dashes after sanitization.

Em-dash hygiene summary

10 sources now enforce dash-strip on output:

  1. regen-unlock-pages.py (iter 25)
  2. regen-agent-pages.py (iter 27, 28)
  3. regen-audience-pages.py (iter 25)
  4. case-studies-gen.py (iter 36)
  5. faq-template-gen.py (iter 36)
  6. regen-agents-page.py (iter 36)
  7. regen-gallery.py (iter 36)
  8. render-own-page.py (iter 37, NEW)
  9. regen-financials-page.py (iter 37, NEW)
  10. buyer-skeptic.sh (iter 37, NEW)

Plus 3 injectors that strip on output: top-utility-bar, trust-signal, objection-handler.

Final state

Total em-dashes across the entire /srv/sites/factory/ HTML tree: 0

Files changed inventory

Modified (durable, source-level)

In-place patched

All .bak backups preserved.

Why this matters

Em-dashes are the strongest visible AI-generated-content signal. A buyer landing on /own/bookkeeper-ai/ and seeing - in a financial model immediately reads as "AI slop." Even if buyer-facing content is clean, a curious buyer who clicks into /financials/ or /own/ or /afterhours/ gets the AI-tell.

After iter 37, EVERY HTML file in the factory is 0 em-dashes, including admin pages, internal logs, financial pages, and adopt-tier pages. Combined with the 10 generator sources now durably enforcing this, the invariant is now factory-wide and persists across cron-driven regens.

Status snapshot

What still needs work

Same Wes-side as before:

  1. Stripe wiring (30 min)
  2. Email-send for auto-fulfill
  3. First real traffic push
  1. Hero-polish second pass - Claude CLI on bottom-50 Adoptability products.
  2. Per-product /how-it-works/ sub-page - lightweight new content from implementation_plan + tech_stack.
  3. Catalog card hover preview - hover shows first line of dossier teaser.
  4. Operator inbox enhancement - per-product CTR when intent captures arrive.
  5. Auto-purge old .bak files - 30+ generator files have .bak entries now. A small cleanup script that deletes .bak files older than 14 days would keep the director directory tidy.

Cumulative iter 1-37

The factory's surface is genuinely tight and durable: 198 products, 62 buyer-facing pages, 10 audience landing pages, per-product objection handlers + trust signals + previews + graduated proof + adoptability explainer + 1 graduation, 59/59 health endpoints, 8 broken links (admin only), 0 em-dashes anywhere across 2600+ HTML files with durable enforcement at 10 generator sources.

Surface quality is high enough to charge $5 for. Remaining work is Wes-side: Stripe + traffic push.

← PreviousIter #36 Next →Iter #38