{
  "schema": "kinwit.report.v1",
  "case_id": "SIM-2026-0003",
  "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-0003 (scenario s01-large-offset). 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 -1813.217 to -1812.117 ms ahead of the robot clock at the stop input (width 1.1 ms); skew -111.039 to 99.017 ppm.",
          "variables": {
            "offset_lo_ms": -1813.217,
            "offset_hi_ms": -1812.117,
            "width_ms": 1.1,
            "skew_lo_ppm": -111.039,
            "skew_hi_ppm": 99.017,
            "ls_offset_ms": -1812.623,
            "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."
      ]
    }
  ]
}
