docs: confirm save diagnostics preview publication and handoff
This commit is contained in:
+5
-2
@@ -47,8 +47,11 @@ The [fresh scoped package validation](release-save-diagnostics-validation-202610
|
||||
checks the actual extracted correction: accurate protected-destination refusal,
|
||||
Save All/fresh Save As recovery, actual external-edit protection, fresh reopen,
|
||||
complete source/model oracles and 23 server assertions. Independent final review
|
||||
finds no material blocker in this artifact; publication is pending. It remains
|
||||
outside the separately owned follow-up union.
|
||||
finds no material blocker in this artifact. The [save-diagnostics Windows preview](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/tag/v0.2.0-preview.save-diagnostics.20261001)
|
||||
is published from evidence checkpoint `e144e32e9984477a258759a9dcc75f6e499fc224`;
|
||||
[publication receipts](experiments/save-diagnostics-package-20261001/publication.md)
|
||||
verify its ZIP, checksum and validation attachment. It remains outside the
|
||||
separately owned follow-up union.
|
||||
[Issue 46](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/46)
|
||||
holds integration and delivery status. Live ownership and release coordination
|
||||
remain in Gitea.
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
raw/** -text whitespace=cr-at-eol,-blank-at-eof
|
||||
packet-review.md -text whitespace=cr-at-eol
|
||||
publication/** -text whitespace=cr-at-eol,-blank-at-eof
|
||||
publication-review.md -text whitespace=cr-at-eol
|
||||
|
||||
@@ -11,6 +11,8 @@ The exact ZIP is 34,191,561 bytes, SHA256
|
||||
`8b4e353e075f22350a07794ee47a02cf85725501223299cf367134aa1f5b63b7`.
|
||||
The package itself contains the binaries, notices and documentation; this packet
|
||||
contains the portable verification evidence, not duplicate executable archives.
|
||||
[Confirmed publication receipts](publication.md) identify release 9 and all three
|
||||
downloaded assets; they are outside the preceding raw inventory.
|
||||
|
||||
## Navigation
|
||||
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
# Independent publication closure review
|
||||
|
||||
Status: final bounded publication closure review. No material blocker remains in publication receipts, staged publication inventory or the reviewed delivery-document claims. The stale contribution-note paragraph identified below has been corrected and rechecked.
|
||||
|
||||
This review uses captured receipts and uploader source plus the parent's reported independent Gitea MCP confirmation. It performs no new download, remote query, GUI, Cargo, server/REST operation or Gitea mutation. Only this report was written, outside both raw and publication inventories.
|
||||
|
||||
## Publication identity and uploader scope
|
||||
|
||||
The upload and publish receipts agree on release **9**, tag `v0.2.0-preview.save-diagnostics.20261001`, checkpoint `e144e32e9984477a258759a9dcc75f6e499fc224`, and the same three asset IDs, sizes and hashes. Upload records draft true; publish records draft false. The executed uploader asserts prerelease true before and after publishing and exact notes equality afterward. The parent separately reports MCP reads confirming release 9's target/state and unchanged targets/state of releases 7/8. I did not independently repeat those network reads. The compact JSON receipt does not itself include a prerelease field or the complete returned release object; the script assertions and separately reported MCP checks supply that portion of the evidence.
|
||||
|
||||
The captured uploader checks the new tag, expected source and draft state, uploads missing assets without a delete/replace path, and accepts a pre-existing same-name asset only after exact download identity. Publish requires the expected asset name set, reads back all three bytes before changing the new draft, PATCHes only draft/prerelease/body, and then checks published state, exact notes and tag-to-release identity. It does not update an old release/tag or infer a new build. Redirects are rejected, and the captured helper contains credential lookup code but no credential value. I did not execute it or read its credential source.
|
||||
|
||||
The two receipt sets preserve identical identities:
|
||||
|
||||
| Asset | Bytes | SHA256 |
|
||||
| --- | --- | --- |
|
||||
| 36: ZIP | 34,191,561 | `8b4e353e075f22350a07794ee47a02cf85725501223299cf367134aa1f5b63b7` |
|
||||
| 37: checksum | 150 | `de08984ea2cbaf95b6241ac817f1ad8459a0b863adf7ee9fe51de0834bcd2d54` |
|
||||
| 38: VALIDATION.md | 2,930 | `de5ecaf07b5a0014318e809cea152c738dfdfc55ff0aa8ed3d7ef78b701df9e4` |
|
||||
|
||||
I hashed the existing local ready01 assets and matched those receipt identities, without downloading or re-extracting the archive. Draft attachment URLs and published release download URLs differ as expected; asset IDs and bytes remain the same. This review corroborates the captured successful readback, not indefinite future availability or anonymous access.
|
||||
|
||||
## Independent local/index checks
|
||||
|
||||
`publication/files.json` contains **12 records / 31,561 bytes**. The directory contains those 12 files plus the inventory itself. All recorded lengths and SHA256 values match, and all 12 copied records match their local originals byte-for-byte. All 13 publication directory files, publication.md, packet README/attributes, STATE and release-validation text match their staged blobs exactly: 18 exact staged comparisons passed.
|
||||
|
||||
The ordinary contribution note is intentionally outside captured-byte attributes. Its working file had CRLF while its staged blob had LF, with identical normalized content. My initial blanket byte-equality assertion stopped there; a read-only comparison established exactly 142 CRLF conversions and no content change. Raw/publication byte checks remained exact. This was a reviewer assumption about normal document normalization, not weakened evidence preservation.
|
||||
|
||||
The parent attribute update applies byte preservation only to `publication/**`; the original raw inventory is unchanged and there is no staged raw-file delta. The current closure review belongs outside either inventory and does not cause recursive manifest edits.
|
||||
|
||||
## Tooling failures are preserved, not erased
|
||||
|
||||
The first asset preparer requires a non-existing destination. The previous input-preparation step had created an empty scaffold, so refusal before writing assets was the intended guard. The fresh-preparation helper explicitly verifies and preserves that empty scaffold. Independent byte comparison confirms the ready01 preparer and uploader differ from their originals only in the destination-directory literal. Clean-checkpoint/source/archive guards remain unchanged.
|
||||
|
||||
The captured `correct-validation-path.py` checks for two actual backslashes before its first write. The portable validation contains exactly one actual separator and zero doubled occurrences in the backend invocation. The failed assertion therefore prevented the proposed unnecessary correction. The copied/uploaded validation bytes retain their original pinned hash. The publication narrative accurately distinguishes JSON display escaping from raw command bytes and does not present the failed checker as a product defect or success.
|
||||
|
||||
## Published notes and documentation scope
|
||||
|
||||
The exact release notes and portable validation describe the bounded Save As diagnostic change, prior compact Help, separate desktop/server/documentation identities, reused development binaries, 29 targeted checks and the actual native/server evidence. They preserve companion-copy limitations, forced-server-termination scope, one-account Windows/runtime constraints, and the absence of new Linux/full-suite/complete-OA-SA acceptance. The immutable link to the evidence checkpoint is appropriate even though that checkpoint's original validation predated publication; the later publication page explains this chronology explicitly.
|
||||
|
||||
STATE and the release-validation update accurately replace publication-pending language with the confirmed release link and captured delivery evidence. They do not claim the separately owned follow-up union, issue closure, Wiki update or future documentation commit/push already happened.
|
||||
|
||||
Resolved finding: the contribution note initially retained a closing paragraph saying no packaged #46 release was claimed and packaged delivery remained pending, despite its updated opening linking confirmed publication. The parent changed the section to “Contribution limits and subsequent delivery,” explicitly limited the old review to its original scope, linked later package validation/publication, and recorded release 9 delivery. I re-read the affected paragraph and verified staged content matches the working text under normal LF normalization. Only broader follow-up coordination points to Gitea; no versioned live issue-closure ledger was added. The raw historical review remains unchanged.
|
||||
|
||||
## Key captured identities
|
||||
|
||||
- Publication inventory: `319d742dd2694347d0a3b4157ee999618160a58694d935f4f33a47fcf30f36a0`.
|
||||
- Publish readback: `ee4b8e0c1f17a30397441d6e8c87d0b2bc21630e0a4ef43d2299168846994797`.
|
||||
- Upload readback: `85a8bc2df346b477bacdf3001b10a09304536e0fc1b918f0672d0538343590be`.
|
||||
- Executed uploader: `8e0ca5da598e351f8146cdffcd3e1188726bf7dd3bb7c84ca9119559f7f1afb6`.
|
||||
- Exact release notes: `ce860446855d28d471088b24aa816c42ac23e8e2f8eab4c9856731d8935b8e72`.
|
||||
- Publication narrative: `bce0ff32f3bd2b6435c52cf0d4e381669d75ce0d6a97907eba97ef5c5539b6cb`.
|
||||
- STATE: `a3184bb2bc75fe008453a1d734663dcd24a85bcdc901aed4c0bebef8a190aa6e`.
|
||||
- Release validation: `4a97dc063f8a37f3e1a978ae9a840418b9b53fa87b8ea47db837d03723e7b86f`.
|
||||
- Corrected contribution note, staged LF bytes: `29bc5647d85392c7fad5a1e34523e59b64d0c5a71a2d1bed9537d18245ccf47b`; working CRLF bytes: `6950b045466c4d42f1b3521b43ad4dab95fa1afb8a852bd3404131c543a611fd`.
|
||||
|
||||
The earlier exact-artifact scoped preview acceptance remains supported. Publication confirmation adds delivery evidence, not new runtime or semantic acceptance. Parent retains final delivery-document commit/push, #46 closure and Wiki coordination.
|
||||
@@ -0,0 +1,61 @@
|
||||
# Confirmed save-diagnostics preview publication
|
||||
|
||||
[Gitea release 9](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/tag/v0.2.0-preview.save-diagnostics.20261001)
|
||||
is published, draft false / prerelease true. Its immutable tag/evidence checkpoint
|
||||
is `e144e32e9984477a258759a9dcc75f6e499fc224`. Desktop source `0e83157e`, reused
|
||||
server source `715036e`, and package documentation `ef28f178` retain their
|
||||
distinct provenance in the [verified release record](../../release-save-diagnostics-validation-20261001.md).
|
||||
This is scoped #46 delivery, not complete OA/SA or the separately owned union.
|
||||
|
||||
The new draft's three assets were uploaded without replacing anything, downloaded
|
||||
and matched before publication. Publishing rechecked all three downloads,
|
||||
updated only this new draft, and confirmed exact notes/tag/source, draft false
|
||||
and prerelease true. A separate Gitea MCP read confirms the published release
|
||||
target. Releases 7/8 still have their original targets and published prerelease
|
||||
state; no old tag, release body or asset was modified.
|
||||
|
||||
| Asset ID | File | Bytes | SHA256 |
|
||||
| --- | --- | --- | --- |
|
||||
| 36 | Studio ZIP | 34,191,561 | `8b4e353e075f22350a07794ee47a02cf85725501223299cf367134aa1f5b63b7` |
|
||||
| 37 | ZIP checksum | 150 | `de08984ea2cbaf95b6241ac817f1ad8459a0b863adf7ee9fe51de0834bcd2d54` |
|
||||
| 38 | VALIDATION.md | 2,930 | `de5ecaf07b5a0014318e809cea152c738dfdfc55ff0aa8ed3d7ef78b701df9e4` |
|
||||
|
||||
[Upload readback](publication/upload-readback.json),
|
||||
[published readback](publication/publish-readback.json),
|
||||
[exact published notes](publication/release-notes.md) and
|
||||
[portable validation](publication/VALIDATION.md) retain the full download URLs,
|
||||
identities and source scopes. [File identities](publication/files.json) cover
|
||||
the 12 copied publication records/helpers. The earlier raw packet remains exact
|
||||
and separately inventoried; later publication records are outside that inventory.
|
||||
[Independent publication-record review](publication-review.md) reconciles all
|
||||
copied records with their originals and staged bytes. Its stale contribution-note
|
||||
finding was corrected and rechecked before this delivery checkpoint.
|
||||
|
||||
Commands used bundled Python from the recorded environment:
|
||||
|
||||
```powershell
|
||||
python .local/package46/prepare-release-assets.py
|
||||
python .local/package46/prepare-release-notes.py
|
||||
python .local/package46/prepare-fresh-release-assets.py
|
||||
python .local/package46/prepare-release-assets-ready01.py
|
||||
python .local/package46/release-assets-ready01.py upload 9 e144e32e9984477a258759a9dcc75f6e499fc224
|
||||
python .local/package46/release-assets-ready01.py publish 9 e144e32e9984477a258759a9dcc75f6e499fc224
|
||||
```
|
||||
|
||||
The first preparation failed safely: the input preparation helper had already
|
||||
created an empty `release-assets` scaffold, while the asset preparer required a
|
||||
new directory. No file was overwritten. Root verified that scaffold was empty,
|
||||
preserved it and the failed helper, then used a new `release-assets-ready01`
|
||||
directory with unchanged artifact/clean-source guards. A separate draft was
|
||||
created but remained unpublished until assets passed.
|
||||
|
||||
A parent check mistakenly read JSON display escaping as two actual backslashes
|
||||
in the backend command. The [failed checker](publication/correct-validation-path.py)
|
||||
asserted before any write. A subsequent raw-byte check confirmed exactly one
|
||||
backslash and zero doubled separators in the portable validation. No correction
|
||||
was needed; the originally prepared file was uploaded unchanged. These are
|
||||
preserved tooling assumptions, not product defects or weakened gates.
|
||||
|
||||
All runtime/compiler/independent review claims retain their preceding source and
|
||||
environment limits. Publication establishes artifact availability and integrity;
|
||||
it adds no new GUI/REST, Linux, full-suite, clean-machine or complete-release claim.
|
||||
@@ -0,0 +1,49 @@
|
||||
# Save diagnostics Windows preview validation
|
||||
|
||||
The [verified scope, evidence and exact build/run instructions](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/e144e32e9984477a258759a9dcc75f6e499fc224/harness/release-save-diagnostics-validation-20261001.md)
|
||||
are authoritative. This attachment links that immutable release/evidence checkpoint.
|
||||
|
||||
Desktop source: 0e83157e09d52e6152df91208e41693b62da2d46.
|
||||
Unchanged reused server source: 715036e132677dd2bc2fb37ed316d93dc9987aec.
|
||||
Packaged documentation source: ef28f1784efe6717b0ca72c0eb3c97bc30ebfe47.
|
||||
Release/evidence checkpoint: e144e32e9984477a258759a9dcc75f6e499fc224.
|
||||
Windows gnullvm dev/unoptimized builds, debug assertions enabled.
|
||||
|
||||
ZIP: 34,191,561 bytes; SHA256
|
||||
`8b4e353e075f22350a07794ee47a02cf85725501223299cf367134aa1f5b63b7`.
|
||||
|
||||
Extract the complete folder and launch `arcadia-studio.exe`, keeping
|
||||
`libunwind.dll` beside both executables. Read `START-HERE.txt`.
|
||||
Copy the complete example before editing. Save All updates the loaded source.
|
||||
Save As preserves includes and needs a fresh source destination; needed
|
||||
companions/artifacts require separate copying. Protected destination conflicts
|
||||
now have accurate wording and recovery guidance; genuine observed external edits
|
||||
retain their external-change diagnosis.
|
||||
|
||||
Optional backend in a writable working directory:
|
||||
|
||||
```powershell
|
||||
.\arcadia-server.exe --bind 127.0.0.1:8787 --data-dir C:/ArcadiaModels/server
|
||||
```
|
||||
|
||||
See packaged docs/server.md and docs/api.rst for REST/deployment/authentication.
|
||||
No remote deployment is claimed.
|
||||
|
||||
The unchanged desktop source has 29 targeted save checks, formatting, strict
|
||||
Clippy, GUI build and independent contribution review. Fresh packaging/extraction
|
||||
and source identities pass. Two actual extracted desktop processes exercise
|
||||
Apply, accurate refusal, Save All/fresh Save As recovery, real external-change
|
||||
protection, fresh reopen and no-op Save All, with complete 37-file byte oracles
|
||||
and complete 30-file parsed Project/source comparisons. Both desktop processes
|
||||
exit 0 with empty logs and all 565 package files unchanged. Fresh server testing
|
||||
passes 23 checks, including exact OpenAPI, Unicode/CRLF, stale 412 and acknowledged
|
||||
write persistence after an owned forced restart, not graceful/power-loss testing.
|
||||
Independent artifact/source/native/server/claims review passes for this scope.
|
||||
|
||||
This is an unfinished scoped Windows development preview, not the complete
|
||||
first OA/SA release or the separately owned follow-up union. Dense diagrams,
|
||||
Scenario adapters, calculations/constraints, maintained libraries and broader
|
||||
accessibility/DPI remain unfinished. Native testing used one existing account/
|
||||
machine at 1442×932 with system-only child PATH. No full-suite rerun, second clean
|
||||
machine, minimum-size package trial or Linux validation is claimed. Linux/WSL
|
||||
remains user-deferred. Prior releases remain unchanged.
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
from pathlib import Path
|
||||
root = Path(__file__).resolve().parent
|
||||
target = root / 'release-assets-ready01/VALIDATION.md'
|
||||
data = target.read_bytes()
|
||||
before = b'.' + bytes([92, 92]) + b'arcadia-server.exe --bind'
|
||||
after = b'.' + bytes([92]) + b'arcadia-server.exe --bind'
|
||||
assert data.count(before) == 1
|
||||
target.write_bytes(data.replace(before, after))
|
||||
for name in ['prepare-release-assets.py', 'prepare-release-assets-ready01.py']:
|
||||
path = root / name
|
||||
data = path.read_bytes()
|
||||
before = b'.' + bytes([92]) * 4 + b'arcadia-server.exe --bind'
|
||||
after = b'.' + bytes([92]) * 2 + b'arcadia-server.exe --bind'
|
||||
assert data.count(before) == 1
|
||||
path.write_bytes(data.replace(before, after))
|
||||
print('Corrected only native backend command separator in local pre-upload validation and its preparers. Archive/checksum unchanged.')
|
||||
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"correct-validation-path.py": {
|
||||
"bytes": 831,
|
||||
"sha256": "229ac6675be1c2a02f407d77483aba352d4218c7627d4ebf19b604fec8b33001"
|
||||
},
|
||||
"prepare-fresh-release-assets.py": {
|
||||
"bytes": 981,
|
||||
"sha256": "7d3dadb28c16cf0e1ffd723566f2ff5958e28fc1a1359bc4ae4918c6f85a858b"
|
||||
},
|
||||
"prepare-release-assets-ready01.py": {
|
||||
"bytes": 4295,
|
||||
"sha256": "708e6085c10136c79bf5d9e2709a86d1b7eb0ddb5e43b0b37a349d004cdf3a85"
|
||||
},
|
||||
"prepare-release-assets.py": {
|
||||
"bytes": 4287,
|
||||
"sha256": "5aea94dc90706a5034a92e3754795f41b3329319fe25fae306a52a5ff136d44b"
|
||||
},
|
||||
"prepare-release-notes.py": {
|
||||
"bytes": 3527,
|
||||
"sha256": "734f4483f9f3ac9e21955a64a53e05f5979fcbb12432bb39bd4a23a50e642201"
|
||||
},
|
||||
"prepare-release-upload.py": {
|
||||
"bytes": 514,
|
||||
"sha256": "95dc5b8162d4b27a1ac89153b8083b419f0d2d0ba3334de7d4f378534673279e"
|
||||
},
|
||||
"publish-readback.json": {
|
||||
"bytes": 1548,
|
||||
"sha256": "ee4b8e0c1f17a30397441d6e8c87d0b2bc21630e0a4ef43d2299168846994797"
|
||||
},
|
||||
"release-assets-ready01.py": {
|
||||
"bytes": 4163,
|
||||
"sha256": "8e0ca5da598e351f8146cdffcd3e1188726bf7dd3bb7c84ca9119559f7f1afb6"
|
||||
},
|
||||
"release-assets.py": {
|
||||
"bytes": 4155,
|
||||
"sha256": "fbba18c91ab491e9147393cba2ad1a4cb7b02908c8909b27179a76783fc987af"
|
||||
},
|
||||
"release-notes.md": {
|
||||
"bytes": 3099,
|
||||
"sha256": "ce860446855d28d471088b24aa816c42ac23e8e2f8eab4c9856731d8935b8e72"
|
||||
},
|
||||
"upload-readback.json": {
|
||||
"bytes": 1231,
|
||||
"sha256": "85a8bc2df346b477bacdf3001b10a09304536e0fc1b918f0672d0538343590be"
|
||||
},
|
||||
"VALIDATION.md": {
|
||||
"bytes": 2930,
|
||||
"sha256": "de5ecaf07b5a0014318e809cea152c738dfdfc55ff0aa8ed3d7ef78b701df9e4"
|
||||
}
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
from pathlib import Path
|
||||
root = Path(__file__).resolve().parent
|
||||
assert (root / 'release-assets').is_dir() and not list((root / 'release-assets').iterdir()), 'The prior scaffold must still be empty; preserve it.'
|
||||
source = (root / 'prepare-release-assets.py').read_text(encoding='utf-8')
|
||||
before = "target = root / 'release-assets'"
|
||||
assert source.count(before) == 1
|
||||
with (root / 'prepare-release-assets-ready01.py').open('x', encoding='utf-8', newline='\n') as f:
|
||||
f.write(source.replace(before, "target = root / 'release-assets-ready01'"))
|
||||
uploader = (root / 'release-assets.py').read_text(encoding='utf-8')
|
||||
before = "assets = root/'release-assets'"
|
||||
assert uploader.count(before) == 1
|
||||
with (root / 'release-assets-ready01.py').open('x', encoding='utf-8', newline='\n') as f:
|
||||
f.write(uploader.replace(before, "assets = root/'release-assets-ready01'"))
|
||||
print('Prepared fresh output-directory variants; original empty scaffold and failed helper preserved. No network requests.')
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
"""Prepare pinned portable assets after the reviewed evidence checkpoint is committed."""
|
||||
from pathlib import Path
|
||||
import hashlib, shutil, subprocess
|
||||
|
||||
root = Path(__file__).resolve().parent
|
||||
repository = root.parent.parent
|
||||
assert repository.resolve() == Path('C:/ar-save-01a0d717').resolve()
|
||||
assert not subprocess.check_output(['git', 'status', '--porcelain'], cwd=repository, text=True).strip()
|
||||
checkpoint = subprocess.check_output(['git', 'rev-parse', 'HEAD'], cwd=repository, text=True).strip()
|
||||
assert subprocess.check_output(['git', 'diff', '--name-only', 'ef28f1784efe6717b0ca72c0eb3c97bc30ebfe47', checkpoint, '--', 'crates', 'Cargo.toml', 'Cargo.lock', 'docs', 'scripts', 'examples', 'README.md', 'LICENSE'], cwd=repository, text=True).strip() == ''
|
||||
record = repository / 'harness/release-save-diagnostics-validation-20261001.md'
|
||||
assert record.is_file()
|
||||
target = root / 'release-assets-ready01'
|
||||
target.mkdir(exist_ok=False)
|
||||
name = 'ArcadiaStudio-0.2.0-preview.save-diagnostics.20261001-x86_64-pc-windows-gnullvm.zip'
|
||||
archive = root / 'dist' / name
|
||||
assert archive.stat().st_size == 34191561
|
||||
assert hashlib.sha256(archive.read_bytes()).hexdigest() == '8b4e353e075f22350a07794ee47a02cf85725501223299cf367134aa1f5b63b7'
|
||||
for filename in [name, name + '.sha256']:
|
||||
shutil.copyfile(root / 'dist' / filename, target / filename)
|
||||
(target / 'VALIDATION.md').write_text(f'''# Save diagnostics Windows preview validation
|
||||
|
||||
The [verified scope, evidence and exact build/run instructions](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/{checkpoint}/harness/release-save-diagnostics-validation-20261001.md)
|
||||
are authoritative. This attachment links that immutable release/evidence checkpoint.
|
||||
|
||||
Desktop source: 0e83157e09d52e6152df91208e41693b62da2d46.
|
||||
Unchanged reused server source: 715036e132677dd2bc2fb37ed316d93dc9987aec.
|
||||
Packaged documentation source: ef28f1784efe6717b0ca72c0eb3c97bc30ebfe47.
|
||||
Release/evidence checkpoint: {checkpoint}.
|
||||
Windows gnullvm dev/unoptimized builds, debug assertions enabled.
|
||||
|
||||
ZIP: 34,191,561 bytes; SHA256
|
||||
`8b4e353e075f22350a07794ee47a02cf85725501223299cf367134aa1f5b63b7`.
|
||||
|
||||
Extract the complete folder and launch `arcadia-studio.exe`, keeping
|
||||
`libunwind.dll` beside both executables. Read `START-HERE.txt`.
|
||||
Copy the complete example before editing. Save All updates the loaded source.
|
||||
Save As preserves includes and needs a fresh source destination; needed
|
||||
companions/artifacts require separate copying. Protected destination conflicts
|
||||
now have accurate wording and recovery guidance; genuine observed external edits
|
||||
retain their external-change diagnosis.
|
||||
|
||||
Optional backend in a writable working directory:
|
||||
|
||||
```powershell
|
||||
.\\arcadia-server.exe --bind 127.0.0.1:8787 --data-dir C:/ArcadiaModels/server
|
||||
```
|
||||
|
||||
See packaged docs/server.md and docs/api.rst for REST/deployment/authentication.
|
||||
No remote deployment is claimed.
|
||||
|
||||
The unchanged desktop source has 29 targeted save checks, formatting, strict
|
||||
Clippy, GUI build and independent contribution review. Fresh packaging/extraction
|
||||
and source identities pass. Two actual extracted desktop processes exercise
|
||||
Apply, accurate refusal, Save All/fresh Save As recovery, real external-change
|
||||
protection, fresh reopen and no-op Save All, with complete 37-file byte oracles
|
||||
and complete 30-file parsed Project/source comparisons. Both desktop processes
|
||||
exit 0 with empty logs and all 565 package files unchanged. Fresh server testing
|
||||
passes 23 checks, including exact OpenAPI, Unicode/CRLF, stale 412 and acknowledged
|
||||
write persistence after an owned forced restart, not graceful/power-loss testing.
|
||||
Independent artifact/source/native/server/claims review passes for this scope.
|
||||
|
||||
This is an unfinished scoped Windows development preview, not the complete
|
||||
first OA/SA release or the separately owned follow-up union. Dense diagrams,
|
||||
Scenario adapters, calculations/constraints, maintained libraries and broader
|
||||
accessibility/DPI remain unfinished. Native testing used one existing account/
|
||||
machine at 1442×932 with system-only child PATH. No full-suite rerun, second clean
|
||||
machine, minimum-size package trial or Linux validation is claimed. Linux/WSL
|
||||
remains user-deferred. Prior releases remain unchanged.
|
||||
''', encoding='utf-8')
|
||||
print('Prepared three pinned release assets for checkpoint ' + checkpoint)
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
"""Prepare pinned portable assets after the reviewed evidence checkpoint is committed."""
|
||||
from pathlib import Path
|
||||
import hashlib, shutil, subprocess
|
||||
|
||||
root = Path(__file__).resolve().parent
|
||||
repository = root.parent.parent
|
||||
assert repository.resolve() == Path('C:/ar-save-01a0d717').resolve()
|
||||
assert not subprocess.check_output(['git', 'status', '--porcelain'], cwd=repository, text=True).strip()
|
||||
checkpoint = subprocess.check_output(['git', 'rev-parse', 'HEAD'], cwd=repository, text=True).strip()
|
||||
assert subprocess.check_output(['git', 'diff', '--name-only', 'ef28f1784efe6717b0ca72c0eb3c97bc30ebfe47', checkpoint, '--', 'crates', 'Cargo.toml', 'Cargo.lock', 'docs', 'scripts', 'examples', 'README.md', 'LICENSE'], cwd=repository, text=True).strip() == ''
|
||||
record = repository / 'harness/release-save-diagnostics-validation-20261001.md'
|
||||
assert record.is_file()
|
||||
target = root / 'release-assets'
|
||||
target.mkdir(exist_ok=False)
|
||||
name = 'ArcadiaStudio-0.2.0-preview.save-diagnostics.20261001-x86_64-pc-windows-gnullvm.zip'
|
||||
archive = root / 'dist' / name
|
||||
assert archive.stat().st_size == 34191561
|
||||
assert hashlib.sha256(archive.read_bytes()).hexdigest() == '8b4e353e075f22350a07794ee47a02cf85725501223299cf367134aa1f5b63b7'
|
||||
for filename in [name, name + '.sha256']:
|
||||
shutil.copyfile(root / 'dist' / filename, target / filename)
|
||||
(target / 'VALIDATION.md').write_text(f'''# Save diagnostics Windows preview validation
|
||||
|
||||
The [verified scope, evidence and exact build/run instructions](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/{checkpoint}/harness/release-save-diagnostics-validation-20261001.md)
|
||||
are authoritative. This attachment links that immutable release/evidence checkpoint.
|
||||
|
||||
Desktop source: 0e83157e09d52e6152df91208e41693b62da2d46.
|
||||
Unchanged reused server source: 715036e132677dd2bc2fb37ed316d93dc9987aec.
|
||||
Packaged documentation source: ef28f1784efe6717b0ca72c0eb3c97bc30ebfe47.
|
||||
Release/evidence checkpoint: {checkpoint}.
|
||||
Windows gnullvm dev/unoptimized builds, debug assertions enabled.
|
||||
|
||||
ZIP: 34,191,561 bytes; SHA256
|
||||
`8b4e353e075f22350a07794ee47a02cf85725501223299cf367134aa1f5b63b7`.
|
||||
|
||||
Extract the complete folder and launch `arcadia-studio.exe`, keeping
|
||||
`libunwind.dll` beside both executables. Read `START-HERE.txt`.
|
||||
Copy the complete example before editing. Save All updates the loaded source.
|
||||
Save As preserves includes and needs a fresh source destination; needed
|
||||
companions/artifacts require separate copying. Protected destination conflicts
|
||||
now have accurate wording and recovery guidance; genuine observed external edits
|
||||
retain their external-change diagnosis.
|
||||
|
||||
Optional backend in a writable working directory:
|
||||
|
||||
```powershell
|
||||
.\\arcadia-server.exe --bind 127.0.0.1:8787 --data-dir C:/ArcadiaModels/server
|
||||
```
|
||||
|
||||
See packaged docs/server.md and docs/api.rst for REST/deployment/authentication.
|
||||
No remote deployment is claimed.
|
||||
|
||||
The unchanged desktop source has 29 targeted save checks, formatting, strict
|
||||
Clippy, GUI build and independent contribution review. Fresh packaging/extraction
|
||||
and source identities pass. Two actual extracted desktop processes exercise
|
||||
Apply, accurate refusal, Save All/fresh Save As recovery, real external-change
|
||||
protection, fresh reopen and no-op Save All, with complete 37-file byte oracles
|
||||
and complete 30-file parsed Project/source comparisons. Both desktop processes
|
||||
exit 0 with empty logs and all 565 package files unchanged. Fresh server testing
|
||||
passes 23 checks, including exact OpenAPI, Unicode/CRLF, stale 412 and acknowledged
|
||||
write persistence after an owned forced restart, not graceful/power-loss testing.
|
||||
Independent artifact/source/native/server/claims review passes for this scope.
|
||||
|
||||
This is an unfinished scoped Windows development preview, not the complete
|
||||
first OA/SA release or the separately owned follow-up union. Dense diagrams,
|
||||
Scenario adapters, calculations/constraints, maintained libraries and broader
|
||||
accessibility/DPI remain unfinished. Native testing used one existing account/
|
||||
machine at 1442×932 with system-only child PATH. No full-suite rerun, second clean
|
||||
machine, minimum-size package trial or Linux validation is claimed. Linux/WSL
|
||||
remains user-deferred. Prior releases remain unchanged.
|
||||
''', encoding='utf-8')
|
||||
print('Prepared three pinned release assets for checkpoint ' + checkpoint)
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
from pathlib import Path
|
||||
import subprocess
|
||||
root = Path(__file__).resolve().parent
|
||||
repository = root.parent.parent
|
||||
assert not subprocess.check_output(['git', 'status', '--porcelain'], cwd=repository, text=True).strip()
|
||||
checkpoint = subprocess.check_output(['git', 'rev-parse', 'HEAD'], cwd=repository, text=True).strip()
|
||||
body = f'''Save As destination collisions now explain that existing files are protected
|
||||
and offer clear recovery: choose a fresh source directory, or use Save All at
|
||||
the current entry. Genuine observed external edits keep their distinct
|
||||
external-change diagnosis. This preview includes the prior compact diagram
|
||||
controls and contextual Help; model/source/history semantics and REST contracts
|
||||
are unchanged.
|
||||
|
||||
Download the Windows x86-64 Studio ZIP and checksum, verify SHA256 and extract
|
||||
the whole folder. Launch `arcadia-studio.exe`, keeping `libunwind.dll` beside both
|
||||
executables. Read `START-HERE.txt` and the attached `VALIDATION.md`. Copy a complete
|
||||
example before editing; Save As copies model source with existing include paths,
|
||||
so companion/external artifacts need separate copying. The optional REST server,
|
||||
examples, offline guide and notices are included.
|
||||
|
||||
Desktop source **0e83157e09d52e6152df91208e41693b62da2d46**; packaged documentation
|
||||
**ef28f1784efe6717b0ca72c0eb3c97bc30ebfe47**. The server is the unchanged released
|
||||
715 artifact with recovered original build provenance and fresh tests of this
|
||||
bundle's selected runtime. Both binaries use the dev/unoptimized profile;
|
||||
packaging did not rebuild them.
|
||||
|
||||
Verified: 29 targeted desktop save checks, formatting, strict Clippy and matching
|
||||
GUI build; exact archive/extraction/notice/documentation identities; fresh
|
||||
independent source/artifact/native/REST/claims review. Two actual extracted
|
||||
desktop sessions exercise Apply, accurate refusal and recovery, genuine external
|
||||
edit protection, fresh Save As, reopen and no-op Save All. Complete 37-file byte
|
||||
oracles and full 30-source-file parsed Projects allow only the declared Activity
|
||||
name change. Both desktop processes exit 0 with empty logs and all 565 package
|
||||
files unchanged. Fresh server testing passes 23 scoped assertions, including exact
|
||||
OpenAPI, Unicode/CRLF, stale 412 and acknowledged-write persistence after owned
|
||||
forced restart. No new full-suite or graceful/power-loss claim is made.
|
||||
|
||||
ZIP: **34,191,561 bytes**, SHA256
|
||||
`8b4e353e075f22350a07794ee47a02cf85725501223299cf367134aa1f5b63b7`.
|
||||
|
||||
This is an unfinished scoped Windows development prerelease, not the complete
|
||||
OA/SA release or separately owned follow-up union. Dense diagrams, remaining
|
||||
Scenario group adapters, quantities/calculations/constraints, maintained
|
||||
libraries and broad accessibility/DPI remain unfinished. Native testing used
|
||||
one existing account/machine at 1442×932 with system-only child PATH. The footer's
|
||||
complete guidance was read with a pointer tooltip; keyboard-only access remains
|
||||
untested. Linux/WSL remains user-deferred. Existing releases/tags remain unchanged.
|
||||
|
||||
[Exact validation, independent review, preserved evidence and build/run instructions](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/{checkpoint}/harness/release-save-diagnostics-validation-20261001.md)
|
||||
identify the separate source/build/package scopes. This tag points to the
|
||||
reviewed evidence-only checkpoint **{checkpoint}**, with production inputs unchanged.
|
||||
'''
|
||||
with (root / 'release-notes.md').open('x', encoding='utf-8', newline='\n') as f:
|
||||
f.write(body)
|
||||
print('Prepared release notes for ' + checkpoint)
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
from pathlib import Path
|
||||
root = Path(__file__).resolve().parent
|
||||
source = Path('C:/ar-compact-01a0d717/.local/package39/release-assets.py').read_text(encoding='utf-8')
|
||||
before = 'v0.2.0-preview.compact-help.20261001'
|
||||
assert source.count(before) == 1
|
||||
source = source.replace(before, 'v0.2.0-preview.save-diagnostics.20261001')
|
||||
with (root / 'release-assets.py').open('x', encoding='utf-8', newline='\n') as f:
|
||||
f.write(source)
|
||||
print('Prepared new-tag-only uploader/readback helper. No network requests performed.')
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"mode": "publish",
|
||||
"release_id": 9,
|
||||
"tag": "v0.2.0-preview.save-diagnostics.20261001",
|
||||
"source": "e144e32e9984477a258759a9dcc75f6e499fc224",
|
||||
"url": "http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/tag/v0.2.0-preview.save-diagnostics.20261001",
|
||||
"draft": false,
|
||||
"assets": {
|
||||
"ArcadiaStudio-0.2.0-preview.save-diagnostics.20261001-x86_64-pc-windows-gnullvm.zip": {
|
||||
"bytes": 34191561,
|
||||
"sha256": "8b4e353e075f22350a07794ee47a02cf85725501223299cf367134aa1f5b63b7",
|
||||
"asset_id": 36,
|
||||
"url": "http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/download/v0.2.0-preview.save-diagnostics.20261001/ArcadiaStudio-0.2.0-preview.save-diagnostics.20261001-x86_64-pc-windows-gnullvm.zip"
|
||||
},
|
||||
"ArcadiaStudio-0.2.0-preview.save-diagnostics.20261001-x86_64-pc-windows-gnullvm.zip.sha256": {
|
||||
"bytes": 150,
|
||||
"sha256": "de08984ea2cbaf95b6241ac817f1ad8459a0b863adf7ee9fe51de0834bcd2d54",
|
||||
"asset_id": 37,
|
||||
"url": "http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/download/v0.2.0-preview.save-diagnostics.20261001/ArcadiaStudio-0.2.0-preview.save-diagnostics.20261001-x86_64-pc-windows-gnullvm.zip.sha256"
|
||||
},
|
||||
"VALIDATION.md": {
|
||||
"bytes": 2930,
|
||||
"sha256": "de5ecaf07b5a0014318e809cea152c738dfdfc55ff0aa8ed3d7ef78b701df9e4",
|
||||
"asset_id": 38,
|
||||
"url": "http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/download/v0.2.0-preview.save-diagnostics.20261001/VALIDATION.md"
|
||||
}
|
||||
}
|
||||
}
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
"""Upload/read back only this new scoped draft release; never replace assets."""
|
||||
from pathlib import Path
|
||||
import hashlib, json, sys, tomllib, urllib.error, urllib.parse, urllib.request, uuid
|
||||
root = Path(__file__).resolve().parent
|
||||
base = 'http://217.177.34.108:3000'
|
||||
api = base + '/api/v1/repos/sorokin.oleg.edu/ARCADIA-Studio'
|
||||
tag = 'v0.2.0-preview.save-diagnostics.20261001'
|
||||
token = tomllib.loads((Path.home()/'.codex/config.toml').read_text(encoding='utf-8'))['mcp_servers']['gitea']['env']['GITEA_ACCESS_TOKEN']
|
||||
class NoRedirect(urllib.request.HTTPRedirectHandler):
|
||||
def redirect_request(self, *args, **kwargs):
|
||||
raise RuntimeError('Unexpected redirect; credentials are not forwarded')
|
||||
opener = urllib.request.build_opener(NoRedirect)
|
||||
def request(url, method='GET', data=None, content_type=None):
|
||||
assert url.startswith(base+'/')
|
||||
headers = {'Authorization': 'token '+token}
|
||||
if content_type: headers['Content-Type'] = content_type
|
||||
with opener.open(urllib.request.Request(url, data=data, headers=headers, method=method), timeout=60) as response:
|
||||
return response.read()
|
||||
def get(url): return json.loads(request(url))
|
||||
def pin(data): return {'bytes': len(data), 'sha256': hashlib.sha256(data).hexdigest()}
|
||||
mode, release_id, source = sys.argv[1:]
|
||||
assert mode in ('upload', 'publish', 'verify')
|
||||
release_url = api+'/releases/'+str(int(release_id))
|
||||
release = get(release_url)
|
||||
assert release['tag_name'] == tag and release['target_commitish'] == source
|
||||
assert release['prerelease'] is True
|
||||
assets = root/'release-assets-ready01'
|
||||
files = sorted(p for p in assets.iterdir() if p.is_file())
|
||||
assert len(files) == 3
|
||||
records = {}
|
||||
if mode == 'upload':
|
||||
assert release['draft'] is True, 'Only a fresh draft is uploadable'
|
||||
for p in files:
|
||||
before = get(release_url+'/assets')
|
||||
same = [a for a in before if a['name']==p.name]
|
||||
assert len(same) <= 1
|
||||
data = p.read_bytes()
|
||||
if same:
|
||||
assert pin(request(same[0]['browser_download_url'])) == pin(data), 'Existing asset differs; never replace'
|
||||
asset = same[0]
|
||||
else:
|
||||
boundary = 'arcadia-'+uuid.uuid4().hex
|
||||
payload = ('--'+boundary+'\r\nContent-Disposition: form-data; name="attachment"; filename="'+p.name+'"\r\nContent-Type: application/octet-stream\r\n\r\n').encode()+data+('\r\n--'+boundary+'--\r\n').encode()
|
||||
asset = json.loads(request(release_url+'/assets?name='+urllib.parse.quote(p.name), 'POST', payload, 'multipart/form-data; boundary='+boundary))
|
||||
downloaded = request(asset['browser_download_url'])
|
||||
assert pin(downloaded) == pin(data), p.name
|
||||
records[p.name] = {**pin(data), 'asset_id': asset['id'], 'url': asset['browser_download_url']}
|
||||
print(json.dumps({'verified_asset': p.name, **pin(data)}), flush=True)
|
||||
else:
|
||||
existing = get(release_url+'/assets')
|
||||
assert {a['name'] for a in existing} == {p.name for p in files}
|
||||
for p in files:
|
||||
asset = next(a for a in existing if a['name']==p.name)
|
||||
assert pin(request(asset['browser_download_url'])) == pin(p.read_bytes())
|
||||
records[p.name] = {**pin(p.read_bytes()), 'asset_id': asset['id'], 'url': asset['browser_download_url']}
|
||||
if mode == 'publish':
|
||||
assert release['draft'] is True
|
||||
body = (root/'release-notes.md').read_text(encoding='utf-8')
|
||||
request(release_url, 'PATCH', json.dumps({'draft': False, 'prerelease': True, 'body': body}).encode(), 'application/json')
|
||||
release = get(release_url)
|
||||
if mode in ('publish', 'verify'):
|
||||
assert release['draft'] is False and release['prerelease'] is True
|
||||
assert release['body'] == (root/'release-notes.md').read_text(encoding='utf-8')
|
||||
assert get(api+'/releases/tags/'+urllib.parse.quote(tag, safe=''))['id'] == release['id']
|
||||
receipt = {'mode': mode, 'release_id': release['id'], 'tag': tag, 'source': source, 'url': release['html_url'], 'draft': release['draft'], 'assets': records}
|
||||
with (root/(mode+'-readback.json')).open('x', encoding='utf-8') as f:
|
||||
json.dump(receipt, f, indent=2)
|
||||
print(json.dumps({k:v for k,v in receipt.items() if k!='assets'}, indent=2), flush=True)
|
||||
@@ -0,0 +1,68 @@
|
||||
"""Upload/read back only this new scoped draft release; never replace assets."""
|
||||
from pathlib import Path
|
||||
import hashlib, json, sys, tomllib, urllib.error, urllib.parse, urllib.request, uuid
|
||||
root = Path(__file__).resolve().parent
|
||||
base = 'http://217.177.34.108:3000'
|
||||
api = base + '/api/v1/repos/sorokin.oleg.edu/ARCADIA-Studio'
|
||||
tag = 'v0.2.0-preview.save-diagnostics.20261001'
|
||||
token = tomllib.loads((Path.home()/'.codex/config.toml').read_text(encoding='utf-8'))['mcp_servers']['gitea']['env']['GITEA_ACCESS_TOKEN']
|
||||
class NoRedirect(urllib.request.HTTPRedirectHandler):
|
||||
def redirect_request(self, *args, **kwargs):
|
||||
raise RuntimeError('Unexpected redirect; credentials are not forwarded')
|
||||
opener = urllib.request.build_opener(NoRedirect)
|
||||
def request(url, method='GET', data=None, content_type=None):
|
||||
assert url.startswith(base+'/')
|
||||
headers = {'Authorization': 'token '+token}
|
||||
if content_type: headers['Content-Type'] = content_type
|
||||
with opener.open(urllib.request.Request(url, data=data, headers=headers, method=method), timeout=60) as response:
|
||||
return response.read()
|
||||
def get(url): return json.loads(request(url))
|
||||
def pin(data): return {'bytes': len(data), 'sha256': hashlib.sha256(data).hexdigest()}
|
||||
mode, release_id, source = sys.argv[1:]
|
||||
assert mode in ('upload', 'publish', 'verify')
|
||||
release_url = api+'/releases/'+str(int(release_id))
|
||||
release = get(release_url)
|
||||
assert release['tag_name'] == tag and release['target_commitish'] == source
|
||||
assert release['prerelease'] is True
|
||||
assets = root/'release-assets'
|
||||
files = sorted(p for p in assets.iterdir() if p.is_file())
|
||||
assert len(files) == 3
|
||||
records = {}
|
||||
if mode == 'upload':
|
||||
assert release['draft'] is True, 'Only a fresh draft is uploadable'
|
||||
for p in files:
|
||||
before = get(release_url+'/assets')
|
||||
same = [a for a in before if a['name']==p.name]
|
||||
assert len(same) <= 1
|
||||
data = p.read_bytes()
|
||||
if same:
|
||||
assert pin(request(same[0]['browser_download_url'])) == pin(data), 'Existing asset differs; never replace'
|
||||
asset = same[0]
|
||||
else:
|
||||
boundary = 'arcadia-'+uuid.uuid4().hex
|
||||
payload = ('--'+boundary+'\r\nContent-Disposition: form-data; name="attachment"; filename="'+p.name+'"\r\nContent-Type: application/octet-stream\r\n\r\n').encode()+data+('\r\n--'+boundary+'--\r\n').encode()
|
||||
asset = json.loads(request(release_url+'/assets?name='+urllib.parse.quote(p.name), 'POST', payload, 'multipart/form-data; boundary='+boundary))
|
||||
downloaded = request(asset['browser_download_url'])
|
||||
assert pin(downloaded) == pin(data), p.name
|
||||
records[p.name] = {**pin(data), 'asset_id': asset['id'], 'url': asset['browser_download_url']}
|
||||
print(json.dumps({'verified_asset': p.name, **pin(data)}), flush=True)
|
||||
else:
|
||||
existing = get(release_url+'/assets')
|
||||
assert {a['name'] for a in existing} == {p.name for p in files}
|
||||
for p in files:
|
||||
asset = next(a for a in existing if a['name']==p.name)
|
||||
assert pin(request(asset['browser_download_url'])) == pin(p.read_bytes())
|
||||
records[p.name] = {**pin(p.read_bytes()), 'asset_id': asset['id'], 'url': asset['browser_download_url']}
|
||||
if mode == 'publish':
|
||||
assert release['draft'] is True
|
||||
body = (root/'release-notes.md').read_text(encoding='utf-8')
|
||||
request(release_url, 'PATCH', json.dumps({'draft': False, 'prerelease': True, 'body': body}).encode(), 'application/json')
|
||||
release = get(release_url)
|
||||
if mode in ('publish', 'verify'):
|
||||
assert release['draft'] is False and release['prerelease'] is True
|
||||
assert release['body'] == (root/'release-notes.md').read_text(encoding='utf-8')
|
||||
assert get(api+'/releases/tags/'+urllib.parse.quote(tag, safe=''))['id'] == release['id']
|
||||
receipt = {'mode': mode, 'release_id': release['id'], 'tag': tag, 'source': source, 'url': release['html_url'], 'draft': release['draft'], 'assets': records}
|
||||
with (root/(mode+'-readback.json')).open('x', encoding='utf-8') as f:
|
||||
json.dump(receipt, f, indent=2)
|
||||
print(json.dumps({k:v for k,v in receipt.items() if k!='assets'}, indent=2), flush=True)
|
||||
@@ -0,0 +1,45 @@
|
||||
Save As destination collisions now explain that existing files are protected
|
||||
and offer clear recovery: choose a fresh source directory, or use Save All at
|
||||
the current entry. Genuine observed external edits keep their distinct
|
||||
external-change diagnosis. This preview includes the prior compact diagram
|
||||
controls and contextual Help; model/source/history semantics and REST contracts
|
||||
are unchanged.
|
||||
|
||||
Download the Windows x86-64 Studio ZIP and checksum, verify SHA256 and extract
|
||||
the whole folder. Launch `arcadia-studio.exe`, keeping `libunwind.dll` beside both
|
||||
executables. Read `START-HERE.txt` and the attached `VALIDATION.md`. Copy a complete
|
||||
example before editing; Save As copies model source with existing include paths,
|
||||
so companion/external artifacts need separate copying. The optional REST server,
|
||||
examples, offline guide and notices are included.
|
||||
|
||||
Desktop source **0e83157e09d52e6152df91208e41693b62da2d46**; packaged documentation
|
||||
**ef28f1784efe6717b0ca72c0eb3c97bc30ebfe47**. The server is the unchanged released
|
||||
715 artifact with recovered original build provenance and fresh tests of this
|
||||
bundle's selected runtime. Both binaries use the dev/unoptimized profile;
|
||||
packaging did not rebuild them.
|
||||
|
||||
Verified: 29 targeted desktop save checks, formatting, strict Clippy and matching
|
||||
GUI build; exact archive/extraction/notice/documentation identities; fresh
|
||||
independent source/artifact/native/REST/claims review. Two actual extracted
|
||||
desktop sessions exercise Apply, accurate refusal and recovery, genuine external
|
||||
edit protection, fresh Save As, reopen and no-op Save All. Complete 37-file byte
|
||||
oracles and full 30-source-file parsed Projects allow only the declared Activity
|
||||
name change. Both desktop processes exit 0 with empty logs and all 565 package
|
||||
files unchanged. Fresh server testing passes 23 scoped assertions, including exact
|
||||
OpenAPI, Unicode/CRLF, stale 412 and acknowledged-write persistence after owned
|
||||
forced restart. No new full-suite or graceful/power-loss claim is made.
|
||||
|
||||
ZIP: **34,191,561 bytes**, SHA256
|
||||
`8b4e353e075f22350a07794ee47a02cf85725501223299cf367134aa1f5b63b7`.
|
||||
|
||||
This is an unfinished scoped Windows development prerelease, not the complete
|
||||
OA/SA release or separately owned follow-up union. Dense diagrams, remaining
|
||||
Scenario group adapters, quantities/calculations/constraints, maintained
|
||||
libraries and broad accessibility/DPI remain unfinished. Native testing used
|
||||
one existing account/machine at 1442×932 with system-only child PATH. The footer's
|
||||
complete guidance was read with a pointer tooltip; keyboard-only access remains
|
||||
untested. Linux/WSL remains user-deferred. Existing releases/tags remain unchanged.
|
||||
|
||||
[Exact validation, independent review, preserved evidence and build/run instructions](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/e144e32e9984477a258759a9dcc75f6e499fc224/harness/release-save-diagnostics-validation-20261001.md)
|
||||
identify the separate source/build/package scopes. This tag points to the
|
||||
reviewed evidence-only checkpoint **e144e32e9984477a258759a9dcc75f6e499fc224**, with production inputs unchanged.
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"mode": "upload",
|
||||
"release_id": 9,
|
||||
"tag": "v0.2.0-preview.save-diagnostics.20261001",
|
||||
"source": "e144e32e9984477a258759a9dcc75f6e499fc224",
|
||||
"url": "http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/tag/v0.2.0-preview.save-diagnostics.20261001",
|
||||
"draft": true,
|
||||
"assets": {
|
||||
"ArcadiaStudio-0.2.0-preview.save-diagnostics.20261001-x86_64-pc-windows-gnullvm.zip": {
|
||||
"bytes": 34191561,
|
||||
"sha256": "8b4e353e075f22350a07794ee47a02cf85725501223299cf367134aa1f5b63b7",
|
||||
"asset_id": 36,
|
||||
"url": "http://217.177.34.108:3000/attachments/3d9dfc28-1040-499b-9735-6d387baa13a1"
|
||||
},
|
||||
"ArcadiaStudio-0.2.0-preview.save-diagnostics.20261001-x86_64-pc-windows-gnullvm.zip.sha256": {
|
||||
"bytes": 150,
|
||||
"sha256": "de08984ea2cbaf95b6241ac817f1ad8459a0b863adf7ee9fe51de0834bcd2d54",
|
||||
"asset_id": 37,
|
||||
"url": "http://217.177.34.108:3000/attachments/4b3244eb-d238-40c7-8818-5ca4ccf07a4b"
|
||||
},
|
||||
"VALIDATION.md": {
|
||||
"bytes": 2930,
|
||||
"sha256": "de5ecaf07b5a0014318e809cea152c738dfdfc55ff0aa8ed3d7ef78b701df9e4",
|
||||
"asset_id": 38,
|
||||
"url": "http://217.177.34.108:3000/attachments/f9b3e960-ac16-4648-a0a4-171da67e1fc7"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -28,12 +28,15 @@ are unchanged. Neither binary was rebuilt during packaging.
|
||||
|
||||
ZIP: 34,191,561 bytes, 565 files. The [evidence packet](experiments/save-diagnostics-package-20261001/README.md) preserves exact provenance,
|
||||
scripts/receipts, native captures, full source/model and HTTP records; its index
|
||||
allows byte verification. This record is a pre-publication validation checkpoint;
|
||||
release/tag and download readback are recorded only after confirmed publication.
|
||||
allows byte verification. [Confirmed publication](experiments/save-diagnostics-package-20261001/publication.md)
|
||||
delivers release 9 from evidence checkpoint `e144e32e9984477a258759a9dcc75f6e499fc224`,
|
||||
with all three assets downloaded and matched. The tag's original validation
|
||||
checkpoint predates publication; these later receipts do not rewrite its history.
|
||||
The [fresh independent final review](experiments/save-diagnostics-package-20261001/raw/independent-review.md)
|
||||
finds no material blocker in this exact bounded artifact. Parent collection and
|
||||
offline and Git index verification pass for 164 indexed evidence files and
|
||||
637 source inputs. Publication/download verification remains a separate gate.
|
||||
637 source inputs. Publication/download verification is a separate completed gate
|
||||
in the linked receipts.
|
||||
The [independent packet closure review](experiments/save-diagnostics-package-20261001/packet-review.md)
|
||||
also verifies every copied artifact against its original and passes the collected
|
||||
verifier with staged-index/current-source checks.
|
||||
|
||||
@@ -9,7 +9,8 @@ adds published compact Help evidence from `6ea7518e` without changing any crate,
|
||||
Cargo, example, documentation or specification inputs relative to the tested code.
|
||||
The bounded contribution validation below is complete. [Fresh scoped package
|
||||
validation](release-save-diagnostics-validation-20261001.md) supplies later
|
||||
extracted-runtime evidence; publication and broader integration remain separate.
|
||||
extracted-runtime evidence and links confirmed scoped publication. Broader
|
||||
follow-up integration remains separate.
|
||||
Windows only; no Linux/WSL validation is claimed
|
||||
or requested. The earlier #39 release remains separate and retains its old wording.
|
||||
|
||||
@@ -127,15 +128,20 @@ Its inventory and read-only `verify.py` allow another checkout to check hashes,
|
||||
phase receipt byte sets and complete source/model equality without the local
|
||||
binaries or live server store. Replaying native interaction is a separate check.
|
||||
|
||||
## Limits and remaining delivery
|
||||
## Contribution limits and subsequent delivery
|
||||
|
||||
The longer persistent collision footer truncates; its pointer tooltip is readable.
|
||||
Keyboard-only tooltip access remains untested. On a clean document, the header
|
||||
“All changes saved” describes absence of local edits; it does not override the
|
||||
explicit external-conflict footer. No exhaustive save-error, concurrency-race,
|
||||
new-platform, packaged #46 release or complete OA/SA acceptance is claimed.
|
||||
new-platform or complete OA/SA acceptance is claimed. The original contribution
|
||||
review alone did not establish packaged delivery; the later
|
||||
[fresh package validation](release-save-diagnostics-validation-20261001.md) and
|
||||
[confirmed publication](experiments/save-diagnostics-package-20261001/publication.md)
|
||||
supply that separate evidence.
|
||||
|
||||
The independent final review found no material blocker within this bounded
|
||||
contribution. Source and its byte-preserved evidence are published; broader
|
||||
integration, packaged delivery and issue closure remain pending in Gitea.
|
||||
contribution. Source and its byte-preserved evidence are published, and scoped
|
||||
release 9 delivers the correction. Broader follow-up integration and live
|
||||
coordination remain in [Gitea issue 46](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/46).
|
||||
Earlier #39 release 8 remains unchanged and does not contain this diagnostic fix.
|
||||
|
||||
Reference in New Issue
Block a user