# NexusGrid-CyberPhysEnv - OpenEnv Specification # Phase 2 HF Space-ready manifest with rubric discovery metadata. spec_version: 1 name: NexusGrid-CyberPhysEnv type: space runtime: fastapi app: server.app:app port: 8000 version: "2.0.0" description: > National power grid cyber-physical defense benchmark with DC power flow, deterministic SCADA spoofing, curriculum-ready task progression, and composable task rubrics for training and evaluation. tags: - openenv - critical-infrastructure - cybersecurity - energy - scada - reinforcement-learning tasks: - id: 0 name: smoke_test difficulty: trivial max_ticks: 3 baseline_score: 0.999 rubrics: - name: valid_dispatch weight: 1.0 description: Agent issues any valid positive dispatch action. - id: 1 name: duck_curve difficulty: easy max_ticks: 15 baseline_score: 0.999 rubrics: - name: avoid_collapse weight: 0.30 description: Grid frequency never crosses the 59.0Hz failure floor. - name: recover_nominal_band weight: 0.20 description: Frequency stays or recovers above 59.5Hz quickly. - name: hold_nominal_band weight: 0.42 description: Frequency remains inside the nominal band. - name: proactive_dispatch weight: 0.08 description: Dispatch support before the largest demand shock lands. - id: 2 name: cascade_overload difficulty: medium max_ticks: 20 baseline_score: 0.800 rubrics: - name: fault_isolation weight: 0.40 description: Open the correct breaker path to isolate the overload. - name: protect_critical_load weight: 0.40 description: Keep all critical loads energized throughout the response. - name: fast_restoration weight: 0.20 description: Restore service within eight ticks of the incident. - id: 3 name: phantom_inject difficulty: hard max_ticks: 18 baseline_score: 0.600 rubrics: - name: log_inspection weight: 0.10 description: Inspect packet behavior before trusting SCADA telemetry. - name: state_estimation weight: 0.20 description: Run a Kirchhoff consistency check and detect the anomaly. - name: correct_quarantine weight: 0.30 description: Quarantine the spoofed node after confirmation. - name: reroute_dispatch weight: 0.40 description: Redispatch generation after quarantine to stabilize load. - id: 4 name: stuxnet_resonance difficulty: very_hard max_ticks: 12 baseline_score: 0.400 rubrics: - name: counter_signal_attempted weight: 0.20 description: Attempt a counter-signal instead of cutting the turbine. - name: correct_frequency_match weight: 0.20 description: Match the resonance-canceling frequency offset. - name: target_ramp_down weight: 0.30 description: Ramp down the affected turbine after injection. - name: support_reroute weight: 0.30 description: Dispatch alternate support generation after mitigation. - id: 5 name: black_start difficulty: expert max_ticks: 50 baseline_score: 0.060 rubrics: - name: hydro_bootstrap weight: 0.25 description: Restart the hydro source to begin black start recovery. - name: secondary_energized weight: 0.25 description: Sustain a second energized node after hydro startup. - name: safe_islanding weight: 0.30 description: Form stable islands and complete a safe merger. - name: critical_restoration weight: 0.20 description: Restore all critical infrastructure after synchronization. observation_schema: GridObservation action_schema: GridAction reward_schema: GridReward hardware: max_vcpu: 2 max_memory_gb: 8 inference_timeout_seconds: 1200 baseline_model: deepseek-r1:8b