Publish verified canvas and repair Windows prerelease checkpoint
This commit is contained in:
@@ -82,3 +82,5 @@ harness/release-camera-a57-independent-review-20260912.md -text -whitespace
|
||||
harness/experiments/canvas-repair-package-33e30c1-20260912/** -text -whitespace
|
||||
harness/experiments/canvas-repair-native-33e30c1-20260912/** -text -whitespace
|
||||
harness/experiments/canvas-repair-server-33e30c1-20260912/** -text -whitespace
|
||||
|
||||
harness/experiments/canvas-repair-publication-20260912/** -text -whitespace
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
# Integrated checkpoint — 2026-09-12
|
||||
|
||||
Codex-ytr83r, isolated branch `codex/canvas-union-ytr83r-20260911`. Current source `33e30c1` combines the a57 canvas, cb91525 grapheme and narrow saved-destination repair corrections. Its 530 frozen inputs match HEAD; independent repair review found no actionable finding. Windows desktop tests, strict Clippy, GUI build and bounded matching native/package acceptance passed. The canvas-repair prerelease is prepared for publication; this checkpoint is not a publication or full [user-goal](../PROJECT_GOAL.md) completion claim. Live [canvas integration](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/2), [native/release acceptance](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/5), [saved-destination repair](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/6) and [project overview](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/1) retain ownership and plans. Earlier production `865483b` and its package remain preserved.
|
||||
Codex-ytr83r, isolated branch `codex/canvas-union-ytr83r-20260911`. Current source `33e30c1` combines the a57 canvas, cb91525 grapheme and narrow saved-destination repair corrections. Its 530 frozen inputs match HEAD; independent repair review found no actionable finding. Windows desktop tests, strict Clippy, GUI build and bounded matching native/package acceptance passed. The [canvas-repair Windows prerelease](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/tag/v0.2.0-preview.canvas-repair.20260912) is published; ZIP, checksum and validation attachments were downloaded and hash-verified. [Publication record](release-canvas-repair-publication-20260912.md) preserves the exact identities. This is not a full [user-goal](../PROJECT_GOAL.md) completion claim. Live [canvas integration](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/2), [native/release acceptance](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/5), [saved-destination repair](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/6) and [project overview](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/1) retain ownership and plans. Earlier production `865483b` and its package remain preserved.
|
||||
|
||||
## Verified code and capabilities
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
# Published canvas/repair Windows prerelease
|
||||
|
||||
Release5, tag `v0.2.0-preview.canvas-repair.20260912`, identifies Studio source33e30c1. Evidence checkpoint0c53c210306d768fc8b1ae6cee3618701c887bb6 preserves completed native/package/server acceptance. The server retains its separate321897f provenance.
|
||||
|
||||
All three uploaded attachments were downloaded through same-origin GET requests with redirects refused. Their complete bytes, SHA256, metadata sizes and final on-disk readback matched the explicit local assets. Remote tag/release/asset identity was checked before and after. `readback.json` records exact time, IDs, lengths and hashes. ZIP and duplicate downloaded artifacts are excluded; the unchanged validation attachment and prose are retained. `expected-assets.json` records private source paths only as provenance. No credentials are included.
|
||||
|
||||
The independent release review preserves pre-substitution file hashes; the only final prose change was insertion of the immutable evidence link. Validation attachment links were converted from relative paths to the same evidence commit, with each target checked locally. Its local-acceptance wording intentionally predates publication; this separate receipt completes publication evidence. `acceptance-staged-readback.json` binds all254 previously committed evidence files to exact Git bytes.
|
||||
|
||||
`manifest.json` binds exact copied originals; record construction verified original/copy/original bytes. Source scripts are provenance, not portable reproduction instructions. The Windows build is an unfinished unoptimized prerelease; full OA/SA completion and Linux acceptance are not claimed.
|
||||
@@ -0,0 +1,36 @@
|
||||
# Canvas and source repair — Windows prerelease validation
|
||||
|
||||
Version `v0.2.0-preview.canvas-repair.20260912`; release owner Codex-ytr83r. This records completed local acceptance for an unfinished Windows development milestone. Publication and downloaded-asset readback are recorded separately after upload. The full OA/SA goal remains incomplete; Linux is user-paused.
|
||||
|
||||
## Source and artifacts
|
||||
|
||||
Studio source: **33e30c1cd7a6c99513a0ebd02ba68fccbad8f58d**. Its 530 frozen inputs / 9,727,025 bytes match the built source and subsequent evidence-only checkpoints. Frozen manifest SHA256 `0f21b9a852cf44699bf29fce0a35ec460744c85f5e26f0ea4920e8568211e312`. The earlier capture baseline in raw receipts is provenance, not a different final source attribution. All commands used the recorded Rust/Cargo1.98.1 Windows GNU/LLVM toolchain, one build job, offline/locked dependencies and the unoptimized development profile.
|
||||
|
||||
| Artifact | Bytes | SHA256 |
|
||||
| --- | ---: | --- |
|
||||
| arcadia-studio.exe | 113,049,088 | `504862533caad919912e40c89bed4b1e43ba98138c42085480602a0a21fff658` |
|
||||
| arcadia-server.exe | 39,621,120 | `aba87a5fb795deb995029a737c2ebb9d2b44c8d274edaa2295363b226d9af6be` |
|
||||
| libunwind.dll | 190,464 | `aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a` |
|
||||
| ArcadiaStudio-0.2.0-preview.canvas-repair.20260912-x86_64-pc-windows-gnullvm.zip | 32,752,913 | `1e962fadce47922bdcf69e0e1d89e144e582083d940f4c9c9a5c6fbfece95c24` |
|
||||
|
||||
The optional server is the unchanged artifact from **321897fd55af9e07afa2c6ebf1e50be49e86f7d9**, not a new33e build. Core/server source trees and the workspace manifest match; the sole intervening Cargo.lock difference is a desktop-only unicode-segmentation dependency edge. [Package/component provenance](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/0c53c210306d768fc8b1ae6cee3618701c887bb6/harness/experiments/canvas-repair-package-33e30c1-20260912/README.md) preserves the exact comparison and original server manifest.
|
||||
|
||||
## Completed checks
|
||||
|
||||
- Five focused saved-destination tests passed; the same five are included in **761 desktop all-target tests**, with zero failures/ignored. Strict desktop all-target Clippy (`-D warnings`) and the matching Studio build passed. All530 frozen inputs were checked before each gate and after build. [Closed gate logs, commands and timings](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/0c53c210306d768fc8b1ae6cee3618701c887bb6/harness/experiments/repair-union-windows-33e30c1-20260912/README.md).
|
||||
- Package production validated PE dependencies, notices, documentation, copied hashes and ZIP contents. Fresh extraction independently read back **all559 files**, exact sizes/hashes and checksum inventory. The initial attempt failed before staging on equivalent timestamp spellings; a reviewed r2 comparison preserved100ns distinctions and all other fields. Both attempts are retained. [Producer/extraction evidence](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/0c53c210306d768fc8b1ae6cee3618701c887bb6/harness/experiments/canvas-repair-package-33e30c1-20260912/README.md).
|
||||
- Exact packaged Studio: valid original → invalid second destination → source repair equal to the former accepted content → Apply still unsaved → Close/Cancel → Save. The destination matched its predeclared expected complete model/source/physical bytes; the original file remained unchanged. Graphical rename, one Undo and one Redo, each saved separately, matched exact expectations. A prepared real v1 interrupted-save journal rolled disk back while retaining current accepted content as unsaved; Close/Cancel and Save retry passed. Seven complete model/source comparisons plus one invalid-source bytes-only comparison support this route.
|
||||
- Packaged Unicode: combining accent and joined-emoji labels rendered in OA/SA; Create and lane-header selections resolved to the expected aliases. Wide Latin/CJK labels remained contained, with full names in Properties. Separate passive Saves matched both complete two-file models/sources. These two checks bring this run to nine valid complete comparisons plus the one invalid bytes-only check. Long wide labels can still be hard-clipped; string integrity does not establish font-width-aware fitting.
|
||||
- Packaged Home discovered the bundled water-pressure example from an unrelated working directory (94objects/62links/1check). Offline guide search and the scenario topic worked. This was smoke inspection, not a complete walkthrough evaluation.
|
||||
- Studio launched with a fresh private profile and child PATH restricted to Windows plus the extracted package, PID1660. A normal Alt+F4 completed with **exit0**, empty stdout/stderr, and **all559 package files unchanged**. Bound exit was recorded2026-09-12T11:49:40.5672408Z. [Native action account, original images, independent reviews and closed receipts](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/0c53c210306d768fc8b1ae6cee3618701c887bb6/harness/experiments/canvas-repair-native-33e30c1-20260912/README.md).
|
||||
- Fresh extracted server passed **25 REST requests/assertions** covering candidate nonmutation, warning-only commit, source/JSON validation parity, rejected-write atomicity, repair and complete source/model persistence through restart. Seven independent raw-response pairs matched; all559 package files stayed unchanged. Two test-owned servers were deliberately terminated and confirmed stopped; these are not graceful-exit checks. The repaired fixture retains its expected unrelated sequence-gap warning. [Raw server evidence](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/0c53c210306d768fc8b1ae6cee3618701c887bb6/harness/experiments/canvas-repair-server-33e30c1-20260912/README.md).
|
||||
|
||||
## Reused evidence and limits
|
||||
|
||||
Earlier a57/69DB source/consumer creation passed13 full oracles and45 screenshots for Cancel, Activity/Lifeline, Function/contribution, SystemActor/StateMachine/optional view, saved Undo/Redo and reopening. Separate a57 camera evidence covers selected OA/SA pan,100/125/Fit and minimum1100×700-client Fit66 selection/clipping, followed by exact passive Save and exit0. [Staged creation](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/0c53c210306d768fc8b1ae6cee3618701c887bb6/harness/experiments/staged-source-native-a57c334-20260911/README.md), [camera checks](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/0c53c210306d768fc8b1ae6cee3618701c887bb6/harness/experiments/canvas-camera-a57c334-20260912/README.md). Older865/BF9 child-work evidence separately covers responsibility/identity preservation, nested children and history/reopen. [Child-work continuation](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/0c53c210306d768fc8b1ae6cee3618701c887bb6/harness/experiments/native-child-continuation-865483b-20260911/README.md). These remain bound to their original executable/source versions and are not additional tests to sum with761.
|
||||
|
||||
The current native frame was1442×932. Small fitted labels, long-name clipping, arbitrary zoom/font/DPI, full keyboard/accessibility coverage, every recovery fault and full product usability remain outside this milestone. The prepared journal exercises actual recovery format, not an observed application crash. Evaluated quantities/calculations/constraints, maintained libraries, large-model text ergonomics and complete OA/SA graphical/textual parity remain unfinished. Separately delivered peer definition/reference navigation and pending alias-preview work are not included here. Linux/WSL setup, networking, builds and checks remain explicitly paused.
|
||||
|
||||
## Run
|
||||
|
||||
Download the complete Windows ZIP and checksum, verify the SHA256 above, then extract the entire folder. Run `arcadia-studio.exe`; keep `libunwind.dll` beside both executables. `START-HERE.txt`, [Windows packaging guidance](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/0c53c210306d768fc8b1ae6cee3618701c887bb6/docs/windows-packaging.md) and [server guide](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/0c53c210306d768fc8b1ae6cee3618701c887bb6/docs/server.md) explain the portable bundle and optional REST server. Copy the whole example folder before editing; source Save As does not copy evidence files. The separate standalone `arcadia` CLI is **not included** in this two-executable package.
|
||||
+1533
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"evidence_commit": "0c53c210306d768fc8b1ae6cee3618701c887bb6",
|
||||
"tag": "v0.2.0-preview.canvas-repair.20260912",
|
||||
"source_commit": "33e30c1cd7a6c99513a0ebd02ba68fccbad8f58d",
|
||||
"tag_commit": "33e30c1cd7a6c99513a0ebd02ba68fccbad8f58d",
|
||||
"assets": [
|
||||
{
|
||||
"name": "ArcadiaStudio-0.2.0-preview.canvas-repair.20260912-x86_64-pc-windows-gnullvm.zip",
|
||||
"local_path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\native-repair-union-33e30c1-r2\\dist\\ArcadiaStudio-0.2.0-preview.canvas-repair.20260912-x86_64-pc-windows-gnullvm.zip",
|
||||
"bytes": 32752913,
|
||||
"sha256": "1e962fadce47922bdcf69e0e1d89e144e582083d940f4c9c9a5c6fbfece95c24"
|
||||
},
|
||||
{
|
||||
"name": "ArcadiaStudio-0.2.0-preview.canvas-repair.20260912-x86_64-pc-windows-gnullvm.zip.sha256",
|
||||
"local_path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\native-repair-union-33e30c1-r2\\dist\\ArcadiaStudio-0.2.0-preview.canvas-repair.20260912-x86_64-pc-windows-gnullvm.zip.sha256",
|
||||
"bytes": 147,
|
||||
"sha256": "50401db245912a3980b9c87d703a5fe422b34202fdfd2303513ec8cfbe024084"
|
||||
},
|
||||
{
|
||||
"name": "VALIDATION.md",
|
||||
"local_path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\canvas-repair-publication-20260912\\VALIDATION.md",
|
||||
"bytes": 8421,
|
||||
"sha256": "53f8b109f543a228609ffe82ea710f02e833ead4ecfe683bcbd387b22febaa11"
|
||||
}
|
||||
],
|
||||
"release_id": 5
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
# Independent canvas/repair release accuracy review
|
||||
|
||||
Reviewer `/root/repair_review`, 2026-09-12. **No actionable material accuracy findings in the reviewed validation text or bounded release claims.** This assesses release wording against the available evidence; it is not new runtime acceptance or a publication check.
|
||||
|
||||
## Exact reviewed prose
|
||||
|
||||
| File | SHA256 |
|
||||
| --- | --- |
|
||||
| `.local/canvas-union-ytr83r-20260911/harness/release-canvas-repair-validation-20260912.md` | `1FA65CD6A5D09EBF6C00F8F543D8F8510DC141EEDA6520457D9D738E510F4CA2` |
|
||||
| `.local/canvas-repair-release-draft.md` | `A69F213ADF50DB8A24EA73979C9993510913B332BFB1C7880FAAB82D0D5F9066` |
|
||||
| `.local/canvas-repair-release-notes-final.md` | `86CD0F8208ED43FFD30DBDDFF4B405C90A8C4AA7A580E8D845B07DAB1876F113` |
|
||||
|
||||
The validation and original draft hashes were read again after the evidence checks and remained identical. Root subsequently superseded the original draft with the final-notes file above, which was also read in full. Its artifact/source identities,761 count, native/server scope, reusable-evidence attribution and unfinished Windows limits agree with this review; no new material finding. Its sole `EVIDENCE_URL` marker is deliberately awaiting the committed immutable evidence link. That final link substitution and uploaded asset/readback remain outside this review's publication claims. The original draft's pending text and branch links are historical, not the proposed final release body. The native archive was still being assembled by its owner and was not edited or independently inventoried in this review.
|
||||
|
||||
## Claim and evidence consistency
|
||||
|
||||
- **Source/artifacts:** reviewed source33e30c1, 530-file/9,727,025-byte freeze, source manifest0F21B9A8, Studio50486253/113,049,088 bytes, serverABA87A5F/39,621,120 bytes, runtimeAA282FA4/190,464 bytes and ZIP1E962FAD/32,752,913 bytes agree with the package result, extraction readback and postflight. Source321897f attribution for the reused server is explicit. The source-tree equality and desktop-only lock edge are accurately distinguished from an unchanged entire Cargo.lock or a current server rebuild.
|
||||
- **Automated counts:** raw desktop log ends with761 passed,0 failed,0 ignored,0 filtered; the five focused tests are correctly included within761. Clippy's actual recorded command includes `--all-targets --offline --locked -- -D warnings`. Successful matching build and before/after530-input receipts support the stated scope. Earlier a57/865 results are not summed or mislabeled as current tests.
|
||||
- **Package history:** the initial attempt's timestamp-spelling rejection occurred before metadata/staging; r2 preserves100ns distinctions and other gate fields. Producer and extraction success are distinguished from native acceptance. The559-file inventory, checksum verification and existing closed raw producer/extraction archives support the wording.
|
||||
- **Current native:** independently enumerated the ten raw checkpoint JSON files: nine have `oracle_exit: 0`, complete physical equality and passed results; one invalid missing-include checkpoint deliberately has no model oracle. Seven belong to repair/history/recovery, two to typography. Root's action account and the two separate native reviews support the visible dirty/guard/Save, history, prepared v1 rollback, Unicode selection/containment, Home/walkthrough/guide and frame-size wording. Limitations correctly distinguish observed hard clipping, prepared journal versus actual crash, immediate stale frames, narrow fixture coverage and root-supplied input history from what images or filesystem receipts alone establish.
|
||||
- **Close/runtime:** raw launch and close receipts bind PID1660, the same start time, fresh profile, unrelated cwd and Windows-plus-package child PATH. Close records exit0 at11:49:40.5672408Z, empty GUI stdout/stderr,559 unchanged package files and unchanged extraction/build manifests. This is not conflated with intentional termination of the server probes.
|
||||
- **Server:** raw result records25 requests and repair revision3/final revision4 with the expected unrelated `sequence_gap` warning. Independently reread all seven listed raw-response pairs and confirmed byte equality. Runner exit0, separate postflight559 unchanged files and intentional owned-server stop semantics agree with the validation. The text does not claim graceful server shutdown or empty server logs.
|
||||
- **Reused native evidence:** adjacent a57 staged and camera archive READMEs support13 staged oracles/45 images, selected OA/SA100/125/Fit/minimum-frame routes, clipping/selection/passive Save and their original69DB source. Older865 child-work evidence retains its own provenance. The final current-native frame1442×932 and remaining font/DPI/zoom/keyboard/accessibility limits prevent these earlier observations from becoming an unsupported universal acceptance claim.
|
||||
- **Launch/package contents:** instructions to extract the entire ZIP, retain adjacent runtime, launch Studio and consult START-HERE/server/platform guides match the packaged layout. The optional server is included; the standalone CLI and peer definition/reference navigation are expressly outside this bundle. Copying the whole example before editing is consistent with the package/source-save policy. Windows development-profile and Linux-paused/incomplete OA/SA scope are clear.
|
||||
|
||||
## Precise native reopen boundary
|
||||
|
||||
The actual picker reopen after graphical history selected the unchanged `working-original/project.arcadia`, not the repaired/renamed `working-missing` destination. The latter's saved states were independently parsed/compared as complete Project, reachable source and physical bytes; they were not separately reopened through the GUI in this run. The current validation text and final release notes do not claim that repaired-destination native reopen, so this is **not a material overclaim or release blocker for their stated scope**. A concise sentence in the validation limitations can make this boundary explicit. Earlier a57 actual-reopen evidence remains bound to that source and does not close every future/current workflow. This review does not reinterpret broader issue5 or full-product completion requirements.
|
||||
|
||||
## Review limits
|
||||
|
||||
Read actual package/source/gate manifests and logs, native action account/checkpoint receipts/launch-close records and prior independent visual reviews, server runner/postflight/results and seven original raw-response pairs, and reused archive summaries. No compiler, oracle, GUI, server, archive-production, upload or release action was performed. Original40 screenshots were assessed by the referenced native reviewer; this prose review did not repeat that complete visual inspection. This reviewer previously produced the packaging adapters/evidence, so this is an independent assessment of the new release prose and cross-artifact attribution, not a fresh independent audit of its own packaging implementation. Only this private review note was written.
|
||||
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"utc": "2026-09-12T12:05:52.607834+00:00",
|
||||
"result": "passed",
|
||||
"files": [
|
||||
{
|
||||
"path": "readback.json",
|
||||
"original": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\canvas-repair-publication-20260912\\downloaded\\readback.json",
|
||||
"bytes": 1166,
|
||||
"sha256": "6cf81ac5101700c9f322eaba0cca2069e6869d7235168c4b0f8b8b60db932997"
|
||||
},
|
||||
{
|
||||
"path": "expected-assets.json",
|
||||
"original": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\canvas-repair-publication-20260912\\expected-assets.json",
|
||||
"bytes": 1426,
|
||||
"sha256": "729462f6a997c76c77aed694df2683bc8774e898eae2e49bfef1e22751e8aaf0"
|
||||
},
|
||||
{
|
||||
"path": "VALIDATION.md",
|
||||
"original": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\canvas-repair-publication-20260912\\VALIDATION.md",
|
||||
"bytes": 8421,
|
||||
"sha256": "53f8b109f543a228609ffe82ea710f02e833ead4ecfe683bcbd387b22febaa11"
|
||||
},
|
||||
{
|
||||
"path": "release-notes.md",
|
||||
"original": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\canvas-repair-publication-20260912\\release-notes.md",
|
||||
"bytes": 2200,
|
||||
"sha256": "b2311791a192423485ba403474cf5a5df50dd3c9d94d36f042456630743abb0e"
|
||||
},
|
||||
{
|
||||
"path": "independent-release-review.md",
|
||||
"original": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\canvas-repair-release-independent-review.md",
|
||||
"bytes": 6978,
|
||||
"sha256": "2040d3dfcc2b1e4a9753cfc79736a87e41586f2bb9a62f0e14451a84f44a8840"
|
||||
},
|
||||
{
|
||||
"path": "verify-canvas-repair-assets.py",
|
||||
"original": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\verify-canvas-repair-assets.py",
|
||||
"bytes": 9916,
|
||||
"sha256": "9dbb50022a76ad918b2014ee2489345bb9b355cc93806ff83d2d59a48ecee969"
|
||||
},
|
||||
{
|
||||
"path": "prepare-release-assets.py",
|
||||
"original": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\prepare-canvas-repair-release-assets.py",
|
||||
"bytes": 2024,
|
||||
"sha256": "9402ae6f5fd834fabc5074b2d825948e7cdb9be9c11ab467786eb29c3d41fb94"
|
||||
},
|
||||
{
|
||||
"path": "acceptance-staged-readback.json",
|
||||
"original": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\canvas-repair-delivery-staged-readback.json",
|
||||
"bytes": 75276,
|
||||
"sha256": "bb0dba2d950d1bea0f9ec9beba1bc0fa8083766269c5ff17bf12f5a184de1e5e"
|
||||
},
|
||||
{
|
||||
"path": "README.md",
|
||||
"bytes": 1640,
|
||||
"sha256": "30513625a2e50199a36f14c0e359cf1de804d217977d8bb82f253a7ad11d3400"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
from pathlib import Path
|
||||
import hashlib,json,re,subprocess
|
||||
root=Path(__file__).resolve().parent.parent
|
||||
work=root/'.local/canvas-union-ytr83r-20260911'
|
||||
commit='0c53c210306d768fc8b1ae6cee3618701c887bb6'
|
||||
assert subprocess.check_output(['git','rev-parse','HEAD'],cwd=work).decode().strip()==commit
|
||||
pub=root/'.local/canvas-repair-publication-20260912';pub.mkdir(exist_ok=False)
|
||||
base='http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/'+commit+'/'
|
||||
validation=work/'harness/release-canvas-repair-validation-20260912.md'
|
||||
s=validation.read_text(encoding='utf-8')
|
||||
def link(m):
|
||||
target=m.group(2)
|
||||
if '://' in target or target.startswith('#'):return m.group(0)
|
||||
path=(validation.parent/target).resolve();rel=path.relative_to(work.resolve()).as_posix()
|
||||
assert path.exists(),rel
|
||||
return '['+m.group(1)+']('+base+rel+')'
|
||||
s=re.sub(r'\[([^\]]+)\]\(([^)]+)\)',link,s)
|
||||
with (pub/'VALIDATION.md').open('x',encoding='utf-8',newline='\n') as f:f.write(s)
|
||||
notes=(root/'.local/canvas-repair-release-notes-final.md').read_text(encoding='utf-8')
|
||||
assert notes.count('EVIDENCE_URL')==1
|
||||
notes=notes.replace('EVIDENCE_URL',base+'harness/release-canvas-repair-validation-20260912.md')
|
||||
assert 'PENDING' not in notes and 'EVIDENCE_URL' not in notes
|
||||
with (pub/'release-notes.md').open('x',encoding='utf-8',newline='\n') as f:f.write(notes)
|
||||
dist=root/'.local/native-repair-union-33e30c1-r2/dist'
|
||||
name='ArcadiaStudio-0.2.0-preview.canvas-repair.20260912-x86_64-pc-windows-gnullvm.zip'
|
||||
assets=[]
|
||||
for p in [dist/name,dist/(name+'.sha256'),pub/'VALIDATION.md']:
|
||||
data=p.read_bytes();assets.append({'name':p.name,'local_path':str(p),'bytes':len(data),'sha256':hashlib.sha256(data).hexdigest()})
|
||||
record={'evidence_commit':commit,'tag':'v0.2.0-preview.canvas-repair.20260912','source_commit':'33e30c1cd7a6c99513a0ebd02ba68fccbad8f58d','tag_commit':'33e30c1cd7a6c99513a0ebd02ba68fccbad8f58d','assets':assets}
|
||||
with (pub/'local-assets.json').open('x',encoding='utf-8') as f:json.dump(record,f,indent=2)
|
||||
print(json.dumps(record))
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"pass": true,
|
||||
"checked_utc": "2026-09-12T12:04:29.494533+00:00",
|
||||
"release_id": 5,
|
||||
"tag": "v0.2.0-preview.canvas-repair.20260912",
|
||||
"tag_commit": "33e30c1cd7a6c99513a0ebd02ba68fccbad8f58d",
|
||||
"studio_source": "33e30c1cd7a6c99513a0ebd02ba68fccbad8f58d",
|
||||
"source_ancestor_verified_locally": true,
|
||||
"assets": [
|
||||
{
|
||||
"name": "ArcadiaStudio-0.2.0-preview.canvas-repair.20260912-x86_64-pc-windows-gnullvm.zip",
|
||||
"asset_id": 13,
|
||||
"bytes": 32752913,
|
||||
"sha256": "1e962fadce47922bdcf69e0e1d89e144e582083d940f4c9c9a5c6fbfece95c24",
|
||||
"local_equal": true
|
||||
},
|
||||
{
|
||||
"name": "ArcadiaStudio-0.2.0-preview.canvas-repair.20260912-x86_64-pc-windows-gnullvm.zip.sha256",
|
||||
"asset_id": 14,
|
||||
"bytes": 147,
|
||||
"sha256": "50401db245912a3980b9c87d703a5fe422b34202fdfd2303513ec8cfbe024084",
|
||||
"local_equal": true
|
||||
},
|
||||
{
|
||||
"name": "VALIDATION.md",
|
||||
"asset_id": 15,
|
||||
"bytes": 8421,
|
||||
"sha256": "53f8b109f543a228609ffe82ea710f02e833ead4ecfe683bcbd387b22febaa11",
|
||||
"local_equal": true
|
||||
}
|
||||
],
|
||||
"network_operations": "GET only; configured origin; redirects refused"
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
This Windows preview combines editable behavior canvases, contextual source and child-work creation, lifecycle rendering, grapheme-safe label shortening and safer source repair. Repairing a different file to previously accepted content now stays unsaved until that destination is written; interrupted-save recovery preserves the current model and its history.
|
||||
|
||||
Download the Windows ZIP, extract the entire folder, then run **arcadia-studio.exe**. Keep `libunwind.dll` beside the executables. The bundle includes the optional REST server, examples, offline help, documentation and dependency notices. Read `START-HERE.txt` and the attached **VALIDATION.md**. Copy a complete example folder before editing. The standalone source CLI is distributed separately.
|
||||
|
||||
Verified: **761 desktop tests**, strict desktop Clippy and the matching GUI build. Native checks on this package cover repair/Close/Cancel/Save, graphical Undo/Redo, prepared-journal recovery, Unicode selection/source preservation, bundled example/help and normal exit0 with empty logs. All559 package files stayed unchanged. Fresh packaged-server checks passed25 REST editing/persistence requests. Earlier source-bound creation, child-work and camera evidence is identified separately in VALIDATION.md.
|
||||
|
||||
This is an **unfinished, unoptimized development prerelease**. Long wide labels can remain clipped, and labels at small fitted zoom are hard to read. Full keyboard/accessibility and arbitrary font/DPI coverage, evaluated quantities/calculations/constraints, maintained libraries and complete OA/SA parity remain unfinished. The separately published peer source-navigation features are not included in this canvas contribution. Linux/WSL work remains user-paused.
|
||||
|
||||
The tag identifies Studio source **33e30c1cd7a6c99513a0ebd02ba68fccbad8f58d**. The optional server is the unchanged artifact from source321897f, with separate provenance. [Exact validation and evidence](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/0c53c210306d768fc8b1ae6cee3618701c887bb6/harness/release-canvas-repair-validation-20260912.md).
|
||||
|
||||
ZIP: **32,752,913 bytes**. SHA256 `1e962fadce47922bdcf69e0e1d89e144e582083d940f4c9c9a5c6fbfece95c24`.
|
||||
+154
@@ -0,0 +1,154 @@
|
||||
"""Read-only remote release verification. Never creates, replaces or deletes assets.
|
||||
|
||||
Usage: python verify-canvas-repair-assets.py --expected EXPECTED.json --output FRESH_DIR
|
||||
EXPECTED.json keys: release_id (positive int), tag, source_commit, tag_commit
|
||||
(full locally verified Git commit), assets [{name, local_path, bytes, sha256}].
|
||||
Exactly the pinned ZIP, its .sha256, and VALIDATION.md are required. Pin the two
|
||||
small files after the final evidence commit. No network call occurs on import.
|
||||
"""
|
||||
import argparse
|
||||
import hashlib
|
||||
import importlib.util
|
||||
import json
|
||||
from pathlib import Path
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
from datetime import datetime, timezone
|
||||
import urllib.parse
|
||||
import urllib.request
|
||||
|
||||
ROOT = Path(__file__).resolve().parent.parent
|
||||
TAG = 'v0.2.0-preview.canvas-repair.20260912'
|
||||
SOURCE = '33e30c1cd7a6c99513a0ebd02ba68fccbad8f58d'
|
||||
ZIP = 'ArcadiaStudio-0.2.0-preview.canvas-repair.20260912-x86_64-pc-windows-gnullvm.zip'
|
||||
ZIP_SIZE = 32752913
|
||||
ZIP_HASH = '1e962fadce47922bdcf69e0e1d89e144e582083d940f4c9c9a5c6fbfece95c24'
|
||||
|
||||
|
||||
class VerificationError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
def require(condition, message):
|
||||
if not condition:
|
||||
raise VerificationError(message)
|
||||
|
||||
|
||||
def digest(path):
|
||||
with path.open('rb') as stream:
|
||||
return hashlib.file_digest(stream, 'sha256').hexdigest()
|
||||
|
||||
|
||||
def local_commit(value):
|
||||
require(isinstance(value, str) and re.fullmatch('[0-9a-f]{40}', value), 'Expected a full lowercase commit hash')
|
||||
result = subprocess.run(['git', 'rev-parse', '--verify', value + '^{commit}'], cwd=ROOT,
|
||||
capture_output=True, text=True, timeout=20)
|
||||
require(result.returncode == 0 and result.stdout.strip() == value, 'Expected local commit unavailable')
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument('--expected', type=Path, required=True)
|
||||
parser.add_argument('--output', type=Path, required=True)
|
||||
args = parser.parse_args()
|
||||
require(args.expected.stat().st_size <= 65536, 'Expectation file too large')
|
||||
expected = json.loads(args.expected.read_text(encoding='utf-8-sig'))
|
||||
require(expected.get('tag') == TAG and expected.get('source_commit') == SOURCE, 'Wrong release/source expectation')
|
||||
release_id = expected.get('release_id')
|
||||
require(type(release_id) is int and release_id > 0, 'Expected positive release ID')
|
||||
target = expected.get('tag_commit')
|
||||
local_commit(SOURCE)
|
||||
local_commit(target)
|
||||
ancestry = subprocess.run(['git', 'merge-base', '--is-ancestor', SOURCE, target], cwd=ROOT,
|
||||
capture_output=True, timeout=20)
|
||||
require(ancestry.returncode == 0, 'Expected tag commit does not descend from Studio source')
|
||||
code_diff = subprocess.run(['git', 'diff', '--quiet', SOURCE, target, '--',
|
||||
'crates', 'Cargo.toml', 'Cargo.lock', 'assets', 'build.rs'],
|
||||
cwd=ROOT, capture_output=True, timeout=20)
|
||||
require(code_diff.returncode == 0, 'Tag commit production inputs differ from Studio source')
|
||||
assets = expected.get('assets')
|
||||
require(isinstance(assets, list) and len(assets) == 3, 'Exactly three explicit assets required')
|
||||
require({a.get('name') for a in assets} == {ZIP, ZIP + '.sha256', 'VALIDATION.md'}, 'Asset allowlist mismatch')
|
||||
for asset in assets:
|
||||
require(type(asset.get('bytes')) is int and asset['bytes'] > 0, 'Invalid expected length')
|
||||
require(isinstance(asset.get('sha256'), str) and re.fullmatch('[0-9a-f]{64}', asset['sha256']), 'Invalid expected SHA256')
|
||||
limit = ZIP_SIZE if asset['name'] == ZIP else 1024 * 1024
|
||||
require(asset['bytes'] <= limit, 'Asset exceeds bounded expected length')
|
||||
if asset['name'] == ZIP:
|
||||
require(asset['bytes'] == ZIP_SIZE and asset['sha256'] == ZIP_HASH, 'ZIP identity mismatch')
|
||||
asset['_path'] = Path(asset['local_path']).resolve(strict=True)
|
||||
require(asset['_path'].is_file() and asset['_path'].stat().st_size == asset['bytes'] and digest(asset['_path']) == asset['sha256'], 'Local asset bytes do not match expectation')
|
||||
checksum = next(a for a in assets if a['name'] == ZIP + '.sha256')['_path'].read_text(encoding='utf-8-sig').strip()
|
||||
require(re.fullmatch(re.escape(ZIP_HASH) + r'\s+\*?' + re.escape(ZIP), checksum, flags=re.IGNORECASE), 'Checksum file does not bind pinned ZIP')
|
||||
validation = next(a for a in assets if a['name'] == 'VALIDATION.md')['_path'].read_text(encoding='utf-8-sig')
|
||||
require(SOURCE in validation or re.search(r'\b33e30c1\b', validation), 'Validation does not identify Studio source')
|
||||
output = args.output.resolve()
|
||||
require(not output.exists(), 'Output must be a fresh directory; no overwrite')
|
||||
output.mkdir(parents=True, exist_ok=False)
|
||||
module_path = ROOT / '.local/publication-ytr83r/gitea_publication.py'
|
||||
spec = importlib.util.spec_from_file_location('existing_publication', module_path)
|
||||
module = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(module)
|
||||
client = module.Client() # existing credential source; no identity/write call
|
||||
|
||||
def fetch(url, maximum):
|
||||
parsed, configured = urllib.parse.urlsplit(url), urllib.parse.urlsplit(module.HOST)
|
||||
require((parsed.scheme, parsed.hostname, parsed.port) == (configured.scheme, configured.hostname, configured.port), 'Download origin differs from configured host')
|
||||
require(not parsed.username and not parsed.password and not parsed.fragment and not parsed.query, 'Unexpected URL credentials/query/fragment')
|
||||
require(parsed.path.startswith(('/api/v1/repos/' + module.REPOSITORY + '/', '/attachments/', '/' + module.REPOSITORY + '/releases/')), 'Unexpected same-host URL path')
|
||||
request = urllib.request.Request(url, headers={'Authorization': 'token ' + client.token, 'Accept-Encoding': 'identity'})
|
||||
with client.opener.open(request, timeout=45) as response:
|
||||
require(response.status == 200 and response.geturl() == url, 'Unexpected HTTP status or redirect')
|
||||
length = response.headers.get('Content-Length')
|
||||
require(length is None or (length.isdecimal() and int(length) <= maximum), 'Response length exceeds bound')
|
||||
require(response.headers.get('Content-Encoding', 'identity') == 'identity', 'Encoded response refused')
|
||||
data = response.read(maximum + 1)
|
||||
require(len(data) <= maximum, 'Response body exceeds bound')
|
||||
return data
|
||||
|
||||
def get(path):
|
||||
return json.loads(fetch(module.API + path, 2 * 1024 * 1024))
|
||||
|
||||
prefix = '/repos/' + module.REPOSITORY
|
||||
release = get(f'{prefix}/releases/{release_id}')
|
||||
require(release.get('id') == release_id and release.get('tag_name') == TAG, 'Release ID/tag mismatch')
|
||||
require(release.get('prerelease') is True and release.get('draft') is False, 'Expected published prerelease')
|
||||
tag = get(prefix + '/tags/' + urllib.parse.quote(TAG, safe=''))
|
||||
require(tag.get('name') == TAG and tag.get('commit', {}).get('sha') == target, 'Remote tag commit mismatch')
|
||||
remote = get(f'{prefix}/releases/{release_id}/assets')
|
||||
require(isinstance(remote, list) and len(remote) == 3 and {a.get('name') for a in remote} == {a['name'] for a in assets}, 'Remote release asset set differs from allowlist')
|
||||
records = []
|
||||
for asset in assets:
|
||||
item = next(a for a in remote if a.get('name') == asset['name'])
|
||||
require(item.get('size') == asset['bytes'], 'Remote asset metadata length mismatch')
|
||||
data = fetch(item['browser_download_url'], asset['bytes'])
|
||||
actual_hash = hashlib.sha256(data).hexdigest()
|
||||
require(len(data) == asset['bytes'] and actual_hash == asset['sha256'], 'Downloaded asset differs from pinned local bytes')
|
||||
require(asset['_path'].stat().st_size == asset['bytes'] and digest(asset['_path']) == asset['sha256'], 'Local asset changed during verification')
|
||||
with (output / asset['name']).open('xb') as stream:
|
||||
stream.write(data)
|
||||
require(digest(output / asset['name']) == actual_hash, 'Downloaded file readback mismatch')
|
||||
records.append({'name': asset['name'], 'asset_id': item.get('id'), 'bytes': len(data), 'sha256': actual_hash, 'local_equal': True})
|
||||
final_release = get(f'{prefix}/releases/{release_id}')
|
||||
final_tag = get(prefix + '/tags/' + urllib.parse.quote(TAG, safe=''))
|
||||
final_assets = get(f'{prefix}/releases/{release_id}/assets')
|
||||
require(final_release.get('id') == release_id and final_release.get('tag_name') == TAG and final_release.get('draft') is False and final_release.get('prerelease') is True, 'Release binding changed during verification')
|
||||
require(final_tag.get('commit', {}).get('sha') == target, 'Tag moved during verification')
|
||||
require(sorted((a.get('id'), a.get('name'), a.get('size'), a.get('browser_download_url')) for a in final_assets) == sorted((a.get('id'), a.get('name'), a.get('size'), a.get('browser_download_url')) for a in remote), 'Assets changed during verification')
|
||||
record = {'pass': True, 'checked_utc': datetime.now(timezone.utc).isoformat(), 'release_id': release_id,
|
||||
'tag': TAG, 'tag_commit': target, 'studio_source': SOURCE, 'source_ancestor_verified_locally': True,
|
||||
'assets': records, 'network_operations': 'GET only; configured origin; redirects refused'}
|
||||
with (output / 'readback.json').open('x', encoding='utf-8') as stream:
|
||||
json.dump(record, stream, indent=2)
|
||||
print(json.dumps(record, indent=2))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
main()
|
||||
except Exception as error:
|
||||
# Never print transport/request/config exceptions, headers or credentials.
|
||||
message = str(error) if isinstance(error, VerificationError) else 'Transport, input or local verification failed; sensitive details suppressed'
|
||||
print(json.dumps({'pass': False, 'error': message}), file=sys.stderr)
|
||||
sys.exit(1)
|
||||
@@ -0,0 +1,9 @@
|
||||
# Canvas and source repair Windows prerelease published
|
||||
|
||||
Published [v0.2.0-preview.canvas-repair.20260912](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/tag/v0.2.0-preview.canvas-repair.20260912) (release5). Tag and exact Studio source: `33e30c1cd7a6c99513a0ebd02ba68fccbad8f58d`. Completed acceptance/evidence commit: `0c53c210306d768fc8b1ae6cee3618701c887bb6`. The optional unchanged server remains source321897f.
|
||||
|
||||
All three attachments were downloaded and verified at **2026-09-12T12:04:29.494533+00:00**. ZIP32752913bytes, SHA256 `1e962fadce47922bdcf69e0e1d89e144e582083d940f4c9c9a5c6fbfece95c24`; checksum attachment147bytes, SHA256 `50401db245912a3980b9c87d703a5fe422b34202fdfd2303513ec8cfbe024084`; VALIDATION.md8421bytes, SHA256 `53f8b109f543a228609ffe82ea710f02e833ead4ecfe683bcbd387b22febaa11`.
|
||||
|
||||
[Publication readback and exact metadata](experiments/canvas-repair-publication-20260912/README.md) and [completed validation](release-canvas-repair-validation-20260912.md) identify commands, environment, source/binary boundaries, raw gates, native/HTTP checks, independent reviews and known limitations. Publication does not change the scope of historical receipts. No published asset was replaced.
|
||||
|
||||
Run by extracting the entire ZIP and opening `arcadia-studio.exe`; keep the adjacent DLL and consult START-HERE. The standalone CLI is separate. This remains an unfinished development milestone; Linux stays user-paused and the full user goal remains incomplete. Live coordination remains in [issue5](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/5) and linked work.
|
||||
Reference in New Issue
Block a user