{
  "schema": "kinwit.facts.v1",
  "case_id": "SIM-2026-0004",
  "engine": "kinwit-facts/0.1.0",
  "analysis_status": "INCOMPLETE",
  "cross_source_ordering": "UNAVAILABLE",
  "findings": [
    {
      "finding_id": "F-001",
      "category": "observed_sequence",
      "title": "Recorded sequence",
      "statement": "E-003 Robot safety I/O registers external stop input → E-006 Zero velocity command recorded on /cmd_vel → E-007 Odometry reports speed < 0.01 m/s held ≥ 200 ms. Each step is ordered within its stated uncertainty.",
      "variables": {
        "E-003→E-006": "BEFORE",
        "E-006→E-007": "BEFORE"
      },
      "formula": "pairwise interval relations along the chain",
      "supporting_event_ids": [
        "E-003",
        "E-006",
        "E-007"
      ],
      "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": "derived_measurement",
      "title": "Reported speed at stop input",
      "statement": "Wheel odometry reports 1.196 m/s when the stop input is registered (E-003), 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-003"
      ],
      "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-003",
      "category": "derived_measurement",
      "title": "Stop input to zero velocity command",
      "statement": "The first zero velocity command (E-006) is recorded 30 ms after the stop input (E-003), 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-003",
        "E-006"
      ],
      "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-004",
      "category": "derived_measurement",
      "title": "Stop input to reported stationary",
      "statement": "Odometry reports the robot stationary (E-007) 899.876 to 925.069 ms after the stop input (E-003). 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-003",
        "E-007"
      ],
      "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-005",
      "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-007"
      ],
      "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-006",
      "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-003"
      ],
      "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-007",
      "category": "clock",
      "title": "Clock offset uncalibrated",
      "statement": "No facility source is present, so no clock relationship can be derived. Cross-source ordering is not reported.",
      "variables": {
        "status": "UNCALIBRATED"
      },
      "formula": "n/a",
      "supporting_event_ids": [],
      "confidence_kind": "absence_of_signal",
      "limitations": [
        "no_cross_source_ordering"
      ],
      "derived_by": "kinwit-facts/0.1.0"
    },
    {
      "finding_id": "F-008",
      "category": "coverage",
      "title": "Source coverage and evidence gaps",
      "statement": "1 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": 1,
        "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"
      ],
      "confidence_kind": "absence_of_signal",
      "limitations": [
        "coverage_is_not_completeness"
      ],
      "derived_by": "kinwit-facts/0.1.0"
    },
    {
      "finding_id": "F-009",
      "category": "integrity",
      "title": "Record continuity",
      "statement": "/odom: 701 messages, largest gap 20.095 ms (nominal 20 ms).",
      "variables": {
        "odom_messages": 701,
        "odom_max_gap_ms": 20.095,
        "facility_records": 0,
        "facility_sequence_contiguous": null,
        "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"
    },
    {
      "finding_id": "F-010",
      "category": "observed_sequence",
      "title": "Navigation goal outcome",
      "statement": "The navigation goal is recorded as ABORTED (E-005); drive power removal is reported at E-008.",
      "variables": {
        "goal_status": "ABORTED"
      },
      "formula": "action_msgs/GoalStatus.status == 6",
      "supporting_event_ids": [
        "E-005",
        "E-008"
      ],
      "confidence_kind": "recorded_value",
      "limitations": [
        "status_codes_do_not_explain_why"
      ],
      "derived_by": "kinwit-facts/0.1.0"
    }
  ],
  "unknowns": [
    "Anything the facility controller recorded: that source is missing from this package.",
    "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."
  ],
  "questions_for_reviewer": [
    "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?"
  ],
  "banned_claims_checked": [
    "root cause",
    "liable",
    "fault",
    "certified",
    "admissible",
    "100%"
  ]
}
