OSPREY E2E Scenarios
Two cross-paradigm scenarios. Tier ≥ 2 required (tier 1 lacks vacuum gauges and most cavity PVs in every paradigm).
A — SR07 vacuum burst
File: tests/e2e/test_vacuum_burst_scenario.py · pure telemetry, no logbook.
Operator prompt
"We lost about 5 mA of beam yesterday around 14:32. Did the vacuum do anything weird around then?"
Required PVs
SR:DIAG:DCCT:01:CURRENT:RB
SR:VAC:GAUGE:SR{01..12}:PRESSURE:RB (12 sectors)
Seeded event
| When | Wall-clock anchor 14:32:08 on the day before today (re-fires each day inside the window) |
| SR07 gauge | baseline 5×10−8 Torr + Gaussian spike, width 15 s, amplitude 1.5×10−7 |
| SR01–06,08–12 | flat baseline + small noise (SR07 leads the field in anti-correlation by >0.7) |
| DCCT | 500 mA baseline − 5 mA Gaussian dip (width 30 s) at the same instant |
| Target r | SR07 vs DCCT ≈ −0.88 over a 10-min window |
Source: data/simulation/machine.json (vacuum-burst scenario), synthesized by osprey.simulation.SimulationEngine.
Pass criteria
- Tool-routing: ≥1
mcp__channel-finder__*, ≥1 mcp__controls__archiver_read whose inputs reference a vacuum gauge (gauge/vac). DCCT is not required — the operator already reported the loss event with a timestamp.
- Judge: names "Sector 7" or "SR07" explicitly. Vague "a vacuum gauge somewhere" / "no anomaly" / a different sector = fail.
B — RF CAVITY01 thermal excursion
File: tests/e2e/test_rf_cavity_correlation_scenario.py · logbook + telemetry must converge.
Operator prompt
"The beam dumped this morning. Figure out what happened and plot the data."
Required PVs
SR:RF:CAVITY:01:{TEMPERATURE,POWER:FWD,POWER:REV,VOLTAGE,FREQUENCY}:RB
SR:RF:CAVITY:02:* (same fields — needed for CAVITY01-vs-CAVITY02 contrast)
Seeded telemetry (window-relative positions)
| CAVITY01 events | (0.20, 1.0), (0.55, 0.7), (0.85, 1.2) — three excursions, last worst |
| CAVITY01 temperature | 27.0 °C baseline + daily oscillation + envelope × 7 → peaks ~34 °C |
| CAVITY01 reflected power | 5 kW baseline + envelope × 80 → peaks ~85 kW |
| CAVITY01 forward power | 450 kW baseline − envelope × 440 → trips to ~0 |
| CAVITY01 voltage | 2.5 MV baseline − envelope × 2.4 |
| CAVITY01 frequency | 499.654 MHz − envelope × 0.001 (thermal detuning) |
| CAVITY02 (stable ref) | single minor blip (0.55, 0.25) on all fields, baseline ~26.5 °C |
Source: data/simulation/machine.json (rf-thermal scenario; events on the SR:RF:CAVITY:01 / SR:RF:KLYSTRON:01 channels), synthesized by osprey.simulation.SimulationEngine.
Seeded logbook (rebased to "now")
DEMO-026 | today−4 · 03:20 — beam dump, CAVITY01 reflected-power trip, names CAVITY02 unaffected |
DEMO-027 | today−3 · 10:00 — investigation, three thermal excursions, cooling-manifold blockage |
DEMO-028 | today−2 · 14:00 — repair, calcium-carbonate deposits, flow restored (rebase pivot) |
Pass criteria
- Tool-routing: ≥1
mcp__ariel__*, ≥1 mcp__channel-finder__*, ≥1 mcp__controls__archiver_read, archiver inputs reference cavity or rf, ≥1 plot tool (create_static_plot/create_interactive_plot/create_dashboard).
- Judge (a and b required, c is bonus):
- (a) commits to CAVITY01 / cavity 01 / first cavity
- (b) names the mechanism (thermal/cooling → reflected-power rise → forward-power trip)
- (c) bonus, not required: contrasts with CAVITY02 (stable)
Cross-scenario invariants
- Temporal separation: A's event lives at "yesterday 14:32"; B's logbook arc spans today−4 to today−2 morning — no window overlap.
- Decoy in logbook:
DEMO-001 mentions a Sector 4 vacuum spike (same magnitude as A) but rebases to ~17 days back — outside any "yesterday" window. DEMO-002 uses "Sector 7" in a magnet-temperature context, also 17 days back.
- CAVITY01 ↔ "01" bridge is natural-language only. No alias table; channel description says "cavity 01", logbook says "CAVITY01" — the agent must connect the flat device designator to the channel's device index.
Tier setting (critical). init_project in tests/e2e/sdk_helpers.py derives the tier from the preset's paradigm when none is passed (in_context → tier 1, otherwise tier 3); tier 1 contains no SR:VAC:GAUGE channels, so the vacuum agent cannot discover the gauges and spins without retrieving data. Both scenario tests therefore pass tier=3 explicitly so the full simulated facility is discoverable regardless of paradigm. If you clone these scenarios, do the same.