Preserve published standalone CLI release records

This commit is contained in:
2026-09-11 06:20:22 -07:00
parent df6f595626
commit d95b1ab178
12 changed files with 393 additions and 0 deletions
@@ -0,0 +1,47 @@
# CLI prerelease publication records — 2026-09-11
These four files are exact byte copies from `.local/cli-packaging-20260911/`.
They contain sanitized publication results and release prose only. No credential,
configuration, authentication helper or upload script is included.
| File | Bytes | SHA256 |
| --- | ---: | --- |
| `upload-binaries-verified.json` | 678 | `e945e2724020c48bfe15be7b4258861bd6c01291b98eae036eca786bb022ebde` |
| `upload-validation-verified.json` | 277 | `73581acbb5b5fe4aca1fda1b626f80a28bcb3d6c036f7ce793c62bf5a8ef4a72` |
| `published-verified.json` | 382 | `b5fe8a38579fb8399c78bca9db9fd91b64e8b7b7de7c664049cf5e615a671100` |
| `RELEASE-NOTES.md` | 2010 | `86a1b5b0744c8f63f6ed640e14b23bdbcb34b63a25320d67eb1fa7da4128a0a5` |
All four originals use CRLF. `preserve.py` rereads source and destination bytes,
refuses any unequal existing destination, and records the inventory in
`manifest.json`. It does not upload or execute application binaries. Running it
again requires the original private source records and preserved MCP readbacks.
`mcp-release-readback.json` and `mcp-tag-readback.json` are locally serialized
parsed responses from fresh read-only Gitea MCP calls. They are observations,
not original HTTP wire bytes. Release 2 is published as a prerelease at
`cli-v0.2.0-preview.authoring.20260911`, pointing to integration commit
`27df4a3945ebc97cd7cbde61f6aeea7a91c680d3`.
The publisher's `notes_sha256` is
`1b83b9c904a79ff7acbde421851c9da9b520f3fa0aea920bf55fb71bea392a9d`.
It binds the **1988-byte UTF-8 LF public body**, not the raw CRLF Markdown file
above. Converting only CRLF to LF makes the preserved prose exactly equal to
the MCP public body, including its final newline. `preservation.log` records
the corrected successful check. `preservation-initial-failure.txt` discloses
the initial checker assumption and its correction; no publication changed.
The asset readback PASS fields are the original publisher's downloaded-asset
verification, preserved without re-downloading or repeating runtime checks.
The semantic source (`01b76a1`), packaging assembly (`a0a48e8`) and release
integration (`27df4a3`) remain distinct in `manifest.json` and the report.
Proposed repository attribute rule for root integration:
```gitattributes
harness/experiments/cli-prerelease-20260911/** -text
```
The preserving worker did not edit `.gitattributes` or Git state. Root must
apply the rule before adding these exact evidence bytes and verify index or
checkout hashes. The standalone report is
`harness/release-cli-prerelease-published-20260911.md`.
@@ -0,0 +1,22 @@
Standalone Windows x64 tools for `.arcadia` projects: `check`/`lint`, missing-ID stabilization and semantic alias rename. Editing commands preview by default; `--write` saves through the shared source conflict/recovery guards. Studio and a server are not required.
Extract the complete ArcadiaCLI ZIP, keep `libunwind.dll` beside `arcadia.exe`, and open a terminal in that folder:
```powershell
.\arcadia.exe --help
.\arcadia.exe check examples/text-first/project.arcadia
```
Copy a complete example folder before editing. Read `docs/source-cli.md` for command, diagnostic and exit-code contracts. Preview IDs remain provisional until saved; a later invocation can generate different missing IDs.
Verified: 12 source CLI tests, strict lint/format/build, independent 183 semantic assertions across 21 processes, all 114 packaged files and 27 dependency packages, plus independent source/default compatibility and 156 assertions across 10 clean extracted CLI invocations. Preview, exact stabilization/rename, preserved identities/comments/Unicode/CRLF, no-op timestamps and invalid-source refusal passed. ZIP, checksum and validation asset were downloaded and hash-verified after upload.
This is a development-profile Windows preview. It does not provide a saved-plan/digest protocol, complete large-model text ergonomics or current Linux runtime acceptance. It is separate from the [Studio preview](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/tag/v0.2.0-preview.authoring.20260911). The full OA/SA release remains under development.
Release checkpoint: [27df4a3](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/commit/27df4a3945ebc97cd7cbde61f6aeea7a91c680d3). Preserved semantic build source is `01b76a1`; packaging-only assembly is `a0a48e8`. Attached `VALIDATION.md` records exact evidence and the distinct source/build roles.
ZIP size: **5,091,267 bytes**. SHA256:
```text
2B051F8CE1EA4F59EE7E233E1FBD516D423AADBFBCA5D549755CBE78FCDE1AF6
```
@@ -0,0 +1,96 @@
{
"scope": "Publication evidence preservation and read-only MCP release/tag comparison; no runtime tests or asset re-download.",
"release_id": 2,
"tag": "cli-v0.2.0-preview.authoring.20260911",
"publication_url": "http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/tag/cli-v0.2.0-preview.authoring.20260911",
"published_at": "2026-09-11T12:50:39Z",
"source_roles": {
"semantic_source": "01b76a1e89e93b7992f39e63560aa8b2ca2f69e0",
"packaging_assembly": "a0a48e82bd43be181caca1fe2c1514c21f2bc405",
"release_integration": "27df4a3945ebc97cd7cbde61f6aeea7a91c680d3"
},
"assets": [
{
"id": 4,
"name": "ArcadiaCLI-0.2.0-preview.authoring.20260911-x86_64-pc-windows-gnullvm.zip",
"bytes": 5091267,
"sha256": "2b051f8ce1ea4f59ee7e233e1fbd516d423aadbfbca5d549755cbe78fcde1af6",
"url": "http://217.177.34.108:3000/attachments/024ac74c-8806-4da2-9ca4-726c01a7735f",
"readback": "PASS"
},
{
"id": 5,
"name": "ArcadiaCLI-0.2.0-preview.authoring.20260911-x86_64-pc-windows-gnullvm.zip.sha256",
"bytes": 140,
"sha256": "0dc3f12d2f79edfb735e311298d1528cbdb828b775ec885b3badde24e66bceef",
"url": "http://217.177.34.108:3000/attachments/24af1b92-ce23-41e3-bc25-60fed95a6270",
"readback": "PASS"
},
{
"id": 6,
"name": "VALIDATION.md",
"bytes": 50297,
"sha256": "5a0206b493bf1ca98fe931243452a9092cdf2acf10f4e3fd0a7ee9a7d8f56ec8",
"url": "http://217.177.34.108:3000/attachments/628863de-e4ff-4fc7-afdb-45b071705d7b",
"readback": "PASS"
}
],
"files": [
{
"path": "upload-binaries-verified.json",
"source": ".local/cli-packaging-20260911/upload-binaries-verified.json",
"bytes": 678,
"sha256": "e945e2724020c48bfe15be7b4258861bd6c01291b98eae036eca786bb022ebde",
"crlf_sequences": 17,
"bare_lf_sequences": 0,
"method": "exact byte copy; source and destination reread equal"
},
{
"path": "upload-validation-verified.json",
"source": ".local/cli-packaging-20260911/upload-validation-verified.json",
"bytes": 277,
"sha256": "73581acbb5b5fe4aca1fda1b626f80a28bcb3d6c036f7ce793c62bf5a8ef4a72",
"crlf_sequences": 9,
"bare_lf_sequences": 0,
"method": "exact byte copy; source and destination reread equal"
},
{
"path": "published-verified.json",
"source": ".local/cli-packaging-20260911/published-verified.json",
"bytes": 382,
"sha256": "b5fe8a38579fb8399c78bca9db9fd91b64e8b7b7de7c664049cf5e615a671100",
"crlf_sequences": 9,
"bare_lf_sequences": 0,
"method": "exact byte copy; source and destination reread equal"
},
{
"path": "RELEASE-NOTES.md",
"source": ".local/cli-packaging-20260911/RELEASE-NOTES.md",
"bytes": 2010,
"sha256": "86a1b5b0744c8f63f6ed640e14b23bdbcb34b63a25320d67eb1fa7da4128a0a5",
"crlf_sequences": 22,
"bare_lf_sequences": 0,
"method": "exact byte copy; source and destination reread equal"
},
{
"path": "mcp-release-readback.json",
"bytes": 2495,
"sha256": "e0a1d9324cd7a115e22c87c7905489aec81d30277a17b4480866380cbec8edb1",
"method": "MCP read-only parsed response, locally serialized as UTF-8 JSON; not original HTTP wire bytes"
},
{
"path": "mcp-tag-readback.json",
"bytes": 196,
"sha256": "bb770f30f292b65ca4af28d688f0f1dc1d04fb918b10f527a56ba847d44e9b2e",
"method": "MCP read-only parsed response, locally serialized as UTF-8 JSON; not original HTTP wire bytes"
}
],
"checks": {
"four_exact_copies": true,
"release_and_tag_match": true,
"published_flags_and_time_match": true,
"normalized_notes_hash_matches_publisher_record": true,
"notes_match_public_body_after_CRLF_to_LF_only": true,
"asset_records_are_original_publisher_readbacks": true
}
}
@@ -0,0 +1,13 @@
{
"author": "Codex-9e8r6t",
"body": "Standalone Windows x64 tools for `.arcadia` projects: `check`/`lint`, missing-ID stabilization and semantic alias rename. Editing commands preview by default; `--write` saves through the shared source conflict/recovery guards. Studio and a server are not required.\n\nExtract the complete ArcadiaCLI ZIP, keep `libunwind.dll` beside `arcadia.exe`, and open a terminal in that folder:\n\n```powershell\n.\\arcadia.exe --help\n.\\arcadia.exe check examples/text-first/project.arcadia\n```\n\nCopy a complete example folder before editing. Read `docs/source-cli.md` for command, diagnostic and exit-code contracts. Preview IDs remain provisional until saved; a later invocation can generate different missing IDs.\n\nVerified: 12 source CLI tests, strict lint/format/build, independent 183 semantic assertions across 21 processes, all 114 packaged files and 27 dependency packages, plus independent source/default compatibility and 156 assertions across 10 clean extracted CLI invocations. Preview, exact stabilization/rename, preserved identities/comments/Unicode/CRLF, no-op timestamps and invalid-source refusal passed. ZIP, checksum and validation asset were downloaded and hash-verified after upload.\n\nThis is a development-profile Windows preview. It does not provide a saved-plan/digest protocol, complete large-model text ergonomics or current Linux runtime acceptance. It is separate from the [Studio preview](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/tag/v0.2.0-preview.authoring.20260911). The full OA/SA release remains under development.\n\nRelease checkpoint: [27df4a3](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/commit/27df4a3945ebc97cd7cbde61f6aeea7a91c680d3). Preserved semantic build source is `01b76a1`; packaging-only assembly is `a0a48e8`. Attached `VALIDATION.md` records exact evidence and the distinct source/build roles.\n\nZIP size: **5,091,267 bytes**. SHA256:\n\n```text\n2B051F8CE1EA4F59EE7E233E1FBD516D423AADBFBCA5D549755CBE78FCDE1AF6\n```\n",
"created_at": "2026-09-11T12:50:39Z",
"draft": false,
"html_url": "http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/tag/cli-v0.2.0-preview.authoring.20260911",
"id": 2,
"prerelease": true,
"published_at": "2026-09-11T12:50:39Z",
"tag_name": "cli-v0.2.0-preview.authoring.20260911",
"target": "27df4a3945ebc97cd7cbde61f6aeea7a91c680d3",
"title": "Arcadia CLI — standalone Windows authoring preview"
}
@@ -0,0 +1,5 @@
{
"commit_sha": "27df4a3945ebc97cd7cbde61f6aeea7a91c680d3",
"message": "Package standalone source CLI with verified runtime and notices\n",
"name": "cli-v0.2.0-preview.authoring.20260911"
}
@@ -0,0 +1,16 @@
Initial preservation checker stopped after copying the four files unchanged:
Traceback (most recent call last):
File "C:\Users\User\Documents\Git\ARCADIA-Studio\harness\experiments\cli-prerelease-20260911\preserve.py", line 35, in <module>
assert hashlib.sha256(notes).hexdigest() == publication['notes_sha256']
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError
The checker incorrectly assumed notes_sha256 meant local raw Markdown bytes.
Read-only comparison established that it instead exactly matches the LF public
release body. Local CRLF bytes remain preserved unchanged; CRLF-to-LF conversion
alone yields the public body and the publisher's recorded hash. The corrected
checker records both identities, without changing any publication asset or the
four source records. A subsequent temporary PowerShell comparison command had
an empty-pipeline parse error and was corrected before producing the comparison;
it made no file changes.
@@ -0,0 +1,42 @@
{
"result": "PASS",
"copied_files": [
{
"path": "upload-binaries-verified.json",
"source": ".local/cli-packaging-20260911/upload-binaries-verified.json",
"bytes": 678,
"sha256": "e945e2724020c48bfe15be7b4258861bd6c01291b98eae036eca786bb022ebde",
"crlf_sequences": 17,
"bare_lf_sequences": 0,
"method": "exact byte copy; source and destination reread equal"
},
{
"path": "upload-validation-verified.json",
"source": ".local/cli-packaging-20260911/upload-validation-verified.json",
"bytes": 277,
"sha256": "73581acbb5b5fe4aca1fda1b626f80a28bcb3d6c036f7ce793c62bf5a8ef4a72",
"crlf_sequences": 9,
"bare_lf_sequences": 0,
"method": "exact byte copy; source and destination reread equal"
},
{
"path": "published-verified.json",
"source": ".local/cli-packaging-20260911/published-verified.json",
"bytes": 382,
"sha256": "b5fe8a38579fb8399c78bca9db9fd91b64e8b7b7de7c664049cf5e615a671100",
"crlf_sequences": 9,
"bare_lf_sequences": 0,
"method": "exact byte copy; source and destination reread equal"
},
{
"path": "RELEASE-NOTES.md",
"source": ".local/cli-packaging-20260911/RELEASE-NOTES.md",
"bytes": 2010,
"sha256": "86a1b5b0744c8f63f6ed640e14b23bdbcb34b63a25320d67eb1fa7da4128a0a5",
"crlf_sequences": 22,
"bare_lf_sequences": 0,
"method": "exact byte copy; source and destination reread equal"
}
],
"release_target": "27df4a3945ebc97cd7cbde61f6aeea7a91c680d3"
}
@@ -0,0 +1,62 @@
"""Preserve four sanitized publication records; never read credentials or upload."""
import hashlib
import json
from pathlib import Path
destination = Path(__file__).resolve().parent
repository = destination.parents[2]
source = repository / '.local/cli-packaging-20260911'
names = ['upload-binaries-verified.json', 'upload-validation-verified.json',
'published-verified.json', 'RELEASE-NOTES.md']
records = []
for name in names:
data = (source / name).read_bytes()
target = destination / name
if not target.exists():
with target.open('xb') as output:
output.write(data)
assert target.read_bytes() == data
records.append({'path': name, 'source': '.local/cli-packaging-20260911/' + name,
'bytes': len(data), 'sha256': hashlib.sha256(data).hexdigest(),
'crlf_sequences': data.count(b'\r\n'),
'bare_lf_sequences': data.count(b'\n') - data.count(b'\r\n'),
'method': 'exact byte copy; source and destination reread equal'})
def read(name):
return json.loads((destination / name).read_text(encoding='utf-8-sig'))
publication = read('published-verified.json')
release = read('mcp-release-readback.json')
tag = read('mcp-tag-readback.json')
assert publication['id'] == release['id'] == 2
assert publication['tag'] == release['tag_name'] == tag['name'] == 'cli-v0.2.0-preview.authoring.20260911'
assert publication['draft'] is release['draft'] is False
assert publication['prerelease'] is release['prerelease'] is True
assert release['target'] == tag['commit_sha'] == '27df4a3945ebc97cd7cbde61f6aeea7a91c680d3'
assert publication['published_at'] == release['published_at'] == '2026-09-11T12:50:39Z'
notes = (destination / 'RELEASE-NOTES.md').read_bytes()
# The publisher's recorded hash binds the LF public body, not the local CRLF
# file. Keep both exact identities and prove the sole normalization explicitly.
normalized_notes = notes.decode('utf-8-sig').replace('\r\n', '\n')
assert hashlib.sha256(normalized_notes.encode('utf-8')).hexdigest() == publication['notes_sha256']
assert normalized_notes == release['body']
assets = read('upload-binaries-verified.json') + read('upload-validation-verified.json')
assert len(assets) == publication['asset_count'] == 3
assert all(item['readback'] == 'PASS' for item in assets)
assert assets[0]['sha256'] == '2b051f8ce1ea4f59ee7e233e1fbd516d423aadbfbca5d549755cbe78fcde1af6'
assert assets[0]['bytes'] == 5091267
for name in ['mcp-release-readback.json', 'mcp-tag-readback.json']:
data = (destination / name).read_bytes()
records.append({'path': name, 'bytes': len(data), 'sha256': hashlib.sha256(data).hexdigest(),
'method': 'MCP read-only parsed response, locally serialized as UTF-8 JSON; not original HTTP wire bytes'})
result = {'scope': 'Publication evidence preservation and read-only MCP release/tag comparison; no runtime tests or asset re-download.',
'release_id': 2, 'tag': tag['name'], 'publication_url': release['html_url'],
'published_at': release['published_at'], 'source_roles': {
'semantic_source': '01b76a1e89e93b7992f39e63560aa8b2ca2f69e0',
'packaging_assembly': 'a0a48e82bd43be181caca1fe2c1514c21f2bc405',
'release_integration': release['target']},
'assets': assets, 'files': records,
'checks': {'four_exact_copies': True, 'release_and_tag_match': True,
'published_flags_and_time_match': True, 'normalized_notes_hash_matches_publisher_record': True,
'notes_match_public_body_after_CRLF_to_LF_only': True,
'asset_records_are_original_publisher_readbacks': True}}
(destination / 'manifest.json').write_text(json.dumps(result, indent=2) + '\n', encoding='utf-8', newline='\n')
print(json.dumps({'result': 'PASS', 'copied_files': records[:4], 'release_target': release['target']}, indent=2))
@@ -0,0 +1,10 @@
{
"id": 2,
"tag": "cli-v0.2.0-preview.authoring.20260911",
"url": "http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/tag/cli-v0.2.0-preview.authoring.20260911",
"draft": false,
"prerelease": true,
"asset_count": 3,
"notes_sha256": "1b83b9c904a79ff7acbde421851c9da9b520f3fa0aea920bf55fb71bea392a9d",
"published_at": "2026-09-11T12:50:39Z"
}
@@ -0,0 +1,18 @@
[
{
"id": 4,
"name": "ArcadiaCLI-0.2.0-preview.authoring.20260911-x86_64-pc-windows-gnullvm.zip",
"bytes": 5091267,
"sha256": "2b051f8ce1ea4f59ee7e233e1fbd516d423aadbfbca5d549755cbe78fcde1af6",
"url": "http://217.177.34.108:3000/attachments/024ac74c-8806-4da2-9ca4-726c01a7735f",
"readback": "PASS"
},
{
"id": 5,
"name": "ArcadiaCLI-0.2.0-preview.authoring.20260911-x86_64-pc-windows-gnullvm.zip.sha256",
"bytes": 140,
"sha256": "0dc3f12d2f79edfb735e311298d1528cbdb828b775ec885b3badde24e66bceef",
"url": "http://217.177.34.108:3000/attachments/24af1b92-ce23-41e3-bc25-60fed95a6270",
"readback": "PASS"
}
]
@@ -0,0 +1,10 @@
[
{
"id": 6,
"name": "VALIDATION.md",
"bytes": 50297,
"sha256": "5a0206b493bf1ca98fe931243452a9092cdf2acf10f4e3fd0a7ee9a7d8f56ec8",
"url": "http://217.177.34.108:3000/attachments/628863de-e4ff-4fc7-afdb-45b071705d7b",
"readback": "PASS"
}
]
@@ -0,0 +1,52 @@
# Published standalone CLI prerelease — 2026-09-11
Owner: Codex-9e8r6t /root/palette_finish. This task preserves publication evidence and independently checks read-only release/tag metadata. It performs no production edits, Git operations, compiler or native input, credential access, upload, asset download or repeated runtime tests.
## Published milestone
[Arcadia CLI — standalone Windows authoring preview](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/releases/tag/cli-v0.2.0-preview.authoring.20260911) is release **2**, published **2026-09-11 12:50:39 UTC**, `draft: false`, `prerelease: true`. Fresh Gitea MCP `get_release(id:2)` and `get_tag` readbacks independently agree on tag `cli-v0.2.0-preview.authoring.20260911` and target `27df4a3945ebc97cd7cbde61f6aeea7a91c680d3`.
The publication roles are deliberately distinct:
| Role | Commit | Meaning |
| --- | --- | --- |
| Semantic source | `01b76a1e89e93b7992f39e63560aa8b2ca2f69e0` | Preserved source CLI implementation, workspace and lock corresponding to the verified BAD169F8 executable |
| Packaging assembly | `a0a48e82bd43be181caca1fe2c1514c21f2bc405` | Isolated packaging-only changes used to assemble the verified ZIP |
| Release integration | `27df4a3945ebc97cd7cbde61f6aeea7a91c680d3` | Published tag checkpoint integrating the packaging files and evidence; not relabeled as original compiler inputs |
## Preserved upload results
Root's original readback records report three uploaded assets, each downloaded and hash-verified by the publisher. This preservation task does not repeat those downloads.
| Asset / id | Bytes | SHA256 |
| --- | ---: | --- |
| `ArcadiaCLI-0.2.0-preview.authoring.20260911-x86_64-pc-windows-gnullvm.zip` / 4 | 5091267 | `2b051f8ce1ea4f59ee7e233e1fbd516d423aadbfbca5d549755cbe78fcde1af6` |
| ZIP `.sha256` / 5 | 140 | `0dc3f12d2f79edfb735e311298d1528cbdb828b775ec885b3badde24e66bceef` |
| `VALIDATION.md` / 6 | 50297 | `5a0206b493bf1ca98fe931243452a9092cdf2acf10f4e3fd0a7ee9a7d8f56ec8` |
The ZIP contains 114 files and the exact BAD169F8 CLI plus F456 runtime, with 27 dependency packages. Author packaging and independent runtime gates are documented in `release-cli-packaging-20260911.md` and `release-cli-packaging-review-20260911.md`; the latter records 156 assertions across 10 fresh extracted CLI processes. These existing results are attributed to those runs, not newly executed here.
## Exact-byte evidence
New durable directory: `harness/experiments/cli-prerelease-20260911/`. `README.md` and `manifest.json` inventory the exact copies, source paths, byte lengths and hashes:
| Copied record | Bytes | SHA256 |
| --- | ---: | --- |
| `upload-binaries-verified.json` | 678 | `e945e2724020c48bfe15be7b4258861bd6c01291b98eae036eca786bb022ebde` |
| `upload-validation-verified.json` | 277 | `73581acbb5b5fe4aca1fda1b626f80a28bcb3d6c036f7ce793c62bf5a8ef4a72` |
| `published-verified.json` | 382 | `b5fe8a38579fb8399c78bca9db9fd91b64e8b7b7de7c664049cf5e615a671100` |
| `RELEASE-NOTES.md` | 2010 | `86a1b5b0744c8f63f6ed640e14b23bdbcb34b63a25320d67eb1fa7da4128a0a5` |
All four copies match their private originals byte for byte and retain CRLF. Only these sanitized records were copied; no credentials or upload helpers were read or included. Additional files hold the preserving checker, its result, disclosed initial checker failure, parsed MCP observations and the inventory.
One evidence distinction was verified explicitly: `published-verified.json` stores `notes_sha256 = 1b83b9c904a79ff7acbde421851c9da9b520f3fa0aea920bf55fb71bea392a9d`, which matches the **1988-byte LF public release body**. It does not equal the 2010-byte raw CRLF Markdown hash above. CRLF-to-LF conversion alone reproduces the public body exactly, including the final newline. An initial checker incorrectly assumed this was a raw-file hash and stopped; its failure is retained, and the corrected check passed without changing any source record or public content. A temporary comparison command also had a corrected PowerShell syntax error and made no changes.
Recommended exact-byte rule for root to add before Git integration:
```gitattributes
harness/experiments/cli-prerelease-20260911/** -text
```
This worker did not edit attributes or Git state. Root owns integration, common ledger/Wiki updates and any further publication work.
This is a development-profile Windows CLI milestone. It is not full OA/SA product acceptance, current Linux runtime acceptance, a saved-plan/digest protocol, or complete large-model textual ergonomics acceptance.