Record portable ordinary-text native acceptance evidence
This commit is contained in:
@@ -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.
|
||||
Binary file not shown.
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
@@ -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 <entry> --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).
|
||||
|
||||
Reference in New Issue
Block a user