Signal v2 Ecosystem Rollout — SHIPPED record (branch signal-v2-rollout)

Status: SHIPPED & LIVE (2026-08-03). Owner approved go-live in-session ("Approved to go online"); the branch was pushed, auto-merged to main, and deployed via the human-token pipeline:

Everything below is preserved as the shipping-time record.


Why this PR is not open yet (read first)

The runbook assumed "merge = production deploy". Reality on this repo (verified 2026-08-02/03):

  1. Any pushed branch lands on main automatically. auto-merge-ai-branches.yml merges every push on claude/**/gemini/**/codex/**/copilot/**/cursor/**; auto-sync-main.yml merges every OTHER branch. Neither has a skip guard, so even pushing signal-v2-rollout to open a PR would put it on main within minutes — before any human review.
  2. Merging to main no longer auto-deploys. deploy-homepage.yml has been dispatch-only since 2026-07-30: production uploads require a human to run the workflow from the Actions UI and type APPROVED. Merge puts the change on the source-of-truth branch; deploy is a second, separately-gated human act.

So the real hazard is the bots, not the merge button. The owner chose to keep the branch local until preview. Shipping steps below reflect that.

Owner's exact shipping steps

  1. Preview locally (phone + desktop): cd "# MIZ OKI 3.5" && pip install flask && python3 -c "from app import create_app; create_app().run(port=8080)" then open http://localhost:8080/signal (hub), /signal/thresholds, /signal/budget, /signal/creative, /signal/audiences, /signal/measurement, /demo, /demo/signal, /executive-briefing/, /blog/doorman-problem.html (unlisted draft), /sitemap.xml.
  2. Ship to main — either path works; both end on main because of the bots: - git push -u origin signal-v2-rollout (auto-sync merges it), or - merge locally and push main yourself for an atomic landing. Note: the branch edits .github/workflows/deploy-homepage.yml; pushing workflow files over HTTPS may be rejected without the workflow OAuth scope — use the SSH remote if that happens (repo precedent).
  3. Deploy (only when ready to publish): Actions → "Deploy MIZ OKI 3.5 Homepage" → type APPROVED. The run now gates on BOTH the design canon AND the new truth-discipline content gate before building.
  4. After deploy: spot-check https://mizoki3.com/signal and /signal/budget.
  5. Optional follow-ups: publish the blog draft (3-step checklist in the comment at the top of blog/doorman-problem.html); when the first real pilot completes, follow the story bank's upgrade path — one verified number replaces its composite.

Rollback


PR body (paste below this line when opening the PR)

Signal v2 — complete media-buying capability site + story rollout

Replaces the single /signal page with a six-page capability site and threads its "doorman" narrative through the demo hub, the executive briefing, and an unlisted blog draft — under a hard, tested truth discipline.

Before: one /signal page (ORACLE-era copy, rewritten 2026-07-30 as Signal Intelligence Division). After: - /signal — hub, 9 filed sections (§01 the gap → §09 see it run), night-dossier v1.5. - /signal/thresholds — ReLU threshold discovery, binary search, 85/15 exploit–explore, momentum on a leash. All numbers are the Boss modules' real operating defaults, framed as defaults. - /signal/budget — ReLU-gated reallocation, pacing clamps, funnel-position bids, staged rollout rails (shadow → canary 10% → 20% → 70% + permanent 10% holdout). - /signal/creative — fatigue detection (z-score triggers), four rotation strategies, Thompson sampling. - /signal/audiences — uplift cohorts (persuadables vs sure things), consent-gated identity spine, probabilistic IDs excluded from causal math. - /signal/measurement — caused-vs-anticipated ledger, holdout/geo/ghost-bid experiments, drift monitor, weight back-propagation. - Demo hub + /demo/signal: one doorman-framing sentence each. - Executive briefing signal pack: doorman statusQuo line, 9-of-14 geo-test proof metric (composite), privacy-posture board talking point (owner-approved diff). - blog/doorman-problem.html: unlisted draft, publish checklist in-file. - docs/marketing/signal-story-bank.md: canonical story bank; governance pointers in both CLAUDE.md files.

Truth discipline (enforced, not aspirational) - New CI gate # MIZ OKI 3.5/scripts/content_qa.py — runs in deploy-homepage.yml beside the canon guard and in the test suite (tests/test_content_qa.py). Fails on: affirmative "mind-reading"/"guaranteed", present-tense deployed-intent claims, intent/ORACLE copy without "Preview · in development" in the same section, %/× numbers without an illustrative/composite/operating-default label in their section, and §-mark sequence breaks. The gate self-tests on seeded violations (6/6 caught) and on a clean sample (0 false findings) before every scan. - Gate findings fixed across 8 files, including preview framing added to the briefing-adjacent ORACLE section on /demo/signal and one (composite) label per briefing domain proof block (canon re-pinned each time).

QA results - Suite: 302 tests, 2 failures — both pre-existing homepage failures reproduced at the pre-rollout baseline commit (favicon-set + liveTeaser), untouched by this work. - Canon guard: 20/20 surfaces match v1.5-night-dossier (lockfile re-pinned in the same commits as each approved canon edit). - Content gate: self-test 6/6 fired + clean scan across 10 scoped files. - Linkcheck: 17 pages crawled, 50 internal targets; only the 2 pre-existing /pricing → /#platform,/#governance anchors fail (pre-date this branch). - Playwright: 6 signal pages — §-sequence, labeled SVG exhibits, no 380 px horizontal overflow; briefing/demo/hub render checks green, zero page errors. - Sitemap: rollout pages carry lastmod 2026-08-03; link previews verified (title/description/og:title/og:description/og:image present, og assets resolve).

Deploy safety: merging this PR does NOT deploy. Production uploads happen only via the dispatch-only "Deploy MIZ OKI 3.5 Homepage" workflow with a typed APPROVED token, which now also runs the truth-discipline gate. Rollback: restore archive/signal-v1.html.bak (details above).

← All docsView source on GitHub →