feat(sim): rutster-sim crate skeleton + Scenario/ScenarioStep types (slice-4½ S1)

The critical-path foundation for the benchmark + simulation harness.
Scenario is a TOML-deserializable scripted-caller data type; ScenarioStep
covers speak_loud / speak_quiet / pause / await_reply / end. Determinism is
the point -- reproducible thresholds in CI (ADR-0010). All other sim
modules land as stubs here + fill in across S2-S7. Threshold consts
(BARGE_IN_KILL_TIME_P99_MS = 80.0, MOUTH_TO_EAR_P99_MS = 700.0,
TICK_LAG_MAX_MS = 10.0, TICK_OVERRUN_PCT_MAX = 1.0, SWEEP_CONCURRENCIES =
[1,10,50]) land now per the plan's S1 step 2 note (used by S5/S6/S7 wiring).

Adds toml = 0.8 to workspace.dependencies (the first consumer; spec §1.1
claim of pre-existing membership was inaccurate).

Task S1 of slice-4½ -- everything else depends on this landing.

Signed-off-by: Aaron D. Lee <himself@adlee.work>
This commit is contained in:
2026-07-05 02:55:32 -04:00
parent f8a8a2c21f
commit dc5a605535
11 changed files with 560 additions and 4 deletions

View File

@@ -6,13 +6,14 @@
resolver = "2"
members = [
"crates/rutster",
"crates/rutster-brain-realtime",
"crates/rutster-call-model",
"crates/rutster-media",
"crates/rutster-trunk",
"crates/rutster-sim",
"crates/rutster-spend",
"crates/rutster-tap",
"crates/rutster-tap-echo",
"crates/rutster-brain-realtime",
"crates/rutster-spend",
"crates/rutster-trunk",
]
[workspace.package]
@@ -59,3 +60,7 @@ async-trait = "0.1"
# client sends before WS upgrade; `openai_client::openai_headers` produces
# the header pairs the caller stuffs into it.
http = "1"
# toml 0.8: TOML deserialization for the slice-4½ sim-crate's Scenario files
# (crates/rutster-sim/scenarios/*.toml). The first consumer of `toml` in
# the workspace; declared here so future members share the version pin.
toml = "0.8"