P08-03: 配置の通常操作受入

This commit is contained in:
Agent Control Runner
2026-10-14 09:31:08 +09:00
parent 31aa7706d2
commit 7dde98ccb7
11 changed files with 9608 additions and 40 deletions
@@ -1,5 +1,47 @@
# P08-03 condition matrix — implementation submission, not acceptance
## Repair13 current status (supersedes earlier submission status below)
Checker/test-only repair. Product, Runtime, Godot, collector, same31aa and rawR09
bytes are unchanged. Root supplied the read-only **post-collection** sips
measurement of 138 images; this is not capture-time metadata. All measured
screenshots are 1280×752 JPEG despite their .png names. Window content size
1280×720 is never used as screenshot dimensions.
The checker reads every image, checks SOI/EOI and bounded SOF0/SOF2 frame/scan
structure, and compares its dimensions and recomputed SHA against the Root
measurement and index. This is structural validation, not JPEG pixel decoding.
The measurement's original_index_sha256 binds the recomputed index. Exact
69-request/138-image membership and before/after dimensions are checked;
formal save thumbnails retain their separate existing member checks.
Collection pins bind the original index, runner receipts and both OS receipts;
every indexed original/canonical artifact must be byte-identical. Owner proof
is verified at ORIGINAL_ROOT/os-runs/{writer,reader}/teardown/control.json,
retaining original absolute varbytes pins without rewriting them.
Reuse is restricted to same31aa (`31aa7706d28a92e313c432d5a62e35d19503dcc3`):
all collected source/input hashes still match, except the two explicitly
changed Python validator/test sources and the new synthetic Python image
fixture. The old validator/test pins are checked against same31aa git objects;
product, GDScript fixtures, engine, recorder, controller and marker pins remain
exact. This exception does not confer gameplay or changed-product acceptance.
Current local Python results and final executed hashes are in
`repair13-local-validation.json`, `repair13-local-source-manifest.json` and
`implementation.json`. All 88 previous tests remain; 12 additional controls
cover baseline/progressive parsing, malformed/truncated/non-JPEG bytes,
SOF/measurement disagreement, before/after drift, missing/extra/duplicate
entries, extra indexed screenshots, source SHA, stale index, collection pin
and original/canonical divergence. Synthetic fixtures have no dependency on
operational Root handoff documents.
All five conditions remain unaccepted. R09 local integrity validation is not
the independent R09 re-check. Leave open: stair preview/domain-status
disagreement for independent acceptance, Windows same-distribution/device,
Root final175 after frozen submission, R09 re-check, independent Opus review,
and integration/current verification/ledger. No OS steps were replayed.
Immutable specification: `docs/spec/acceptance/P08-03.json`, normalized SHA-256
`7941da4edbd3c43a636a4a3d834d57c095b56da988fa3a056e55b22d3a5d50e9`.
Base HEAD: `12430ba89970bda349781e51157e72e48a4ac06f`. Worker made no commit.
@@ -325,3 +367,14 @@ Repair11 final pins and local results:
- test_p08_normal_placement_evidence.py: `b8189b2b4bf15933d7e3e760495928b6a5a7ec5b0400a1c5198427d1cb0a3408`
- Complete source/input manifest: `0d33515d9ef33656fe13aab3f417a18a2b602047d6eb013b3f6b896f0330edf6`
- Local validation: `188d61cb4e23211646cc9808bfb924bc56fe66f1fb7ef0534584740dcfcd9561`; 88 tests, 0 failures; four syntax checks passed. These controls establish no gameplay acceptance.
## Repair13 final executed local pins
Final execution: 100 Python tests, 0 failures; 3 syntax checks passed.
Actual R09 --verify-only: integrity pass, acceptance pending.
- tools/check_p08_normal_placement_evidence.py: 73bff1e00c319b8e681953fe64497eefb53ece168d2d18e0b60951e65f66279d
- tools/test_p08_normal_placement_evidence.py: 7e708a4429603166485b6f3267d887561d23bcf25b564d002473094e388476ca
- tests/fixtures/p08-03/repair13_images.py: 248a8d73ece3a60e601421fdd2ad53f8f8e971184fb1328c7155a71b8ed4ca53
- repair13-local-validation.json: f249c76c6d4c044c1a3c33ea09abc99f09a8c0ea6b0ade470d2af205eb4d89af
- repair13-local-source-manifest.json: 7d5a62155b7053398a5bc55879c9a92a07dcb3c5a0603e92d6f38eefba122ca1
@@ -0,0 +1,50 @@
# Repair12 recorded direction: context gap
Status: blocked; no checker implementation submitted. Inspected checkout HEAD
`31aa7706d28a92e313c432d5a62e35d19503dcc3`. Contract base remains
`12430ba89970bda349781e51157e72e48a4ac06f`.
The instruction requires JPEG SOF dimensions to match recorded before/after
dimensions. The available canonical R09 collection has 69 request.json,
69 ack.json and 69 input-receipt.json files. None contains recorded screenshot
before/after dimensions. The two indexed root-cua-ack-controller Python sources
also write no such dimensions. The concrete example
`os-pair/writer-request-0058/screen-before.png` has JPEG SOF dimensions
1280 x 752; its request.json records window_size 1280 x 720. Window size
therefore cannot substitute for screenshot dimensions. Extracting both sides
of a comparison from the same JPEG would not independently bind dimension drift.
Required context: identify and provide the existing, attributable R09 record
of before/after screenshot dimensions and its relationship to these 138 image
files. Do not invent records or change originalR09. If no such record exists,
the owner must resolve this requirement explicitly; the worker cannot silently
replace it with SOF self-consistency or window dimensions.
Original root access returned `Operation not permitted`:
`/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p08-03-native-os-r09`.
The canonical copy was readable at
`/Users/korizatou114/Projects/TheTree-managed-worktrees/p08-03-code/.runtime/P08-03/build/p08-normal-placement-evidence`.
Original/canonical byte equality was consequently not established by this worker.
No security settings were changed. Pillow is unavailable in the worker's Python.
Read-only Python inspection established:
- All 753 files listed in the canonical index match their indexed size and
recomputed SHA256. This is an indexed-byte audit, not a complete file-set gate
or acceptance result.
- Every current source_map member and input member matches the R09 index,
including product source, fixtures, controller, recorder, marker contract,
spec and inputs. The engine binary matches runner-input.json's engine SHA256.
- os-proof.json names `os-runs/writer/ended.json` and
`os-runs/reader/ended.json`. Recorded owner control paths use
ORIGINAL_ROOT/os-runs/{writer,reader}/teardown/control.json.
The original absolute varbytes pin must remain enforced.
Only this scoped document was added. Checker, tests, product and evidence bytes
were not edited. No tests, native engine, OS replay, regression, git writes,
Runner operations or agents were run. These inspections are not JPEG validity
checks and are not sufficient for acceptance.
All requested validator repairs and negative tests remain pending. Root's final
full175, R09 re-check, independent Opus review and integration remain required.
Preview/domain-status disagreement and Windows same-distribution remain open.
@@ -0,0 +1,124 @@
{
"unit": "P08-03",
"native_candidate": "31aa7706d28a92e313c432d5a62e35d19503dcc3",
"original_root": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p08-03-native-os-r09",
"index": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p08-03-native-os-r09/index.json",
"bytes": 301212,
"sha256": "68c29eb3d333ad0b6fb11664d8b0d18e326449da8b0dcca201343477744947fe"
},
"runner_input": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p08-03-native-os-r09/runner-input.json",
"bytes": 316087,
"sha256": "ce680cac09e66c6758c7cc4901e154a67ec31e8df217db7c90cd53dd7e6afde9"
},
"runner_ended": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p08-03-native-os-r09/runner-ended.json",
"bytes": 3196,
"sha256": "23a7602f293d7efb4c665a6d7456bb730c03bfa665ce93ac2a5d3427d4829cd2"
},
"OS": {
"writer": {
"receipt": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p08-03-native-os-r09/os-runs/writer/ended.json",
"bytes": 1329615,
"sha256": "645821cca51868f84b93ce09735196fdb65b5f3add310e4695db036ba8b26e6a"
},
"actual_pid": 80337,
"passed": true,
"engine_ended": true,
"exit_code": 0,
"error": null,
"guard_errors": [],
"cleanup_errors": []
},
"reader": {
"receipt": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p08-03-native-os-r09/os-runs/reader/ended.json",
"bytes": 1328376,
"sha256": "9dfb8c1d2f2930f6e48bce55146f0f02956cd7596c88f688442dc6d6ea5c0428"
},
"actual_pid": 92565,
"passed": true,
"engine_ended": true,
"exit_code": 0,
"error": null,
"guard_errors": [],
"cleanup_errors": []
}
},
"requests": {
"writer": 64,
"reader": 5
},
"actual_camera_cell": [
-8,
0,
0
],
"actual_selection": {
"entity_id": "facility_00000004",
"occupant_id": "facility_00000004",
"required": true
},
"camera_dispatch": {
"bounds": {
"max_x": 12,
"max_y": 6,
"min_x": -12,
"min_y": 0
},
"cell_dimensions": [
16.0,
24.0
],
"entity_id_before": "facility_00000001",
"local": [
546.5,
515.5
],
"map_position": [
475.0,
360.0
],
"occupant_id_before": "facility_00000004",
"pan": [
0.28118896484375,
109.441101074219
],
"screen": [
625.5,
580.5
],
"screen_transform": [
1.0,
0.0,
0.0,
1.0,
79.0,
65.0
],
"viewport": [
625.5,
580.5
],
"viewport_transform": [
1.0,
0.0,
0.0,
1.0,
79.0,
65.0
],
"world_cell": [
-8,
0,
0
],
"zoom": 0.5
},
"strict_registered_validation": "failed on mirrored absolute proof path; direct original check then failed PNG-only screenshot gate for actual JPEG",
"full_regression_final_candidate": "pending",
"independent_review": "pending",
"formal_acceptance": false
}
@@ -0,0 +1,31 @@
{
"candidate": "31aa7706d28a92e313c432d5a62e35d19503dcc3",
"native_collection": "R09 import/parse/handler writer/reader and actual OS writer80337(64 requests)/reader92565(5 requests) all exit0, all owned ended, guards/cleanup0",
"canonical_copy_error": "ordinary_gate absolute varbytes pin path expects original directory, not cloned build directory. checker.check(W,originalA) passes this gate",
"original_check_next_error": "missing OS screenshot; actual CUA getScreenshot bytes are JPEG although Root named them .png, PNG-only gate rejects",
"screenshot_formats": {
"JPEG": 138
},
"screenshots": 138,
"examples": [
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p08-03-native-os-r09/os-pair/writer-request-0058/screen-after.png",
"bytes": 169431,
"signature": "JPEG",
"first16": "ffd8ffe000104a464946000101000048",
"sha256": "a13d0a1f5c8420700edbec576be93eceab1a7ea6be82802aa2d42365d17026f4"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p08-03-native-os-r09/os-pair/writer-request-0058/screen-before.png",
"bytes": 167891,
"signature": "JPEG",
"first16": "ffd8ffe000104a464946000101000048",
"sha256": "ce8959eaad1dc24de5f2d8e89ca77afc7286120647603dbdaa78525e91f07e44"
}
],
"original_root": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p08-03-native-os-r09",
"canonical_root": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p08-03-code/.runtime/P08-03/build/p08-normal-placement-evidence",
"original_raw_not_modified": true,
"formal_acceptance": false,
"required_decision": "Safely satisfy strict image proof and provenance with original raw bytes retained; assess content-preserving re-encoding and verified original/canonical path mapping without redoing actual OS steps or relabeling failed validators; no relaxed image/provenance/whole-model or independence criteria."
}
@@ -0,0 +1,976 @@
{
"scope": "post-collection read-only measurement of immutable R09 images; not invented capture-time metadata",
"original_index_sha256": "68c29eb3d333ad0b6fb11664d8b0d18e326449da8b0dcca201343477744947fe",
"measurement_tool": "/usr/bin/sips -g pixelWidth -g pixelHeight",
"tool_stdout_sha256": "03126a9cb750316569fededbc1b7b758806c1e603ba9e7cf3ce67c9cc413211c",
"images": [
{
"file": "os-pair/reader-request-0001/screen-after.png",
"source_sha256": "b54b6f7fa5ee014698ecaa2d5df50e3dfd28f404474d1d722dd09d08fec1636e",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/reader-request-0001/screen-before.png",
"source_sha256": "de219c703de4dfb8e44b1ce4b5c2f26df059931067e00a55b8fc15db53d1d7f9",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/reader-request-0002/screen-after.png",
"source_sha256": "cde7dfdf26c1b08a302441420c7175d08e73854fa17f4d7007403d68f25238fd",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/reader-request-0002/screen-before.png",
"source_sha256": "8d9fd9fe1408162c2032530e5d7e14931a0ab0f4a0a7b9c2afc8e71adb4dce74",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/reader-request-0003/screen-after.png",
"source_sha256": "61f9116fb3ba373de996fd8674da62fce781e4670e5a849ecd51b03309dfec52",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/reader-request-0003/screen-before.png",
"source_sha256": "8c338125bee670059af829b8208831bececf883afbd0cd20a3799d575ca2003f",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/reader-request-0004/screen-after.png",
"source_sha256": "eb97a85ccf570690d0f83f8f6a3a2fea2c5ae7b9af45f6d7433732480a93f2de",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/reader-request-0004/screen-before.png",
"source_sha256": "e39330e00bf85082cef937af1b42cfb7f1ee9ea6ca59ad27310ba2b5ba78cd14",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/reader-request-0005/screen-after.png",
"source_sha256": "8cac36016a2309451269b62b5f8ccc923b6818205260a9dc1c44d09dd8a7d86d",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/reader-request-0005/screen-before.png",
"source_sha256": "5c71fd681ed7b41350f431ed486e32e6df6c6a833a0c9c2d7d3506906eb0c4c1",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0001/screen-after.png",
"source_sha256": "685d672ff0349c317f0e6257512e25c1ce547606ec3d4d331970ae0c1d0ff7d8",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0001/screen-before.png",
"source_sha256": "7378e03e85dd92629883988fbe6420142a2012f4485f023231f3148697ea49b8",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0002/screen-after.png",
"source_sha256": "ef680cf46d904ba830115e833e332221bf6333995b013aa5157df0de92a49220",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0002/screen-before.png",
"source_sha256": "68f63798582a7404fe024afd8ddcc5680ac32d8efeefbb587f5e0be79091c43c",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0003/screen-after.png",
"source_sha256": "806c43c47b4da5a19a41ecfb70014120f0fab9cca98c8641ab3f3c791e4e7321",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0003/screen-before.png",
"source_sha256": "91ddeee45a12b1e5c60630cc0bb5e3c9a2cb73b667c782c53d86b4540867ce48",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0004/screen-after.png",
"source_sha256": "c44d0b0d9540e54db5cb507cce9a160c8f746813d9b592c7bfca6f3fc34ace07",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0004/screen-before.png",
"source_sha256": "c3b351565a4f7a63771313f1f62201ba4912465e3a747a16edcdf6812f817f0e",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0005/screen-after.png",
"source_sha256": "9626def46a116578a06e7673bd9c4c52d1e6cc00df8e0f152028021c38206736",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0005/screen-before.png",
"source_sha256": "cce2a6ca77b1878dc3afccb59f11d44d2b12fdb8251ce188866f00b62ee39b21",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0006/screen-after.png",
"source_sha256": "915c9b10978026a1de5fc4efb4c6d49c5841431f0f947031de931289fd51fbbe",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0006/screen-before.png",
"source_sha256": "532d5e4f10549c7dad44cc4e07d161fc84069518f776140ae869b73fbf151ecd",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0007/screen-after.png",
"source_sha256": "4f6257841b5f37bc1e8b4429803216bddbfc8c212954685fdd6b2a12c301ae98",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0007/screen-before.png",
"source_sha256": "970a2a1986c18d9a26b3a7682de38b95cd3ba80fdb5e48e75a5f2af26c939761",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0008/screen-after.png",
"source_sha256": "a9cca8444c00ffcaa4a50a5bafea3204b8e007e0a61e31c9c119ed0d1a0a9f5c",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0008/screen-before.png",
"source_sha256": "fb58d85c83c9e5c09f2c869e8171a577b1f53b7b8669f369f7e2e6ff46c01af2",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0009/screen-after.png",
"source_sha256": "bce7ecf4e8b288e05df5d098c7ea9d15918457e9360864923cf0283b13dcfaef",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0009/screen-before.png",
"source_sha256": "27926f876398d59ec12e4263f537997efc0c45a16f99e4e45e5bbd8df2f8b980",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0010/screen-after.png",
"source_sha256": "9109144c9aa892b9602b9b1c9bd76a33a3b77e64bf172e91db0b04b5117d7028",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0010/screen-before.png",
"source_sha256": "4e949455676f2c9b6a2e54a1c4535cdaad5443b2866bdbb1f00bb5bd8fe2d33f",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0011/screen-after.png",
"source_sha256": "9225d1306242056aab728674c0ddc70db352f7b340a2383ff2abfc71bcbd3545",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0011/screen-before.png",
"source_sha256": "484ba517d60755900d4b236591e5662800fe2d8920567589aca36dba51a527c8",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0012/screen-after.png",
"source_sha256": "5be61fbf3b8b97264734fe2485acd4351540e7d5a464acf28c1fc825ad63ad66",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0012/screen-before.png",
"source_sha256": "c405713b49527f218fe9b775398e6d5c5fa634659e9772e1f92f78f8900860e7",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0013/screen-after.png",
"source_sha256": "2d75692d7ca006c2a107dd4a1ec96169b97b74e10a893eccc769fff51f673c77",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0013/screen-before.png",
"source_sha256": "a0ad8e4afb6dfa02220b5b6f43f5db8753ceba9d0263551d1829655ab7b36e1c",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0014/screen-after.png",
"source_sha256": "b76e0f4f1d6d241b862c888bb6a4d0f412c3cc128c63cf9431fa4ae909b3da65",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0014/screen-before.png",
"source_sha256": "f6d72f5de7e79bfa316664015e2b733c204eec170586161aa207a57967fe623a",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0015/screen-after.png",
"source_sha256": "122d9e6eadaaa453c6aeb0edb05f783d9d9290be29c89ff80f292728a03b6ac7",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0015/screen-before.png",
"source_sha256": "165d50aa0b26bd3244c311560f3ac95fbfd3e22d7ad9c3740638a060a61371f6",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0016/screen-after.png",
"source_sha256": "9d5db7ab5703d08319233d12d5c1324944692876d24904f27f8231137178c995",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0016/screen-before.png",
"source_sha256": "c58b82369638d39507b9e0ace7a674c2d75dc4be04022de3f8767e23751acc5f",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0017/screen-after.png",
"source_sha256": "e22b06968d21aaf7f4567e6fd0a15785680b54ac6e5285443f0ba6548e6fc4aa",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0017/screen-before.png",
"source_sha256": "9d2d785c6750daca47cfab652ee807697cea59469c8bbe4335766eeb49dbeb05",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0018/screen-after.png",
"source_sha256": "e3d72eea15ed516ce97f43f31b7627e5336467ae7a64a8bbbd72f9733869ea3d",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0018/screen-before.png",
"source_sha256": "57005d30173b51e58531c586dc10712786160d663e100b958f9d487ef09376ae",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0019/screen-after.png",
"source_sha256": "9255d120eb5021c636fc6e6f74c3af72f741aad278ee024eea4901d776a242d5",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0019/screen-before.png",
"source_sha256": "bb72bba570b3c3d97785ef0c2f084a5dd98eef600f95eea2a2163a12a68bd482",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0020/screen-after.png",
"source_sha256": "4a5e8d7d9d78bc670eb1a3775912506bf6bb1106ed9e8d270c977244ee382119",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0020/screen-before.png",
"source_sha256": "9482ff51c1c56dbb595587c9f1f42d73d2cf22eaf4c5cd965f79f34b882aae1c",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0021/screen-after.png",
"source_sha256": "be21bf324daf892c34cc1726ff36a84d8312c584199c042cfc853af148d86ace",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0021/screen-before.png",
"source_sha256": "8551975c3ab1be67776b14771dce614b801ca56517740618e4270f4e3466cf22",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0022/screen-after.png",
"source_sha256": "a39a7688a3c5beab968d0a34e5a55791773b934d4158160cc54b6b37fe31550e",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0022/screen-before.png",
"source_sha256": "543cb4a1dc8976af90449297ee734539eea3361a9e4112ccab510f269a7bb94f",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0023/screen-after.png",
"source_sha256": "569715f733c918ec7b6211d953526b0df66b521df855ade7e3554476638509b6",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0023/screen-before.png",
"source_sha256": "cd09b4b43abf503f3b5b4cd397a002e88909dda37084fb090bf2278fe11e6255",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0024/screen-after.png",
"source_sha256": "1878386793d16510a1d8f289131688538542996d5f778118f606bb9f466a1d99",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0024/screen-before.png",
"source_sha256": "cd9a4f8050f06595460ad667307fa62b29b807eb59dd60d628024ca1ef60e345",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0025/screen-after.png",
"source_sha256": "4733c86f40ee9d66b4f2e801b17d46eed30e23979f8602899071de2be117d15c",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0025/screen-before.png",
"source_sha256": "72586b2cdeb481c2ff1d956eec6aa9fdf08941e59f67e56c3d8665fc3ef89141",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0026/screen-after.png",
"source_sha256": "a31ed7d43307c05703d183eb6e639366312dfaa5513e0c19db6838505f6c0e50",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0026/screen-before.png",
"source_sha256": "46a6004cf1fffa7a8ebfcc93076267c45bfc4283beac25433aff35ab6d2312ed",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0027/screen-after.png",
"source_sha256": "aa44efd2415d0ef7dca4b46a700adf4d96f073727fee7888a15a2a2ae90270cf",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0027/screen-before.png",
"source_sha256": "cf0b99d7035f636961824c919bab0d93a0c814c97bf27f789a1d909f3160360f",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0028/screen-after.png",
"source_sha256": "87cbcc1b0c444a1073d0cb48a4e4687a88bed87bb0efabcc40d098f98aee4861",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0028/screen-before.png",
"source_sha256": "52dc193175d1a12a41d3bc55f368646e900caae479e8c8ef6c7bf2de4009ce49",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0029/screen-after.png",
"source_sha256": "e38a3a141816b242e8fcdea1a729877daa57a43094853002dec2497368f9211c",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0029/screen-before.png",
"source_sha256": "acbe7607ec4a3b0a04c59c8f2b8cee7f79d21cdcd6d7c5a5f7aef0c4ecdb7253",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0030/screen-after.png",
"source_sha256": "0a8f71d79face5b53277171db1d8b7a5bef215972311efed527c2a9153a85d98",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0030/screen-before.png",
"source_sha256": "a0ed46e43d628ab7eab28ff0173634cf9adfd4d78ce0d255caadbf8659d0ff48",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0031/screen-after.png",
"source_sha256": "7081709f6e37d7d47db3592bb9a621f40daff426b27d17941a9a46369d90c4cb",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0031/screen-before.png",
"source_sha256": "3013e92573621d326f8bcc65e8f1d57ac1eefd0f71eb61f605fcabb56d6c44f6",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0032/screen-after.png",
"source_sha256": "add6518c2564fb76e7454151ca7d8f20c897f65e2db6355b460b1c2a86754c71",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0032/screen-before.png",
"source_sha256": "d938c4a4a2c2a0b203a31c123c03bd0f7ef73fb6d267d186edb44c5ef721d56b",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0033/screen-after.png",
"source_sha256": "dc4d8b182e13623560c72501e2abe436aeb118f69d99e4cc9360c8cc18971f1b",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0033/screen-before.png",
"source_sha256": "f331391c69347860d9c9184a7277fda3720cc1c4949b132b9346742c49716c61",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0034/screen-after.png",
"source_sha256": "771b00371fb8c4ef9797b0d62490be11fa48164beedd846f888207bc3c867175",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0034/screen-before.png",
"source_sha256": "81dae87e99555528f0cbb7fe19bb7485983c5a0f29a0692cfbc1b18690a4346f",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0035/screen-after.png",
"source_sha256": "dc6ffea5314485f9270f4f1ea78ade78afd59655b0613898365dc12ea0398b18",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0035/screen-before.png",
"source_sha256": "673c2f0fe3244ecc897b014699ef6491cae80d2bab8fbccdac8fd86f37203b9c",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0036/screen-after.png",
"source_sha256": "3695ecb8109c3b1b4810adff8f8a112cc238ec8051fcb0aeec624e7df4be208d",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0036/screen-before.png",
"source_sha256": "d0386b449b9e91e85a0e05122202846e230facea4fa362c8583bfedf0f563c1e",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0037/screen-after.png",
"source_sha256": "99bf2fcc940d6e1351873024af933c30d5bed5e8b085f3f0ba7762097744bf26",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0037/screen-before.png",
"source_sha256": "2b5c953a0e02da363273e72832bbbd14d6aa13955a77ab8b58e8b0babd617b0e",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0038/screen-after.png",
"source_sha256": "ba98f3832f4a0ad8c365d4342c899accfacc2b2910621892adfeef2af2e741cd",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0038/screen-before.png",
"source_sha256": "01c5666579d78a58d49a7e8b11f3273e4bd5cd97d32f8c15bd57ec2982f0067d",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0039/screen-after.png",
"source_sha256": "f7368b2ccaab8fe218465f919fadeb75d18640bb5282fe7fd52a5e589b5e57cc",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0039/screen-before.png",
"source_sha256": "92f15737f3617e860fe288655134e995686401b32de6c561894a470e035a1c00",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0040/screen-after.png",
"source_sha256": "46d3b76b586a7ee3aa2943ed4f659f137933abb6d25f0eed5f60e546455dc0d6",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0040/screen-before.png",
"source_sha256": "ceb54f8d409778c90ac162b244822f718ff5a5e9471f6efde44643d154a3ff17",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0041/screen-after.png",
"source_sha256": "29024b76601c1ec5c5ea3e150eac42019be30aac9ab17d737835afff14fc3ed6",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0041/screen-before.png",
"source_sha256": "6aef1783644c4eb31ddbdd8fc26e4cfc08546d3d982a38a0e65caf1bc6b56d55",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0042/screen-after.png",
"source_sha256": "b7a0d3b23b609f6a66f1aee07f26d145005152627e3018a8975b785fcd365f0e",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0042/screen-before.png",
"source_sha256": "c1b61f3df55a383a24fa545f89a6a9e353ec9ce214ad3e8c3d972fd002aadae6",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0043/screen-after.png",
"source_sha256": "424a5ed967e5430646a09cb79e005a37e57180bc6bc45019c35297b5d1d11bf5",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0043/screen-before.png",
"source_sha256": "cbc3cddd3b2780c61da7ccf4d0685aff2af79652086cf7b4b3c8a0b2e60e3ce6",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0044/screen-after.png",
"source_sha256": "95c8f783cd2758d7c1ae7759e3143d5f6e2d12a6f7f6958982581a292a20e59c",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0044/screen-before.png",
"source_sha256": "ea1dea1b2119438db7342ccf07099fce6bbf19306ab7e140ac0aae2bf904ad84",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0045/screen-after.png",
"source_sha256": "8384de8ca62d374c56602e0f02866334fb5952ae1769e772b458c23646046d47",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0045/screen-before.png",
"source_sha256": "747ef5a69382710d17d46d810941c6591763e51ea1c9ab9a06b1e1172348edd0",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0046/screen-after.png",
"source_sha256": "87303f72438035b05946b45e96fcfd5e1635acb6f045bef5882d1f54ab1d9c3e",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0046/screen-before.png",
"source_sha256": "01735714b37386f40b9e185c06ac994fa5d60736b6fcf4f8c653566317db2dff",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0047/screen-after.png",
"source_sha256": "0c22cc8246c5b5eb349147e9c2633ad280d1489d36313f8486a36909a0edf4dc",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0047/screen-before.png",
"source_sha256": "d74da0f11f706ec90d29c85fc61c8410e770fc512e51ffef8fd47cfeb7833314",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0048/screen-after.png",
"source_sha256": "f25c6679a66d53fa0baef6946cb09c6b34b5a3215132f8912176ac07ae4fd178",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0048/screen-before.png",
"source_sha256": "142264548642eeb26e3131199077433280f2abfc8e3c185c0b80b8ac7dc88368",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0049/screen-after.png",
"source_sha256": "f13497c3acf83c3d0d44e9bc55334000e62e830fb043d823d33845b8e0dd3243",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0049/screen-before.png",
"source_sha256": "4d09dd8f26cb9d23dd8be9e0e1ecd57cd0c314c5c0f3a69b8ede9fd21671478c",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0050/screen-after.png",
"source_sha256": "16d49100dc19067be96c76e298bdba65912c067af2f25ade8069aaaecfb7f257",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0050/screen-before.png",
"source_sha256": "8b750551b8aedef80bf3e6648ed16ebeda5b78ae2f97f99202d9db1af89e8dea",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0051/screen-after.png",
"source_sha256": "57218dbfdf0d561d761c64e47c36c278bdec43e014431383a4ad2c1e23b1b0e4",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0051/screen-before.png",
"source_sha256": "65e5d9d93f57ebd6af5a88db73e44ac9084162e2c30895431490852b73aae07b",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0052/screen-after.png",
"source_sha256": "5e2f067f3e271c6f380454cd44268ee83203871a50710fbad456b23dfc1e429b",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0052/screen-before.png",
"source_sha256": "c4a945390bd626fff4f3f7af44f9e508c6af6aa97b1c7be356f9949dc6ede205",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0053/screen-after.png",
"source_sha256": "a989599abc63a7418c8b65ff64d65f9251e09a0de6dbf99b83524e066bb26c19",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0053/screen-before.png",
"source_sha256": "cf3fa4764f3d7ab2a2de43b477ad459fd63bf653d62a0e43ec515fc6033b7bf8",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0054/screen-after.png",
"source_sha256": "bde2224c59ec06f948dc889654bf0aa173ab4502d90605b33a501353217685de",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0054/screen-before.png",
"source_sha256": "7c30aec29a115a067e067393c04c1ef930976577456fd41a4583895b0903b94a",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0055/screen-after.png",
"source_sha256": "f330511835fd1d8526b0b9c758a117ed5a051f9bb9dc97eb519732b327fe092d",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0055/screen-before.png",
"source_sha256": "d73e160d1eec129f36ffcf10fd42bce77b7d0e0a794c00c9b7d28e0d8546f979",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0056/screen-after.png",
"source_sha256": "f1d0914ebfec58d8098dbf53c142fb27afe08891162e62244b6a69a335942658",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0056/screen-before.png",
"source_sha256": "06cfb2c3d8a74dd8a33aeb96830ed86e7bbaaa9714ff8423eb7a22098782945f",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0057/screen-after.png",
"source_sha256": "c4182734d4ea40bfe6dee01e2d7809a7e396b367fbde251c44fdebeca7ea832d",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0057/screen-before.png",
"source_sha256": "d5b59f180a124f74dff53fd3c0f7050a8022667ea4405929042ddb4c35fe962c",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0058/screen-after.png",
"source_sha256": "a13d0a1f5c8420700edbec576be93eceab1a7ea6be82802aa2d42365d17026f4",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0058/screen-before.png",
"source_sha256": "ce8959eaad1dc24de5f2d8e89ca77afc7286120647603dbdaa78525e91f07e44",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0059/screen-after.png",
"source_sha256": "5375cfadc79596c8f404d2ef7573fcec522f0f42f2049d6095a887578ef62d45",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0059/screen-before.png",
"source_sha256": "85f25e0e2edb225371e2d66adf4c733aee093d2774b03ea6bc1e2c57aecb41db",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0060/screen-after.png",
"source_sha256": "7782db3ef0a6a2c8f26695ad5aa6978d373c903ada226c987004bbdffdfcb544",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0060/screen-before.png",
"source_sha256": "fe29ed682a21b12f39c2f8329b934992ea14357f0738a5bbdb5918fe2dfcc3d4",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0061/screen-after.png",
"source_sha256": "0f1416c3bb88e58401c2e8a3151eadbd42609b96ce0f47dc1411da00a496fc1f",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0061/screen-before.png",
"source_sha256": "63aa95d1dda03f1a253364dadf9ebb4ce61dc8976482afe26e10a98c7d256290",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0062/screen-after.png",
"source_sha256": "c8dea8222efab5aa0d4a3c0de8387a38f0e8f9e43ff5d6796f160475c1ed06ea",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0062/screen-before.png",
"source_sha256": "78cacff1897f04525b06de0bec81689cdbb5027d8d388b9ea60b69ccb3a91238",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0063/screen-after.png",
"source_sha256": "a654e2584d16a8f6cf70822ad61c03925b13910511843b7bb6e3d8fb3c7044a1",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0063/screen-before.png",
"source_sha256": "ed9127c074512800ebb12e46cc3a4669308e84a2229a963abf2c8aef5e56c631",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0064/screen-after.png",
"source_sha256": "f62e00c37d09e382c04d321a2234f8794b71da88dfdacc86ab4c7b46a965ac27",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
},
{
"file": "os-pair/writer-request-0064/screen-before.png",
"source_sha256": "8751fad9f2fd8820d634889d984abebfb2c79f8af6c515a8e24e443569d7fe57",
"width": 1280,
"height": 752,
"format_by_magic": "JPEG"
}
],
"pairs_have_equal_dimensions": true,
"formal_acceptance": false
}
@@ -5,7 +5,7 @@
"P08-03"
],
"base_commit": "12430ba89970bda349781e51157e72e48a4ac06f",
"actual_worktree_HEAD": "1f0a2bcd53c3f9fdf057e7916871cf5b42145c55",
"actual_worktree_HEAD": "31aa7706d28a92e313c432d5a62e35d19503dcc3",
"worker_committed": false,
"final_commit": null,
"final_commit_note": "Root must freeze and record the submitted candidate; worker git writes are prohibited.",
@@ -18,7 +18,7 @@
},
"final_local_files_sha256": {
"docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json": "9eab2b529e11d00bb00a415f29135b5fe7d8df2a282564ecc37292c8bda64010",
"docs/plans/original-completion-2026-10-02/execution/p08-03/CONDITION_MATRIX.md": "e3555cb48ac268af919f8196faa698bc19e344c42d6f37f16b62d2458ca39219",
"docs/plans/original-completion-2026-10-02/execution/p08-03/CONDITION_MATRIX.md": "d441fd4acfacbfb7c149456535af8ba9f50c374e53d2f1a376e544247dfcedc0",
"docs/plans/original-completion-2026-10-02/execution/p08-03/ROOT_COLLECTION.md": "0bf5a4b0f6f1fc21e4e0dd314f74030cdae9073c7531f77fb8b6177dfb0b2823",
"docs/plans/original-completion-2026-10-02/execution/p08-03/passive_os_placement_recorder.gd": "21855e3b32263eb98127202467b770cb1334fa70c6b357825a122db385ffa8d6",
"docs/plans/original-completion-2026-10-02/execution/p08-03/passive_os_placement_recorder.gd.uid": "d7f97560c8bbdfdaed173b2b48261e65b92847bd0493dd1cc2ebb309d0622314",
@@ -31,23 +31,24 @@
"tests/fixtures/p08-03/placement.gd.uid": "5caca08c1e627e0ca07e2ab7b13bd82b24a22f77513fe87e30b79023568e1987",
"tests/ui/test_p08_normal_placement_ops.gd": "d3c246d34f8fd66f6ed237e42a86df89ebaf481bc9dee143b4de8d654ce0eb2e",
"tests/ui/test_p08_normal_placement_ops.gd.uid": "7d168ac50ca82ae1979da31c467f9a5020ca5ec7616b5bf99294413d85b3b299",
"tools/check_p08_normal_placement_evidence.py": "e3fea19be9952cd99be4df003734c43e6f81580b79984addb3622d81c1a2cc4e",
"tools/check_p08_normal_placement_evidence.py": "73bff1e00c319b8e681953fe64497eefb53ece168d2d18e0b60951e65f66279d",
"tools/regression/suite-policy.json": "a74dc701155b6207bc23095296d723928f62719fce14fda392b12f9947007fb1",
"tools/run_p08_normal_placement.py": "5cb1f58664a0bec71c8b5e853749d1c3656e0a2a027201e33fbaa6b0c0291fc6",
"tools/test_p08_normal_placement_evidence.py": "b8189b2b4bf15933d7e3e760495928b6a5a7ec5b0400a1c5198427d1cb0a3408",
"tools/test_p08_normal_placement_evidence.py": "7e708a4429603166485b6f3267d887561d23bcf25b564d002473094e388476ca",
"docs/plans/original-completion-2026-10-02/execution/p08-03/NATIVE_R02_READER_OPERATION_DELTA.json": "60463e735d4f473bdad7b0925c37b9ca71ee34d6f0eb74ea6c07b508b5153e41",
"docs/plans/original-completion-2026-10-02/execution/p08-03/native-r02-reader-stderr.log": "8079b3dc2ba7b9a9c37fcd9a5a8df0971354027c60def4b95fb15c7310832040",
"docs/plans/original-completion-2026-10-02/execution/p08-03/OS_R04_INITIAL_LOAD_ORACLE_FINDING.json": "6a796bd63f5a16bd0bf0fcf07cec3f4414a5e6704409a79522a2677eae53b417",
"docs/plans/original-completion-2026-10-02/execution/p08-03/os-r04-writer-engine.log": "f78c28c53460b767e924867f5158787c8497973e6f1c10353cb0f2cb2cbc3a3d",
"docs/plans/original-completion-2026-10-02/execution/p08-03/registered-r04-evidence-manifest.json": "6189fb2fe983d11faf96f99d6e21eba550be8e89c083c1277ac2ada9fa50cafa",
"tests/fixtures/p08-03/r05-reader-checkpoint.json.gz": "27fd3b41834106ccd6a0980dfa2bc91cc19806dd3f552ba04246efb400763233",
"tests/fixtures/p08-03/r05-reader-checkpoint-provenance.json": "daf034375facf36e9cc8da4ec0001d7c7b017c315a9155680b4b490e582ec5b9"
"tests/fixtures/p08-03/r05-reader-checkpoint-provenance.json": "daf034375facf36e9cc8da4ec0001d7c7b017c315a9155680b4b490e582ec5b9",
"tests/fixtures/p08-03/repair13_images.py": "248a8d73ece3a60e601421fdd2ad53f8f8e971184fb1328c7155a71b8ed4ca53"
},
"executed_source_manifest": {
"path": "repair11-local-source-manifest.json",
"sha256": "0d33515d9ef33656fe13aab3f417a18a2b602047d6eb013b3f6b896f0330edf6",
"source_file_count": 1328,
"contains": "Complete final local source and fixture/input manifest; Python-only validation; no size omissions"
"path": "repair13-local-source-manifest.json",
"sha256": "7d5a62155b7053398a5bc55879c9a92a07dcb3c5a0603e92d6f38eefba122ca1",
"source_file_count": 1329,
"contains": "Complete final local source/input and unchanged same31aa collected source/input/engine maps; Python only"
},
"final_input_sha256": {
"AGENTS.md": "8d8dc40211390275f858f322743309a0663c4f2d859780a8b8a08cea1450e8b3",
@@ -75,65 +76,70 @@
"tests/fixtures/p08-03/placement.gd": "1ebaaa80784905d661954e255bfb8a96a3a963a57b9a38b19e7f91b90fb628b3",
"tests/fixtures/p08-03/placement.gd.uid": "5caca08c1e627e0ca07e2ab7b13bd82b24a22f77513fe87e30b79023568e1987",
"tests/fixtures/p08-03/r05-reader-checkpoint-provenance.json": "daf034375facf36e9cc8da4ec0001d7c7b017c315a9155680b4b490e582ec5b9",
"tests/fixtures/p08-03/r05-reader-checkpoint.json.gz": "27fd3b41834106ccd6a0980dfa2bc91cc19806dd3f552ba04246efb400763233"
"tests/fixtures/p08-03/r05-reader-checkpoint.json.gz": "27fd3b41834106ccd6a0980dfa2bc91cc19806dd3f552ba04246efb400763233",
"tests/fixtures/p08-03/repair13_images.py": "248a8d73ece3a60e601421fdd2ad53f8f8e971184fb1328c7155a71b8ed4ca53",
"docs/plans/original-completion-2026-10-02/execution/p08-03/ROOT_NATIVE_R09_COLLECTION_PINS.json": "75ff43ce60540463e88c5aa60aaba997e67827057689049dc4228fe51afa1409",
"docs/plans/original-completion-2026-10-02/execution/p08-03/ROOT_R09_READONLY_IMAGE_DIMENSIONS.json": "baa0c6dd2e40b53e9eedb52b6d2fde040414a5b7fb5fcbdf99b5f81906eb40de",
"docs/plans/original-completion-2026-10-02/execution/p08-03/ROOT_R09_COLLECTION_AND_PUBLICATION_DIAGNOSIS.json": "59a6e37141b16509449fbc90d40ea8932fe8e93dec800a6915ecfffed1f89d3e"
},
"actual_local_validation": {
"path": "repair11-local-validation.json",
"sha256": "188d61cb4e23211646cc9808bfb924bc56fe66f1fb7ef0534584740dcfcd9561",
"python_syntax": "pass: four Python sources parsed in memory",
"checker_control_tests": 88,
"path": "repair13-local-validation.json",
"sha256": "f249c76c6d4c044c1a3c33ea09abc99f09a8c0ea6b0ade470d2af205eb4d89af",
"python_syntax": "pass: three changed Python sources parsed in memory",
"checker_control_tests": 100,
"checker_exit_code": 0,
"native_OS_full_regression": "not executed"
"actual_R09_verify_only": "integrity pass; acceptance pending",
"native_OS_full_regression": "not executed by worker"
},
"conditions": {
"support_connection": {
"implementation": "prepared",
"local_checker_controls": "Python synthetic whole-checker controls and SHA-verified actual R05 checkpoint controls; no gameplay acceptance",
"actual_Godot_handler": "pending",
"actual_native_OS": "pending",
"local_checker_controls": "100 Python controls passed; 88 existing retained and 12 Repair13 additions",
"actual_Godot_handler": "same31aa R09 collection preserved; independent acceptance pending",
"actual_native_OS": "same31aa R09 preserved; local read-only integrity pass, Root re-check pending",
"independent_review": "pending",
"accepted": false
},
"invalid_position_reason": {
"implementation": "prepared",
"local_checker_controls": "Python synthetic whole-checker controls and SHA-verified actual R05 checkpoint controls; no gameplay acceptance",
"actual_Godot_handler": "pending",
"actual_native_OS": "pending",
"local_checker_controls": "100 Python controls passed; 88 existing retained and 12 Repair13 additions",
"actual_Godot_handler": "same31aa R09 collection preserved; independent acceptance pending",
"actual_native_OS": "same31aa R09 preserved; local read-only integrity pass, Root re-check pending",
"independent_review": "pending",
"accepted": false
},
"demolish_rebuild": {
"implementation": "prepared",
"local_checker_controls": "Python synthetic whole-checker controls and SHA-verified actual R05 checkpoint controls; no gameplay acceptance",
"actual_Godot_handler": "pending",
"actual_native_OS": "pending",
"local_checker_controls": "100 Python controls passed; 88 existing retained and 12 Repair13 additions",
"actual_Godot_handler": "same31aa R09 collection preserved; independent acceptance pending",
"actual_native_OS": "same31aa R09 preserved; local read-only integrity pass, Root re-check pending",
"independent_review": "pending",
"accepted": false
},
"pan_zoom_world_identity": {
"implementation": "prepared",
"local_checker_controls": "Python synthetic whole-checker controls and SHA-verified actual R05 checkpoint controls; no gameplay acceptance",
"actual_Godot_handler": "pending",
"actual_native_OS": "pending",
"local_checker_controls": "100 Python controls passed; 88 existing retained and 12 Repair13 additions",
"actual_Godot_handler": "same31aa R09 collection preserved; independent acceptance pending",
"actual_native_OS": "same31aa R09 preserved; local read-only integrity pass, Root re-check pending",
"independent_review": "pending",
"accepted": false
},
"separate_pid_resume": {
"implementation": "prepared",
"local_checker_controls": "Python synthetic whole-checker controls and SHA-verified actual R05 checkpoint controls; no gameplay acceptance",
"actual_Godot_handler": "pending",
"actual_native_OS": "pending",
"local_checker_controls": "100 Python controls passed; 88 existing retained and 12 Repair13 additions",
"actual_Godot_handler": "same31aa R09 collection preserved; independent acceptance pending",
"actual_native_OS": "same31aa R09 preserved; local read-only integrity pass, Root re-check pending",
"independent_review": "pending",
"accepted": false
}
},
"pending": [
"Root actual native startup: initial manual menu load/profile JSON/no SCRIPT ERROR",
"Root frozen full5 native/OS writer/reader with distinct PIDs and verify-only",
"Root mandatory final full175 regression",
"Stair preview/domain-status disagreement: independent acceptance",
"Windows same-distribution/device global platform acceptance",
"Root final175 after frozen submission",
"Root R09 re-check",
"Independent Opus review of all five conditions",
"Integration/current final verification and ledger",
"Windows same-distribution/device global platform acceptance"
"Integration/current final verification and ledger"
],
"not_executed": [
"Godot",
@@ -151,7 +157,8 @@
"collector": "P08-02 collect_native_os.py read-only protocol reuse; no inherited changed-source PASS",
"handler": "existing execute_phase/profile/owned_outer/strict marker gates retained",
"OS": "separate nonheadless Popen/owned_outer lifecycle; Root read-only request/ack bridge",
"assets": "existing Main styling/audio; no new artwork or asset pack"
"assets": "existing Main styling/audio; no new artwork or asset pack",
"R09": "Exact pinned original/canonical bytes, collected source/input/engine retained. Only checker/test Python changes and new synthetic Python fixture excluded from current-source equality. Original absolute owner proof pins retained."
},
"whole_P08_complete": false,
"P08_01_all30_claimed": false,
@@ -314,6 +321,38 @@
],
"Opus_review_integration_Windows": "pending",
"worker_git_writes": false
},
"repair13": {
"scope": "checker/test/docs only",
"post_collection_dimensions": true,
"capture_time_metadata": false,
"images": 138,
"requests": 69,
"dimensions": [
1280,
752
],
"window_size_substituted": false,
"original_index_sha256": "68c29eb3d333ad0b6fb11664d8b0d18e326449da8b0dcca201343477744947fe",
"root_authority_sha256": {
"ROOT_NATIVE_R09_COLLECTION_PINS.json": "75ff43ce60540463e88c5aa60aaba997e67827057689049dc4228fe51afa1409",
"ROOT_R09_READONLY_IMAGE_DIMENSIONS.json": "baa0c6dd2e40b53e9eedb52b6d2fde040414a5b7fb5fcbdf99b5f81906eb40de",
"ROOT_R09_COLLECTION_AND_PUBLICATION_DIAGNOSIS.json": "59a6e37141b16509449fbc90d40ea8932fe8e93dec800a6915ecfffed1f89d3e"
},
"same31aa_rawR09_modified": false,
"old_tests_retained": 88,
"new_tests": 12,
"context_gap_repair12": "closed by supplied post-collection Root measurements and readable original",
"local_integrity": "pass; not formal acceptance",
"pending": [
"Stair preview/domain-status disagreement: independent acceptance",
"Windows same-distribution/device global platform acceptance",
"Root final175 after frozen submission",
"Root R09 re-check",
"Independent Opus review of all five conditions",
"Integration/current final verification and ledger"
],
"development_note": "Initial local verify identified save thumbnail inclusion in screenshot set; corrected before final executed checks."
}
},
"caps": {
@@ -0,0 +1,34 @@
{
"task_id": "P08-03",
"scope": "Repair13 local Python only; no gameplay acceptance",
"executed_sha256": {
"tools/check_p08_normal_placement_evidence.py": "73bff1e00c319b8e681953fe64497eefb53ece168d2d18e0b60951e65f66279d",
"tools/test_p08_normal_placement_evidence.py": "7e708a4429603166485b6f3267d887561d23bcf25b564d002473094e388476ca",
"tests/fixtures/p08-03/repair13_images.py": "248a8d73ece3a60e601421fdd2ad53f8f8e971184fb1328c7155a71b8ed4ca53"
},
"syntax_checks": 3,
"syntax": "pass",
"tests": {
"command": [
"python3",
"-B",
"tools/test_p08_normal_placement_evidence.py"
],
"exit_code": 0,
"stdout": "",
"stderr": "....................................................................................................\n----------------------------------------------------------------------\nRan 100 tests in 81.207s\n\nOK\n"
},
"verify_only": {
"command": [
"python3",
"-B",
"tools/check_p08_normal_placement_evidence.py",
"--verify-only"
],
"BUILD_OUTPUT_DIR": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p08-03-code/.runtime/P08-03/build",
"exit_code": 0,
"stdout": "{\"task_id\": \"P08-03\", \"integrity\": \"pass\", \"deficits\": [], \"acceptance\": \"pending\"}\n",
"stderr": ""
},
"acceptance": "pending"
}
+50
View File
@@ -0,0 +1,50 @@
"""Synthetic JPEG marker streams and R09-shaped pins; never capture evidence.
Streams exercise the structural parser, not a decoder or visual acceptance.
Independent of all operational Root handoff documents.
"""
import hashlib
import json
import shutil
import struct
def put(path, value):
path.write_text(json.dumps(value, sort_keys=True)+'\n')
def jpeg(width=1280, height=752, progressive=False):
def segment(marker, body):
return bytes((255, marker))+struct.pack('>H', len(body)+2)+body
frame = segment(0xc2 if progressive else 0xc0,
b'\x08'+struct.pack('>HH', height, width)+b'\x01\x01\x11\x00')
scan = segment(0xda, b'\x01\x01\x00\x00\x3f\x00')+b'\x12\xff\x00\x34\xff\xd0\x56'
return b'\xff\xd8'+segment(0xe0, b'SYNTHETIC')+frame+scan+(scan if progressive else b'')+b'\xff\xd9'
def make(base, candidate):
out, original = base/'canonical', base/'original'
out.mkdir(); index = {'commit':candidate, 'artifacts':{}}
measurement = {'scope':'synthetic post-collection measurement', 'images':[]}
for role, count in (('reader',5), ('writer',64)):
for i in range(1,count+1):
for side in ('before','after'):
name = f'os-pair/{role}-request-{i:04d}/screen-{side}.png'
path = out/name; path.parent.mkdir(parents=True, exist_ok=True)
path.write_bytes(jpeg(progressive=i%2 == 0))
measurement['images'].append({'file':name, 'source_sha256':hashlib.sha256(path.read_bytes()).hexdigest(),
'width':1280,'height':752,'format_by_magic':'JPEG'})
for name in ('runner-input.json','runner-ended.json','os-runs/writer/ended.json','os-runs/reader/ended.json'):
path = out/name; path.parent.mkdir(parents=True,exist_ok=True); put(path, {'synthetic':True})
refresh(out, index, measurement)
shutil.copytree(out, original)
def pin(name):
p=original/name
return {'path':str(p),'bytes':p.stat().st_size,'sha256':hashlib.sha256(p.read_bytes()).hexdigest()}
pins = {'original_root':str(original),'native_candidate':candidate,'index':pin('index.json'),
'runner_input':pin('runner-input.json'),'runner_ended':pin('runner-ended.json'),
'OS':{role:{'receipt':pin('os-runs/'+role+'/ended.json')} for role in ('writer','reader')}}
return out, original, index, measurement, pins
def refresh(out, index, measurement):
index['artifacts'] = {p.relative_to(out).as_posix():{'bytes':p.stat().st_size,
'sha256':hashlib.sha256(p.read_bytes()).hexdigest()} for p in out.rglob('*') if p.is_file() and p.name != 'index.json'}
put(out/'index.json',index)
measurement['original_index_sha256'] = hashlib.sha256((out/'index.json').read_bytes()).hexdigest()
+114 -4
View File
@@ -144,6 +144,93 @@ def input_map(root):
if p.is_file() and '__pycache__' not in p.parts and '.scratch' not in p.parts]
return {name: sha(root/name) for name in sorted(names)}
R09_COMMIT = '31aa7706d28a92e313c432d5a62e35d19503dcc3'
R09_DOCS = 'docs/plans/original-completion-2026-10-02/execution/p08-03'
def jpeg_dimensions(data):
"""Parse baseline/progressive frame headers, including multi-scan markers.
This is a structural/dimension check, not a pixel decoder.
"""
require(data[:2] == b'\xff\xd8' and data[-2:] == b'\xff\xd9', 'invalid JPEG SOI/EOI')
pos, dimensions, scans = 2, None, 0
entropy = False
while pos < len(data):
if entropy:
pos = data.find(b'\xff', pos)
require(pos >= 0, 'truncated JPEG scan')
require(data[pos] == 255, 'invalid JPEG marker')
while pos < len(data) and data[pos] == 255:
pos += 1
require(pos < len(data), 'truncated JPEG marker')
marker = data[pos]; pos += 1
if entropy and (marker == 0 or 0xd0 <= marker <= 0xd7):
continue
entropy = False
if marker == 0xd9:
require(pos == len(data) and dimensions is not None and scans > 0, 'invalid JPEG end')
return dimensions
require(marker not in (0, 0xd8, 1) and not 0xd0 <= marker <= 0xd7,
'invalid JPEG standalone marker')
require(pos+2 <= len(data), 'truncated JPEG length')
length = int.from_bytes(data[pos:pos+2], 'big')
require(length >= 2 and pos+length <= len(data)-2, 'truncated JPEG segment')
body = data[pos+2:pos+length]; pos += length
if marker in (0xc0, 0xc2):
require(dimensions is None and len(body) >= 6 and body[0] == 8
and body[5] > 0 and len(body) == 6+3*body[5], 'invalid JPEG SOF')
height, width = struct.unpack('>HH', body[1:5])
require(width > 0 and height > 0, 'invalid JPEG dimensions')
dimensions = (width, height)
elif 0xc0 <= marker <= 0xcf and marker not in (0xc4, 0xc8, 0xcc):
raise ValueError('unsupported JPEG SOF')
elif marker == 0xda:
require(dimensions is not None and body and body[0] > 0
and len(body) == 4+2*body[0], 'invalid JPEG SOS')
scans += 1; entropy = True
raise ValueError('missing JPEG EOI')
def r09_images(evidence, index, measurement):
require(measurement['original_index_sha256'] == sha(evidence/'index.json'), 'stale image index pin')
expected = {f'os-pair/{role}-request-{i:04d}/screen-{side}.png'
for role, count in (('reader', 5), ('writer', 64))
for i in range(1, count+1) for side in ('before', 'after')}
rows = keyed(measurement['images'], 'file')
indexed = {n for n in index['artifacts'] if n.startswith('os-pair/') and n.endswith('.png')
and n not in ('os-pair/formal/thumbnail.png', 'os-pair/formal.bak/thumbnail.png')}
require(set(rows) == indexed == expected, 'missing/extra image entry')
sizes = {}
for name in sorted(expected):
data = (evidence/name).read_bytes()
sizes[name] = jpeg_dimensions(data)
row, pin = rows[name], index['artifacts'][name]
require(hashlib.sha256(data).hexdigest() == row['source_sha256'] == pin['sha256']
and len(data) == pin['bytes'], 'image source_sha256 mismatch')
require(row['format_by_magic'] == 'JPEG' and type(row['width']) is int
and type(row['height']) is int and sizes[name] == (row['width'], row['height']),
'image SOF dimension mismatch')
for name in expected:
if name.endswith('screen-before.png'):
require(sizes[name] == sizes[name.replace('screen-before.png', 'screen-after.png')],
'before/after dimension drift')
def r09_collection(evidence, index, pins):
original = Path(pins['original_root'])
require(original.is_absolute() and pins['native_candidate'] == index['commit'] == R09_COMMIT,
'R09 reuse candidate')
pinned = [pins['index'], pins['runner_input'], pins['runner_ended']]
pinned += [pins['OS'][role]['receipt'] for role in ('writer', 'reader')]
for pin in pinned:
path = Path(pin['path'])
require(path.is_relative_to(original) and not path.is_symlink(), 'collection pin path')
require(path.stat().st_size == pin['bytes'] and sha(path) == pin['sha256'], 'collection pin SHA')
for name in ['index.json', *index['artifacts']]:
require(not Path(name).is_absolute() and '..' not in Path(name).parts, 'collection unsafe path')
a, b = original/name, evidence/name
require(not a.is_symlink() and a.resolve().is_relative_to(original.resolve())
and a.read_bytes() == b.read_bytes(), 'original/canonical byte divergence '+name)
return original
def keyed(rows, key):
result = {r[key]: r for r in rows}
require(len(result) == len(rows), 'duplicate '+key)
@@ -376,12 +463,30 @@ def check(project_root, evidence_dir):
require(index['collection_error'] is None, 'collection failed')
require(index['conditions'] == CONDITIONS, 'missing condition')
actual = {n: v['sha256'] for n, v in runner.source_refs(root).items()}
original = evidence
pins_path = root/R09_DOCS/'ROOT_NATIVE_R09_COLLECTION_PINS.json'
if pins_path.exists():
original = r09_collection(evidence, index, load(pins_path))
r09_images(evidence, index, load(root/R09_DOCS/'ROOT_R09_READONLY_IMAGE_DIMENSIONS.json'))
# Only these Python validator/test files may differ from same31aa.
changed = {'tools/check_p08_normal_placement_evidence.py',
'tools/test_p08_normal_placement_evidence.py'}
added = {'tests/fixtures/p08-03/repair13_images.py'}
for name in changed:
baseline = subprocess.check_output(['git', '-C', str(root), 'show', R09_COMMIT+':'+name])
require(index['source_map'][name] == hashlib.sha256(baseline).hexdigest(), 'reuse source pin')
require({n:v for n,v in actual.items() if n not in changed|added} ==
{n:v for n,v in index['source_map'].items() if n not in changed}, 'stale reuse source')
require({n:v for n,v in input_map(root).items() if n not in added} == index['inputs'], 'stale reuse input')
actual = index['source_map']
require(index['source_map'] == actual, 'stale source')
require(index['inputs'] == input_map(root), 'stale input')
require(index['inputs'] == {n:v for n,v in input_map(root).items()
if not pins_path.exists() or n != 'tests/fixtures/p08-03/repair13_images.py'}, 'stale input')
require(index['spec_sha256'] == SPEC_SHA == hashlib.sha256((root/SPEC).read_text().strip().encode()).hexdigest(), 'immutable spec')
require(index['marker_contract_sha256'] == sha(root/CONTRACT), 'stale marker')
require(re.fullmatch('[0-9a-f]{40}', index['commit']) is not None, 'commit')
require(index['commit'] == subprocess.check_output(['git','-C',str(root),'rev-parse','HEAD'],text=True).strip(), 'stale commit')
if not pins_path.exists():
require(index['commit'] == subprocess.check_output(['git','-C',str(root),'rev-parse','HEAD'],text=True).strip(), 'stale commit')
def artifact(name):
require(isinstance(name, str) and name and not Path(name).is_absolute() and '..' not in Path(name).parts, 'unsafe/missing artifact')
p = evidence/name
@@ -451,7 +556,7 @@ def check(project_root, evidence_dir):
require({n:v['sha256'] for n,v in end['source_after'].items()} == actual, 'OS source changed')
require(end['profile_before'] == {'existed':False,'files':{}}, 'OS profile not fresh')
owners = module('p08_verify_os_owners', HERE/'regression/ordinary_proof_gate.py')
actual_owner_proof = owners.ordinary_gate(evidence/prefix/'teardown', pid, evidence/prefix, ['single'])
actual_owner_proof = owners.ordinary_gate(original/prefix/'teardown', pid, original/prefix, ['single'])
require(end['ordinary_owner_proof'] == actual_owner_proof, 'OS ordinary owner proof mismatch')
profile = document('os-pair/'+end['role']+'-profile.json')
require(profile['pid'] == pid and Path(profile['user_data_dir']).resolve() == Path(end['profile']).resolve()
@@ -667,7 +772,12 @@ def check(project_root, evidence_dir):
require(raw['events'] and observed['events'], 'missing OS events')
require(raw['collector_pid'] > 0 and raw['collector_pid'] not in os_pids, 'fake OS collector')
for key in ('screen_before', 'screen_after'):
png(artifact(ack[key]).read_bytes())
data = artifact(ack[key]).read_bytes()
if pins_path.exists():
require(ack[key] == folder+key.replace('_', '-')+'.png', 'R09 screenshot request binding')
jpeg_dimensions(data)
else:
png(data)
if request['action'] == 'cell' and 'position' in row:
dispatch_gate(row['position'], observed['events'])
if row['id'] == 'pan_zoom':
@@ -524,6 +524,82 @@ class EvidenceTests(unittest.TestCase):
def test_mock_native_timeout_restores_project_and_cleans_owned_child(self):
self.collector_mock(fail_wait=True)
class R09ImageTests(unittest.TestCase):
def setUp(self):
self.temp = tempfile.TemporaryDirectory(dir=ROOT/'tests/fixtures/p08-03/.scratch')
self.addCleanup(self.temp.cleanup)
self.fixture = module('repair13_image_fixture', ROOT/'tests/fixtures/p08-03/repair13_images.py')
self.out, self.original, self.index, self.measurement, self.pins = self.fixture.make(Path(self.temp.name), C.R09_COMMIT)
def images(self):
C.r09_images(self.out, self.index, self.measurement)
def change_bytes(self, data):
row = self.measurement['images'][0]
(self.out/row['file']).write_bytes(data)
row['source_sha256'] = hashlib.sha256(data).hexdigest()
self.fixture.refresh(self.out, self.index, self.measurement)
def test_baseline_progressive_and_collection_positive(self):
self.images()
self.assertEqual(self.original, C.r09_collection(self.out,self.index,self.pins))
self.assertEqual((1280,752),C.jpeg_dimensions(self.fixture.jpeg(progressive=True)))
def test_truncated_or_non_jpeg(self):
good = self.fixture.jpeg()
for data in (good[:-1], b'NOT JPEG', b'\xff\xd8\xff\xe0\xff\xff\xff\xd9',
good[:15]+b'\xff\xd9', b'\xff\xd8\xff\xd9'):
with self.subTest(data=data):
self.change_bytes(data)
with self.assertRaisesRegex(ValueError, 'JPEG'):
self.images()
def test_sof_dimension_mismatch(self):
self.change_bytes(self.fixture.jpeg(height=720))
with self.assertRaisesRegex(ValueError,'SOF dimension mismatch'): self.images()
def test_before_after_dimension_drift(self):
self.change_bytes(self.fixture.jpeg(height=753))
self.measurement['images'][0]['height'] = 753
with self.assertRaisesRegex(ValueError,'before/after dimension drift'): self.images()
def test_missing_image_entry(self):
self.measurement['images'].pop()
with self.assertRaisesRegex(ValueError,'missing/extra image entry'): self.images()
def test_extra_image_entry(self):
row = dict(self.measurement['images'][0],file='os-pair/extra.png')
self.measurement['images'].append(row)
with self.assertRaisesRegex(ValueError,'missing/extra image entry'): self.images()
def test_duplicate_image_entry(self):
self.measurement['images'].append(self.measurement['images'][0])
with self.assertRaisesRegex(ValueError,'duplicate file'): self.images()
def test_extra_indexed_image(self):
(self.out/'os-pair/extra.png').write_bytes(self.fixture.jpeg())
self.fixture.refresh(self.out,self.index,self.measurement)
with self.assertRaisesRegex(ValueError,'missing/extra image entry'): self.images()
def test_source_sha256_mismatch(self):
self.measurement['images'][0]['source_sha256'] = '0'*64
with self.assertRaisesRegex(ValueError,'source_sha256 mismatch'): self.images()
def test_stale_index_pin(self):
self.measurement['original_index_sha256'] = '0'*64
with self.assertRaisesRegex(ValueError,'stale image index pin'): self.images()
def test_original_canonical_divergence(self):
(self.out/self.measurement['images'][0]['file']).write_bytes(self.fixture.jpeg(height=720))
with self.assertRaisesRegex(ValueError,'original/canonical byte divergence'):
C.r09_collection(self.out,self.index,self.pins)
def test_collection_pin_mismatch(self):
self.pins['runner_input']['sha256'] = '0'*64
with self.assertRaisesRegex(ValueError,'collection pin SHA'):
C.r09_collection(self.out,self.index,self.pins)
class RealR05InfrastructureTests(unittest.TestCase):
"""Actual native snapshot, never a fabricated acceptance specimen."""
def setUp(self):