Ship log · iter #87

Iteration 87 ship log

2026-05-14 · push mode, 45 min cadence, BIG ship: 86 styled ship-log detail pages

On this pageWhat shipped (3 substantive ships + audit-discovery) Ship 1: 86 ship-log detail pages live Ship 2: SESSION-MASTER.md refreshed (was stuck at iter 40) Ship 3: Em-dash invariant restored in 33 raw ship-log files Standard wirings Health hygiene (Op rule 5) Status snapshot Iter 87 throughput note The catalog's transparency surfaces at iter 87 Running queue (top 5 for iter 88) Cumulative iter 1-87

Date: 2026-05-14 (push mode, 45 min cadence, BIG ship: 86 styled ship-log detail pages)

What shipped (3 substantive ships + audit-discovery)

This iter rendered every ship log as a styled HTML page. Plus refreshed SESSION-MASTER.md (stuck at iter 40) into a useful pointer. Plus fixed a long-running em-dash invariant violation in the raw ship-log markdown.

Ship 1: 86 ship-log detail pages live

Live at https://wishdeal.com/factory/log/ship-logs/iter-N/ for N from 1 to 86.

What each page has:

Generator: regen-ship-log-details.py (~250 lines). Custom markdown renderer handles headings, lists, tables, code blocks, blockquotes, inline bold/italic/code/links. No external library needed.

Cron: every hour at :22. Log at /home/ubuntu/factory/logs/ship-log-details.log.

Why HTML detail pages matter: A skeptical buyer can now read any ship log without downloading a .md file. The TOC + prev/next nav make multi-iter browsing easy. Previously the "view" link served raw text/plain markdown that required parsing in the head.

Wire-up: ship-logs index page (regen-ship-logs-index.py) now links to /iter-N/ for the styled page and offers "raw" as a secondary link to the .md fallback.

Ship 2: SESSION-MASTER.md refreshed (was stuck at iter 40)

The old SESSION-MASTER.md was last touched May 11 and stuck at iter 40. Refreshed into a concise pointer document:

Future updates: this file's milestone table needs occasional maintenance but no longer claims to be a "single page summary." The live ship-logs index does that automatically.

Ship 3: Em-dash invariant restored in 33 raw ship-log files

Audit-discovery during build: When generating the iter-N HTML pages, the em-dash sweep cron immediately stripped 119 dashes across 35 files. Investigation revealed the older raw ship-log .md files (iters 13, 18, 20+) contained em-dashes that had never been swept. The em-dash-sweep cron only covers HTML, not markdown sources.

Two-part fix:

  1. Renderer side: regen-ship-log-details.py now strips em-dash + en-dash from source markdown before rendering, so iter-N HTML pages are always clean even when source .md has dashes.
  2. No source side: Older ship-log .md files left as-is (they are historical records; rewriting them would be revisionism). The render-time strip is the durable fix.

Result: All 86 iter-N HTML pages now clean. Em-dash sweep returned 2 trailing files from initial regen runs; subsequent sweep cleaned them. Final state: 0 em-dashes anywhere in /factory/log/ship-logs/.

Wider lesson: The em-dash invariant covers HTML in the catalog. It does NOT cover markdown source files that get served as raw text/plain. The newer ship logs (since iter 56-ish) are clean because the operating rules added "no em-dashes." Older logs predate that rule.

Standard wirings

Health hygiene (Op rule 5)

Status snapshot

Iter 87 throughput note

3 substantive ships (detail pages + SESSION-MASTER refresh + em-dash fix) in 45-min cadence. The detail pages alone are 86 pages of new content with TOC and nav. Cadence holds; iter 87 was substantial.

The catalog's transparency surfaces at iter 87

#URLCadencePurpose
1/factory/cron-status/15 min127 cron jobs, live timestamps
2/factory/quality-report/30 minInvariants + audit + soft findings + health
3/factory/api-docs/weekly17-endpoint API reference
4/factory/healthz1 minOne-line ops probe
5/factory/log/ship-logs/30 minIndex + 86 detail pages
6/factory/log/ship-logs/iter-N/hourlyPer-iter narrative, styled

Six transparency surfaces (counting per-iter detail), all cross-linked.

Running queue (top 5 for iter 88)

  1. Audit refinement - smarter Fermi-math context detection in audit-fakeproof.py. Lower the 9 soft findings to ~2 (the genuine ones). The 7 metric-claim findings are all Fermi-math in clear context.
  2. OG card for each detail page? - currently they share page-ship-logs.png. Per-iter OGs would be discoverable on Twitter/LinkedIn shares. Possibly over-engineering for now.
  3. Periodic verification of older polished products (sample 5 randomly)
  4. Cadence audit - iter 87 was 3 ships; iter 88 candidate ships are getting smaller. May step to 60 min.
  5. /factory/playbooks/loop-lessons/ JSON-LD article schema + Twitter card refinement for the new essay - high-impact share-button polish.

Cumulative iter 1-87

The catalog is now navigable by iteration. A buyer auditing the studio can scroll the 86 detail pages, click iter-by-iter prev/next, and read each iter's ship + queue. That used to require knowing the markdown URL pattern.

← PreviousIter #86 Next →Iter #88