{
  "pass": true,
  "hardware_measured": false,
  "esp32_executed": false,
  "production_sources_sha256": {
    "adc_ad7606.c": "d54d117c7948e98d7fe83826dc625949f08876fbfa9eebaf77e198d008c0cdd4",
    "sensors.c": "f5c6034a43b260de6282d902a1d76d3e4db60bcbca64d364ebd34fc733df84c9",
    "sensors.h": "880b651acda742396e7da66f113f6ad27022abc4db84a93f9fff6a162e32ff43",
    "imu_timing.h": "2018c0e64cbcb5e894d005c7a6a54ca335f8e7900e0345ad19263d85b298954f",
    "format.c": "16f6340c64845a8d092ee426b5700bd2bf2ed5a58131e5c045a64d2f4fc687bc",
    "format.h": "58b01a597eaa2c70a918ad5ee3b71c9e26fe64aedefc91ffba7d96430510c47b",
    "board.h": "7c69a5213382e10fb67435285c4a0a53fb302b12466c22309292dd845d33e670",
    "variant.h": "55c2cdaef8b2d56e2ced2aa23984a289038adc6caaf9d164c92830c24b8cffb9"
  },
  "stimulus_sha256": "c2d23fb153e84391c9d15172b9170dca5ed42f85f21512dfd61f593e45669e72",
  "co_simulation_sha256": {
    "pipeline.c": "6db9343dfafe1ef40d5217ff74c8f69ea8d0c82aa5161681434edc1f83da8c47",
    "run.py": "7fa2eb9e22ab85a160c7e3dc10587a04520275f39cc3da55339125994c66c1aa",
    "mock_idf.h": "68faa0f6289a32b3c76cda1701c0878bf27f32f61b164e54de5112c8cb95616f"
  },
  "modeled_duration_seconds": 2,
  "clock_accounting": {
    "sample_count": 16000,
    "duration_us": 2000000,
    "foot": {
      "saved": 410,
      "generated": 411,
      "generated_before_capture": 11,
      "pending_at_stop": 1,
      "counter_rollovers": 29
    },
    "shank": {
      "saved": 399,
      "generated": 400,
      "generated_before_capture": 0,
      "pending_at_stop": 1,
      "counter_rollovers": 28
    }
  },
  "imu_clock_drift_ppm": {
    "foot": 70,
    "shank": -110
  },
  "imu_modeled_period_us": {
    "foot": 5000.35,
    "shank": 4999.45
  },
  "stimulus_repeat_period_seconds": 1,
  "boundary_note": "FIFO packets still buffered at the modeled stop are counted explicitly; no unseen packet is called a recorded measurement.",
  "groups_passed": 6,
  "quality": {
    "source_sha256": "6637087d124ce989748cf934d02bc54d445cadb02e332c16e791123bd9ad9c13",
    "synthetic": true,
    "counts": {
      "emg": 16000,
      "foot": 410,
      "shank": 399,
      "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": 809,
      "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": 16000,
      "foot_records": 410,
      "shank_records": 399,
      "battery_mv": 3800,
      "queue_high_water": 0
    },
    "issues": [],
    "imu_clock": {
      "foot": {
        "tick_steps": 409,
        "median_tick_step": 4688.0,
        "expected_tick_step": 4687.4999,
        "nominal_tick_us": 1.0666667,
        "median_step_error_percent": 0.0107,
        "fit_reads": 400,
        "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": true,
        "within_datasheet_tolerance": true,
        "host_time_fit": null
      },
      "shank": {
        "tick_steps": 398,
        "median_tick_step": 4687.5,
        "expected_tick_step": 4687.4999,
        "nominal_tick_us": 1.0666667,
        "median_step_error_percent": 0.0,
        "fit_reads": 399,
        "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": true,
        "within_datasheet_tolerance": true,
        "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."
  },
  "limits": [
    "Ideal peripheral API behavior; ordered native C execution",
    "Independent modeled IMU clocks; no calibrated physical alignment",
    "No RTOS scheduler, CPU contention, GPIO electrical levels, SDMMC or RF transport",
    "Ngspice input source and op-amp are approximations, not measured sensor/board behavior"
  ]
}
