{
  "scope": "Extracted AD7606 fixed-two ICM breadboard kit",
  "hardware_measured": false,
  "physical_measurements_completed": 0,
  "archive_sha256": "014a1921bfcbb5d94eac77db9d2ed7d8e3d7622b42a6900f57e1d3cb211249d4",
  "csv_test_environment": {
    "python": "3.14.7",
    "matplotlib_installed": false
  },
  "integrity_and_example": {
    "status": "PASS",
    "package_files_verified": 343,
    "recording_sha256": "af8ac32aee08bd2fadbcc7370bded2c4383a52524bea9a1e56408e7d721f95b6",
    "converted_counts": {
      "emg": 10041,
      "foot": 263,
      "shank": 252,
      "status": 1,
      "end": 1
    },
    "imu_timing_estimate_records": 515,
    "exported_emg_channels": 2,
    "synthetic": true,
    "research_ready": false,
    "physical_measurements_completed": 0,
    "note": "Integrity and saved-data checks only. Run host/run_tests.py separately; this command does not execute ESP32 hardware or test physical wiring."
  },
  "host_regression_tests": {
    "status": "PASS",
    "tests": 48,
    "failures": 0
  },
  "saved_quality": {
    "source_sha256": "af8ac32aee08bd2fadbcc7370bded2c4383a52524bea9a1e56408e7d721f95b6",
    "synthetic": true,
    "counts": {
      "emg": 10041,
      "foot": 263,
      "shank": 252,
      "status": 1,
      "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": 515,
      "flagged_gap_records": 0
    },
    "emg_observed_skipped_slots": 0,
    "emg_rate_from_host_timestamps_hz": 7983.860514640921,
    "last_status": {
      "timer_missed": 0,
      "queue_dropped": 0,
      "imu_errors": 0,
      "fifo_overflows": 0,
      "adc_errors": 0,
      "emg_records": 10041,
      "foot_records": 263,
      "shank_records": 252,
      "battery_mv": 3800,
      "queue_high_water": 61
    },
    "issues": [],
    "imu_clock": {
      "foot": {
        "tick_steps": 262,
        "median_tick_step": 5000.0,
        "expected_tick_step": 5000.0,
        "nominal_tick_us": 1.0,
        "median_step_error_percent": 0.0,
        "fit_reads": 249,
        "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": 251,
        "median_tick_step": 5000.0,
        "expected_tick_step": 5000.0,
        "nominal_tick_us": 1.0,
        "median_step_error_percent": 0.0,
        "fit_reads": 245,
        "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."
  },
  "receiver_replay": {
    "status": "PASS",
    "input_udp_sha256": "55fb4849f6fce4f7f3d5196ad8e278054dc0f2f493ab6f5257a07098f80abe17",
    "packets": 1123,
    "archived_records": 10557,
    "archived_records_byte_exact": true,
    "missing_from_wireless": [
      [
        7,
        5330
      ]
    ],
    "wireless_conversion_exit": 2,
    "wireless_loss_reported": true,
    "original_saved_file_loss_reported": false,
    "crc_corruption_rejected": true,
    "duplicate_rejected": true,
    "loopback_only": true,
    "radio_tested": false
  },
  "plots": {
    "signals.png": {
      "bytes": 104581,
      "sha256": "0ea9ad79c9c105b3851fadf6e9345f8372f20d67680cde98a291e65252609e43"
    },
    "signals.svg": {
      "bytes": 82472,
      "sha256": "cc2a92fcf5f62969726a0e92fa12a7aa09f4b157bcfab3c339978c784c9547b8"
    }
  },
  "tampered_recording_rejected": true,
  "status": "PASS",
  "date": "2026-10-12",
  "documentation_checks": {
    "browser": "Claude desktop built-in browser",
    "server": "python3 -m http.server on 127.0.0.1, extracted archive",
    "pages": [
      "viewer/build.html?stage=6",
      "viewer/index.html?stage=10",
      "development/index.html",
      "development/06/README.html",
      "docs/lab-quickstart.html",
      "docs/laptop-setup.html",
      "docs/download-checks.html",
      "docs/firmware-build-guide.html",
      "docs/breadboard-refinements.html"
    ],
    "local_links_checked": 58,
    "failed_links": 0,
    "console_errors": 0,
    "failed_asset_requests": 0,
    "external_requests": 0,
    "scope": "Local asset closure and page loading; geometry and wire bends remain illustrative; no physical hardware.",
    "stage6_text_current": true,
    "clock_tolerance_text_current": true,
    "archive_sha256": "f89acc7f23254fd7972080c13770be7f8998b1ca83372f255658aaaf7da20214",
    "link_count_note": "Unique same-origin href/src targets parsed from the listed pages (fetched with no-store), plus all runtime requests while loading the viewer pages; counted differently from the earlier 89-link figure.",
    "note": "Browser checks were recorded on archive f89acc7f; later archives change documentation text, the PCB STBY change and firmware 1.11 binaries. Not repeated in a browser."
  },
  "previous_archive_checks": {
    "note": "Recorded for the firmware 1.6 archive (a6cc76b9...); not repeated for later archives.",
    "archive_sha256": "a6cc76b90d2c100973d6ec4de2532998c6aa265bbb1f9644e6a35261c7f839cf",
    "date": "2026-10-07",
    "plots": {
      "signals.png": {
        "bytes": 104581,
        "sha256": "0ea9ad79c9c105b3851fadf6e9345f8372f20d67680cde98a291e65252609e43"
      },
      "signals.svg": {
        "bytes": 82472,
        "sha256": "1b13f28ef570796dd03e724206af20bf016e73d8f1015755f2f85ee2aefa9c72"
      }
    },
    "documentation_checks": {
      "handbook_pages_visually_reviewed": 25,
      "circuit_pack_pages_visually_reviewed": 5,
      "handbook_sections": 23,
      "physical_measurements_completed": 0,
      "scope": "Expanded documentation and fresh extracted-package host checks; circuit and firmware sources unchanged."
    },
    "preserved_documentation_checks_2026_10_04": {
      "stage_folders": 11,
      "wire_rows": 184,
      "other_design_files_unchanged": 2256,
      "intake_tests_passed": 9,
      "pdf_pages_visually_reviewed": 7,
      "physical_measurements_completed": 0,
      "packaged_intake_suite_executed": true,
      "required_measurement_ids_enforced": true
    },
    "documentation_checks_f89acc7f": {
      "browser": "Claude desktop built-in browser",
      "server": "python3 -m http.server on 127.0.0.1, extracted archive",
      "pages": [
        "viewer/build.html?stage=6",
        "viewer/index.html?stage=10",
        "development/index.html",
        "development/06/README.html",
        "docs/lab-quickstart.html",
        "docs/laptop-setup.html",
        "docs/download-checks.html",
        "docs/firmware-build-guide.html",
        "docs/breadboard-refinements.html"
      ],
      "local_links_checked": 58,
      "failed_links": 0,
      "console_errors": 0,
      "failed_asset_requests": 0,
      "external_requests": 0,
      "scope": "Local asset closure and page loading; geometry and wire bends remain illustrative; no physical hardware.",
      "stage6_text_current": true,
      "clock_tolerance_text_current": true,
      "archive_sha256": "f89acc7f23254fd7972080c13770be7f8998b1ca83372f255658aaaf7da20214",
      "link_count_note": "Unique same-origin href/src targets parsed from the listed pages (fetched with no-store), plus all runtime requests while loading the viewer pages; counted differently from the earlier 89-link figure."
    }
  }
}
