{
  "identity": "Townlight Beta 1 approved resident website implementation",
  "recorded_utc": "2026-11-03T00:42:20.409855+00:00",
  "passed": true,
  "scope": "Source implementation and isolated synthetic application/workflow verification; unpublished",
  "source_base_commit": "4b83414dca1e672b057031380fae6be446f28bd3",
  "source_hashes": {
    "scripts/portal-e2e.py": "0b67fabf5b731bc052eae81541955fea47382a2d299646c1fa57cb7b44e829bb",
    "scripts/portal-e2e-browser.cjs": "922ae16cb14b073bd75cfbb1e48368cc4388aeef8196ca59f83412a686836bae",
    "portal/website/townlight.py": "40d19eb490c614312b557ee1ebdd0d3b0cba560092eabd610be438fae2e4d836",
    "portal/website/views.py": "26641b71cfa2aed67f8d296b6587958a8e1d1cf6d4e530f92e7129298a16f96c",
    "portal/website/wagtail_hooks.py": "7a24e16300538415aa0d05bfdf2ac5ddfd8a16fa15185dc1057f5796f632e0c9",
    "portal/serve.py": "461c28ae493c2fe70cf988b9cd8b83c5e4dfe89901bcf7d37770b5ca9703e6fa",
    "portal/manage.py": "fd2d426e0131b607d89462510280abe0a5d58f2b32e88f6a9dd252d4c8861bc0",
    "portal/portal/settings.py": "17850c1db7daafd8a0c94c4e2f54be9eb4fde9dd99ebf8a4ed96582d02f04b65",
    "portal/portal/urls.py": "4b4cf3a5a53ed910a7bdab9c0b5a63002ceb242d93ef8d00764292ce82da5d40",
    "portal/portal/wsgi.py": "13b259e5b7ba828c62320b9c82b3049fdb1f6091918db0d6ebc459ad8e2f94fd",
    "portal/portal/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "portal/vendor/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "portal/website/context_processors.py": "c6d5ddfb4a859834095c2b034b0de9e8c4d641a425aa0b1fc55335423525474a",
    "portal/website/importing.py": "1c6da9559513ef9d533fd8cf783d3e08c66bcead42f5a3946e8b7cbc86684320",
    "portal/website/models.py": "b59471207de5aae9633b535df3369b96803d657b67fc5d1291d0ddbdcbdfe19f",
    "portal/website/tests.py": "b8b0053c75725b9659679923484a3413e3e81cb40b7458e18ab8ada50269f84e",
    "portal/website/test_deployment.py": "314aa2c6b54b1441097fc2e21e771e6651897cebaa2d23818eacd6ab1c39790e",
    "portal/website/test_meeting_timezone.py": "4cbafc977c66ec7bf48e114d3f1b758906647a836730b54eaf9b537e3934a38e",
    "portal/website/test_public_website.py": "0d1fb6d774c02404c5b3639c0cf160c52bcca29ab80f63d3576435c1e62c414d",
    "portal/website/test_source_archive.py": "78c7fc810a33aa4eaa1deb07ee3e77399a98f7b14ed5904d23f359072d64acc9",
    "portal/website/test_townlight.py": "e137e67090f38aa1ee2af41bdac3a89e628d23dcb63dbd2e536bdae3fe7eb980",
    "portal/website/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "portal/website/management/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "portal/website/migrations/0001_initial.py": "efe85c69fce793f6fd214d6045f5b8fb94aa3920ec371afa61881252358332f9",
    "portal/website/migrations/0002_meeting_release.py": "061a91daaab9b249382db6cd830f84208c88f0087365d9d165f5a9360dbb6c66",
    "portal/website/migrations/0003_public_website_design.py": "d365635651f73e0ff7336888cbbf3f676b565de7755ffac1672c698caf6545d9",
    "portal/website/migrations/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "portal/website/templates/base.html": "32473d5cab6dca0db073fa93fe8f75ea265abdeaad54c9c84af95102341431cc",
    "portal/website/templates/website/home_page.html": "b50af92027c65237eeb8ff4d0ee77b108466eb41192f04f993d0c3ac2821bf0b",
    "portal/website/templates/website/meeting.html": "2cce92037e880364163b30f0ed348af8df970081fecf0eeabedc64c9b0f388bb",
    "portal/website/templates/website/meetings.html": "8217faa8e9610d4b8fcee81f87df2acc92374811b3e5cd27b1c4d20a29e324ad",
    "portal/website/templates/website/meeting_document.html": "43206c6fa1ec548e7d254ac88fa687174a2a969096ecd8718e438e85d411f39d",
    "portal/website/templates/website/publication_admin.html": "25dc52ae07e441581326d074c537b890e5ee462765ac7f6386f41e44de1437c0",
    "portal/website/templates/website/search.html": "a2bb3da8c90d2916c223ad0ba1ecb7326fc5258063607cb4bffc8dec6cee447d",
    "portal/website/templates/website/service_page.html": "84aee07a39570ceff45a7d768140be43c36733fbd630725aaf42056da0cf0604",
    "portal/website/templates/website/includes/brand.html": "288ccef15949b69e0961ec1f1f65b2b7e68140e950607076b3cb1b7fc7b1dde3",
    "portal/website/templates/website/includes/icon.html": "5250a5fa9427b149ea6256904d3088bd5b51852514becbed3a56635d06228aff",
    "portal/website/templates/website/includes/icons.html": "1b577248d54e1265dd5bd06949de5f2f8471a9ef470c1b22971865bf94418a56",
    "portal/website/static/website/chamber.svg": "d6c7e2202e8dca5912b96b4f1fff5dac070ac60df151447f4c8d38e1dd829495",
    "portal/website/static/website/cityscape.svg": "d5d22bfcea670d125ec2b111e44438846995b4fde3989ebe5e04ccd22e588861",
    "portal/website/static/website/portal.css": "96438126a7ec6c5c344a0eee9dd3b9922adf971ff9e25c887dc6246df7630c67",
    "portal/website/static/website/portal.js": "8aaed38f88bc8bb57361d652b860f5820a167c99d6332cf5dcb797d811fc4e35",
    "portal/website/management/commands/export_public.py": "ae861e0d49cc52ee3677ce9a2d25bb7418e641592f7e6d27e2bc9f21c8815a77",
    "portal/website/management/commands/import_synthetic.py": "d113088e20d0ec892ee283ba9d11d4863d3b8781197d86cbecfdfb6198517cd9",
    "portal/website/management/commands/setup_demo.py": "71dbc1b39b65d0385ef648af3c571d9626aad739e3459bc038989886de426ea9",
    "portal/website/management/commands/sync_townlight.py": "adae7b3b850ebb17c81d98aa36f89081b58e08bb32f9409ce05a8423fa4fe683",
    "portal/website/management/commands/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "portal/vendor/civiccast/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "portal/vendor/civiccore/manifest.py": "15caa167acce428facdf7683085d47dd4a01b02cc2d05df25d6aa1d157bb79bd",
    "portal/vendor/civiccore/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "portal/vendor/civiccast/agenda_import/base.py": "d35605c2534aa6a635754fb7b831a971639689775e88fa6f73290e6390d257ef",
    "portal/vendor/civiccast/agenda_import/docparse.py": "8fff0ec6df605a63c9895c69eca68ea246170edae063c93cf686b553c7be15c4",
    "portal/vendor/civiccast/agenda_import/models.py": "832ac35ccab0fec09670da7de2e30c342c6a739c587276101549f90a73986845",
    "portal/vendor/civiccast/agenda_import/primegov.py": "9f788b2840ef3f234e943bde1fbb3827b94dd572ae243fa52b32b5efa56c5f96",
    "portal/vendor/civiccast/agenda_import/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
  },
  "portal_tests": {
    "passed": 23,
    "missing_migrations": false
  },
  "workflow_checks": [
    "real isolated PostgreSQL Records, Meetings, Station and portal migrations",
    "public archive, agenda, packet and minutes created via Meetings HTTP",
    "actual Station worker processed synthetic video and returned hash-verified recording",
    "publication denies absent proof, wrong role, missing approval and unfulfilled request",
    "Records HTTP handoff, approved release copy, current approval, verified response and package, and fulfillment",
    "native publisher lookup returns eligible public choice without granting approval and denies wrong role",
    "bundle authenticates real public sources, rejects closed archive/wrong hash, contains only approved bytes",
    "portal repeat sync is idempotent; public page and ranged release are hash-verified and exclude private content",
    "public export contains approved release bytes and excludes private meeting title and request data",
    "production Waitress entry enforces HTTPS redirect and serves approved range behind configured loopback TLS proxy",
    "native service failure leaves existing public release available",
    "headless browser verifies resident desktop/mobile/no-JS flows, editor content and authenticated publication with actual MP4 playback",
    "explicit withdrawal hides meeting, documents, search, homepage feature and release routes"
  ],
  "headless_browser_checks": [
    "four actual Wagtail views render approved desktop layout and collected local assets",
    "resident task finder opens real service page with explicit existing-service destination",
    "archive opens actual meeting, all three approved documents and decodable MP4",
    "public title search and archive empty state work without private source text",
    "four phone layouts fit; mobile menu, Escape and navigation work",
    "resident navigation, task finder and filtering work with JavaScript disabled",
    "Wagtail staff publishes editable service presentation; resident sees saved content",
    "Wagtail superuser lookup retains separate explicit publication approval"
  ],
  "page_errors": [],
  "failed_browser_requests": [],
  "executed_input_hashes_verified": 64,
  "owned_services_terminal": true,
  "temporary_proofs_removed": true,
  "native_runtime": "Existing isolated installed candidate wheel; native source unchanged for this presentation work",
  "evidence_limits": [
    "Short synthetic capture and approved MP4 only",
    "No real city credentials, tenant or hardware",
    "No new YouTube or CivicCast delivery test; their code is unchanged",
    "No remote CI, new signed installer, host installation changes, public deployment or publishing",
    "Existing Records original/release size limit and active native session-proof requirements remain"
  ],
  "screenshots": [
    "home-desktop",
    "archive-desktop",
    "meeting-desktop",
    "service-desktop",
    "home-mobile",
    "archive-mobile",
    "meeting-mobile",
    "service-mobile"
  ],
  "documentation": {
    "passed": true,
    "responsive_views_checked": 10,
    "manuals": [
      {
        "manual": "Portal-Guide",
        "pdf_pages": 12,
        "word_images": 3,
        "pdf_sha256": "ddc222df10b99d3eaf62372619252485b0092ed290755a0f7464567fc4cd4fcc",
        "docx_sha256": "1310c494e279089fb1f6c1066b9f23d01123e2f03754914e96b523db3545c147"
      },
      {
        "manual": "Suite-Manual",
        "pdf_pages": 20,
        "word_images": 2,
        "pdf_sha256": "70f8eb3c544769cc413300f592b4581a5affd014ea6e6646396e4e7edac92087",
        "docx_sha256": "72f4d30b6477441d4622c1ac68ce084fa1411edf1ecd13ad544d8250fd081ef5"
      }
    ],
    "portal_links_checked": [
      "manuals/portal.html",
      "reference/portal-verification.html"
    ],
    "collected_assets_verified": 4
  },
  "required_native_compile_check": true
}
