Date: 2026-05-10 (continued autonomous /loop)
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:
/skeptic-memos/ (which always exists when the card is rendered)/about/index.html actually existingFixed 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.
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.
0 em-dashes shipped on any iter-33 file. Verified post-each-write.
/home/ubuntu/factory/director/regen-foreman-feed.py (_normalize_slug helper)/home/ubuntu/factory/director/render-own-page.py (skeptic-memos card link + founder card conditional)/home/ubuntu/factory/director/regen-skeptics-feed.py (memo_base_url separated from product_url)/srv/sites/factory/own/<slug>/index.html (broken /about/ links removed/redirected)/srv/sites/factory/foreman-feed/index.html (cleaner slugs)/srv/sites/factory/skeptics/index.html (correct memo URLs)/srv/sites/factory/log/SESSION-MASTER.md (v4)All .bak backups preserved.
| Iteration | Broken count | Notes |
|---|---|---|
| Iter 33 start | 95 | baseline |
| After foreman-feed fix | 75 | -20 |
| After /own/ /about/ fix | 16 | -59 |
| After skeptics afterhours fix | 15 | -1 |
| Final | 15 | 84% reduction |
Remaining 15 breakdown:
${slug}, ${p.slug}): false positives, work at runtimeoutbound-cadence-ai, sc-insights): products that were removed/renamed; the references are in admin/log pages, not visitor-facingAll remaining are in admin/log pages or are false-positive JS template literals. None are in primary buyer-facing surface.
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.
Same Wes-side as before:
link-audit.py to skip URLs inside <script> tags (the JS template literals are noise).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).