{
  "schema": 1,
  "repository": "brunnojob/industrial-iot-sentinel",
  "source_commit": "7fef97be3e77e449d6d50b73fa28e79a2e894a88",
  "generated_at": "2026-10-10T05:29:14.794431+00:00",
  "run_url": "https://github.com/brunnojob/industrial-iot-sentinel/actions/runs/38027602944",
  "inputs_sha256": {
    ".proof/scenarios.json": "74e8eb706d73e37c9607c10a25a77f2a1c6e77ffed98432a704c7fa4fc01e3ce",
    ".proof/demo.py": "d773b90472ec30ded81e59a9bcf0748c1a83d96397387d4cf4836e9fc0bbda5a"
  },
  "cases": [
    {
      "display": true,
      "name": "python -m unittest discover -v",
      "argv": [
        "bash",
        "-e",
        "-o",
        "pipefail",
        "-c",
        "python -m unittest discover -v"
      ],
      "exit": 0,
      "expected_exit": 0,
      "passed": true,
      "seconds": 0.151,
      "output": "test_replay_and_rejected_transition_are_atomic (test_durable.DurableTests.test_replay_and_rejected_transition_are_atomic) ... ok\ntest_movement_replay_is_rejected (test_sentinel.OffshoreDigitalTwinTests.test_movement_replay_is_rejected) ... ok\ntest_pob_and_zone_occupancy_follow_badge_events (test_sentinel.OffshoreDigitalTwinTests.test_pob_and_zone_occupancy_follow_badge_events) ... ok\ntest_pob_reconciliation_emits_alert (test_sentinel.OffshoreDigitalTwinTests.test_pob_reconciliation_emits_alert) ... ok\ntest_sensor_calibration_and_quality_checks (test_sentinel.OffshoreDigitalTwinTests.test_sensor_calibration_and_quality_checks) ... ok\ntest_stale_or_replayed_sensor_sequence_is_rejected (test_sentinel.OffshoreDigitalTwinTests.test_stale_or_replayed_sensor_sequence_is_rejected) ... ok\ntest_zone_role_and_pob_limits_are_enforced (test_sentinel.OffshoreDigitalTwinTests.test_zone_role_and_pob_limits_are_enforced) ... ok\n\n----------------------------------------------------------------------\nRan 7 tests in 0.010s\n\nOK\n",
      "output_sha256": "6ad2118954bc70d83b0a1244fc819eaf942a2d0fbaa7800d99385c24d4503dbd"
    },
    {
      "display": true,
      "name": "python -m unittest discover -v -s cloud",
      "argv": [
        "bash",
        "-e",
        "-o",
        "pipefail",
        "-c",
        "python -m unittest discover -v -s cloud"
      ],
      "exit": 0,
      "expected_exit": 0,
      "passed": true,
      "seconds": 0.351,
      "output": "test_confirmed_receipt_marks_the_report_sent (test_receipts.ReceiptTests.test_confirmed_receipt_marks_the_report_sent) ... ok\ntest_events_reject_empty_values_of_the_wrong_type (test_receipts.ReceiptTests.test_events_reject_empty_values_of_the_wrong_type) ... ok\ntest_invalid_receipts_keep_the_report_pending (test_receipts.ReceiptTests.test_invalid_receipts_keep_the_report_pending) ... ok\ntest_omitted_events_and_empty_list_have_the_same_key (test_receipts.ReceiptTests.test_omitted_events_and_empty_list_have_the_same_key) ... ok\ntest_conflicting_key_cannot_overwrite_a_report (test_sync.OutboxTests.test_conflicting_key_cannot_overwrite_a_report) ... ok\ntest_retries_keep_reports_until_confirmed (test_sync.OutboxTests.test_retries_keep_reports_until_confirmed) ... ok\n\n----------------------------------------------------------------------\nRan 6 tests in 0.066s\n\nOK\n",
      "output_sha256": "e67a05093dd775eb4edb2d1d9a24251bddedffa75506ac689712d30963667d26"
    },
    {
      "display": true,
      "name": "Persist occupancy, reject overflow, recover and replay",
      "argv": [
        "python",
        ".proof/demo.py"
      ],
      "exit": 0,
      "expected_exit": 0,
      "passed": true,
      "seconds": 0.101,
      "output": "{\"capacity_rejection_atomic\": true, \"recovered\": {\"events\": 2, \"peopleOnBoard\": 2, \"vesselId\": \"demo-vessel\", \"zones\": [{\"capacity\": 1, \"hazardous\": false, \"occupancy_ratio\": 1.0, \"people\": 1, \"people_on_board\": 2, \"severity\": \"critical\", \"zone_id\": \"deck\"}, {\"capacity\": 1, \"hazardous\": false, \"occupancy_ratio\": 1.0, \"people\": 1, \"people_on_board\": 2, \"severity\": \"critical\", \"zone_id\": \"bridge\"}]}, \"replay_idempotent\": true}\n",
      "output_sha256": "3f747fc27e993cdb61273c1a2e81a1e4f11263d79ffe0549d038ccd92038c656"
    }
  ],
  "passed": true
}
