diff --git a/harness/experiments/ordinary-text-native-20260913/README.md b/harness/experiments/ordinary-text-native-20260913/README.md new file mode 100644 index 00000000..95b20b05 --- /dev/null +++ b/harness/experiments/ordinary-text-native-20260913/README.md @@ -0,0 +1,45 @@ +# Ordinary-text union: native trial evidence + +Run `python verify.py` with Python 3.10 or newer. These five files form a portable +read-only package. The verifier uses only the Python standard library, reads +ZIPs without extraction, and executes neither archived helpers nor binaries. +It requires no Git checkout, original machine, network, UI or dependency cache. +Outer files are UTF-8 LF before hash pins; all archived raw bytes are unchanged. + +The complete closed trial-1 capture set is preserved, including small auxiliary +picker frames, extra captures, resumed-state capture, and repeated save-path +attempts. Filename numbering labels recorded observations; it is not a complete +action log and does not assert an unrecorded intermediate transition. Screenshots +and accessibility snapshots support human review; their interpretation is not +automatically proven by this verifier. + +`native/independent-review.md` preserves the separate review of screenshots, +source/CLI evidence and claim boundaries. Its judgments are human-readable review +evidence, distinct from machine-verified byte and receipt relationships. Dialog +states are archived; operator/tool calls are not a complete archived action log. + +Archived material includes original input, both saved bundles, all trial receipts, +logs and frames, capture/launch helpers, saved-bundle check helper and raw results. +The exact successful windows-build-1 receipts, logs, gate helper, input manifest +and 707-file input archive are included for a self-contained receipt chain. +Those build captures also appear in the gates package committed at +7836a93edb98d2f9dcbf9c0290352e38f9acbb39. The production build source is +f714a25bbcd435941404104ad0cbb0fea3b89149. Binaries are intentionally excluded; +hashes establish receipt consistency, not independent binary reproduction. + +Verification checks every archive member/hash, nested source membership and +content, build and native start/result/helper relationships, GUI/CLI binary +receipt links, original input archive, capture timestamps/image references, +normal GUI exit and empty logs. It recomputes exact saved-source membership and +bytes: compact added activity and include, stable recorded IDs, and only the +intended existing diagram x coordinate changing from 120 to 190 between saved +bundles. Both CLI captures report checked status, four warnings, no writes or +changes, and zero identities to stabilize. + +These are saved-byte and recorded CLI parsing/validation oracles, not a comparison +of the complete parsed models. Undo/Redo, reopening, diagnostic freshness and +navigation observations require inspecting the actual frames and review. Empty +logs and exit zero alone do not establish usability or complete acceptance. +The hashes are integrity checks, not authenticated provenance. Raw captures +retain original local path strings and timestamps; no credentials, user profile, +runtime binaries or dependency cache are packaged. diff --git a/harness/experiments/ordinary-text-native-20260913/evidence.zip b/harness/experiments/ordinary-text-native-20260913/evidence.zip new file mode 100644 index 00000000..a82288db Binary files /dev/null and b/harness/experiments/ordinary-text-native-20260913/evidence.zip differ diff --git a/harness/experiments/ordinary-text-native-20260913/files.json b/harness/experiments/ordinary-text-native-20260913/files.json new file mode 100644 index 00000000..f08b4c21 --- /dev/null +++ b/harness/experiments/ordinary-text-native-20260913/files.json @@ -0,0 +1,18 @@ +{ + "evidence.zip": { + "bytes": 5704887, + "sha256": "b827d0bdaec76b7b86d8a169530dcf98767c9883187ecdda02b4ea87171a42b5" + }, + "manifest.json": { + "bytes": 24911, + "sha256": "49d0bf1c4c4732c9db8a44ae525fb4516cca4883e1a209aa736b913550396037" + }, + "README.md": { + "bytes": 2931, + "sha256": "2422dd76bfcd3e81d57d1db48db27b36e7505ff6b17a68c3b393518f623de256" + }, + "verify.py": { + "bytes": 9043, + "sha256": "7242e9ecc68f21349f0073379391d7890367e0b4f5f32697af306cc2346e50d0" + } +} diff --git a/harness/experiments/ordinary-text-native-20260913/manifest.json b/harness/experiments/ordinary-text-native-20260913/manifest.json new file mode 100644 index 00000000..ede5c558 --- /dev/null +++ b/harness/experiments/ordinary-text-native-20260913/manifest.json @@ -0,0 +1,624 @@ +{ + "schema": 1, + "productionCommit": "f714a25bbcd435941404104ad0cbb0fea3b89149", + "relatedGatesCommit": "7836a93edb98d2f9dcbf9c0290352e38f9acbb39", + "captures": [ + "native/trial-1/01-start.json", + "native/trial-1/02-open-dialog.json", + "native/trial-1/03-open-dialog-ready.json", + "native/trial-1/04-open-picker.json", + "native/trial-1/05-open-filename-focus.json", + "native/trial-1/06-open-fixture-path.json", + "native/trial-1/07-opened-fixture.json", + "native/trial-1/08-model-explorer.json", + "native/trial-1/09-created-activity.json", + "native/trial-1/10-text-created-source.json", + "native/trial-1/11-source-folder.json", + "native/trial-1/12-activity-folder.json", + "native/trial-1/13-compact-activity.json", + "native/trial-1/14-save-before-dialog.json", + "native/trial-1/15-save-before-picker.json", + "native/trial-1/16-save-before-focus.json", + "native/trial-1/17-save-before-selected.json", + "native/trial-1/18-save-before-selection-confirmed.json", + "native/trial-1/19-save-before-path.json", + "native/trial-1/20-baseline-saved.json", + "native/trial-1/21-before-drag.json", + "native/trial-1/22-after-drag.json", + "native/trial-1/23-text-after-drag.json", + "native/trial-1/24-root-after-drag.json", + "native/trial-1/25-text-actions.json", + "native/trial-1/25a-resumed-state.json", + "native/trial-1/26-model-undo.json", + "native/trial-1/27-redo-menu.json", + "native/trial-1/28-model-redo.json", + "native/trial-1/29-save-after-pending.json", + "native/trial-1/30-save-after-dialog.json", + "native/trial-1/31a-save-after-field.json", + "native/trial-1/32-save-after-path.json", + "native/trial-1/33-save-after-path-ready.json", + "native/trial-1/34-save-after-path.json", + "native/trial-1/35-saved-after.json", + "native/trial-1/36-new-cleared.json", + "native/trial-1/37-home-reopen.json", + "native/trial-1/38-reopened-after.json", + "native/trial-1/39-reopened-source.json", + "native/trial-1/40-problems-menu.json", + "native/trial-1/41-fresh-diagnostics.json", + "native/trial-1/42-fresh-warning-navigation.json", + "native/trial-1/43-comment-insertion-point.json", + "native/trial-1/44-edited-diagnostics-stale.json", + "native/trial-1/45-refreshed-diagnostics.json", + "native/trial-1/46-refreshed-warning-navigation.json", + "native/trial-1/47-restore-menu.json", + "native/trial-1/48-diagnostic-edit-undone.json" + ], + "captureCount": 49, + "imageCount": 62, + "members": { + "build/gate-union.py": { + "bytes": 3495, + "sha256": "9cca2646b1bcf09961a9ad1a276d633d8e4296ff2c6f2f356f028afaf789f503" + }, + "build/inputs.json": { + "bytes": 118403, + "sha256": "a36e2cbc29eb7a9217774464cda9da8aa1d3c39caae9b9aacd6cdb28df5bad95" + }, + "build/inputs.zip": { + "bytes": 2831326, + "sha256": "9346fba1be9bf4dd2225fe9965fd76a30429f086fd6a101f92d0963d3822f71c" + }, + "build/process.json": { + "bytes": 167, + "sha256": "b400c1f8076bcddb583424fe34d155655a41d25b5ccf0db8af26bda6b9b2685e" + }, + "build/result.json": { + "bytes": 5532, + "sha256": "5e9e227c66a4b71ade734b8ebeb12070b8a5c64a9a6cf9d8d0b6d70379d4ffc2" + }, + "build/started.json": { + "bytes": 1353, + "sha256": "15c54be09a881e6860735395569b22a7a9114789a1f8276cf79bc6fb095c8163" + }, + "build/stderr.log": { + "bytes": 261, + "sha256": "480dff999944c756fff581db0f3fac088717e0d73cae20af9a28829446df746f" + }, + "build/stdout.log": { + "bytes": 295092, + "sha256": "5a824ca91877328acd332585b39194b27fd2cb167279b99c4c78a89bf13bd19b" + }, + "native/bundle-checks/saved-after.result.json": { + "bytes": 1930, + "sha256": "34e2e8754026f35f4d57b24f8bde39f5b354aea703cd9c6650c673f674c2d167" + }, + "native/bundle-checks/saved-after.stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "native/bundle-checks/saved-after.stdout.json": { + "bytes": 2592, + "sha256": "095f83e38f6c59b69fd72d0d7d0825b7849d34b963ff35e7f9a4ab7434bae5f2" + }, + "native/bundle-checks/saved-before.result.json": { + "bytes": 1931, + "sha256": "52d3f54ce37412fe6f0bf23484d7ada549ed26f8b16501e0ddff1261df673f6c" + }, + "native/bundle-checks/saved-before.stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "native/bundle-checks/saved-before.stdout.json": { + "bytes": 2593, + "sha256": "966ee3fac987156a8b9e5e1ebf9d10dd7f7a89c84d0f42645874d153a404517e" + }, + "native/bundle-checks/summary.json": { + "bytes": 484, + "sha256": "7f9f6ddd98b303caf0edebef19aa507257c176168f94218ac86f3ac180d13631" + }, + "native/capture-snippet.js": { + "bytes": 1579, + "sha256": "55279ed080289ccf5ba482cb24b5a807669a9360012e2d87f794d4465227cb2c" + }, + "native/check-saved-bundles.py": { + "bytes": 4216, + "sha256": "beaf19c8d07e63fbc462c555f5e486fc6d035f0175ae9567ac1217414a63038c" + }, + "native/independent-review.md": { + "bytes": 5534, + "sha256": "7e952270478fb0f57b0ed44d54bba6c2b09b5c315cebe11ac7ab613155ed299f" + }, + "native/input/project.arcadia": { + "bytes": 451, + "sha256": "375c80aaf2b26bb7a638e79d76e4374454e0a86b9698b888d39dc5cad0206818" + }, + "native/run-native.py": { + "bytes": 2609, + "sha256": "2d2a63bcfccad32c2b5db09cd723dcff9877d3cbe813853e278cb3df49ed7b88" + }, + "native/saved-after/oa/activities/activity_new_activity.arcadia": { + "bytes": 89, + "sha256": "7d2a6a27fecb94eaf42a13b330fed5a269d0e80cad75688a9f26d4e08db0dfe7" + }, + "native/saved-after/project.arcadia": { + "bytes": 511, + "sha256": "c93bd35eaaf3a19bc07b5c6a4ee5839ab565e9fd90a2605261b7618fc8a7ecef" + }, + "native/saved-before/oa/activities/activity_new_activity.arcadia": { + "bytes": 89, + "sha256": "7d2a6a27fecb94eaf42a13b330fed5a269d0e80cad75688a9f26d4e08db0dfe7" + }, + "native/saved-before/project.arcadia": { + "bytes": 511, + "sha256": "dad153f45038ed9ae79ea7263364e6cdedc40737fe7f63fdad7fb198ee7f65c8" + }, + "native/trial-1/01-start-0.jpg": { + "bytes": 117627, + "sha256": "0778c21336a401d30316ed3ef5c93abe9ed349082a64cf78e8643edc0b29ee9e" + }, + "native/trial-1/01-start.json": { + "bytes": 919, + "sha256": "986aab266f45d9871bd5b134d318a38ce7d8a7c992e2a78a38c54dcfa4a86baa" + }, + "native/trial-1/02-open-dialog-0.jpg": { + "bytes": 116197, + "sha256": "e6248082f0dbe81d8d387906686538061ce1cf0f1be4b68aa70156238ea991c0" + }, + "native/trial-1/02-open-dialog.json": { + "bytes": 925, + "sha256": "e9852679994314e8ede462a414787841ed8254b8ea660f83543b1bf4e4ab3979" + }, + "native/trial-1/03-open-dialog-ready-0.jpg": { + "bytes": 90928, + "sha256": "2a931629a94f94660af8b189f919ab3e41400ca860ae8eac486f4b90184083ce" + }, + "native/trial-1/03-open-dialog-ready.json": { + "bytes": 735, + "sha256": "5aea33223bfdb19456c182f9c7cd55eaedaa8c62a6af63c33b5d334d6b7a4af6" + }, + "native/trial-1/04-open-picker-0.jpg": { + "bytes": 674, + "sha256": "5a2387a1a593a32ea169b56b9a3e59333936ee1da95164564e4d9be61bf5a24b" + }, + "native/trial-1/04-open-picker-1.jpg": { + "bytes": 53413, + "sha256": "61176947f83f35fe13aa1e31b0aa61ea478d0537b9a08fbf45ab6442ab4e2296" + }, + "native/trial-1/04-open-picker.json": { + "bytes": 4951, + "sha256": "c8f356251dafcf9465555c629d32e68d6d905d5c221e9580853f6f378123dbe4" + }, + "native/trial-1/05-open-filename-focus-0.jpg": { + "bytes": 674, + "sha256": "5a2387a1a593a32ea169b56b9a3e59333936ee1da95164564e4d9be61bf5a24b" + }, + "native/trial-1/05-open-filename-focus-1.jpg": { + "bytes": 53809, + "sha256": "fc29b6c470522c8d8c024a9ce43477b507525b4c5ad6482f812f69b526a321eb" + }, + "native/trial-1/05-open-filename-focus.json": { + "bytes": 4967, + "sha256": "4ad084f9d123899129c9c7cb4faa53f4727b14bc901fc1cc1dce45e0a15702b4" + }, + "native/trial-1/06-open-fixture-path-0.jpg": { + "bytes": 674, + "sha256": "5a2387a1a593a32ea169b56b9a3e59333936ee1da95164564e4d9be61bf5a24b" + }, + "native/trial-1/06-open-fixture-path-1.jpg": { + "bytes": 56049, + "sha256": "fc7d2cd6b12111e9bca60cc786b82f1f8f42ee37654a29bd058345ce10b77eaf" + }, + "native/trial-1/06-open-fixture-path.json": { + "bytes": 4963, + "sha256": "1eb51f68dc204ad419d54cc3d7bf1e5335b41bd65a083d23bed53dfc90f9a374" + }, + "native/trial-1/07-opened-fixture-0.jpg": { + "bytes": 98357, + "sha256": "eddb3b2e85487bc4e53da399a2062c6bd138b6022216dc0b01c3cffc811c2c99" + }, + "native/trial-1/07-opened-fixture.json": { + "bytes": 956, + "sha256": "d384ab6efa1fbf49e1b2afd93f933c64d865aa2b6baf6c7a69e2ac372da50449" + }, + "native/trial-1/08-model-explorer-0.jpg": { + "bytes": 90072, + "sha256": "65a6e4f0545f6a5e104b9a2896e9b1f82851528a9e91651a31915d9a4f7a0058" + }, + "native/trial-1/08-model-explorer.json": { + "bytes": 963, + "sha256": "3a772406fe219f21d954590f6c96f47adc9901d130c2d7bb087acc086cf6079b" + }, + "native/trial-1/09-created-activity-0.jpg": { + "bytes": 100572, + "sha256": "115443b3ac12e32fc5a9d0736c9a475a431ed7423a84275a17fa1b4b10496185" + }, + "native/trial-1/09-created-activity.json": { + "bytes": 975, + "sha256": "49a134749f520039a5390fc4b4110e5411822c6fb7573e31e1ffb1bff428a4d0" + }, + "native/trial-1/10-text-created-source-0.jpg": { + "bytes": 103031, + "sha256": "6999c782d6b38719757898cd7d1575e71239fab882b040ce3125e823e734d995" + }, + "native/trial-1/10-text-created-source.json": { + "bytes": 978, + "sha256": "56af19e09aa7d9bd4ef315a80d5060bfd52bd8e08d111c3647ead2bfff9f8b12" + }, + "native/trial-1/11-source-folder-0.jpg": { + "bytes": 103956, + "sha256": "72656e598bfef0ad4355ca53d85b88a0d62ad186b3189b0a3e3f5900461e16b1" + }, + "native/trial-1/11-source-folder.json": { + "bytes": 972, + "sha256": "e59af1c50e4f374cd840bd62fd0b8676e18e47a45ad820dd8b6a8dd835315c27" + }, + "native/trial-1/12-activity-folder-0.jpg": { + "bytes": 105653, + "sha256": "2aff6c99a3845c334b94ba3e7b27fbdb3c31056784ce3ec4e76ef45ebb32911f" + }, + "native/trial-1/12-activity-folder.json": { + "bytes": 974, + "sha256": "383be400c6317b571546e51d0c40128e7381b5ce1686ab3aaa20ece1a5e801ee" + }, + "native/trial-1/13-compact-activity-0.jpg": { + "bytes": 88781, + "sha256": "87b367c8fe3017d221228ec63aa5192aaee19b4f80db6a07007b32f10f41d242" + }, + "native/trial-1/13-compact-activity.json": { + "bytes": 975, + "sha256": "ba4daa10aeb0d9cd555d03cfbcb6bf5a7c6777d9247a46859f35d6fe740fa347" + }, + "native/trial-1/14-save-before-dialog-0.jpg": { + "bytes": 83376, + "sha256": "9fd9bd5067f57dc0f297f5d02442e41e3395bd3f6964d726e852746c54a0cff7" + }, + "native/trial-1/14-save-before-dialog.json": { + "bytes": 977, + "sha256": "91884e38ade4bd4fa93474a1076d84a4228b4d65a3d4c70afe296166150335b5" + }, + "native/trial-1/15-save-before-picker-0.jpg": { + "bytes": 674, + "sha256": "5a2387a1a593a32ea169b56b9a3e59333936ee1da95164564e4d9be61bf5a24b" + }, + "native/trial-1/15-save-before-picker-1.jpg": { + "bytes": 55054, + "sha256": "3529090d92bf9ea0375a8e95cc6f1b67d9159872367c89e3bf308e3d024a7ff7" + }, + "native/trial-1/15-save-before-picker.json": { + "bytes": 4764, + "sha256": "febecff84014510968d802845126b9935a1c5b40a92dc2795d7bd05d4b11ecbf" + }, + "native/trial-1/16-save-before-focus-0.jpg": { + "bytes": 674, + "sha256": "5a2387a1a593a32ea169b56b9a3e59333936ee1da95164564e4d9be61bf5a24b" + }, + "native/trial-1/16-save-before-focus-1.jpg": { + "bytes": 55425, + "sha256": "2544f1ccc8ed5a21e682f6e3c836daa684a60f5ee0e4eb39de8ec4f05aca5daa" + }, + "native/trial-1/16-save-before-focus.json": { + "bytes": 4762, + "sha256": "e07187e7179555f84a8b3ad7c87e707ba686945bf60dc89b2bfe86ce34d4fb42" + }, + "native/trial-1/17-save-before-selected-0.jpg": { + "bytes": 674, + "sha256": "5a2387a1a593a32ea169b56b9a3e59333936ee1da95164564e4d9be61bf5a24b" + }, + "native/trial-1/17-save-before-selected-1.jpg": { + "bytes": 55437, + "sha256": "7e12139b558f7427de23cf4a611c6a0a8b20be25e6a0b0799832ddc715ba1fd5" + }, + "native/trial-1/17-save-before-selected.json": { + "bytes": 4768, + "sha256": "96d7d8468d87e24808617aea0cd42b52acdf4126c601b10e6f98b614beaf5f75" + }, + "native/trial-1/18-save-before-selection-confirmed-0.jpg": { + "bytes": 674, + "sha256": "5a2387a1a593a32ea169b56b9a3e59333936ee1da95164564e4d9be61bf5a24b" + }, + "native/trial-1/18-save-before-selection-confirmed-1.jpg": { + "bytes": 54676, + "sha256": "4cc51ff7fa2af6325879b442aea5eee1992f0fd41c4b6455fab3540601691a49" + }, + "native/trial-1/18-save-before-selection-confirmed.json": { + "bytes": 4790, + "sha256": "a24fb0576c3339fa281c96d82055428d1e947ea8e0fbda3d9304fbec2410ea62" + }, + "native/trial-1/19-save-before-path-0.jpg": { + "bytes": 674, + "sha256": "5a2387a1a593a32ea169b56b9a3e59333936ee1da95164564e4d9be61bf5a24b" + }, + "native/trial-1/19-save-before-path-1.jpg": { + "bytes": 57797, + "sha256": "3e5f67d8125353318557c1fffc3aa3184e7870b79f57fb2b272f784a55438854" + }, + "native/trial-1/19-save-before-path.json": { + "bytes": 4760, + "sha256": "0af8bed5fa5a3d93b59d046b48623992321d2436275d835ba39550df0edf3a89" + }, + "native/trial-1/20-baseline-saved-0.jpg": { + "bytes": 85738, + "sha256": "2a1cb7c65ce2ae68c6c8e1b60c052fec4ccad5574da8e8900d452b41324150c0" + }, + "native/trial-1/20-baseline-saved.json": { + "bytes": 965, + "sha256": "5990919d8cdb16e9f5445bb858b0d014015ef02d9157cbc2dc84f75a74f02b00" + }, + "native/trial-1/21-before-drag-0.jpg": { + "bytes": 101486, + "sha256": "81f4bb4b0cb7314011b8acd829e9905993b596175139c482cef6030ec542e078" + }, + "native/trial-1/21-before-drag.json": { + "bytes": 960, + "sha256": "e35a0357f5b334c8e519cb83116b2d516e9f19bb1ac794cfde0aaf3f6c98d62d" + }, + "native/trial-1/22-after-drag-0.jpg": { + "bytes": 103060, + "sha256": "6a8f8c1bd011bd6224050236736e90a982c2102ec2a4700d09e7fc0ecd6ee9a6" + }, + "native/trial-1/22-after-drag.json": { + "bytes": 967, + "sha256": "68e018c9d5b9e28b9a138f8085539bc9d87b0e0e48761049fd57d67334313715" + }, + "native/trial-1/23-text-after-drag-0.jpg": { + "bytes": 83460, + "sha256": "dfb676eca325444b0383f47d056621d62c9cba3a522739a0015eb1d4a04a36f3" + }, + "native/trial-1/23-text-after-drag.json": { + "bytes": 974, + "sha256": "100687443402acff33f2c9eba03a57d1146475e2225e6e90baa9d36624fec96f" + }, + "native/trial-1/24-root-after-drag-0.jpg": { + "bytes": 104490, + "sha256": "25a2302b69bd367ea04c4b1ca28030c34e4a5b32a7c88c7c21c5a721fa69c60d" + }, + "native/trial-1/24-root-after-drag.json": { + "bytes": 974, + "sha256": "ebbd8e200f431ad99760ed94895a74bc0b01d33f1fb67a6ab1464a1cf008c40a" + }, + "native/trial-1/25-text-actions-0.jpg": { + "bytes": 117335, + "sha256": "4627be733b9c84798ff8324fe8bb8bba98dd7c8f3c7be5563d1a24c99e66b59c" + }, + "native/trial-1/25-text-actions.json": { + "bytes": 971, + "sha256": "4d0a137244adf721a04dc17af1ae0ef380db737c3ab7478fbf6661bab24ce835" + }, + "native/trial-1/25a-resumed-state-0.jpg": { + "bytes": 117221, + "sha256": "f509ed4e37b675d4cbcf1c075a983654b016d5459905a68b45514e24891ced3f" + }, + "native/trial-1/25a-resumed-state.json": { + "bytes": 973, + "sha256": "304de4fa36d0b97b891455b26a14850b43bfd0811eb7e7be22bdcae9814da703" + }, + "native/trial-1/26-model-undo-0.jpg": { + "bytes": 103052, + "sha256": "a8966f1244e9bbe9be4ad75278f3a492e748029c3fff3174ce38250997250a11" + }, + "native/trial-1/26-model-undo.json": { + "bytes": 959, + "sha256": "9cd25b0f2d954f7772ae139c8d5afcb04ab1bf4c965aae6c6e22af37c352618b" + }, + "native/trial-1/27-redo-menu-0.jpg": { + "bytes": 117521, + "sha256": "13634900648a485f38fd5183aa097ae544688b5a6112b821362b7128709d06c1" + }, + "native/trial-1/27-redo-menu.json": { + "bytes": 958, + "sha256": "4cb0672342dd468ce4a403993e22613abe7498cdceb6111eb39747e7a24a8c86" + }, + "native/trial-1/28-model-redo-0.jpg": { + "bytes": 103295, + "sha256": "8202074761aca9c067f5851a17c0586cc6698426473c1621defd3739cbbb817b" + }, + "native/trial-1/28-model-redo.json": { + "bytes": 969, + "sha256": "252817aafe641c994ddba7fa244435371b4e75f6b9bbd16d355f02e1b35f0d9d" + }, + "native/trial-1/29-save-after-pending-0.jpg": { + "bytes": 102718, + "sha256": "57a731a2b96cd9685ed0dc206a49b7804231d83d763503308fe73e6e326e725d" + }, + "native/trial-1/29-save-after-pending.json": { + "bytes": 977, + "sha256": "32490225d11e793b31168cbd00ce184d38190c6e7c4420dba0e4c20424b19533" + }, + "native/trial-1/30-save-after-dialog-0.jpg": { + "bytes": 674, + "sha256": "5a2387a1a593a32ea169b56b9a3e59333936ee1da95164564e4d9be61bf5a24b" + }, + "native/trial-1/30-save-after-dialog-1.jpg": { + "bytes": 56737, + "sha256": "58dab12435a2f7b258e0c83ab0edd4a95379b0d6ec95f16184d63f8d76b94daf" + }, + "native/trial-1/30-save-after-dialog.json": { + "bytes": 5057, + "sha256": "c9515daa0a573ee5510a421a205d1697835dfeaa3d2d69a64d93e4d66c94310e" + }, + "native/trial-1/31a-save-after-field-0.jpg": { + "bytes": 674, + "sha256": "5a2387a1a593a32ea169b56b9a3e59333936ee1da95164564e4d9be61bf5a24b" + }, + "native/trial-1/31a-save-after-field-1.jpg": { + "bytes": 56737, + "sha256": "58dab12435a2f7b258e0c83ab0edd4a95379b0d6ec95f16184d63f8d76b94daf" + }, + "native/trial-1/31a-save-after-field.json": { + "bytes": 5057, + "sha256": "39e59a6120ad31528e55d379eeb2a463af05b5bea8710020c659687b414208fc" + }, + "native/trial-1/32-save-after-path-0.jpg": { + "bytes": 674, + "sha256": "5a2387a1a593a32ea169b56b9a3e59333936ee1da95164564e4d9be61bf5a24b" + }, + "native/trial-1/32-save-after-path-1.jpg": { + "bytes": 55986, + "sha256": "cb789f536317fff99d6f55133297a8d8511ef280a6b82c5e6e2960da6d0ceafe" + }, + "native/trial-1/32-save-after-path.json": { + "bytes": 5053, + "sha256": "9167fd1352cfe5bb1b70631d1413cb7dac3a49311f459c39df374cdfe2d453d8" + }, + "native/trial-1/33-save-after-path-ready-0.jpg": { + "bytes": 674, + "sha256": "5a2387a1a593a32ea169b56b9a3e59333936ee1da95164564e4d9be61bf5a24b" + }, + "native/trial-1/33-save-after-path-ready-1.jpg": { + "bytes": 56034, + "sha256": "b41240172f775f45e4f19c1240784595004134baace690ccc5388097c9776104" + }, + "native/trial-1/33-save-after-path-ready.json": { + "bytes": 5065, + "sha256": "00f3dc075eb6e446a6e7b85790a6d7e913151de53ff8041d9a63c6acd2597c47" + }, + "native/trial-1/34-save-after-path-0.jpg": { + "bytes": 674, + "sha256": "5a2387a1a593a32ea169b56b9a3e59333936ee1da95164564e4d9be61bf5a24b" + }, + "native/trial-1/34-save-after-path-1.jpg": { + "bytes": 59217, + "sha256": "182c41675727c07555b126f0e7876b32e7c8f141b0d7254e1511299318e08c9d" + }, + "native/trial-1/34-save-after-path.json": { + "bytes": 5053, + "sha256": "2c356eeff45b49e9ce17919042929382027445ee07917a80eb8432581ede66e3" + }, + "native/trial-1/35-saved-after-0.jpg": { + "bytes": 102789, + "sha256": "cb90a19d855faf3bab39cdb9468c788d72cf840366ef41b98e99d2cd4d9160fc" + }, + "native/trial-1/35-saved-after.json": { + "bytes": 962, + "sha256": "f96d3e0c7d0c83603ae14ec4231250e7be9f12113b465050c101852de1755548" + }, + "native/trial-1/36-new-cleared-0.jpg": { + "bytes": 90719, + "sha256": "dfc505fa7c2ce48fea5a04aa90b2745d11b144704c16cec0b2431a92291a8966" + }, + "native/trial-1/36-new-cleared.json": { + "bytes": 925, + "sha256": "04c4e7a5de7af7974b5ecff290582854cb07979ffca6ca3e468eda09af403b09" + }, + "native/trial-1/37-home-reopen-0.jpg": { + "bytes": 115448, + "sha256": "79680f4fbe8ea41a8318d175959d9bf80b8f28ae161b81818f6daa1a97ff294f" + }, + "native/trial-1/37-home-reopen.json": { + "bytes": 925, + "sha256": "93b4c5dedb87e64bfd4ebead90b9fb6e6cc89a96983312b70260d8b1cd2ea430" + }, + "native/trial-1/38-reopened-after-0.jpg": { + "bytes": 98471, + "sha256": "1a463750e7eeca04b36db7d1ebd3e093f44c92cff40bc68ce603e2e788c23fe7" + }, + "native/trial-1/38-reopened-after.json": { + "bytes": 956, + "sha256": "154ba579c620a7d4adaf6c303e045b73223e69996ebaa5841d751dc9cf3f090f" + }, + "native/trial-1/39-reopened-source-0.jpg": { + "bytes": 103219, + "sha256": "2bf7bc9dc32c265c303453c054a032af780cb091fb4cc9e8830b0c8d1019c4cd" + }, + "native/trial-1/39-reopened-source.json": { + "bytes": 964, + "sha256": "5faf1b0d7810c67d17c77d914824b111b945915a1cf97020e544d3df5c2378d8" + }, + "native/trial-1/40-problems-menu-0.jpg": { + "bytes": 117324, + "sha256": "ffdbb858d382d5eb7f5c02769fb6ca0fea64a223280f27366c95087ee5a1f618" + }, + "native/trial-1/40-problems-menu.json": { + "bytes": 962, + "sha256": "a2f4a64ce2619952ce1983af22400c13f28f496ba69cc2c9e09eb3b19d0d045b" + }, + "native/trial-1/41-fresh-diagnostics-0.jpg": { + "bytes": 124773, + "sha256": "25f26374a247b7188a8458950ded42eeb1635919a54b4bfd33cedc17446f7506" + }, + "native/trial-1/41-fresh-diagnostics.json": { + "bytes": 966, + "sha256": "3c227b0e93aa63082536324498c01a47df905fe7677bda072bd8309dc369e78f" + }, + "native/trial-1/42-fresh-warning-navigation-0.jpg": { + "bytes": 107742, + "sha256": "2d5d6b4dc722d63313f8aaa2bb6943d3bec11a1bcf9087cdc56ad287e5b5936d" + }, + "native/trial-1/42-fresh-warning-navigation.json": { + "bytes": 973, + "sha256": "0a3fd08f2e994530dd41b6fdc6d28bcb0d665e5d9c16a2e89f8bd54dcb797048" + }, + "native/trial-1/43-comment-insertion-point-0.jpg": { + "bytes": 108879, + "sha256": "4267f2294d6ceb9ffdb1ea5e72cfbd9aa17ef14df72ea410c0e80128ef854520" + }, + "native/trial-1/43-comment-insertion-point.json": { + "bytes": 972, + "sha256": "182b10cdcaf379defeb0fc448cf1e933aab4f783aa383a97bdbf73a3338af69d" + }, + "native/trial-1/44-edited-diagnostics-stale-0.jpg": { + "bytes": 91431, + "sha256": "206a1ea8360ca766a17d12594265edc5c54abeda976456259315569879aa4165" + }, + "native/trial-1/44-edited-diagnostics-stale.json": { + "bytes": 983, + "sha256": "222c7915eb406f618e8e10caf8b02bb57545a3668fe32f20ef4381eb3780d67a" + }, + "native/trial-1/45-refreshed-diagnostics-0.jpg": { + "bytes": 107187, + "sha256": "0c9309378f1bac39941836312b926eddf52a78c164329955f677df1000c8c4c1" + }, + "native/trial-1/45-refreshed-diagnostics.json": { + "bytes": 980, + "sha256": "42a51a6eccce6b983368981c194a54c2e3172cee61302bc75b9ee555ace9c367" + }, + "native/trial-1/46-refreshed-warning-navigation-0.jpg": { + "bytes": 109007, + "sha256": "e2e23d83f8e5ad9ddbc98f53858276990e27e59550de94dcf6e96054ee0f6a00" + }, + "native/trial-1/46-refreshed-warning-navigation.json": { + "bytes": 987, + "sha256": "39d8e7cc945cb444b5f664c243e9ad373ccc1d18b6c04e8cc6dd37a8ce46c643" + }, + "native/trial-1/47-restore-menu-0.jpg": { + "bytes": 120506, + "sha256": "a5f11f64e091b20caa628c3253ad92b8b98b2647c19e798f150f3a2d7a3f87e8" + }, + "native/trial-1/47-restore-menu.json": { + "bytes": 971, + "sha256": "4a7e3bc9c23f95df538a488d0186f37dc54a5bb1dd184d06d2d6268bf1ccf256" + }, + "native/trial-1/48-diagnostic-edit-undone-0.jpg": { + "bytes": 105205, + "sha256": "cf550b51b74b6fef8e21cd2d50f41f1797e22b4b7f38214d8311062bee3e0483" + }, + "native/trial-1/48-diagnostic-edit-undone.json": { + "bytes": 971, + "sha256": "43c970d94c53c31a570ab92c6855566a6e2ce690768f6ed7836d64c5a6120f81" + }, + "native/trial-1/input.zip": { + "bytes": 343, + "sha256": "f73fb93e2ee2eae45d1df2f63cdbb838a60cdda3f09b8977af6ded6e4ab424f0" + }, + "native/trial-1/process.json": { + "bytes": 61, + "sha256": "8a60a20728ea02517d7c22812d27f9814bc3aa98fee597820e8351076f32e7c2" + }, + "native/trial-1/result.json": { + "bytes": 1665, + "sha256": "6e615456856f30b8c25dedcd881d7dff6918535916a62b39b4de15c591960dd2" + }, + "native/trial-1/started.json": { + "bytes": 1198, + "sha256": "39425278d31c29db4f293b4be7f3e9b2616a85e09c2f6a124dbab2b7ea0ac48c" + }, + "native/trial-1/stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "native/trial-1/stdout.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + } +} diff --git a/harness/experiments/ordinary-text-native-20260913/verify.py b/harness/experiments/ordinary-text-native-20260913/verify.py new file mode 100644 index 00000000..6cc9b63f --- /dev/null +++ b/harness/experiments/ordinary-text-native-20260913/verify.py @@ -0,0 +1,100 @@ +"""Portable read-only evidence verification; no archived helper or binary runs.""" +from pathlib import Path, PurePosixPath +from datetime import datetime +import hashlib, io, json, zipfile + +ROOT=Path(__file__).resolve().parent +def require(ok,message): + if not ok: raise ValueError(message) +def pin(b): return {'bytes':len(b),'sha256':hashlib.sha256(b).hexdigest()} +def membership(z,expected): + names=z.namelist() + require(len(names)==len(set(names)) and set(names)==set(expected),'ZIP membership') + require(all(not PurePosixPath(n).is_absolute() and '..' not in PurePosixPath(n).parts and '\\' not in n and ':' not in n for n in names),'unsafe ZIP path') +def main(): + files=json.loads((ROOT/'files.json').read_bytes()) + for name,p in files.items(): require(pin((ROOT/name).read_bytes())==p,'outer hash '+name) + manifest=json.loads((ROOT/'manifest.json').read_bytes()) + with zipfile.ZipFile(ROOT/'evidence.zip') as z: + membership(z,manifest['members']) + for name,p in manifest['members'].items():require(pin(z.read(name))==p,'member hash '+name) + def raw(p):return z.read(p) + def obj(p):return json.loads(raw(p)) + build=obj('build/result.json'); start=obj('build/started.json') + require(all(build[k]==v for k,v in start.items()),'build start/result') + require(build['exitCode']==0 and build['inputsUnchanged'] is True,'build success') + require(build['head']==manifest['productionCommit'],'build commit') + require(datetime.fromisoformat(build['start'])<=datetime.fromisoformat(build['finish']),'build time order') + require(build['command']==obj('build/process.json')['command'],'build process command') + for field,path in [('inputs','build/inputs.json'),('archive','build/inputs.zip'),('helper','build/gate-union.py'),('stdout','build/stdout.log'),('stderr','build/stderr.log')]: + require(build[field]==pin(raw(path)),'build receipt '+field) + inputs=obj('build/inputs.json') + require(len(inputs)==build['inputCount']==707,'707 build inputs') + require(sum(p.startswith('crates/vendor/iced_widget/') for p in inputs)==71,'vendor inventory') + with zipfile.ZipFile(io.BytesIO(raw('build/inputs.zip'))) as source: + membership(source,inputs) + for name,p in inputs.items():require(pin(source.read(name))==p,'source input '+name) + artifacts=[] + for line in raw('build/stdout.log').decode('utf-8').splitlines(): + try:a=json.loads(line) + except json.JSONDecodeError:continue + if a.get('reason')=='compiler-artifact' and a.get('executable'):artifacts.append(a) + require(artifacts==[a['cargo'] for a in build['artifacts']],'build artifact receipts') + binaries={a['cargo']['target']['name']:a['readback'] for a in build['artifacts']} + executables={a['cargo']['target']['name']:a['cargo']['executable'] for a in build['artifacts']} + require(set(binaries)=={'arcadia','arcadia-server','arcadia-studio'},'build artifact targets') + result=obj('native/trial-1/result.json');start=obj('native/trial-1/started.json') + require(all(result[k]==v for k,v in start.items()),'native start/result') + require(result['exitCode']==0 and result['inputUnchanged'] is True,'native closure/input') + require(result['command']==[executables['arcadia-studio']],'native exact GUI command') + process=obj('native/trial-1/process.json') + require(isinstance(process['pid'],int) and process['pid']>0,'native positive process ID') + require(datetime.fromisoformat(result['start'])<=datetime.fromisoformat(process['observed'])<=datetime.fromisoformat(result['finish']),'native process observation time') + require(result['binary']==result['binaryAfter']==binaries['arcadia-studio'],'GUI binary receipt chain') + require(result['buildReceipt']==pin(raw('build/result.json')) and result['buildInputs']==pin(raw('build/inputs.json')) and result['buildHead']==build['head'],'native build receipt chain') + for field,path in [('helper','native/run-native.py'),('captureHelper','native/capture-snippet.js'),('inputArchive','native/trial-1/input.zip'),('stdout','native/trial-1/stdout.log'),('stderr','native/trial-1/stderr.log')]: + require(result[field]==pin(raw(path)),'native receipt '+field) + require(not raw('native/trial-1/stdout.log') and not raw('native/trial-1/stderr.log'),'native empty streams') + with zipfile.ZipFile(io.BytesIO(raw('native/trial-1/input.zip'))) as fixture: + membership(fixture,result['input']) + for name,p in result['input'].items():require(pin(fixture.read(name))==p and fixture.read(name)==raw('native/input/'+name),'fixture bytes') + captures=manifest['captures']; seen=[] + for name in captures: + capture=obj(name) + require(datetime.fromisoformat(result['start'])<=datetime.fromisoformat(capture['time'])<=datetime.fromisoformat(result['finish']),'capture timestamp') + for image in capture['images']: + path='native/trial-1/'+image['file'] + require(path in manifest['members'] and image['width']>0 and image['height']>0,'capture image reference') + require(raw(path).startswith(b'\xff\xd8'),'JPEG signature') + seen.append(path) + images=[n for n in manifest['members'] if n.startswith('native/trial-1/') and n.endswith('.jpg')] + require(len(seen)==len(set(seen)) and set(seen)==set(images),'all raw frames referenced exactly once') + require(len(captures)==manifest['captureCount'] and len(images)==manifest['imageCount'],'capture counts') + original=raw('native/input/project.arcadia') + expected={'project.arcadia':original[:-2]+b'\n include "oa/activities/activity_new_activity.arcadia";\n}\n', + 'oa/activities/activity_new_activity.arcadia':b'\noa_activity new_activity "New activity" id "d2b6d784-dea5-433d-aea9-214c604744e5" {\n}\n\n\n'} + require(original.endswith(b'}\n') and expected['project.arcadia'].count(b'position { x 120.0; y 80.0; };')==1,'fixture oracle preconditions') + for bundle in ['saved-before','saved-after']: + if bundle=='saved-after':expected['project.arcadia']=expected['project.arcadia'].replace(b'position { x 120.0; y 80.0; };',b'position { x 190.0; y 80.0; };',1) + prefix='native/'+bundle+'/' + actual={n[len(prefix):]:raw(n) for n in manifest['members'] if n.startswith(prefix)} + require(actual==expected,bundle+' exact source-byte oracle') + receipt=obj('native/bundle-checks/'+bundle+'.result.json') + report=obj('native/bundle-checks/'+bundle+'.stdout.json') + expected_entry=result['cwd'].replace('\\','/').rstrip('/')+'/.local/union-native/'+bundle+'/project.arcadia' + require(len(receipt['command'])==4 and receipt['command'][0]==executables['arcadia'] and receipt['command'][1]=='check' and receipt['command'][2].replace('\\','/')==expected_entry and receipt['command'][3]=='--json',bundle+' exact CLI command') + require(datetime.fromisoformat(receipt['start'])<=datetime.fromisoformat(receipt['finish']),bundle+' CLI time order') + require(receipt['files']=={n:pin(b) for n,b in actual.items()} and receipt['filesUnchanged'] is True,bundle+' file receipts') + require(receipt['binary']==binaries['arcadia'] and receipt['buildReceipt']==pin(raw('build/result.json')),bundle+' CLI build receipt') + require(receipt['producer']==pin(raw('native/check-saved-bundles.py')),bundle+' producer') + require(receipt['exitCode']==0 and report['status']=='checked',bundle+' CLI status') + for field,suffix in [('stdout','.stdout.json'),('stderr','.stderr.log')]:require(receipt[field]==pin(raw('native/bundle-checks/'+bundle+suffix)),bundle+' '+field) + require(not raw('native/bundle-checks/'+bundle+'.stderr.log'),bundle+' empty stderr') + require(len(report['diagnostics'])==4 and all(d['severity']=='warning' for d in report['diagnostics']),bundle+' warnings') + require(receipt['diagnostics']==[{k:d[k] for k in ('severity','code','object_id')} for d in report['diagnostics']],bundle+' diagnostic receipt') + require(not report['changes'] and not report['written'] and report['identities_to_stabilize']==0,bundle+' nonmutating stable-ID check') + summary=obj('native/bundle-checks/summary.json') + require(summary['status']=='PASS' and summary['runs']==['saved-before','saved-after'] and summary['producer']==pin(raw('native/check-saved-bundles.py')),'bundle summary') + print('PASS:',len(manifest['members']),'members;',len(captures),'captures;',len(images),'unaltered frames; 707 build inputs; native closure and both saved-byte/CLI receipt oracles.') + print('No archived code executed. Screenshot interpretation and full parsed-model equality are not machine-verified.') +if __name__=='__main__':main() diff --git a/harness/ordinary-text-integration-20260913.md b/harness/ordinary-text-integration-20260913.md index 501db0f8..011c0672 100644 --- a/harness/ordinary-text-integration-20260913.md +++ b/harness/ordinary-text-integration-20260913.md @@ -134,7 +134,7 @@ outside the selected scope. The filters cover source-symbol tests, Text workspac tests, surrounding view tests and the palette/drawer integration cases. The updated close assertions and both recovery-warning regressions passed. The matching Windows GUI, CLI and server then built successfully from `f714a25` with -the same final inputs. Native acceptance remains pending at this checkpoint. +the same final inputs. The native workflow is recorded separately below. [The subsequent gate package](experiments/ordinary-text-gates-20260913/README.md) preserves these eight closed gates, both failed lint attempts, complete listing @@ -143,3 +143,50 @@ receipts. Its 8,624,040-byte ZIP has SHA-256 `b0da6611dd86e83c8f779c025786e473834298f9b9990b19a76b250b61137780`. Independent review verified all 50 stored members against raw captures, source relationships, the safe read-only verifier, and prospective Git-clean outer bytes. + +## Native Windows workflow + +The combined GUI built from `f714a25` ran from 14:16:18 to 14:32:24 UTC on +2026-09-13 and closed with exit zero and empty stdout/stderr. Its 117,674,496-byte +executable had SHA-256 +`f7405a95a499c31972934b8efdd8a37ee3981cefc5b2b7c82a4f16c4e5a935ed` +before and after the trial, matching the captured build receipt and final 707 +inputs. The original 451-byte input remained unchanged. + +Computer Use exercised creation of a new activity in Model explorer, its compact +included declaration in Text, Save As, a graphical move, model Undo and Redo, +a second Save As, New, and reopening that saved model from Home. The move changed +the source x coordinate from 120.0 to 190.0; Undo restored 120.0 and the saved +state, and Redo restored 190.0. The authored empty `port_anchors` field, spacing, +comment and include remained intact. Reopening showed the same 190.0 source +coordinate and the new activity. + +The Problems drawer navigated from a current warning to the included activity +at line 2. Inserting a temporary comment removed the old warning rows and +underlines while reporting drafts pending. Apply all restored the four warnings +with the included declaration at line 3; selecting its warning highlighted that +updated declaration. Undo model change removed the comment, restored line 2 +diagnostics and returned the saved state before normal exit. These observations +establish visible invalidation and refresh; they do not simulate delivery of a +previously captured stale UI message. Automated authority regressions cover that +separate case. + +An exact-byte oracle checked both saved bundles: each has precisely two source +files, the new activity identity is stable, and their only difference is the +intended x-coordinate change. Both passed `arcadia check --json` using the +matching built CLI, without writes or stderr. Each reported the expected four +modeling warnings for two unallocated activities without behavior context and +zero errors. The checks do not assert equality of the entire in-memory Project; +saved bytes, CLI validation, GUI observations and process receipts are distinct +evidence. Original screenshots retain intermediate file-dialog states. The +operator encountered an unavailable UI Automation value-setting call, reported +in the tool transcript rather than the screenshot archive; the exact intended +path was visibly verified before saving. + +Independent native review inspected 25 original frames, checked all 49 capture +metadata records, and independently reconstructed the source-byte oracles and +receipt relationships. It found no functional defect or source corruption. Its +one evidence-attribution wording correction is resolved above. The review does +not certify exhaustive accessibility, Linux, source-8 composition or release +readiness. The raw trial and review are in the +[native evidence package](experiments/ordinary-text-native-20260913/README.md).