Amplifier talks to itself to test a chat app
BotSlack is an AI-native messaging platform where agents are first-class participants. To verify a message reaches another participant end-to-end, the naive method is a human watching two windows.
That manual dance is exactly what F-120 set out to replace.
The spec (AC-2) required at least 12 scripts covering all 7 suites; the delivery landed 14. It arrived on 2026-03-17 as one commit: 22 files changed, 1,786 insertions.
Real code, delivered -- so what exactly was it replacing?
A person relaying between two windows has to be present for every single run. They are the constraint the whole verification pivots against -- and the reason messaging E2E rarely runs.
To remove the human, the tests need a real browser to stand in.
agent-browser drives a full Chrome/Chromium, not just HTTP requests. Its Snapshot+Refs approach hits 93% token reduction versus Playwright MCP, so a real browser stays affordable to automate.
With a real browser on tap, one script can run both sides at once.
realtime-two-users.sh spins up SESSION_A and SESSION_B, each suffixed with $$ so parallel runs never collide. It pulls two distinct agents from the live API and puts both in the same room.
Two sides of Amplifier, one room -- now one can talk to the other.
Session B fills the composer with a timestamped realtime-e2e-$(date +%s) string and presses Enter. Session A retries a snapshot poll up to five times, looking for that exact string.
One half talks, the other confirms -- a closed loop with nobody in the room.
Failures don't just error out -- they capture the broken UI into tests/browser/artifacts/. There are 9 exit-failure screenshots on record right now, self-documenting evidence for the next debugging pass.
The loop closes even when it fails -- now make it run on its own.
Landed the same day, 30 minutes after F-120, F-121 documents a 0 */6 * * * cron and a pre-deploy gate on three critical tests. The self-debugging loop now runs unattended and blocks bad deploys itself.
A loop that guards the product -- with no one in the room.
0 */6 * * *. The suite runs unattended every 6 hours.Data as of: 2026-03-17 (delivery of F-120 / F-121)
Feature status: Delivered — F-120 E2E Browser Test Suite (commit eb5e3dbc), F-121 Periodic Browser Test Runner (commit 611c6cd9, 30 min later).
Primary source: ramparte/botslack browser E2E stack, plus ramparte-owned browser tooling (amplifier-bundle-browser, amplifier-browser-debugger, amplifier-ux-analyzer).
Commands run:
ls tests/browser/tests/*.sh | wc -l → 14 scriptssed -n '93p' specs/features/F-120-e2e-browser-test-suite.md → AC-2 ≥ 12 across 7 suitesfind tests/browser -name '*.sh' | xargs wc -l | tail -1 → 2358 total linesls tests/browser/artifacts/*-exit-failure.png | wc -l → 9 (11 PNGs total)cat tests/browser/tests/realtime-two-users.sh → SESSION_A/B, UNIQUE_MSG, 5-poll loopsed -n '49p' context/agent-browser-awareness.md → "Real Chrome/Chromium, not just HTTP requests"sed -n '7p' README.md (amplifier-bundle-browser) → 93% token reductionsed -n '5p' README.md; ls inspectors/ (browser-debugger) → ~1,500 vs 50,000+ tokens; 4 inspectorsgrep -n '\*/6\|CRITICAL_TESTS' cron-run.sh pre-deploy-check.sh → 0 */6 * * *; 3 critical testsgit show -s --format='%H %an %ai %s' → commits 1309d2ff, eb5e3dbc, 611c6cd9for d in ...; do git remote -v | head -1; done → all 3 browser tools ramparte-ownedGaps: BotSlack's Vitest "1087+ tests / 65 files" is a README self-report (line 95), not independently re-run. The 2,358-line count is the full tests/browser tree (tests-only = 1067).
Primary contributors: botslack Dev Machine (17 of the browser bash files; authored F-120/F-121 commits); Sam Schillace (4 files; F-120/F-121 backlog entry).