Session handoff · Opus → Fable 5

You're picking up a build in progress.

This page brings a fresh Fable session fully up to date on the WholeReach automated-marketing project, hands you the rules you must work under, the facts you'll need so you don't re-explore, and an ordered queue of prompts to run. The complete transcript of the session that produced tonight's work is at the bottom.

Handoff written 2026-07-16Predecessor: Opus 4.8 (1M)Host: root@143.198.182.180Aggregator: wholereach.com
Read this first

How to use this handoff

Read the four sections below in order, then work the prompt queue top to bottom. Each prompt is self-contained — paste it, do the work, verify it live, move to the next. If something blocks you, don't force it: append a dated note to C:\Users\walhu\websites\NIGHT-QUEUE.md and move on.

  1. Current state — what's live as of this handoff.
  2. The rules — non-negotiable; a fresh agent breaks these by default.
  3. Facts & locations — the engine, the generators, the design system.
  4. The prompt queue — the ordered work.

When you finish, produce your own session report + transcript so Paul can review what you did (last section).

Section 1

Current state — what's live right now

The session that just ended built two major deliverables plus network fixes. All of this is live and verified; do not rebuild it — build on it.

Shipped this session · all verified live
wholereach.com/manual/ — 49-chapter operator's manual for the Auto Marketing Engine. 9 parts + appendices + index. Every fact read from the running system.
wholereach.com/alldomains/ — installed-base worksheet: 242 domains, engine success columns + measured Reach from AWStats. Sortable. Daily cron 00:30.
wholereach.com/#directory — full 10-site family directory (added this session).
wholetech.com — front-door directory: added Automated Marketing / Magnetics / Travel families (17 rows); fixed a sticky-header clipping bug; removed a dup row.
og:image network-wide — 233/233 public homepages now have a real social card (was 65). gen-og-cards.py; gamesked scaffold patched so it survives rebuilds.
/status/ + /gameplan/ — corrected: WholeReach = "automated marketing", clickable family board, links to the directory.

Open threads Paul flagged (candidates for the queue, but see Section 4 for the actual ordered work): GitHub backup for the four flagships (none are git repos — biggest single exposure); a self-healing directory generator; a network-wide sticky-layout audit; deepening the manual; continued marketing-site strengthening.

Section 2

The rules — non-negotiable

A fresh agent violates several of these by default. Internalize them before you touch anything.

