{
  "pass": true,
  "hardware_measured": false,
  "esp32_executed": false,
  "production_sources_sha256": {
    "adc_ad7606.c": "77164ec74b6c574a64885a44e9117409f2edaaaf90a82cb737c3834f4672b5e8",
    "sensors.c": "f5c6034a43b260de6282d902a1d76d3e4db60bcbca64d364ebd34fc733df84c9",
    "sensors.h": "880b651acda742396e7da66f113f6ad27022abc4db84a93f9fff6a162e32ff43",
    "imu_timing.h": "2018c0e64cbcb5e894d005c7a6a54ca335f8e7900e0345ad19263d85b298954f",
    "format.c": "16f6340c64845a8d092ee426b5700bd2bf2ed5a58131e5c045a64d2f4fc687bc",
    "format.h": "58b01a597eaa2c70a918ad5ee3b71c9e26fe64aedefc91ffba7d96430510c47b",
    "board.h": "ccba73353a40e4d32d4dcc26b08046bccf88866ec93e60229081181065e782b3",
    "variant.h": "55c2cdaef8b2d56e2ced2aa23984a289038adc6caaf9d164c92830c24b8cffb9"
  },
  "stimulus_sha256": "c2d23fb153e84391c9d15172b9170dca5ed42f85f21512dfd61f593e45669e72",
  "co_simulation_sha256": {
    "pipeline.c": "6db9343dfafe1ef40d5217ff74c8f69ea8d0c82aa5161681434edc1f83da8c47",
    "run.py": "7fa2eb9e22ab85a160c7e3dc10587a04520275f39cc3da55339125994c66c1aa",
    "mock_idf.h": "68faa0f6289a32b3c76cda1701c0878bf27f32f61b164e54de5112c8cb95616f"
  },
  "modeled_duration_seconds": 60,
  "clock_accounting": {
    "sample_count": 480000,
    "duration_us": 60000000,
    "foot": {
      "saved": 12009,
      "generated": 12010,
      "generated_before_capture": 11,
      "pending_at_stop": 1,
      "counter_rollovers": 858
    },
    "shank": {
      "saved": 12001,
      "generated": 12001,
      "generated_before_capture": 0,
      "pending_at_stop": 0,
      "counter_rollovers": 858
    }
  },
  "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": "cb4ed8ac02e658c0009400be96da2fc72120e711bf24815d730b5559814984d9",
    "synthetic": true,
    "counts": {
      "emg": 480000,
      "foot": 12009,
      "shank": 12001,
      "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": 24010,
      "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": 480000,
      "foot_records": 12009,
      "shank_records": 12001,
      "battery_mv": 3800,
      "queue_high_water": 0
    },
    "issues": [],
    "imu_clock": {
      "foot": {
        "tick_steps": 12008,
        "median_tick_step": 4687.5,
        "expected_tick_step": 4687.4999,
        "nominal_tick_us": 1.0666667,
        "median_step_error_percent": 0.0,
        "fit_reads": 11999,
        "fit_span_s": 59.99,
        "host_us_per_sensor_tick": 1.06674133,
        "sensor_tick_error_ppm": 70.0,
        "fit_note": null,
        "within_1_percent": true,
        "within_datasheet_tolerance": true,
        "host_time_fit": {
          "intercept_us": 110009.4543236047,
          "host_us_per_sensor_tick": 1.0667413341950656,
          "residual_rms_us": 0.38,
          "reads_used": 11999,
          "reads_rejected": 0
        }
      },
      "shank": {
        "tick_steps": 12000,
        "median_tick_step": 4687.5,
        "expected_tick_step": 4687.4999,
        "nominal_tick_us": 1.0666667,
        "median_step_error_percent": 0.0,
        "fit_reads": 11999,
        "fit_span_s": 60.0,
        "host_us_per_sensor_tick": 1.06654934,
        "sensor_tick_error_ppm": -110.0,
        "fit_note": null,
        "within_1_percent": true,
        "within_datasheet_tolerance": true,
        "host_time_fit": {
          "intercept_us": 164983.59764083847,
          "host_us_per_sensor_tick": 1.066549333968424,
          "residual_rms_us": 0.39,
          "reads_used": 11999,
          "reads_rejected": 0
        }
      }
    },
    "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"
  ]
}
