P08-03: 配置の通常操作受入
This commit is contained in:
@@ -1,5 +1,47 @@
|
|||||||
# P08-03 condition matrix — implementation submission, not acceptance
|
# 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
|
Immutable specification: `docs/spec/acceptance/P08-03.json`, normalized SHA-256
|
||||||
`7941da4edbd3c43a636a4a3d834d57c095b56da988fa3a056e55b22d3a5d50e9`.
|
`7941da4edbd3c43a636a4a3d834d57c095b56da988fa3a056e55b22d3a5d50e9`.
|
||||||
Base HEAD: `12430ba89970bda349781e51157e72e48a4ac06f`. Worker made no commit.
|
Base HEAD: `12430ba89970bda349781e51157e72e48a4ac06f`. Worker made no commit.
|
||||||
@@ -325,3 +367,14 @@ Repair11 final pins and local results:
|
|||||||
- test_p08_normal_placement_evidence.py: `b8189b2b4bf15933d7e3e760495928b6a5a7ec5b0400a1c5198427d1cb0a3408`
|
- test_p08_normal_placement_evidence.py: `b8189b2b4bf15933d7e3e760495928b6a5a7ec5b0400a1c5198427d1cb0a3408`
|
||||||
- Complete source/input manifest: `0d33515d9ef33656fe13aab3f417a18a2b602047d6eb013b3f6b896f0330edf6`
|
- Complete source/input manifest: `0d33515d9ef33656fe13aab3f417a18a2b602047d6eb013b3f6b896f0330edf6`
|
||||||
- Local validation: `188d61cb4e23211646cc9808bfb924bc56fe66f1fb7ef0534584740dcfcd9561`; 88 tests, 0 failures; four syntax checks passed. These controls establish no gameplay acceptance.
|
- 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.
|
||||||
+124
@@ -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
|
||||||
|
}
|
||||||
+31
@@ -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."
|
||||||
|
}
|
||||||
+976
@@ -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"
|
"P08-03"
|
||||||
],
|
],
|
||||||
"base_commit": "12430ba89970bda349781e51157e72e48a4ac06f",
|
"base_commit": "12430ba89970bda349781e51157e72e48a4ac06f",
|
||||||
"actual_worktree_HEAD": "1f0a2bcd53c3f9fdf057e7916871cf5b42145c55",
|
"actual_worktree_HEAD": "31aa7706d28a92e313c432d5a62e35d19503dcc3",
|
||||||
"worker_committed": false,
|
"worker_committed": false,
|
||||||
"final_commit": null,
|
"final_commit": null,
|
||||||
"final_commit_note": "Root must freeze and record the submitted candidate; worker git writes are prohibited.",
|
"final_commit_note": "Root must freeze and record the submitted candidate; worker git writes are prohibited.",
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
},
|
},
|
||||||
"final_local_files_sha256": {
|
"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/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/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": "21855e3b32263eb98127202467b770cb1334fa70c6b357825a122db385ffa8d6",
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p08-03/passive_os_placement_recorder.gd.uid": "d7f97560c8bbdfdaed173b2b48261e65b92847bd0493dd1cc2ebb309d0622314",
|
"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/fixtures/p08-03/placement.gd.uid": "5caca08c1e627e0ca07e2ab7b13bd82b24a22f77513fe87e30b79023568e1987",
|
||||||
"tests/ui/test_p08_normal_placement_ops.gd": "d3c246d34f8fd66f6ed237e42a86df89ebaf481bc9dee143b4de8d654ce0eb2e",
|
"tests/ui/test_p08_normal_placement_ops.gd": "d3c246d34f8fd66f6ed237e42a86df89ebaf481bc9dee143b4de8d654ce0eb2e",
|
||||||
"tests/ui/test_p08_normal_placement_ops.gd.uid": "7d168ac50ca82ae1979da31c467f9a5020ca5ec7616b5bf99294413d85b3b299",
|
"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/regression/suite-policy.json": "a74dc701155b6207bc23095296d723928f62719fce14fda392b12f9947007fb1",
|
||||||
"tools/run_p08_normal_placement.py": "5cb1f58664a0bec71c8b5e853749d1c3656e0a2a027201e33fbaa6b0c0291fc6",
|
"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_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/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_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/os-r04-writer-engine.log": "f78c28c53460b767e924867f5158787c8497973e6f1c10353cb0f2cb2cbc3a3d",
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p08-03/registered-r04-evidence-manifest.json": "6189fb2fe983d11faf96f99d6e21eba550be8e89c083c1277ac2ada9fa50cafa",
|
"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.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": {
|
"executed_source_manifest": {
|
||||||
"path": "repair11-local-source-manifest.json",
|
"path": "repair13-local-source-manifest.json",
|
||||||
"sha256": "0d33515d9ef33656fe13aab3f417a18a2b602047d6eb013b3f6b896f0330edf6",
|
"sha256": "7d5a62155b7053398a5bc55879c9a92a07dcb3c5a0603e92d6f38eefba122ca1",
|
||||||
"source_file_count": 1328,
|
"source_file_count": 1329,
|
||||||
"contains": "Complete final local source and fixture/input manifest; Python-only validation; no size omissions"
|
"contains": "Complete final local source/input and unchanged same31aa collected source/input/engine maps; Python only"
|
||||||
},
|
},
|
||||||
"final_input_sha256": {
|
"final_input_sha256": {
|
||||||
"AGENTS.md": "8d8dc40211390275f858f322743309a0663c4f2d859780a8b8a08cea1450e8b3",
|
"AGENTS.md": "8d8dc40211390275f858f322743309a0663c4f2d859780a8b8a08cea1450e8b3",
|
||||||
@@ -75,65 +76,70 @@
|
|||||||
"tests/fixtures/p08-03/placement.gd": "1ebaaa80784905d661954e255bfb8a96a3a963a57b9a38b19e7f91b90fb628b3",
|
"tests/fixtures/p08-03/placement.gd": "1ebaaa80784905d661954e255bfb8a96a3a963a57b9a38b19e7f91b90fb628b3",
|
||||||
"tests/fixtures/p08-03/placement.gd.uid": "5caca08c1e627e0ca07e2ab7b13bd82b24a22f77513fe87e30b79023568e1987",
|
"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-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": {
|
"actual_local_validation": {
|
||||||
"path": "repair11-local-validation.json",
|
"path": "repair13-local-validation.json",
|
||||||
"sha256": "188d61cb4e23211646cc9808bfb924bc56fe66f1fb7ef0534584740dcfcd9561",
|
"sha256": "f249c76c6d4c044c1a3c33ea09abc99f09a8c0ea6b0ade470d2af205eb4d89af",
|
||||||
"python_syntax": "pass: four Python sources parsed in memory",
|
"python_syntax": "pass: three changed Python sources parsed in memory",
|
||||||
"checker_control_tests": 88,
|
"checker_control_tests": 100,
|
||||||
"checker_exit_code": 0,
|
"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": {
|
"conditions": {
|
||||||
"support_connection": {
|
"support_connection": {
|
||||||
"implementation": "prepared",
|
"implementation": "prepared",
|
||||||
"local_checker_controls": "Python synthetic whole-checker controls and SHA-verified actual R05 checkpoint controls; no gameplay acceptance",
|
"local_checker_controls": "100 Python controls passed; 88 existing retained and 12 Repair13 additions",
|
||||||
"actual_Godot_handler": "pending",
|
"actual_Godot_handler": "same31aa R09 collection preserved; independent acceptance pending",
|
||||||
"actual_native_OS": "pending",
|
"actual_native_OS": "same31aa R09 preserved; local read-only integrity pass, Root re-check pending",
|
||||||
"independent_review": "pending",
|
"independent_review": "pending",
|
||||||
"accepted": false
|
"accepted": false
|
||||||
},
|
},
|
||||||
"invalid_position_reason": {
|
"invalid_position_reason": {
|
||||||
"implementation": "prepared",
|
"implementation": "prepared",
|
||||||
"local_checker_controls": "Python synthetic whole-checker controls and SHA-verified actual R05 checkpoint controls; no gameplay acceptance",
|
"local_checker_controls": "100 Python controls passed; 88 existing retained and 12 Repair13 additions",
|
||||||
"actual_Godot_handler": "pending",
|
"actual_Godot_handler": "same31aa R09 collection preserved; independent acceptance pending",
|
||||||
"actual_native_OS": "pending",
|
"actual_native_OS": "same31aa R09 preserved; local read-only integrity pass, Root re-check pending",
|
||||||
"independent_review": "pending",
|
"independent_review": "pending",
|
||||||
"accepted": false
|
"accepted": false
|
||||||
},
|
},
|
||||||
"demolish_rebuild": {
|
"demolish_rebuild": {
|
||||||
"implementation": "prepared",
|
"implementation": "prepared",
|
||||||
"local_checker_controls": "Python synthetic whole-checker controls and SHA-verified actual R05 checkpoint controls; no gameplay acceptance",
|
"local_checker_controls": "100 Python controls passed; 88 existing retained and 12 Repair13 additions",
|
||||||
"actual_Godot_handler": "pending",
|
"actual_Godot_handler": "same31aa R09 collection preserved; independent acceptance pending",
|
||||||
"actual_native_OS": "pending",
|
"actual_native_OS": "same31aa R09 preserved; local read-only integrity pass, Root re-check pending",
|
||||||
"independent_review": "pending",
|
"independent_review": "pending",
|
||||||
"accepted": false
|
"accepted": false
|
||||||
},
|
},
|
||||||
"pan_zoom_world_identity": {
|
"pan_zoom_world_identity": {
|
||||||
"implementation": "prepared",
|
"implementation": "prepared",
|
||||||
"local_checker_controls": "Python synthetic whole-checker controls and SHA-verified actual R05 checkpoint controls; no gameplay acceptance",
|
"local_checker_controls": "100 Python controls passed; 88 existing retained and 12 Repair13 additions",
|
||||||
"actual_Godot_handler": "pending",
|
"actual_Godot_handler": "same31aa R09 collection preserved; independent acceptance pending",
|
||||||
"actual_native_OS": "pending",
|
"actual_native_OS": "same31aa R09 preserved; local read-only integrity pass, Root re-check pending",
|
||||||
"independent_review": "pending",
|
"independent_review": "pending",
|
||||||
"accepted": false
|
"accepted": false
|
||||||
},
|
},
|
||||||
"separate_pid_resume": {
|
"separate_pid_resume": {
|
||||||
"implementation": "prepared",
|
"implementation": "prepared",
|
||||||
"local_checker_controls": "Python synthetic whole-checker controls and SHA-verified actual R05 checkpoint controls; no gameplay acceptance",
|
"local_checker_controls": "100 Python controls passed; 88 existing retained and 12 Repair13 additions",
|
||||||
"actual_Godot_handler": "pending",
|
"actual_Godot_handler": "same31aa R09 collection preserved; independent acceptance pending",
|
||||||
"actual_native_OS": "pending",
|
"actual_native_OS": "same31aa R09 preserved; local read-only integrity pass, Root re-check pending",
|
||||||
"independent_review": "pending",
|
"independent_review": "pending",
|
||||||
"accepted": false
|
"accepted": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": [
|
"pending": [
|
||||||
"Root actual native startup: initial manual menu load/profile JSON/no SCRIPT ERROR",
|
"Stair preview/domain-status disagreement: independent acceptance",
|
||||||
"Root frozen full5 native/OS writer/reader with distinct PIDs and verify-only",
|
"Windows same-distribution/device global platform acceptance",
|
||||||
"Root mandatory final full175 regression",
|
"Root final175 after frozen submission",
|
||||||
|
"Root R09 re-check",
|
||||||
"Independent Opus review of all five conditions",
|
"Independent Opus review of all five conditions",
|
||||||
"Integration/current final verification and ledger",
|
"Integration/current final verification and ledger"
|
||||||
"Windows same-distribution/device global platform acceptance"
|
|
||||||
],
|
],
|
||||||
"not_executed": [
|
"not_executed": [
|
||||||
"Godot",
|
"Godot",
|
||||||
@@ -151,7 +157,8 @@
|
|||||||
"collector": "P08-02 collect_native_os.py read-only protocol reuse; no inherited changed-source PASS",
|
"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",
|
"handler": "existing execute_phase/profile/owned_outer/strict marker gates retained",
|
||||||
"OS": "separate nonheadless Popen/owned_outer lifecycle; Root read-only request/ack bridge",
|
"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,
|
"whole_P08_complete": false,
|
||||||
"P08_01_all30_claimed": false,
|
"P08_01_all30_claimed": false,
|
||||||
@@ -314,6 +321,38 @@
|
|||||||
],
|
],
|
||||||
"Opus_review_integration_Windows": "pending",
|
"Opus_review_integration_Windows": "pending",
|
||||||
"worker_git_writes": false
|
"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": {
|
"caps": {
|
||||||
|
|||||||
+8025
File diff suppressed because it is too large
Load Diff
+34
@@ -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
@@ -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()
|
||||||
@@ -144,6 +144,93 @@ def input_map(root):
|
|||||||
if p.is_file() and '__pycache__' not in p.parts and '.scratch' not in p.parts]
|
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)}
|
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):
|
def keyed(rows, key):
|
||||||
result = {r[key]: r for r in rows}
|
result = {r[key]: r for r in rows}
|
||||||
require(len(result) == len(rows), 'duplicate '+key)
|
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['collection_error'] is None, 'collection failed')
|
||||||
require(index['conditions'] == CONDITIONS, 'missing condition')
|
require(index['conditions'] == CONDITIONS, 'missing condition')
|
||||||
actual = {n: v['sha256'] for n, v in runner.source_refs(root).items()}
|
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['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['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(index['marker_contract_sha256'] == sha(root/CONTRACT), 'stale marker')
|
||||||
require(re.fullmatch('[0-9a-f]{40}', index['commit']) is not None, 'commit')
|
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):
|
def artifact(name):
|
||||||
require(isinstance(name, str) and name and not Path(name).is_absolute() and '..' not in Path(name).parts, 'unsafe/missing artifact')
|
require(isinstance(name, str) and name and not Path(name).is_absolute() and '..' not in Path(name).parts, 'unsafe/missing artifact')
|
||||||
p = evidence/name
|
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({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')
|
require(end['profile_before'] == {'existed':False,'files':{}}, 'OS profile not fresh')
|
||||||
owners = module('p08_verify_os_owners', HERE/'regression/ordinary_proof_gate.py')
|
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')
|
require(end['ordinary_owner_proof'] == actual_owner_proof, 'OS ordinary owner proof mismatch')
|
||||||
profile = document('os-pair/'+end['role']+'-profile.json')
|
profile = document('os-pair/'+end['role']+'-profile.json')
|
||||||
require(profile['pid'] == pid and Path(profile['user_data_dir']).resolve() == Path(end['profile']).resolve()
|
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['events'] and observed['events'], 'missing OS events')
|
||||||
require(raw['collector_pid'] > 0 and raw['collector_pid'] not in os_pids, 'fake OS collector')
|
require(raw['collector_pid'] > 0 and raw['collector_pid'] not in os_pids, 'fake OS collector')
|
||||||
for key in ('screen_before', 'screen_after'):
|
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:
|
if request['action'] == 'cell' and 'position' in row:
|
||||||
dispatch_gate(row['position'], observed['events'])
|
dispatch_gate(row['position'], observed['events'])
|
||||||
if row['id'] == 'pan_zoom':
|
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):
|
def test_mock_native_timeout_restores_project_and_cleans_owned_child(self):
|
||||||
self.collector_mock(fail_wait=True)
|
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):
|
class RealR05InfrastructureTests(unittest.TestCase):
|
||||||
"""Actual native snapshot, never a fabricated acceptance specimen."""
|
"""Actual native snapshot, never a fabricated acceptance specimen."""
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user