{"binding":{"candidate_manifest_sha256":"0299afcab4dbe046318240dfe5bbcfb0e140e44b90bbc34e86e525efc0638a0f","candidate_root":"/home/cube/projects/richard/traning coach/.omo/evidence/task26/task26-clarification-normalized-successor-4e9962be49b72951c3b9ed7e1a4fe36d0ca03e757872ae03364c1ab7a790f32b","core_candidate_digest":"88caabf3dee923e720463d917d35b6dd32ecc31102ed3ab4df4c6a203df4a760","full_candidate_digest":"4e9962be49b72951c3b9ed7e1a4fe36d0ca03e757872ae03364c1ab7a790f32b","source_delta_sha256":"7854950a086596b1de9dd019094dff7a88831967466c94aacba8a934d6c2e42b","wheel_sha256":"33688875a0d1ce20955bd8272257ee34d84cb138f6a23a43e5d16682368ae5e5"},"candidate_causality_count":0,"commands":[{"argv":"env -u TMPDIR HOME=/home/cube PYTHONPATH=/home/cube/projects/richard/hermes-agent:/home/cube/.hermes/profiles/dualcoachtest/workspace/checkin_cli PYTHONDONTWRITEBYTECODE=1 /home/cube/projects/richard/hermes-agent/.venv/bin/python -B -m pytest -q -p no:cacheprovider --junitxml=/home/cube/projects/richard/traning\\ coach/.omo/evidence/task26/task26-gate20-corrected-harness-4e9962be49b72951c3b9ed7e1a4fe36d0ca03e757872ae03364c1ab7a790f32b-st_01a0080c/artifacts/control-a-direct-normal.junit.xml tests/gateway/test_discord_document_handling.py::TestIncomingDocumentHandling::test_pdf_document_cached tests/gateway/test_discord_document_handling.py::TestIncomingDocumentHandling::test_txt_content_injected tests/gateway/test_discord_document_handling.py::TestIncomingDocumentHandling::test_md_content_injected tests/gateway/test_discord_document_handling.py::TestIncomingDocumentHandling::test_log_content_injected tests/gateway/test_discord_document_handling.py::TestIncomingDocumentHandling::test_mid_sized_zip_under_32mb_is_cached tests/gateway/test_discord_document_handling.py::TestIncomingDocumentHandling::test_zip_document_cached tests/gateway/test_discord_document_handling.py::TestIncomingDocumentHandling::test_large_txt_cached_not_injected tests/gateway/test_discord_document_handling.py::TestIncomingDocumentHandling::test_multiple_text_files_both_injected tests/gateway/test_discord_document_handling.py::TestAllowAnyAttachment::test_unknown_type_cached_when_flag_on tests/gateway/test_discord_document_handling.py::TestAllowAnyAttachment::test_unknown_type_no_content_type_becomes_octet_stream tests/gateway/test_discord_document_handling.py::TestAllowAnyAttachment::test_max_attachment_bytes_zero_means_unlimited tests/gateway/test_discord_document_handling.py::TestAllowAnyAttachment::test_allowlisted_doc_unchanged_when_flag_on tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_external_media_download_rejects_oversized_content_length tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_external_media_download_rejects_oversized_stream tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_external_media_download_rejects_unsafe_redirect tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_external_media_download_rejects_non_image_content_type tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_send_image_failure_log_redacts_signed_url tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_send_image_failure_response_does_not_expose_signed_url_query tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_send_image_failure_response_does_not_expose_signed_url_fragment tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_send_image_failure_response_preserves_caption tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_send_image_failure_log_still_redacts_signed_url tests/gateway/test_runtime_footer.py::test_format_footer_skips_missing_context_length","duration_ms":1127,"ended_at_utc":"2026-08-16T13:48:01.365318558Z","exit_code":0,"launcher_environment_sha256":"49813a302296a286b53afcafb9ee20d24b26c323fd7efb67f2a2eefaba22ff36","name":"control-a-direct-normal","started_at_utc":"2026-08-16T13:48:00.233942832Z","stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_sha256":"1b047e485785765b3fe70bc7a3ef9e9430e796fd5e42df555bdfe356a9a913dc"},{"argv":"bwrap --die-with-parent --unshare-net --ro-bind / / --bind /home/cube/projects/richard/traning\\ coach/.omo/evidence/task26/task26-gate20-corrected-harness-4e9962be49b72951c3b9ed7e1a4fe36d0ca03e757872ae03364c1ab7a790f32b-st_01a0080c /home/cube/projects/richard/traning\\ coach/.omo/evidence/task26/task26-gate20-corrected-harness-4e9962be49b72951c3b9ed7e1a4fe36d0ca03e757872ae03364c1ab7a790f32b-st_01a0080c --tmpfs /tmp --tmpfs /home/cube/projects/richard/hermes-agent/.pytest-cache --dev /dev --proc /proc --setenv HOME /home/cube --setenv TMPDIR /tmp --setenv PYTHONPATH /home/cube/projects/richard/hermes-agent:/home/cube/.hermes/profiles/dualcoachtest/workspace/checkin_cli --setenv PYTHONDONTWRITEBYTECODE 1 --chdir /home/cube/projects/richard/hermes-agent /home/cube/projects/richard/hermes-agent/.venv/bin/python -B -m pytest -q -p no:cacheprovider --junitxml=/home/cube/projects/richard/traning\\ coach/.omo/evidence/task26/task26-gate20-corrected-harness-4e9962be49b72951c3b9ed7e1a4fe36d0ca03e757872ae03364c1ab7a790f32b-st_01a0080c/artifacts/control-b-unshare-net-normal-home.junit.xml tests/gateway/test_discord_document_handling.py::TestIncomingDocumentHandling::test_pdf_document_cached tests/gateway/test_discord_document_handling.py::TestIncomingDocumentHandling::test_txt_content_injected tests/gateway/test_discord_document_handling.py::TestIncomingDocumentHandling::test_md_content_injected tests/gateway/test_discord_document_handling.py::TestIncomingDocumentHandling::test_log_content_injected tests/gateway/test_discord_document_handling.py::TestIncomingDocumentHandling::test_mid_sized_zip_under_32mb_is_cached tests/gateway/test_discord_document_handling.py::TestIncomingDocumentHandling::test_zip_document_cached tests/gateway/test_discord_document_handling.py::TestIncomingDocumentHandling::test_large_txt_cached_not_injected tests/gateway/test_discord_document_handling.py::TestIncomingDocumentHandling::test_multiple_text_files_both_injected tests/gateway/test_discord_document_handling.py::TestAllowAnyAttachment::test_unknown_type_cached_when_flag_on tests/gateway/test_discord_document_handling.py::TestAllowAnyAttachment::test_unknown_type_no_content_type_becomes_octet_stream tests/gateway/test_discord_document_handling.py::TestAllowAnyAttachment::test_max_attachment_bytes_zero_means_unlimited tests/gateway/test_discord_document_handling.py::TestAllowAnyAttachment::test_allowlisted_doc_unchanged_when_flag_on tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_external_media_download_rejects_oversized_content_length tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_external_media_download_rejects_oversized_stream tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_external_media_download_rejects_unsafe_redirect tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_external_media_download_rejects_non_image_content_type tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_send_image_failure_log_redacts_signed_url tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_send_image_failure_response_does_not_expose_signed_url_query tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_send_image_failure_response_does_not_expose_signed_url_fragment tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_send_image_failure_response_preserves_caption tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_send_image_failure_log_still_redacts_signed_url","duration_ms":1022,"ended_at_utc":"2026-08-16T13:48:02.398893844Z","exit_code":1,"launcher_environment_sha256":"49813a302296a286b53afcafb9ee20d24b26c323fd7efb67f2a2eefaba22ff36","name":"control-b-unshare-net-normal-home","started_at_utc":"2026-08-16T13:48:01.373490865Z","stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_sha256":"cdc7f4ddedf2a6f15a1afc256b8538dd7bfda6dca5693da956dd111cd8f77cea"},{"argv":"env -u TMPDIR HOME=/tmp PYTHONPATH=/home/cube/projects/richard/hermes-agent:/home/cube/.hermes/profiles/dualcoachtest/workspace/checkin_cli PYTHONDONTWRITEBYTECODE=1 /home/cube/projects/richard/hermes-agent/.venv/bin/python -B -m pytest -q -p no:cacheprovider --junitxml=/home/cube/projects/richard/traning\\ coach/.omo/evidence/task26/task26-gate20-corrected-harness-4e9962be49b72951c3b9ed7e1a4fe36d0ca03e757872ae03364c1ab7a790f32b-st_01a0080c/artifacts/control-c-footer-tmp-home.junit.xml tests/gateway/test_runtime_footer.py::test_format_footer_skips_missing_context_length","duration_ms":358,"ended_at_utc":"2026-08-16T13:48:02.767202737Z","exit_code":1,"launcher_environment_sha256":"49813a302296a286b53afcafb9ee20d24b26c323fd7efb67f2a2eefaba22ff36","name":"control-c-footer-tmp-home","started_at_utc":"2026-08-16T13:48:02.405372684Z","stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_sha256":"07f108367a59bfec5f132ccee331f714b03a4eb8ef83aafe4d75196900103ec5"},{"argv":"env -u TMPDIR HOME=/home/cube PYTHONPATH=/home/cube/projects/richard/hermes-agent:/home/cube/.hermes/profiles/dualcoachtest/workspace/checkin_cli PYTHONDONTWRITEBYTECODE=1 /home/cube/projects/richard/hermes-agent/.venv/bin/python -B -m pytest -q -p no:cacheprovider --junitxml=/home/cube/projects/richard/traning\\ coach/.omo/evidence/task26/task26-gate20-corrected-harness-4e9962be49b72951c3b9ed7e1a4fe36d0ca03e757872ae03364c1ab7a790f32b-st_01a0080c/artifacts/control-c-footer-normal-home.junit.xml tests/gateway/test_runtime_footer.py::test_format_footer_skips_missing_context_length","duration_ms":345,"ended_at_utc":"2026-08-16T13:48:03.123293587Z","exit_code":0,"launcher_environment_sha256":"49813a302296a286b53afcafb9ee20d24b26c323fd7efb67f2a2eefaba22ff36","name":"control-c-footer-normal-home","started_at_utc":"2026-08-16T13:48:02.774307880Z","stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_sha256":"99a24796443a1d07f66a424f8116a06a2079063af758e7d3c87801c191ad2ecd"},{"argv":"/home/cube/projects/richard/hermes-agent/.venv/bin/python -c $'\\nimport hashlib,json,sys,xml.etree.ElementTree as ET\\nfrom pathlib import Path\\nr=Path(sys.argv[1])\\ndef j(n):\\n p=r/f\"{n}.junit.xml\";x=ET.parse(p).getroot();ss=[x] if x.tag==\"testsuite\" else x.findall(\"testsuite\");d={k:sum(int(float(s.attrib.get(k,0))) for s in ss) for k in (\"tests\",\"failures\",\"errors\",\"skipped\")};d[\"passed\"]=d[\"tests\"]-d[\"failures\"]-d[\"errors\"]-d[\"skipped\"];d[\"sha256\"]=hashlib.sha256(p.read_bytes()).hexdigest();return d\\na=j(\"control-a-direct-normal\");b=j(\"control-b-unshare-net-normal-home\");ct=j(\"control-c-footer-tmp-home\");cn=j(\"control-c-footer-normal-home\");bout=(r/\"control-b-unshare-net-normal-home/stdout.txt\").read_text();ctout=(r/\"control-c-footer-tmp-home/stdout.txt\").read_text();classes={\"dns_resolution_failed\":bout.count(\"DNS resolution failed\"),\"blocked_unsafe\":bout.count(\"Blocked unsafe\"),\"url_safety\":bout.count(\"url_safety\")};ok=a=={**a,\"tests\":22} if False else (a[\"tests\"]==22 and a[\"passed\"]==22 and a[\"failures\"]==a[\"errors\"]==0 and b[\"tests\"]==21 and b[\"failures\"]==21 and b[\"errors\"]==0 and (classes[\"dns_resolution_failed\"]>0 or classes[\"blocked_unsafe\"]>0) and ct[\"tests\"]==1 and ct[\"failures\"]==1 and \"/tmp/wd\" in ctout and \"~/wd\" in ctout and cn[\"tests\"]==1 and cn[\"passed\"]==1 and cn[\"failures\"]==cn[\"errors\"]==0);o={\"candidate_digest\":sys.argv[2],\"control_a\":a,\"control_b\":b,\"control_b_failure_markers\":classes,\"control_c_tmp_home\":ct,\"control_c_normal_home\":cn,\"candidate_causality_count\":0 if ok else None,\"invalid_harness_proven\":ok,\"status\":\"PASS\" if ok else \"FAIL\"};print(json.dumps(o,sort_keys=True,separators=(\",\",\":\")));raise SystemExit(not ok)\\n' /home/cube/projects/richard/traning\\ coach/.omo/evidence/task26/task26-gate20-corrected-harness-4e9962be49b72951c3b9ed7e1a4fe36d0ca03e757872ae03364c1ab7a790f32b-st_01a0080c/artifacts 4e9962be49b72951c3b9ed7e1a4fe36d0ca03e757872ae03364c1ab7a790f32b","duration_ms":18,"ended_at_utc":"2026-08-16T13:48:03.150921020Z","exit_code":0,"launcher_environment_sha256":"49813a302296a286b53afcafb9ee20d24b26c323fd7efb67f2a2eefaba22ff36","name":"adjudicate-controls","started_at_utc":"2026-08-16T13:48:03.129535660Z","stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_sha256":"9b5580458cfde6733d6af62b63f044b78cdf6794198d453c3b5a1174422ed1cc"}],"controls":{"candidate_causality_count":0,"candidate_digest":"4e9962be49b72951c3b9ed7e1a4fe36d0ca03e757872ae03364c1ab7a790f32b","control_a":{"errors":0,"failures":0,"passed":22,"sha256":"e31c7c63a3e6512cc776fab5aadc52256538d8ae87804b2a761eb45cb7550667","skipped":0,"tests":22},"control_b":{"errors":0,"failures":21,"passed":0,"sha256":"60e57cc61f6bcb6b49ac35bc90e5598fecb9fd23a3e056f761c3bfcfba0c9e36","skipped":0,"tests":21},"control_b_failure_markers":{"blocked_unsafe":26,"dns_resolution_failed":26,"url_safety":56},"control_c_normal_home":{"errors":0,"failures":0,"passed":1,"sha256":"d9d319ae21cf34dcdd2564fe9925efe24dfbe77c918827e0f7c3aa2d008bb55b","skipped":0,"tests":1},"control_c_tmp_home":{"errors":0,"failures":1,"passed":0,"sha256":"4a2ef596d083b906d1f615d86f40c455160e2deae0bc6a7e21ab78f06a20adf0","skipped":0,"tests":1},"invalid_harness_proven":true,"status":"PASS"},"failing_node_binding":{"count":22,"json_sha256":"135c7813e6a6a396daff3e7fa98fbfc1c2f046578c6d8ec0860bb4e84471d589","nodes":["tests/gateway/test_discord_document_handling.py::TestIncomingDocumentHandling::test_pdf_document_cached","tests/gateway/test_discord_document_handling.py::TestIncomingDocumentHandling::test_txt_content_injected","tests/gateway/test_discord_document_handling.py::TestIncomingDocumentHandling::test_md_content_injected","tests/gateway/test_discord_document_handling.py::TestIncomingDocumentHandling::test_log_content_injected","tests/gateway/test_discord_document_handling.py::TestIncomingDocumentHandling::test_mid_sized_zip_under_32mb_is_cached","tests/gateway/test_discord_document_handling.py::TestIncomingDocumentHandling::test_zip_document_cached","tests/gateway/test_discord_document_handling.py::TestIncomingDocumentHandling::test_large_txt_cached_not_injected","tests/gateway/test_discord_document_handling.py::TestIncomingDocumentHandling::test_multiple_text_files_both_injected","tests/gateway/test_discord_document_handling.py::TestAllowAnyAttachment::test_unknown_type_cached_when_flag_on","tests/gateway/test_discord_document_handling.py::TestAllowAnyAttachment::test_unknown_type_no_content_type_becomes_octet_stream","tests/gateway/test_discord_document_handling.py::TestAllowAnyAttachment::test_max_attachment_bytes_zero_means_unlimited","tests/gateway/test_discord_document_handling.py::TestAllowAnyAttachment::test_allowlisted_doc_unchanged_when_flag_on","tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_external_media_download_rejects_oversized_content_length","tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_external_media_download_rejects_oversized_stream","tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_external_media_download_rejects_unsafe_redirect","tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_external_media_download_rejects_non_image_content_type","tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_send_image_failure_log_redacts_signed_url","tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_send_image_failure_response_does_not_expose_signed_url_query","tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_send_image_failure_response_does_not_expose_signed_url_fragment","tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_send_image_failure_response_preserves_caption","tests/gateway/test_matrix.py::TestMatrixImageOnlyMediaNormalization::test_send_image_failure_log_still_redacts_signed_url","tests/gateway/test_runtime_footer.py::test_format_footer_skips_missing_context_length"],"source_junit_sha256":"a4daa2a4c22ea977446c3967c313edcac615eae66c3d34dec75ddb70d73abe95","text_sha256":"b8a17dab9ae0dde56a752341506b3fef6cad49f911320c70f64e51f3691f153c"},"invalid_run":{"fail_index_sha256":"aacae4e28844c7e952406c642846f4fa8b00608541eae5e63695803298a0b52d","gate18_receipt_sha256":"3055febe1676898a8ac2c3384280817cd2ef6f67a516cffc43290e3f33a1a6f3","gate19_receipt_sha256":"ffa71ca2e36b50a234d69cab7aa6c35017f39741e5e2d6a93900cefd8028186c","gate20_fail_receipt_sha256":"fb5f8e0ad73fbf252678ac7be669a956ddd854d3eed47380105fa21465df0540","invalid_full_junit_sha256":"a4daa2a4c22ea977446c3967c313edcac615eae66c3d34dec75ddb70d73abe95","invalid_run_preserved":true,"root":"/home/cube/projects/richard/traning coach/.omo/evidence/task26/task26-gates18-20-clarification-normalized-4e9962be49b72951c3b9ed7e1a4fe36d0ca03e757872ae03364c1ab7a790f32b-st_01a0080c","root_tree_manifest_sha256":"323d6f43fa76660a4bf0861c02509f8e2afedbe92e03705ccd660dcdceb80f00"},"schema":"task26-gate20-harness-adjudication-v1","verdict":"PASS_INVALID_HARNESS_PROVEN"}
