{
  "source_sha256": "150e20ac8d1df4f11c7a87e3402484799cc67266871712fb2055452dd3a78403",
  "synthetic": true,
  "counts": {
    "emg": 260,
    "foot": 6,
    "shank": 6,
    "status": 0,
    "end": 1
  },
  "session_finalized": true,
  "structurally_complete": true,
  "no_detected_sample_loss": true,
  "signal_checks_pass": true,
  "research_ready": false,
  "sequence_gaps": {
    "emg": 0,
    "foot": 0,
    "shank": 0
  },
  "anomalies": {
    "sequence_regressions": 0,
    "timestamp_regressions": 0,
    "emg_clipped_samples": 0,
    "emg_out_of_range": 0,
    "imu_invalid_samples": 0,
    "imu_timestamp_anomalies": 0,
    "timing_uncertain_records": 12,
    "flagged_gap_records": 0
  },
  "emg_observed_skipped_slots": 0,
  "emg_rate_from_host_timestamps_hz": 8000.0,
  "last_status": {
    "timer_missed": 0,
    "queue_dropped": 0,
    "imu_errors": 0,
    "fifo_overflows": 0,
    "adc_errors": 0,
    "emg_records": 260,
    "foot_records": 6,
    "shank_records": 6,
    "battery_mv": 3800,
    "queue_high_water": 272
  },
  "issues": [],
  "imu_clock": {
    "foot": {
      "tick_steps": 5,
      "median_tick_step": 5000.0,
      "expected_tick_step": 4687.4999,
      "nominal_tick_us": 1.0666667,
      "median_step_error_percent": 6.6667,
      "fit_reads": 6,
      "fit_span_s": null,
      "host_us_per_sensor_tick": null,
      "sensor_tick_error_ppm": null,
      "fit_note": "needs at least 40 FIFO reads spanning 10 s",
      "within_1_percent": false,
      "within_datasheet_tolerance": false,
      "host_time_fit": null
    },
    "shank": {
      "tick_steps": 5,
      "median_tick_step": 5000.0,
      "expected_tick_step": 4687.4999,
      "nominal_tick_us": 1.0666667,
      "median_step_error_percent": 6.6667,
      "fit_reads": 6,
      "fit_span_s": null,
      "host_us_per_sensor_tick": null,
      "sensor_tick_error_ppm": null,
      "fit_note": "needs at least 40 FIFO reads spanning 10 s",
      "within_1_percent": false,
      "within_datasheet_tolerance": false,
      "host_time_fit": null
    }
  },
  "imu_clock_note": "Screen only: FIFO timestamp increments versus the recorded nominal tick (imu_timestamp_tick_us), and sensor ticks versus ESP32 interrupt times. Includes interrupt latency; not a calibration. host_time_fitted_us in foot.csv/shank.csv maps each sample onto the ESP32 clock using a least-squares fit of all interrupt anchors; use it, not host_time_estimate_us, to align IMU with EMG in recordings longer than a few seconds.",
  "timing_note": "IMU host timestamps are estimates. Internal clock drift and sensor/analog filter delays are uncorrected.",
  "recovery_note": "Timestamp unwrapping is ambiguous across long gaps; never infer missing cycles after corruption."
}
