Integrate reviewed compact source and Text workspace
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
# Ordinary-text union: subsequent gates
|
||||
|
||||
Closed automated-gates checkpoint. Preserve the separately published initial evidence package
|
||||
at `../ordinary-text-integration-20260913/`.
|
||||
|
||||
Run `python verify.py` with Python 3.10 or newer. Verification uses only these
|
||||
five files and the standard library: no archived code execution, extraction,
|
||||
network, Git, Cargo, binaries or original-machine paths. All outer text files
|
||||
are UTF-8 with LF before hashing. Raw ZIP contents retain original bytes.
|
||||
`files.json` pins the archive, manifest, verifier and README; the manifest pins
|
||||
each member and maps each capture to exact source inventory/archive objects.
|
||||
Only byte-identical objects are deduplicated, including ZIP timestamps.
|
||||
|
||||
| Capture | Outcome |
|
||||
| --- | --- |
|
||||
| desktop-list-1 | 1,185 actual listed test names |
|
||||
| core-2 | 537 passed, 0 failed, 1 ignored |
|
||||
| desktop-1 | 1,179 passed, 0 failed, 6 ignored |
|
||||
| clippy-1 | Failed items_after_test_module lint; raw logs retained |
|
||||
| clippy-2 | Failed unused SymbolEvent::Close lint; raw logs retained |
|
||||
| clippy-3 | Passed strict workspace/all-target lint |
|
||||
| desktop-affected-2 | 83 passed, 0 failed, 1 known ignored, 1,101 filtered |
|
||||
| windows-build-1 | Workspace binaries built successfully; 3 binary artifact receipts |
|
||||
|
||||
The full suites use the e624d5b9c4f848eff3fba2ed83f9decf959e14d8 input
|
||||
state. The final lint inputs include the reviewed four-file fix committed as
|
||||
f714a25bbcd435941404104ad0cbb0fea3b89149. That change moves test-only
|
||||
helpers, removes the unconstructed Close variant and its handler, and changes
|
||||
existing tests to send the captured HideDrawer event already used by production
|
||||
UI. `fullSuiteToFinalInputChanges` records the exact four file/digest pairs.
|
||||
Per-run source inventories are authoritative; receipt HEADs can predate dirty
|
||||
changes. Full-suite outcomes are scoped to their recorded inputs; they are not
|
||||
a full-suite rerun of the later fix. The final affected-test recheck uses the
|
||||
same 707 input hashes as clippy-3. Its 84 names equal the OR-filter selection
|
||||
from the prior 1,185-name listing: `source_symbols::tests`, `text_workspace::`,
|
||||
`views::tests`, `palette_union`. All 83 enabled selected tests passed; the
|
||||
known ignored case is the source-symbol 100-module performance probe. This
|
||||
check introduces no test names and leaves 1,101 previous tests unexecuted on
|
||||
the final source state.
|
||||
The final Windows build uses those same 707 input hashes. Its three binary
|
||||
artifact records are preserved; the binaries themselves are not in this package.
|
||||
|
||||
Verification checks archive membership/hashes, nested source manifests and all
|
||||
707 inputs including 71 vendored iced_widget files, receipt relationships,
|
||||
helper identity, commands, outcomes, exact test summary rows, and artifact
|
||||
receipt records. It independently recomputes actual desktop names/outcomes,
|
||||
listing/execution equality, all 150 required matches (144 passed, 6 ignored),
|
||||
removed/retained names, and 24 original checklist Git blob bindings from archived
|
||||
source bytes. It checks the full-suite-to-final four-file input delta. The
|
||||
checklist's original pending-listing wording is preserved as raw historical
|
||||
input; desktop-admission.json records the completed admission.
|
||||
|
||||
`final-input-commit-readback.json` is a secondary parent-produced summary of
|
||||
comparison between all 707 final lint inputs and f714a25 committed blobs. Its
|
||||
helper and Git stream were not archived. Verification checks its relationship
|
||||
to the captured input manifest; it does not independently reproduce the Git
|
||||
comparison or authenticate that commit.
|
||||
|
||||
Integrity and internal consistency do not establish independent reproduction or
|
||||
authenticated provenance. Expected summary rows are frozen from raw logs.
|
||||
Ignored probes did not execute. Test membership/pass outcomes do not establish
|
||||
complete requirement coverage or native GUI acceptance. Compiler artifact hashes
|
||||
are retained as observations; binaries are intentionally absent and cannot be
|
||||
verified here. Source archives are not a hermetic compiler/dependency bundle.
|
||||
This package makes no native interaction, release publication or packaged-build
|
||||
claim. No credentials, dependency caches or whole user profile are included.
|
||||
Binary file not shown.
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"evidence.zip": {
|
||||
"bytes": 8624040,
|
||||
"sha256": "b0da6611dd86e83c8f779c025786e473834298f9b9990b19a76b250b61137780"
|
||||
},
|
||||
"manifest.json": {
|
||||
"bytes": 19056,
|
||||
"sha256": "752d4c8e703cdbac361f959716a8a752096280727f9f0c966854d479aa68750d"
|
||||
},
|
||||
"verify.py": {
|
||||
"bytes": 12815,
|
||||
"sha256": "5157b5cadf38e59bd59693fe1d14235d2007788bb6c8bd9cbac938cb048b14f4"
|
||||
},
|
||||
"README.md": {
|
||||
"bytes": 4177,
|
||||
"sha256": "9bfafd6506d1eb322e6efb8070a1599766d6d09532a678251a8b2414387edc6e"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,819 @@
|
||||
{
|
||||
"schema": 1,
|
||||
"fullSuiteInputsCommit": "e624d5b9c4f848eff3fba2ed83f9decf959e14d8",
|
||||
"reviewedFixCommit": "f714a25bbcd435941404104ad0cbb0fea3b89149",
|
||||
"runs": {
|
||||
"desktop-list-1": {
|
||||
"kind": "cargo",
|
||||
"inputs": "inputs/bbe8290d9cb11a7ee5dba250350451c5b7ec88069aa65f6be786a67922408c48.json",
|
||||
"archive": "inputs/86ac50e9cec8b39db91bbc98e5388e8c0f8466e6c217cf2f4eca5f1db087dde1.zip",
|
||||
"command": [
|
||||
"cargo",
|
||||
"test",
|
||||
"--locked",
|
||||
"--offline",
|
||||
"-p",
|
||||
"oa-desktop",
|
||||
"--bin",
|
||||
"arcadia-studio",
|
||||
"--message-format=json",
|
||||
"--",
|
||||
"--list"
|
||||
],
|
||||
"head": "e624d5b9c4f848eff3fba2ed83f9decf959e14d8",
|
||||
"exitCode": 0,
|
||||
"inputCount": 707,
|
||||
"testRows": [],
|
||||
"testTotals": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"core-2": {
|
||||
"kind": "cargo",
|
||||
"inputs": "inputs/bbe8290d9cb11a7ee5dba250350451c5b7ec88069aa65f6be786a67922408c48.json",
|
||||
"archive": "inputs/86ac50e9cec8b39db91bbc98e5388e8c0f8466e6c217cf2f4eca5f1db087dde1.zip",
|
||||
"command": [
|
||||
"cargo",
|
||||
"test",
|
||||
"--locked",
|
||||
"--offline",
|
||||
"-p",
|
||||
"oa-core",
|
||||
"--no-fail-fast",
|
||||
"--message-format=json",
|
||||
"--",
|
||||
"--nocapture"
|
||||
],
|
||||
"head": "cb941367d7748f7bfe7dda53641d395ad60a499f",
|
||||
"exitCode": 0,
|
||||
"inputCount": 707,
|
||||
"testRows": [
|
||||
[
|
||||
102,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
3,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
9,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
6,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
10,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
9,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
6,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
11,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
6,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
16,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
13,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
8,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
3,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
7,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
8,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
5,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
35,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
7,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
15,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
7,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
5,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
4,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
7,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
4,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
4,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
13,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
13,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
14,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
11,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
6,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
15,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
5,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
18,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
4,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
8,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
16,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
10,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
3,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
12,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
33,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
13,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
28,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
],
|
||||
"testTotals": [
|
||||
537,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"desktop-1": {
|
||||
"kind": "cargo",
|
||||
"inputs": "inputs/bbe8290d9cb11a7ee5dba250350451c5b7ec88069aa65f6be786a67922408c48.json",
|
||||
"archive": "inputs/86ac50e9cec8b39db91bbc98e5388e8c0f8466e6c217cf2f4eca5f1db087dde1.zip",
|
||||
"command": [
|
||||
"cargo",
|
||||
"test",
|
||||
"--locked",
|
||||
"--offline",
|
||||
"-p",
|
||||
"oa-desktop",
|
||||
"--bin",
|
||||
"arcadia-studio",
|
||||
"--no-fail-fast",
|
||||
"--message-format=json",
|
||||
"--",
|
||||
"--nocapture"
|
||||
],
|
||||
"head": "cb941367d7748f7bfe7dda53641d395ad60a499f",
|
||||
"exitCode": 0,
|
||||
"inputCount": 707,
|
||||
"testRows": [
|
||||
[
|
||||
1179,
|
||||
0,
|
||||
6,
|
||||
0,
|
||||
0
|
||||
]
|
||||
],
|
||||
"testTotals": [
|
||||
1179,
|
||||
0,
|
||||
6,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"clippy-1": {
|
||||
"kind": "cargo",
|
||||
"inputs": "inputs/bbe8290d9cb11a7ee5dba250350451c5b7ec88069aa65f6be786a67922408c48.json",
|
||||
"archive": "inputs/86ac50e9cec8b39db91bbc98e5388e8c0f8466e6c217cf2f4eca5f1db087dde1.zip",
|
||||
"command": [
|
||||
"cargo",
|
||||
"clippy",
|
||||
"--locked",
|
||||
"--offline",
|
||||
"--workspace",
|
||||
"--all-targets",
|
||||
"--message-format=json",
|
||||
"--",
|
||||
"-D",
|
||||
"warnings"
|
||||
],
|
||||
"head": "cb941367d7748f7bfe7dda53641d395ad60a499f",
|
||||
"exitCode": 101,
|
||||
"inputCount": 707,
|
||||
"testRows": [],
|
||||
"testTotals": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"clippy-2": {
|
||||
"kind": "cargo",
|
||||
"inputs": "inputs/6b2c2925c732b79150b1d3c2f9dc215f9221b89796bb1d8668d3ecc138095f82.json",
|
||||
"archive": "inputs/c5080fa78cb5cac2c6bdbf53f00d9d19313fa08de351153b9c5babd3a55b2f7d.zip",
|
||||
"command": [
|
||||
"cargo",
|
||||
"clippy",
|
||||
"--locked",
|
||||
"--offline",
|
||||
"--workspace",
|
||||
"--all-targets",
|
||||
"--message-format=json",
|
||||
"--",
|
||||
"-D",
|
||||
"warnings"
|
||||
],
|
||||
"head": "cb941367d7748f7bfe7dda53641d395ad60a499f",
|
||||
"exitCode": 101,
|
||||
"inputCount": 707,
|
||||
"testRows": [],
|
||||
"testTotals": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"clippy-3": {
|
||||
"kind": "cargo",
|
||||
"inputs": "inputs/a36e2cbc29eb7a9217774464cda9da8aa1d3c39caae9b9aacd6cdb28df5bad95.json",
|
||||
"archive": "inputs/9346fba1be9bf4dd2225fe9965fd76a30429f086fd6a101f92d0963d3822f71c.zip",
|
||||
"command": [
|
||||
"cargo",
|
||||
"clippy",
|
||||
"--locked",
|
||||
"--offline",
|
||||
"--workspace",
|
||||
"--all-targets",
|
||||
"--message-format=json",
|
||||
"--",
|
||||
"-D",
|
||||
"warnings"
|
||||
],
|
||||
"head": "cb941367d7748f7bfe7dda53641d395ad60a499f",
|
||||
"exitCode": 0,
|
||||
"inputCount": 707,
|
||||
"testRows": [],
|
||||
"testTotals": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"desktop-affected-2": {
|
||||
"kind": "cargo",
|
||||
"inputs": "inputs/a36e2cbc29eb7a9217774464cda9da8aa1d3c39caae9b9aacd6cdb28df5bad95.json",
|
||||
"archive": "inputs/9346fba1be9bf4dd2225fe9965fd76a30429f086fd6a101f92d0963d3822f71c.zip",
|
||||
"command": [
|
||||
"cargo",
|
||||
"test",
|
||||
"--locked",
|
||||
"--offline",
|
||||
"-p",
|
||||
"oa-desktop",
|
||||
"--bin",
|
||||
"arcadia-studio",
|
||||
"--message-format=json",
|
||||
"--",
|
||||
"source_symbols::tests",
|
||||
"text_workspace::",
|
||||
"views::tests",
|
||||
"palette_union",
|
||||
"--nocapture"
|
||||
],
|
||||
"head": "f714a25bbcd435941404104ad0cbb0fea3b89149",
|
||||
"exitCode": 0,
|
||||
"inputCount": 707,
|
||||
"testRows": [
|
||||
[
|
||||
83,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
1101
|
||||
]
|
||||
],
|
||||
"testTotals": [
|
||||
83,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
1101
|
||||
]
|
||||
},
|
||||
"windows-build-1": {
|
||||
"kind": "cargo",
|
||||
"inputs": "inputs/a36e2cbc29eb7a9217774464cda9da8aa1d3c39caae9b9aacd6cdb28df5bad95.json",
|
||||
"archive": "inputs/9346fba1be9bf4dd2225fe9965fd76a30429f086fd6a101f92d0963d3822f71c.zip",
|
||||
"command": [
|
||||
"cargo",
|
||||
"build",
|
||||
"--locked",
|
||||
"--offline",
|
||||
"--workspace",
|
||||
"--bins",
|
||||
"--message-format=json"
|
||||
],
|
||||
"head": "f714a25bbcd435941404104ad0cbb0fea3b89149",
|
||||
"exitCode": 0,
|
||||
"inputCount": 707,
|
||||
"testRows": [],
|
||||
"testTotals": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
}
|
||||
},
|
||||
"members": {
|
||||
"helpers/desktop-admission.json": {
|
||||
"bytes": 289720,
|
||||
"sha256": "af2d601032f1f98217d841d181255dda5e123f48078f8d09815b498ee8975eb9"
|
||||
},
|
||||
"helpers/final-input-commit-readback.json": {
|
||||
"bytes": 260,
|
||||
"sha256": "9670f7400e358c5033b09ae4388cf577fb3db3f288a51d7ffe7b47c87bc377c0"
|
||||
},
|
||||
"helpers/gate-union.py": {
|
||||
"bytes": 3495,
|
||||
"sha256": "9cca2646b1bcf09961a9ad1a276d633d8e4296ff2c6f2f356f028afaf789f503"
|
||||
},
|
||||
"helpers/required-desktop-tests.json": {
|
||||
"bytes": 125261,
|
||||
"sha256": "6672e3f7ccfb92b7710310836af6933a8e58ef113353505ec4fc0c3d6908c136"
|
||||
},
|
||||
"inputs/6b2c2925c732b79150b1d3c2f9dc215f9221b89796bb1d8668d3ecc138095f82.json": {
|
||||
"bytes": 118403,
|
||||
"sha256": "6b2c2925c732b79150b1d3c2f9dc215f9221b89796bb1d8668d3ecc138095f82"
|
||||
},
|
||||
"inputs/86ac50e9cec8b39db91bbc98e5388e8c0f8466e6c217cf2f4eca5f1db087dde1.zip": {
|
||||
"bytes": 2831327,
|
||||
"sha256": "86ac50e9cec8b39db91bbc98e5388e8c0f8466e6c217cf2f4eca5f1db087dde1"
|
||||
},
|
||||
"inputs/9346fba1be9bf4dd2225fe9965fd76a30429f086fd6a101f92d0963d3822f71c.zip": {
|
||||
"bytes": 2831326,
|
||||
"sha256": "9346fba1be9bf4dd2225fe9965fd76a30429f086fd6a101f92d0963d3822f71c"
|
||||
},
|
||||
"inputs/a36e2cbc29eb7a9217774464cda9da8aa1d3c39caae9b9aacd6cdb28df5bad95.json": {
|
||||
"bytes": 118403,
|
||||
"sha256": "a36e2cbc29eb7a9217774464cda9da8aa1d3c39caae9b9aacd6cdb28df5bad95"
|
||||
},
|
||||
"inputs/bbe8290d9cb11a7ee5dba250350451c5b7ec88069aa65f6be786a67922408c48.json": {
|
||||
"bytes": 118403,
|
||||
"sha256": "bbe8290d9cb11a7ee5dba250350451c5b7ec88069aa65f6be786a67922408c48"
|
||||
},
|
||||
"inputs/c5080fa78cb5cac2c6bdbf53f00d9d19313fa08de351153b9c5babd3a55b2f7d.zip": {
|
||||
"bytes": 2831320,
|
||||
"sha256": "c5080fa78cb5cac2c6bdbf53f00d9d19313fa08de351153b9c5babd3a55b2f7d"
|
||||
},
|
||||
"runs/clippy-1/process.json": {
|
||||
"bytes": 199,
|
||||
"sha256": "1af72ef6a92af65144a1faea8cae4f5c868799894bf539385b8f40912b0b50ae"
|
||||
},
|
||||
"runs/clippy-1/result.json": {
|
||||
"bytes": 1799,
|
||||
"sha256": "355929311a614bfd682e9dc47fa1afef98e14b22f76c856771564b9eb282af57"
|
||||
},
|
||||
"runs/clippy-1/started.json": {
|
||||
"bytes": 1400,
|
||||
"sha256": "4671c110e5e26a34e48470b0002322fc450b3844ee849f90ae6523091528ece1"
|
||||
},
|
||||
"runs/clippy-1/stderr.log": {
|
||||
"bytes": 1368,
|
||||
"sha256": "741e0cd2a2418cdb748703cf02cc72064e5b88b123a6fdacb5c6f87a2a6959c6"
|
||||
},
|
||||
"runs/clippy-1/stdout.log": {
|
||||
"bytes": 272957,
|
||||
"sha256": "37c21ea32cba74fbb54bc9e9f962fc7dfd5c018ac7f3750c2ae905e7cb51a542"
|
||||
},
|
||||
"runs/clippy-2/process.json": {
|
||||
"bytes": 199,
|
||||
"sha256": "6d11bf41b9461e19f6a06b64841ef1fa30c5129de4a4dad215866fc14c8f29d1"
|
||||
},
|
||||
"runs/clippy-2/result.json": {
|
||||
"bytes": 1797,
|
||||
"sha256": "0583fa653d2b2be928250b1845d2eec36886a5ea1dc12013ea853b68a79fe4be"
|
||||
},
|
||||
"runs/clippy-2/started.json": {
|
||||
"bytes": 1400,
|
||||
"sha256": "9d290135f4125ac119601b2704f1ac9b03ec5800a80624155ead21a35e7a4ec6"
|
||||
},
|
||||
"runs/clippy-2/stderr.log": {
|
||||
"bytes": 155,
|
||||
"sha256": "93a6965e0904eb30abe0657f4a9c30b5ba9e148c9d5274b3c3fb5e78d898c562"
|
||||
},
|
||||
"runs/clippy-2/stdout.log": {
|
||||
"bytes": 270250,
|
||||
"sha256": "bdc2338aab9fc18fb4e29fbb9e9192ccf9b67e1e9fb2cca828ec50acc90c1437"
|
||||
},
|
||||
"runs/clippy-3/process.json": {
|
||||
"bytes": 199,
|
||||
"sha256": "0d3a92e71ae9b33b703479a54fd1ca2491b67c1374b1a1e259816eebea9bb3b0"
|
||||
},
|
||||
"runs/clippy-3/result.json": {
|
||||
"bytes": 1796,
|
||||
"sha256": "cf49e16fa5cbecacf24edbf054036b1190a02771c61f1178c12c6f3d7d9477b0"
|
||||
},
|
||||
"runs/clippy-3/started.json": {
|
||||
"bytes": 1400,
|
||||
"sha256": "5499895565380e2efb1ccf6a9acc825318dfe09135815adf9512bf50530524a5"
|
||||
},
|
||||
"runs/clippy-3/stderr.log": {
|
||||
"bytes": 325,
|
||||
"sha256": "d2811192fb769c1a0f2e4258dd31c76f6a475e43bc6214e49db7c0757e7dad00"
|
||||
},
|
||||
"runs/clippy-3/stdout.log": {
|
||||
"bytes": 307989,
|
||||
"sha256": "319cad11af00c742a1436734b5daee273a112859c7775b06fada1948d54e93d6"
|
||||
},
|
||||
"runs/core-2/process.json": {
|
||||
"bytes": 197,
|
||||
"sha256": "50d3c62701417b7cf49de72139a71d5b26ede0ebec36eac6ecc254cf45f1594a"
|
||||
},
|
||||
"runs/core-2/result.json": {
|
||||
"bytes": 67027,
|
||||
"sha256": "2eb69042c0c6eecb89b11e739b9598005b8a26479564d299275817310011b5bb"
|
||||
},
|
||||
"runs/core-2/started.json": {
|
||||
"bytes": 1398,
|
||||
"sha256": "eadc9d64a5fedc1bea614c2ccae4d19616e2f7b0538bc5e08e84e9ee92f532e0"
|
||||
},
|
||||
"runs/core-2/stderr.log": {
|
||||
"bytes": 8930,
|
||||
"sha256": "0d5a5d2a4e64bd38c89fffafd8089de7b74a52f1dbbccb8cc59dae640bebba3b"
|
||||
},
|
||||
"runs/core-2/stdout.log": {
|
||||
"bytes": 131042,
|
||||
"sha256": "4185a25e52e52f3c6ee1dcd942a45e1a3ef57b3961ec7e7c4ca0aacc86967cfc"
|
||||
},
|
||||
"runs/desktop-1/process.json": {
|
||||
"bytes": 227,
|
||||
"sha256": "38ff4960fbcdf8282c8fc323a337b25f19b1ab424d7ed590917e6765f8a643c1"
|
||||
},
|
||||
"runs/desktop-1/result.json": {
|
||||
"bytes": 3154,
|
||||
"sha256": "f254ec40b83763f1398ab96fff16d96c9a0ff8a3113c2d16556c973eb5eaf93e"
|
||||
},
|
||||
"runs/desktop-1/started.json": {
|
||||
"bytes": 1438,
|
||||
"sha256": "ba43fbd949da1d6e453217c2f534d661b81dbe4b42fc1fe198c811234dc48aaf"
|
||||
},
|
||||
"runs/desktop-1/stderr.log": {
|
||||
"bytes": 552,
|
||||
"sha256": "c975782e7df7ce13b9f298d164fd4cc8e8161b6da7fd77c4607920fd8b3bf900"
|
||||
},
|
||||
"runs/desktop-1/stdout.log": {
|
||||
"bytes": 430091,
|
||||
"sha256": "1bfcc88362ef725cb3e4b9af7967d4bd18e65db3eccd342fe3264ea6ef95ec19"
|
||||
},
|
||||
"runs/desktop-affected-2/process.json": {
|
||||
"bytes": 287,
|
||||
"sha256": "b72fb9ac1c7400ef7af2ed80f26a1e13fc718342779c868e4cbad4a5152b131f"
|
||||
},
|
||||
"runs/desktop-affected-2/result.json": {
|
||||
"bytes": 3228,
|
||||
"sha256": "cfb3f9563f35977efe26d69d6a12040278f725bf09fb30ec812a984cab72dc02"
|
||||
},
|
||||
"runs/desktop-affected-2/started.json": {
|
||||
"bytes": 1513,
|
||||
"sha256": "cca30f43f1d79c10a996422f9a506a08fc91eba7fc15a02615105f7fed89a20a"
|
||||
},
|
||||
"runs/desktop-affected-2/stderr.log": {
|
||||
"bytes": 281,
|
||||
"sha256": "90504f37b7256fd61af78a6c636560b3646ec9bdb2bc954c6e5bc77f69f21306"
|
||||
},
|
||||
"runs/desktop-affected-2/stdout.log": {
|
||||
"bytes": 304036,
|
||||
"sha256": "adf50044a9f6947e7384dbd0193fe069276c2e78da1d6c45a55150d2b1defa26"
|
||||
},
|
||||
"runs/desktop-list-1/process.json": {
|
||||
"bytes": 204,
|
||||
"sha256": "139e8f5d11f45dd2b6d2151e0b0628d892f3ad228134032ab8c9bfb1989059db"
|
||||
},
|
||||
"runs/desktop-list-1/result.json": {
|
||||
"bytes": 3128,
|
||||
"sha256": "24eacbb644a6b82be7439e4f8895562356eb63485e82c30292b2951cb090d29d"
|
||||
},
|
||||
"runs/desktop-list-1/started.json": {
|
||||
"bytes": 1410,
|
||||
"sha256": "33adc56c5fad5bd53dd425f5c6ccf8faf550bd382867b848d04ebaafcb3d5c66"
|
||||
},
|
||||
"runs/desktop-list-1/stderr.log": {
|
||||
"bytes": 1427,
|
||||
"sha256": "97885faf304979ca43898f88d3ca7118100fd1c2358f9d4729984f7369788704"
|
||||
},
|
||||
"runs/desktop-list-1/stdout.log": {
|
||||
"bytes": 421428,
|
||||
"sha256": "32f0025d9205288e92c4031dc1b53298b8e79f1ccb8ce990a40d7c3d66f4305f"
|
||||
},
|
||||
"runs/windows-build-1/process.json": {
|
||||
"bytes": 167,
|
||||
"sha256": "b400c1f8076bcddb583424fe34d155655a41d25b5ccf0db8af26bda6b9b2685e"
|
||||
},
|
||||
"runs/windows-build-1/result.json": {
|
||||
"bytes": 5532,
|
||||
"sha256": "5e9e227c66a4b71ade734b8ebeb12070b8a5c64a9a6cf9d8d0b6d70379d4ffc2"
|
||||
},
|
||||
"runs/windows-build-1/started.json": {
|
||||
"bytes": 1353,
|
||||
"sha256": "15c54be09a881e6860735395569b22a7a9114789a1f8276cf79bc6fb095c8163"
|
||||
},
|
||||
"runs/windows-build-1/stderr.log": {
|
||||
"bytes": 261,
|
||||
"sha256": "480dff999944c756fff581db0f3fac088717e0d73cae20af9a28829446df746f"
|
||||
},
|
||||
"runs/windows-build-1/stdout.log": {
|
||||
"bytes": 295092,
|
||||
"sha256": "5a824ca91877328acd332585b39194b27fd2cb167279b99c4c78a89bf13bd19b"
|
||||
}
|
||||
},
|
||||
"fullSuiteToFinalInputChanges": {
|
||||
"crates/oa-desktop/src/app/source_symbols.rs": {
|
||||
"before": {
|
||||
"bytes": 26476,
|
||||
"sha256": "230b2d19b0aeb767a311bdc0eddfd69986ebc5f65b8892382cd033a69f86cb2d"
|
||||
},
|
||||
"after": {
|
||||
"bytes": 26369,
|
||||
"sha256": "9dbcb70a7eaa0b2f7ec011da1fcc808ba1e53ec1c29a3c9a09cf7517e058c7b7"
|
||||
}
|
||||
},
|
||||
"crates/oa-desktop/src/app/source_symbols/tests.rs": {
|
||||
"before": {
|
||||
"bytes": 85389,
|
||||
"sha256": "0e3ae6861ded52e7d137736f4ffe6bf55a00291bf685d3bbe6141174210eee9c"
|
||||
},
|
||||
"after": {
|
||||
"bytes": 85506,
|
||||
"sha256": "aebd05f3fa9f1e9c2e744948d4478d9f267365d063f01f8b8f4e67560bc23f32"
|
||||
}
|
||||
},
|
||||
"crates/oa-desktop/src/source_navigation/controller.rs": {
|
||||
"before": {
|
||||
"bytes": 3691,
|
||||
"sha256": "2042d608a4e9698c614c0d308d02896983480087908ecc353369b424eca3d124"
|
||||
},
|
||||
"after": {
|
||||
"bytes": 3680,
|
||||
"sha256": "938b8264c2d5166bd979439723d6fbec34c4cc5ed7f872f58c2cb9ba06a4a93d"
|
||||
}
|
||||
},
|
||||
"crates/oa-desktop/src/views.rs": {
|
||||
"before": {
|
||||
"bytes": 58364,
|
||||
"sha256": "46bb9410567d47e3043723fc3b8c7342c04e85b1b4a4c06a84e8497757cc04dc"
|
||||
},
|
||||
"after": {
|
||||
"bytes": 58364,
|
||||
"sha256": "e74da124914a54a3b757eb4728a5093157f172cd7f5e90b7744e526e3ec3f8d2"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
"""Read-only, Python-standard-library verification. Never executes archived code."""
|
||||
from pathlib import Path, PurePosixPath
|
||||
from datetime import datetime
|
||||
import hashlib
|
||||
import io
|
||||
import json
|
||||
import re
|
||||
import zipfile
|
||||
|
||||
ROOT = Path(__file__).resolve().parent
|
||||
|
||||
def require(ok, message):
|
||||
if not ok:
|
||||
raise ValueError(message)
|
||||
|
||||
def digest(data):
|
||||
return {'bytes': len(data), 'sha256': hashlib.sha256(data).hexdigest()}
|
||||
|
||||
def members(z, expected):
|
||||
names = z.namelist()
|
||||
require(len(names) == len(set(names)), 'duplicate ZIP members')
|
||||
require(set(names) == set(expected), 'archive membership mismatch')
|
||||
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 member')
|
||||
|
||||
def main():
|
||||
inventory = json.loads((ROOT / 'files.json').read_text())
|
||||
for name, expected in inventory.items():
|
||||
require(digest((ROOT / name).read_bytes()) == expected, 'external file hash: ' + name)
|
||||
manifest = json.loads((ROOT / 'manifest.json').read_text())
|
||||
with zipfile.ZipFile(ROOT / 'evidence.zip') as z:
|
||||
members(z, manifest['members'])
|
||||
for name, expected in manifest['members'].items():
|
||||
require(digest(z.read(name)) == expected, 'member hash: ' + name)
|
||||
def raw(name): return z.read(name)
|
||||
def obj(name): return json.loads(raw(name))
|
||||
checked = set()
|
||||
for run, spec in manifest['runs'].items():
|
||||
if spec['kind'] != 'cargo':
|
||||
continue
|
||||
prefix = 'runs/' + run + '/'
|
||||
start, result, process = (obj(prefix + n + '.json') for n in ('started', 'result', 'process'))
|
||||
require(all(result[k] == v for k, v in start.items()), run + ': start/result relationship')
|
||||
require(result['command'] == spec['command'] == process['command'], run + ': command')
|
||||
require(result['head'] == spec['head'], run + ': HEAD')
|
||||
require(result['exitCode'] == spec['exitCode'] and result['inputsUnchanged'] is True, run + ': outcome')
|
||||
require(datetime.fromisoformat(result['finish']) >= datetime.fromisoformat(start['start']), run + ': times')
|
||||
require(result['seconds'] >= 0, run + ': duration')
|
||||
require(result['helper'] == digest(raw('helpers/gate-union.py')), run + ': helper')
|
||||
for field, file in [('inputs', spec['inputs']), ('archive', spec['archive']), ('stdout', prefix+'stdout.log'), ('stderr', prefix+'stderr.log')]:
|
||||
require(result[field] == digest(raw(file)), run + ': receipt ' + field)
|
||||
inputs = obj(spec['inputs'])
|
||||
require(len(inputs) == result['inputCount'] == spec['inputCount'] == 707, run + ': input count')
|
||||
require(sum(p.startswith('crates/vendor/iced_widget/') for p in inputs) == 71, run + ': vendor count')
|
||||
pair = (spec['inputs'], spec['archive'])
|
||||
if pair not in checked:
|
||||
with zipfile.ZipFile(io.BytesIO(raw(spec['archive']))) as source:
|
||||
members(source, inputs)
|
||||
for name, expected in inputs.items():
|
||||
require(digest(source.read(name)) == expected, run + ': source hash ' + name)
|
||||
checked.add(pair)
|
||||
stdout = raw(prefix+'stdout.log').decode('utf-8', errors='replace')
|
||||
rows = [[int(x) for x in row] for row in re.findall(r'test result: (?:ok|FAILED)\. (\d+) passed; (\d+) failed; (\d+) ignored; (\d+) measured; (\d+) filtered out;', stdout)]
|
||||
require(rows == spec['testRows'], run + ': exact test summaries')
|
||||
require([sum(row[i] for row in rows) for i in range(5)] == spec['testTotals'], run + ': test totals')
|
||||
artifacts = []
|
||||
for line in stdout.splitlines():
|
||||
try: item = json.loads(line)
|
||||
except json.JSONDecodeError: continue
|
||||
if isinstance(item, dict) and item.get('reason') == 'compiler-artifact' and item.get('executable'):
|
||||
artifacts.append(item)
|
||||
require(artifacts == [a['cargo'] for a in result['artifacts']], run + ': artifact receipt relationship')
|
||||
print(run, 'exit', result['exitCode'], 'test totals', spec['testTotals'])
|
||||
admission(z, manifest)
|
||||
print('PASS:', len(manifest['runs']), 'closed captures;', len(manifest['members']), 'members;', len(checked), 'input manifest/archive pairs')
|
||||
print('Integrity and recorded outcomes only; no rerun, binary verification, or native GUI claim.')
|
||||
|
||||
def admission(z, manifest):
|
||||
def obj(p): return json.loads(z.read(p))
|
||||
report = obj('helpers/desktop-admission.json')
|
||||
checklist = obj('helpers/required-desktop-tests.json')
|
||||
require(report['status'] == 'PASS', 'admission status')
|
||||
require({k:report['checklist'][k] for k in ('bytes','sha256')} == digest(z.read('helpers/required-desktop-tests.json')), 'checklist receipt')
|
||||
require(report['checklist']['sourceCommit'] == checklist['sourceCommit'], 'checklist source pin')
|
||||
for run, receipt in report['runs'].items():
|
||||
result = obj('runs/'+run+'/result.json')
|
||||
for field in ('head','command','exitCode','inputsUnchanged','inputCount'):
|
||||
require(receipt[field] == result[field], 'admission run relationship '+field)
|
||||
require(receipt['inputManifest'] == result['inputs'] and receipt['stdout'] == result['stdout'], 'admission inputs/log')
|
||||
require(receipt['resultReceipt'] == digest(z.read('runs/'+run+'/result.json')), 'admission result hash')
|
||||
listing = z.read('runs/desktop-list-1/stdout.log').decode('utf-8')
|
||||
execution = z.read('runs/desktop-1/stdout.log').decode('utf-8')
|
||||
names = re.findall(r'^([A-Za-z0-9_:]+): test$', listing, re.M)
|
||||
outcomes = re.findall(r'^test ([A-Za-z0-9_:]+) \.\.\. (ok|FAILED|ignored)(?:, (.*))?$', execution, re.M)
|
||||
require(len(names) == len(set(names)) == 1185, 'listing names/count/uniqueness')
|
||||
require(len(outcomes) == len({r[0] for r in outcomes}) == 1185, 'execution names/count/uniqueness')
|
||||
require(set(names) == {r[0] for r in outcomes}, 'listing/execution set equality')
|
||||
actual = {n:(status, reason or None) for n,status,reason in outcomes}
|
||||
require(actual == {r['name']:(r['status'],r['reason']) for r in report['allActualNamesAndOutcomes']}, 'admission raw outcomes')
|
||||
require(len(report['allActualNamesAndOutcomes']) == len(actual), 'admission duplicate outcomes')
|
||||
required = []
|
||||
for spec in checklist['required']:
|
||||
matches = [n for n in names if n.endswith(spec['match']['suffix'])]
|
||||
require(len(matches) == spec['match']['expectedOccurrences'] == 1, 'required unique match '+spec['name'])
|
||||
n = matches[0]
|
||||
require(actual[n][0] == ('ignored' if spec['expectedIgnored'] else 'ok'), 'required outcome '+n)
|
||||
required.append({'sourcePath':spec['sourcePath'],'expectedBasename':spec['name'],'actualName':n,'expectedIgnored':spec['expectedIgnored'],'status':actual[n][0],'reason':actual[n][1]})
|
||||
require(required == report['requiredOutcomes'], 'required admission relationships')
|
||||
removed=[]
|
||||
for spec in checklist['removedOrReplaced']:
|
||||
require(not any(n.endswith('::'+spec['name']) for n in names), 'removed test present')
|
||||
replacements=[n for replacement in spec.get('replacementNames',[]) for n in names if n.endswith('::'+replacement)]
|
||||
removed.append({'name':spec['name'],'absent':True,'replacementActualNames':replacements})
|
||||
require(removed == report['removedOrReplaced'], 'removed admission relationship')
|
||||
retained=[]
|
||||
for spec in checklist['duplicateDeparture']:
|
||||
require(actual[spec['requiredFullName']][0] == 'ok' and spec['removedFullName'] not in names, 'retained duplicate admission')
|
||||
require(sum(n.endswith('::'+spec['name']) for n in names) == spec['expectedTotalOccurrences'] == 1, 'retained duplicate count')
|
||||
retained.append({'name':spec['name'],'retainedName':spec['requiredFullName'],'retainedStatus':'ok','removedParentNameAbsent':True})
|
||||
require(retained == report['retainedDepartureCases'], 'retained admission relationship')
|
||||
before = obj(manifest['runs']['desktop-1']['inputs'])
|
||||
require(before == obj(manifest['runs']['desktop-list-1']['inputs']), 'listing/execution source equality')
|
||||
require(before == obj(manifest['runs']['core-2']['inputs']), 'core/desktop full-suite source equality')
|
||||
with zipfile.ZipFile(io.BytesIO(z.read(manifest['runs']['desktop-1']['archive']))) as source:
|
||||
bindings=[]
|
||||
for spec in checklist['sourceBindings']:
|
||||
b=source.read(spec['path'])
|
||||
blob=hashlib.sha1(b'blob '+str(len(b)).encode()+b'\0'+b).hexdigest()
|
||||
require(blob == spec['gitBlob'], 'original checklist source blob '+spec['path'])
|
||||
bindings.append({**spec,'capturedAndCurrentDigest':digest(b),'matchesOriginalChecklistBlob':True})
|
||||
require(bindings == report['sourceBindings'], 'source binding admission')
|
||||
summary={'listed':len(names),'executed':len(actual),'exactNameSetEquality':True,'duplicateListedNames':0,'duplicateExecutedNames':0,
|
||||
'passed':sum(v[0]=='ok' for v in actual.values()),'failed':sum(v[0]=='FAILED' for v in actual.values()),'ignored':sum(v[0]=='ignored' for v in actual.values()),
|
||||
'required':len(required),'requiredPassed':sum(r['status']=='ok' for r in required),'requiredIgnored':sum(r['status']=='ignored' for r in required),
|
||||
'removedNamesAbsent':len(checklist['removedOrReplaced']),'retainedDuplicateCasesPassExactlyOnce':len(checklist['duplicateDeparture']),
|
||||
'originalChecklistSourceFilesVerified':len(checklist['sourceBindings']),'listingAndExecutionInputManifestsEqual':True}
|
||||
require(summary == report['summary'], 'admission summary')
|
||||
after = obj(manifest['runs']['clippy-3']['inputs'])
|
||||
changed={p:{'before':before.get(p),'after':after.get(p)} for p in sorted(set(before)|set(after)) if before.get(p)!=after.get(p)}
|
||||
require(changed == manifest['fullSuiteToFinalInputChanges'] and len(changed)==4, 'four-file source delta')
|
||||
require(set(changed) == {'crates/oa-desktop/src/source_navigation/controller.rs','crates/oa-desktop/src/app/source_symbols.rs','crates/oa-desktop/src/app/source_symbols/tests.rs','crates/oa-desktop/src/views.rs'}, 'reviewed four-file scope')
|
||||
readback=obj('helpers/final-input-commit-readback.json')
|
||||
require(readback['status']=='PASS' and readback['commit']==manifest['reviewedFixCommit'], 'secondary readback summary')
|
||||
require(readback['inputCount']==len(after) and readback['inputManifestSha256']==digest(z.read(manifest['runs']['clippy-3']['inputs']))['sha256'], 'secondary readback input relationship')
|
||||
for run in ('desktop-affected-2','windows-build-1'):
|
||||
if run in manifest['runs']:
|
||||
require(obj(manifest['runs'][run]['inputs']) == after, run+': final source equality')
|
||||
if 'windows-build-1' in manifest['runs']:
|
||||
result=obj('runs/windows-build-1/result.json')
|
||||
require(result['exitCode']==0 and len(result['artifacts'])==3, 'final build outcome/artifacts')
|
||||
require({a['cargo']['target']['name'] for a in result['artifacts']}=={'arcadia','arcadia-server','arcadia-studio'}, 'final build target membership')
|
||||
if 'desktop-affected-2' in manifest['runs']:
|
||||
spec=manifest['runs']['desktop-affected-2']
|
||||
args=spec['command'][spec['command'].index('--')+1:]
|
||||
filters=[arg for arg in args if not arg.startswith('--')]
|
||||
require(filters==['source_symbols::tests','text_workspace::','views::tests','palette_union'], 'affected OR filters')
|
||||
selected={n for n in names if any(f in n for f in filters)}
|
||||
log=z.read('runs/desktop-affected-2/stdout.log').decode('utf-8')
|
||||
affected=re.findall(r'^test ([A-Za-z0-9_:]+) \.\.\. (ok|FAILED|ignored)(?:, (.*))?$',log,re.M)
|
||||
require(len(affected)==len({r[0] for r in affected})==len(selected)==84, 'affected count/unique names')
|
||||
require({n for n,s,r in affected}==selected, 'affected exact OR-filter selection from prior listing')
|
||||
require(sum(s=='ok' for n,s,r in affected)==83 and sum(s=='FAILED' for n,s,r in affected)==0, 'affected enabled passes')
|
||||
require([n for n,s,r in affected if s=='ignored']==['app::source_symbols::tests::source_symbols_100_modules_1000_definitions_10000_uses'], 'affected known ignored probe')
|
||||
require(spec['testTotals']==[83,0,1,0,len(names)-len(selected)], 'affected summary and filtered count')
|
||||
print('Affected recheck: exact prior-list OR selection; 83 passed, 1 known ignored, 1101 filtered')
|
||||
print('Desktop admission:', summary['passed'], 'passed,', summary['ignored'], 'ignored;',len(required),'required; four final changed input files')
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -0,0 +1,52 @@
|
||||
# Ordinary-text union: closed-run checkpoint
|
||||
|
||||
Run `python verify.py` with Python 3.10 or newer in this directory. The verifier
|
||||
uses only the standard library and these five files. It reads archives in memory,
|
||||
does not extract or execute source/binaries, and does not consult Git, Cargo,
|
||||
network services, or paths recorded from the original machine.
|
||||
|
||||
`files.json` hashes the ZIP, manifest, verifier and this README. `manifest.json`
|
||||
lists every ZIP member and maps each run to its exact input manifest and ZIP.
|
||||
Only byte-identical input files are deduplicated; ZIPs with different timestamps
|
||||
remain separate even when their source inventories match. Receipts and raw logs
|
||||
are retained verbatim, including failures and original local path strings.
|
||||
|
||||
The production composition is d7c065991d3f63cc41341d23a546739de8837ac3.
|
||||
The checkpoint is e624d5b9c4f848eff3fba2ed83f9decf959e14d8, including generated
|
||||
teaching fixtures and normative language documentation. Individual receipt HEADs
|
||||
and input inventories are authoritative for each run; a HEAD alone does not
|
||||
describe dirty fixture/document changes during capture.
|
||||
|
||||
| Closed capture | Recorded outcome |
|
||||
| --- | --- |
|
||||
| core-consumers-1 | Offline dependency resolution failed: num-bigint missing |
|
||||
| windows-dependencies-1 | Dependency preparation completed |
|
||||
| core-1 | 536 passed, 1 failed, 1 ignored; stale generated teaching fixture failure preserved |
|
||||
| teaching-generate-1 | Teaching generator completed; raw generated-release1 outputs included |
|
||||
| teaching-check-2 | 4 passed after fixture regeneration |
|
||||
| language-doc-1 | Warning log from failed strict render preserved |
|
||||
| language-doc-2 | Strict docutils 0.23 render succeeded; empty warning log |
|
||||
| consumers-1 | 63 passed |
|
||||
|
||||
The verifier checks exact archive membership, hashes and lengths, nested input
|
||||
archive membership/content, input counts (including 71 vendored iced_widget
|
||||
files), start/result/process command relationships, unchanged-input assertions,
|
||||
helper hashes, exit codes, exact test summary rows and aggregate counts,
|
||||
compiler-artifact receipt relationships, composition patch hash, generated output
|
||||
inventory, and successful document source/output/warning receipts.
|
||||
|
||||
Limitations: integrity and internal consistency are not independent reproduction
|
||||
or authenticated provenance. Test expectations in the manifest are frozen from
|
||||
the raw capture. No runtime binaries, dependency cache, credentials or user
|
||||
profile are packaged. Recorded artifact readback hashes cannot be independently
|
||||
checked without the excluded binaries. Input archives contain project sources,
|
||||
not a hermetic toolchain or complete dependency distribution. The gate helper is
|
||||
receipt-pinned; the included render helper is its current successful-render
|
||||
version, with no historical helper hash receipt. language-doc-1 contains only
|
||||
warnings.log: its original helper, exact failed input and process/exit receipt
|
||||
were not captured. The successful render inputs and outputs are hash-pinned by
|
||||
its result receipt. Generated outputs are archived as observed, without a
|
||||
separate generation-output hash receipt. This package does not claim a full
|
||||
core rerun after regeneration, complete desktop/GUI validation, lint success,
|
||||
release packaging, or publication. Active desktop-list-1 and any later runs are
|
||||
excluded from this initial checkpoint.
|
||||
Binary file not shown.
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"evidence.zip": {
|
||||
"bytes": 8584848,
|
||||
"sha256": "f220433f8f6fe99cea762aca98ee471c14411b5f6762745cf91432e6bfaca440"
|
||||
},
|
||||
"manifest.json": {
|
||||
"bytes": 24274,
|
||||
"sha256": "ad731f45fda8eb8678160315de00a4c77037d49ee40f0774496e7a2a970342aa"
|
||||
},
|
||||
"README.md": {
|
||||
"bytes": 3328,
|
||||
"sha256": "98c900e5c83e13da6c6edc11521df8edb87f4e1ebebb004fd1d6cc8acc91683b"
|
||||
},
|
||||
"verify.py": {
|
||||
"bytes": 5526,
|
||||
"sha256": "65136bbf0074c63a1478a56e0a66523d785081c368a50cd698d1231f6b0618ba"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,901 @@
|
||||
{
|
||||
"schema": 1,
|
||||
"productionCommit": "d7c065991d3f63cc41341d23a546739de8837ac3",
|
||||
"checkpointCommit": "e624d5b9c4f848eff3fba2ed83f9decf959e14d8",
|
||||
"runs": {
|
||||
"core-consumers-1": {
|
||||
"kind": "cargo",
|
||||
"inputs": "inputs/e3d2d504b18bb1f7c4c3fa1f26abff425b957f18b418d8556888151723ba67b4.json",
|
||||
"archive": "inputs/12ce1ca9c1185d7a91a1dea322cdc0c7fc4372db5d879386595acdbfd412d880.zip",
|
||||
"command": [
|
||||
"cargo",
|
||||
"test",
|
||||
"--locked",
|
||||
"--offline",
|
||||
"-p",
|
||||
"oa-core",
|
||||
"-p",
|
||||
"oa-server",
|
||||
"--test",
|
||||
"http",
|
||||
"-p",
|
||||
"oa-cli",
|
||||
"--test",
|
||||
"source_cli",
|
||||
"--no-fail-fast",
|
||||
"--message-format=json",
|
||||
"--",
|
||||
"--nocapture"
|
||||
],
|
||||
"head": "d7c065991d3f63cc41341d23a546739de8837ac3",
|
||||
"exitCode": 101,
|
||||
"inputCount": 707,
|
||||
"testRows": [],
|
||||
"testTotals": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"windows-dependencies-1": {
|
||||
"kind": "cargo",
|
||||
"inputs": "inputs/e3d2d504b18bb1f7c4c3fa1f26abff425b957f18b418d8556888151723ba67b4.json",
|
||||
"archive": "inputs/12ce1ca9c1185d7a91a1dea322cdc0c7fc4372db5d879386595acdbfd412d880.zip",
|
||||
"command": [
|
||||
"cargo",
|
||||
"fetch",
|
||||
"--locked",
|
||||
"--target",
|
||||
"x86_64-pc-windows-gnullvm"
|
||||
],
|
||||
"head": "d7c065991d3f63cc41341d23a546739de8837ac3",
|
||||
"exitCode": 0,
|
||||
"inputCount": 707,
|
||||
"testRows": [],
|
||||
"testTotals": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"core-1": {
|
||||
"kind": "cargo",
|
||||
"inputs": "inputs/e3d2d504b18bb1f7c4c3fa1f26abff425b957f18b418d8556888151723ba67b4.json",
|
||||
"archive": "inputs/12ce1ca9c1185d7a91a1dea322cdc0c7fc4372db5d879386595acdbfd412d880.zip",
|
||||
"command": [
|
||||
"cargo",
|
||||
"test",
|
||||
"--locked",
|
||||
"--offline",
|
||||
"-p",
|
||||
"oa-core",
|
||||
"--no-fail-fast",
|
||||
"--message-format=json",
|
||||
"--",
|
||||
"--nocapture"
|
||||
],
|
||||
"head": "d7c065991d3f63cc41341d23a546739de8837ac3",
|
||||
"exitCode": 101,
|
||||
"inputCount": 707,
|
||||
"testRows": [
|
||||
[
|
||||
102,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
3,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
9,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
6,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
10,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
9,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
6,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
11,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
6,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
16,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
13,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
8,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
3,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
7,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
8,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
5,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
35,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
7,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
15,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
7,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
5,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
3,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
7,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
4,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
4,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
13,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
13,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
14,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
11,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
6,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
15,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
5,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
18,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
4,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
8,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
16,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
10,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
3,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
12,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
33,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
13,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
28,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
],
|
||||
"testTotals": [
|
||||
536,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"teaching-generate-1": {
|
||||
"kind": "cargo",
|
||||
"inputs": "inputs/e3d2d504b18bb1f7c4c3fa1f26abff425b957f18b418d8556888151723ba67b4.json",
|
||||
"archive": "inputs/12ce1ca9c1185d7a91a1dea322cdc0c7fc4372db5d879386595acdbfd412d880.zip",
|
||||
"command": [
|
||||
"cargo",
|
||||
"run",
|
||||
"--locked",
|
||||
"--offline",
|
||||
"-p",
|
||||
"oa-core",
|
||||
"--example",
|
||||
"generate_release1",
|
||||
"--message-format=json",
|
||||
"--",
|
||||
".local/ordinary-text-integration/generated-release1"
|
||||
],
|
||||
"head": "d7c065991d3f63cc41341d23a546739de8837ac3",
|
||||
"exitCode": 0,
|
||||
"inputCount": 707,
|
||||
"testRows": [],
|
||||
"testTotals": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"teaching-check-2": {
|
||||
"kind": "cargo",
|
||||
"inputs": "inputs/0fa1da63d71c984cd99b079de661e88154b5a31818b384f557deefd40b8ead3a.json",
|
||||
"archive": "inputs/81bd006f10034bc0c203187af179548a549fda6e58bc7cde0702cc26994fd28d.zip",
|
||||
"command": [
|
||||
"cargo",
|
||||
"test",
|
||||
"--locked",
|
||||
"--offline",
|
||||
"-p",
|
||||
"oa-core",
|
||||
"--test",
|
||||
"release1_teaching",
|
||||
"--message-format=json",
|
||||
"--",
|
||||
"--nocapture"
|
||||
],
|
||||
"head": "d7c065991d3f63cc41341d23a546739de8837ac3",
|
||||
"exitCode": 0,
|
||||
"inputCount": 707,
|
||||
"testRows": [
|
||||
[
|
||||
4,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
],
|
||||
"testTotals": [
|
||||
4,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"language-doc-1": {
|
||||
"kind": "render"
|
||||
},
|
||||
"language-doc-2": {
|
||||
"kind": "render"
|
||||
},
|
||||
"consumers-1": {
|
||||
"kind": "cargo",
|
||||
"inputs": "inputs/bbe8290d9cb11a7ee5dba250350451c5b7ec88069aa65f6be786a67922408c48.json",
|
||||
"archive": "inputs/86ac50e9cec8b39db91bbc98e5388e8c0f8466e6c217cf2f4eca5f1db087dde1.zip",
|
||||
"command": [
|
||||
"cargo",
|
||||
"test",
|
||||
"--locked",
|
||||
"--offline",
|
||||
"-p",
|
||||
"oa-server",
|
||||
"--test",
|
||||
"http",
|
||||
"-p",
|
||||
"oa-cli",
|
||||
"--test",
|
||||
"source_cli",
|
||||
"--no-fail-fast",
|
||||
"--message-format=json",
|
||||
"--",
|
||||
"--nocapture"
|
||||
],
|
||||
"head": "d7c065991d3f63cc41341d23a546739de8837ac3",
|
||||
"exitCode": 0,
|
||||
"inputCount": 707,
|
||||
"testRows": [
|
||||
[
|
||||
12,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
51,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
],
|
||||
"testTotals": [
|
||||
63,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
}
|
||||
},
|
||||
"members": {
|
||||
"generated-release1/expected-diagnostics.json": {
|
||||
"bytes": 288,
|
||||
"sha256": "3700393d76b940cfc076bf52861bd7b1f43370f8eabce3594531bd0bf1fc851e"
|
||||
},
|
||||
"generated-release1/model.json": {
|
||||
"bytes": 134520,
|
||||
"sha256": "ef0ef4006c3e09d5db6e1b621256b3f7d6642f3a7b09cc34607cfbcca830c727"
|
||||
},
|
||||
"generated-release1/oa/activities/activity_oa_restore_work.arcadia": {
|
||||
"bytes": 1130,
|
||||
"sha256": "21cbd7176af8fad68453306f2371ff03e127a994b8796cdf044567332de9686f"
|
||||
},
|
||||
"generated-release1/oa/behavior/process_oa_assessment_procedure.arcadia": {
|
||||
"bytes": 550,
|
||||
"sha256": "23cabc213c264a16c8595414db6acb09248c1cef9cd699f1b0316e5bb82c062a"
|
||||
},
|
||||
"generated-release1/oa/behavior/process_oa_field_procedure.arcadia": {
|
||||
"bytes": 1178,
|
||||
"sha256": "9c52086759b7344b4809ceb8d372f65647b16fc24153a03b887faa378c37fe96"
|
||||
},
|
||||
"generated-release1/oa/behavior/process_oa_response.arcadia": {
|
||||
"bytes": 2560,
|
||||
"sha256": "675798bd19e6b40d03e7076b0e59b110cdaaab7b6d16c47c3ac80fa960072e84"
|
||||
},
|
||||
"generated-release1/oa/behavior/scenario_oa_conversation.arcadia": {
|
||||
"bytes": 1515,
|
||||
"sha256": "e217e5394a0771dc16206ed9437a231da27905d2f19be64b3f48281c0a32fb6b"
|
||||
},
|
||||
"generated-release1/oa/behavior/scenario_oa_full_scenario.arcadia": {
|
||||
"bytes": 1121,
|
||||
"sha256": "c5a285f2d7c61bd2a136107f267fbf9cddb1cba3f63ff36a6f53f7ab98f33df5"
|
||||
},
|
||||
"generated-release1/oa/behavior/state_machine_oa_monitor.arcadia": {
|
||||
"bytes": 1358,
|
||||
"sha256": "e7349e1e5336282eed3f5a103129db33d3ae4ed500788ee7129e8fc193ac57f6"
|
||||
},
|
||||
"generated-release1/oa/capabilities.arcadia": {
|
||||
"bytes": 630,
|
||||
"sha256": "26a3d9b615a3251ff010e0b47127f2d16bc2dcd45ed95967208b0076d725843a"
|
||||
},
|
||||
"generated-release1/oa/model.arcadia": {
|
||||
"bytes": 531,
|
||||
"sha256": "069a5eaaf525089935cc9d73ae7b916866ed78c6534705d75739650ecdea7ada"
|
||||
},
|
||||
"generated-release1/oa/participants.arcadia": {
|
||||
"bytes": 1580,
|
||||
"sha256": "591a75a9ecad280302be4d4ae0171ad616377ed11ead5e233848ca2dc0a71819"
|
||||
},
|
||||
"generated-release1/oa/types.arcadia": {
|
||||
"bytes": 554,
|
||||
"sha256": "f02c391d584674c879f662a418abba3a220f1fee88471ca49322ac9873de628d"
|
||||
},
|
||||
"generated-release1/project.arcadia": {
|
||||
"bytes": 1958,
|
||||
"sha256": "b2674e6bf77cfe0f6f0ba79c81d2e96d92f39c02ca2c6266d80e91723bfb9fda"
|
||||
},
|
||||
"generated-release1/sa/behavior/process_sa_assessment_procedure.arcadia": {
|
||||
"bytes": 559,
|
||||
"sha256": "5c414fbdaabf9f9e402b0441fcacf1cacf4dbbc6c822162f028de35abf59be2d"
|
||||
},
|
||||
"generated-release1/sa/behavior/process_sa_field_procedure.arcadia": {
|
||||
"bytes": 1187,
|
||||
"sha256": "ece846fdf93857e71a9ab0efcbdf64a5c41c71180f62afa3f79077fffb53b8f2"
|
||||
},
|
||||
"generated-release1/sa/behavior/process_sa_response.arcadia": {
|
||||
"bytes": 2569,
|
||||
"sha256": "af7fdda280a917cf626f6e077162d481f9aaad280f8e81330c07d7fe384b1c52"
|
||||
},
|
||||
"generated-release1/sa/behavior/scenario_sa_conversation.arcadia": {
|
||||
"bytes": 1847,
|
||||
"sha256": "01339699ec3ee409418d9bb232542f2bcd9419f1e67b183e77700c56bb9f71d2"
|
||||
},
|
||||
"generated-release1/sa/behavior/scenario_sa_full_scenario.arcadia": {
|
||||
"bytes": 1116,
|
||||
"sha256": "5dce6b00a3a441162e8dee3e23d9ca5ab7bed4a24de669b1fba03664a3086dda"
|
||||
},
|
||||
"generated-release1/sa/behavior/state_machine_sa_monitor.arcadia": {
|
||||
"bytes": 1358,
|
||||
"sha256": "17dbcfa5bbfd10fc8e23a325fc950ce853c219b4aa89c74f96278cbb3f34acc8"
|
||||
},
|
||||
"generated-release1/sa/capabilities.arcadia": {
|
||||
"bytes": 630,
|
||||
"sha256": "81706a0ca9d7db2aa0350888b9c00d853885185db2e6b90557d3d51a11c3d645"
|
||||
},
|
||||
"generated-release1/sa/functions/function_sa_audit_thresholds.arcadia": {
|
||||
"bytes": 280,
|
||||
"sha256": "27f798f78f36e72b38edab3725af2feb0eaa010fd52a60b5c6b6bef57ad3b686"
|
||||
},
|
||||
"generated-release1/sa/functions/function_sa_restore_work.arcadia": {
|
||||
"bytes": 2251,
|
||||
"sha256": "357c6acb80f86b4e8d8f5c98f9f79d140f85fbe09f3406b41b7ac6eba464ec8c"
|
||||
},
|
||||
"generated-release1/sa/model.arcadia": {
|
||||
"bytes": 531,
|
||||
"sha256": "805b90262e27090ae7da81a51bcefa49c97fb0b3d3220b4a72323b4c4351c395"
|
||||
},
|
||||
"generated-release1/sa/participants.arcadia": {
|
||||
"bytes": 3604,
|
||||
"sha256": "ca144d6a8f45fe720b5d18c7b59c7671444baa8c37e5ce9117bcba34b3a6aa84"
|
||||
},
|
||||
"generated-release1/sa/types.arcadia": {
|
||||
"bytes": 903,
|
||||
"sha256": "540ddbc2bcd0ccf45298e3ea5660637341aff63ff65fd87ac2f26469d1adc064"
|
||||
},
|
||||
"generated-release1/traceability.arcadia": {
|
||||
"bytes": 28041,
|
||||
"sha256": "474bd28d955ff7af7722f6e9a23220d816879e3f46202e79a233544b9c593116"
|
||||
},
|
||||
"generated-release1/transition-before.json": {
|
||||
"bytes": 35801,
|
||||
"sha256": "2253e6434f741687e22327c37d520ed15c043bc36025498650bc2366bb6a874d"
|
||||
},
|
||||
"generated-release1/transition-request.json": {
|
||||
"bytes": 4276,
|
||||
"sha256": "43b9a22e5f95ad3bc0ebd2478ead0e14406854abc989ae94ded9367b013d812a"
|
||||
},
|
||||
"generated-release1/views/diagram_oa_allocation_view.arcadia": {
|
||||
"bytes": 1786,
|
||||
"sha256": "c45d7467839219d894804c1ef2d22ff4d4a5a84a6a273c526bafd4c1facde624"
|
||||
},
|
||||
"generated-release1/views/diagram_sa_allocation_view.arcadia": {
|
||||
"bytes": 1797,
|
||||
"sha256": "352a3ca745517592b5c9b1239b5770f62f0466a329a91fd03457ef2b53c06ed6"
|
||||
},
|
||||
"generated-release1/views/diagram_sa_capability_view.arcadia": {
|
||||
"bytes": 1286,
|
||||
"sha256": "8f18fcccbcddcf3c1ea0ffe727b5b23b77fc148c5da4fde953abe681e4c20cd2"
|
||||
},
|
||||
"generated-release1/views/diagram_sa_service_view.arcadia": {
|
||||
"bytes": 1960,
|
||||
"sha256": "4c72cb7593d9c4be8d2600b0656a7a3a6ce84c45bb2f3e58a4ee5ae3bf91913c"
|
||||
},
|
||||
"generated-release1/views/diagram_sa_state_view.arcadia": {
|
||||
"bytes": 1576,
|
||||
"sha256": "dd1bea81ac7dc549a53f9b190be6f13052e00ede345bd180444cc31edb892230"
|
||||
},
|
||||
"helpers/composition.json": {
|
||||
"bytes": 1190,
|
||||
"sha256": "78a98f3a034cda4d0cc1abfe33efb785e847bb6278b49c2071d70ee5f1dc23f3"
|
||||
},
|
||||
"helpers/gate-union.py": {
|
||||
"bytes": 3495,
|
||||
"sha256": "9cca2646b1bcf09961a9ad1a276d633d8e4296ff2c6f2f356f028afaf789f503"
|
||||
},
|
||||
"helpers/ordinary-contract.patch": {
|
||||
"bytes": 7301,
|
||||
"sha256": "931a5822dbfa5ad34a0dc961035e060ccdc7aed15712c4a9b5dc15a852675f71"
|
||||
},
|
||||
"helpers/ordinary.patch": {
|
||||
"bytes": 145928,
|
||||
"sha256": "e319a5151b7e6713880eaaab632f3f1c01aee6df3cd534d85a1c099fb501dcb7"
|
||||
},
|
||||
"helpers/render-language.py": {
|
||||
"bytes": 1009,
|
||||
"sha256": "82909cf11b0bdb0594b424cba51e71ec0abdead78d878f101b7ae8ff6c4281f8"
|
||||
},
|
||||
"helpers/required-desktop-tests.json": {
|
||||
"bytes": 125261,
|
||||
"sha256": "6672e3f7ccfb92b7710310836af6933a8e58ef113353505ec4fc0c3d6908c136"
|
||||
},
|
||||
"inputs/0fa1da63d71c984cd99b079de661e88154b5a31818b384f557deefd40b8ead3a.json": {
|
||||
"bytes": 118403,
|
||||
"sha256": "0fa1da63d71c984cd99b079de661e88154b5a31818b384f557deefd40b8ead3a"
|
||||
},
|
||||
"inputs/12ce1ca9c1185d7a91a1dea322cdc0c7fc4372db5d879386595acdbfd412d880.zip": {
|
||||
"bytes": 2830239,
|
||||
"sha256": "12ce1ca9c1185d7a91a1dea322cdc0c7fc4372db5d879386595acdbfd412d880"
|
||||
},
|
||||
"inputs/81bd006f10034bc0c203187af179548a549fda6e58bc7cde0702cc26994fd28d.zip": {
|
||||
"bytes": 2828619,
|
||||
"sha256": "81bd006f10034bc0c203187af179548a549fda6e58bc7cde0702cc26994fd28d"
|
||||
},
|
||||
"inputs/86ac50e9cec8b39db91bbc98e5388e8c0f8466e6c217cf2f4eca5f1db087dde1.zip": {
|
||||
"bytes": 2831327,
|
||||
"sha256": "86ac50e9cec8b39db91bbc98e5388e8c0f8466e6c217cf2f4eca5f1db087dde1"
|
||||
},
|
||||
"inputs/bbe8290d9cb11a7ee5dba250350451c5b7ec88069aa65f6be786a67922408c48.json": {
|
||||
"bytes": 118403,
|
||||
"sha256": "bbe8290d9cb11a7ee5dba250350451c5b7ec88069aa65f6be786a67922408c48"
|
||||
},
|
||||
"inputs/e3d2d504b18bb1f7c4c3fa1f26abff425b957f18b418d8556888151723ba67b4.json": {
|
||||
"bytes": 118404,
|
||||
"sha256": "e3d2d504b18bb1f7c4c3fa1f26abff425b957f18b418d8556888151723ba67b4"
|
||||
},
|
||||
"render/language.html": {
|
||||
"bytes": 188141,
|
||||
"sha256": "57e71090f56ae27aa50f757886d6cadf63d49f5641fe4a365547cbd9e59685b6"
|
||||
},
|
||||
"render/language.rst": {
|
||||
"bytes": 142931,
|
||||
"sha256": "5deafe3f75a503ab5fb3d05c5ad8f126d82668f89bef02067ce5d56c3045a2bb"
|
||||
},
|
||||
"runs/consumers-1/process.json": {
|
||||
"bytes": 257,
|
||||
"sha256": "85b18634abd4ccf90144b44b01cbcade2521ef6706b2e46abc2e1d60a4dfc346"
|
||||
},
|
||||
"runs/consumers-1/result.json": {
|
||||
"bytes": 6986,
|
||||
"sha256": "5501663ed1f845b8d18487c90fb827faab2a1c2319cf8ea8c127324fdd9add15"
|
||||
},
|
||||
"runs/consumers-1/started.json": {
|
||||
"bytes": 1488,
|
||||
"sha256": "908dda6bce0013b3c5db9bc5cf678a9df3b221845e9c29d29409bf440bab52d3"
|
||||
},
|
||||
"runs/consumers-1/stderr.log": {
|
||||
"bytes": 652,
|
||||
"sha256": "6dca8394973a95c080a0b8858926efe7779512adf0fd5e64b47d1239f9446618"
|
||||
},
|
||||
"runs/consumers-1/stdout.log": {
|
||||
"bytes": 144498,
|
||||
"sha256": "f1ff82c06e0e1b0f0c3eadb5533402bfea42983c89fa3581340768f3d953de3e"
|
||||
},
|
||||
"runs/core-1/process.json": {
|
||||
"bytes": 197,
|
||||
"sha256": "1bf0f358d94b6e95eab5cf3823a4230a72f0363b77c75b8222c73f1122739f21"
|
||||
},
|
||||
"runs/core-1/result.json": {
|
||||
"bytes": 67077,
|
||||
"sha256": "a9f111627d5a2a7fa33e525cbd43150b803505e3e201b8465f94d2060fce143e"
|
||||
},
|
||||
"runs/core-1/started.json": {
|
||||
"bytes": 1398,
|
||||
"sha256": "56fb8a8824c031ed8f831561241a3bf321158f75cc0a2acdca6b0a77d9b648f6"
|
||||
},
|
||||
"runs/core-1/stderr.log": {
|
||||
"bytes": 12121,
|
||||
"sha256": "ca7ae2dfd0b6eecec811fce5831ea0dc7fb3b6209ffcad88d45eb6c5afd65103"
|
||||
},
|
||||
"runs/core-1/stdout.log": {
|
||||
"bytes": 131218,
|
||||
"sha256": "0d683632d1046f102e6b70af56d67ea6841134d99c923f0648261b4832a860fa"
|
||||
},
|
||||
"runs/core-consumers-1/process.json": {
|
||||
"bytes": 274,
|
||||
"sha256": "16bba7d4e4e3eb39c0ae89ecdbbfe38818c2ed329a32ac52a8db3cea69ed7fd4"
|
||||
},
|
||||
"runs/core-consumers-1/result.json": {
|
||||
"bytes": 1907,
|
||||
"sha256": "4bb8e79cd647aacebe2c4790a18ac37d07bbc29b0f7c8eca1933f1c5020474f8"
|
||||
},
|
||||
"runs/core-consumers-1/started.json": {
|
||||
"bytes": 1515,
|
||||
"sha256": "2ff77ca7601800340bf458d0707aaeef742a010ec7f6a55cf1577a1c33f5c543"
|
||||
},
|
||||
"runs/core-consumers-1/stderr.log": {
|
||||
"bytes": 327,
|
||||
"sha256": "5ded46d388f7ecc597c5e468621e84a297b1231f4eab8c2aa413697dd005e286"
|
||||
},
|
||||
"runs/core-consumers-1/stdout.log": {
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"runs/language-doc-1/warnings.log": {
|
||||
"bytes": 144,
|
||||
"sha256": "82cf5ddae4d21aa3730437a7962e6582507aa8032cc75fb8164ff7cf9003b7ae"
|
||||
},
|
||||
"runs/language-doc-2/result.json": {
|
||||
"bytes": 415,
|
||||
"sha256": "620a449b2995fbbb27aa769cadf603dd01d9f7036c595d012e66b74469102bde"
|
||||
},
|
||||
"runs/language-doc-2/warnings.log": {
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"runs/teaching-check-2/process.json": {
|
||||
"bytes": 210,
|
||||
"sha256": "18e9d3ee3e9c0d2d21c196c811ae543c899cc4580ad3288eca3a544f20f7a9cc"
|
||||
},
|
||||
"runs/teaching-check-2/result.json": {
|
||||
"bytes": 3147,
|
||||
"sha256": "cfc8dad31b1d8ba45face31f7986a30066c3bc464d19bd3b8495c9a013b45c0e"
|
||||
},
|
||||
"runs/teaching-check-2/started.json": {
|
||||
"bytes": 1416,
|
||||
"sha256": "259944f97150c87b2c95e9f53ae5cbb09264b03284510c9ac44272a70fdc9c87"
|
||||
},
|
||||
"runs/teaching-check-2/stderr.log": {
|
||||
"bytes": 218,
|
||||
"sha256": "9c90adb28961f087f33b905352c50c5d2aaa46785f47f3061dbe7dc161bc95d9"
|
||||
},
|
||||
"runs/teaching-check-2/stdout.log": {
|
||||
"bytes": 42153,
|
||||
"sha256": "d53a7d2d3d726302111aab71208814f487489080d250c1f555ad18312e80d86c"
|
||||
},
|
||||
"runs/teaching-generate-1/process.json": {
|
||||
"bytes": 252,
|
||||
"sha256": "c97f65ec53807bca963754b767ab21a88c3476c3639f0b54b38880281aff8a22"
|
||||
},
|
||||
"runs/teaching-generate-1/result.json": {
|
||||
"bytes": 3171,
|
||||
"sha256": "bd0095f78b4ff3cbaf7c1c3183bc280dbb1eec1cb68a528507af27ac35f34f83"
|
||||
},
|
||||
"runs/teaching-generate-1/started.json": {
|
||||
"bytes": 1458,
|
||||
"sha256": "e0526c09c8baa67bdb753ed1b0f15e237d3db2b1c60f097a145a141b9d174169"
|
||||
},
|
||||
"runs/teaching-generate-1/stderr.log": {
|
||||
"bytes": 229,
|
||||
"sha256": "464f44f1eaa5cabe25b7f66bcd689912977482c3eaad0e65328e0210749491fa"
|
||||
},
|
||||
"runs/teaching-generate-1/stdout.log": {
|
||||
"bytes": 41964,
|
||||
"sha256": "c7b195917f9b5b15aaf654703349b713b788f4cfbf00dce966539ff0764f892b"
|
||||
},
|
||||
"runs/windows-dependencies-1/process.json": {
|
||||
"bytes": 146,
|
||||
"sha256": "3901471653ef98f1abe326244dc639c6a2f0f53d3fff72db82acf068d8afabf9"
|
||||
},
|
||||
"runs/windows-dependencies-1/result.json": {
|
||||
"bytes": 1712,
|
||||
"sha256": "f1aa540938e09c5f4b92d13b293861a9e2cd08681e3f6b285b9e85f848a44935"
|
||||
},
|
||||
"runs/windows-dependencies-1/started.json": {
|
||||
"bytes": 1321,
|
||||
"sha256": "a54a7f78b455414d592b7ca3daf3d824487583a844097db76265e564bfb531d7"
|
||||
},
|
||||
"runs/windows-dependencies-1/stderr.log": {
|
||||
"bytes": 117,
|
||||
"sha256": "a82eeeb2d2fffd4d9e5d6e20ef76ed29e9e365923e2cc33bac0ab8f21a7a88d8"
|
||||
},
|
||||
"runs/windows-dependencies-1/stdout.log": {
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
}
|
||||
},
|
||||
"generatedFiles": [
|
||||
"generated-release1/expected-diagnostics.json",
|
||||
"generated-release1/model.json",
|
||||
"generated-release1/oa/activities/activity_oa_restore_work.arcadia",
|
||||
"generated-release1/oa/behavior/process_oa_assessment_procedure.arcadia",
|
||||
"generated-release1/oa/behavior/process_oa_field_procedure.arcadia",
|
||||
"generated-release1/oa/behavior/process_oa_response.arcadia",
|
||||
"generated-release1/oa/behavior/scenario_oa_conversation.arcadia",
|
||||
"generated-release1/oa/behavior/scenario_oa_full_scenario.arcadia",
|
||||
"generated-release1/oa/behavior/state_machine_oa_monitor.arcadia",
|
||||
"generated-release1/oa/capabilities.arcadia",
|
||||
"generated-release1/oa/model.arcadia",
|
||||
"generated-release1/oa/participants.arcadia",
|
||||
"generated-release1/oa/types.arcadia",
|
||||
"generated-release1/project.arcadia",
|
||||
"generated-release1/sa/behavior/process_sa_assessment_procedure.arcadia",
|
||||
"generated-release1/sa/behavior/process_sa_field_procedure.arcadia",
|
||||
"generated-release1/sa/behavior/process_sa_response.arcadia",
|
||||
"generated-release1/sa/behavior/scenario_sa_conversation.arcadia",
|
||||
"generated-release1/sa/behavior/scenario_sa_full_scenario.arcadia",
|
||||
"generated-release1/sa/behavior/state_machine_sa_monitor.arcadia",
|
||||
"generated-release1/sa/capabilities.arcadia",
|
||||
"generated-release1/sa/functions/function_sa_audit_thresholds.arcadia",
|
||||
"generated-release1/sa/functions/function_sa_restore_work.arcadia",
|
||||
"generated-release1/sa/model.arcadia",
|
||||
"generated-release1/sa/participants.arcadia",
|
||||
"generated-release1/sa/types.arcadia",
|
||||
"generated-release1/traceability.arcadia",
|
||||
"generated-release1/transition-before.json",
|
||||
"generated-release1/transition-request.json",
|
||||
"generated-release1/views/diagram_oa_allocation_view.arcadia",
|
||||
"generated-release1/views/diagram_sa_allocation_view.arcadia",
|
||||
"generated-release1/views/diagram_sa_capability_view.arcadia",
|
||||
"generated-release1/views/diagram_sa_service_view.arcadia",
|
||||
"generated-release1/views/diagram_sa_state_view.arcadia"
|
||||
],
|
||||
"generatedCount": 34
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
"""Read-only, Python-standard-library verification. Never executes archived code."""
|
||||
from pathlib import Path, PurePosixPath
|
||||
from datetime import datetime
|
||||
import hashlib
|
||||
import io
|
||||
import json
|
||||
import re
|
||||
import zipfile
|
||||
|
||||
ROOT = Path(__file__).resolve().parent
|
||||
|
||||
def require(ok, message):
|
||||
if not ok:
|
||||
raise ValueError(message)
|
||||
|
||||
def digest(data):
|
||||
return {'bytes': len(data), 'sha256': hashlib.sha256(data).hexdigest()}
|
||||
|
||||
def members(z, expected):
|
||||
names = z.namelist()
|
||||
require(len(names) == len(set(names)), 'duplicate ZIP members')
|
||||
require(set(names) == set(expected), 'archive membership mismatch')
|
||||
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 member')
|
||||
|
||||
def main():
|
||||
inventory = json.loads((ROOT / 'files.json').read_text())
|
||||
for name, expected in inventory.items():
|
||||
require(digest((ROOT / name).read_bytes()) == expected, 'external file hash: ' + name)
|
||||
manifest = json.loads((ROOT / 'manifest.json').read_text())
|
||||
with zipfile.ZipFile(ROOT / 'evidence.zip') as z:
|
||||
members(z, manifest['members'])
|
||||
for name, expected in manifest['members'].items():
|
||||
require(digest(z.read(name)) == expected, 'member hash: ' + name)
|
||||
def raw(name): return z.read(name)
|
||||
def obj(name): return json.loads(raw(name))
|
||||
checked = set()
|
||||
for run, spec in manifest['runs'].items():
|
||||
if spec['kind'] != 'cargo':
|
||||
continue
|
||||
prefix = 'runs/' + run + '/'
|
||||
start, result, process = (obj(prefix + n + '.json') for n in ('started', 'result', 'process'))
|
||||
require(all(result[k] == v for k, v in start.items()), run + ': start/result relationship')
|
||||
require(result['command'] == spec['command'] == process['command'], run + ': command')
|
||||
require(result['head'] == spec['head'], run + ': HEAD')
|
||||
require(result['exitCode'] == spec['exitCode'] and result['inputsUnchanged'] is True, run + ': outcome')
|
||||
require(datetime.fromisoformat(result['finish']) >= datetime.fromisoformat(start['start']), run + ': times')
|
||||
require(result['seconds'] >= 0, run + ': duration')
|
||||
require(result['helper'] == digest(raw('helpers/gate-union.py')), run + ': helper')
|
||||
for field, file in [('inputs', spec['inputs']), ('archive', spec['archive']), ('stdout', prefix+'stdout.log'), ('stderr', prefix+'stderr.log')]:
|
||||
require(result[field] == digest(raw(file)), run + ': receipt ' + field)
|
||||
inputs = obj(spec['inputs'])
|
||||
require(len(inputs) == result['inputCount'] == spec['inputCount'], run + ': input count')
|
||||
require(sum(p.startswith('crates/vendor/iced_widget/') for p in inputs) == 71, run + ': vendor count')
|
||||
pair = (spec['inputs'], spec['archive'])
|
||||
if pair not in checked:
|
||||
with zipfile.ZipFile(io.BytesIO(raw(spec['archive']))) as source:
|
||||
members(source, inputs)
|
||||
for name, expected in inputs.items():
|
||||
require(digest(source.read(name)) == expected, run + ': source hash ' + name)
|
||||
checked.add(pair)
|
||||
stdout = raw(prefix+'stdout.log').decode('utf-8', errors='replace')
|
||||
rows = [[int(x) for x in row] for row in re.findall(r'test result: (?:ok|FAILED)\. (\d+) passed; (\d+) failed; (\d+) ignored; (\d+) measured; (\d+) filtered out;', stdout)]
|
||||
require(rows == spec['testRows'], run + ': exact test summaries')
|
||||
require([sum(row[i] for row in rows) for i in range(5)] == spec['testTotals'], run + ': test totals')
|
||||
artifacts = []
|
||||
for line in stdout.splitlines():
|
||||
try: item = json.loads(line)
|
||||
except json.JSONDecodeError: continue
|
||||
if isinstance(item, dict) and item.get('reason') == 'compiler-artifact' and item.get('executable'):
|
||||
artifacts.append(item)
|
||||
require(artifacts == [a['cargo'] for a in result['artifacts']], run + ': artifact receipt relationship')
|
||||
print(run, 'exit', result['exitCode'], 'test totals', spec['testTotals'])
|
||||
composition = obj('helpers/composition.json')
|
||||
require(composition['patch'] == digest(raw('helpers/ordinary.patch')), 'composition patch')
|
||||
doc = obj('runs/language-doc-2/result.json')
|
||||
require(doc['strict'] is True and doc['docutils'] == '0.23', 'render settings')
|
||||
for field, path in [('source','render/language.rst'), ('html','render/language.html'), ('warnings','runs/language-doc-2/warnings.log')]:
|
||||
require(doc[field] == digest(raw(path)), 'render receipt ' + field)
|
||||
require(raw('runs/language-doc-2/warnings.log') == b'', 'successful render warnings')
|
||||
require(bool(raw('runs/language-doc-1/warnings.log')), 'failed render warning missing')
|
||||
for path in manifest['generatedFiles']:
|
||||
require(path.startswith('generated-release1/') and path in manifest['members'], 'generated mapping')
|
||||
require(len(manifest['generatedFiles']) == manifest['generatedCount'], 'generated count')
|
||||
print('PASS:', len(manifest['runs']), 'closed captures;', len(manifest['members']), 'members;', len(checked), 'input manifest/archive pairs')
|
||||
print('Integrity and receipt consistency only; no rerun, signature, binary verification, or GUI claim.')
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -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()
|
||||
@@ -0,0 +1,192 @@
|
||||
# Ordinary compact source and Text workspace integration
|
||||
|
||||
This proposal composes ordinary source-default omission with the published Text
|
||||
workspace. It does not replace the release owner's branch or establish release
|
||||
acceptance. [Issue 11](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/11)
|
||||
owns this contribution; [issue 27](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/27)
|
||||
retains release integration. Source-8 analysis composition and Linux verification
|
||||
remain outside this candidate; Linux work is paused at the user's instruction.
|
||||
|
||||
## Source composition
|
||||
|
||||
Production commit `d7c065991d3f63cc41341d23a546739de8837ac3` applies the exact
|
||||
14-file ordinary code/test delta from `74cc0e09119f9fa9e1287988bdd98c4cbf9db79e`
|
||||
to `3d067041d1c8b62bc4b2bd1e2ae81eb2713bf4e2` onto published Text/root
|
||||
`136ed6e5868200165fbb1c2ae8a7230067bf9c1e`. Thirteen preimages match, including
|
||||
seven paths absent on both bases. The only other preimage difference is
|
||||
`lib.rs`'s independent `pub mod analysis_numeric;`, retained with the new private
|
||||
`mod source_defaults;`. Thirteen resulting files match the ordinary head exactly;
|
||||
the combined `lib.rs` additionally retains the numeric module. The original
|
||||
145,928-byte patch has SHA-256
|
||||
`e319a5151b7e6713880eaaab632f3f1c01aee6df3cd534d85a1c099fb501dcb7`.
|
||||
|
||||
Follow-up `e624d5b9c4f848eff3fba2ed83f9decf959e14d8` brings over the ordinary
|
||||
normative language-contract delta and regenerates the current teaching example.
|
||||
The full core run identified the latter dependency: its exact generated-source
|
||||
assertion still expected verbose defaults. The documented generator produced
|
||||
30 source files and four JSON files. Twenty-nine source files changed, removing
|
||||
514 default-field lines; the root entry, all four JSON files, and all 68 historical
|
||||
trace baseline blocks remained byte-identical. Generation asserts complete
|
||||
decoded Project equality. The test assertion was preserved.
|
||||
|
||||
Strict Docutils 0.23 rendering exposed an existing one-character-short underline
|
||||
on the focused diagram removal heading. Repairing it allowed warning-free HTML
|
||||
generation. Regeneration also restores the root's existing allocation/removal
|
||||
sections that were missing from its previous HTML. No semantic prose from those
|
||||
sections changed.
|
||||
|
||||
## Verification to date
|
||||
|
||||
Windows toolchain: Rust/Cargo 1.98.1, `stable-x86_64-pc-windows-gnullvm`, LLVM-MinGW
|
||||
20260826 UCRT, one build job, `CARGO_INCREMENTAL=0`. Each Cargo run captures its
|
||||
707 source inputs before and after, including all 71 vendored Iced widget files,
|
||||
raw logs, process identity, and executable artifact hashes. A captured HEAD with
|
||||
local deltas is not represented as a clean-commit run.
|
||||
|
||||
- The initial combined-consumer attempt stopped before compilation because
|
||||
`num-bigint` was absent from the offline cache. A locked Windows-target fetch
|
||||
installed `num-bigint 0.5.1` and `num-integer 0.1.47`; sources and lock stayed
|
||||
unchanged.
|
||||
- Full core at clean `d7c0659`: **536 passed, one failed, one existing opt-in
|
||||
scaling probe ignored**, across 46 result summaries. The sole failure was
|
||||
`release1_teaching_regeneration_and_shipped_source_are_exact_with_one_intentional_warning`.
|
||||
The source-transaction panic messages are deliberate interruption injections
|
||||
in passing recovery tests.
|
||||
- The documented teaching generator completed successfully against the same
|
||||
production inputs, writing to a separate scratch folder. All 34 generated
|
||||
files were compared with the repaired shipped fixture.
|
||||
- `cargo test --locked --offline -p oa-core --test release1_teaching` against the
|
||||
repaired fixture: **four passed**, including exact source/JSON parity and the
|
||||
one intentional coverage warning. This run captured `d7c0659` plus the 29
|
||||
fixture changes subsequently committed in `e624d5b`; production was unchanged.
|
||||
- Strict language HTML generation: passed with an empty warning log.
|
||||
- CLI/HTTP consumers: **12 CLI and 51 HTTP passed**, no failed or ignored
|
||||
cases. The HTTP preservation witness exercises an actual move and server
|
||||
restart with an explicitly authored empty port-anchor list. The two Windows
|
||||
storage-refusal messages are expected from atomic-storage failure tests.
|
||||
This run started at `d7c0659` plus the 31 fixture/documentation changes now in
|
||||
`e624d5b`; all 707 captured inputs remained unchanged through execution.
|
||||
|
||||
Actual desktop listing admission, desktop execution, strict workspace
|
||||
Clippy, matching Windows binaries, and native combined-workflow acceptance are
|
||||
not established by the results above. Earlier ordinary-only native and automated
|
||||
evidence remains scoped to its original published inputs.
|
||||
|
||||
## Independent review
|
||||
|
||||
Astra review checked exact Git-blob composition and the source-preserving updater,
|
||||
raw diagnostic coordinates, source publication ordering, warning authority after
|
||||
recovery, rename/history/save ownership, schema-7 boundary, and historical payloads.
|
||||
No actionable source defect was found. Separate follow-up review confirmed all
|
||||
34 regenerated files and 68 unchanged historical blocks, then checked the scoped
|
||||
reST delta, preserved root sections, generated HTML, and strict-render receipts.
|
||||
|
||||
A source-pinned checklist identifies 150 critical desktop declarations: all 89
|
||||
imported desktop additions, both later recovery-warning fixes, retained selection
|
||||
and departure cases, additional recovery/Save As/rename/navigation controls, and
|
||||
six explicitly ignored probes. This is expected membership only; lexical counts
|
||||
are not executable admission or passing runtime results.
|
||||
|
||||
## Portable closed-run checkpoint
|
||||
|
||||
[The evidence package](experiments/ordinary-text-integration-20260913/README.md)
|
||||
contains the eight closed captures described above, including failed runs, exact
|
||||
input snapshots, raw generated outputs, and the source-admission checklist.
|
||||
Its ZIP contains 81 members with three distinct input manifest/archive pairs:
|
||||
8,584,848 bytes, SHA-256
|
||||
`f220433f8f6fe99cea762aca98ee471c14411b5f6762745cf91432e6bfaca440`.
|
||||
Run the package's `verify.py` with Python 3.10 or newer; it requires only the
|
||||
standard library and the five adjacent package files. It verifies integrity and
|
||||
receipt relationships without executing archived code or consulting this machine.
|
||||
The README records provenance limitations and the absence of runtime binaries.
|
||||
All 707 consumer inputs were independently compared with committed Git blobs at
|
||||
`e624d5b9c4f848eff3fba2ed83f9decf959e14d8` and matched exactly.
|
||||
|
||||
## Subsequent combined checks and lint repair
|
||||
|
||||
The final fixture/documentation state completed the full core suite: **537 passed,
|
||||
zero failed, one existing opt-in probe ignored**. Desktop listing and execution
|
||||
have exactly the same 1,185 unique names: **1,179 passed, zero failed, six existing
|
||||
opt-in probes ignored**. Independent admission checked all 144 enabled critical
|
||||
checklist cases, all six expected ignored cases and their reasons, five replaced
|
||||
names absent, four retained departure cases present exactly once, and all 24
|
||||
checklist source-file bindings. These runs use the same 707 input bytes as the
|
||||
successful consumers; full listing and execution are recorded separately.
|
||||
|
||||
Strict all-target Clippy then exposed two integration cleanups. The first was
|
||||
two unchanged test-only helper functions appearing after a test module in
|
||||
`views.rs`. The second was the unused internal `SymbolEvent::Close`: production
|
||||
already emits captured `TextWorkspace(Event::HideDrawer)` instead. Commit
|
||||
`f714a25bbcd435941404104ad0cbb0fea3b89149` moves the helpers before the test module,
|
||||
removes the obsolete event/handler, and switches four existing test sites to the
|
||||
actual UI close message without weakening their assertions. Current close tests
|
||||
therefore exercise document/session/visit authority and the presentation boundary;
|
||||
Query/Back/Choose continue to test source-file authority. Independent review
|
||||
accepted both changes. No production sender used the removed event.
|
||||
|
||||
Strict `cargo clippy --locked --offline --workspace --all-targets -- -D warnings`
|
||||
now passes. Its captured HEAD was `cb94136` plus those four files, with all 707
|
||||
inputs unchanged; exact Git-blob comparison binds those inputs to `f714a25`.
|
||||
The earlier complete suites remain scoped to the preceding input state.
|
||||
Affected desktop execution on `f714a25` passed: **83 passed, zero failed, one
|
||||
existing manual source-navigation performance probe ignored**, with 1,101 cases
|
||||
outside the selected scope. The filters cover source-symbol tests, Text workspace
|
||||
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. 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
|
||||
admission, the exact affected-test selection, and the three build artifact
|
||||
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).
|
||||
@@ -0,0 +1 @@
|
||||
* -text
|
||||
@@ -0,0 +1,63 @@
|
||||
# Text integration source review
|
||||
|
||||
The isolated candidate **554cfbd9fe6fd64f0eb3012bcbb3efd7a95f7424** combines the
|
||||
compact Text workspace and source diagnostics with the root's newer chooser,
|
||||
selection, rename-preview and navigation boundaries. It is accepted for fresh
|
||||
compilation and interaction checks; **no combined runtime acceptance is claimed**.
|
||||
|
||||
The base is `feab2020d8e5b6bfdb59c86ab4aee161617b8b6f`. Earlier peer production
|
||||
`9fd76aef3ae2810667d3f2b031fc43692fc04c89` is a source comparator, not evidence
|
||||
that this combined candidate passed its tests. Gitea issue27 owns integration
|
||||
and verification. Linux remains deferred by the user.
|
||||
|
||||
## Decisions and review
|
||||
|
||||
- Retain the latest admitted References result across hiding and departure;
|
||||
retention alone must not authorize navigation, reopen a drawer, or replace
|
||||
the current selection. Exact result snapshot bytes and captured interaction
|
||||
context remain necessary for navigation. See the
|
||||
[retention review](text-retained-results-independent-review-20260913.md).
|
||||
- Keep the editor, diagnostic sensor/guard and owned tooltip paragraphs mounted
|
||||
while combining root chooser/input admission. Accepted local Text actions must
|
||||
retire pending diagram navigation and allocation intent; passive scroll reports
|
||||
must remain inert. The [full source review](text-union-final-independent-review-20260913.md)
|
||||
documents exact scope and test-inventory checks.
|
||||
- That review found a recovery defect at immutable `92ff99eb`: filtering a
|
||||
pending-save notice also made previously stale warnings current. Correction
|
||||
`554cfbd` captures the old diagnostic publication's freshness first, retains
|
||||
warning data, and republishes only previously current diagnostics. The
|
||||
[independent correction review](text-recovery-publication-fix-independent-review-20260913.md)
|
||||
accepts the source repair and its two discriminating authored tests.
|
||||
|
||||
The parent inspected the complete recovery diff and both independent reviews.
|
||||
The current/stale controls preserve applied drafts, the accepted Project, source
|
||||
bytes, cursor and history, and exercise a real recovery journal plus an explicitly
|
||||
injected reload-error result. These tests remain unrun at this checkpoint.
|
||||
|
||||
## Verification required
|
||||
|
||||
Obtain the actual desktop listing and reconcile it with the source inventory,
|
||||
then run the Text, diagnostics, local-boundary, lifecycle/recovery and retained
|
||||
root selection/rename checks. Run the combined full desktop suite, changed core
|
||||
include-provenance checks and affected consumers, strict checks and a matching GUI
|
||||
build. Inspect the actual native editor, tooltips, drawers, chooser/rename blocking,
|
||||
stale actions, navigation and recovery workflows. Validate the vendored dependency
|
||||
and notices in the package. Preserve exact ignored-case scope and all failures.
|
||||
|
||||
Old 581/615-input build records do not cover this candidate: the Cargo patch,
|
||||
71 vendored files, scripts and changed core provenance must be included in fresh
|
||||
input capture. Source-level inventory counts are not test results.
|
||||
|
||||
## Preserved records
|
||||
|
||||
`manifest.json` binds the original local review records, handoffs and source
|
||||
inventories copied byte-for-byte into this directory. Original absolute paths or
|
||||
`.local/` references describe the review machine, not a shared filesystem. For a
|
||||
record named in that manifest, use its basename in this directory. Production
|
||||
paths are repository-relative at their explicitly identified source commits.
|
||||
The immutable review of `92ff99eb` intentionally keeps its original repair-required
|
||||
disposition; the later correction review supersedes only that finding.
|
||||
|
||||
These records are reusable source-review evidence, not a live task ledger, a
|
||||
full requirements review or a release. The complete application objective and
|
||||
public source8/analysis work remain unfinished.
|
||||
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"source": "554cfbd9fe6fd64f0eb3012bcbb3efd7a95f7424",
|
||||
"scope": "Source review only; no combined runtime acceptance",
|
||||
"files": [
|
||||
{
|
||||
"path": "text-retained-results-independent-review-20260913.md",
|
||||
"bytes": 11317,
|
||||
"sha256": "22aaf828c514e7d58e6f7b0b3132ed43eefb736e4bde78a1529851e6cb89fc0b",
|
||||
"original": ".local/text-retained-results-independent-review-20260913.md"
|
||||
},
|
||||
{
|
||||
"path": "parent-text-union-stage1-review-20260913.md",
|
||||
"bytes": 3805,
|
||||
"sha256": "d5c063005d4dd1a804212e8b7deaae226e7d965cdc1988bd20d165ed23e8dcd9",
|
||||
"original": ".local/parent-text-union-stage1-review-20260913.md"
|
||||
},
|
||||
{
|
||||
"path": "text-union-final-independent-review-20260913.md",
|
||||
"bytes": 12728,
|
||||
"sha256": "440f0d8f796d51f67989a3f8a84d096c92cfc1621f432e45a00c601582ac53bd",
|
||||
"original": ".local/text-union-final-independent-review-20260913.md"
|
||||
},
|
||||
{
|
||||
"path": "text-union-independent-source-audit-20260913.json",
|
||||
"bytes": 404,
|
||||
"sha256": "a96c27806d9c079e982a5d26806bc9cef24ab8714a58d45d9375599e924a0c13",
|
||||
"original": ".local/text-union-independent-source-audit-20260913.json"
|
||||
},
|
||||
{
|
||||
"path": "text-union-source-handoff-20260913.md",
|
||||
"bytes": 19190,
|
||||
"sha256": "66a56726385e5969751a32c7e3964eed41a52002f4023ace232629d984c69659",
|
||||
"original": ".local/text-union-source-handoff-20260913.md"
|
||||
},
|
||||
{
|
||||
"path": "text-union-source-inventory-20260913.json",
|
||||
"bytes": 66595,
|
||||
"sha256": "a415cfeaa7a412bcb897ae779a45d7894efd8f77bed29a154de550b8ddd2f4e4",
|
||||
"original": ".local/text-union-source-inventory-20260913.json"
|
||||
},
|
||||
{
|
||||
"path": "text-recovery-publication-fix-handoff-20260913.md",
|
||||
"bytes": 4290,
|
||||
"sha256": "c19bd1573e1579df012ec4cff0a03939b8866f282f51b6dba2b8234d86f5f036",
|
||||
"original": ".local/text-recovery-publication-fix-handoff-20260913.md"
|
||||
},
|
||||
{
|
||||
"path": "text-recovery-publication-fix-source-manifest-20260913.json",
|
||||
"bytes": 973,
|
||||
"sha256": "b90d42d23601ab415afb5dde1406d66f6ae1c2af0a2076184a870bddb12e741b",
|
||||
"original": ".local/text-recovery-publication-fix-source-manifest-20260913.json"
|
||||
},
|
||||
{
|
||||
"path": "text-recovery-publication-fix-independent-review-20260913.md",
|
||||
"bytes": 5986,
|
||||
"sha256": "e7d5f40b0c4de9d00120088fc4ef86c1cdedfb7e5892dba9971eab1c12a6bc22",
|
||||
"original": ".local/text-recovery-publication-fix-independent-review-20260913.md"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
# Parent review of the first Text integration slice
|
||||
|
||||
2026-09-13. Source review only. Frozen commits inspected: `74542ae2c1b7af3f4f34efcf6a9774822ba4858d` and the separate expectation change `16904398dbddda9c073b3c420807e406086ad2ea`, above `feab2020d8e5b6bfdb59c86ab4aee161617b8b6f`. The later diagnostics working delta was not reviewed through this note. No combined compiler, mounted renderer, native or packaging acceptance follows.
|
||||
|
||||
The parent read the app/controller changes, captured Text command/drawer controller, References view, all three changed retention assertions, relevant lifecycle test setup, and the independent retention report `.local/text-retained-results-independent-review-20260913.md` (SHA256 `22aaf828c514e7d58e6f7b0b3132ed43eefb736e4bde78a1529851e6cb89fc0b`). This is targeted review, not a claim to have read every added test.
|
||||
|
||||
Accepted design: explicit Hide and successive Escape may retain the latest admitted query's exact-current result data and notice. Visibility and permission to navigate are separate. This supports following an engineering investigation across files without repeating the lookup. Accept the three assertion changes in16904398 only together with their preserved hidden drawer, modal/chooser, worker release, selection, actual replacement/Undo, history, whole source and model controls. The decision follows the published interaction contract; compatibility with a peer test alone was not the reason.
|
||||
|
||||
Verified source seams in74542ae:
|
||||
|
||||
- The outer Choose envelope checks the current drawer visit, source key, exact result stamp and exact cached input before root shared reconciliation. Navigation availability retains root diagram chooser/reference-input exclusions and adds the Text menu exclusion.
|
||||
- Completion releases only its matching worker. Display checks the complete captured request, source key, exact returned input, result stamp and action. Navigation adds interaction/raw input, file, cursor and modal admission. Group installation does not reopen or switch the drawer.
|
||||
- The new Text command for diagram usages dispatches the root's captured `SymbolEvent::DiagramUsages`; the peer's empty adapter was not carried over.
|
||||
- Root focus-only source restoration still leaves `source_jump` empty, preserving actual Word/Line selection semantics. Document replacement retains an occupied worker identity without retaining its presentation authority.
|
||||
- Text commands/drawer events are admitted before generic input mutation. Passive References scroll handling stays separate from user intent.
|
||||
|
||||
Remaining review requirements for the next immutable slice:
|
||||
|
||||
1. The745 References view still computes stale/enabled from SnapshotKey alone. Match the early envelope's exact-input check once per view, with an already-displayed row test under same-key active and inactive buffer corruption. Preserve current request, reveal, drawer, chooser, cursor and whole model/source on rejection.
|
||||
2. The author subsequently identified that accepted local Text presentation actions also need the root's pending-navigation/allocation retirement, while rejected intents and passive scroll reports stay inert. Inspect that narrow hook and its current/stale controls before accepting the final composition.
|
||||
3. Inspect diagnostic publication/current-buffer matching, permanent editor/guard topology, include provenance, vendored accessor/notices and the minimal lock-file change in the final frozen commit. The first slice's publication code is not the final diagnostics implementation.
|
||||
|
||||
The feab full desktop gate belongs to the predecessor only:1096 passed,0 failed,3 existing manual ignores on581 unchanged inputs, closed11:37:08Z. It does not validate these Text commits. Root production inputs still440; no Text integration has been published or merged by this review.
|
||||
@@ -0,0 +1,20 @@
|
||||
# Recovery diagnostic publication correction
|
||||
|
||||
Frozen local source `554cfbd9fe6fd64f0eb3012bcbb3efd7a95f7424`, parent `92ff99eb54b75a67c6320cad93d11790413bbd8d`, clean `.local/tu`, branch `codex/text-union-956atf-20260913`. Parent owns independent review, integration and compiler/native acceptance. Other worktrees, root, dependencies and targets unchanged.
|
||||
|
||||
The confirmed source defect was `SourceRecovered` filtering `pending_save` and unconditionally stamping every remaining diagnostic with the current source key. A warning retained across a workspace-key departure could thereby acquire fresh action/annotation authority even though recovery had neither recomputed it nor replaced the retained drafts.
|
||||
|
||||
Only `crates/oa-desktop/src/app.rs` and `crates/oa-desktop/src/app/text_workspace/lifecycle_tests.rs` changed: +166/-7. The production change captures publication/source-key equality before filtering. It removes the recovery notice in all matching successful recovery receipts, but republishes the remainder only if they were current beforehand. A previously stale publication remains stale (or absent stays absent). Current warnings get a new generation, so queued old primary/related actions cannot replay. The subsequent existing successful-reload/unapplied-workspace, applied-draft-retention and reload-error branches remain unchanged. This follows the existing `reset_source_navigation_session` freshness guard; no new publication/cache framework or source navigation policy was added.
|
||||
|
||||
[Exact source manifest](text-recovery-publication-fix-source-manifest-20260913.json), SHA256 `b90d42d23601ab415afb5dde1406d66f6ae1c2af0a2076184a870bddb12e741b`, binds both committed blobs, sizes and SHA256s. [Exact source diff](text-recovery-publication-fix-20260913.patch), SHA256 `35b5b224a50aa7e3e7e1b535388e5e7239669719c0fcba8fcacae5323e80442c`.
|
||||
|
||||
Two new test declarations, both UNCOMPILED/UNRUN:
|
||||
|
||||
- `app::text_workspace::lifecycle_tests::recovery_retains_current_warning_authority_with_drafts_and_reload_failure`
|
||||
- `app::text_workspace::lifecycle_tests::recovery_does_not_republish_stale_warnings_after_workspace_key_departure`
|
||||
|
||||
Each runs a successful-load and reload-error receipt arm. The fixture saves a real private temporary source project, writes the established recovery journal format, derives pending-save diagnostics/target through `load_project`/`recovery_target`, dispatches normal `SourceRecover`, calls the actual `recover_snapshot` worker and delivers the matching `SourceRecovered` receipt. Returned App tasks are deliberately not polled, following the existing deterministic lifecycle harness. The error arm explicitly injects `receipt.disk = Err(...)` after successful real journal recovery; it does not claim to provoke an OS reload failure. Tests themselves have not run, so no journal execution/result is claimed by this handoff.
|
||||
|
||||
Both cases retain newer applied-workspace drafts. The positive publishes its warning after the draft edit and requires a current annotation snapshot and fresh primary/related navigation. The negative publishes before `Workspace::edit` advances the source key, preserves the old warning vector while lint is outstanding, and requires no fresh diagnostic message or annotation snapshot afterward. Both require removal of pending_save, consumed recovery ownership, unchanged source key/editor cursor/drawer visit/full raw bundle/accepted Project Arc/revision/Undo-Redo state, exact restored disk bytes, and rejection of captured pre-recovery primary/related actions before source interaction/reveal changes. The negative directly fails the unconditional 92ff republish predicate; the positive prevents a blanket diagnostic-clear workaround. Existing chooser/passive/retention tests and source branches are untouched.
|
||||
|
||||
Completed: standalone rustfmt (edition 2024, skip_children=true) for both owned files; git diff --check; exact two-file scope check; clean status after commit. No Cargo, rustc, build, tests, GUI, target changes or Gitea operations. No test names removed, no ignores added. Parent/fresh critic should inspect this source and run these two cases plus retained lifecycle/diagnostic and root recovery cases when the compiler lease permits. The broader Text union and public release remain unaccepted pending their gates.
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
# Independent recovery publication correction review
|
||||
|
||||
**Source acceptance for integration and fresh rerun; no remaining repair-required finding in this bounded correction.** This closes F1 at the source level from [the immutable 92ff review](text-union-final-independent-review-20260913.md). It does not establish test or native acceptance.
|
||||
|
||||
Reviewed `554cfbd9fe6fd64f0eb3012bcbb3efd7a95f7424`, exact parent `92ff99eb54b75a67c6320cad93d11790413bbd8d`. Verified clean `.local/tu` at that pin, the entire two-file diff (+166/-7), and both committed blob IDs/byte counts/SHA-256 values against the author's source manifest. No source edits, compiler, GUI, or test execution occurred.
|
||||
|
||||
## Production repair
|
||||
|
||||
At `crates/oa-desktop/src/app.rs:3395–3403`, `SourceRecovered` captures whether the previous diagnostic publication matches the retained source key before filtering `pending_save`. It republishes only when that precondition was true. Thus a stale publication stays stale, absence stays absent, and current retained warnings acquire a new generation that rejects queued old actions.
|
||||
|
||||
The fix does not clear valid warnings as a shortcut, mint authority from span validity, or recompute diagnostics over unrelated disk bytes. Subsequent unapplied reload, applied draft retention, previous-Save-As target handling, and reload-error branches are unchanged. A later destination/session reset uses its existing freshness check, so this guard does not make stale warnings current indirectly through that reset. Filtering the retained vector under a stale generation is safe here: actions and annotations remain rejected by the mismatching source key. The new generation on a current publication also causes annotation/gesture identity to change when the displayed vector changes.
|
||||
|
||||
## Test discrimination and limits
|
||||
|
||||
The two new exact declarations are:
|
||||
|
||||
* `app::text_workspace::lifecycle_tests::recovery_retains_current_warning_authority_with_drafts_and_reload_failure`
|
||||
* `app::text_workspace::lifecycle_tests::recovery_does_not_republish_stale_warnings_after_workspace_key_departure`
|
||||
|
||||
Each exercises successful reload and an explicitly injected `receipt.disk = Err(...)`. The fixture creates a private temporary source project and the real journal format, reads the actual pending-save target, dispatches normal `SourceRecover`, calls `recover_snapshot`, and delivers its matching receipt. Source inspection confirms that worker invokes `recover_project` and then `load_project`. App-returned asynchronous tasks are deliberately not polled. The error arm is a deterministic receipt-branch test after successful journal recovery, not evidence of an actual operating-system reload failure.
|
||||
|
||||
Both controls include newer applied-workspace drafts. The positive publishes the warning after that draft, so the warning is current; the negative publishes before `Workspace::edit` advances the key, preserving the old diagnostic vector while awaiting lint. This directly distinguishes the formerly unconditional republish: at 92ff the negative's publication-equality, missing-annotation and unavailable-action assertions fail. A blanket clear/revoke workaround fails the positive's retained warning, annotation and fresh primary/related navigation assertions.
|
||||
|
||||
The tests also require exact restored disk bytes, removed journal and pending-save notice, consumed recovery ownership, unchanged source key/cursor/drawer visit/raw bundle, exact accepted Project Arc, revision and Undo/Redo state. Captured old primary and related actions must remain inert before interaction/reveal changes; freshly captured current primary and related actions must navigate. The stale test's newly generated action check covers the primary location, while its captured-action loop covers both primary and related locations; both use the same publication admission. No test was removed or ignored.
|
||||
|
||||
This is a focused applied-workspace/key-departure test rather than an end-to-end Create File/Close File or OS failure test. No-publication and unapplied-reload branches receive no new dedicated test, but the simple Option guard handles absence and leaves the existing reload branch intact. These are scope limits, not additional repair requirements identified by this review.
|
||||
|
||||
## Required gates
|
||||
|
||||
Run both new cases and the retained `app::text_workspace::lifecycle_tests` suite, diagnostic/publication/gesture and local-boundary tests on the exact corrected source. Retain the root recovery regressions: `recovery_open_finds_first_save_journal_without_an_entry_file`, `recovery_after_first_save_failure_retains_target_then_retries_without_reentering_path`, `recovery_target_survives_edit_lint_apply_and_rejected_recovery_until_success`, and `recovery_of_previous_save_as_target_does_not_redirect_current_project`.
|
||||
|
||||
The combined Text union still needs fresh actual listing, relevant focused/full/strict gates, core raw-include tests, vendor/notice/package input binding, and native interaction verification described in the original review. This correction adds exactly two authored desktop tests to the prior inventory; it does not convert lexical counts to executed outcomes. All tests remain UNCOMPILED/UNRUN in this review.
|
||||
|
||||
## Evidence bindings
|
||||
|
||||
* Handoff: `text-recovery-publication-fix-handoff-20260913.md`, SHA-256 `c19bd1573e1579df012ec4cff0a03939b8866f282f51b6dba2b8234d86f5f036`.
|
||||
* Exact source manifest: `text-recovery-publication-fix-source-manifest-20260913.json`, SHA-256 `b90d42d23601ab415afb5dde1406d66f6ae1c2af0a2076184a870bddb12e741b`.
|
||||
* Exact diff: `text-recovery-publication-fix-20260913.patch`, SHA-256 `35b5b224a50aa7e3e7e1b535388e5e7239669719c0fcba8fcacae5323e80442c`.
|
||||
* `app.rs` blob `1e80ec40bb23c6c205fb79f5fb9300319a3996da`, 252446 bytes, SHA-256 `d96da53d9d27a32af4a0efa587dc9eded3eb4e8be3abe4eb254c42b0f7d937f1`.
|
||||
* `app/text_workspace/lifecycle_tests.rs` blob `53b62878f2a6f44a5faf2b9981d243b1dac86d8c`, 23909 bytes, SHA-256 `077cb8592297ef04c506abf8a97773cee142078def0ea5428fb859356c7b7206`.
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"source": "554cfbd9fe6fd64f0eb3012bcbb3efd7a95f7424",
|
||||
"base": "92ff99eb54b75a67c6320cad93d11790413bbd8d",
|
||||
"files": [
|
||||
{
|
||||
"path": "crates/oa-desktop/src/app.rs",
|
||||
"git_blob": "1e80ec40bb23c6c205fb79f5fb9300319a3996da",
|
||||
"bytes": 252446,
|
||||
"sha256": "d96da53d9d27a32af4a0efa587dc9eded3eb4e8be3abe4eb254c42b0f7d937f1"
|
||||
},
|
||||
{
|
||||
"path": "crates/oa-desktop/src/app/text_workspace/lifecycle_tests.rs",
|
||||
"git_blob": "53b62878f2a6f44a5faf2b9981d243b1dac86d8c",
|
||||
"bytes": 23909,
|
||||
"sha256": "077cb8592297ef04c506abf8a97773cee142078def0ea5428fb859356c7b7206"
|
||||
}
|
||||
],
|
||||
"new_tests_unrun": [
|
||||
"app::text_workspace::lifecycle_tests::recovery_retains_current_warning_authority_with_drafts_and_reload_failure",
|
||||
"app::text_workspace::lifecycle_tests::recovery_does_not_republish_stale_warnings_after_workspace_key_departure"
|
||||
],
|
||||
"checks": "Standalone rustfmt and git diff --check only. No Cargo/rustc/test/UI execution."
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
# Independent review: retained Text references and navigation authority
|
||||
|
||||
Source-only review, 2026-09-13. Reviewed the published contract at `2df7f580aa4bd728a728c83ac10e6ccc956ef069`, implementation at `9fd76aef3ae2810667d3f2b031fc43692fc04c89`, and affected root tests at `feab2020d8e5b6bfdb59c86ab4aee161617b8b6f`. Read the existing local Text/root integration review as context. No mutable `.local/tu` files, compiler, GUI, source edits, or Gitea writes. New integration commits mentioned below are author reports, not reviewed sources in this note.
|
||||
|
||||
## Decision and user benefit
|
||||
|
||||
Retaining the latest exact-current References data after Hide, a tab switch, file/page departure, or a modal is a justified interaction decision. References are an investigation the user may consult across files; hiding that investigation should not require recomputation or erase its captured subject and grouping. A late completion may finish the investigation, but must not move the caret, revive the old selection, reopen the drawer, select References over another tab, or alter a diagram chooser. Explicitly reopening References is a new visibility action, not renewed permission for the old direct-definition jump.
|
||||
|
||||
This is supported directly by the published `harness/text-workspace-interaction-contract-20260912.md`, sections “Retained results do not retain permission to navigate” and the successive-Escape rule. It is a derived design decision, not a quotation of a user requirement. Its cost is that retained rows can be historical: the captured subject and stale state must remain visible, and row admission must agree with their enabled appearance. The root's previous discard-on-second-Escape behavior is coherent but provides less continuity; retaining data is preferable under this explicit visibility/navigation separation.
|
||||
|
||||
The root expectation changes are justified on that basis, not simply because peer tests expect them. In `app/source_symbols/tests/departure_selection.rs:44`, replace only the second-Escape `results/notice == None` oracle with exact retained Arc and notice, with the drawer still hidden. Preserve the first-Escape Find closure, absence of further Escape subscriptions after second closure, effective Word/Line selection, actual replacement and Undo, whole SourceBundle, revision, history and accepted-snapshot assertions. The two root tests at `app/source_symbols/tests.rs:1539` and `:1586` may likewise expect exact retained completion data while preserving worker release, modal/chooser, no navigation/reveal, cursor, source, and model assertions. A retained Arc alone would be an inadequate oracle.
|
||||
|
||||
## Source findings
|
||||
|
||||
**F1 — conditional P2 in the published version: enabled appearance and early admission trust the key more than the final row handler does.** At `9fd76ae:crates/oa-desktop/src/views/source_symbols.rs:25`, `stale` compares only `SnapshotKey`; enabled rows add only navigation availability. The outer Choose envelope at `app.rs:1205–1220` similarly checks drawer, visit, availability, key and result stamp, but not cache bytes. The later `app/source_symbols.rs:223` Choose arm checks `source_snapshot_matches` and rejects stale bytes. Thus a deliberately changed workspace buffer under the same key can paint as fresh/enabled, enter shared interaction invalidation, and only then refuse navigation. This does not demonstrate a stale jump or model mutation. Normal `SourceEdit` calls Workspace::edit, which advances the revision for changed text (`app.rs:2987`, `source_workspace.rs:233`), so the same-key case is an adversarial invariant violation rather than an established ordinary-user path.
|
||||
|
||||
Required correction for the union's stated exact-byte guarantee: the early Choose envelope must reject a missing/nonmatching exact cache before shared interaction changes, and the visible stale/disabled state must use the same current-source evidence. A single computed view-level validity value suffices; do not repeat whole-input comparison per row or introduce a new parser/index rebuild. Positive control: unchanged bytes/current visit permits the correct original row. Negative control: retain a displayed result, mutate an active or inactive loaded buffer without advancing its key, then assert stale/disabled presentation and that the captured Choose preserves current interaction, request/reveal, drawer/visit, chooser, cursor, source and model. The existing hidden-completion same-key test is necessary but does not cover this already-displayed-row path. Falsifier: a source-level current-byte check at both the view and pre-interaction envelope, with that focused negative control. Arendt reports `74542ae2` already adds the envelope byte check and is examining the view; these reports are not independent verification of those commits.
|
||||
|
||||
**No source finding against the core retention/completion separation.** `source_symbols.rs:373–430` first recognizes the occupied worker's job, releases that slot, and separately evaluates navigation and display ownership. Display requires the exact stored Request, current key, exact source snapshot, result stamp and action. Navigation additionally requires the current interaction token, raw input clock, active path, cursor and current modal/availability admission. `source_interaction` at `:130` revokes request/reveal/jump while leaving display ownership intact. Completion installs result data and initial file groups but never calls drawer visibility or scroll restoration. `text_workspace.rs:271` installs groups only for the matching not-yet-installed presentation; it does not rotate the visit or overwrite later group choices. `show_text_drawer` at `:613` revokes old navigation, rotates the visit, and restores retained scroll only on an explicit References opening.
|
||||
|
||||
Exact-current evidence is more than text equality in one file. `source_navigation/query.rs:769–799` checks key, entry, applied state, complete loaded file count, unique paths, every path's exact bytes, admission and validation evidence. Equal bytes after Undo do not authorize an older key. Document reset (`app.rs:979`) reconstructs presentation state while preserving only the occupied worker identity. Destination/session reset and repair replacement use `clear_source_presentation` (`app.rs:683`), clearing display ownership and Text state while retaining that slot. Therefore the old completion can release its own resource but cannot populate the new document, even when its paths and text happen to match.
|
||||
|
||||
One nuance: the published implementation has one active worker. A second query attempted while it is occupied is explicitly refused with “Navigation is finishing. Try again shortly.” It may explicitly expose References, but is not a newly admitted query and does not replace `display_request`. The old completion may subsequently fill its own captured subject. Describe the guarantee as “latest admitted query wins”; do not claim queueing or supersession of every attempted command. Once a new request is admitted, an old/duplicate completion cannot release its slot or replace its display.
|
||||
|
||||
## Required acceptance invariants and controls
|
||||
|
||||
1. **Visibility:** finish a direct-definition request after Hide, Problems/Status switch, or file/page departure. Release the matching slot and retain the exact result Arc only when source remains current. Drawer/tab/visit, scroll, focus, active file, cursor, effective selection, back history, source bytes and model remain unchanged. Explicit reopening shows the retained subject without replaying direct navigation. Published controls: `delayed_definition_after_hide_or_tab_change_retains_data_without_reopening_or_focus` (:1809), `close_during_busy_retains_hidden_completion_without_reopening_or_navigation` (:590), and `completion_retains_current_display_but_rejects_navigation_after_context_changes` (:506).
|
||||
2. **Freshness:** changed revision, new session, missing/added file or exact-byte mismatch cannot publish a fresh result or navigate. Include an inactive-file change and deliberately unchanged key; unchanged source is the positive control. Published `hidden_completion_checks_exact_bytes_even_when_snapshot_key_was_not_advanced` (:1921) covers the adversarial changed-byte completion. F1 requires the separate existing-row control described above.
|
||||
3. **Worker and query ownership:** unknown job cannot free the current worker; duplicate old completion cannot replace a later admitted request; same job with changed Request envelope cannot publish; matching old job after reset frees only its retained slot and leaves new presentation empty. Published controls at :568, :1337, :1858 and :1893 inspect these cases. Preserve the distinction between a rejected busy attempt and an admitted new request.
|
||||
4. **Union modal admission:** a current completion may populate retained data behind the root diagram chooser, reference input, Text menu or rename modal, but cannot reconcile/replace that chooser, switch page/file, reveal, alter the effective selection, mutate the model, or issue a later autonomous jump when the modal closes. Keep root chooser/reference-input exclusions plus peer Text-menu exclusion in navigation availability. Process completion before generic shared interaction/reconciliation to release the worker without side effects. Peer `None` DiagramUsages adapter is not acceptable for the root union; keep its captured target/chooser semantics.
|
||||
5. **Old UI authority:** hiding/reopening or References→Problems→References rotates visit ownership; an old row click or scroll message cannot mutate the new visit. Choosing a currently visible valid row remains possible. Retained data is not permission for old widgets. Retained stale groups may expand for inspection, but their targets cannot navigate. The contract's persistent input guard is needed for a press/release across coalesced redraws, in addition to message admission.
|
||||
6. **Escape/editing:** menu, Find and drawer close one layer per captured key. Closing Find leaves the existing drawer visit intact. Closing the drawer hides it and revokes navigation while retaining data/notice. Preserve root's real Word/Line insertion and Undo oracle, not only cursor equality: the effective selection can differ from the raw cursor range.
|
||||
|
||||
## Bounds and disposition
|
||||
|
||||
The exact published code and authored controls support the retention decision, with F1's current-byte presentation/early-boundary correction required for the stronger union invariant. I did not find a path in the reviewed completion handler that reopens a hidden panel, restores an old selection, displaces a newer admitted query, or admits a changed-byte successful result. Error completions lack a returned source snapshot and can update only an error notice after owner/key checks; they cannot publish rows or navigate. This is not a claim that an error is exact-byte-validated.
|
||||
|
||||
No tests were run and no integrated/native acceptance is asserted. The peer availability predicate is insufficient by itself for root's additional chooser/reference-input state. The union production commit, its three test-only expectation changes, new gate outcomes, rendered stale cue at minimum width, and real hidden/tab/modal interactions need parent integration review and verification. Parent remains the semantic and publication owner.
|
||||
@@ -0,0 +1,67 @@
|
||||
# Independent Text/root source review — 2026-09-13
|
||||
|
||||
## Disposition and scope
|
||||
|
||||
**Repair required before admitting this source candidate for the combined rerun.** One confirmed P2 freshness defect is described below. The remaining inspected integration seams are consistent with the published Text contract and retained root behavior, subject to actual compilation, tests, notice generation, and native verification. This is a source review, not runtime acceptance.
|
||||
|
||||
Reviewed immutable commit `92ff99eb54b75a67c6320cad93d11790413bbd8d`, relative to root `feab2020d8e5b6bfdb59c86ab4aee161617b8b6f`. The worktree was verified clean at that pin before review; subsequent author corrections are outside this report. Published contract/source comparators are `2df7f580aa4bd728a728c83ac10e6ccc956ef069` and `9fd76aef3ae2810667d3f2b031fc43692fc04c89`, including `harness/text-workspace-interaction-contract-20260912.md`. The parent accepted the three retained-data assertion changes at `16904398dbddda9c073b3c420807e406086ad2ea`; I independently reviewed their meaning rather than treating that acceptance as proof.
|
||||
|
||||
No compiler, application, GUI, package, notice collector, or test execution was performed. No production source was edited. All test descriptions below concern authored assertions. The separate S3 worktree remains frozen.
|
||||
|
||||
## F1 — P2: recovery republishes stale diagnostics as current
|
||||
|
||||
**Source:** `crates/oa-desktop/src/app.rs:3393–3399`, `Message::SourceRecovered`; publication helper at approximately 718. The handler filters `pending_save` from the retained diagnostic vector and unconditionally calls `publish_source_diagnostics`. That helper creates a diagnostic publication stamped with the current `source_key`, regardless of the vector's original publication.
|
||||
|
||||
The vector can legitimately outlive its source key. `create_source_file` (approximately 4297–4361) edits the entry include, discovers a file, changes the workspace/version and requests lint without replacing the old diagnostics immediately. `SourceCloseFile` (approximately 3357–3362) similarly changes workspace membership/version while an old diagnostic vector remains retained. This is safe while the old publication remains stale. Recovery of an applied source workspace is allowed with current drafts and intentionally retains those drafts. Both the applied `Ok(disk)` branch and the `Err(error)` reload branch therefore can reach the unconditional republication without installing source bytes corresponding to the old warning spans.
|
||||
|
||||
The resulting warning/related locations now pass the publication/key check in `app/text_workspace.rs:616–632`, provided their old spans still fit a current file. A valid byte boundary is not evidence that the diagnostic was produced for those bytes. By contrast, `reset_source_navigation_session` already captures whether the old publication was current before deciding whether it can be republished.
|
||||
|
||||
**Required repair:** capture old publication freshness before filtering. Only mint a current publication for retained warnings when the old publication was current for the retained source. Otherwise leave authority revoked/stale or replace the diagnostics with results computed for the current source. Do not change the recovery policy that preserves current model and drafts.
|
||||
|
||||
**Discriminating controls:** start with a warning containing primary and related locations plus a pending-save notice. For a current publication, deliver a matching successful recovery receipt and verify that only the pending-save notice disappears and the current locations remain actionable. For a stale publication after a legitimate workspace/key change, deliver matching recovery and verify that no retained warning or related location becomes actionable, including when the disk reload fails. Preserve full Project, source bundle, drafts, and recovery semantics. Tests must distinguish publication authority, not merely check the displayed warning count.
|
||||
|
||||
Parent independently confirmed this finding and assigned a separate bounded correction. That future repair is not included in this pin's disposition.
|
||||
|
||||
## Verified integration invariants
|
||||
|
||||
### Diagnostics and exact source ownership
|
||||
|
||||
* Ordinary editor mutation and Undo/Redo update workspace/source identity and revoke old diagnostics before requesting lint. Source reset/open paths replace or clear presentation state. Destination/session reset checks whether the previous diagnostic publication was current before restoring it. F1 is the remaining observed exception.
|
||||
* `SourceIncludedLoaded` checks the matching version/entry and exact retained active, inactive, and detached file bytes before installing recovery metadata, discovery, or diagnostics. Newly discovered files are intentionally allowed. `crates/oa-core/src/source_files.rs` now lints the raw reachable bundle instead of publishing post-stabilization compiler spans; this preserves original include/source coordinates. Two authored core tests distinguish missing-ID and legacy cases.
|
||||
* Diagnostic actions require the current Problems drawer visit, exact publication identity, current source key, loaded target file, ordered span, and UTF-8 boundaries before root navigation/interaction changes. Annotation presentation additionally checks that the active editor buffer equals the captured source text. These checks rely on legitimate setter/version ownership; they should not be described as a universal complete-byte witness on every diagnostic event. References have the additional whole-snapshot byte check described below.
|
||||
|
||||
### Retained References and stale input
|
||||
|
||||
* Retained data does not itself reopen the drawer or authorize navigation. Completion separately checks ownership of the in-flight request, the latest admitted display request, snapshot identity and exact bytes. Navigation additionally requires the captured interaction/raw input clock, file/cursor, and availability. Hide/departure retention improves return-to-results workflow without granting permission to reveal the old selection.
|
||||
* `app/source_symbols.rs:32–76` rejects stale Choose envelopes, including cache byte mismatch, before root shared boundaries. `source_results_current` checks key and exact cached snapshot. The visible References view computes that validity once and uses it for both stale summary and row enablement; this fixes the earlier same-key changed-buffer paint/dispatch discrepancy.
|
||||
* The authored `same_key_changed_bytes_mark_retained_rows_stale_before_choice_boundaries` tests both active and inactive buffer mutations with the same key, shaped stale presentation, and preservation of a pending reveal/intent. It is a useful falsifier; it has not been run.
|
||||
* The scoped-Escape assertion change checks the exact retained result Arc and notice after closing References. Word/Line effective selection, actual subsequent replacement and Undo, whole source/model, accepted snapshot, and history assertions remain. The two modal/chooser completion changes likewise require the exact retained completion Arc while retaining navigation, cursor, worker, chooser and model/source checks. The root selection helper and mounted focus-selection test file are byte-identical to the base. Retention is justified under the published contract, not merely for compatibility with peer tests.
|
||||
|
||||
### Root boundaries and permanent widgets
|
||||
|
||||
* Text events enter their own admission before shared root interaction handling. Wrong document/session/visit, stale menu tokens or diagnostic publications, invalid geometry, and blocked commands return before their local mutation boundary. Accepted drawer/menu/diagnostic actions call the existing root pending-navigation and allocation hooks. Source commands dispatch through the existing root update path.
|
||||
* `ReferenceScrolled` updates passive geometry without invoking those hooks or changing interaction; valid `PreviewScrolled` retains the root's early inert return. Existing root reference chooser, Text menu, rename and other modal availability checks are composed rather than replaced with peer-only guards.
|
||||
* The editor is one permanent `text_editor` with the existing content, root identity/bindings/style/highlighter. Decorations, viewport sensor and diagnostic gesture guard remain mounted across diagnostic availability changes. The guard quarantines obsolete pointer terminals and prevents old releases from activating replacement rows. Widget `diff`, layout, operate, update and overlay paths forward to the actual child rather than reconstructing a second editor.
|
||||
* The annotation widget reads geometry from the real editor through the small read-only vendor accessor. It owns tooltip body/footer paragraph objects through deferred rendering, ends editor borrowing before later rendering operations, and bounds tooltip content. Hover is disabled behind blocking chooser/rename state. The inspected mounted/CPU tests do not establish production GPU/native lifetime or rendering success.
|
||||
* Authored positive and negative local-boundary tests preserve complete source/model/history and camera/allocation boundary values where applicable. The positive control retires a real pending destination and allocation epoch; stale contexts preserve them. These assertions give meaningful discrimination beyond testing only a local boolean.
|
||||
|
||||
## Inventory, vendor and test evidence
|
||||
|
||||
The independent audit verifies the exact 107-path change inventory: 22 modified and 85 new files. Base/final Git blob IDs, lengths and SHA-256 values were checked, plus exact peer blob identity for all 71 vendor files: 200 recorded base/final/peer bindings. The lexical test-name additions/removals were independently derived, including `tokio::test` attributes, and agree with the submitted inventory: **91 added, 5 removed; desktop net +84 and core net +2**. These are source counts, not actual test-list membership or successful outcomes.
|
||||
|
||||
The three newly imported existing-peer manual ignores are `final_multi_glyph_cluster_anchor_uses_logical_trailing_advance_edge`, `mixed_direction_omitted_separator_has_one_logical_predecessor_anchor`, and `annotation_projection_cost_distributions`. They remain unexecuted limitations; they must not be counted as passing verification.
|
||||
|
||||
The workspace Cargo change adds the vendor exclusion and iced_widget patch. The lockfile removes that package's registry source/checksum without changing its resolved dependencies; desktop Cargo inputs remain unchanged. All 71 vendored files match the reviewed peer source, including license, upstream metadata and patch rationale. The documented upstream accessor patch is narrow and read-only. `.gitattributes` preserves exact vendor bytes.
|
||||
|
||||
The notice collector distinguishes workspace packages from non-workspace local dependencies, verifies repository containment/reparse constraints, requires the vendored license, records local source hashes/path and includes patch rationale. Registry supplements require actual registry checksum evidence. The imported collector retains this root's desktop/server default scope. Its behavior has been reviewed, not executed. Future gates/package manifests must include the new vendor inputs; old input counts and former core equivalence evidence cannot certify this changed source.
|
||||
|
||||
## Evidence bindings and remaining validation
|
||||
|
||||
* Handoff: `.local/text-union-source-handoff-20260913.md`, SHA-256 `66a56726385e5969751a32c7e3964eed41a52002f4023ace232629d984c69659`.
|
||||
* Submitted exact inventory: `.local/text-union-source-inventory-20260913.json`, SHA-256 `a415cfeaa7a412bcb897ae779a45d7894efd8f77bed29a154de550b8ddd2f4e4`.
|
||||
* Isolated boundary diff: `.local/text-union-local-mutation-boundary-20260913.patch`, SHA-256 `26d3d86500dd0276c9e276fe8726da4d28b9f39dbdb082cce5108708a9b86fcb`.
|
||||
* Independent source audit: `.local/text-union-independent-source-audit-20260913.json`, SHA-256 `a96c27806d9c079e982a5d26806bc9cef24ab8714a58d45d9375599e924a0c13`.
|
||||
* Parent stage-one context: `.local/parent-text-union-stage1-review-20260913.md`, SHA-256 `d5c063005d4dd1a804212e8b7deaae226e7d965cdc1988bd20d165ed23e8dcd9`.
|
||||
* Earlier independent retention analysis: `.local/text-retained-results-independent-review-20260913.md`, SHA-256 `22aaf828c514e7d58e6f7b0b3132ed43eefb736e4bde78a1529851e6cb89fc0b`.
|
||||
|
||||
Review was concentrated on changed production ownership/lifecycle seams and discriminating tests, with exact inventory verification; it was not a line-by-line independent proof of every imported test or vendored upstream implementation. After F1 is corrected and reviewed, obtain fresh exact-source listing/focused/full/strict evidence, notice/package validation and realistic native Text/graphics workflows. No successful rerun or final Text/native acceptance is asserted here.
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"source": "92ff99eb54b75a67c6320cad93d11790413bbd8d",
|
||||
"base": "feab2020d8e5b6bfdb59c86ab4aee161617b8b6f",
|
||||
"inventory_sha256": "a415cfeaa7a412bcb897ae779a45d7894efd8f77bed29a154de550b8ddd2f4e4",
|
||||
"changed_paths": 107,
|
||||
"verified_base_final_peer_blob_bindings": 200,
|
||||
"exact_peer_vendor_files": 71,
|
||||
"lexical_test_additions": 91,
|
||||
"lexical_test_removals": 5,
|
||||
"runtime": "UNRUN"
|
||||
}
|
||||
@@ -0,0 +1,218 @@
|
||||
# Text workspace and diagnostics union: frozen source handoff
|
||||
|
||||
Local-only source candidate; compilation, tests, native behavior, packaging and integration are UNRUN. Parent owns review, compiler lease, integration and publication. No further source work is active.
|
||||
|
||||
## Immutable inputs and commits
|
||||
|
||||
- Worktree `.local/tu`, branch `codex/text-union-956atf-20260913`; clean after commit and again during handoff readback.
|
||||
- Base `feab2020d8e5b6bfdb59c86ab4aee161617b8b6f` (includes reviewed PreviewScrolled correction).
|
||||
- Workspace peer `2df7f580aa4bd728a728c83ac10e6ccc956ef069`.
|
||||
- Diagnostics peer `9fd76aef3ae2810667d3f2b031fc43692fc04c89`, published evidence `32368713ef15272c697c7e6388dffc8a29bfae3e`; its parent `b4b860f2776aa8251306d83ff58362c0359176ef` has the same crates/scripts/Cargo inputs as 2df. No later defaults/source8 proposal imported.
|
||||
- `74542ae2c1b7af3f4f34efcf6a9774822ba4858d`: workspace composition and captured drawer admission (20 files, +5480/-736).
|
||||
- `16904398dbddda9c073b3c420807e406086ad2ea`: separately reviewable three retained-result assertions (2 files, +20/-3).
|
||||
- FINAL `92ff99eb54b75a67c6320cad93d11790413bbd8d`: diagnostics/provenance/dependency composition, byte-current References presentation and accepted local-boundary hook (98 files, +35959/-208).
|
||||
|
||||
The intermediate first commit deliberately retains three old assertions; gate the coherent final source. Root source, AGENTS, PROJECT_GOAL, native fixtures and package configuration were not edited.
|
||||
|
||||
## Exact source delta and dependency scope
|
||||
|
||||
[Source inventory](text-union-source-inventory-20260913.json) records every base/final Git blob, byte count and SHA256: 107 changed paths, 85 new and 22 modified. Of these, 71 are exact published vendored files; 36 are other files. This is a source delta, not a new admitted compiler input map. SHA256: `a415cfeaa7a412bcb897ae779a45d7894efd8f77bed29a154de550b8ddd2f4e4`.
|
||||
|
||||
Cargo.toml adds only the iced_widget workspace exclusion and crates.io local patch. Cargo.lock removes only iced_widget 0.14.2 registry source and checksum, leaving root resolution/dependencies intact. Desktop Cargo.toml is unchanged (root already had unicode-segmentation). The 71 vendored files, including license, upstream manifest, patch rationale, original manifests, VCS metadata and SVG asset, match 9fd Git blobs byte for byte. Batch cat-file validation checked headers, sizes and each trailing LF. The published upstream modification is the read-only Content::with_editor accessor. Both Windows notice scripts are imported together. `.gitattributes` preserves exact vendor bytes. CLI change is comment-only; core discovery now derives diagnostics from original reachable bytes before UUID elaboration.
|
||||
|
||||
A new build recorder must cover the actual vendored dependency sources, manifests and included assets; the old 581-file root manifest is not sufficient by assumption. Core provenance production also changed, so old oracle/core equivalence must not be inferred from a version label.
|
||||
|
||||
## Composition and independent-review seams
|
||||
|
||||
The editor remains in permanent strip/Find/editor/drawer/status slots with retained sensor and input guard. Root source-editor palette, dynamic IDs, F2/F12, chooser/reference-input restrictions, KeyboardBoundary subscription partition and valid PreviewScrolled early dispatch remain. Root behavior, diagram, forms, context menu and style trees have no base-to-final diff.
|
||||
|
||||
Drawer Show/Hide/Resize captures document, source session and drawer visit. Rejection occurs before shared root boundaries. Source commands re-enter existing guarded root dispatch. The real compact Diagram Usages command now starts the root captured source query and existing diagram chooser, rather than the peer placeholder.
|
||||
|
||||
Accepted local Text mutations use the existing pending-reveal reconciliation and allocation-before hooks only after their own admission. See [explicit hook and positive-test diff](text-union-local-mutation-boundary-20260913.patch), SHA256 `26d3d86500dd0276c9e276fe8726da4d28b9f39dbdb082cce5108708a9b86fcb`. This is the exact 169-to-92 diff for text_workspace.rs and palette_union.rs; it also contains the annotation-snapshot accessor and debug test cfg changes. Hook call sites: admitted menu open/current dismiss, current Show/Hide, finite changed Resize, admitted ToggleFile, current diagnostic jump and admitted Drawer command. Dispatched commands use App::update; passive reference/preview measurements do not enter the hook. Review whether every accepted-local path should retire allocation/navigation; the positive mounted test explicitly requires this, while stale controls preserve them.
|
||||
|
||||
References exact-cache validity is computed once per visible References view and shared by stale summary and row enabled state. Early Choose also checks exact current source bytes before any source-interaction boundary. The new displayed-row negative changes either active or inactive bytes without advancing SnapshotKey, checks actual shaped Stale feedback, then proves a captured choice preserves pending reveal and other intent. Ordinary Workspace edits advance the key; this is an adversarial identity test, not a claimed observed runtime corruption.
|
||||
|
||||
Raw IncludesLoaded admission compares current entry and all retained file bytes before discovery metadata or diagnostic publication. Diagnostic decorations retain owned current-frame tooltip paragraphs for the deferred renderer. Chooser/modal availability suppresses diagnostic actions/hover details without removing current marks. Publication during rename leaves a real mounted preview report passive.
|
||||
|
||||
## Retention contract and preserved tests
|
||||
|
||||
Primary contract: `2df7f580:harness/text-workspace-interaction-contract-20260912.md`, especially retained results versus navigation permission and the permanent five-slot lifecycle. Independent source review: [retention review](text-retained-results-independent-review-20260913.md), SHA256 `22aaf828c514e7d58e6f7b0b3132ed43eefb736e4bde78a1529851e6cb89fc0b`. Parent accepted the following separate 169 assertions under that contract:
|
||||
|
||||
- `scoped_escape_retains_references_then_closes_them_without_losing_effective_selection`: second Escape hides the drawer, retains the exact result Arc and notice; Word/Line selection, replacement, Undo and exact source/model/history checks remain.
|
||||
- `combined_modal_completion_releases_worker_without_navigation_or_model_changes`: exact current result Arc can finish behind modal; worker release and absence of navigation/source/model effects remain.
|
||||
- `combined_reference_chooser_blocks_navigation_and_completion_precedes_reconciliation`: same retained-data rule, preserving chooser identity, early completion and absence of navigation effects.
|
||||
|
||||
All root 16 selection names remain. Root selection helper and four focus-fixture bytes are unchanged. Four accidentally duplicated peer departure bodies were removed from the parent tests.rs because byte-identical bodies already exist under root `tests/departure_selection.rs`; their hashes are in the inventory. Root child-module registration/paths are retained. No test has been counted twice to inflate the expected listing.
|
||||
|
||||
## Authored union evaluators (all UNRUN)
|
||||
|
||||
The inventory gives exact source path/name pairs. Seven union-specific cases exercise:
|
||||
|
||||
1. Stale captured/mounted drawer controls preserve pending navigation, source/evidence, camera and allocation intent.
|
||||
2. Current Show/mounted Resize/Hide retire pending destination and advance allocation epoch while remaining live.
|
||||
3. Compact Diagram Usages follows actual query completion into the existing captured chooser.
|
||||
4. Independently wrong document/session/visit rejects each drawer action.
|
||||
5. Actual chooser suppresses diagnostic action and mounted hover until closed; old publication remains rejected and a new target works.
|
||||
6. Diagnostic publication during modal rename preserves actual fractional preview report and rounded painted coordinate without interaction/allocation changes.
|
||||
7. Already displayed References with same key but changed active/inactive bytes shows Stale and rejects old Choose before boundaries.
|
||||
|
||||
Mounted annotation bridge uses the actual App snapshot/availability/raw clock and existing CPU graphics Editor/Recorder evaluator, copying Content for the renderer type. It does not claim a native window or the complete production sensor stack. Some mounted fixtures are debug-only, consistently with existing evaluator support.
|
||||
|
||||
Lexical source inventory: 91 added declarations and 5 removed, net +86 across core/desktop; core +2, desktop +89/-5 (net +84). This is NOT an actual Cargo listing. Three imported manual ignored tests are new: both source_annotations anchor witnesses and annotation_projection_cost_distributions. The seven authored union cases have no ignore marker. Existing manual exceptions remain. Future admission must derive exact runtime membership and ignores from the actual binary/configuration.
|
||||
|
||||
Five removed baseline names are explicitly replaced, not silently dropped: the three source_symbols close/completion/Escape tests become retention-contract cases; the two old source-header layout/scroll tests become permanent five-slot and retained editor-scroll tests. Their exact old/new names are listed in the inventory and appendix below.
|
||||
|
||||
## Verification and remaining acceptance
|
||||
|
||||
Completed source-only checks: standalone rustfmt (edition 2024, skip_children=true) for owned changed Rust paths; `git diff --check HEAD -- . ':!crates/vendor/iced_widget/**'`; exact 71-file vendor comparison; protected-path/root test-byte checks; clean Git status after final commit. Vendor formatting is intentionally untouched; upstream doc-comment whitespace is retained. No Cargo, rustc, tests, build, GUI, native, Gitea publication or integration was invoked for this union.
|
||||
|
||||
Parent/fresh critic should review 92ff and the hook/retention seams before issuing a compiler lease. Required next evidence includes actual full test listing/input capture, focused union/selection/rename/diagnostic/geometry tests, affected core provenance and notice tests, full/strict gates, then native compact layout, selection/edit/Undo, chooser/diagnostic hover, held-pointer replacement and Details/Preview continuation. Package notices and artifact pinning must reflect the local Iced dependency. Existing peer/native receipts remain evidence for their own pins only.
|
||||
|
||||
## Exact added/removed declaration names by file
|
||||
|
||||
### crates/oa-core/tests/source_files.rs
|
||||
|
||||
- Added `discovery_diagnoses_legacy_semantics_before_source_rewrite`
|
||||
- Added `discovery_diagnostics_keep_raw_no_uuid_spans`
|
||||
|
||||
### crates/oa-desktop/src/app.rs
|
||||
|
||||
- Added `includes_loaded_diagnostics_use_raw_newly_discovered_bytes`
|
||||
- Added `includes_loaded_diagnostics_use_retained_overlay_and_ignore_old_version`
|
||||
- Added `includes_loaded_rejects_mismatched_retained_bytes_before_publication`
|
||||
- Added `includes_loaded_requires_each_inactive_detached_overlay`
|
||||
|
||||
### crates/oa-desktop/src/app/source_rename/navigation_union_tests/palette_union.rs
|
||||
|
||||
- Added `compact_diagram_usages_command_uses_captured_query_and_existing_chooser`
|
||||
- Added `current_compact_drawer_controls_and_mounted_resize_remain_live`
|
||||
- Added `stale_compact_drawer_controls_preserve_current_navigation_and_evidence`
|
||||
|
||||
### crates/oa-desktop/src/app/source_rename/preview_scroll_tests.rs
|
||||
|
||||
- Added `diagnostic_publication_during_rename_keeps_actual_preview_report_passive`
|
||||
|
||||
### crates/oa-desktop/src/app/source_symbols/tests.rs
|
||||
|
||||
- Added `close_during_busy_retains_hidden_completion_without_reopening_or_navigation`
|
||||
- Added `completion_retains_current_display_but_rejects_navigation_after_context_changes`
|
||||
- Added `delayed_definition_after_hide_or_tab_change_retains_data_without_reopening_or_focus`
|
||||
- Added `escape_hides_results_and_cancels_navigation_but_retains_latest_display`
|
||||
- Added `hidden_completion_checks_exact_bytes_even_when_snapshot_key_was_not_advanced`
|
||||
- Added `matching_old_worker_cannot_replace_a_newer_display_owner`
|
||||
- Added `popup_escape_has_no_duplicate_bridge_and_dismissal_preserves_underlying_find_and_drawer`
|
||||
- Added `retained_choices_cannot_replay_after_hide_or_references_problems_references`
|
||||
- Added `same_key_changed_bytes_mark_retained_rows_stale_before_choice_boundaries`
|
||||
- Added `same_worker_with_changed_request_envelope_cannot_publish_or_navigate`
|
||||
- Removed `close_during_busy_hides_panel_and_completion_does_not_reopen_it`
|
||||
- Removed `completion_rejects_file_edit_session_cursor_interaction_and_raw_input_changes`
|
||||
- Removed `escape_dismisses_results_and_cancels_busy_navigation_without_changing_sources`
|
||||
|
||||
### crates/oa-desktop/src/app/text_workspace/lifecycle_tests.rs
|
||||
|
||||
- Added `canceled_or_failed_open_that_installs_nothing_retains_current_presentation_and_diagnostics`
|
||||
- Added `invalid_repair_open_clears_prior_presentation_and_publishes_current_problems_preserving_worker`
|
||||
- Added `saved_new_destination_does_not_revalidate_already_stale_warning_locations`
|
||||
- Added `saved_new_destination_republishes_current_warning_and_refuses_old_primary_and_related`
|
||||
|
||||
### crates/oa-desktop/src/app/text_workspace/tests.rs
|
||||
|
||||
- Added `actual_chooser_blocks_diagnostic_actions_and_mounted_hover_until_closed`
|
||||
- Added `annotation_snapshot_requires_exact_current_bytes_and_publication`
|
||||
- Added `annotation_snapshot_tracks_real_file_round_trips_without_changing_model`
|
||||
- Added `current_diagnostic_target_navigates_but_changed_source_or_clear_refuses_it`
|
||||
- Added `diagnostic_span_must_be_loaded_ordered_and_utf8_exact`
|
||||
- Added `disabled_entry_cannot_become_a_new_action_under_the_same_menu_token`
|
||||
- Added `document_reset_preserves_popup_token_sequence_and_drops_old_menu_authority`
|
||||
- Added `drawer_document_session_and_visit_guards_are_independently_required`
|
||||
- Added `enabled_entry_is_readmitted_at_dispatch_and_blocked_by_busy`
|
||||
- Added `equal_diagnostic_republication_invalidates_primary_and_related_targets`
|
||||
- Added `menu_own_open_invalidation_does_not_stale_find_and_invoke_is_once`
|
||||
- Added `menu_source_caret_document_path_and_interaction_changes_refuse_stale_find`
|
||||
- Added `old_dismiss_and_invoke_do_not_consume_a_newer_menu`
|
||||
- Added `only_valid_explicit_group_and_resize_intent_cancel_pending_navigation`
|
||||
- Added `queued_group_toggle_cannot_mutate_a_reopened_or_rotated_visit`
|
||||
- Added `queued_toolbar_request_cannot_retarget_after_source_change`
|
||||
- Added `reference_groups_and_scroll_survive_tabs_and_reject_old_visits_and_queries`
|
||||
- Added `reset_removes_ui_and_publication_authority_and_resize_rejects_nan`
|
||||
- Added `retained_primary_and_related_targets_cannot_replay_after_hide_or_problems_references_problems`
|
||||
- Added `source_and_property_drafts_keep_find_and_text_undo_without_model_application`
|
||||
- Added `stale_retained_group_can_expand_without_navigating_or_applying_drafts`
|
||||
|
||||
### crates/oa-desktop/src/diagnostic_input/tests.rs
|
||||
|
||||
- Added `already_captured_terminal_cancels_child_without_activation_or_lingering_press`
|
||||
- Added `captured_terminal_cancellation_preserves_same_publication_focusable_child_state`
|
||||
- Added `current_primary_and_related_mouse_clicks_survive_same_publication_diff`
|
||||
- Added `current_touch_activates_primary_and_related_and_cancel_does_not_activate`
|
||||
- Added `fresh_mouse_press_after_missing_stale_release_can_activate_current_row`
|
||||
- Added `hidden_zero_height_scroller_delivers_cancelled_mouse_and_touch_terminals_to_guard`
|
||||
- Added `hidden_zero_size_list_consumes_release_outside_old_bounds_once`
|
||||
- Added `missed_press_is_ignored_and_dragging_release_outside_does_not_activate`
|
||||
- Added `negative_control_iced_button_retargets_a_press_after_plain_tree_diff`
|
||||
- Added `negative_control_plain_focusable_row_migrates_activation_to_replacement`
|
||||
- Added `negative_control_removing_unguarded_rows_exposes_background_release`
|
||||
- Added `outer_scroll_offset_survives_same_and_changed_publications`
|
||||
- Added `replaced_primary_and_related_rows_consume_stale_release_then_accept_new_click`
|
||||
- Added `replaced_touch_consumes_lift_or_cancel_even_when_hidden`
|
||||
- Added `same_publication_missing_terminal_recovers_on_fresh_mouse_or_touch_down`
|
||||
- Added `same_publication_new_visit_cancels_armed_rows_without_a_hidden_tree_frame`
|
||||
- Added `same_publication_preserves_focus_but_replacement_never_inherits_activation`
|
||||
- Added `stale_release_does_not_bubble_to_real_background_controls`
|
||||
- Added `stale_touch_release_does_not_disarm_a_new_current_gesture`
|
||||
- Added `unrelated_finger_or_mouse_release_cannot_complete_another_fingers_press`
|
||||
|
||||
### crates/oa-desktop/src/source_annotations/anchor_tests.rs
|
||||
|
||||
- Added `final_multi_glyph_cluster_anchor_uses_logical_trailing_advance_edge`
|
||||
- Added `mixed_direction_omitted_separator_has_one_logical_predecessor_anchor`
|
||||
|
||||
### crates/oa-desktop/src/source_annotations/layout_tests.rs
|
||||
|
||||
- Added `combining_cjk_and_bidi_ranges_cover_actual_clusters_without_neighbor_aliases`
|
||||
- Added `empty_eof_and_separator_ranges_follow_real_paragraph_ownership`
|
||||
- Added `mismatched_affected_source_and_bottom_line_without_visible_underline_have_no_bands`
|
||||
- Added `omitted_wrap_space_has_one_preceding_run_anchor_and_none_when_that_run_is_clipped_out`
|
||||
- Added `repeated_alias_marks_only_second_actual_glyph_sequence_and_blank_space_misses`
|
||||
- Added `wrapped_scrolled_multiline_range_uses_actual_visible_runs_and_effective_clip`
|
||||
|
||||
### crates/oa-desktop/src/source_annotations/performance_tests.rs
|
||||
|
||||
- Added `annotation_projection_cost_distributions`
|
||||
|
||||
### crates/oa-desktop/src/source_annotations/tests.rs
|
||||
|
||||
- Added `empty_source_has_real_zero_width_marker`
|
||||
- Added `exact_path_and_utf8_range_admission_keep_valid_neighbor`
|
||||
- Added `half_open_next_line_excluded_separator_only_and_empty_line_anchored`
|
||||
- Added `mixed_endings_use_actual_paragraphs_and_preserve_eof`
|
||||
|
||||
### crates/oa-desktop/src/source_annotations/widget/tests.rs
|
||||
|
||||
- Added `actual_word_and_line_selection_then_typing_survive_hover_and_publication_changes`
|
||||
- Added `deferred_paragraph_renderer_rejects_the_old_local_lifetime`
|
||||
- Added `deferred_tooltip_text_survives_draw_and_only_current_authority_is_retained`
|
||||
- Added `disabled_hover_and_unavailable_cursor_hide_details_without_removing_current_marks`
|
||||
- Added `measured_footer_and_omitted_count_fit_actual_shaped_widths_and_ancestor_clip`
|
||||
- Added `pointer_motion_between_bands_blank_and_leave_is_passive_and_always_redraws`
|
||||
- Added `stationary_pointer_replacement_absence_and_path_switch_use_only_current_index`
|
||||
|
||||
### crates/oa-desktop/src/views.rs
|
||||
|
||||
- Removed `source_header_keeps_editor_bounds_stable_through_lint_and_find_rebuilds`
|
||||
- Removed `source_header_remains_scrollable_and_preserves_offset_across_diagnostic_refresh`
|
||||
|
||||
### crates/oa-desktop/src/views/source_symbols.rs
|
||||
|
||||
- Added `suffixes_distinguish_nested_duplicate_basenames_without_changing_unicode`
|
||||
|
||||
### crates/oa-desktop/src/views/text_workspace.rs
|
||||
|
||||
- Added `drawer_clamps_to_actual_center_allocation_including_oversize_requests`
|
||||
- Added `five_slots_keep_editor_state_and_selection_through_explicit_and_passive_changes`
|
||||
- Added `highlighted_sensor_editor_retains_real_scrolled_buffer_across_panel_rebuilds`
|
||||
- Added `keyboard_resize_uses_effective_height_and_only_exact_open_drawer_shortcut`
|
||||
|
||||
### crates/oa-desktop/src/views/text_workspace/summary_visibility_tests.rs
|
||||
|
||||
- Added `all_reference_exceptions_fit_allocated_width_with_wide_alias_and_large_counts`
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user