Record published rename preview and update integrated checkpoint

This commit is contained in:
2026-09-12 17:52:46 -07:00
parent 506a349b32
commit 91fa1b78f3
23 changed files with 1076 additions and 4 deletions
+1
View File
@@ -80,3 +80,4 @@ harness/experiments/source-alias-rename-server-20260912/** -text whitespace=cr-a
harness/experiments/source-alias-rename-package-20260912/** -text whitespace=cr-at-eol
harness/experiments/source-alias-rename-packaged-runtime-20260912/** -text whitespace=cr-at-eol
harness/experiments/source-alias-rename-package-native-20260912/** -text whitespace=cr-at-eol
harness/experiments/source-alias-rename-publication-20260912/** -text whitespace=cr-at-eol
+34 -4
View File
@@ -1,6 +1,6 @@
# Integrated checkpoint — first release
Updated 2026-09-12 by Codex-9e8r6t `/root`, Windows host.
Updated 2026-09-13 UTC (September 12 locally) by Codex-9e8r6t `/root`, Windows host.
**Full OA/SA release acceptance is incomplete. Linux work remains user-paused.**
[PROJECT_GOAL.md](../PROJECT_GOAL.md) owns the application requirements.
@@ -10,6 +10,35 @@ Instruction synchronization `b70bf1d` preserves the user specification and
## Delivered Windows milestone
[Source alias rename prerelease](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/tag/v0.2.0-preview.rename.20260912)
was published and read back on September 13 at 00:47:52 UTC. Extract the whole ZIP
and run `arcadia-studio.exe`, keeping its sibling `libunwind.dll`. Studio, the
optional REST server, examples, offline help and dependency notices are included.
Both executables come from **cbc49a7802fb1bba0dd284fd904c700a0703ae70**; the tag
identifies that exact source. Evidence-only checkpoint **506a349b** holds the
completed source/package/runtime/native reports and independent reviews. All
559 package files and all three downloaded release assets were verified.
The binaries use development profiles; this is a prerelease.
The GUI adds F2 alias rename with a complete preview, explicit confirmation,
origin selection, immediate Undo Rename and explicit Save. Strict Clippy,
805 desktop tests, the isolated Confirm timing check and 501 core/server tests
passed. Actual packaged GUI checks covered minimum-size simple and 30-source
workflows, all six representative changed lines, Undo/Redo/Save and representative
reopening. Eight exact saved-state checks preserve model/identity/source and all
41 final physical fixture files. Normal GUI closure returned 0 with empty logs.
The packaged server separately passed 23 HTTP/disk persistence/restart checks.
Each result retains its precise scope.
See the [publication record](release-source-alias-rename-published-20260912.md),
[package acceptance and limits](release-source-alias-rename-package-20260912.md),
and [source validation](release-source-alias-rename-validation-20260912.md).
A known P2 Details-to-Preview delayed-scroll-reset lifetime gap remains disclosed;
the separately owned correction/union is not part of this frozen package.
## Previous Windows milestone
[Source navigation prerelease](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/tag/v0.2.0-preview.navigation.20260911)
was published and read back on September 12 at 10:54:02 UTC. Extract the whole ZIP and run
`arcadia-studio.exe`; keep its sibling `libunwind.dll`. Studio, the optional REST
@@ -66,7 +95,7 @@ The [integrated evaluation](release-text-navigation-integrated-20260911.md) link
exact input archives, earlier full-test scope and independent findings.
The published contextual preview remains unchanged.
The integrated release does not yet contain Text alias rename, newer peer canvas/chooser and
The latest rename release does not yet contain newer peer canvas/chooser and
scenario-lifetime work, complete constraints/calculations, dimensional quantities,
maintained model libraries.
Those additions require coherent graphical/text/REST realization and validation.
@@ -101,8 +130,9 @@ is the shared entrypoint. Durable decisions remain in [DECISIONS.md](DECISIONS.m
and topic reports; the [text-navigation design](release-text-navigation-design-20260911.md)
records the current bounded design and its falsifiers.
The [Text alias-rename proposal](release-source-alias-rename-design-20260911.md)
and its [critique](release-source-alias-rename-critique-20260911.md) are design
preparation, not implemented or verified Text capability.
and [critique](release-source-alias-rename-critique-20260911.md) retain the original
design rationale; current implementation and verified scope are recorded in the
[published package report](release-source-alias-rename-package-20260912.md).
Legacy TASK_LEDGER/PLAN live content was migrated once in
[comment 408](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/1#issuecomment-408).
@@ -0,0 +1,25 @@
# Confirmed rename prerelease publication records
These exact originals record Gitea release 6, tag
`v0.2.0-preview.rename.20260912`, source
`cbc49a7802fb1bba0dd284fd904c700a0703ae70` and evidence checkpoint
`506a349b32f3f869ac027d8763c501b61cf79769`.
`publish-first/result.json` confirms public prerelease visibility and all three
downloaded assets at 2026-09-13T00:47:52.474878Z; the terminal action finished at
00:47:52.873060Z. `create-first` and `upload-first` preserve earlier draft/upload
steps. API `published_at` reflects draft creation and is separately labeled.
Exact asset IDs, byte counts and hashes are in the final result and
[published report](../../release-source-alias-rename-published-20260912.md).
The helper and bindings are historical executed evidence. Do not rerun the
publisher from this relocated directory. Acceptance receipts referenced by
absolute original paths live in the separately published package/runtime/native
archives. `sourceBranchHead` is the branch tip checked during publication, not a
promise that the evidence branch will never advance afterward.
The initial static review identified Git tag-helper configuration hazards; the
parent used purpose-built Gitea MCP tag creation instead. The subsequent review
proves the API helper changed only its missing-tag message. Historical readiness
review pending wording precedes the final reviewed documents and bound receipts;
it does not negate the later successful executed results.
@@ -0,0 +1,9 @@
# Source alias rename — Windows development preview
Rename an alias from its declaration or reference in the Text editor with **F2**. Review the changed source lines, then confirm. Model identity is preserved; an immediate **Undo Rename** is available, and **Save all** remains explicit. File and row navigation reset the preview to the selected destination. Comments and descriptive prose remain unchanged.
Download the Windows x86-64 ZIP and its SHA256 companion. Extract the entire ZIP and run `arcadia-studio.exe`, keeping `libunwind.dll` beside it. The bundle includes the optional REST server, examples, offline guide and dependency notices. See `START-HERE.txt`, `docs/windows-packaging.md` and `docs/server.md` inside the bundle.
Both executables come from source **cbc49a7802fb1bba0dd284fd904c700a0703ae70**. Strict Clippy, 805 desktop tests, the isolated Confirm timing check, and 501 core/server tests passed. Independent verification covered all 559 package files, source/artifact bindings, dependency notices and documentation. Actual packaged-server persistence/restart checks and minimum-window desktop rename, Undo/Redo, Save and representative reopening passed. `VALIDATION.md` identifies the precise workflows, evidence and verification commands.
This is a Windows **development-profile prerelease**, with debug assertions enabled. Full OA/SA acceptance, optimized builds, the compact Text workspace and newer peer diagram/palette work remain unfinished. A known scroll-state limitation can let a delayed preview reset affect a visit after switching Full details back to Preview; its isolated correction is tracked in [issue 9](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/9#issuecomment-743). Linux/WSL work remains paused at the user's request.
@@ -0,0 +1,94 @@
# Windows rename preview validation
Candidate tag: `v0.2.0-preview.rename.20260912`.
Tested source: **cbc49a7802fb1bba0dd284fd904c700a0703ae70**.
Evidence checkpoint: **506a349b32f3f869ac027d8763c501b61cf79769**;
the later evidence commit does not change the tested binaries.
The [complete package acceptance report](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/506a349b32f3f869ac027d8763c501b61cf79769/harness/release-source-alias-rename-package-20260912.md)
records behavior, source/profile identities, failed attempts and precise limits.
## Download and run
ZIP: `ArcadiaStudio-0.2.0-preview.rename.20260912-x86_64-pc-windows-gnullvm.zip`,
33,074,937 bytes, SHA256
`d2433b5b384256b551672bf115bab40b3496aeee115e067922aedb5becf34d7e`.
Compare `Get-FileHash -Algorithm SHA256 <downloaded ZIP>` with this value and the
companion checksum file. Extract the entire ZIP into a fresh directory, then run
`arcadia-studio.exe`. Keep its sibling `libunwind.dll`; no compiler installation
is required by the packaged runtime dependencies.
In Text, place the caret on a declaration alias or typed reference and press F2.
Enter a valid replacement, request Preview, inspect the changed lines and confirm.
Save all writes the accepted transaction; immediate Undo Rename is also available.
For the optional server, run from the extracted directory:
```powershell
.\arcadia-server.exe --bind 127.0.0.1:8787 --data-dir .\server-data
```
`docs/server.md` describes authentication, API usage and deployment; `START-HERE.txt`
and `docs/windows-packaging.md` describe the bundle. No remote service deployment
is claimed by this release.
## Passed checks and immutable evidence
| Evidence | Completed scope | Archive SHA256 |
| --- | --- | --- |
| [Desktop gates](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/506a349b32f3f869ac027d8763c501b61cf79769/harness/experiments/source-alias-rename-scroll-20260912/) | Strict Clippy; 805 passed, 0 failed, 3 ignored; required isolated Confirm timing check; matching GUI; 517 raw source inputs | `4832e072da5db50dd2816d0246ba904dddb400b6eea5c16e18a1998c2fcfca57` |
| [Core/server gates](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/506a349b32f3f869ac027d8763c501b61cf79769/harness/experiments/source-alias-rename-server-20260912/) | Strict Clippy; 501 passed, 0 failed, 1 optional scaling probe ignored; matching server; 517 raw source inputs | `2ff758c1a6fe9ef29dc1c9aede058749fdafb4b9a40a949f09d3022c18e51230` |
| [Independent package check](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/506a349b32f3f869ac027d8763c501b61cf79769/harness/experiments/source-alias-rename-package-20260912/) | All 2,585 committed source files, 559 package files, binary/profile/dependency/notices/docs bindings, ZIP/extraction equality | `ca5c42cd6aa1a88dffbce8dbf12c9da67f2e3015b9359146566493435bcbb17f` |
| [Packaged server runtime](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/506a349b32f3f869ac027d8763c501b61cf79769/harness/experiments/source-alias-rename-packaged-runtime-20260912/) | 23 checks, 13 HTTP exchanges; Unicode empty model/source/IDs, conditional alias update, no-op and restart persistence; package unchanged | `671c1d4fb18f51b58c2ead1a9730605f27f13014ba0fe2e7b4360f24b61386a7` |
| [Packaged native trial](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/506a349b32f3f869ac027d8763c501b61cf79769/harness/experiments/source-alias-rename-package-native-20260912/) | Minimum 1100x700 client; simple and 30-source workflows; eight full saved-state oracle checks; 41 final physical files; normal exit 0; package/ZIP unchanged | `effc8ba718f89a1b2a8576a290ee2327ddd933e05a5a316a8ac94f36b3705a9a` |
The simple GUI workflow tested first-key replacement and Text Undo, then Save,
model Undo/Save and Redo/Save. The representative workflow inspected all six
changed lines and row/file scroll destinations, tested dedicated Undo Rename,
Redo/Save, reopened and inspected the graphical alias. It did not test a
representative first key or reopen the simple fixture. The guide opened and was
readable at minimum size. Sixty-six capture states preserve 73 JPEGs; screenshots
and saved-state oracle results establish different aspects of acceptance.
GUI closure: `2026-09-13T00:26:58.697468Z`, exit 0, both output logs empty.
The two server children instead used intentional Windows termination after
persistence checks, both exit 1. That is not graceful-shutdown or crash evidence.
Independent archive and document reviews are included at the linked evidence homes.
## Rechecking the evidence and source
Each archive README identifies its stored verifier and exact extraction command.
Those Python standard-library verifiers check stored bytes, CRCs and historical
receipt relationships without executing the archived application helpers. Large
external package/source/cache artifacts are explicitly hash-referenced where
omitted. These are evidence verification tools, not reproducible-build claims.
The source gates used Rust/Cargo 1.98.1, Windows `x86_64-pc-windows-gnullvm`,
`clang.exe`, one Cargo build job and prepopulated locked offline dependencies.
Both binaries have opt level 0, debuginfo 0, debug assertions and overflow checks
enabled. Exact environment and commands are in the archived gate records.
From that source checkout with the recorded toolchain configured:
```text
cargo clippy --locked --offline -p oa-desktop --all-targets -- -D warnings
cargo test --locked --offline -p oa-desktop --bin arcadia-studio -- --test-threads=1
cargo test --locked --offline -p oa-desktop --bin arcadia-studio app::source_rename::timing_tests::accepted_release1_prepare_commit_sync_and_confirm_timing -- --ignored --nocapture --test-threads=1
cargo build --locked --offline -p oa-desktop --bin arcadia-studio --message-format=json-render-diagnostics
cargo clippy --locked --offline -p oa-core -p oa-server --all-targets -- -D warnings
cargo test --locked --offline -p oa-core -p oa-server -- --test-threads=1
cargo build --locked --offline -p oa-server --bin arcadia-server --message-format=json-render-diagnostics
```
## Remaining limitations
This is a development-profile Windows prerelease, not completed OA/SA or optimized
performance acceptance. Full Details -> Preview can reuse a preview visit identity,
allowing an earlier delayed scroll reset to affect that visit; the static P2 finding
and isolated correction are tracked in [issue 9 comment 743](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/9#issuecomment-743).
It does not establish model/history corruption, and this trial did not exercise
the delayed-operation Details round-trip. The dense Text header, compact workspace,
inline annotations, palette and newer peer diagram work remain separate.
An older run's system-menu-triggered alias invalidation has an unproven cause;
border resizing in this trial does not prove it fixed. Capture pauses and process
lifetime are not native latency measurements. Comments/prose are intentionally
excluded from semantic alias changes. Linux/WSL work remains user-paused.
@@ -0,0 +1,36 @@
{
"acceptanceReviewed": true,
"sourceBranch": "codex/release1-9e8r6t",
"sourceBranchHead": "506a349b32f3f869ac027d8763c501b61cf79769",
"sourceDirectory": null,
"packageDirectory": "C:/arcadia-rename-package-2/packages",
"releaseId": null,
"notesSha256": "272c1337920cb5dcd96fcd9adff87cdb0c8c12350e69d42e90d96741d3cc546b",
"validationSha256": "97fae7e742656f35a939b8e97fa060e1338314c3e2af146f03c306a59427cd4d",
"acceptanceEvidence": {
"sourceBinding": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\source-rename-package-review-20260912\\runs\\attempt-2\\result.json",
"bytes": 4699882,
"sha256": "20bfea2f1c0a9babe2a85f5a2ba158f07139ba18f9c04a971fd738e9daff24d9",
"reviewedPass": true
},
"packageIntegrity": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\source-rename-package-review-20260912\\runs\\attempt-2\\result.json",
"bytes": 4699882,
"sha256": "20bfea2f1c0a9babe2a85f5a2ba158f07139ba18f9c04a971fd738e9daff24d9",
"reviewedPass": true
},
"packagedServer": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\source-rename-server-runtime-20260912\\runs\\attempt-1\\result.json",
"bytes": 18679,
"sha256": "e42fb5fb8c15a9f603e9753e450613afce67caac5a0fbb806a9810ef272ec37a",
"reviewedPass": true
},
"nativeClosure": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\source-rename-package-preparation-20260912\\trial-package-1\\closed.json",
"bytes": 373,
"sha256": "ed2a00dfa018b27a823d75605007adb0f1d997b79a807e6eb168f5a489409e7a",
"reviewedPass": true
}
}
}
@@ -0,0 +1,2 @@
{"atUtc": "2026-09-13T00:46:38.281949+00:00", "step": "create-request-started"}
{"atUtc": "2026-09-13T00:46:38.511190+00:00", "step": "created-draft", "releaseId": 6}
@@ -0,0 +1,52 @@
{
"started": "2026-09-13T00:46:36.353133+00:00",
"action": "create",
"tag": "v0.2.0-preview.rename.20260912",
"target": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"success": true,
"bindings": {
"acceptanceReviewed": true,
"sourceBranch": "codex/release1-9e8r6t",
"sourceBranchHead": "506a349b32f3f869ac027d8763c501b61cf79769",
"sourceDirectory": null,
"packageDirectory": "C:/arcadia-rename-package-2/packages",
"releaseId": null,
"notesSha256": "272c1337920cb5dcd96fcd9adff87cdb0c8c12350e69d42e90d96741d3cc546b",
"validationSha256": "97fae7e742656f35a939b8e97fa060e1338314c3e2af146f03c306a59427cd4d",
"acceptanceEvidence": {
"sourceBinding": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\source-rename-package-review-20260912\\runs\\attempt-2\\result.json",
"bytes": 4699882,
"sha256": "20bfea2f1c0a9babe2a85f5a2ba158f07139ba18f9c04a971fd738e9daff24d9",
"reviewedPass": true
},
"packageIntegrity": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\source-rename-package-review-20260912\\runs\\attempt-2\\result.json",
"bytes": 4699882,
"sha256": "20bfea2f1c0a9babe2a85f5a2ba158f07139ba18f9c04a971fd738e9daff24d9",
"reviewedPass": true
},
"packagedServer": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\source-rename-server-runtime-20260912\\runs\\attempt-1\\result.json",
"bytes": 18679,
"sha256": "e42fb5fb8c15a9f603e9753e450613afce67caac5a0fbb806a9810ef272ec37a",
"reviewedPass": true
},
"nativeClosure": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\source-rename-package-preparation-20260912\\trial-package-1\\closed.json",
"bytes": 373,
"sha256": "ed2a00dfa018b27a823d75605007adb0f1d997b79a807e6eb168f5a489409e7a",
"reviewedPass": true
}
}
},
"assetHashes": {
"ArcadiaStudio-0.2.0-preview.rename.20260912-x86_64-pc-windows-gnullvm.zip": "d2433b5b384256b551672bf115bab40b3496aeee115e067922aedb5becf34d7e",
"ArcadiaStudio-0.2.0-preview.rename.20260912-x86_64-pc-windows-gnullvm.zip.sha256": "3b8d811c73ae0044ed0b451e8ff746f440af79b543dd52fe067a5a2e175b685f",
"VALIDATION.md": "97fae7e742656f35a939b8e97fa060e1338314c3e2af146f03c306a59427cd4d"
},
"releaseId": 6,
"draft": true,
"prerelease": true,
"finished": "2026-09-13T00:46:39.121918+00:00"
}
@@ -0,0 +1,21 @@
# Independent final publication review
PASS; no findings. This preserves the completed read-only local review, without repeating checks. No network, helper/runtime/build execution or Git mutation was performed.
All **18 copied original files** in `harness/experiments/source-alias-rename-publication-20260912` were byte-identical to their private publication originals and run records. The new contextual README was reviewed separately. Copied release notes and VALIDATION matched the final receipt's bound hashes.
The terminal publication result SHA256 is `c82b503e24f008796d5bd3a854a9f74455d33ded8ee0b46d5b176d8a398cab18`. It records success, release **6**, `draft=false`, `prerelease=true`, tag `v0.2.0-preview.rename.20260912` at source `cbc49a7802fb1bba0dd284fd904c700a0703ae70`, and exact downloaded assets **17/18/19**. Their documented byte counts and SHA256 values match. The executed helper performs byte-for-byte downloads before and after publication.
The documents correctly distinguish API `published_at` / draft creation at **2026-09-13 00:46:38 UTC**, public-visibility readback at **00:47:52.474878 UTC**, and completed action at **00:47:52.873060 UTC**. The source/binary commit remains distinct from evidence-only checkpoint `506a349b32f3f869ac027d8763c501b61cf79769`; its successful push receipt precedes publication. Historical pending/draft review language is explicitly qualified by later closed execution records.
STATE and the publication report retain the development-profile boundary, known Details-to-Preview P2, unfinished overall objective and paused Linux scope. They do not attribute the separate union correction to this frozen release.
Exact document bindings from that completed review:
| Reviewed file | SHA256 |
| --- | --- |
| `harness/release-source-alias-rename-published-20260912.md` | `11a23c65e48d846cfd8d86fa3b69ee5e0ded79cfab96368bd1653702cd6a8689` |
| `harness/STATE.md` | `5c737f57757901de9a9f12f987fb0768f0a6e9632068ae8a3a87a50bb3a00e4d` |
| `harness/experiments/source-alias-rename-publication-20260912/README.md` | `6f92cc1f10de2406c28922f4ad3ef86f8dc50b4a11970a416e9373b904135802` |
This is consistency review of retained confirmed publication evidence, not a new independent network availability check.
@@ -0,0 +1,138 @@
{
"status": "PASS",
"reviewer": "Codex-9e8r6t /root/diagnostic_input",
"reviewedAtUtc": "2026-09-13T00:45:44.1266544Z",
"scope": "Final document consistency; local committed-tree/link/byte checks only; no network/runtime/compiler/publication execution",
"sourceCommit": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"evidenceCommit": "506a349b32f3f869ac027d8763c501b61cf79769",
"findings": [],
"finalDocuments": [
{
"path": "C:/Users/User/Documents/Git/ARCADIA-Studio/.local/source-rename-prerelease-publication-20260912/RELEASE-NOTES.md",
"bytes": 1792,
"sha256": "272c1337920cb5dcd96fcd9adff87cdb0c8c12350e69d42e90d96741d3cc546b"
},
{
"path": "C:/Users/User/Documents/Git/ARCADIA-Studio/.local/source-rename-prerelease-publication-20260912/VALIDATION.md",
"bytes": 7168,
"sha256": "97fae7e742656f35a939b8e97fa060e1338314c3e2af146f03c306a59427cd4d"
}
],
"archives": [
{
"path": "harness/experiments/source-alias-rename-scroll-20260912/evidence.zip",
"bytes": 6617942,
"sha256": "4832e072da5db50dd2816d0246ba904dddb400b6eea5c16e18a1998c2fcfca57",
"committedBlob": "6a249e40cc4cae4febdcdd362e273ed945285cfe"
},
{
"path": "harness/experiments/source-alias-rename-server-20260912/evidence.zip",
"bytes": 2224422,
"sha256": "2ff758c1a6fe9ef29dc1c9aede058749fdafb4b9a40a949f09d3022c18e51230",
"committedBlob": "9e475ac59c40c1876c0a10115082a16984f03a51"
},
{
"path": "harness/experiments/source-alias-rename-package-20260912/evidence.zip",
"bytes": 2223405,
"sha256": "ca5c42cd6aa1a88dffbce8dbf12c9da67f2e3015b9359146566493435bcbb17f",
"committedBlob": "4509dd40dc558d9a7e4901f6c392508c8a014ce6"
},
{
"path": "harness/experiments/source-alias-rename-packaged-runtime-20260912/evidence.zip",
"bytes": 183262,
"sha256": "671c1d4fb18f51b58c2ead1a9730605f27f13014ba0fe2e7b4360f24b61386a7",
"committedBlob": "ec58283a906754efefd0deaab0e0bab83bcf7daa"
},
{
"path": "harness/experiments/source-alias-rename-package-native-20260912/evidence.zip",
"bytes": 5897544,
"sha256": "effc8ba718f89a1b2a8576a290ee2327ddd933e05a5a316a8ac94f36b3705a9a",
"committedBlob": "7c7bb0e17cdf96349f8fe2cb087db5310ebfec77"
}
],
"committedDocuments": [
{
"path": "harness/release-source-alias-rename-package-20260912.md",
"bytes": 8260,
"sha256": "2b9e1c9d48af4a3125b869741feb3c167654d71d98463cb4cccd206ff81178a5",
"committedBlob": "ad316b498e9e2a3a10b41995efd2fd04666c814f"
},
{
"path": "harness/release-source-alias-rename-validation-20260912.md",
"bytes": 28542,
"sha256": "fa7a06f754302973e06db3999f689ecae567ef0aebec6ecc6b9749334a0cc817",
"committedBlob": "63350508c92c3c4e26f94706b1fa1837631b7de0"
},
{
"path": "harness/experiments/source-alias-rename-scroll-20260912/README.md",
"bytes": 1533,
"sha256": "d3383d73650f5e1cd879d89ba001af818a88f12f243460a93932ac851da09563",
"committedBlob": "dd71f928e61e38c297fb4281c8bf0731a316a260"
},
{
"path": "harness/experiments/source-alias-rename-server-20260912/README.md",
"bytes": 1023,
"sha256": "2e76f8b5c10127179aa28aa62cf0520d5b739bd58facdcc323e87732123cc9bb",
"committedBlob": "cab7fa7cedaa8e83420a04efdfe7536b586114f7"
},
{
"path": "harness/experiments/source-alias-rename-package-20260912/README.md",
"bytes": 1451,
"sha256": "a3bffb1cc195c8f7880b922c74dc64b81c42afaeb9450e5924b82ef7ecbeeb09",
"committedBlob": "cc67bce68ba1b277059dcc1477b011e404919bcc"
},
{
"path": "harness/experiments/source-alias-rename-packaged-runtime-20260912/README.md",
"bytes": 1864,
"sha256": "fa0a8f91ad4dfd75b5e825ab7472191225e363fbe5c1d42ab2bc7c66ed60b65f",
"committedBlob": "3ac05ed119d73c071d7c0639c21a04b9bf96de38"
},
{
"path": "harness/experiments/source-alias-rename-package-native-20260912/README.md",
"bytes": 2484,
"sha256": "bfbcebb64cb76c09ddd54f2dd2fc0cdea937a79da066da9397eb0dfde2a19377",
"committedBlob": "7934ff0cd878ec14aa2c54720a33378d02603973"
}
],
"committedLinkTargets": [
{
"commit": "506a349b32f3f869ac027d8763c501b61cf79769",
"path": "harness/release-source-alias-rename-package-20260912.md"
},
{
"commit": "506a349b32f3f869ac027d8763c501b61cf79769",
"path": "harness/experiments/source-alias-rename-scroll-20260912"
},
{
"commit": "506a349b32f3f869ac027d8763c501b61cf79769",
"path": "harness/experiments/source-alias-rename-server-20260912"
},
{
"commit": "506a349b32f3f869ac027d8763c501b61cf79769",
"path": "harness/experiments/source-alias-rename-package-20260912"
},
{
"commit": "506a349b32f3f869ac027d8763c501b61cf79769",
"path": "harness/experiments/source-alias-rename-packaged-runtime-20260912"
},
{
"commit": "506a349b32f3f869ac027d8763c501b61cf79769",
"path": "harness/experiments/source-alias-rename-package-native-20260912"
}
],
"checks": {
"draftMarkersAbsent": true,
"exactRecordedCargoCommands": 7,
"archiveHashesAndCommittedBytesMatch": 5,
"committedLinkTargetsExist": 6,
"readDocumentsMatchCommittedBytes": 7,
"scopeConsistentWithExistingReceiptsAndIndependentReviews": true,
"remoteHttpAvailabilityRechecked": false,
"runtimeOrArchiveEvaluatorsRerun": false
},
"report": {
"path": "C:/Users/User/Documents/Git/ARCADIA-Studio/.local/source-rename-prerelease-publication-20260912/final-validation-review.md",
"bytes": 3594,
"sha256": "66e664c358c09075e0fa031a4db1b986ad51eda13f8806f85fb40873a22a57b1"
}
}
@@ -0,0 +1,56 @@
# Final release validation text review
**PASS — no concrete discrepancy found** in the final RELEASE-NOTES.md and
VALIDATION.md snapshots below. Reviewer: Codex-9e8r6t /root/diagnostic_input.
This was a bounded document/evidence review, using local file reads/hashes and
read-only Git object/tree checks. No runtime, GUI, compiler, publication helper,
network/API request, tag operation or Git mutation ran.
| Final file | SHA256 |
| --- | --- |
| RELEASE-NOTES.md | `272c1337920cb5dcd96fcd9adff87cdb0c8c12350e69d42e90d96741d3cc546b` |
| VALIDATION.md | `97fae7e742656f35a939b8e97fa060e1338314c3e2af146f03c306a59427cd4d` |
The fixed tested source remains cbc49a7802fb1bba0dd284fd904c700a0703ae70;
the evidence checkpoint is separately identified as
506a349b32f3f869ac027d8763c501b61cf79769. All six commit-based document/directory
links resolve in that exact Git tree. Each of the five linked evidence ZIPs was
checked against its committed blob with `git hash-object --no-filters` and its
actual SHA256; all five match the values printed in VALIDATION.md. The package
report, source validation record and five archive READMEs read during this review
also match their committed bytes. This establishes committed-tree link targets,
not a new HTTP availability check; the parent's remote checkpoint readback remains
separate evidence.
The seven documented Cargo commands exactly match the actual desktop attempt-8
and server attempt-1 command arrays, in order. Their recorded toolchains report
Rust/Cargo 1.98.1, Windows GNU LLVM, clang.exe and one build job. Actual artifact
records support opt level 0, debuginfo 0, debug assertions and overflow checks.
The loopback server invocation uses supported options from docs/server.md at the
tested source. Bundle launch/dependency wording agrees with the independently
verified package inventory and committed package report. Both final documents
are free of either publication/runtime pending marker.
Counts and scope agree with existing exact receipts and the completed independent
documentation/archive reviews: 805 desktop tests, 501 core/server tests, 517 captured
inputs per gate, 2,585 committed package-source files, 559 package files, 23 runtime
checks, 13 HTTP exchanges, 66 capture states/73 JPEGs, eight saved-state oracle
checks and 41 final physical files. Prior valid evidence was reused; all runtimes
and archived evaluators were not rerun for this final text review.
The text distinguishes the Unicode empty-model server scenario from GUI rename
and nonempty model acceptance; intentional Windows server terminate()/exit 1 from
the GUI's normal exit 0; the simple first-key/Text Undo workflow from representative
Undo Rename/reopen; and captured GUI state from saved-disk oracles. It does not
claim representative first-key testing or simple reopen. The guide wording is
restricted to opening/readability at minimum size. The known delayed Details to
Preview reset issue remains explicit as an untested static P2, with its correction
outside the tested source. Paused Linux, development profile, broader OA/SA and
separate Text/peer work remain qualified. Screenshots, process lifetime and pauses
are not presented as native latency measurements.
Ready for the parent's exact final-text hash binding and sole-owner tag/release
workflow after the four acceptance receipts are bound. This review does not itself
bind acceptance, authorize a new scope, create a tag/release, or claim publication.
Exact checked archive blobs, hashes, document identities and local-tree link paths
are recorded in final-validation-review.json.
@@ -0,0 +1,62 @@
# Independent static review of rename publication preparation
Reviewer: Codex-9e8r6t /root/diagnostic_input, 2026-09-12. Parent is the sole execution and publication owner. This review read and hashed local files and installed primary Git documentation. It did not import or execute either helper, inspect credentials or Git configuration, contact any service, run Git/Cargo/GUI, or alter publication inputs. This report is the only review output. No package/runtime/native or publication acceptance is claimed.
## Result
Two configuration-dependent correctness findings must be resolved or explicitly constrained by the parent before tag-helper execution. Both patterns are inherited from the previous navigation helper; they are not rename-specific regressions. No additional blocking finding was identified in the API draft/upload/publish flow under the existing reviewed single-executor protocol. Current acceptance bindings intentionally refuse all remote mutations.
### P2: the explicit refspec does not enforce a one-tag push
`push-tag.py:27-32,58` removes inherited GIT_ environment variables but still reads normal Git configuration files. Its `git push <remote> TARGET:refs/tags/TAG` honors `push.followTags=true`. With an additional local annotated tag pointing to TARGET or a reachable ancestor that is absent remotely, Git can publish that additional tag along with the reserved rename tag. The helper checks only the reserved ref afterwards and can report success without detecting the extra mutation.
The installed primary manual explicitly states that follow-tags adds reachable missing annotated tags (`git-push.html:690-697`) and that `push.followTags=true` enables it by default; `--no-follow-tags` overrides it (`git-push.html:1993-1997`). The narrow correction is to add `--no-follow-tags` to this push invocation. This finding is a documented counterexample, not a claim that the current machine has the option enabled or that an extra tag was pushed.
### P2: push-only URL rewriting escapes the checked repository
`push-tag.py:27-39,45,53,58` supplies a literal repository URL, but does not reject or bind effective Git URL rewriting from configuration files. A `url.<other-repository>.pushInsteadOf=<intended-repository>` rule leaves the API requests and fetch-direction `ls-remote` checks pointed at the intended repository while redirecting the actual push to another destination. The after-check may fail because the intended tag remains missing, but the unintended destination has already been mutated. An `insteadOf` rule can also rewrite Git read requests before the authenticated Git subprocess returns. `http.followRedirects=false` addresses HTTP redirects, not Git's URL rewriting.
Installed primary documentation describes both mechanisms at `git-config.html:10570-10602`, including the push-only distinction. Before authenticated Git remote operations, narrowly reject applicable effective rewrite settings or validate the actual fetch and push destinations through an equivalent controlled configuration path. Preserve the expected exact repository URL and origin; a successful API check alone is insufficient. No broad transport rewrite is requested. This is a static configuration counterexample; this review deliberately did not inspect local/global/system Git configuration or assert that such a rule is currently installed.
Both findings were sent directly to native_archive and the parent before saving this report.
## Reviewed protocol properties
- Identity is fixed to source `cbc49a7802fb1bba0dd284fd904c700a0703ae70`, tag `v0.2.0-preview.rename.20260912`, rename title, package2 ZIP name, 33,074,937 bytes, ZIP SHA256 `d2433b5b384256b551672bf115bab40b3496aeee115e067922aedb5becf34d7e`, and companion SHA256 `3b8d811c73ae0044ed0b451e8ff746f440af79b543dd52fe067a5a2e175b685f`. TARGET remains fixed in commit/tag checks, ownership receipt, release metadata and push refspec.
- Mutable sourceBranchHead is a separately reviewed binding. The remote branch must match it exactly while the tag must match the fixed TARGET; there is no silent retarget to branch head or branch push. The read-only API target-commit check requires the exact source snapshot to exist. Git tag collision handling accepts an existing lightweight or annotated tag only at the exact final commit, and the push is nonforce.
- All mutating action branches call `inputs()` before constructing the credential-bearing Client. The four exact acceptance-evidence roles must each have reviewedPass true, an absolute existing path, matching byte count and SHA256; parent acceptanceReviewed must be true. Final notes and validation must match bound hashes and lack either pending marker. ZIP/checksum/validation bytes are loaded and bound before mutation. The separate tag helper calls the same gate. Evidence semantic correctness remains the parent's explicit review duty; hashes alone are not represented as acceptance.
- The initial bindings leave acceptance false, all four receipts unbound, sourceBranchHead null, final-document hashes null and releaseId null. The shipped draft markers accurately describe incomplete package/runtime/native acceptance. `inspect` is the explicitly read-only exception and does not confer permission to mutate.
- The explicit non-assert `if not __debug__` guard remains before imports in publish.py. Python optimized mode cannot remove safety assertions and then continue; importing it from the tag helper inherits this refusal.
- Authenticated release enumeration includes drafts, refuses multiple matching tags and fails closed at its pagination bound. Existing-release mutation requires either an explicitly parent-bound releaseId or the exclusive successful-create receipt. Matching title or tag does not establish ownership. Notes, target, name and prerelease flag are rechecked.
- Creation requests only a draft prerelease and persists ownership immediately after a valid create response. An uncertain create without its ownership receipt cannot be silently adopted on retry. The parent must inspect and explicitly bind ownership. Each attempt uses a fresh exclusive directory; terminal receipts and request-started events identify possibly partial outcomes. No automatic retry, deletion, overwrite or force push exists.
- Upload permits exactly the package ZIP, its checksum and VALIDATION.md. Existing attachments must have unique names and IDs, allowed names, exact sizes and downloaded bytes; missing names alone are uploaded. Each new upload is immediately downloaded and the completed set is downloaded again. A retry after an uncertain upload reconciles already-existing attachments instead of overwriting them.
- Publication verifies all three assets before visibility change, rechecks the fixed source/tag and owned notes, then verifies public prerelease metadata and all attachments again, including unchanged IDs/names/size/hash/URL tuples. An already-public owned release can be accepted after complete readback, covering an uncertain previous PATCH. apiPublishedAt and visibilityVerifiedAt remain distinct; no exact server transition time is invented.
- API calls enforce exact scheme/netloc without userinfo, disable proxy discovery and refuse redirects. Credentials are supplied in headers; the Git helper uses process-local environment configuration rather than token-bearing command arguments or config-file writes. Error paths redact raw tokens and, for Git, the Basic credential, then exit generically without rethrowing the original exception. These are static data-flow conclusions, not dynamic credential-leak fault injection. Git destination enforcement remains subject to the second finding above.
The existing single-writer limitation remains: server reads and writes are separate requests, without conditional attachment/upload/publication locking. A competing actor could change draft state or attachments between checks; postchecks detect many changes but cannot prove an incorrect state was never transiently public. This review retains the parent's reserved, sequential execution assumption and does not request new coordination infrastructure.
## Exact reviewed snapshots
All eight entries in preparation-bindings.json matched current local byte counts and hashes at final review readback. The two prior navigation helper snapshots were compared with the rename versions. Historical static review, optimization follow-up and source-advance review were read for protocol context.
| File | SHA256 |
| --- | --- |
| publish.py | f9104cef03187d8f1ab3a5e177ef05945c1212624962883d1198208191e33816 |
| push-tag.py | 446c2f02653228e1a231e41bdc8c4653433b2b2b2b128fedb29de0745d4630c140 |
| bindings.json | af8f82c0a00a6502acc38f04e777796c2a4605f11165432b95df38476e1303d4 |
| README.md | be06ce330b9e31e290d6a1f4cb5d5a7f1a30354baba26afd38294f87011cf216 |
| RELEASE-NOTES.draft.md | bcde198d0aa11122849cd87a21b7629e11036bd462e26aae8f425fbe25462cd1 |
| VALIDATION.draft.md | 0ea80dbc151cf8019f00670120e354605344f98b1e4bbfa46953e027b8c6885c |
| preparation-bindings.json | dff0caa0eac72a184784f1dec8677192a45914df5a958e820caf227d4a95447f |
| ../navigation-prerelease-publication-20260911/publish.py | 2e2f5286b958479e27d113cf65036ca1bf3af4c2380a0985d82bfc2d793cabdd |
| ../navigation-prerelease-publication-20260911/push-tag.py | 5911ecb7924596918e59ab983952e7094b122dc21008b7913b4d1dc017683a27 |
| C:/Program Files/Git/mingw64/share/doc/git-doc/git-push.html | 143ef38871b392e89fa9d91e80a7a25de181e0fb1106ba0715bb5770b16d4000 |
| C:/Program Files/Git/mingw64/share/doc/git-doc/git-config.html | 5bba19fbfcf41f134c549bb018e7e0ad81db8bcf9ae33eae2091d6b5a65beb81 |
Scope of final-document review: pending markers, identity, provenance boundaries and required closure sections were checked for consistency with this protocol; their underlying build/test/runtime/native factual claims were not independently revalidated in this bounded script review. Final accepted RELEASE-NOTES.md, VALIDATION.md, evidence bindings and any corrected scripts need their own reviewed hash snapshot before execution.
## Parent disposition after findings
The parent accepted both tag-helper findings and selected the purpose-built Gitea MCP create_tag operation with the reserved tag and exact TARGET after actual acceptance. The reviewed push-tag.py is superseded for this release and must not be invoked. This avoids the reviewed Git-configuration path; no alternate Git-isolation implementation is requested. The original findings and their exact script snapshot are preserved above. This report does not independently execute or validate the MCP operation; the parent owns its acceptance checks, authorization, collision handling and readback.
The bounded review of publish.py's API draft/create/upload/download/publish path is complete: no additional blocking finding was identified under the stated sequential owner workflow. The immutable TARGET, independently pinned branch head, four acceptance receipts, final notes/validation hashes, explicit release ownership, exact three assets and public readback checks remain required. Current unbound acceptance still blocks those mutating API actions. Author changes to README/deprecation wording are subsequent to this reviewed snapshot and are not silently included in its hashes.
@@ -0,0 +1,11 @@
{
"started": "2026-09-13T00:42:51.097855+00:00",
"action": "inspect",
"tag": "v0.2.0-preview.rename.20260912",
"target": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"success": true,
"release": null,
"remoteTag": null,
"scope": "Read-only inspection; no acceptance or mutation",
"finished": "2026-09-13T00:42:51.827075+00:00"
}
@@ -0,0 +1,9 @@
{
"started": "2026-09-13T00:40:29.950251+00:00",
"target": "506a349b32f3f869ac027d8763c501b61cf79769",
"ref": "refs/heads/codex/release1-9e8r6t",
"before": "d12b0a6b7509ea7e942adfb7b79928574d8cd053\trefs/heads/codex/release1-9e8r6t",
"after": "506a349b32f3f869ac027d8763c501b61cf79769\trefs/heads/codex/release1-9e8r6t",
"success": true,
"finished": "2026-09-13T00:40:36.531899+00:00"
}
@@ -0,0 +1,33 @@
{
"atUtc": "2026-09-13T00:34:17.637496+00:00",
"scope": "Read-only static publisher delta and release-note consistency review; no publisher/helper/network execution",
"reviewedPublisherReconstructionSha256": "f9104cef03187d8f1ab3a5e177ef05945c1212624962883d1198208191e33816",
"onlyPublisherDelta": "Missing-tag assertion explanatory string refers to parent Gitea MCP instead of superseded Git helper",
"bindings": {
"C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\source-rename-prerelease-publication-20260912\\publish.py": {
"bytes": 14559,
"sha256": "6c91f9c34045f31fa4de6d2cbe576166204aef4d981ac6053abd5197fe8af37f"
},
"C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\source-rename-prerelease-publication-20260912\\push-tag.py": {
"bytes": 3794,
"sha256": "9f2b12e0a08a9d0ce48ffff677d0d9a5f4b123ddc44883debecf7cd7feed456a"
},
"C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\source-rename-prerelease-publication-20260912\\independent-static-review.md": {
"bytes": 11299,
"sha256": "ea7a31a13b7338db77cb3f16fde7b952cd6537c82376a9dfad97e14ca5c724a8"
},
"C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\source-rename-prerelease-publication-20260912\\RELEASE-NOTES.md": {
"bytes": 1792,
"sha256": "272c1337920cb5dcd96fcd9adff87cdb0c8c12350e69d42e90d96741d3cc546b"
},
"C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\source-rename-prerelease-publication-20260912\\bindings.json": {
"bytes": 664,
"sha256": "af8f82c0a00a6502acc38f04e777796c2a4605f11165432b95df38476e1303d4"
},
"C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\harness\\release-source-alias-rename-package-20260912.md": {
"bytes": 8260,
"sha256": "2b9e1c9d48af4a3125b869741feb3c167654d71d98463cb4cccd206ff81178a5"
}
},
"validationFileExists": false
}
@@ -0,0 +1,9 @@
# Scoped publication readiness review
Reviewed read-only on 2026-09-13T00:34:17Z. Current publish.py SHA256 `6c91f9c34045f31fa4de6d2cbe576166204aef4d981ac6053abd5197fe8af37f` has exactly one change from the independently reviewed publisher: the missing-tag assertion message now directs the parent to Gitea MCP. Replacing that one string reconstructs the exact reviewed SHA256 `f9104cef03187d8f1ab3a5e177ef05945c1212624962883d1198208191e33816`. No API acceptance, ownership, asset, upload or publication logic changed. The former Git tag helper is immediately disabled; the prior independent findings remain preserved and the parent-selected MCP path avoids executing that helper.
Final RELEASE-NOTES.md SHA256 `272c1337920cb5dcd96fcd9adff87cdb0c8c12350e69d42e90d96741d3cc546b` is consistent with the current package acceptance report SHA256 `2b9e1c9d48af4a3125b869741feb3c167654d71d98463cb4cccd206ff81178a5`: exact CBC source, Windows launch/dependency instructions, 805 desktop/501 core-server passing tests, 559 independently checked package files, actual packaged server persistence/restart, and bounded minimum-window desktop rename/Undo/Redo/Save/representative reopening. It does not import simple reopen or representative first-key coverage from the older native trial. Development-profile/full-application limits and the confirmed Details-to-Preview delayed-reset lifetime gap are explicitly disclosed. No additional concrete note inconsistency was found. This is a document-to-record consistency review, not a new native or server execution.
**Publication remains blocked at this reviewed snapshot.** acceptanceReviewed is false; all four receipt pins/review flags, final document hashes and published branch-head pin remain unbound. VALIDATION.md does not yet exist, and the final evidence commit is not bound. The notes' reference to VALIDATION.md is therefore a required delivery item, not an already available attachment. Parent must complete and review that file, bind the immutable public evidence and actual acceptance receipts, and perform the exact tag/draft/upload/download/publication readbacks. This review does not authorize or claim completed publication readiness, tag creation or any release/asset mutation.
Exact input hashes are retained in publication-readiness-review-bindings.json. No publisher/helper import or execution, credential read, API/Git mutation, binding edit or asset action was performed.
@@ -0,0 +1 @@
{"atUtc": "2026-09-13T00:47:41.051855+00:00", "step": "publish-request-started", "releaseId": 6}
@@ -0,0 +1,78 @@
{
"started": "2026-09-13T00:47:28.911940+00:00",
"action": "publish",
"tag": "v0.2.0-preview.rename.20260912",
"target": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"success": true,
"bindings": {
"acceptanceReviewed": true,
"sourceBranch": "codex/release1-9e8r6t",
"sourceBranchHead": "506a349b32f3f869ac027d8763c501b61cf79769",
"sourceDirectory": null,
"packageDirectory": "C:/arcadia-rename-package-2/packages",
"releaseId": null,
"notesSha256": "272c1337920cb5dcd96fcd9adff87cdb0c8c12350e69d42e90d96741d3cc546b",
"validationSha256": "97fae7e742656f35a939b8e97fa060e1338314c3e2af146f03c306a59427cd4d",
"acceptanceEvidence": {
"sourceBinding": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\source-rename-package-review-20260912\\runs\\attempt-2\\result.json",
"bytes": 4699882,
"sha256": "20bfea2f1c0a9babe2a85f5a2ba158f07139ba18f9c04a971fd738e9daff24d9",
"reviewedPass": true
},
"packageIntegrity": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\source-rename-package-review-20260912\\runs\\attempt-2\\result.json",
"bytes": 4699882,
"sha256": "20bfea2f1c0a9babe2a85f5a2ba158f07139ba18f9c04a971fd738e9daff24d9",
"reviewedPass": true
},
"packagedServer": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\source-rename-server-runtime-20260912\\runs\\attempt-1\\result.json",
"bytes": 18679,
"sha256": "e42fb5fb8c15a9f603e9753e450613afce67caac5a0fbb806a9810ef272ec37a",
"reviewedPass": true
},
"nativeClosure": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\source-rename-package-preparation-20260912\\trial-package-1\\closed.json",
"bytes": 373,
"sha256": "ed2a00dfa018b27a823d75605007adb0f1d997b79a807e6eb168f5a489409e7a",
"reviewedPass": true
}
}
},
"assetHashes": {
"ArcadiaStudio-0.2.0-preview.rename.20260912-x86_64-pc-windows-gnullvm.zip": "d2433b5b384256b551672bf115bab40b3496aeee115e067922aedb5becf34d7e",
"ArcadiaStudio-0.2.0-preview.rename.20260912-x86_64-pc-windows-gnullvm.zip.sha256": "3b8d811c73ae0044ed0b451e8ff746f440af79b543dd52fe067a5a2e175b685f",
"VALIDATION.md": "97fae7e742656f35a939b8e97fa060e1338314c3e2af146f03c306a59427cd4d"
},
"assets": [
{
"id": 17,
"name": "ArcadiaStudio-0.2.0-preview.rename.20260912-x86_64-pc-windows-gnullvm.zip",
"bytes": 33074937,
"sha256": "d2433b5b384256b551672bf115bab40b3496aeee115e067922aedb5becf34d7e",
"url": "http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/download/v0.2.0-preview.rename.20260912/ArcadiaStudio-0.2.0-preview.rename.20260912-x86_64-pc-windows-gnullvm.zip"
},
{
"id": 18,
"name": "ArcadiaStudio-0.2.0-preview.rename.20260912-x86_64-pc-windows-gnullvm.zip.sha256",
"bytes": 140,
"sha256": "3b8d811c73ae0044ed0b451e8ff746f440af79b543dd52fe067a5a2e175b685f",
"url": "http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/download/v0.2.0-preview.rename.20260912/ArcadiaStudio-0.2.0-preview.rename.20260912-x86_64-pc-windows-gnullvm.zip.sha256"
},
{
"id": 19,
"name": "VALIDATION.md",
"bytes": 7168,
"sha256": "97fae7e742656f35a939b8e97fa060e1338314c3e2af146f03c306a59427cd4d",
"url": "http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/download/v0.2.0-preview.rename.20260912/VALIDATION.md"
}
],
"url": "http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/tag/v0.2.0-preview.rename.20260912",
"apiPublishedAt": "2026-09-13T00:46:38Z",
"visibilityVerifiedAt": "2026-09-13T00:47:52.474878+00:00",
"releaseId": 6,
"draft": false,
"prerelease": true,
"finished": "2026-09-13T00:47:52.873060+00:00"
}
@@ -0,0 +1,269 @@
"""Root-executed, hash-bound draft/upload/publication. Import has no side effects."""
if not __debug__:
raise RuntimeError('Publication requires Python assertions; optimized execution is refused.')
import argparse
from datetime import datetime, timezone
import hashlib
import json
from pathlib import Path
import re
import tomllib
import urllib.error
import urllib.parse
import urllib.request
import uuid
HERE = Path(__file__).resolve().parent
ROOT = HERE.parents[1]
ORIGIN = 'http://217.177.34.108:3000'
API = ORIGIN + '/api/v1/repos/sorokin.oleg.edu/ARCADIA-Studio'
TAG = 'v0.2.0-preview.rename.20260912'
TARGET = 'cbc49a7802fb1bba0dd284fd904c700a0703ae70'
TITLE = 'Source alias rename — Windows development preview'
ZIP = 'ArcadiaStudio-0.2.0-preview.rename.20260912-x86_64-pc-windows-gnullvm.zip'
ZIP_SHA = 'd2433b5b384256b551672bf115bab40b3496aeee115e067922aedb5becf34d7e'
CHECKSUM_SHA = '3b8d811c73ae0044ed0b451e8ff746f440af79b543dd52fe067a5a2e175b685f'
def now():
return datetime.now(timezone.utc).isoformat()
def digest(raw):
return hashlib.sha256(raw).hexdigest()
def read(path):
return json.loads(path.read_text(encoding='utf-8'))
def exclusive(path, value):
with path.open('x', encoding='utf-8', newline='\n') as stream:
json.dump(value, stream, indent=2, ensure_ascii=False)
stream.write('\n')
class Attempt:
def __init__(self, action, name):
assert re.fullmatch(r'[a-z0-9][a-z0-9-]{0,47}', name), 'Use a fresh simple attempt name'
self.path = HERE / 'runs' / (action + '-' + name)
self.path.mkdir(parents=True, exist_ok=False)
self.value = {'started': now(), 'action': action, 'tag': TAG, 'target': TARGET, 'success': False}
def event(self, step, **fields):
event = {'atUtc': now(), 'step': step, **fields}
with (self.path / 'events.jsonl').open('a', encoding='utf-8', newline='\n') as stream:
stream.write(json.dumps(event, ensure_ascii=False) + '\n')
def finish(self):
self.value['finished'] = now()
exclusive(self.path / 'result.json', self.value)
print(json.dumps(self.value, ensure_ascii=False), flush=True)
class NoRedirect(urllib.request.HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
raise RuntimeError('Unexpected redirect; authorization not forwarded')
class Client:
def __init__(self):
config = tomllib.loads((Path.home() / '.codex/config.toml').read_text(encoding='utf-8'))
self.token = config['mcp_servers']['gitea']['env']['GITEA_ACCESS_TOKEN']
self.opener = urllib.request.build_opener(urllib.request.ProxyHandler({}), NoRedirect)
def redact(self, text):
return text.replace(self.token, '[redacted]')
def request(self, url, data=None, method=None, headers=None, binary=False, missing=False):
parsed = urllib.parse.urlsplit(url)
expected = urllib.parse.urlsplit(ORIGIN)
assert (parsed.scheme, parsed.netloc) == (expected.scheme, expected.netloc)
assert parsed.username is None and parsed.password is None
request = urllib.request.Request(url, data=data, method=method,
headers={'Authorization': 'token ' + self.token, **(headers or {})})
try:
with self.opener.open(request, timeout=120) as response:
body = response.read()
return body if binary else json.loads(body)
except urllib.error.HTTPError as error:
detail = self.redact(error.read(2000).decode('utf-8', 'replace'))
if missing and error.code == 404:
return None
raise RuntimeError(f'HTTP {error.code}: {detail}') from None
def json(self, url, value, method):
return self.request(url, json.dumps(value).encode('utf-8'), method,
{'Content-Type': 'application/json'})
def release(self):
# Listing authenticated drafts catches a reserved-tag collision even
# before a server has made its Git tag visible to the by-tag endpoint.
matches = []
for page in range(1, 21):
items = self.request(API + f'/releases?limit=50&page={page}')
assert isinstance(items, list)
matches.extend(item for item in items if item['tag_name'] == TAG)
if len(items) < 50:
break
else:
raise RuntimeError('Release collision scan exceeded its bound')
assert len(matches) <= 1, 'Multiple releases claim the reserved tag'
return matches[0] if matches else None
def tag(self):
return self.request(API + '/tags/' + urllib.parse.quote(TAG, safe=''), missing=True)
def inputs():
bindings = read(HERE / 'bindings.json')
assert bindings['acceptanceReviewed'] is True, 'Parent must finish and explicitly review actual acceptance first'
assert isinstance(bindings['sourceBranch'], str) and bindings['sourceBranch']
assert re.fullmatch(r'[0-9a-f]{40}', bindings['sourceBranchHead'] or ''), 'Pin current published branch head separately from release target'
assert set(bindings['acceptanceEvidence']) == {'sourceBinding', 'packageIntegrity', 'packagedServer', 'nativeClosure'}
for key, item in bindings['acceptanceEvidence'].items():
assert item['reviewedPass'] is True, 'Missing parent acceptance review: ' + key
assert isinstance(item['sha256'], str) and re.fullmatch(r'[0-9a-f]{64}', item['sha256']), 'Missing acceptance receipt pin: ' + key
path = Path(item['path'] or '')
assert path.is_absolute() and path.is_file(), 'Missing acceptance receipt: ' + key
raw = path.read_bytes()
assert len(raw) == item['bytes'] and digest(raw) == item['sha256'], 'Acceptance receipt changed: ' + key
for key in ('notesSha256', 'validationSha256'):
assert isinstance(bindings[key], str) and re.fullmatch(r'[0-9a-f]{64}', bindings[key]), 'Final notes and VALIDATION hashes must be reviewed and bound first'
notes = (HERE / 'RELEASE-NOTES.md').read_bytes()
validation = (HERE / 'VALIDATION.md').read_bytes()
assert digest(notes) == bindings['notesSha256']
assert digest(validation) == bindings['validationSha256']
for raw in (notes, validation):
text = raw.decode('utf-8')
assert all(marker not in text for marker in ('PUBLICATION-PENDING', 'PACKAGE-RUNTIME-ACCEPTANCE-PENDING'))
package = Path(bindings['packageDirectory'])
assert package.is_absolute() and package.is_dir()
assets = {ZIP: (package / ZIP).read_bytes(), ZIP + '.sha256': (package / (ZIP + '.sha256')).read_bytes(), 'VALIDATION.md': validation}
assert len(assets[ZIP]) == 33074937 and digest(assets[ZIP]) == ZIP_SHA
assert digest(assets[ZIP + '.sha256']) == CHECKSUM_SHA
assert assets[ZIP + '.sha256'].decode('utf-8').strip() == ZIP_SHA + ' ' + ZIP
return bindings, notes.decode('utf-8'), assets
def source_and_tag(client, require_tag=True):
bindings = read(HERE / 'bindings.json')
branch = client.request(API + '/branches/' + urllib.parse.quote(bindings['sourceBranch'], safe=''))
assert branch['commit']['id'] == bindings['sourceBranchHead'], 'Published source branch changed'
target_commit = client.request(API + '/git/commits/' + TARGET)
assert target_commit['sha'] == TARGET, 'Exact source snapshot is unavailable'
tag = client.tag()
if tag is None:
assert not require_tag, 'Parent must create the reviewed exact-target tag through Gitea MCP first'
else:
assert tag['name'] == TAG and tag['commit']['sha'] == TARGET, 'Tag collision'
return tag
def owned_release(value, bindings, notes):
expected_id = bindings.get('releaseId')
state = HERE / 'release-created.json'
if state.exists():
saved = read(state)
assert saved['tag'] == TAG and saved['target'] == TARGET
assert expected_id in (None, saved['releaseId'])
expected_id = saved['releaseId']
assert expected_id is not None and value['id'] == expected_id, 'Existing release is not bound to this run; inspect and review before setting releaseId'
assert value['tag_name'] == TAG and value['target_commitish'] == TARGET
assert value['prerelease'] is True and value['name'] == TITLE and value['body'] == notes
def verify_assets(client, release_id, assets, allow_missing=False):
remote = client.request(API + f'/releases/{release_id}/assets')
names = [item['name'] for item in remote]
assert len(names) == len(set(names)) and len({a['id'] for a in remote}) == len(remote)
assert set(names) <= set(assets)
if not allow_missing:
assert set(names) == set(assets), 'Exactly three assets required'
verified = []
for item in remote:
expected = assets[item['name']]
assert item['size'] == len(expected)
received = client.request(item['browser_download_url'], binary=True)
assert received == expected, 'Existing asset bytes differ; no overwrite or deletion permitted'
verified.append({'id': item['id'], 'name': item['name'], 'bytes': len(received), 'sha256': digest(received), 'url': item['browser_download_url']})
return verified
def main():
parser = argparse.ArgumentParser()
parser.add_argument('action', choices=('inspect', 'create', 'upload', 'publish'))
parser.add_argument('--attempt', required=True)
args = parser.parse_args()
attempt = Attempt(args.action, args.attempt)
client = None
try:
if args.action == 'inspect':
client = Client()
release, tag = client.release(), client.tag()
attempt.value.update(success=True, release=release, remoteTag=tag,
scope='Read-only inspection; no acceptance or mutation')
return
bindings, notes, assets = inputs()
attempt.value['bindings'] = bindings
attempt.value['assetHashes'] = {name: digest(raw) for name, raw in assets.items()}
client = Client()
source_and_tag(client)
release = client.release()
if args.action == 'create':
if release is not None:
owned_release(release, bindings, notes)
assert release['draft'] is True
attempt.event('existing-owned-draft', releaseId=release['id'])
else:
assert not (HERE / 'release-created.json').exists() and bindings.get('releaseId') is None
attempt.event('create-request-started')
release = client.json(API + '/releases', {'tag_name': TAG, 'target_commitish': TARGET,
'name': TITLE, 'body': notes, 'draft': True, 'prerelease': True}, 'POST')
assert release['tag_name'] == TAG and release['target_commitish'] == TARGET and release['draft'] is True
# Persist ownership immediately; a failed readback can be retried safely.
exclusive(HERE / 'release-created.json', {'releaseId': release['id'], 'tag': TAG, 'target': TARGET, 'atUtc': now()})
attempt.event('created-draft', releaseId=release['id'])
fresh = client.release()
owned_release(fresh, bindings, notes)
assert fresh['draft'] is True
verify_assets(client, fresh['id'], assets, allow_missing=True)
else:
assert release is not None, 'Create the hash-bound draft first'
owned_release(release, bindings, notes)
endpoint = API + f'/releases/{release["id"]}'
if args.action == 'upload':
assert release['draft'] is True, 'Never upload into a public release'
existing = verify_assets(client, release['id'], assets, allow_missing=True)
for name, raw in assets.items():
if any(item['name'] == name for item in existing):
attempt.event('existing-asset-verified', name=name, sha256=digest(raw))
continue
boundary = 'ArcadiaRename' + uuid.uuid4().hex
prefix = (f'--{boundary}\r\nContent-Disposition: form-data; name="attachment"; filename="{name}"\r\nContent-Type: application/octet-stream\r\n\r\n').encode()
attempt.event('upload-request-started', name=name, sha256=digest(raw))
result = client.request(endpoint + '/assets?' + urllib.parse.urlencode({'name': name}),
prefix + raw + f'\r\n--{boundary}--\r\n'.encode(), 'POST',
{'Content-Type': 'multipart/form-data; boundary=' + boundary})
assert result['name'] == name and result['size'] == len(raw)
assert client.request(result['browser_download_url'], binary=True) == raw
attempt.event('uploaded-and-downloaded', name=name, assetId=result['id'], sha256=digest(raw))
attempt.value['assets'] = verify_assets(client, release['id'], assets)
else:
# Download all three afresh immediately before changing visibility.
before = verify_assets(client, release['id'], assets)
source_and_tag(client)
fresh = client.release()
owned_release(fresh, bindings, notes)
if fresh['draft']:
attempt.event('publish-request-started', releaseId=fresh['id'])
client.json(endpoint, {'draft': False, 'prerelease': True, 'body': notes}, 'PATCH')
final = client.release()
owned_release(final, bindings, notes)
assert final['draft'] is False
source_and_tag(client)
after = verify_assets(client, final['id'], assets)
assert sorted(before, key=lambda x: x['id']) == sorted(after, key=lambda x: x['id'])
attempt.value.update(assets=after, url=final['html_url'], apiPublishedAt=final['published_at'], visibilityVerifiedAt=now())
fresh = client.release()
owned_release(fresh, bindings, notes)
attempt.value.update(success=True, releaseId=fresh['id'], draft=fresh['draft'], prerelease=True)
except BaseException as error:
message = str(error)
attempt.value['error'] = client.redact(message) if client else message
attempt.value['remoteOutcome'] = 'May be partial if a request started; inspect before retry. No automatic overwrite/delete.'
raise SystemExit(1) from None
finally:
attempt.finish()
if __name__ == '__main__':
main()
@@ -0,0 +1,6 @@
{
"releaseId": 6,
"tag": "v0.2.0-preview.rename.20260912",
"target": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"atUtc": "2026-09-13T00:46:38.509160+00:00"
}
@@ -0,0 +1,6 @@
{"atUtc": "2026-09-13T00:46:50.710913+00:00", "step": "upload-request-started", "name": "ArcadiaStudio-0.2.0-preview.rename.20260912-x86_64-pc-windows-gnullvm.zip", "sha256": "d2433b5b384256b551672bf115bab40b3496aeee115e067922aedb5becf34d7e"}
{"atUtc": "2026-09-13T00:47:06.323846+00:00", "step": "uploaded-and-downloaded", "name": "ArcadiaStudio-0.2.0-preview.rename.20260912-x86_64-pc-windows-gnullvm.zip", "assetId": 17, "sha256": "d2433b5b384256b551672bf115bab40b3496aeee115e067922aedb5becf34d7e"}
{"atUtc": "2026-09-13T00:47:06.323846+00:00", "step": "upload-request-started", "name": "ArcadiaStudio-0.2.0-preview.rename.20260912-x86_64-pc-windows-gnullvm.zip.sha256", "sha256": "3b8d811c73ae0044ed0b451e8ff746f440af79b543dd52fe067a5a2e175b685f"}
{"atUtc": "2026-09-13T00:47:06.786063+00:00", "step": "uploaded-and-downloaded", "name": "ArcadiaStudio-0.2.0-preview.rename.20260912-x86_64-pc-windows-gnullvm.zip.sha256", "assetId": 18, "sha256": "3b8d811c73ae0044ed0b451e8ff746f440af79b543dd52fe067a5a2e175b685f"}
{"atUtc": "2026-09-13T00:47:06.786063+00:00", "step": "upload-request-started", "name": "VALIDATION.md", "sha256": "97fae7e742656f35a939b8e97fa060e1338314c3e2af146f03c306a59427cd4d"}
{"atUtc": "2026-09-13T00:47:07.255449+00:00", "step": "uploaded-and-downloaded", "name": "VALIDATION.md", "assetId": 19, "sha256": "97fae7e742656f35a939b8e97fa060e1338314c3e2af146f03c306a59427cd4d"}
@@ -0,0 +1,75 @@
{
"started": "2026-09-13T00:46:48.232488+00:00",
"action": "upload",
"tag": "v0.2.0-preview.rename.20260912",
"target": "cbc49a7802fb1bba0dd284fd904c700a0703ae70",
"success": true,
"bindings": {
"acceptanceReviewed": true,
"sourceBranch": "codex/release1-9e8r6t",
"sourceBranchHead": "506a349b32f3f869ac027d8763c501b61cf79769",
"sourceDirectory": null,
"packageDirectory": "C:/arcadia-rename-package-2/packages",
"releaseId": null,
"notesSha256": "272c1337920cb5dcd96fcd9adff87cdb0c8c12350e69d42e90d96741d3cc546b",
"validationSha256": "97fae7e742656f35a939b8e97fa060e1338314c3e2af146f03c306a59427cd4d",
"acceptanceEvidence": {
"sourceBinding": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\source-rename-package-review-20260912\\runs\\attempt-2\\result.json",
"bytes": 4699882,
"sha256": "20bfea2f1c0a9babe2a85f5a2ba158f07139ba18f9c04a971fd738e9daff24d9",
"reviewedPass": true
},
"packageIntegrity": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\source-rename-package-review-20260912\\runs\\attempt-2\\result.json",
"bytes": 4699882,
"sha256": "20bfea2f1c0a9babe2a85f5a2ba158f07139ba18f9c04a971fd738e9daff24d9",
"reviewedPass": true
},
"packagedServer": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\source-rename-server-runtime-20260912\\runs\\attempt-1\\result.json",
"bytes": 18679,
"sha256": "e42fb5fb8c15a9f603e9753e450613afce67caac5a0fbb806a9810ef272ec37a",
"reviewedPass": true
},
"nativeClosure": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\source-rename-package-preparation-20260912\\trial-package-1\\closed.json",
"bytes": 373,
"sha256": "ed2a00dfa018b27a823d75605007adb0f1d997b79a807e6eb168f5a489409e7a",
"reviewedPass": true
}
}
},
"assetHashes": {
"ArcadiaStudio-0.2.0-preview.rename.20260912-x86_64-pc-windows-gnullvm.zip": "d2433b5b384256b551672bf115bab40b3496aeee115e067922aedb5becf34d7e",
"ArcadiaStudio-0.2.0-preview.rename.20260912-x86_64-pc-windows-gnullvm.zip.sha256": "3b8d811c73ae0044ed0b451e8ff746f440af79b543dd52fe067a5a2e175b685f",
"VALIDATION.md": "97fae7e742656f35a939b8e97fa060e1338314c3e2af146f03c306a59427cd4d"
},
"assets": [
{
"id": 17,
"name": "ArcadiaStudio-0.2.0-preview.rename.20260912-x86_64-pc-windows-gnullvm.zip",
"bytes": 33074937,
"sha256": "d2433b5b384256b551672bf115bab40b3496aeee115e067922aedb5becf34d7e",
"url": "http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/download/v0.2.0-preview.rename.20260912/ArcadiaStudio-0.2.0-preview.rename.20260912-x86_64-pc-windows-gnullvm.zip"
},
{
"id": 18,
"name": "ArcadiaStudio-0.2.0-preview.rename.20260912-x86_64-pc-windows-gnullvm.zip.sha256",
"bytes": 140,
"sha256": "3b8d811c73ae0044ed0b451e8ff746f440af79b543dd52fe067a5a2e175b685f",
"url": "http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/download/v0.2.0-preview.rename.20260912/ArcadiaStudio-0.2.0-preview.rename.20260912-x86_64-pc-windows-gnullvm.zip.sha256"
},
{
"id": 19,
"name": "VALIDATION.md",
"bytes": 7168,
"sha256": "97fae7e742656f35a939b8e97fa060e1338314c3e2af146f03c306a59427cd4d",
"url": "http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/download/v0.2.0-preview.rename.20260912/VALIDATION.md"
}
],
"releaseId": 6,
"draft": true,
"prerelease": true,
"finished": "2026-09-13T00:47:16.254617+00:00"
}
@@ -0,0 +1,49 @@
# Published Windows source-alias rename preview
[Download the prerelease](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/tag/v0.2.0-preview.rename.20260912).
Publication and complete asset readback finished on September 13, 2026 at
**00:47:52.873060 UTC** (September 12 on the Windows host). Gitea release ID **6**
is public, marked prerelease, with exact source tag
`v0.2.0-preview.rename.20260912` at
**cbc49a7802fb1bba0dd284fd904c700a0703ae70**.
Extract the complete Windows ZIP and run `arcadia-studio.exe`, retaining the
sibling `libunwind.dll`. The optional REST server, examples, offline guide and
dependency notices are included. The attached
[VALIDATION.md](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/download/v0.2.0-preview.rename.20260912/VALIDATION.md)
provides exact launch/recheck commands and immutable evidence links.
| Public asset | ID | Bytes | SHA256 |
| --- | ---: | ---: | --- |
| Windows ZIP | 17 | 33,074,937 | `d2433b5b384256b551672bf115bab40b3496aeee115e067922aedb5becf34d7e` |
| ZIP checksum | 18 | 140 | `3b8d811c73ae0044ed0b451e8ff746f440af79b543dd52fe067a5a2e175b685f` |
| `VALIDATION.md` | 19 | 7,168 | `97fae7e742656f35a939b8e97fa060e1338314c3e2af146f03c306a59427cd4d` |
The [package acceptance report](release-source-alias-rename-package-20260912.md)
and its independent reviews were published at evidence-only commit
**506a349b32f3f869ac027d8763c501b61cf79769** before creating the tag. The
[publication records](experiments/source-alias-rename-publication-20260912/)
preserve exact reviewed notes, validation, receipt pins, helper and terminal
create/upload/publish results. Each asset was downloaded and compared byte for
byte before and after publication. No existing release or asset was overwritten.
Gitea's `published_at` is **00:46:38 UTC**, corresponding to draft creation.
The separate public-visibility readback is **00:47:52.474878 UTC**; it is not
backdated to the API field. Tag creation used Gitea MCP with the exact source
target. The reviewed API helper then verified tag/branch identity, created an
owned draft and performed sequential upload/download/publication checks. The
earlier Git tag helper was disabled after independent configuration findings
and was never executed.
This delivers bounded Text alias rename, preview, origin selection, Undo/Redo,
Save/reopen and corresponding packaged-server persistence evidence. Strict
Clippy, 805 desktop tests, the isolated Confirm timing check and 501 core/server
tests passed. Native evidence covers the precise simple/representative workflows
in the package report; it does not infer untested interactions.
The binaries use development profiles. Full OA/SA release acceptance remains
incomplete, including compact Text UX, newer peer diagram/palette integration,
quantities/calculations and maintained libraries. The known Details-to-Preview
delayed-scroll-reset P2 remains explicitly disclosed and tracked in issue 9;
the separately reviewed union correction is not included here. Linux/WSL work
remains user-paused. This release does not close the overall project objective.