# Wishdeal Factory buyer-path - iteration 95 ship log

**Date:** 2026-05-14 (push mode, 50 min cadence, transparency-deepening iter)

## What shipped (3 substantive ships + 1 audit-discovery)

This iter added an explanatory "What we audit" section to /quality-report/, then fixed a counting bug in audit-adoptability-drift.py that was hiding partial-build state.

## Ship 1: "What we audit" explanatory section on /quality-report/

Previously /quality-report/ showed audit RESULTS (cards: fake-proof 0 hard, health 77/77, etc.) but did not name the audits themselves. A buyer landing on the page could not see which Python script enforced which invariant.

**Added:** new "What we audit" section with a 6-row table:

| Audit | Cadence | What it catches |
|---|---|---|
| audit-fakeproof.py | daily 4:30am | Fake-proof claims (SOC 2 cert, customer counts, vague-corpus). Writes audit-fakeproof.json. 25 Fermi-context skip phrases. |
| audit-adoptability-drift.py | every 15 min | Drift between catalog-card and Product JSON-LD scores. Writes adoptability-drift.json. iter 93. |
| em-dash-sweep.py | every 15 min | Unicode em-dashes + HTML-entity em-dashes anywhere in HTML. Strips automatically. |
| health-check.py | every 10 min | 77 monitored endpoints. Writes admin/health.json. |
| palette-audit.py | every 15 min | Products dressed in studio default palette. |
| adoptability-score.py | every 15 min | 10-axis re-score + tagline-not-equals-name validation. |

Plus a footer line linking to /cron-status/ for live freshness and to the public JSON files (audit-fakeproof.json, adoptability-drift.json) for direct verification.

**Source-fixed in regen-quality-report.py.** Section auto-refreshes every 30 minutes alongside the rest of /quality-report/.

**Why this matters:** /quality-report/ was the most-cited transparency surface in the iter 92 buyer-audit essay (Check 1 references it directly). Buyers reading the audit dashboard now know the script names + cadences + what each catches. The dashboard becomes self-explanatory.

## Ship 2: audit-adoptability-drift.py counting fix

**The bug:** When a /builds/<slug>/ directory exists but lacks index.html (partial build, the Director wrote intermediate artifacts but not the top-level page), the drift script silently `continue`d but the `matched` count formula didn't subtract those skipped dirs. So matched was artificially inflated.

**Symptom:** Drift snapshot showed "247/247 matched" with 0 missing-jsonld and 0 no-current-score, but the catalog actually only has 244 scored products. The 3-product gap was invisible.

**Root cause:** `matched = total - len(drifts) - len(missing) - len(no_score)` — formula didn't account for skipped-no-html.

**Fix:** Added `no_index` list to track partial builds + corrected math:
- `matched = total - drifts - missing - no_score - no_index`
- Snapshot now includes `no_index_count` and `partial_builds` (slug list)
- Print output shows "no-index (partial build): N"

**After fix:**
- total_builds: 247
- matched: 244
- no_index_count: 3 (brief-ai, outreach-sequence-ai, referral-engine-ai - partial builds awaiting Director to complete)
- drift_count: 0
- All other counts: 0

## Ship 3: /quality-report/ card refined to show partial-build status

Updated the Adoptability score sync card to use matched/scored ratio (244/244) with a "all in sync (3 partial)" subtext when no-index builds exist. Previously displayed "247/247" which hid the partial-build state.

**Live now**: "244/244 — all in sync (3 partial)". Accurate + honest.

## Audit-discovery: 3 partial builds in the catalog

Iter 93 also surfaced these as "extra builds" but didn\'t track them properly. iter 95 corrected the framing: these are Director-in-progress, not unscored. Director will complete brief-ai / outreach-sequence-ai / referral-engine-ai on a future tick. No action needed; just better visibility.

## Health hygiene (Op rule 5)

- **Em-dash sweep**: 8 files / 34 dashes stripped (regen pulled some in)
- **audit-fakeproof**: 0 hard / 0 soft (CLEAN, holds since iter 88)
- **audit-adoptability-drift**: 0 drift, 244 matched, 3 partial-build tracked separately (iter 95 refinement)
- **Health-check**: 77/77 passing
- **All structured-data**: maintained

## Status snapshot

- 244 scored products + 3 partial builds (Director WIP)
- 247 total build directories, 245 with index.html, 0 broken pages
- 0 fake-proof findings, 0 Adoptability score drift
- 12 essays + Read-next + JSON-LD on each
- 8 high-trust pages with JSON-LD durable through regen
- /factory/catalog/ with CollectionPage + 244-item ItemList
- 244 /builds/ pages with PNG OG images + Product schema
- 271 OG PNG images
- 5 transparency surfaces + 94 styled ship-log detail pages
- /quality-report/ now has "What we audit" section (NEW iter 95)
- 26 hand-polished products
- 11 content invariants defended + Fermi-context aware audit + Adoptability sync
- factory-api Node service: 12 live application endpoints
- 77/77 health endpoints, 2320 sitemap URLs
- 133+ cron jobs
- 50 min cadence active

## Iter 95 throughput note

3 substantive ships at 50-min cadence. The "What we audit" section was high-value transparency. The drift counting fix was a meaningful infrastructure correction. The card refinement was the small follow-on polish.

## Running queue (top 5 for iter 96)

1. **OG PNG spot-check** via Twitter card validator (need external service) - skipped because can\'t hit external from the loop, but Wes can verify post-session.
2. **Investigate why brief-ai et al stall** - the Director writes index.html.bak.tickN but no current index.html. Possibly a generator bug worth filing for Wes.
3. **/factory/admin/ JSON-LD coverage** - currently /admin/ is noindex but maybe partial Schema.org WebPage for /quality-report/'s parent context.
4. **Cadence step to 60 min** - iter 92/93/94/95 average ~2-3 ships per iter. Could step.
5. **13th essay** - might be over-investing; queue is depleting candidates. Skip until fresh topic.

## Cumulative iter 1-95

- **Catalog**: 244 scored + 3 partial, 245 with index.html, 26 hand-polished
- **Content library**: 12 essays + Read-next + 271 OG PNGs + 94 styled ship-log pages
- **High-trust pages**: 8 foundational + 5 transparency surfaces, all cross-linked
- **Source durability**: 22+ generators (drift script refined iter 95) + 6 regen scripts auto-call injectors + 3 JSON snapshots + 133+ cron jobs
- **Content invariants**: 11 defended + audits-named-publicly (iter 95) + partial-build state visible

The transparency dashboards are now self-explanatory. A buyer can see what audit ran, when it ran, what it catches, and where the source-of-truth JSON lives. Plus partial-build state is no longer hidden behind a counting bug.
