A scenario in DarkNOC isn't a script that pokes at one sim. It's a .doil file that describes an intent at the cascade level: "start a launch, watch how demand reacts, see if any incidents fire, see how the breach hub responds".
The cascade does the rest.
What goes in the file
A scenario file declares four things:
- Which sims to wire up. Not "all ten" — only the sims this scenario actually touches.
- The initial state. Subscriber counts, demand curves, coverage assumptions. Synthetic only.
- The intent timeline. What happens at minute 0, minute 5, minute 30 — campaign start, capacity threshold change, security event.
- Success conditions. What the loop should land on. Used by autoresearch to score.
A worked example
The launch-day scenario:
scenario LaunchDay
sims do
growth_launch_sim
crm_sim
demand_sim
end
initial do
subscribers: 1_200_000
demand_curve: :baseline
capacity: :nominal
end
timeline do
at :start do crm_sim.campaign(:awareness, weight: 0.7) end
at 5.minutes do demand_sim.spike(:moderate) end
at 30.minutes do crm_sim.campaign(:conversion, weight: 0.9) end
end
success do
net_adds >= 18_000
at_risk_share < 0.05
incidents_fired <= 2
end
endWhat the compiler emits
The compiler reads this and emits a scenario runner that:
- Pre-seeds
crm-simanddemand-simwith the initial state. - Schedules the timeline events as webtrigger calls into each sim.
- Subscribes to the consumer cascade —
growth-launch-simreadingcrm-simvia TMF v5.0 — so the compartmental model updates as the campaign runs. - Polls the success conditions after the timeline completes.
- Hands the scored result to autoresearch.
Why this matters
Most "simulation scripting" is glorified test harnesses. The DOIL scenario format is part of the language. Same syntax as agents, same compiler, same rollback semantics. A scenario is, in a real sense, just an agent whose actions happen against the Reality Twin instead of the live network.
That symmetry is the point. Author once, run against the twin, then point the same intent at production. The scenario was the rehearsal.
Next read: TMF v5.0 as a target — what the compiler emits for the signal-flow path.