{"schema":"kinwit.report.v1","case_id":"SIM-2026-0001","generated_by":"kinwit-facts/0.1.0 deterministic template (no AI)","banner":"SYNTHETIC DEMONSTRATION · SIMULATED DATA · NOT A REAL INCIDENT","sections":[{"id":"scope","title":"Scope of analysis","paragraphs":["Case SIM-2026-0001 (scenario s01-stop). Window: 14000.032 ms of robot recording on the ROBOT_ROS_TIME clock.","Sources: 9 robot topics (kinesim/0.1.0) and 72 facility controller records. Both sources are synthetic and were generated by logically separate components; neither is a physically independent witness."]},{"id":"chronology","title":"Recorded chronology","rows":[{"event_id":"E-002","t_ms":{"lo":199.953,"mid":200.003,"hi":200.053},"source_id":"robot-controller-sim","label":"Navigation goal executing","basis":"status publish time ± robot timestamp jitter"},{"event_id":"E-003","t_ms":{"lo":10997.461,"mid":11000.022,"hi":11002.583},"source_id":"facility-controller-sim","label":"Facility controller records zone safety input ESTOP-ZONE-B2 open","basis":"PLC scan timestamp: the input change happened up to one 4 ms scan earlier; mapped to the robot clock through the evidence-derived clock model"},{"event_id":"E-004","t_ms":{"lo":11002.074,"mid":11002.635,"hi":11003.196},"source_id":"facility-controller-sim","label":"Facility controller broadcasts stop request to zone approach group","basis":"send timestamp ± facility jitter and resolution; mapped to the robot clock through the evidence-derived clock model"},{"event_id":"E-005","t_ms":{"lo":11014.95,"mid":11017.5,"hi":11020.05},"source_id":"robot-controller-sim","label":"Robot safety I/O registers external stop input","basis":"input sampled by a 200 Hz poll: true arrival within one poll period before the stamp, ± jitter"},{"event_id":"E-006","t_ms":{"lo":11020.05,"mid":11020.1,"hi":11020.15},"source_id":"robot-controller-sim","label":"Robot safety controller starts Category-1 controlled stop","basis":"header stamp ± robot timestamp jitter"},{"event_id":"E-007","t_ms":{"lo":11049.945,"mid":11049.995,"hi":11050.045},"source_id":"robot-controller-sim","label":"Navigation goal aborted","basis":"status publish time ± robot timestamp jitter"},{"event_id":"E-008","t_ms":{"lo":11050,"mid":11050,"hi":11050},"source_id":"robot-controller-sim","label":"Zero velocity command recorded on /cmd_vel","basis":"MCAP publish time (Twist carries no header stamp)"},{"event_id":"E-009","t_ms":{"lo":11919.926,"mid":11929.973,"hi":11940.019},"source_id":"robot-controller-sim","label":"Odometry reports speed < 0.01 m/s held ≥ 200 ms","basis":"threshold crossing lies between the previous odometry sample and this one, ± jitter"},{"event_id":"E-010","t_ms":{"lo":12139.95,"mid":12140,"hi":12140.05},"source_id":"robot-controller-sim","label":"Robot safety controller reports drive power removed","basis":"header stamp ± robot timestamp jitter"}]},{"id":"facts","title":"Measured and derived facts","findings":[{"finding_id":"F-001","category":"observed_sequence","title":"Recorded sequence","statement":"E-003 Facility controller records zone safety input ESTOP-ZONE-B2 open → E-004 Facility controller broadcasts stop request to zone approach group → E-005 Robot safety I/O registers external stop input → E-008 Zero velocity command recorded on /cmd_vel → E-009 Odometry reports speed < 0.01 m/s held ≥ 200 ms. Each step is ordered within its stated uncertainty.","variables":{"E-003→E-004":"BEFORE","E-004→E-005":"BEFORE","E-005→E-008":"BEFORE","E-008→E-009":"BEFORE"},"formula":"pairwise interval relations along the chain","supporting_event_ids":["E-003","E-004","E-005","E-008","E-009"],"confidence_kind":"bounded_interval_under_assumptions","limitations":["event_order_is_not_causation","both_sources_are_synthetic"],"derived_by":"kinwit-facts/0.1.0"},{"finding_id":"F-002","category":"cross_source","title":"Facility stop broadcast vs. robot stop input","statement":"The facility stop broadcast (E-004) precedes the robot's recorded stop input (E-005) by 11.754 to 17.976 ms on the aligned timeline.","variables":{"relation":"BEFORE","delta_lo_ms":11.754,"delta_hi_ms":17.976},"formula":"Δ = [SI.lo − FB.hi, SI.hi − FB.lo] on the robot clock; BEFORE iff FB.hi < SI.lo (Allen 1983, interval 'before')","supporting_event_ids":["E-004","E-005"],"confidence_kind":"bounded_interval_under_assumptions","limitations":["clock_alignment_depends_on_assumptions_A1_A3","event_order_is_not_causation","both_sources_are_synthetic"],"derived_by":"kinwit-facts/0.1.0"},{"finding_id":"F-003","category":"cross_source","title":"Facility input change to robot stop input","statement":"Between the facility zone input change (E-003) and the robot stop input (E-005): 12.367 to 22.589 ms (before).","variables":{"relation":"BEFORE","delta_lo_ms":12.367,"delta_hi_ms":22.589},"formula":"Δ = [SI.lo − FI.hi, SI.hi − FI.lo]; FI interval includes one PLC scan of detection latency","supporting_event_ids":["E-003","E-005"],"confidence_kind":"bounded_interval_under_assumptions","limitations":["clock_alignment_depends_on_assumptions_A1_A3","plc_scan_latency_bound_is_declared_by_the_facility_source"],"derived_by":"kinwit-facts/0.1.0"},{"finding_id":"F-004","category":"derived_measurement","title":"Reported speed at stop input","statement":"Wheel odometry reports 1.196 m/s when the stop input is registered (E-005), interpolated between /odom samples #550 (1.202 m/s) and #551 (1.196 m/s).","variables":{"speed_mps":1.196,"before_sample_mps":1.202,"after_sample_mps":1.196,"odom_before_index":550,"odom_after_index":551},"formula":"linear interpolation of /odom twist.linear.x at the stop-input stamp","supporting_event_ids":["E-005"],"confidence_kind":"derived_from_recorded_values","limitations":["odometry_reports_wheel_motion_not_ground_truth","simulated_sensor_noise"],"derived_by":"kinwit-facts/0.1.0"},{"finding_id":"F-005","category":"derived_measurement","title":"Stop input to zero velocity command","statement":"The first zero velocity command (E-008) is recorded 30 ms after the stop input (E-005), same robot clock.","variables":{"latency_ms":30,"robot_jitter_bound_ms":0.05},"formula":"ZC.publish_time − SI.header.stamp (single clock domain; ± one jitter bound)","supporting_event_ids":["E-005","E-008"],"confidence_kind":"derived_from_recorded_values","limitations":["cmd_vel_has_no_header_stamp_publish_time_used","a_zero_command_is_not_physical_braking"],"derived_by":"kinwit-facts/0.1.0"},{"finding_id":"F-006","category":"derived_measurement","title":"Stop input to reported stationary","statement":"Odometry reports the robot stationary (E-009) 899.876 to 925.069 ms after the stop input (E-005). Reported travel in that window: 0.561 m; mean reported deceleration 1.3 m/s².","variables":{"delta_lo_ms":899.876,"delta_hi_ms":925.069,"reported_distance_m":0.561,"mean_decel_mps2":1.3,"odom_samples":47},"formula":"Δ = [ST.lo − SI.hi, ST.hi − SI.lo]; distance = Σ‖pᵢ − pᵢ₋₁‖ over /odom poses in [SI, ST]; decel = v(SI) / (ST − SI)","supporting_event_ids":["E-005","E-009"],"confidence_kind":"derived_from_recorded_values","limitations":["reported_by_odometry_not_physical_stopping_distance","stationary_threshold_is_a_configured_parameter","simulated_sensor_noise"],"derived_by":"kinwit-facts/0.1.0"},{"finding_id":"F-007","category":"derived_measurement","title":"Nearest lidar return when stationary","statement":"The /scan message nearest the reported stop (#119) has its closest return at 3.675 m, bearing -135° (robot frame).","variables":{"min_range_m":3.675,"bearing_deg":-135,"scan_index":119,"scan_byte_start":1107637},"formula":"argmin over LaserScan.ranges; bearing = angle_min + i·angle_increment","supporting_event_ids":["E-009"],"confidence_kind":"recorded_value","limitations":["simulated_lidar_ray_cast_not_a_real_sensor","a_return_is_not_an_identified_object","no_contact_sensor_present"],"derived_by":"kinwit-facts/0.1.0"},{"finding_id":"F-008","category":"context","title":"Robot position relative to the facility zone","statement":"At the stop input the odometry pose is (9.243, 5.291) m, 1.957 m outside the mapped boundary of ZONE-B2.","variables":{"odom_x_m":9.243,"odom_y_m":5.291,"zone_id":"ZONE-B2","distance_to_zone_m":1.957,"inside_zone":false},"formula":"Euclidean distance from /odom position to the zone rectangle in the recorded map attachment","supporting_event_ids":["E-005"],"confidence_kind":"derived_from_recorded_values","limitations":["no_localization_stack_odom_frame_assumed_equal_to_map_frame","zone_geometry_is_synthetic"],"derived_by":"kinwit-facts/0.1.0"},{"finding_id":"F-009","category":"clock","title":"Facility-to-robot clock offset (derived from evidence)","statement":"From 56 logged sync exchanges, the facility clock is 40.998 to 42.097 ms ahead of the robot clock at the stop input (width 1.1 ms); skew -66.044 to 144.1 ppm.","variables":{"offset_lo_ms":40.998,"offset_hi_ms":42.097,"width_ms":1.1,"skew_lo_ppm":-66.044,"skew_hi_ppm":144.1,"ls_offset_ms":41.591,"samples":56},"formula":"feasible region of θ(t)=a+b·t from strips θ(t0) ≤ t1−t0+ε, θ(t3) ≥ t2−t3−ε (RFC 5905 on-wire, Marzullo intersection); interval = min/max over polygon at t*","supporting_event_ids":["E-005"],"confidence_kind":"bounded_interval_under_assumptions","limitations":["assumes_A1_nonnegative_delay_A2_linear_drift_A3_declared_jitter","sync_exchanges_are_synthetic"],"derived_by":"kinwit-facts/0.1.0"},{"finding_id":"F-012","category":"observed_sequence","title":"Navigation goal outcome","statement":"The navigation goal is recorded as ABORTED (E-007); drive power removal is reported at E-010.","variables":{"goal_status":"ABORTED"},"formula":"action_msgs/GoalStatus.status == 6","supporting_event_ids":["E-007","E-010"],"confidence_kind":"recorded_value","limitations":["status_codes_do_not_explain_why"],"derived_by":"kinwit-facts/0.1.0"}]},{"id":"gaps","title":"Gaps and limitations","findings":[{"finding_id":"F-010","category":"coverage","title":"Source coverage and evidence gaps","statement":"2 of 2 expected sources present. Not present in this case: camera, physical contact sensor, person detection, and the identity of whatever opened the facility input.","variables":{"sources_present":2,"sources_expected":2,"camera":false,"contact_sensor":false,"person_detection":false},"formula":"count of manifest sources vs. scenario expectation; absence list is fixed per source kinds","supporting_event_ids":["E-003","E-005"],"confidence_kind":"absence_of_signal","limitations":["coverage_is_not_completeness"],"derived_by":"kinwit-facts/0.1.0"},{"finding_id":"F-011","category":"integrity","title":"Record continuity","statement":"/odom: 701 messages, largest gap 20.095 ms (nominal 20 ms). Facility log: 72 records, sequence contiguous, hash chain checked separately by the verifier.","variables":{"odom_messages":701,"odom_max_gap_ms":20.095,"facility_records":72,"facility_sequence_contiguous":true,"mcap_crc_validated":true},"formula":"max consecutive header-stamp difference; facility seq[i] == i","supporting_event_ids":[],"confidence_kind":"recorded_value","limitations":["continuity_does_not_prove_nothing_was_omitted_before_recording"],"derived_by":"kinwit-facts/0.1.0"}],"unknowns":["What opened the facility zone safety input (a person, a test, an equipment fault): the facility source records the input change, not its cause.","Whether any person or object was in the zone: no camera or person-detection source is present.","Whether physical contact occurred: no contact sensor is present, and a speed drop does not imply a collision.","Whether odometry matches the robot's true motion: there is no external ground-truth tracking source.","The true clock relationship outside assumptions A1–A3.","Cause, fault or responsibility. These are not assessed by KINWIT."]},{"id":"questions","title":"Questions for a human reviewer","items":["Was the zone safety input opened by a person, an automated test, or an equipment fault? A separate source (door sensor, camera, operator log) is needed.","Is the declared PLC scan cycle (and therefore the detection latency bound) correct for the real controller?","Is the safety-link path facility → robot I/O the only path that could have produced the robot's stop input?","Would a measured clock reference (PTP / GNSS) be available on site to tighten the alignment interval?"]},{"id":"non_attribution","title":"Non-attribution statement","paragraphs":["This report orders and measures recorded events. It does not determine cause, fault, liability, regulatory compliance or the accuracy of the underlying sensors. Event order is not causation."]}]}