# W3b rich-text-on retake

Real apps: base 2359643cffa6ba9ee84d6f2694b935de54a8013e at /home/ubuntu/wt/pr-28084-base and head e3d7260bc6e260051d705492bf64c867bba4d976 at /home/ubuntu/wt/pr-28084. No tracked changes. Use T3 preview Chromium, incognito fresh tabs, 390x844 CSS, light, DPR 2, no device emulation, zoom 1/font scaling 1; interface 16px, prompt 14px, Inter Variable/system fonts. Reduced-motion emulation unavailable.

1. Install base with vp install. control.mjs launches each real app with T3CODE_DEV_SEED=0 and tracks process groups. Let each build create/migrate its own empty isolated .t3 database, then stop both.
2. Put 321dbe4b-8608-46c2-a0f4-d53c9d1c5980 in both .t3/userdata/environment-id files. Run node seed.mjs /home/ubuntu/wt/pr-28084 <this-script-directory> 321dbe4b-8608-46c2-a0f4-d53c9d1c5980. It schema-checks and writes nine events through EventSink. SQLite backup the stopped isolated head database to the independently migrated base database. No live state is read or copied.
3. Start both apps. Verify each synthetic settings.json has providerInstances.devReplay: driver acpRegistry, displayName Replay (dev), config.source local, commandPath the checkout's runtime Node executable, commandArgs [<checkout>/apps/server/scripts/dev-replay-agent.ts]. Source dev servers seed this automatically; do not overwrite it with an empty settings file.
4. Open fresh incognito preview tabs at each origin's /favicon-32x32.png, evaluate clear-client-cache.js before opening app state, apply settings-only.js (explicit composerRichTextEnabled:true). Pair using each startup URL. Navigate to /321dbe4b-8608-46c2-a0f4-d53c9d1c5980/<URL-encoded fixtures.long.citation.threadId>. Close sidebar/details equally with proof.prepare().
5. On BASE expand the actual composer, choose Replay (dev), search/select Multi turn, dismiss picker. Evaluate web-driver.js and call proof.start(); proof.paste('Please consider this quote:\n'+generatedFixture.long.marker+'\nEnd of note.'). Wait for localStorage t3code:composer-drafts:v1 to contain the exact prompt. Export ONLY that string and t3code:client-settings:v1 as base-saved-draft-rich.json. Its settings must say rich text true. Reload base; import the same two strings on head and reload. No cache/sequence state is transferred.
6. Wait for fonts, pending resource completion and no Syncing messages. Evaluate setup.js and web-driver.js, then driver-w3b.js. setup freezes only the no-argument Date constructor at 2026-11-03T01:00:00Z; Date.now, all timers and server clocks stay live. It hides carets and resets timeline/composer scroll to 0. Hover breadcrumb equally. Start preview recording on each, schedule void proof.runB1(). Same driver on both: pencil at 10s, comment at 14s, Save 17s, pencil 21s, clear 24s, Save 27s, reload 31s. Unavailable base controls are logged.
7. After genuine reload and synchronization, reapply setup, hover breadcrumb equally, await fonts and finished animations. Capture two full-surface preview PNGs at least 500ms apart and require decoded pixel identity. This is the restored-draft still. Verify settings and DOM data-composer-rich-text both true, no textarea until pencil, matching persisted no-comment prompt bytes.
8. Re-evaluate web-driver.js and driver-w3b.js. Schedule void proof.runB2() on both: preserve draft, clear 3s, select source with 631-character identity 5s, Cite 7s, Cancel 11s, restore original draft 14s, finish checkpoint 16s. This W3-only retake stops before the prior W4 Send segment. Head removes the new chip on Cancel; base has no editor/Cancel. Preserve sessionStorage proof-* checkpoints.
9. Stop recordings; normalize to 30fps using ffmpeg -vf fps=30 -c:v libx264 -crf 18 -preset fast -pix_fmt yuv420p -movflags +faststart. Preserve originals. generate-w3b.py creates full-size Diff0 (any nonzero maximum RGB channel difference, magenta) and DiffT (>16/255) and a labelled sheet. Review captures, diffs and recording frames before upload with ghdrop upload -m. Upload scripts and synthetic draft, no databases/auth material.
10. Stop tracked process groups; close own preview tabs; verify ports 6131/14171/8315/16355 closed; remove own base worktree. Leave head checkout tracked files unchanged and its server stopped. Remove only this step's scratch directory after upload.
