# PROOF — prototype #3 (installer-storefront), 2026-08-19 (heartbeat)

## 1. Check run (real output, `python3 check_storefront.py`)
```
kit set re-extracted from live landing: ['$800', '$1,500+', '$99/mo']
cross-door set rescue: ['$495', '$1,800', '$3,500/mo']
cross-door set dossiers: ['$295', '$1,200', '$2,500/mo']
cross-door set migrator: ['$150', '$28k', '$45k', '$90k']
cross-door set nightwatch: ['$0', '$12', '$175', '$18', '$5.67']
live H1: 'Your Private AI, Installed in Your Home or Office'
demo.html has no <script> blocks — inline-script bar documented as vacuous (static gift)
RESULT: PASS — storefront matches live kit pricing, cross-door clean, demo embed intact, O-12 complete
```
Exit code: **0**

## 2. Self-test (real output, `python3 check_storefront.py --self-test`)
```
  self-test N1 price-drift: REJECTED (correct)
  self-test N2 cross-door-rescue: REJECTED (correct)
  self-test N3 cross-door-dossiers: REJECTED (correct)
  self-test N4 cross-door-migrator: REJECTED (correct)
  self-test N5 cross-door-nightwatch: REJECTED (correct)
  self-test N6 placeholder: REJECTED (correct)
  self-test N7 o12-missing: REJECTED (correct)
  self-test N8 broken-embed: REJECTED (correct)
  self-test N9 h1-changed: REJECTED (correct)
  self-test N10 demo-not-identical: REJECTED (correct)
  self-test P1 positive-control: ACCEPTED (correct)
  self-test: ALL POISONED VARIANTS REJECTED + POSITIVE ACCEPTED
```
Exit code: **0**

## 3. Adversarial greps (real output)
```
index.html $800 / $1,500+ / $99/mo: all present byte-for-byte
index.html $495 / $1,800 / $3,500/mo: 0
index.html $295 / $1,200 / $2,500/mo: 0
index.html $28k / $45k / $90k / $175 / $12 / $18 / $5.67: 0
index.html $150 / $750 (retired rescue offer): 0
index.html placeholder tokens ({{/INSERT/TODO/TBD): 0
index faq-items: 5
index [O-12]: 4 (>= 3 required)
index A-tags: [A-1] [A-2] [A-3]
demo.html sha256 == live gift sha256: 1237cea3c750efa7572d530305cd20377d2e93c36c5fdec942f525392a360449 (byte-identical)
```

## 4. Card claims verified against disk (derive, never trust)
- **"$1,500 is a migrator/nightwatch token" (card, line 184): PARTIALLY TRUE.**
  The migrator canonical landing (`2026-08-09_migrator-landing-page.html`) carries
  `$28k/$45k/$90k/$150` — no $1,500. The nightwatch landing carries ONE `1,500`
  occurrence, in PROSE only ("30 of 1,500 monthly invoices" — an invoice count,
  not a price). So the storefront is safe on $1,500 today; the guard is built the
  card's way (re-extract each door's live price tokens at run time — any future
  $1,500 price token in another door's live page gets guarded automatically).
- **$99 exemption (Q131 collision, surgical):** the nightwatch set re-extracted at
  run time excludes $99 ONLY (it is the installer's own live support price); every
  other nightwatch token ($0/$12/$175/$18/$5.67) stays guarded — N5 proves it.
- **JS bar on the embedded demo:** the live gift `2026-08-12_i59_installer-readiness-checklist.html`
  is static HTML with zero `<script>` tags — the `node --check` bar (Q141 bug
  class) is implemented and documented as vacuous for this asset; it activates
  automatically if the gift ever gains inline scripts.

## 5. Known issues NAMED (not fixed — flagged for Walter)
- **Live gift CTA typo:** `runbooks/installer/gift/2026-08-12_i59_installer-readiness-checklist.html`
  line 186 reads "Download **Checkist** PDF" (missing 'l' in Checklist) and its
  `href="#"` is a dead link (no PDF exists). The embedded demo.html is a
  byte-identical copy, so the typo rides along in the prototype by design
  (byte-identity bar) — fix belongs in the live file, then re-copy. NOT fixed
  this firing (no live-tree edits from this firing; SOUL.md deletion/edit
  discipline: flag it).

## 5b. RESOLVED 2026-08-19T07:59Z (heartbeat) — the §5 defect was fixed in place
- **Fix (in the live file, per the flag):** "Checkist" → "Checklist"; the dead
  `href="#"` CTA now opens the native print dialog (`window.print()`, `return false`)
  — the page IS the print-ready checklist, so "Save as PDF" delivers exactly what
  the CTA promised; a `@media print` block hides the CTA/footer chrome and forces
  a clean light print surface. No email/lead capture added — page behavior only.
- **Sha change (logged the Q141 way):** live gift sha256
  `1237cea3c750efa7…` → `657d988de9a59c…` (demo.html re-copied; live==demo byte-verified).
- **New guard bars in `check_storefront.py` §5b** (dead-CTA defect class is now
  checkable, not just flagged): `window.print()` must be present in demo.html +
  "Checkist" must be absent. **Negative case proven live:** live+demo both
  poisoned with the original dead CTA → `rc=1` with both new bars firing
  specifically (`FAIL: demo.html CTA does not open the print dialog` /
  `FAIL: …still contains the 'Checkist' typo`); files restored, sha verified.
- **Self-test updated:** N10 was vacuous by design after this fix (its mutation
  replaced "Checkist" which no longer exists) — replaced with `N10 demo-typo-poison`
  (re-introduces the typo → REJECTED) + `N11 demo-dead-cta` (strips the
  window.print handler → REJECTED). Self-test 13/13: all poisoned rejected,
  positive accepted.
- **Regression sweep after the fix:** `check_storefront.py` exit=0 (positive);
  `--self-test` rc=0 (13/13); Q145 fleet-wide `storefront-price-audit/audit.py`
  exit=0 on all 4 storefronts (demo assets byte-pinned against the NEW live sha —
  re-extracted, no hardcoded hash; no price-token change from the fix).

## Open
- Hosting + checkout routing (same fleet-wide decision as Q141/Q142).
- ~~Walter: review the named live-gift typo~~ — RESOLVED 2026-08-19T07:59Z (§5b above).
- Q144 (migrator storefront) and Q145 (fleet-wide storefront price audit) remain [open].
