{
  "schema": 1,
  "repository": "brunnojob/faceclock-yolo",
  "source_commit": "85cf977d24a85169daf85962d2793dcde5b7dd15",
  "generated_at": "2026-10-10T05:28:05.724281+00:00",
  "run_url": "https://github.com/brunnojob/faceclock-yolo/actions/runs/38027592864",
  "inputs_sha256": {
    ".proof/scenarios.json": "f8e6d554fab66f9eabcdfedfc370b11039c5f6e48e7b2903177be53545dcd4c0",
    ".proof/demo.py": "60286a8b5545b5f762730ddef098341649f90256d6ac8fbd8a3953c90709bfa2"
  },
  "cases": [
    {
      "display": false,
      "name": "python -m pip install -r requirements.txt",
      "argv": [
        "bash",
        "-e",
        "-o",
        "pipefail",
        "-c",
        "python -m pip install -r requirements.txt"
      ],
      "exit": 0,
      "expected_exit": 0,
      "passed": true,
      "seconds": 5.162,
      "output": "Collecting cryptography==50.0.1 (from -r requirements.txt (line 1))\n  Downloading cryptography-50.0.1-cp311-abi3-manylinux_2_34_x86_64.whl.metadata (4.3 kB)\nCollecting fastapi==0.143.0 (from -r requirements.txt (line 2))\n  Downloading fastapi-0.143.0-py3-none-any.whl.metadata (26 kB)\nCollecting uvicorn==0.54.0 (from -r requirements.txt (line 3))\n  Downloading uvicorn-0.54.0-py3-none-any.whl.metadata (6.6 kB)\nCollecting python-multipart==0.0.22 (from -r requirements.txt (line 4))\n  Downloading python_multipart-0.0.22-py3-none-any.whl.metadata (1.8 kB)\nCollecting cffi>=2.0.0 (from cryptography==50.0.1->-r requirements.txt (line 1))\n  Downloading cffi-2.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (2.5 kB)\nCollecting starlette>=0.46.0 (from fastapi==0.143.0->-r requirements.txt (line 2))\n  Downloading starlette-1.7.0-py3-none-any.whl.metadata (6.6 kB)\nCollecting pydantic>=2.9.0 (from fastapi==0.143.0->-r requirements.txt (line 2))\n  Downloading pydantic-2.14.0-py3-none-any.whl.metadata (131 kB)\nCollecting typing-extensions>=4.8.0 (from fastapi==0.143.0->-r requirements.txt (line 2))\n  Downloading typing_extensions-4.16.0-py3-none-any.whl.metadata (3.3 kB)\nCollecting typing-inspection>=0.4.2 (from fastapi==0.143.0->-r requirements.txt (line 2))\n  Downloading typing_inspection-0.4.4-py3-none-any.whl.metadata (2.6 kB)\nCollecting annotated-doc>=0.0.2 (from fastapi==0.143.0->-r requirements.txt (line 2))\n  Downloading annotated_doc-0.0.5-py3-none-any.whl.metadata (6.5 kB)\nCollecting opentelemetry-api>=1.44.0 (from fastapi==0.143.0->-r requirements.txt (line 2))\n  Downloading opentelemetry_api-1.45.1-py3-none-any.whl.metadata (1.4 kB)\nCollecting click>=7.0 (from uvicorn==0.54.0->-r requirements.txt (line 3))\n  Downloading click-8.5.0-py3-none-any.whl.metadata (2.6 kB)\nCollecting h11>=0.8 (from uvicorn==0.54.0->-r requirements.txt (line 3))\n  Downloading h11-0.16.0-py3-none-any.whl.metadata (8.3 kB)\nCollecting pycparser (from cffi>=2.0.0->cryptography==50.0.1->-r requirements.txt (line 1))\n  Downloading pycparser-3.11-py3-none-any.whl.metadata (8.2 kB)\nCollecting annotated-types>=0.6.0 (from pydantic>=2.9.0->fastapi==0.143.0->-r requirements.txt (line 2))\n  Downloading annotated_types-0.8.0-py3-none-any.whl.metadata (15 kB)\nCollecting pydantic-core==2.50.0 (from pydantic>=2.9.0->fastapi==0.143.0->-r requirements.txt (line 2))\n  Downloading pydantic_core-2.50.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.5 kB)\nCollecting anyio<5,>=4.0.0 (from starlette>=0.46.0->fastapi==0.143.0->-r requirements.txt (line 2))\n  Downloading anyio-4.15.1-py3-none-any.whl.metadata (4.7 kB)\nCollecting idna>=2.8 (from anyio<5,>=4.0.0->starlette>=0.46.0->fastapi==0.143.0->-r requirements.txt (line 2))\n  Downloading idna-3.20-py3-none-any.whl.metadata (7.2 kB)\nDownloading cryptography-50.0.1-cp311-abi3-manylinux_2_34_x86_64.whl (4.7 MB)\n   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.7/4.7 MB 26.2 MB/s  0:00:00\nDownloading fastapi-0.143.0-py3-none-any.whl (144 kB)\nDownloading uvicorn-0.54.0-py3-none-any.whl (87 kB)\nDownloading python_multipart-0.0.22-py3-none-any.whl (24 kB)\nDownloading annotated_doc-0.0.5-py3-none-any.whl (5.3 kB)\nDownloading cffi-2.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (221 kB)\nDownloading click-8.5.0-py3-none-any.whl (125 kB)\nDownloading h11-0.16.0-py3-none-any.whl (37 kB)\nDownloading opentelemetry_api-1.45.1-py3-none-any.whl (60 kB)\nDownloading pydantic-2.14.0-py3-none-any.wh\nFull transcript in the execution-proof artifact.",
      "output_sha256": "57f039bdc746f09b910926f104612c89fd1a3b9717f3472a4c2e24c8a7c75538"
    },
    {
      "display": true,
      "name": "python -m unittest discover -v -s tests",
      "argv": [
        "bash",
        "-e",
        "-o",
        "pipefail",
        "-c",
        "python -m unittest discover -v -s tests"
      ],
      "exit": 0,
      "expected_exit": 0,
      "passed": true,
      "seconds": 0.251,
      "output": "test_consent_review_integrity_and_revocation (test_core.CoreTests.test_consent_review_integrity_and_revocation) ... ok\ntest_invalid_thresholds_do_not_create_reviews (test_core.CoreTests.test_invalid_thresholds_do_not_create_reviews) ... ok\n\n----------------------------------------------------------------------\nRan 2 tests in 0.015s\n\nOK\n",
      "output_sha256": "2bdf9089abea804bc05e40fa37c8e0a6184f1719bd23426dd9e5bd29858383f0"
    },
    {
      "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.452,
      "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.061s\n\nOK\n",
      "output_sha256": "3b60898a0c609968bfc543eea17a4784ea6f934ef39d1a9920121ac623065b6c"
    },
    {
      "display": true,
      "name": "Synthetic embedding review, consent, revocation and audit integrity",
      "argv": [
        "python",
        ".proof/demo.py"
      ],
      "exit": 0,
      "expected_exit": 0,
      "passed": true,
      "seconds": 0.101,
      "output": "{\"recorded_events\": 1, \"review_required\": true, \"revocation_effective\": true, \"tampering_detected\": true}\n",
      "output_sha256": "39013ab264812a94d283ebb59fcccba9d97b796a1e746ff0ea60770cec824954"
    }
  ],
  "passed": true
}
