diff --git a/docs/plans/original-completion-2026-10-02/execution/drive-offload-p23-impact-r11-20261016/CLOUD_ALL_BYTES_VERIFIED.json b/docs/plans/original-completion-2026-10-02/execution/drive-offload-p23-impact-r11-20261016/CLOUD_ALL_BYTES_VERIFIED.json new file mode 100644 index 0000000..84b7866 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/execution/drive-offload-p23-impact-r11-20261016/CLOUD_ALL_BYTES_VERIFIED.json @@ -0,0 +1,30 @@ +[ + { + "name": "raw.tar.gz", + "bytes": 12544116, + "sha256": "a4c357ca3ad013698e7d02a468a0e63df5bed09eab89e02db70878103cb3b833", + "drive_url": "https://drive.google.com/file/d/1p6dH56r0KKmMJ8ZdkmcUUJTXxNiORFTf/view?usp=drivesdk", + "whole_raw_readback_verified": true + }, + { + "name": "MANIFEST.json.gz", + "bytes": 147106, + "sha256": "5707dbf0e701444dacd0f6435923aa231ca18fe6fe1d3b32fb5b5ad0398f46cf", + "drive_url": "https://drive.google.com/file/d/1pKUdud66nQ0mKTnYoQU3EXpP3uDBSGj4/view?usp=drivesdk", + "whole_raw_readback_verified": true + }, + { + "name": "restore.py", + "bytes": 1857, + "sha256": "7c4bb9ec983762b91b9b02b36f0caab5627c8b1ed8fc1d2bcdfbd090f95cdb98", + "drive_url": "https://drive.google.com/file/d/1yNBFrvlSQSvwFrZJnoy0qu8w2xjhJFOO/view?usp=drivesdk", + "whole_raw_readback_verified": true + }, + { + "name": "RESTORE.md", + "bytes": 1284, + "sha256": "e1974c4cbd083094e849c074982ad1381d7e658c2c560cd7b325210220b159ae", + "drive_url": "https://drive.google.com/file/d/1AgFqZSWs1BEhu-XZFUYkp0G6m2gnYF1P/view?usp=drivesdk", + "whole_raw_readback_verified": true + } +] diff --git a/docs/plans/original-completion-2026-10-02/execution/drive-offload-p23-impact-r11-20261016/MANIFEST.json.gz b/docs/plans/original-completion-2026-10-02/execution/drive-offload-p23-impact-r11-20261016/MANIFEST.json.gz new file mode 100644 index 0000000..617de79 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/execution/drive-offload-p23-impact-r11-20261016/MANIFEST.json.gz differ diff --git a/docs/plans/original-completion-2026-10-02/execution/drive-offload-p23-impact-r11-20261016/PREPARATION.json b/docs/plans/original-completion-2026-10-02/execution/drive-offload-p23-impact-r11-20261016/PREPARATION.json new file mode 100644 index 0000000..f1903cd --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/execution/drive-offload-p23-impact-r11-20261016/PREPARATION.json @@ -0,0 +1,13 @@ +{ + "scope": "Ended historical P23 native impact 19fc3f5 local remainder. Preserve all raw/image/save/lifecycle bytes. Its stage was previously verified in cloud r03; existing pointer preserved, not duplicated. Restore both layers before any complete raw review. No new acceptance credit.", + "source": "/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-03-native-impact-19fc3f5-r01", + "archive": { + "path": "/private/tmp/thetree-p23-impact-cold-r11.tar.gz", + "bytes": 12544116, + "sha256": "a4c357ca3ad013698e7d02a468a0e63df5bed09eab89e02db70878103cb3b833" + }, + "local_roundtrip_verified": true, + "ended_result_sha256": "70ef0d2dca0f2ade5291d88f53bdd42123d090ce0c4bfb3cb91b478c1bf33d0d", + "free_before_archive": 1475330048, + "retirement_pending_cloud_readback": true +} diff --git a/docs/plans/original-completion-2026-10-02/execution/drive-offload-p23-impact-r11-20261016/RESTORE.md b/docs/plans/original-completion-2026-10-02/execution/drive-offload-p23-impact-r11-20261016/RESTORE.md new file mode 100644 index 0000000..515dd12 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/execution/drive-offload-p23-impact-r11-20261016/RESTORE.md @@ -0,0 +1,13 @@ +# P23 impact 19fc3f5 old raw restore + +This archive preserves the complete remaining local files of the ended historical `p23-03-native-impact-19fc3f5-r01` run, including all original layout states, images, save evidence and lifecycle records. It does not grant new game/device acceptance. + +The stage was already archived by r03. Its original CLOUD_STAGE_ARCHIVE_R03.json pointer is included unchanged; restore that separate r03 layer as well before a full source/stage audit. This r11 does not duplicate that prior cloud stage. + +Download the r11 whole gzip archive, MANIFEST.json.gz and restore.py recorded in CLOUD_ALL_BYTES_VERIFIED.json. On a volume with space for the restored 229,945,347 bytes, run: + +`python3 restore.py MANIFEST.json.gz evidence.tar.gz /absolute/fresh/restored-impact-r11` + +The archive is 12,544,116 bytes, SHA-256 `a4c357ca3ad013698e7d02a468a0e63df5bed09eab89e02db70878103cb3b833`. The script rejects an existing destination and verifies the archive plus every file before restoring mode and mtime_ns. + +Local retirement is allowed only after cloud raw readback matches every uploaded byte and the complete original tree is rehashed and verified closed. The final physical free-space measurement is in RETIREMENT.json; logical totals are not physical recovery. diff --git a/docs/plans/original-completion-2026-10-02/execution/drive-offload-p23-impact-r11-20261016/RETIREMENT.json b/docs/plans/original-completion-2026-10-02/execution/drive-offload-p23-impact-r11-20261016/RETIREMENT.json new file mode 100644 index 0000000..a28cbd3 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/execution/drive-offload-p23-impact-r11-20261016/RETIREMENT.json @@ -0,0 +1,16 @@ +{ + "retired_root": "/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-03-native-impact-19fc3f5-r01", + "files": 2694, + "logical_bytes": 229945347, + "free_before_retirement": 3267485696, + "free_after_retirement": 3280805888, + "delta_including_temporary_archive_removal": 13320192, + "temporary_archive_bytes_removed": 12544116, + "delta_excluding_temporary_archive": 776076, + "free_before_preparation": 1475330048, + "net_free_change_since_preparation": 1805475840, + "archive_and_metadata_cloud_raw_readback_verified": true, + "all_original_stage_pointer_bytes_preserved_in_archive": true, + "current_P04_source_raw_and_cache_untouched": true, + "formal_credit": 0 +} diff --git a/docs/plans/original-completion-2026-10-02/execution/drive-offload-p23-impact-r11-20261016/SOURCE_RECHECK.json b/docs/plans/original-completion-2026-10-02/execution/drive-offload-p23-impact-r11-20261016/SOURCE_RECHECK.json new file mode 100644 index 0000000..eb24a39 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/execution/drive-offload-p23-impact-r11-20261016/SOURCE_RECHECK.json @@ -0,0 +1,6 @@ +{ + "files": 2694, + "bytes_mode_mtime_sha_all_exact": true, + "no_open_files": true, + "all_cloud_archive_and_restore_bytes_verified": true +} diff --git a/docs/plans/original-completion-2026-10-02/execution/drive-offload-p23-impact-r11-20261016/prepare.py b/docs/plans/original-completion-2026-10-02/execution/drive-offload-p23-impact-r11-20261016/prepare.py new file mode 100644 index 0000000..66c13be --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/execution/drive-offload-p23-impact-r11-20261016/prepare.py @@ -0,0 +1,25 @@ +from pathlib import Path +import hashlib,json,os,shutil,tarfile,time +R=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部');S=R/'artifacts/original-completion-2026-10-02/p23-03-native-impact-19fc3f5-r01';E=R/'docs/plans/original-completion-2026-10-02/execution/drive-offload-p23-impact-r11-20261016';E.mkdir(exist_ok=False);T=Path('/private/tmp/thetree-p23-impact-cold-r11.tar.gz');assert not T.exists();sha=lambda p:hashlib.file_digest(p.open('rb'),'sha256').hexdigest();result=json.loads((S/'runner-ended.json').read_text());assert result['error']is None and not result['cleanup_errors']and all(z['engine_ended']for z in result['cleanup']);rows=[];dirs=[] +for p in [S]+sorted(S.rglob('*')): + assert not p.is_symlink();st=p.stat();n='.'if p==S else str(p.relative_to(S));meta={'path':n,'mode':st.st_mode&0o777,'mtime_ns':st.st_mtime_ns} + if p.is_dir():dirs.append(meta) + elif p.is_file():rows.append(dict(meta,bytes=st.st_size,sha256=sha(p))) + else:raise RuntimeError('special file') +free=shutil.disk_usage(S).free;budget=free-400*1024**2;assert budget>350*1024**2 +class Guard: + def __init__(self,f):self.f=f + def write(self,b): + assert self.f.tell()+len(b)