44#include < iostream>
55#include < limits>
66
7+ #include " raps/rollback_execution.hpp"
8+ #include " itl/itl_manager.hpp"
9+
710// =====================================================
811// Deterministic Safety Monitor (DSM)
912// =====================================================
@@ -25,8 +28,17 @@ constexpr double MAX_TCC_COUPLING_J = 1.0e+04;
2528// Failsafe parameters
2629constexpr double MIN_RESONANCE_AMPLITUDE_CUTOFF = 0.10 ;
2730
31+ // WNN Constraints
32+ constexpr double WNN_MAX_CURVATURE_PROXY = 5.0e-11 ;
33+ constexpr double WNN_MIN_OSCILLATORY_PREFACTOR = 0.85 ;
34+
2835} // namespace DSM_Config
2936
37+ struct WnnTelemetry {
38+ double curvature_proxy;
39+ double oscillatory_prefactor;
40+ };
41+
3042// =====================================================
3143// DSM Sensor Inputs (Independent Channels)
3244// =====================================================
@@ -55,6 +67,14 @@ class DeterministicSafetyMonitor {
5567
5668 int evaluateSafety (const DsmSensorInputs& inputs);
5769
70+ bool pollWnnAndEnforce (
71+ const WnnTelemetry& wnn_telem,
72+ ITLManager& itl_manager,
73+ const RollbackPlan* rollback_store,
74+ uint32_t rollback_count,
75+ PhysicsState& active_state_pointer
76+ );
77+
5878private:
5979 double last_estimated_Rmax_;
6080 bool safing_sequence_active_;
@@ -164,3 +184,26 @@ DeterministicSafetyMonitor::evaluateSafety(
164184
165185 return ACTION_NONE ;
166186}
187+
188+ inline bool
189+ DeterministicSafetyMonitor::pollWnnAndEnforce (
190+ const WnnTelemetry& wnn_telem,
191+ ITLManager& itl_manager,
192+ const RollbackPlan* rollback_store,
193+ uint32_t rollback_count,
194+ PhysicsState& active_state_pointer
195+ ) {
196+ if (wnn_telem.curvature_proxy > DSM_Config::WNN_MAX_CURVATURE_PROXY ||
197+ wnn_telem.oscillatory_prefactor < DSM_Config::WNN_MIN_OSCILLATORY_PREFACTOR ) {
198+
199+ // Breach detected! Log to ITL and execute immediate rollback
200+ itl_manager.log_wnn_rollback_event (wnn_telem.curvature_proxy , wnn_telem.oscillatory_prefactor );
201+
202+ return trigger_wnn_immediate_rollback (
203+ rollback_store,
204+ rollback_count,
205+ active_state_pointer
206+ );
207+ }
208+ return false ; // No breach
209+ }
0 commit comments