# Wishdeal Factory buyer-path - iteration 106 ship log

**Date:** 2026-05-14 (push mode, 60 min cadence, OG-generator iter)

## What shipped (2 substantive ships)

This iter built the missing per-product OG SVG generator that iter 105's audit-discovery revealed was absent. Plus replaced contract-lifecycle-ai's stop-gap fallback with a real branded SVG.

## Ship 1: regen-product-og-cards.py - per-product OG SVG generator

Built regen-product-og-cards.py (~120 lines). The piece that was missing from the catalog\'s generation pipeline since the inception.

**Inputs:**
- /srv/sites/factory/adoptability.json (slug, name, tagline, score, category)
- /home/ubuntu/factory/director/brands/<slug>-brand.md (palette field, extracted via regex)

**Process:**
- For each product in adoptability.json
- If /srv/sites/factory/og/<slug>.svg already exists + non-empty: skip (idempotent - doesn\'t overwrite existing artistic SVGs)
- Otherwise: render SVG matching the existing template style (bookkeeper-ai.svg as reference)
  - Background gradient using brand palette\'s lightest color
  - Accent decorative circles + left rule using brand palette\'s accent
  - Header eyebrow: "WISHDEAL FACTORY - <CATEGORY>" (mapped from product.category)
  - Product name in Fraunces serif
  - Tagline in Inter sans
  - Adoptability score chip with green score number
  - $5 unlock chip in accent color
  - Canonical URL at bottom
- After SVG generation, invokes convert-og-svgs-to-png.py via subprocess to produce the PNG

**Result on first run:** 1 new SVG generated for `contract-lifecycle-ai` (the iter 105 case). 245 existing SVGs skipped as idempotent. Subsequent convert-og-svgs-to-png ran and produced the corresponding 134KB PNG.

**Output sample:** contract-lifecycle-ai.svg uses its brand palette (deep graphite #1a1f2e, precision blue #3b6cff, cloud white #eef2f7) instead of the generic _catalog fallback. The product page\'s og:image now resolves to a properly-branded card.

**Cron:** every 30 min at :14, :44. Placed BEFORE convert-og-svgs-to-png (:19, :49) so any newly-shipped product gets its SVG generated within 15-30 min, then the PNG render follows within 5 min after.

## Ship 2: Removed iter-105 stop-gap _catalog.png override for contract-lifecycle-ai

Deleted the manual _catalog.png copy from iter 105 before running the new generator. The real branded SVG + PNG now stands as the canonical OG card for contract-lifecycle-ai.

## The catalog\'s OG pipeline is now end-to-end

1. **Director ships new product** -> writes /builds/<slug>/index.html via write_file action
2. **og-meta-injector** (:14, :44) -> writes og:image meta into the page; falls back to _catalog.png if PNG missing
3. **regen-product-og-cards** (:14, :44 NEW iter 106) -> writes per-product SVG using brand palette + adoptability data
4. **convert-og-svgs-to-png** (:19, :49) -> converts SVG to PNG via ImageMagick
5. **audit-og-coverage** (:05, :35) -> verifies every product page\'s og:image points to an existing PNG
6. **jsonld-injector** (:24, :54) -> writes Product JSON-LD with image URL
7. **og-meta-injector re-runs** (:14, :44 hourly) -> automatically swaps from _catalog.png fallback to the real per-product PNG once it exists

Within roughly 30 min of any new product shipping, it has a real branded social-card. Within 60 min the entire OG pipeline is up-to-date with the new product.

## Health hygiene (Op rule 5)

- **Em-dash sweep**: 1 file / 5 dashes stripped
- **audit-fakeproof**: 0 hard / 0 soft (CLEAN)
- **audit-adoptability-drift**: pending refresh
- **audit-page-identity**: pending refresh
- **audit-hero-polish-drift**: pending refresh
- **audit-og-coverage**: 246/246 ok (CLEAN)
- **Health-check**: 77/77 passing

## Status snapshot

- 246 scored products + 2 partial builds
- 246 build pages with index.html
- 0 fake-proof findings, 0 score drift, 0 page-identity fall-throughs, 0 hero-polish drift, 0 missing OG cards
- 247 brand briefs with valid archetype
- 12 essays + Read-next + JSON-LD
- 8 high-trust pages with JSON-LD durable
- /factory/catalog/ with CollectionPage
- 244 /builds/ pages with PNG OG + Product schema
- **273 OG PNG images** (was 272; added real branded contract-lifecycle-ai)
- 5 transparency surfaces + 106 styled ship-log detail pages
- /quality-report/ surfaces 8 live-check cards
- 14 content invariants defended
- 6 audit systems + **1 new generator** (regen-product-og-cards iter 106)
- 77/77 health endpoints, 137+ cron jobs
- 60 min cadence active

## Iter 106 throughput note

2 substantive ships at 60-min cadence. The OG SVG generator was a meaningful infrastructure fill-in - the catalog\'s pipeline had a real gap that iter 105 exposed and iter 106 closed.

## Running queue (top 5 for iter 107)

1. **Audit /factory/own/ pages** - parallel buyer-path surface with 244 pages, not yet covered
2. **Audit /factory/dossiers/<slug>/teaser.md** - 244 public teasers
3. **Audit /factory/unlock/<slug>/ content quality** (page-identity already covers; this would be content quality)
4. **Cadence-validate 60 min** - iter 105/106 each 2-3 ships. Holding.
5. **13th essay** - skip until queue has fresh candidate.

## Cumulative iter 1-106

- **Catalog**: 246 scored + 2 partial, 246 with index.html
- **Content library**: 12 essays + Read-next + 273 OG PNGs + 106 styled ship-log pages
- **High-trust pages**: 8 foundational + 5 transparency surfaces
- **Audit infrastructure**: 6 audit systems + 7-surface page-identity coverage
- **Source durability**: 26+ generators (added regen-product-og-cards iter 106) + 6 regen scripts auto-call injectors + 5 JSON snapshots + 137+ cron jobs
- **Content invariants**: 14 defended at surface+source AND publicly surfaced
- **OG pipeline**: now end-to-end from Director ship to social-card publication

The catalog\'s OG infrastructure is now complete. Every product, new or old, gets a properly-branded social-card automatically within 30 min of shipping.