Never — billingSubscription only. Never set ANTHROPIC_API_KEY anywhere, never buy credits. You are Fable 5 — 2× the burn of Opus per token. This is a planned overnight run; keep it bounded, and if usage limits run low, stop and log it rather than pushing through.
Never — emailNever send email. Draft only. If a task implies outreach, create a Gmail draft and stop; Paul sends. Links in drafts go only in htmlBody as explicit <a href> anchors, never bare in the plaintext body.
Never — credentials & destructiveNo credentials, no DNS/domain purchases, no money actions, nothing that could lose data (no git reset --hard, no force-push, no rm -rf on webroots). If a task needs any of these, append it to NIGHT-QUEUE.md and skip.
Never — public-site contentNo "Claude"/"Anthropic" naming on public pages without checking. Never Paul's real name on public content — institutional bylines only. (This handoff page is noindex/internal, so it's exempt.)
Always — no hallucinationsThis is the whole ethic of the project. Every number, every claim, must be read from the real system. If you can't verify it, say so — never invent a score, a count, or a result. The engine itself refuses to fabricate findings; hold your own work to the same standard.
Always — verify live, back up firstEdit the generator, not the generated output. Write changes as a script, scp it to the host, run it, and curl-verify live. Back up any file before overwriting (to /root/webroot-baks/). Idempotent + reversible.
Always — the design system & portabilityMatch WholeReach tokens (below). Root-relative links and assets; canonical from one variable; a page must move hosts with zero rewrites. Sortable listings follow the alldomains worksheet pattern (sticky-# rows → detail card, search).
Always — no wasteful screenshotsVerify pages with curl/grep and DOM checks, not Playwright screenshots. Screenshot only if Paul asks to see something.
Always — leave a trailNote notable autonomous decisions in NIGHT-QUEUE.md under a "Decisions" heading. Default to action on reasonable choices; don't idle waiting for confirmation.
Section 3

Facts & locations — so you don't re-explore

These were verified this session. Trust them, but re-confirm against the source before asserting any as fact in public content.

The engine (the subject of the manual)

Auto Marketing Engine · backend
service /opt/autoengine/server.py — Python stdlib http.server, 127.0.0.1:8932, systemd autoengine.service
datastore /opt/autoengine/workspaces/<domain>.json (273 sites) — scores live in analysis.scores
scoring score_site() — 5 disciplines + measured Reach; 90 first-audit cap; reality cap tied to traffic
roles 6 backend channels: seo·aiso·cro·analytics·paid·research (+ content/social/roadmap generators)
niche detect_niche() — 16 niches, keyword-scored, priority order (magnetics before marketing)
honesty guard unreached page → the 4 page-roles return an honest note, never invented findings
ship/rollback ship_deliverable()/rollback_deliverable() — snapshots to /opt/autoengine/ship-backups/ (56 folders/83 files)
daily /opt/autoengine/daily-run.sh (00:00) · library refresh /root/ame-refresh.sh (Mon, PROMPTS BEFORE SKILLS)

Proof numbers (verified, safe to cite)

WholeReach design tokens

CSS custom properties
--bg:#fbf7f0 · --panel:#fffdf8 · --ink:#241a12 · --soft:#6f5f4d · --line:#eadfcd
--ember:#c45f2b · --ember2:#e07b39 · --gold:#c08a2e · --jade:#3f6b4f
--disp:'Fraunces' · --ui:'Inter' · --mono:'IBM Plex Mono'

Key generators & scripts (on the host)

PathBuilds
/root/gen-wr-alldomains.pywholereach.com/alldomains worksheet (from workspaces + AWStats)
/root/gen-og-cards.pyper-site social cards (Pillow, no browser); respects build.py exclusions
/root/gen-ame-prompts.py/root/gen-ame-skills.pythe 427-prompt + 47-skill libraries (order matters)
/root/gen-alldomains.pywholetech.com network directory worksheet
/opt/sitemap-builder/build.pycanonical exclusion list — import is_excluded_site, never reinvent
Gotcha — sticky headersA position:sticky header inside a wrapper with overflow:hidden or bare overflow-x:auto becomes trapped in a non-scrolling box and clips the first row. Fix: give the wrapper a max-height + overflow:auto so it genuinely scrolls, header top:0. This bit twice this session.
Section 4

The prompt queue — run in order

Paste each prompt to yourself as a task, do the work under the rules above, verify live, then move on. They're ordered by value and safety. Numbers 1–2 protect what exists; 3–6 extend it. All are safe for autonomous execution.

01Back up the four flagships to GitHub — safely

The biggest exposure: wholetech.com, wholereach.com, automarketingengine.com, wholemagnetics.com have no .git — everything built this week lives only on the droplet. Per Paul's rule the GitHub leg is one private repo PER SITE under github.com/paulwalhus, branch master, pushed from the workstation — NOT automated.

Prompt to runThe four WholeReach flagships have no git backup and everything from this week lives only on the droplet. WITHOUT touching credentials or pushing anything myself, prepare the GitHub backup: for each of wholetech.com, wholereach.com, automarketingengine.com, wholemagnetics.com, rsync the webroot down to a local working copy, git init, add a sensible .gitignore (exclude backups, node_modules, large binaries), commit "initial backup". Then STOP and write exact push instructions to NIGHT-QUEUE.md for Paul to run (gh repo create + push), because pushing needs his credentials. Do not create remotes or push.
Done when: four local git repos exist with an initial commit, and NIGHT-QUEUE.md has the copy-paste push commands. No push attempted.
02Make the front-door directories self-healing

The wholetech directory drifted to 12 missing sites + a dup before it was caught this session. Prevent recurrence.

Prompt to runWrite /root/audit-directories.py that diffs live public webroots (apex domains with an index.html, minus is_excluded_site from /opt/sitemap-builder/build.py) against the rows in wholetech.com's Full Directory AND wholereach.com/#directory. Output a report to wholereach.com/alldomains/gaps.html (noindex): domains live but MISSING from each directory, and any DUPLICATE rows. Do NOT auto-edit the directories — just surface the gaps as a worksheet. Add a daily cron at 00:40. Verify the page renders live.
Done when: gaps.html lists missing + duplicate directory rows, cron installed, verified live.
03Network-wide sticky-layout audit

Tonight's clipping bug was invisible until someone looked. It's mechanically findable.

Prompt to runWrite a checker that scans every public site's homepage for the sticky-in-scroll-container bug: a position:sticky element whose nearest ancestor with non-visible overflow can't actually scroll (overflow:hidden, or overflow-x:auto with content that fits). Since this needs layout, drive it with the existing Playwright-from-Windows setup against the droplet (never run browsers ON the droplet). Emit a worksheet of suspect pages to wholereach.com/alldomains/sticky-audit.html (noindex). Report only; fix nothing automatically. Flag the count in NIGHT-QUEUE.md.
Done when: a suspect-list worksheet exists; do not mass-fix. Paul triages.
04Add trend to the installed-base worksheet

Extend /root/gen-wr-alldomains.py (don't rewrite it). Each workspace has a score_history; turn it into a movement signal.

Prompt to runExtend /root/gen-wr-alldomains.py to add two columns to wholereach.com/alldomains: "Δ30d" (overall change over the last 30 days from score_history, colored green/red) and a tiny inline SVG sparkline of the overall trend. Keep it sortable by Δ. Also add a "Movers" summary at the top: the 5 biggest gainers. Read only real score_history values — if a site has one data point, show "—", never a fabricated trend. Regenerate and verify live; the daily cron will keep it fresh.
Done when: Δ30d + sparkline columns render with real data, Movers summary present, sortable.
05Harden og:image against regenerating sites

gamesked.com lost its card to a cron rebuild this session; the fix was patching its scaffold. Other generated sites may have the same latent gap.

Prompt to runFind every site whose homepage is regenerated by a cron/generator (grep crontab + /root/gen-*.py for index.html writes). For each, confirm its generator/template emits an absolute og:image; where it doesn't, patch the GENERATOR (not the output) to include it, back up first, and trigger one rebuild to verify the tag survives. Re-run the network og scan at the end and confirm 233/233 still holds. List any generator you patched in NIGHT-QUEUE.md.
Done when: every generated homepage's template emits og:image; network scan still 100%.
06Deepen the manual — a quickstart + per-engine depth

The manual (Part VI) covers each engine in one chapter. Add a fast on-ramp and, where a case engine has more real data, deepen it — grounded, no invention.

Prompt to runAdd wholereach.com/manual/quickstart/ (noindex-off, linked from the manual nav): a one-page "run your first audit in 5 minutes" using the real /api/analyze flow, matching the manual's design tokens. Then review manual Chapters 37–39 (the case engines) against the live case files at c./d./1.deptmatic.com and add any real, currently-missing numbers — only what's actually on those pages. Verify live. Do NOT invent case-study figures.
Done when: quickstart live + linked; case chapters enriched only with verified figures.

If you finish all six and have budget left: continue the network-wide standard — bring more marketing-family sites into parity with the skills/prompts library, following ame-refresh.sh's mirror list. Always back up, verify live, log what you did.

Section 5

When you're done — report back

Paul is keeping the predecessor Opus session alive but idle; he'll review your work through your report. Before you close:

  1. Write a session log to wholetech.com/sessions/<YYMMDDHHMM>-fable-overnight/ summarizing what you did, what you verified live, and what you left in NIGHT-QUEUE.md.
  2. Produce a transcript of your session (redact secrets: tokens, passwords, 32-hex keys, non-Paul emails; noindex) and publish it at wholereach.com/fableprompts/fable-transcript/.
  3. End with the clickable session-log URL so Paul can jump straight to it.

That closes the loop: he hands you context here, you hand results back there.

Section 6

The complete transcript

The full, redacted record of the predecessor session that produced tonight's work — 6,113 messages. This is your deep-reference; the sections above are the actionable summary. Secrets, passwords and third-party contacts are redacted; noindex.

Open the full session transcript →wholereach.com/fableprompts/transcript/ · 6,113 messages · redacted