Rehearsals
Traced at commit ffe4e48 ·
apps/dry-run-api/* ·
libs/temporal/src/activities/campaign-dry-run.ts ·
libs/temporal/src/activities/dial-gate.ts
Summary
- A rehearsal runs the real platform code.
- The same workflow starts. The same gate checks run. The platform writes the same tables.
- A local service impersonates the providers.
- A local service answers as the voice provider, the carrier and the language model.
- The service returns the same message shapes and signs them the same way.
- The platform cannot tell the difference. This is the purpose of a rehearsal.
- Every row a rehearsal writes carries
dry_run = true. - A rehearsal proves the plumbing. It does not prove the conversation.
What is identical to a real call
- The worker starts the same workflow. A rehearsal uses no separate code path.
- The safety gate runs the same 13 checks.
- The impersonated providers sign their messages. The platform verifies those signatures normally.
- The messages use the same de-duplication keys.
- The same outcome resolution runs, in the same order.
- The platform writes the same tables.
The one exception in the gate
- Check 13 is the safety breaker.
- A rehearsal skips check 13.
- Without the exception, a rehearsal cannot test anything while a breaker is open.
- A breaker has been open since 4 September.
- The platform records
breakerBypassedForDryRunon the attempt. - A rehearsal can therefore never be mistaken for a live dial that passed the breaker.
What a rehearsal cannot test
- Real speech. A rehearsal has no audio, no accents and no background noise.
- Real network conditions. A rehearsal has no jitter and no packet loss.
- The provider concurrency limit. The impersonator has no limit.
- Rehearsals therefore reach 1,625% of the real ceiling of 20 concurrent calls.
- Real billing. The price per second is a constant in the simulator.
- No invoice ever arrives, so nothing can disagree with the platform record.
Read every current figure with this in mind. The platform has placed 4 real dials in total. Every other number on every dashboard comes from rehearsal traffic. Each one carries a label that says so.
Deployment pipeline — a rehearsal is the gate a change must pass before it can reach production.