Findings — implementation gaps

Behaviour the spec requires that the code does not implement.

A Finding is a slot the specification asked for but the code does not implement (no clamp, no validation, no fault gating, a defect). It is reported here as an honest gap — not injected into the requirement set. 100 findings across 10 modules.
#ModuleRequirementAxisMissing value / behaviourEvidence
1commsREQ-COM-003Saturation / Clampingmax_latency_clamp_ms — upper saturation limit for reported latency to prevent overflow artifactsMISSING: The requirement mandates clamping latency_ms_ to prevent overflow artifacts, but the code performs no upper saturation. A clamp is absent.
2commsREQ-COM-003Saturation / Clampingmax_age_clamp_ms — upper saturation limit for frame age to prevent overflow artifactsMISSING: The requirement mandates clamping time_since_last_valid_frame to prevent overflow artifacts, but the code performs no upper saturation. A clamp is absent.
3commsREQ-COM-007Resource Limitsmax_window_size — maximum number of sequence numbers tracked in the sliding window for loss calculationMISSING: The requirement mandates a bounded sliding window for packet loss estimation, but the code uses unbounded lifetime counters. No window size limit exists.
4commsREQ-COM-007Resource Limitsmax_tracked_gaps — maximum number of sequence gaps that can be tracked simultaneouslyMISSING: The requirement mandates bounding the number of tracked gaps, but the code does not maintain a gap collection — it only maintains aggregate counters. No gap tracking structure exists.
5safetyREQ-SAF-001Input Domainmin_speed_mps — Minimum admissible speed value (likely 0.0 m/s)The code checks pose validity and confidence but does NOT validate speed against a minimum bound. No min_speed check exists in any safety module.
6safetyREQ-SAF-001Input Domainmax_speed_mps — Maximum admissible speed value for validity checkingThe code does NOT validate speed against a maximum bound anywhere in the safety modules. Speed validation for admissibility is absent.
7safetyREQ-SAF-002Output Domainmin_decel_mps2 — Minimum (least aggressive) deceleration valueThe code assigns deceleration values but does NOT validate bus.safe_stop_.target_decel_mps2 against any bounds. No range checking is performed.
8safetyREQ-SAF-002Output Domainmax_decel_mps2 — Maximum (most aggressive) deceleration valueThe code does NOT validate bus.safe_stop_.target_decel_mps2 against a maximum bound. Range checking is absent.
9safetyREQ-SAF-003Saturation / Clampingmin_distance_m — Minimum distance to boundary (non-negative requirement)The code computes distance (line 38-43) but does NOT clamp it to a minimum. No clamping operation exists for distance_to_boundary_m.
10safetyREQ-SAF-003Saturation / Clampingmin_safe_decel_mps2 — Minimum safe stop decelerationThe code does NOT clamp bus.safe_stop_.target_decel_mps2 to any minimum. No clamping logic exists.
11safetyREQ-SAF-003Saturation / Clampingmax_safe_decel_mps2 — Maximum safe stop decelerationThe code does NOT clamp bus.safe_stop_.target_decel_mps2 to any maximum. Clamping is absent.
12safetyREQ-SAF-006Timingstandstill_duration_cycles — Number of cycles vehicle must remain below standstill speedThe E-stop release checks standstill in a single cycle (line 45) without requiring it to persist for multiple cycles. Duration-based debouncing is absent.
13supervisionREQ-SUP-001Input Domaingeofence_distance_min_m — Minimum physically valid distance to geofence boundary (may be negative for breach)The code does not validate or enforce a minimum value for geofence_.distance_to_boundary_m_. Negative values (breach depth) are implied by the requirement text but not range-checked in the code. This is a missing input validation.
14supervisionREQ-SUP-001Input Domaingeofence_distance_max_m — Maximum physically valid distance to geofence boundaryNo maximum bound check on geofence_.distance_to_boundary_m_ is present. The code does not enforce or validate an upper limit.
15supervisionREQ-SUP-001Input Domainspeed_max_mps — Maximum valid vehicle speed from sensor or physical limitNo maximum speed validation is performed on pose_.speed_mps_ or plausible_command_.speed_mps_. The code does not enforce an upper limit.
16supervisionREQ-SUP-003Saturation / Clampinginit_cycles_max — Maximum value for init_cycles_ counter before saturation (e.g., UINT32_MAX or a practical limit)The requirement calls for saturation of init_cycles_, but the code (line 49) increments without bound. If the system remains in init state indefinitely, init_cycles_ will overflow. No saturation is implemented.
17supervisionREQ-SUP-005Fault / Error Reactionmode_on_invalid_input — Operating mode to enter on invalid input detection (likely emergency or fault)The requirement specifies detection and response to invalid/out-of-domain inputs, but no such validation is implemented in the supervision module. This is a missing safety feature.
18supervisionREQ-SUP-005Fault / Error Reactiondegradation_on_invalid_input — Degradation level to set on invalid input detection (likely safe_stop_only)No degradation response to invalid input is implemented because no input validation exists (see mode_on_invalid_input).
19supervisionREQ-SUP-006Timingstandstill_confirmation_cycles — Number of consecutive low-speed cycles required to confirm standstill stateThe requirement asks for standstill confirmation over multiple cycles, but the code evaluates it as a single-cycle boolean condition. No debounce or cycle-counting logic exists.
20supervisionREQ-SUP-007Resource Limitsmax_monitored_modules_limit — Maximum number of modules that can be monitored (design or resource constraint)The code does not enforce or validate a maximum limit on the number of monitored modules. No configuration rejection or resource limit check is present.
21supervisionREQ-SUP-008Stateinit_entry_action — Action performed on init state entry (reset init_cycles_ to 0 per state machine)The code increments init_cycles_ but never resets it on init state entry. If the system re-enters init after leaving it, init_cycles_ will retain its old value, breaking the self-test logic. Entry action is missing.
22commandREQ-COM-002Output Domainmin_output_speed_mps — Minimum (most negative) speed setpoint output, corresponding to maximum reverseDEFECT: motion_setpoint_.target_speed_mps_ is NOT clamped to any range. The setpoint_generator only applies acceleration-based smoothing (lines 17-24) but does not enforce output limits. The value can be any result of the accel/decel banding.
23commandREQ-COM-002Output Domainmax_output_speed_mps — Maximum forward speed setpoint outputDEFECT: motion_setpoint_.target_speed_mps_ is NOT clamped to any range. The setpoint_generator only applies acceleration-based smoothing but does not enforce output limits.
24commandREQ-COM-002Output Domainmin_output_yaw_radps — Minimum (most negative) yaw rate setpoint outputDEFECT: motion_setpoint_.target_yaw_rate_radps_ is passed through directly from arbitrated_command_ with no range limiting. No output clamp is applied.
25commandREQ-COM-002Output Domainmax_output_yaw_radps — Maximum yaw rate setpoint outputDEFECT: motion_setpoint_.target_yaw_rate_radps_ is passed through directly with no range limiting.
26commandREQ-COM-006Timingcommand_staleness_timeout_ms — Maximum age of remote_command_ before considered staleDEFECT: Command staleness detection is NOT implemented. The module checks command_authentic_ and remote_command_.valid_ flags but does not track or enforce any timeout for stale commands. No timestamp comparison or age checking exists.
27commandREQ-COM-006Timingstale_command_plausible_value — Value of plausible_ flag when command input is staleDEFECT: Since staleness detection is absent, this value cannot be determined from the code. If staleness were detected, the pattern suggests it would be false (consistent with other fault conditions).
28actuationREQ-ACT-001Input Domainmin_accel_mps2 — Minimum admissible longitudinal acceleration input (typically negative for deceleration)No input validation or range check is performed on limited_motion_.limited_accel_mps2_. The code silently clamps negative values to zero for drive (line 28) and inverts/clamps for brake (line 17), but does not reject or validate the input range itself. The acceptance range is not enforced.
29actuationREQ-ACT-001Input Domainmax_accel_mps2 — Maximum admissible longitudinal acceleration inputNo upper bound validation on limited_accel_mps2 is present. The code accepts any positive value without clamping or rejection. The acceptance range upper limit is not enforced.
30actuationREQ-ACT-001Input Domainmin_steering_input_rad — Minimum admissible steering angle input (typically negative for left)No input validation on limited_motion_.limited_steering_rad_ before clamping. The code clamps to ±max_steering_rad_ but does not validate or reject inputs outside an acceptance range. Input validation is absent.
31actuationREQ-ACT-001Input Domainmax_steering_input_rad — Maximum admissible steering angle input (typically positive for right)No input validation on limited_motion_.limited_steering_rad_ before clamping. The code clamps to ±max_steering_rad_ but does not validate or reject inputs outside an acceptance range. Input validation is absent.
32actuationREQ-ACT-001Input Domainmin_safe_stop_decel_mps2 — Minimum admissible safe-stop deceleration (typically zero or slightly negative)No validation on safe_stop_.target_decel_mps2_ is performed. The value is used directly in max() comparison without range checking. Input acceptance range is not enforced.
33actuationREQ-ACT-001Input Domainmax_safe_stop_decel_mps2 — Maximum admissible safe-stop deceleration magnitudeNo upper bound validation on safe_stop_.target_decel_mps2_. The value is accepted and used without limit checking. Input acceptance range upper limit is not enforced.
34actuationREQ-ACT-002Output Domainmax_drive_torque_nm — Maximum motor torque commandNo upper limit is applied to motor_torque_nm or drive_torque_request_nm_. The computed torque from unclamped acceleration is passed through without saturation. Output range upper bound is not enforced.
35actuationREQ-ACT-002Output Domainmax_brake_force_n — Maximum brake forceNo upper saturation on brake_force_n. The computed force from unclamped deceleration (including emergency_decel_mps2_ from calibration) is used directly without limit checking. Output range upper bound is not enforced.
36actuationREQ-ACT-003Saturation / Clampingmax_brake_force_limit_n — Upper saturation limit for brake force commandNo saturation limit is applied to brake_force_request_n_ or actuator_command_.brake_force_n_. The requirement specifies a max limit, but the code does not enforce one. This is the same finding as max_brake_force_n.
37localizationREQ-LOC-001Input Domainmin_tick_ms — minimum valid system timestamp in millisecondsNo validation of tick_ms_ bounds is performed. The code reads bus.tick_ms_ and performs arithmetic (subtraction, division) without checking minimum value. Missing input validation for timestamp lower bound.
38localizationREQ-LOC-001Input Domainmax_tick_ms — maximum valid system timestamp in milliseconds (typically uint64_t max or practical system limit)No validation of tick_ms_ bounds is performed. The code reads bus.tick_ms_ and performs arithmetic without checking maximum value. Missing input validation for timestamp upper bound.
39localizationREQ-LOC-001Input Domainmin_encoder_ticks — minimum valid encoder tick count valueNo validation of encoder tick range. inject_ticks() directly assigns left_ticks_ and right_ticks_ without checking bounds. Missing input validation for encoder minimum value.
40localizationREQ-LOC-001Input Domainmax_encoder_ticks — maximum valid encoder tick count valueNo validation of encoder tick range. inject_ticks() directly assigns left_ticks_ and right_ticks_ without checking bounds. Missing input validation for encoder maximum value.
41localizationREQ-LOC-001Input Domainmin_yaw_rate — minimum valid IMU yaw rate in radians per secondNo validation of IMU yaw rate range. inject_imu() directly assigns latest_ without checking yaw_rate_radps_ bounds. Missing input validation for yaw rate minimum.
42localizationREQ-LOC-001Input Domainmax_yaw_rate — maximum valid IMU yaw rate in radians per secondNo validation of IMU yaw rate range. inject_imu() directly assigns latest_ without checking yaw_rate_radps_ bounds. Missing input validation for yaw rate maximum.
43localizationREQ-LOC-001Input Domainmin_speed — minimum valid odometry speed valueNo validation of computed speed range. speed_mps_ is computed as ds_m / dt_s and assigned to out.speed_mps_ without checking bounds. Missing output validation for minimum speed.
44localizationREQ-LOC-001Input Domainmax_speed — maximum valid odometry speed valueNo validation of computed speed range. speed_mps_ is computed as ds_m / dt_s and assigned to out.speed_mps_ without checking bounds. Missing output validation for maximum speed.
45localizationREQ-LOC-002Output Domainmin_x_position — minimum valid x coordinate in metersNo range specification for x position. x_m_ is integrated via x_m_ += ds_m * std::cos(heading_rad_) and assigned to out.x_m_ without bounds validation. Missing output range constraint.
46localizationREQ-LOC-002Output Domainmax_x_position — maximum valid x coordinate in metersNo range specification for x position. x_m_ is integrated via x_m_ += ds_m * std::cos(heading_rad_) and assigned to out.x_m_ without bounds validation. Missing output range constraint.
47localizationREQ-LOC-002Output Domainmin_y_position — minimum valid y coordinate in metersNo range specification for y position. y_m_ is integrated via y_m_ += ds_m * std::sin(heading_rad_) and assigned to out.y_m_ without bounds validation. Missing output range constraint.
48localizationREQ-LOC-002Output Domainmax_y_position — maximum valid y coordinate in metersNo range specification for y position. y_m_ is integrated via y_m_ += ds_m * std::sin(heading_rad_) and assigned to out.y_m_ without bounds validation. Missing output range constraint.
49localizationREQ-LOC-002Output Domainmax_pose_speed — maximum valid pose speed valueNo maximum speed constraint is enforced. pose speed is assigned directly from odometry without clamping. Missing output range constraint for maximum speed.
50localizationREQ-LOC-003Saturation / Clampingclamp_min_x — lower clamp limit on x position in metersNo clamping of x position is performed. x_m_ is updated via integration and directly assigned to out.x_m_ without any clamp operation. Missing output clamping behavior.
51localizationREQ-LOC-003Saturation / Clampingclamp_max_x — upper clamp limit on x position in metersNo clamping of x position is performed. x_m_ is updated via integration and directly assigned to out.x_m_ without any clamp operation. Missing output clamping behavior.
52localizationREQ-LOC-003Saturation / Clampingclamp_min_y — lower clamp limit on y position in metersNo clamping of y position is performed. y_m_ is updated via integration and directly assigned to out.y_m_ without any clamp operation. Missing output clamping behavior.
53localizationREQ-LOC-003Saturation / Clampingclamp_max_y — upper clamp limit on y position in metersNo clamping of y position is performed. y_m_ is updated via integration and directly assigned to out.y_m_ without any clamp operation. Missing output clamping behavior.
54localizationREQ-LOC-006Timingnon_monotonic_tick_behavior — behavior when tick_ms_ is non-monotonic: clamp dt, skip update, error flagNo validation is performed for non-monotonic tick_ms_. If tick_ms_ decreases, dt will be negative, potentially causing incorrect integration. Missing input validation for timestamp monotonicity.
55localizationREQ-LOC-006Timingvalidity_debounce_count — number of consecutive cycles required to confirm sensor validity state changeSensor validity flags are set/cleared immediately based on current conditions without any debounce counter. No multi-cycle confirmation logic is present. Missing debounce mechanism.
56localizationREQ-LOC-007Resource Limitsalive_counter_min_index — minimum valid index for alive_counters_ arrayNo bounds validation is performed on the alive_counters_ array access. The code assumes module_id::localization is a valid index but does not verify lower bound. Missing bounds checking.
57localizationREQ-LOC-007Resource Limitsalive_counter_max_index — maximum valid index for alive_counters_ arrayNo bounds validation is performed on the alive_counters_ array access. The code assumes module_id::localization is a valid index but does not verify upper bound. Missing bounds checking.
58localizationREQ-LOC-008Statestate_after_first_valid_sensor — module state after first valid sensor injection (e.g., INITIALIZED, RUNNING)The code has no explicit state machine or state enumeration. The have_last_ flag (line 24) tracks whether dt can be computed, but no formal state transition occurs after first valid sensor data. Missing state management behavior.
59localizationREQ-LOC-008Statestate_reset_values — values to which pose state is reset (x, y, heading, confidence)No state reset mechanism is implemented. Once initialized, x_m_, y_m_, and heading_rad_ are only updated via integration; no code path resets them to initial or other values. Missing reset capability.
60localizationREQ-LOC-008Statestate_reset_condition — condition under which pose state is reset (e.g., external command, prolonged invalidity)No state reset mechanism is implemented. There is no condition under which pose state is reset. Missing reset trigger logic.
61motion_controlREQ-MOT-001Input Domainmin_pose_speed_mps — Minimum admissible pose speed feedback valueThe code does not validate or clamp pose_.speed_mps_. The requirement asks for an 'admissible range' but the implementation accepts any value without range checks. This is a missing input validation.
62motion_controlREQ-MOT-001Input Domainmax_pose_speed_mps — Maximum admissible pose speed feedback valueNo upper-bound validation on pose_.speed_mps_. The module does not enforce any admissible range on the feedback signal; it trusts the input unconditionally.
63motion_controlREQ-MOT-001Input Domainmin_imu_yaw_rate_radps — Minimum admissible IMU yaw rate feedback valueThe code does not validate or clamp imu_.yaw_rate_radps_. The requirement implies an admissible range, but the implementation does not enforce it.
64motion_controlREQ-MOT-001Input Domainmax_imu_yaw_rate_radps — Maximum admissible IMU yaw rate feedback valueNo upper-bound validation on imu_.yaw_rate_radps_. Missing input validation.
65motion_controlREQ-MOT-005Fault / Error Reactiondegradation_envelope_formula — Mapping from degradation level to max_accel, max_decel, max_yaw_rate envelopesThe requirement asks for 'degradation-dependent acceleration and yaw rate envelopes' but the code only adjusts the speed envelope. Acceleration and yaw rate limits remain constant regardless of degradation level. This is a missing feature.
66motion_controlREQ-MOT-005Fault / Error Reactionfailsafe_accel_mps2 — Safe acceleration command on invalid input (expected: zero or gentle decel)The code does not check for invalid input signals (NaN, out-of-range, stale timestamps). No failsafe acceleration value is output on invalid input. This is a missing safety feature.
67motion_controlREQ-MOT-005Fault / Error Reactionfailsafe_steering_rad — Safe steering command on invalid input (expected: zero or hold)The code does not output a failsafe steering command on invalid input. No input validation is present. This is a missing safety feature.
68motion_controlREQ-MOT-005Fault / Error Reactioninvalid_input_condition — Condition defining invalid inputs (e.g., NaN, out-of-range, stale timestamp)The code does not define or check for any invalid input condition (NaN, out-of-range, stale timestamp). Input signals are trusted unconditionally. This is a missing safety feature.
69motion_controlREQ-MOT-007Resource Limitsspeed_integral_min — Lower bound on speed PID integral accumulator to prevent underflowThe code does not explicitly bound the integral accumulator. Anti-windup prevents further accumulation when saturated, but the integral_ variable itself has no min/max clamp. If the error remains persistently negative before saturation, integral_ can underflow. Missing explicit integral bounds.
70motion_controlREQ-MOT-007Resource Limitsspeed_integral_max — Upper bound on speed PID integral accumulator to prevent overflowNo explicit upper bound on the integral accumulator. The anti-windup logic conditionally prevents accumulation but does not clamp the integral term itself. Missing explicit integral bounds.
71motion_controlREQ-MOT-007Resource Limitssteer_integral_min — Lower bound on steering PID integral accumulator to prevent underflowNo explicit lower bound on steering PID integral accumulator. Same finding as speed_integral_min.
72motion_controlREQ-MOT-007Resource Limitssteer_integral_max — Upper bound on steering PID integral accumulator to prevent overflowNo explicit upper bound on steering PID integral accumulator. Same finding as speed_integral_max.
73perceptionREQ-PER-001Input Domainmin_ego_speed_mps — minimum admissible ego vehicle speed (expected 0.0 per AOU-003)No minimum speed validation exists in the code. The module unconditionally uses pose_.speed_mps_ (line 16: 'const float ego_speed = bus.pose_.speed_mps_;') with no lower-bound check. This is a missing input validation requirement.
74perceptionREQ-PER-001Input Domainmax_ego_speed_mps — maximum admissible ego vehicle speed for validity checkNo maximum speed validation exists in the code. The module unconditionally uses pose_.speed_mps_ with no upper-bound check or clamp. This is a missing input validation requirement.
75perceptionREQ-PER-001Input Domainmax_tick_backwards_ms — maximum allowable backwards jump in system timestamp before triggering faultNo tick monotonicity validation exists. The code performs unsigned subtraction (line 28) which will underflow if tick_ms_ goes backwards. No fault is raised for non-monotonic timestamps. This check is absent.
76perceptionREQ-PER-002Output Domainmax_obstacle_range_m — maximum LiDAR detection range for obstaclesNo maximum range validation. The code accepts any positive range value from the LiDAR scan without an upper limit check. This is a missing sensor-range validation (LiDAR max detection range should be enforced).
77perceptionREQ-PER-002Output Domainmin_bearing_rad — minimum bearing angle (likely -π or -π/2)No bearing range validation. The code uses bearing_rad_ from lidar_point_t without checking if it lies in a valid angular range (e.g., [-π, π]). This is a missing input validation.
78perceptionREQ-PER-002Output Domainmax_bearing_rad — maximum bearing angle (likely +π or +π/2)No bearing range validation. The code uses bearing_rad_ from lidar_point_t without checking if it lies in a valid angular range. This is a missing input validation.
79perceptionREQ-PER-003Saturation / Clampingttc_clamp_max_s — upper saturation limit for time-to-collision to avoid infinityNo TTC clamping. The code computes ttc and takes the minimum but never clamps to prevent arbitrarily large values when closing_speed is very small. The requirement asks for a max clamp; this is absent.
80perceptionREQ-PER-003Saturation / Clampingmin_relative_speed_mps — lower clamp on relative speed (negative = approaching)No lower clamp on relative_speed. The code computes relative_speed from range deltas (line 113) with no bounds checking. Negative values (approaching) are allowed without limit.
81perceptionREQ-PER-003Saturation / Clampingmax_relative_speed_mps — upper clamp on relative speed (positive = receding)No upper clamp on relative_speed. The code computes relative_speed from range deltas with no bounds checking. Positive values (receding) are allowed without limit.
82perceptionREQ-PER-005Fault / Error Reactionimminent_default_on_fault — safe default value for imminent flag when sensor is faultedThe collision predictor does not gate its outputs on sensor status. It unconditionally processes obstacles regardless of lidar_status_ (failed/stale). There is no safe-default logic for collision_.imminent when the sensor is faulted. This is a missing fault-handling requirement.
83perceptionREQ-PER-005Fault / Error Reactionobstacle_list_fault_behavior — action taken on obstacle list during fault (e.g., 'clear', 'freeze', 'mark_unconfirmed')The obstacle detector does not check lidar_status_ before processing the scan. When the sensor is failed/stale, it still attempts to cluster and track. There is no fault-gating logic to clear, freeze, or mark obstacles as unconfirmed during sensor faults. This is a missing fault-handling requirement.
84perceptionREQ-PER-007Resource Limitsoverflow_behavior_scan — action when max_lidar_points reached (e.g., 'truncate', 'reject_scan', 'subsample')No overflow protection on lidar_scan_. The code copies the injected scan unconditionally (line 26) and processes it without checking against max_lidar_points. If the scan exceeds the expected limit, the code will process all points (subject to clustering capacity limits). There is no truncate/reject/subsample logic for oversized scans.
85perceptionREQ-PER-009Concurrencyreentrancy_policy — reentrancy handling (e.g., 'not_reentrant_error', 'not_reentrant_ignored', 'reentrant_safe')The code has no reentrancy protection. All three perception classes maintain mutable state (tracks_, latest_scan_, injected_, etc.) that would be corrupted by concurrent or reentrant calls to run() or inject_scan(). There is no error detection or handling for reentrancy. This is a missing concurrency safety requirement.
86power_managementREQ-PWR-002Output Domainoutput_min_voltage_v — Minimum voltage value reported in power status outputsThe code does NOT bound/clamp the output voltage values in power_main_.voltage_v_ or power_backup_.voltage_v_. The evaluate() function (line 17) directly passes through the input voltage without saturation limits. There is no minimum output voltage constraint implemented.
87power_managementREQ-PWR-002Output Domainoutput_max_voltage_v — Maximum voltage value reported in power status outputsThe code does NOT bound/clamp the output voltage values in power_main_.voltage_v_ or power_backup_.voltage_v_. The evaluate() function (line 17) directly passes through the input voltage without saturation limits. There is no maximum output voltage constraint implemented.
88power_managementREQ-PWR-003Saturation / Clampingclamp_min_v — Lower saturation limit for voltage measurementsThe code does NOT implement voltage clamping/saturation. When voltage measurements exceed physical rail limits, the raw values are passed through unchanged to the output. No minimum clamp is applied before fault detection or output publication.
89power_managementREQ-PWR-003Saturation / Clampingclamp_max_v — Upper saturation limit for voltage measurementsThe code does NOT implement voltage clamping/saturation. When voltage measurements exceed physical rail limits, the raw values are passed through unchanged to the output. No maximum clamp is applied before fault detection or output publication.
90cyclic_schedulerREQ-CYC-003Saturation / Clampingmax_registered_tasks — Maximum number of tasks that can be registered with the schedulerNo upper bound is enforced. The code does not reject registration when a limit is reached; the requirement specifies rejection behavior that is absent.
91cyclic_schedulerREQ-CYC-003Saturation / Clampingmax_tasks_per_tick — Maximum number of task callbacks executed in a single tick (may equal max_registered_tasks or be separately limited)No per-tick execution limit is enforced. The code executes all due tasks without limiting the count, contradicting the requirement.
92cyclic_schedulerREQ-CYC-004Sign / Unitshz_to_ms_formula — Formula to convert frequency in Hz to period in milliseconds (e.g., period_ms = 1000 / freq_hz)The requirement specifies Hz-to-ms conversion, but the code provides no frequency parameter or conversion logic. Feature is absent.
93cyclic_schedulerREQ-CYC-005Fault / Error Reactionfault_log_destination — Destination for logging task callback exceptions (likely faults_ output)No exception handling exists around task callback invocation. The requirement mandates catching exceptions and logging faults, but this is entirely absent.
94cyclic_schedulerREQ-CYC-005Fault / Error Reactiontask_fault_status — The status value assigned to a task that has thrown an exceptionNo status field or fault marking mechanism exists. The required behavior is not implemented.
95cyclic_schedulerREQ-CYC-005Fault / Error Reactionfault_task_policy — Policy determining whether a faulted task is skipped once or permanently disabledNo fault handling policy (skip/disable) is implemented because no exception handling exists.
96cyclic_schedulerREQ-CYC-005Fault / Error Reactionuninitialized_bus_error_code — Error code returned when run_tick is called with uninitialized signal_bus_tNo error return mechanism exists (void return type) and no bus initialization validation is performed. The required error code cannot be returned.
97cyclic_schedulerREQ-CYC-006Timingmax_tick_execution_time_ms — Maximum allowed execution time for all tasks in a single tick (per AOU-002)No timing budget or max execution time enforcement exists. The requirement specifies completion within a deadline, but no such mechanism is implemented.
98cyclic_schedulerREQ-CYC-008Stateuninitialized_state — Initial state before signal_bus_t initialization (per AOU-004)The requirement specifies state enforcement (uninitialized, registration, running), but no state variable or transitions exist in the scheduler implementation.
99cyclic_schedulerREQ-CYC-008Stateregistration_state — State after initialization where task registration is allowed (per AOU-005)No state tracking or state-based registration gating is implemented.
100cyclic_schedulerREQ-CYC-008Staterunning_state — State after first run_tick() where execution occurs and registration is prohibitedNo state enforcement preventing registration after execution begins.