{"about":"Lesson E25, Case study: Flywheel and re-derivable evaluation. Computed by tools/school/fill_receipts.mjs from system/school/receipts.mjs, receipts-verify.mjs and receipts-lab.mjs on Flywheel's public PySyft result receipt bundle. Do not edit by hand.","sourceSha256":{"receipts.mjs":"65259dd2a0a6131aad9e76d27453564cdc581ae68d91895851b46344b206b3e1","receipts-verify.mjs":"6b56c3c436533c8de73fdb37bfbcba8571ff1aca51ffc6fdb8796087cd67976e","receipts-lab.mjs":"88615c7e6b18477f076a03cabed90695a9a7c512dd4a72f16b1069f621ace602"},"sources":{"about":"Where the evidence comes from and what each piece proves. Every file in this folder except facts.json is a byte-for-byte copy of Flywheel's public test fixture tests/fixtures/pysyft_receipt at the pinned commit (Flywheel is FSL-1.1-MIT). sha256 is of the copy here; sameBytes is whether it equals git show <commit>:<source> when that comparison was run.","pin":{"repository":"https://github.com/HarperZ9/flywheel","branch":"main","commit":"f04ef26fda8e36e3f73521ebbc5e03c4220da72d","fixture":"tests/fixtures/pysyft_receipt","fixtureLastChanged":"7d47b8fc81d5921c0023b0884fc63498357a1ac8"},"files":[{"file":"receipt.json","bytes":5744,"sha256":"8620d19a10cbf7af4fa5c1059b4ac75c610c12a05b857da003244d29bb587691","source":"tests/fixtures/pysyft_receipt/receipt.json","blob":"3aecc46540ef9ed8bbb5dc3174aca40c650e56e7","sameBytes":true},{"file":"results.jsonl","bytes":2892,"sha256":"27a766f0839ad05aed4e7860fdd8c67c4bdaa901c5e58c15d6bc098969457a82","source":"tests/fixtures/pysyft_receipt/results.jsonl","blob":"879ad771fd4293775f4d6092d6050923e8cc3aee","sameBytes":true},{"file":"reveal_answers.json","bytes":835,"sha256":"2835bcb439592a4a4d250ce1ab65df9d6ad1a60d7928fc0fd14268f959625656","source":"tests/fixtures/pysyft_receipt/reveal_answers.json","blob":"c50986c204e869621d85e588622c3d91a414c2ba","sameBytes":true},{"file":"public_key.hex","bytes":65,"sha256":"ecaf98d84bc4fc0d3b50a259148685c256fe19bed52fd0a925bd8c238196485a","source":"tests/fixtures/pysyft_receipt/public_key.hex","blob":"139d60d6b7de44c31474b932dabd2bdbf747c2c1","sameBytes":true},{"file":"job/code/main.py","bytes":697,"sha256":"a53045323fa68c1b2a844b89243d9870ad0802f15e4e42264a7874b689af181e","source":"tests/fixtures/pysyft_receipt/job/code/main.py","blob":"619f7fb979bfc05bd77ce11f154a4689693ca5d5","sameBytes":true},{"file":"job/config.yaml","bytes":422,"sha256":"e3a21edbcf98dcac25d85a8c859f679e7f734fde8ef52c1cb903fadc7ebd5cbb","source":"tests/fixtures/pysyft_receipt/job/config.yaml","blob":"75f675bf7c73ed95fab7a7f776f165b2045c0927","sameBytes":true},{"file":"job/run.sh","bytes":197,"sha256":"6c3796002ae2626f5a3df61a8a605d1deb9053a1a26b7be74b09dff961a0c548","source":"tests/fixtures/pysyft_receipt/job/run.sh","blob":"39ef8a5b9c2ca71a9a584716c850e124a7512fa3","sameBytes":true},{"file":"job/syft.pub.yaml","bytes":108,"sha256":"3884f5b887e6b2cfe7382f8f7ac9b29e2e36e146bf8d31f1e1a4fa37dcc50e04","source":"tests/fixtures/pysyft_receipt/job/syft.pub.yaml","blob":"61d6a57cd5e61a42368552c589a87a34e784ce70","sameBytes":true},{"file":"run.json","bytes":1784,"sha256":"d179e233db5edf55e40b8f6d97dba834610f553d23d5a2163a9db47889d694cd","source":"tests/fixtures/pysyft_receipt/run.json","blob":"7a64052a74bc657b3714222cd25c70a03b9934b7","sameBytes":true}],"comparedWithSource":true,"docs":[{"path":"docs/features/pysyft-result-receipt.md","proves":"What the receipt binds and what a stranger can check: the job hash, the approval record, the per-item rows (results_sha256 and a Merkle items_root), the score, the replay nonce, the superstack seal, the fixed does_not_prove lines, and the reveal rescoring. It states the run: syft-job 0.1.41 from PySyft commit 36e6516 on Ubuntu 24.04 under WSL, 40 of 50.","doesNotProve":"Read as the project's own description. That the run happened as described is attested by the project, not by this lesson; the lesson checks only the bytes."},{"path":"harness/job_result_verify.py","proves":"The verifier's checks, by name; the browser verifier here restates them one for one.","doesNotProve":"That its checks are sufficient. The sweep below finds bytes of the envelope that no check reads."},{"path":"harness/job_result_receipt.py","proves":"How the body is built: the scoring rule, parse_rows, items_root, the superstack receipt, receipt_id, claim_sha256 and the fixed does_not_prove lines.","doesNotProve":"Anything about the hidden model or data."},{"path":"harness/merkle.py","proves":"The RFC 6962 Merkle tree: 0x00 leaf prefix, 0x01 node prefix, split at the largest power of two below n.","doesNotProve":""},{"path":"harness/pysyft_job_hash.py","proves":"PySyft's submission hash restated: sorted relative POSIX paths, path, 0x00, SHA-256 of the bytes; syft.pub.yaml skipped. It names its source, OpenMined/PySyft at 36e65162, packages/syft-job/src/syft_job/submission.py.","doesNotProve":"That PySyft's own hash agrees on every platform; the module names two edges (Windows path order, newline normalisation on the submitter side)."},{"path":"harness/_vendor/superstack.py","proves":"Canonical JSON v2 and superstack.receipt/1. The site carries the same contract, pinned, as system/media-engine/contracts.mjs (superstack.mjs v0.2.0).","doesNotProve":""},{"path":"tests/test_job_result_receipt.py","proves":"Flywheel's 16 paired tamper tests on this bundle, and the stated honest null: a consistent liar in the rows passes until the reveal.","doesNotProve":""}],"doesNotProve":["It does not prove the hidden model or the hidden data were what the parties said; that needs the enclave attestation link, which this receipt does not carry.","It does not prove the job ran only once, or that a run with a worse score was not discarded before this receipt was issued.","It does not prove the reviewer read the code or judged it well; it binds the approval record PySyft wrote, and PySyft does not sign that record.","It does not prove the scoring rule or the benchmark measures what it claims to.","It does not prove the per-item rows are correct until the hidden answers are revealed and rescored; before that, the score is only consistent with the rows.","It does not prove anything about enclave side channels, the hardware vendor, or any attestation verifier.","A valid signature shows only that the key holder issued this body. It says nothing about whether the key holder is honest."]},"receipt":{"about":"The published receipt's own numbers, read from receipt.json.","schema":"flywheel.pysyft-job-result/v1","envelope":"flywheel.signed-job-result/v1","correct":40,"total":50,"scoringRule":"exact-match-strip/1","itemsRoot":"sha256:a447d77e826ecabb5ad462bdc0e230991a4c78090caf0bf3ed618a70ee651ba2","resultsSha256":"27a766f0839ad05aed4e7860fdd8c67c4bdaa901c5e58c15d6bc098969457a82","approvedHash":"bef5357ed91c4289bf382975dbd754ab27ec4d519f83c5c6aef91c8435bb3a40","claimSha256":"846878f2e1be8f06f527dfbba3d3a46ea1bf912a501e1c788efc59e3514f3782","keyId":"ed25519:e02697950b600c7d10413ad9999cf1f7","nonce":"openmined-bridge-demo-20261003","attestation":"UNVERIFIABLE"},"rederive":{"about":"The score re-derived from results.jsonl alone (count the rows marked correct), and rescored against the revealed answers.","correct":40,"total":50,"fraction":0.8,"matchesStated":true,"reveal":{"correct":40,"sameItems":true,"disagree":[]}},"reproduce":{"about":"Every derived field of the receipt recomputed from its inputs with this lesson's code (WebCrypto SHA-256, canonical JSON v2 from the pinned superstack contract, RFC 6962 Merkle). same: the recomputed value equals the published one exactly.","fields":{"claim_sha256":{"stated":"846878f2e1be8f06f527dfbba3d3a46ea1bf912a501e1c788efc59e3514f3782","recomputed":"846878f2e1be8f06f527dfbba3d3a46ea1bf912a501e1c788efc59e3514f3782","same":true},"results_sha256":{"stated":"27a766f0839ad05aed4e7860fdd8c67c4bdaa901c5e58c15d6bc098969457a82","recomputed":"27a766f0839ad05aed4e7860fdd8c67c4bdaa901c5e58c15d6bc098969457a82","same":true},"items_root":{"stated":"sha256:a447d77e826ecabb5ad462bdc0e230991a4c78090caf0bf3ed618a70ee651ba2","recomputed":"sha256:a447d77e826ecabb5ad462bdc0e230991a4c78090caf0bf3ed618a70ee651ba2","same":true},"receipt_id":{"stated":"dfb88d482198a53ae376c5797536c226d77371cc33c0eeeb0b5ae66ba575cfce","recomputed":"dfb88d482198a53ae376c5797536c226d77371cc33c0eeeb0b5ae66ba575cfce","same":true},"superstack.receipt_sha256":{"stated":"baafc34180e5efecb4cb037df52c9e209419dc28ea01ba785b96437957cb68c5","recomputed":"baafc34180e5efecb4cb037df52c9e209419dc28ea01ba785b96437957cb68c5","same":true},"superstack.scene_sha256":{"stated":"c0c37ab628c95439023405f0a92fa733036da1f60d8ff566de412f8b01fd435e","recomputed":"c0c37ab628c95439023405f0a92fa733036da1f60d8ff566de412f8b01fd435e","same":true},"superstack (whole object)":{"stated":"e941bcfb35ca99168302b71410cbab61c63fcef619c2730cda55a450372bb2a4","recomputed":"e941bcfb35ca99168302b71410cbab61c63fcef619c2730cda55a450372bb2a4","same":true},"key_id":{"stated":"ed25519:e02697950b600c7d10413ad9999cf1f7","recomputed":"ed25519:e02697950b600c7d10413ad9999cf1f7","same":true}},"allSame":true},"verify":{"about":"The real bundle through the browser verifier with the bundle's key pinned, the demo's nonce, the reviewer do@example.org and the revealed answers. Flywheel's own verifier gives MATCH on the same inputs (recheck/pysyft-result-receipt.json).","verdict":"MATCH","failed":[],"extraFailed":[],"missing":[],"unavailable":[],"checks":[{"id":"signed_over","flywheel":true,"pass":true},{"id":"claim_digest","flywheel":true,"pass":true},{"id":"wrong_signer","flywheel":true,"pass":true},{"id":"signature","flywheel":true,"pass":true},{"id":"schema_or_limits","flywheel":true,"pass":true},{"id":"approval_covers_other_job","flywheel":true,"pass":true},{"id":"job_hash","flywheel":true,"pass":true},{"id":"approval_missing","flywheel":true,"pass":true},{"id":"approval_status","flywheel":true,"pass":true},{"id":"approver","flywheel":true,"pass":true},{"id":"superstack","flywheel":true,"pass":true},{"id":"superstack_scene","flywheel":true,"pass":true},{"id":"superstack_tolerance","flywheel":true,"pass":true},{"id":"superstack_content","flywheel":true,"pass":true},{"id":"results_bytes","flywheel":true,"pass":true},{"id":"items_root","flywheel":true,"pass":true},{"id":"score","flywheel":true,"pass":true},{"id":"replay_nonce","flywheel":true,"pass":true},{"id":"reveal","flywheel":true,"pass":true},{"id":"envelope_schema","flywheel":false,"pass":true},{"id":"key_id","flywheel":false,"pass":true},{"id":"receipt_id","flywheel":false,"pass":true},{"id":"superstack_metrics","flywheel":false,"pass":true}]},"sweep":{"about":"Every byte of each file flipped in turn (XOR 0x01, one byte at a time, so a file of n bytes gives n tampered bundles), each through the verifier. caughtByFlywheel: verdict DRIFT from Flywheel's checks; caughtWithExtras: DRIFT or a failed lesson extra. byCheck counts how often each check failed. uncaughtRegions: where in the file the uncaught bytes sit (JSON path for receipt.json). syft.pub.yaml is outside the job hash by PySyft's rule; reveal_answers.json is not bound by the receipt at all, so a changed answer is caught only when it changes a row's rescoring; public_key.hex is the verifier's own pin.","files":{"receipt.json":{"bytes":5744,"caughtByFlywheel":5663,"caughtWithExtras":5744,"byCheck":{"parse":1315,"malformed":13,"approval_missing":30,"approval_status":18,"approver":33,"claim_digest":4097,"signature":4152,"schema_or_limits":935,"malformed:job_hash":3,"malformed:superstack":29,"approval_covers_other_job":154,"job_hash":77,"superstack_scene":101,"replay_nonce":35,"malformed:results":6,"superstack_content":84,"score":16,"items_root":81,"results_bytes":78,"superstack:type":10,"superstack:missing:backend":7,"superstack:seal":1229,"superstack:missing:content_sha256":14,"superstack:reconcile:identity":141,"superstack:hex:content_sha256":8,"superstack:missing:does_not_prove":14,"superstack:missing:media":5,"superstack:media:kind":12,"superstack:missing:outputs":7,"superstack:missing:producer":8,"superstack:missing:receipt_sha256":14,"superstack:hex:receipt_sha256":7,"superstack:missing:reconcile":9,"superstack:reconcile:reference":23,"superstack:reconcile:verdict":24,"superstack:missing:scene_sha256":12,"superstack:hex:scene_sha256":11,"superstack:missing:schema":6,"superstack:schema":20,"superstack:missing:seed":4,"superstack:missing:seed_rule":9,"superstack:seed_rule":18,"superstack:missing:seed_u32":8,"superstack:missing:time":4,"superstack:time":30,"signed_over":33,"wrong_signer":74},"byExtra":{"malformed:receipt_id":14,"receipt_id":629,"superstack_metrics":109,"envelope_schema":35,"key_id":129},"uncaughtRegions":[{"where":"key schema","bytes":6},{"where":"schema","bytes":29},{"where":"key signature.key_id","bytes":6},{"where":"signature.key_id","bytes":40}],"uncaughtAllRegions":[],"uncaughtIndices":null,"ms":8891.8835},"results.jsonl":{"bytes":2892,"caughtByFlywheel":2892,"caughtWithExtras":2892,"byCheck":{"malformed:results":2510,"malformed:reveal":2510,"results_bytes":2892,"items_root":332,"reveal_items":200,"reveal":115},"byExtra":{},"uncaughtRegions":[],"uncaughtAllRegions":[],"uncaughtIndices":[],"ms":3439.2544},"job/code/main.py":{"bytes":697,"caughtByFlywheel":697,"caughtWithExtras":697,"byCheck":{"job_hash":697},"byExtra":{},"uncaughtRegions":[],"uncaughtAllRegions":[],"uncaughtIndices":[],"ms":1259.892},"job/config.yaml":{"bytes":422,"caughtByFlywheel":422,"caughtWithExtras":422,"byCheck":{"job_hash":422},"byExtra":{},"uncaughtRegions":[],"uncaughtAllRegions":[],"uncaughtIndices":[],"ms":730.7397},"job/run.sh":{"bytes":197,"caughtByFlywheel":197,"caughtWithExtras":197,"byCheck":{"job_hash":197},"byExtra":{},"uncaughtRegions":[],"uncaughtAllRegions":[],"uncaughtIndices":[],"ms":367.0265},"job/syft.pub.yaml":{"bytes":108,"caughtByFlywheel":0,"caughtWithExtras":0,"byCheck":{},"byExtra":{},"uncaughtRegions":[{"where":"job/syft.pub.yaml","bytes":108}],"uncaughtAllRegions":[{"where":"job/syft.pub.yaml","bytes":108}],"uncaughtIndices":null,"ms":195.2089},"reveal_answers.json":{"bytes":835,"caughtByFlywheel":818,"caughtWithExtras":818,"byCheck":{"malformed:reveal":503,"reveal_items":200,"reveal":115},"byExtra":{},"uncaughtRegions":[{"where":"reveal_answers.json","bytes":17}],"uncaughtAllRegions":[{"where":"reveal_answers.json","bytes":17}],"uncaughtIndices":[276,292,293,426,427,443,444,460,576,577,695,696,761,794,795,811,812],"ms":1456.5511},"public_key.hex":{"bytes":65,"caughtByFlywheel":64,"caughtWithExtras":64,"byCheck":{"signature":64,"wrong_signer":64},"byExtra":{},"uncaughtRegions":[{"where":"public_key.hex","bytes":1}],"uncaughtAllRegions":[{"where":"public_key.hex","bytes":1}],"uncaughtIndices":[64],"ms":106.7936}}},"controls":{"about":"False-success controls. sameScore: two rows trade correct flags so the count is unchanged; the score check passes and the hashes catch the edit. statedScore: the stated score is edited and the rows are not; digest, signature and score fail. cheater: a key holder flips one wrong row to correct and rebuilds every digest, the superstack receipt, receipt_id and the signature with its own key; with that key pinned every hash check passes and only the revealed answers catch it; with the original key pinned the signature check catches the substitution, which is why the lie must come from the key holder. lazyCheater: Flywheel's own test cheater, which leaves receipt_id stale; Flywheel's verdict is MATCH before the reveal and only the lesson's receipt_id extra catches it.","sameScore":{"what":"rows 1 and 17 trade their correct flags; the count stays the same","verdict":"DRIFT","failed":["items_root","results_bytes","reveal"],"extraFailed":[],"missing":[],"unavailable":[],"checks":[{"id":"signed_over","flywheel":true,"pass":true},{"id":"claim_digest","flywheel":true,"pass":true},{"id":"wrong_signer","flywheel":true,"pass":true},{"id":"signature","flywheel":true,"pass":true},{"id":"schema_or_limits","flywheel":true,"pass":true},{"id":"approval_covers_other_job","flywheel":true,"pass":true},{"id":"job_hash","flywheel":true,"pass":true},{"id":"approval_missing","flywheel":true,"pass":true},{"id":"approval_status","flywheel":true,"pass":true},{"id":"approver","flywheel":true,"pass":true},{"id":"superstack","flywheel":true,"pass":true},{"id":"superstack_scene","flywheel":true,"pass":true},{"id":"superstack_tolerance","flywheel":true,"pass":true},{"id":"superstack_content","flywheel":true,"pass":true},{"id":"results_bytes","flywheel":true,"pass":false},{"id":"items_root","flywheel":true,"pass":false},{"id":"score","flywheel":true,"pass":true},{"id":"replay_nonce","flywheel":true,"pass":true},{"id":"reveal","flywheel":true,"pass":false},{"id":"envelope_schema","flywheel":false,"pass":true},{"id":"key_id","flywheel":false,"pass":true},{"id":"receipt_id","flywheel":false,"pass":true},{"id":"superstack_metrics","flywheel":false,"pass":true}],"passes":{"score":true,"results_bytes":false,"items_root":false,"reveal":false}},"statedScore":{"what":"the receipt's stated score is edited to 41 of 50; the rows are untouched","verdict":"DRIFT","failed":["claim_digest","score","signature"],"extraFailed":["receipt_id","superstack_metrics"],"missing":[],"unavailable":[],"checks":[{"id":"signed_over","flywheel":true,"pass":true},{"id":"claim_digest","flywheel":true,"pass":false},{"id":"wrong_signer","flywheel":true,"pass":true},{"id":"signature","flywheel":true,"pass":false},{"id":"schema_or_limits","flywheel":true,"pass":true},{"id":"approval_covers_other_job","flywheel":true,"pass":true},{"id":"job_hash","flywheel":true,"pass":true},{"id":"approval_missing","flywheel":true,"pass":true},{"id":"approval_status","flywheel":true,"pass":true},{"id":"approver","flywheel":true,"pass":true},{"id":"superstack","flywheel":true,"pass":true},{"id":"superstack_scene","flywheel":true,"pass":true},{"id":"superstack_tolerance","flywheel":true,"pass":true},{"id":"superstack_content","flywheel":true,"pass":true},{"id":"results_bytes","flywheel":true,"pass":true},{"id":"items_root","flywheel":true,"pass":true},{"id":"score","flywheel":true,"pass":false},{"id":"replay_nonce","flywheel":true,"pass":true},{"id":"reveal","flywheel":true,"pass":true},{"id":"envelope_schema","flywheel":false,"pass":true},{"id":"key_id","flywheel":false,"pass":true},{"id":"receipt_id","flywheel":false,"pass":false},{"id":"superstack_metrics","flywheel":false,"pass":false}],"passes":{"claim_digest":false,"signature":false,"score":false}},"cheater":{"what":"row 17 (q016) is flipped from wrong to correct, and every digest, the superstack receipt, receipt_id and the signature are rebuilt with the cheater's own key","beforeReveal":{"verdict":"MATCH","failed":[],"extraFailed":[],"missing":[],"unavailable":[],"checks":[{"id":"signed_over","flywheel":true,"pass":true},{"id":"claim_digest","flywheel":true,"pass":true},{"id":"wrong_signer","flywheel":true,"pass":true},{"id":"signature","flywheel":true,"pass":true},{"id":"schema_or_limits","flywheel":true,"pass":true},{"id":"approval_covers_other_job","flywheel":true,"pass":true},{"id":"job_hash","flywheel":true,"pass":true},{"id":"approval_missing","flywheel":true,"pass":true},{"id":"approval_status","flywheel":true,"pass":true},{"id":"approver","flywheel":true,"pass":true},{"id":"superstack","flywheel":true,"pass":true},{"id":"superstack_scene","flywheel":true,"pass":true},{"id":"superstack_tolerance","flywheel":true,"pass":true},{"id":"superstack_content","flywheel":true,"pass":true},{"id":"results_bytes","flywheel":true,"pass":true},{"id":"items_root","flywheel":true,"pass":true},{"id":"score","flywheel":true,"pass":true},{"id":"replay_nonce","flywheel":true,"pass":true},{"id":"envelope_schema","flywheel":false,"pass":true},{"id":"key_id","flywheel":false,"pass":true},{"id":"receipt_id","flywheel":false,"pass":true},{"id":"superstack_metrics","flywheel":false,"pass":true}]},"afterReveal":{"verdict":"DRIFT","failed":["reveal"],"extraFailed":[],"missing":[],"unavailable":[],"checks":[{"id":"signed_over","flywheel":true,"pass":true},{"id":"claim_digest","flywheel":true,"pass":true},{"id":"wrong_signer","flywheel":true,"pass":true},{"id":"signature","flywheel":true,"pass":true},{"id":"schema_or_limits","flywheel":true,"pass":true},{"id":"approval_covers_other_job","flywheel":true,"pass":true},{"id":"job_hash","flywheel":true,"pass":true},{"id":"approval_missing","flywheel":true,"pass":true},{"id":"approval_status","flywheel":true,"pass":true},{"id":"approver","flywheel":true,"pass":true},{"id":"superstack","flywheel":true,"pass":true},{"id":"superstack_scene","flywheel":true,"pass":true},{"id":"superstack_tolerance","flywheel":true,"pass":true},{"id":"superstack_content","flywheel":true,"pass":true},{"id":"results_bytes","flywheel":true,"pass":true},{"id":"items_root","flywheel":true,"pass":true},{"id":"score","flywheel":true,"pass":true},{"id":"replay_nonce","flywheel":true,"pass":true},{"id":"reveal","flywheel":true,"pass":false},{"id":"envelope_schema","flywheel":false,"pass":true},{"id":"key_id","flywheel":false,"pass":true},{"id":"receipt_id","flywheel":false,"pass":true},{"id":"superstack_metrics","flywheel":false,"pass":true}]},"originalKeyPinned":{"verdict":"DRIFT","failed":["signature","wrong_signer"],"extraFailed":[],"missing":[],"unavailable":[],"checks":[{"id":"signed_over","flywheel":true,"pass":true},{"id":"claim_digest","flywheel":true,"pass":true},{"id":"wrong_signer","flywheel":true,"pass":false},{"id":"signature","flywheel":true,"pass":false},{"id":"schema_or_limits","flywheel":true,"pass":true},{"id":"approval_covers_other_job","flywheel":true,"pass":true},{"id":"job_hash","flywheel":true,"pass":true},{"id":"approval_missing","flywheel":true,"pass":true},{"id":"approval_status","flywheel":true,"pass":true},{"id":"approver","flywheel":true,"pass":true},{"id":"superstack","flywheel":true,"pass":true},{"id":"superstack_scene","flywheel":true,"pass":true},{"id":"superstack_tolerance","flywheel":true,"pass":true},{"id":"superstack_content","flywheel":true,"pass":true},{"id":"results_bytes","flywheel":true,"pass":true},{"id":"items_root","flywheel":true,"pass":true},{"id":"score","flywheel":true,"pass":true},{"id":"replay_nonce","flywheel":true,"pass":true},{"id":"envelope_schema","flywheel":false,"pass":true},{"id":"key_id","flywheel":false,"pass":true},{"id":"receipt_id","flywheel":false,"pass":true},{"id":"superstack_metrics","flywheel":false,"pass":true}]},"hashChecksBeforeReveal":{"claim_digest":true,"signature":true,"wrong_signer":true,"job_hash":true,"results_bytes":true,"items_root":true,"score":true,"superstack":true,"superstack_scene":true,"superstack_content":true,"schema_or_limits":true}},"lazyCheater":{"what":"row 17 (q016) is flipped from wrong to correct, and every digest, the superstack receipt and the signature are rebuilt with the cheater's own key","beforeReveal":{"verdict":"MATCH","failed":[],"extraFailed":["receipt_id"],"missing":[],"unavailable":[],"checks":[{"id":"signed_over","flywheel":true,"pass":true},{"id":"claim_digest","flywheel":true,"pass":true},{"id":"wrong_signer","flywheel":true,"pass":true},{"id":"signature","flywheel":true,"pass":true},{"id":"schema_or_limits","flywheel":true,"pass":true},{"id":"approval_covers_other_job","flywheel":true,"pass":true},{"id":"job_hash","flywheel":true,"pass":true},{"id":"approval_missing","flywheel":true,"pass":true},{"id":"approval_status","flywheel":true,"pass":true},{"id":"approver","flywheel":true,"pass":true},{"id":"superstack","flywheel":true,"pass":true},{"id":"superstack_scene","flywheel":true,"pass":true},{"id":"superstack_tolerance","flywheel":true,"pass":true},{"id":"superstack_content","flywheel":true,"pass":true},{"id":"results_bytes","flywheel":true,"pass":true},{"id":"items_root","flywheel":true,"pass":true},{"id":"score","flywheel":true,"pass":true},{"id":"replay_nonce","flywheel":true,"pass":true},{"id":"envelope_schema","flywheel":false,"pass":true},{"id":"key_id","flywheel":false,"pass":true},{"id":"receipt_id","flywheel":false,"pass":false},{"id":"superstack_metrics","flywheel":false,"pass":true}]},"afterReveal":{"verdict":"DRIFT","failed":["reveal"],"extraFailed":["receipt_id"],"missing":[],"unavailable":[],"checks":[{"id":"signed_over","flywheel":true,"pass":true},{"id":"claim_digest","flywheel":true,"pass":true},{"id":"wrong_signer","flywheel":true,"pass":true},{"id":"signature","flywheel":true,"pass":true},{"id":"schema_or_limits","flywheel":true,"pass":true},{"id":"approval_covers_other_job","flywheel":true,"pass":true},{"id":"job_hash","flywheel":true,"pass":true},{"id":"approval_missing","flywheel":true,"pass":true},{"id":"approval_status","flywheel":true,"pass":true},{"id":"approver","flywheel":true,"pass":true},{"id":"superstack","flywheel":true,"pass":true},{"id":"superstack_scene","flywheel":true,"pass":true},{"id":"superstack_tolerance","flywheel":true,"pass":true},{"id":"superstack_content","flywheel":true,"pass":true},{"id":"results_bytes","flywheel":true,"pass":true},{"id":"items_root","flywheel":true,"pass":true},{"id":"score","flywheel":true,"pass":true},{"id":"replay_nonce","flywheel":true,"pass":true},{"id":"reveal","flywheel":true,"pass":false},{"id":"envelope_schema","flywheel":false,"pass":true},{"id":"key_id","flywheel":false,"pass":true},{"id":"receipt_id","flywheel":false,"pass":false},{"id":"superstack_metrics","flywheel":false,"pass":true}]}},"lesson":"A hash proves the bytes did not change after they were hashed. A signature proves the key holder issued them. Neither says the rows were true when they were hashed; that needs a check against the truth, the revealed answers, as E24's exact checker was the only one that measured the goal."},"film":{"about":"The sweep counts again under names the film's script can reach (file names contain dots). Same numbers as sweep.files.","results":{"bytes":2892,"caught":2892},"receipt":{"bytes":5744,"caught":5663,"missed":81,"caughtWithExtras":5744},"permissions":{"bytes":108,"caught":0},"answers":{"bytes":835,"caught":818},"tampers":10960,"rows":[true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,false,true,true,true,true,true,true,true,false,false,false,true,true,true,true,true,true,false,true,true,true,true,true,true,false,true,true,true,false,true,false,false,true],"cheat":{"id":"q016","prediction":"57","answer":"56"}},"timings":{"about":"Milliseconds in Node (V8), one process at below-normal priority, on the fill machine's CPU. Each sweep runs the whole verifier once per byte.","parts":{"verify":40.0491,"reproduce":8.4204,"sweep receipt.json":8893.181,"sweep results.jsonl":3439.2669,"sweep job/code/main.py":1259.9097,"sweep job/config.yaml":730.7563,"sweep job/run.sh":367.0357,"sweep job/syft.pub.yaml":195.2193,"sweep reveal_answers.json":1456.5592,"sweep public_key.hex":106.8007},"seconds":17.517},"seconds":17.5}
