The scenario was called "Full Orbit." It was the first scenario that touched all six twins simultaneously, and Justin had written the spec himself. One page. Twelve steps. Each step hit a different twin, and the outputs of each step fed the inputs of the next.
Step one: An agent provisions a new user in the Okta twin. Username, email, group memberships. The Okta twin returns a user ID and triggers a SCIM provisioning event.
Step two: The SCIM event propagates to the Jira twin. A new Jira user is created. The user is added to the Engineering project with the Developer role. A welcome ticket is created and assigned to them.
Step three: The Jira twin's webhook fires. The Slack twin receives the webhook payload and posts a notification to the #new-hires channel. The message uses Block Kit: a section block with the user's name and role, a divider, and an actions block with a "Welcome" button.
Step four: An agent creates a Google Doc in the Docs twin. The document title includes the new user's name. The body contains an onboarding checklist.
Step five: The agent shares the Doc via the Drive twin. The new user gets editor access. The user's manager gets commenter access. The HR shared drive gets a copy.
Step six: The agent logs the provisioning event in a Google Sheets twin workbook. A new row is added with the user's name, email, start date, provisioned services, and a timestamp.
Twelve steps. Six twins. One agent orchestrating the whole thing.
"Run it," Justin said.
Navan pressed enter. The terminal filled with structured output. Each twin logged its operations with timestamps. The Okta twin provisioned the user in forty-three milliseconds. The SCIM event fired. The Jira twin created the user and ticket in sixty-one milliseconds. The webhook fired. The Slack twin posted the notification. The Docs twin created the document. The Drive twin set permissions. The Sheets twin logged the row.
Total elapsed time: four hundred and twelve milliseconds.
"Against real services, that workflow takes about fourteen seconds," Jay said. "Mostly waiting for Okta's SCIM propagation delay and Jira's webhook delivery."
"Against real services, it also costs money," Navan added. "API calls to six services. Rate limit consumption on all of them. And if the scenario fails halfway through, you've created orphaned state in production that you have to clean up manually."
"Against the twins," Justin said, "you run it a thousand times and it costs nothing." He paused. "Run it a thousand times."
Navan adjusted the scenario runner configuration. Concurrency: 50. Iterations: 1,000. He pressed enter again.
The terminal became a waterfall. Fifty concurrent instances of Full Orbit, each provisioning a unique user, each touching all six twins. The twins handled the load without complaint. No rate limits. No throttling. No abuse detection. Just pure behavioral simulation at fifty times the concurrency anyone would dare attempt against production services.
Seven minutes later, the run completed. One thousand iterations. Zero failures. Every single trajectory satisfied every assertion in the scenario.
"Satisfaction score?" Justin asked.
"One hundred percent across one thousand iterations," Navan said. He sounded almost surprised.
Justin didn't look surprised. He looked like a gardener watching the first tomato turn red. Patient satisfaction with inevitable progress. "Now write a scenario that makes it fail," he said.
Jay was already thinking about race conditions in step five. The Drive twin and the Sheets twin both needed the Doc ID from step four. What if step six started before step five finished? What if the permission check in the Drive twin hadn't propagated when the Sheets twin tried to read the Doc metadata?
There were a thousand ways to make Full Orbit fail. Finding them was the point.
412 milliseconds for what takes 14 seconds in production. And then running it 1,000 times concurrently. This is why digital twins matter. Incredible scenario.