Record completed native Text alias rename verification
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"archive": "source-rename-native-closure-20260912.zip",
|
||||
"sha256": "abff68aeb2bd893577d4226c9ec4b6b0823b4ec22895a273ab2d22f344354207",
|
||||
"bytes": 6449971,
|
||||
"members": 355,
|
||||
"originalReadbacks": 351,
|
||||
"includedJpeg": 94,
|
||||
"metadata": 94,
|
||||
"verificationDirectories": 8,
|
||||
"finalPhysicalFiles": 41,
|
||||
"excludedImage": {
|
||||
"path": ".local\\source-rename-native-followup-20260912\\trial-attempt-7\\screenshots\\023-resume-declaration-preview-0.jpg",
|
||||
"bytes": 45383,
|
||||
"sha256": "c45c0fb6b1769a4a84d4f96bc6d6cd92c89c121ac96d4cce5829c97451899288",
|
||||
"reason": "Unrelated Codex window occludes the intended native application; image excluded, original metadata retained."
|
||||
},
|
||||
"allMemberBytesAndCrcVerified": true,
|
||||
"scope": "Closed bounded native alias trial; not release or full-application acceptance."
|
||||
}
|
||||
+131
@@ -0,0 +1,131 @@
|
||||
{
|
||||
"status": "PASS",
|
||||
"checks": 2312,
|
||||
"archiveSha256": "abff68aeb2bd893577d4226c9ec4b6b0823b4ec22895a273ab2d22f344354207",
|
||||
"archiveBytes": 6449971,
|
||||
"members": 355,
|
||||
"originalReadbacks": 351,
|
||||
"physicalTrees": [
|
||||
{
|
||||
"case": "simple",
|
||||
"variant": "baseline",
|
||||
"files": 4
|
||||
},
|
||||
{
|
||||
"case": "simple",
|
||||
"variant": "expected",
|
||||
"files": 4
|
||||
},
|
||||
{
|
||||
"case": "simple",
|
||||
"variant": "work",
|
||||
"files": 4
|
||||
},
|
||||
{
|
||||
"case": "representative",
|
||||
"variant": "baseline",
|
||||
"files": 37
|
||||
},
|
||||
{
|
||||
"case": "representative",
|
||||
"variant": "expected",
|
||||
"files": 37
|
||||
},
|
||||
{
|
||||
"case": "representative",
|
||||
"variant": "work",
|
||||
"files": 37
|
||||
}
|
||||
],
|
||||
"finalPhysicalFiles": 41,
|
||||
"oracleReceipts": [
|
||||
{
|
||||
"step": "verification-representative-confirmed-saved",
|
||||
"case": "representative",
|
||||
"expected": "expected",
|
||||
"files": 37,
|
||||
"stdout": "PASS exact model/identity/30 reachable sources; 30 exact disk files (0 proven retained)"
|
||||
},
|
||||
{
|
||||
"step": "verification-representative-confirmed-unsaved",
|
||||
"case": "representative",
|
||||
"expected": "baseline",
|
||||
"files": 37,
|
||||
"stdout": "PASS exact model/identity/30 reachable sources; 30 exact disk files (0 proven retained)"
|
||||
},
|
||||
{
|
||||
"step": "verification-representative-model-redo-saved",
|
||||
"case": "representative",
|
||||
"expected": "expected",
|
||||
"files": 37,
|
||||
"stdout": "PASS exact model/identity/30 reachable sources; 30 exact disk files (0 proven retained)"
|
||||
},
|
||||
{
|
||||
"step": "verification-representative-model-undo-saved",
|
||||
"case": "representative",
|
||||
"expected": "baseline",
|
||||
"files": 37,
|
||||
"stdout": "PASS exact model/identity/30 reachable sources; 30 exact disk files (0 proven retained)"
|
||||
},
|
||||
{
|
||||
"step": "verification-simple-confirmed-unsaved",
|
||||
"case": "simple",
|
||||
"expected": "baseline",
|
||||
"files": 4,
|
||||
"stdout": "PASS exact model/identity/4 reachable sources; 4 exact disk files (0 proven retained)"
|
||||
},
|
||||
{
|
||||
"step": "verification-simple-immediate-undo-saved",
|
||||
"case": "simple",
|
||||
"expected": "baseline",
|
||||
"files": 4,
|
||||
"stdout": "PASS exact model/identity/4 reachable sources; 4 exact disk files (0 proven retained)"
|
||||
},
|
||||
{
|
||||
"step": "verification-simple-post-edit-undo-saved",
|
||||
"case": "simple",
|
||||
"expected": "expected",
|
||||
"files": 4,
|
||||
"stdout": "PASS exact model/identity/4 reachable sources; 4 exact disk files (0 proven retained)"
|
||||
},
|
||||
{
|
||||
"step": "verification-simple-redo-saved",
|
||||
"case": "simple",
|
||||
"expected": "expected",
|
||||
"files": 4,
|
||||
"stdout": "PASS exact model/identity/4 reachable sources; 4 exact disk files (0 proven retained)"
|
||||
}
|
||||
],
|
||||
"metadataCount": 94,
|
||||
"includedJpeg": 94,
|
||||
"excludedImage": {
|
||||
"path": ".local\\source-rename-native-followup-20260912\\trial-attempt-7\\screenshots\\023-resume-declaration-preview-0.jpg",
|
||||
"bytes": 45383,
|
||||
"sha256": "c45c0fb6b1769a4a84d4f96bc6d6cd92c89c121ac96d4cce5829c97451899288",
|
||||
"reason": "Unrelated Codex window occludes the intended native application; image excluded, original metadata retained."
|
||||
},
|
||||
"closedUtc": "2026-09-12T22:20:26.337292+00:00",
|
||||
"pid": 9808,
|
||||
"exitCode": 0,
|
||||
"committedScope": "dfb6102ba5aec9e26a48cc5472b51a4b349459fd",
|
||||
"committedRawInputsVerified": 516,
|
||||
"currentWorktreeDifferencesFromHistoricalInputs": [
|
||||
{
|
||||
"path": "crates/oa-desktop/src/app/source_rename.rs",
|
||||
"archivedInputSha256": "62cc43c4adcfbf3c3a22d84b481ac1a710505074dfa6cc5660bc19cc0c4367d0",
|
||||
"currentWorktreeSha256": "f7ce321dc3156778bcca54e8732f1c1053e26e4fcf198d48df6440c8c68ae664"
|
||||
},
|
||||
{
|
||||
"path": "crates/oa-desktop/src/app/source_rename/preview_glyph_tests.rs",
|
||||
"archivedInputSha256": "f3d38ab7d4777400941d37b906d298bac77434f4e9e55db14ac3fb2fc1c9dbb7",
|
||||
"currentWorktreeSha256": "d45a799bd97047c6b77ff5b18334f2a71912b65d5239f2b8ce7017588ccff0f4"
|
||||
},
|
||||
{
|
||||
"path": "crates/oa-desktop/src/app/source_rename/tests.rs",
|
||||
"archivedInputSha256": "9522b47b68d94f732a361f962e9077622bee59918b3b7407204d84783120fc2d",
|
||||
"currentWorktreeSha256": "99b8bd38eaaac799d082dc427eb216ec5e2151efd45356c3daa643578af5340d"
|
||||
}
|
||||
],
|
||||
"failures": [],
|
||||
"scope": "Independent archive/receipt/raw committed source verification only; no GUI/Cargo/oracle/helper execution. Current worktree differences are expected later work, not historical archive failures."
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
# Independent historical native archive review
|
||||
|
||||
PASS, with no archive or receipt discrepancy found. The independent read-only evaluator performed 2,312 checks; details are in `independent-review.json` and evaluator source in `independent_verify.py`. It did not execute the archived builder, application, oracle, launch helper, verifier, or Cargo, and did not repeat the native interaction trial.
|
||||
|
||||
The ZIP is exactly 6,449,971 bytes, 355 unique safe members, SHA256 `abff68aeb2bd893577d4226c9ec4b6b0823b4ec22895a273ab2d22f344354207`. Every member CRC and payload-manifest hash/size passed; all 351 recorded originals matched their archived bytes. No executable, DLL, profile, temporary tree, or nested prior archive is included.
|
||||
|
||||
All eight oracle receipts retain successful raw logs, artifact bindings and exact physical file maps. Their baseline/expected states agree with the fixture manifest. Both final work trees match their expected snapshots: four simple files plus 37 representative files, totaling 41 physical files. The representative oracle proves 30 reachable sources; the additional physical map covers the supporting files. These are saved-disk checks, including baseline disk checks taken while the GUI had an unsaved rename; they do not independently inspect unsaved GUI memory.
|
||||
|
||||
The archive retains 94 original JPEGs and all 94 capture metadata records. Only the unrelated Codex-occluded screenshot023 pixels are omitted, as declared; its original 45,383-byte image independently hashes to `c45c0fb6b1769a4a84d4f96bc6d6cd92c89c121ac96d4cce5829c97451899288`. Its retained metadata intentionally references the excluded image. The interruption between capture022 at 14:26:54.662 UTC and capture023 at 21:54:27.800 UTC is recorded; it is not a responsiveness measurement.
|
||||
|
||||
PID9808's retained child receipt establishes exit0 at **2026-09-12 22:20:26.337292 UTC**, not the later helper print time. Both raw process logs are empty. Preserved native binary/runtime bytes match their receipts; the GUI SHA256 is `2486eecc00d8de9160ecd930f69394e00b1a1ce102d76fb776b978db33414ed3`.
|
||||
|
||||
The external attempt7 evidence bindings and input ZIP passed. Independent raw Git blob comparison confirmed all 516 captured paths and 9,695,728 bytes against commit `dfb6102ba5aec9e26a48cc5472b51a4b349459fd`, including exact scope membership. This is the historical source/binary pin. The JSON's three working-file differences were observed before the parent's final rustfmt; their working hashes are only that observation, not current-source bindings. The later untracked `preview_scroll_tests.rs` is outside the historical 516-path inventory. Neither those changes nor the newer scroll correction are accepted by this archive.
|
||||
|
||||
The report preserves the observed system-menu input issue, native clipboard evidence limits, and retained preview-scroll UX limitation. Its bounded native claims are consistent with the retained receipts and previously reviewed input evidence. This review establishes archive integrity and source/receipt consistency, not a new full-app, corrected-layout, performance, package, or release acceptance. A forthcoming corrected package needs its own identified binary, captured inputs, gates and applicable native evidence.
|
||||
+157
@@ -0,0 +1,157 @@
|
||||
"""Independent archive byte/receipt review; no archived code or binaries run."""
|
||||
from pathlib import Path, PurePosixPath, PureWindowsPath
|
||||
import hashlib
|
||||
import io
|
||||
import json
|
||||
import subprocess
|
||||
import zipfile
|
||||
|
||||
root = Path(__file__).resolve().parents[2]
|
||||
folder = Path(__file__).resolve().parent
|
||||
sha = lambda data: hashlib.sha256(data).hexdigest()
|
||||
failures = []
|
||||
checks = 0
|
||||
def check(condition, message):
|
||||
global checks
|
||||
checks += 1
|
||||
if not condition:
|
||||
failures.append(message)
|
||||
def safe(path):
|
||||
return not PurePosixPath(path).is_absolute() and not PureWindowsPath(path).drive and '..' not in PurePosixPath(path).parts and '\\' not in path
|
||||
def git(*args, data=None):
|
||||
return subprocess.check_output(['git', *args], cwd=root, input=data)
|
||||
|
||||
receipt = json.loads((folder / 'archive-result.json').read_bytes())
|
||||
raw = (folder / receipt['archive']).read_bytes()
|
||||
check(sha(raw) == receipt['sha256'] == 'abff68aeb2bd893577d4226c9ec4b6b0823b4ec22895a273ab2d22f344354207', 'archive SHA')
|
||||
check(len(raw) == receipt['bytes'] == 6449971, 'archive bytes')
|
||||
zipfile_data = zipfile.ZipFile(io.BytesIO(raw))
|
||||
names = zipfile_data.namelist()
|
||||
prefix = 'source-rename-native-closure/'
|
||||
check(len(names) == len(set(names)) == receipt['members'] == 355, 'member count/duplicates')
|
||||
check(zipfile_data.testzip() is None, 'archive CRC')
|
||||
check(all(safe(n) and n.startswith(prefix) for n in names), 'member path safety')
|
||||
check(all(PurePosixPath(n).suffix.lower() not in {'.exe', '.dll', '.pyc', '.zip', '.7z', '.gz'} for n in names), 'excluded binary/archive payload')
|
||||
check(all(not ({'bin', 'profile', 'tmp', '__pycache__', '.git', 'target'} & set(PurePosixPath(n).parts)) for n in names), 'excluded directory payload')
|
||||
payload = {n.removeprefix(prefix): zipfile_data.read(n) for n in names}
|
||||
manifest = json.loads(payload['PAYLOAD-MANIFEST.json'])
|
||||
check(manifest['selfExcluded'] == 'PAYLOAD-MANIFEST.json', 'manifest self exclusion')
|
||||
entries = manifest['members']
|
||||
check(len(entries) == len({e['path'] for e in entries}) == len(payload) - 1, 'manifest duplicate/count')
|
||||
check({e['path'] for e in entries} == set(payload) - {'PAYLOAD-MANIFEST.json'}, 'manifest full membership')
|
||||
for entry in entries:
|
||||
data = payload[entry['path']]
|
||||
check(sha(data) == entry['sha256'] and len(data) == entry['bytes'], 'member bytes: ' + entry['path'])
|
||||
originals = json.loads(payload['ORIGINAL-SOURCES.json'])
|
||||
check(len(originals) == receipt['originalReadbacks'] == 351, 'original count')
|
||||
for path, entry in originals.items():
|
||||
original = (root / path).read_bytes()
|
||||
check(original == payload[entry['member']], 'original differs: ' + path)
|
||||
check(sha(original) == entry['sha256'] and len(original) == entry['bytes'], 'original manifest: ' + path)
|
||||
|
||||
fixture = json.loads(payload['preparation-and-reviews/fixture-manifest.json'])
|
||||
check(sha(payload['preparation-and-reviews/fixture-manifest.json']) == 'a25651305b23da985eb6d8c637a687a0c4261b5a8c0d8ef84dda95a51fbed931', 'fixture manifest pin')
|
||||
trees = []
|
||||
for case in ['simple', 'representative']:
|
||||
for variant in ['baseline', 'expected', 'work']:
|
||||
path = 'fixtures/' + case + '/' + variant + '/'
|
||||
actual = {n.removeprefix(path): {'sha256': sha(data), 'bytes': len(data)} for n, data in payload.items() if n.startswith(path)}
|
||||
expected = fixture['cases'][case]['original_files' if variant == 'baseline' else 'expected_files']
|
||||
check(actual == expected, 'complete physical fixture: ' + path)
|
||||
source_folder = root / '.local/source-rename-native-followup-20260912' / case / variant
|
||||
physical = {p.relative_to(source_folder).as_posix(): {'sha256': sha(p.read_bytes()), 'bytes': p.stat().st_size} for p in source_folder.rglob('*') if p.is_file()}
|
||||
check(physical == actual, 'physical tree membership: ' + path)
|
||||
trees.append({'case': case, 'variant': variant, 'files': len(actual)})
|
||||
check(sum(t['files'] for t in trees if t['variant'] == 'work') == receipt['finalPhysicalFiles'] == 41, 'final physical file count')
|
||||
|
||||
launch = json.loads(payload['trial/launch.json'])
|
||||
closed = json.loads(payload['trial/closed.json'])
|
||||
check(launch['pid'] == closed['pid'] == 9808 and closed['exitCode'] == 0, 'process identity/exit')
|
||||
check(closed['finished'] == '2026-09-12T22:20:26.337292+00:00', 'actual closure timestamp')
|
||||
check(closed['binaryUnchanged'] and closed['runtimeUnchanged'], 'closure artifact unchanged receipt')
|
||||
for stream in ['stdout', 'stderr']:
|
||||
check(payload['trial/' + stream + '.log'] == b'' and closed[stream + 'Sha256'] == sha(b''), 'empty closed log: ' + stream)
|
||||
check(launch['binarySha256'] == '2486eecc00d8de9160ecd930f69394e00b1a1ce102d76fb776b978db33414ed3', 'native GUI pin')
|
||||
check(sha(Path(launch['executable']).read_bytes()) == launch['binarySha256'], 'preserved native binary')
|
||||
runtime = Path(launch['executable']).parent / 'libunwind.dll'
|
||||
check(sha(runtime.read_bytes()) == launch['dllSha256'] == fixture['dll_sha256'], 'preserved native runtime')
|
||||
verification_names = sorted(n for n in payload if n.startswith('trial/verification-') and n.endswith('/result.json'))
|
||||
check(len(verification_names) == 8, 'eight oracle receipts')
|
||||
verification_results = []
|
||||
for name in verification_names:
|
||||
result = json.loads(payload[name])
|
||||
case = 'representative' if '/verification-representative-' in name else 'simple'
|
||||
expected_key = 'original_files' if result['expectedVariant'] == 'baseline' else 'expected_files'
|
||||
check(result['expectedVariant'] in {'baseline', 'expected'}, name + ': expected variant')
|
||||
check(result['passed'] and result['exitCode'] == 0 and result['failure'] is None and result['physicalBytesMatch'] and result['actualUnchangedByOracle'], name + ': successful receipt')
|
||||
check(result['actualFiles'] == fixture['cases'][case][expected_key], name + ': physical map')
|
||||
check(result['binarySha256'] == launch['binarySha256'] and result['oracleSha256'] == fixture['oracle_sha256'] and result['dllSha256'] == fixture['dll_sha256'], name + ': artifact bindings')
|
||||
for stream in ['stdout', 'stderr']:
|
||||
check(sha(payload[name.replace('result.json', stream + '.log')]) == result[stream + 'Sha256'], name + ': ' + stream)
|
||||
oracle_log = payload[name.replace('result.json', 'stdout.log')].decode()
|
||||
check(('PASS exact model/identity/' + ('30' if case == 'representative' else '4') + ' reachable sources') in oracle_log, name + ': oracle scope output')
|
||||
check('Saved disk state only' in result['scope'], name + ': unsaved scope boundary')
|
||||
verification_results.append({'step': name.split('/')[1], 'case': case, 'expected': result['expectedVariant'], 'files': len(result['actualFiles']), 'stdout': oracle_log.strip()})
|
||||
|
||||
excluded = json.loads(payload['EXCLUSIONS.json'])
|
||||
check(len(excluded) == 1 and excluded[0] == receipt['excludedImage'], 'excluded image record')
|
||||
excluded_name = PureWindowsPath(excluded[0]['path']).name
|
||||
check(excluded_name == '023-resume-declaration-preview-0.jpg' and 'trial/screenshots/' + excluded_name not in payload, '023 pixels excluded')
|
||||
excluded_original = (root / excluded[0]['path']).read_bytes()
|
||||
check(sha(excluded_original) == excluded[0]['sha256'] == 'c45c0fb6b1769a4a84d4f96bc6d6cd92c89c121ac96d4cce5829c97451899288' and len(excluded_original) == excluded[0]['bytes'], 'excluded original hash/bytes')
|
||||
metadata_names = sorted(n for n in payload if n.startswith('trial/screenshots/') and n.endswith('.json'))
|
||||
jpeg_names = {n for n in payload if n.startswith('trial/screenshots/') and n.endswith('.jpg')}
|
||||
check(len(metadata_names) == receipt['metadata'] == 94 and len(jpeg_names) == receipt['includedJpeg'] == 94, 'capture counts')
|
||||
check({int(PurePosixPath(n).name[:3]) for n in metadata_names} == set(range(1, 95)), 'complete metadata sequence')
|
||||
referenced = set()
|
||||
capture_times = {}
|
||||
for name in metadata_names:
|
||||
meta = json.loads(payload[name])
|
||||
capture_times[int(PurePosixPath(name).name[:3])] = meta['atUtc']
|
||||
for screenshot in meta['screenshots']:
|
||||
path = 'trial/screenshots/' + screenshot['file']
|
||||
if screenshot['file'] == excluded_name:
|
||||
continue
|
||||
check(path in jpeg_names, name + ': missing screenshot')
|
||||
referenced.add(path)
|
||||
check(referenced == jpeg_names, 'no orphan screenshots')
|
||||
check(capture_times[22] == '2026-09-12T14:26:54.662Z' and capture_times[23] == '2026-09-12T21:54:27.800Z', 'recorded interruption interval')
|
||||
|
||||
binding = json.loads(payload['commit-binding/commit-binding.json'])
|
||||
check(binding['commit'] == 'dfb6102ba5aec9e26a48cc5472b51a4b349459fd' and binding['fileCount'] == 516, 'historical committed scope')
|
||||
check(sha(payload['commit-binding/verify_commit.py']) == binding['verifierSha256'], 'commit verifier binding')
|
||||
gate = root / '.local/source-rename-integration-20260912/attempt-7'
|
||||
for name, info in binding['evidenceBindings'].items():
|
||||
data = (gate / name).read_bytes()
|
||||
check(sha(data) == info['sha256'] and len(data) == info['bytes'], 'external gate binding: ' + name)
|
||||
gate_manifest = json.loads((gate / 'inputs.json').read_bytes())
|
||||
gate_zip = zipfile.ZipFile(gate / 'inputs.zip')
|
||||
gate_files = {entry['path']: entry for entry in gate_manifest['files']}
|
||||
check(gate_zip.testzip() is None and len(gate_zip.namelist()) == len(gate_files) == 516 and set(gate_zip.namelist()) == set(gate_files), 'external raw input membership/CRC')
|
||||
scope_paths = git('ls-tree', '-r', '--name-only', '-z', binding['commit'], '--', *binding['capturedScopes']).decode().split('\0')[:-1]
|
||||
check(set(scope_paths) == set(gate_files), 'exact committed 516-path scope')
|
||||
ordered = sorted(gate_files)
|
||||
blob_stream = git('cat-file', '--batch', data=''.join(binding['commit'] + ':' + p + '\n' for p in ordered).encode())
|
||||
cursor = 0
|
||||
current_deltas = []
|
||||
for path in ordered:
|
||||
end = blob_stream.index(b'\n', cursor)
|
||||
header = blob_stream[cursor:end].split()
|
||||
check(len(header) == 3 and header[1] == b'blob', 'committed blob header: ' + path)
|
||||
size = int(header[2])
|
||||
committed = blob_stream[end + 1:end + 1 + size]
|
||||
cursor = end + size + 2
|
||||
captured = gate_zip.read(path)
|
||||
check(committed == captured and sha(captured) == gate_files[path]['sha256'] and len(captured) == gate_files[path]['bytes'], 'committed raw input: ' + path)
|
||||
working = root / path
|
||||
if not working.exists() or working.read_bytes() != captured:
|
||||
current_deltas.append({'path': path, 'archivedInputSha256': sha(captured), 'currentWorktreeSha256': sha(working.read_bytes()) if working.exists() else None})
|
||||
check(cursor == len(blob_stream), 'complete Git byte stream')
|
||||
check(sum(e['bytes'] for e in gate_files.values()) == binding['inputBytes'], 'input byte total')
|
||||
summary = json.loads(payload['SUMMARY.json'])
|
||||
check(summary['externalInputsSha256'] == binding['archiveSha256'] == sha((gate / 'inputs.zip').read_bytes()), 'archive external input pin')
|
||||
check(summary['closedUtc'] == closed['finished'] and summary['commit'] == binding['commit'] and summary['binarySha256'] == launch['binarySha256'], 'summary closure/source binding')
|
||||
|
||||
result = {'status': 'PASS' if not failures else 'FAIL', 'checks': checks, 'archiveSha256': sha(raw), 'archiveBytes': len(raw), 'members': len(names), 'originalReadbacks': len(originals), 'physicalTrees': trees, 'finalPhysicalFiles': 41, 'oracleReceipts': verification_results, 'metadataCount': len(metadata_names), 'includedJpeg': len(jpeg_names), 'excludedImage': excluded[0], 'closedUtc': closed['finished'], 'pid': closed['pid'], 'exitCode': closed['exitCode'], 'committedScope': binding['commit'], 'committedRawInputsVerified': len(gate_files), 'currentWorktreeDifferencesFromHistoricalInputs': current_deltas, 'failures': failures, 'scope': 'Independent archive/receipt/raw committed source verification only; no GUI/Cargo/oracle/helper execution. Current worktree differences are expected later work, not historical archive failures.'}
|
||||
(folder / 'independent-review.json').write_text(json.dumps(result, indent=2), encoding='utf-8')
|
||||
print(json.dumps(result, indent=2))
|
||||
@@ -0,0 +1,23 @@
|
||||
# Closed native alias-rename trial
|
||||
|
||||
Source commit dfb6102ba5aec9e26a48cc5472b51a4b349459fd; GUI SHA2562486eecc00d8de9160ecd930f69394e00b1a1ce102d76fb776b978db33414ed3. PID9808 launched2026-09-12T14:17:52.139050UTC and closed with actual retained-child exit0 at22:20:26.337292UTC. Both raw logs are empty; closure records unchanged binary/runtime. This is bounded native evidence, not a release or full-app acceptance.
|
||||
|
||||
Capture022 at14:26:54.662UTC precedes a user interruption; capture023 resumes at21:54:27.800UTC. The process lifetime and gaps between captures are not responsiveness or performance measurements. Screenshot023's image is excluded because of unrelated Codex occlusion. EXCLUSIONS.json preserves its exact hash/size/reason; original023 metadata is retained and intentionally points to the excluded image. All other original001–094 captures and metadata are preserved unchanged.
|
||||
|
||||
## Simple four-file case
|
||||
|
||||
Minimum1100x700 client preview exposes the formerly clipped declaration brace (020–022). Confirm restores/selects the original reference; the confirmed-unsaved disk check remains baseline. Immediate Undo rename followed by Save matches baseline; model Redo/Save matches preauthored expected. Clipboard captures038–044 show explicit rejection and retirement of the old preview, with continued valid entry. The independent clipboard report correctly limits exact clipboard/selection claims. Captures046–049 show a fresh Confirm selecting assess_damage, first direct edit replacing selection with x and creating a draft, CtrlZ restoring renamed text, then Save. The post-edit-undo saved oracle matches expected. Reopen092–094 shows assess_damage while prose/comment @assess remains unchanged. These visual observations do not independently inspect unsaved model memory.
|
||||
|
||||
## Representative case
|
||||
|
||||
The fixture has30 reachable source files and37 physical files. Captures064–075 expose all six changed lines: declaration1, parent references8/13/18/23, and traceability line1051; engineering names remain unchanged. Before/After values and terminal punctuation are readable in064/066/068/071/072/075. Page changes can retain the previous vertical scroll, so reaching a changed row sometimes requires scrolling back. All admitted pages remain accessible, but this is a retained UX limitation.
|
||||
|
||||
Capture076 restores/selects the exact original traceability occurrence after Confirm.077 shows its replacement by x as the first direct edit;078 shows text Undo restoring oa_restore_pressure. The confirmed-unsaved saved-disk oracle remains baseline. Save, model Undo/Save and model Redo/Save match expected, baseline and expected respectively (079–086). Reopen088–089 visibly retains the engineering name and new stable alias; UUID is not visible in those captures and is established by full identity/model oracles, not pixels.
|
||||
|
||||
## Exact checks and remaining scope
|
||||
|
||||
Eight preserved verification directories contain four simple and four representative receipts, all PASS. Each binds oracle967d9ba3c6fb3a7efb410833903ec94556ca2d48a67d5072c8bb160f40a00f9c and DLLf45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4, original stdout/stderr and exact physical file maps. The oracle logs establish Project/identity/reachable-source equality (4 or30 reachable files); the verifier additionally compares every physical file (4 or37), including support files. The two final work trees therefore contain41 physical files matching their preauthored expected snapshots. Baseline/expected/final work trees are all preserved. Saved-disk checks must not be relabeled independent inspection of unsaved GUI memory.
|
||||
|
||||
Known recoverable finding: native system-menu sizing invalidated an apparent valid alias field; exact input bytes/event cause are unknown. system-menu-finding.md retains observation and unproven hypothesis separately. No approval bypass or accidental source/model commit was observed. Clipboard selection-range preservation is covered by separate executed tests, not proven by this native caret-only rejection sequence. Text workspace clutter and retained scroll on preview page/file changes remain usability work.
|
||||
|
||||
commit-binding/ contains the original attempt7 source/commit/gate binding and verifier source. Gate/source archives and GUI are external, not duplicated. The archived verifier is evidence, not permission to rerun or portable instructions from relocated paths. preparation-and-reviews/ preserves historical preparation and input reviews verbatim; their then-running language is qualified by the later closure receipt. No builder, oracle, Cargo, GUI action or production code was executed during archiving. Raw files, manifest hashes, CRCs and unchanged original readbacks are verified by the exclusive archive builder. Parent owns integration/publication and final scoped acceptance.
|
||||
BIN
Binary file not shown.
@@ -348,3 +348,46 @@ and original bindings. ZIP SHA-256:
|
||||
This is a source-verification checkpoint, not a released or fully native-accepted
|
||||
milestone. The corrected native trial is separate and must retain its actual
|
||||
workflow coverage and limitations.
|
||||
|
||||
## Closed native trial on dfb6102
|
||||
|
||||
The corrected trial used the identified GUI above and source commit
|
||||
`dfb6102ba5aec9e26a48cc5472b51a4b349459fd`. Its original 516 build inputs were
|
||||
verified against the raw committed blobs. The native process closed normally
|
||||
with exit code 0 at **22:20:26.337292 UTC**; stdout and stderr were empty, and
|
||||
the executable and runtime DLL remained unchanged. The long interruption between
|
||||
the afternoon and evening captures is not a responsiveness measurement.
|
||||
|
||||
Both the four-file Unicode fixture and the representative 30-source fixture
|
||||
passed explicit rename, restoration of the selected original reference, the
|
||||
first subsequent text edit, Text Undo, Save, whole-model Undo/Redo and native
|
||||
reopen. Eight saved-state checks passed complete model, identity and reachable
|
||||
source equality plus every physical file: four in the small fixture and 37 in
|
||||
the representative fixture, including support files. Confirm alone left the
|
||||
saved baseline unchanged. These oracles inspect saved disk state; they do not
|
||||
independently inspect unsaved GUI memory.
|
||||
|
||||
At the minimum 1100-by-700 client size, the previously clipped declaration brace
|
||||
and all six changed lines in the larger fixture were readable. Native multiline
|
||||
paste after a valid preview explicitly rejected the whole paste, retained the
|
||||
alias, removed the preview and disabled confirmation. Re-entering a valid alias
|
||||
required fresh Preview. This caret-only trial does not prove selection-range
|
||||
preservation during rejection; the separately executed mounted tests cover it.
|
||||
|
||||
Two recoverable usability findings remain separate from transaction correctness:
|
||||
preview page/file changes retain the previous vertical scroll position, and an
|
||||
OS system-menu sizing sequence invalidated an apparently valid alias field.
|
||||
The latter's exact input bytes and event cause remain unproven. No accidental
|
||||
confirmation or model/source corruption was observed. A subsequent scroll
|
||||
correction requires its own source-bound tests and native evidence; this trial
|
||||
does not verify later code.
|
||||
|
||||
The [closed native archive](experiments/source-alias-rename-native-closure-20260912/source-rename-native-closure-20260912.zip)
|
||||
and [independent review](experiments/source-alias-rename-native-closure-20260912/independent-review.md)
|
||||
preserve and verify all 355 members, 351 original readbacks, eight oracle receipts,
|
||||
the final 41 physical files and 516 raw committed build inputs. ZIP SHA-256:
|
||||
`abff68aeb2bd893577d4226c9ec4b6b0823b4ec22895a273ab2d22f344354207`;
|
||||
size 6,449,971 bytes. Screenshot 023's unrelated occluding window image is
|
||||
excluded; its hash and exclusion reason are retained. This remains a prerelease
|
||||
preparation checkpoint, not full OA/SA acceptance. Linux verification remains
|
||||
paused by the user.
|
||||
|
||||
Reference in New Issue
Block a user