Strategy (operator, 2026-07-06): dual-run twitter-debug's bespoke Brave AND the RFC 0028 leased pool (#68), and retire the bespoke path ONLY when this parity suite is all-green. Parity is the gate — not a date.
Build an e2e suite that runs each capability against BOTH engines and asserts equivalent results. Publish a parity board (same pattern as /journeys) so red rows show the remaining work.
| Capability |
twitter-debug (bespoke) |
pool-lease equivalent |
Parity assertion |
| inject jar |
/twitter/setjar |
lease + broker jar-inject (RFC 0018) |
a known jar renders logged-in on both |
| logged-in screenshot |
/twitter/shot |
lease → navigate → capture |
x.com/home shows the account (a known @handle visible), non-blank |
| DOM reconstruct (reify) |
/twitter/reify |
lease → eval/reify |
≥N timeline entries with text, same order-of-magnitude |
| driven browser actions |
/twitter/engine |
lease → driven task |
a scripted task reaches the same end state |
| write / post |
/post |
lease + write cap |
a post (or dry-run) lands, asserted present |
| egress binding |
/twitter/ip |
per-lease egress locked to domain |
VPN egress IP (not a datacenter IP) on both |
| liveness |
/twitter/health |
pool/lease health |
green |
| isolation (parity-PLUS) |
single browser — cannot pass |
two concurrent leases (twitter + youtube) |
no cross-session bleed — each read returns only its own account |
The last row is the migration's whole justification: the bespoke single browser fails it (one global session — see RFC 0028 Problem), the pool must pass it. It stays in the gate.
Sequencing: (1) pool lands (#68) ephemeral-per-lease + broker inject + lease-time accounting; (2) point browserFeed/browserScreenshot at a lease behind a flag, old SPI still selectable; (3) this suite runs against both, board published; (4) all-green → flip the flag, move twitter-debug's reify/engine onto a lease, retire the bespoke Brave. One browser on the pod.
Verify honestly per box-inventory/scope-down: build the suite + run what's runnable now (isolation test, screenshot, reify against a seeded jar); rows needing a live logged-in jar or the broker (RFC 0018, impl pending) are marked NOT-YET with the exact reason, not faked green. Depends on #68 + the RFC-0028-decisions issue.
Strategy (operator, 2026-07-06): dual-run twitter-debug's bespoke Brave AND the RFC 0028 leased pool (#68), and retire the bespoke path ONLY when this parity suite is all-green. Parity is the gate — not a date.
Build an e2e suite that runs each capability against BOTH engines and asserts equivalent results. Publish a parity board (same pattern as
/journeys) so red rows show the remaining work./twitter/setjar/twitter/shot/twitter/reify/twitter/engine/postwritecap/twitter/ip/twitter/healthThe last row is the migration's whole justification: the bespoke single browser fails it (one global session — see RFC 0028 Problem), the pool must pass it. It stays in the gate.
Sequencing: (1) pool lands (#68) ephemeral-per-lease + broker inject + lease-time accounting; (2) point
browserFeed/browserScreenshotat a lease behind a flag, old SPI still selectable; (3) this suite runs against both, board published; (4) all-green → flip the flag, move twitter-debug's reify/engine onto a lease, retire the bespoke Brave. One browser on the pod.Verify honestly per box-inventory/scope-down: build the suite + run what's runnable now (isolation test, screenshot, reify against a seeded jar); rows needing a live logged-in jar or the broker (RFC 0018, impl pending) are marked NOT-YET with the exact reason, not faked green. Depends on #68 + the RFC-0028-decisions issue.