Ship log · iter #33

Iteration 33 ship log

2026-05-10 · continued autonomous /loop

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

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

What shipped

9 items. Major link-audit cleanup (95 broken to 15, 84% reduction) + SESSION-MASTER v4.

Started iteration at 95 broken internal links. Ended at 15. 80 broken links fixed.

#### Bug 1: foreman-feed slug normalization (20 links recovered)

/srv/sites/factory/foreman-feed/index.html had links like /factory/builds/contract-ai/ (the URL-encoded full URL rendered as a slug). Source: regen-foreman-feed.py extracts slug from foreman report filenames like wishdeal_com_factory_builds_contract-ai-20260510.md but didn't normalize the prefix.

Fixed by adding _normalize_slug() helper in the generator that strips wishdeal_com_factory_builds_ and wishdeal_com_factory_ prefixes. Re-ran. Now links resolve to clean slugs like /factory/builds/contract-ai/.

#### Bug 2: /own/ pages link to non-existent /about/ sub-pages (59 pages affected)

/own/<slug>/index.html rendered two asset cards (Founder persona + buyer-skeptic memos) linking to /factory/builds/<slug>/about/. But promote-artifacts.py only generates /about/ when founder.json exists. Products with skeptic memos but no founder data still got the link card.

Fixed at source in render-own-page.py:

Fixed in-place for the 59 already-rendered /own/ pages with broken links. Quick regex sweep that:

#### Bug 3: skeptics page links to /factory/afterhours/skeptic-memos/ (1 link)

/factory/skeptics/ (the skeptics feed) had a "Read full memo" link to /factory/afterhours/skeptic-memos/ which doesn't exist - afterhours skeptic memos live at /factory/builds/afterhours/skeptic-memos/. Source: regen-skeptics-feed.py line 29 special-cased afterhours's product_url to /factory/afterhours/ but the memo URL was built from product_url instead of /builds/<slug>/.

Fixed at source by introducing a separate memo_base_url variable that always uses /builds/<slug>/. afterhours product link still goes to the special promoted page; memo links resolve correctly.

SESSION-MASTER v4

Replaced v3 (which covered iters 1-29) with v4 covering iters 1-32. ~24 hours of session work. Adds entries for iter 30 (4 new audience pages), iter 31 (/factory/adoptability/), iter 32 (/factory/graduated/). 0 em-dashes after sanitization.

Em-dash discipline

0 em-dashes shipped on any iter-33 file. Verified post-each-write.

Files changed inventory

Modified (durable, source-level)

Modified (in-place patch for already-rendered pages)

Re-rendered

All .bak backups preserved.

IterationBroken countNotes
Iter 33 start95baseline
After foreman-feed fix75-20
After /own/ /about/ fix16-59
After skeptics afterhours fix15-1
Final1584% reduction

Remaining 15 breakdown:

All remaining are in admin/log pages or are false-positive JS template literals. None are in primary buyer-facing surface.

Why this matters

A buyer browsing 192 ideas should never hit a dead-end click. Iter 26 fixed the missing top-nav class of issue (1500 pages). Iter 33 fixed the "links that exist but point to nothing" class (60+ links touched). Both are quality signals - a buyer looking around for a few minutes should not find a single broken link in primary surfaces.

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 landing pages.
  2. Suppress link-audit false positives - update link-audit.py to skip URLs inside <script> tags (the JS template literals are noise).
  3. Operator inbox enhancement - per-product CTR calculation when intent captures arrive.
  4. Surfacing the trust signal block on /unlock/ pages too - currently only on /builds/, but unlock decision could also benefit.
  5. Per-product /how-it-works/ page - lightweight new content surface; pulls implementation_plan + tech_stack.

Cumulative iter 1-33

The factory's buyer-facing surface is now genuinely tight. 95 broken links discovered, 80 fixed (84% reduction), no em-dashes shipped, ~1500 sub-pages with consistent nav, 191 of 192 products with all 11 injection markers, 59 of 59 health endpoints green, 10 audience entry points, per-product previews + objection handlers + trust signals + graduated proof page. Remaining work is real customer feedback (requires Wes-side traffic push or Stripe).

← PreviousIter #32 Next →Iter #34