Buckets:
| """Publish the eight-game batch, cumulative inventory, and independent asset-validation evidence.""" | |
| import os,json,collections | |
| from pathlib import Path | |
| from huggingface_hub import HfApi | |
| H=Path('/home/user/game-archive');R=H/'reports';B='smodusermc/offline-games';api=HfApi(token=os.environ['HF_TOKEN']);ids=[182,183,359,373,374,376,575,582] | |
| reviews={182:('Level scenes observed; advanced probe errors','Entered the first level through the declared play/ entry. Middle/end map data loaded via existing engine state API and rendered; direct-transition probes also emitted null/add errors. Not normal progression or a full playthrough. The outer landing page has three source-missing navigation/button assets.'),183:('Level scenes observed; advanced probe errors','Entered the first level. Middle/end map data loaded via existing engine state API and rendered; direct-transition probes also emitted null/add errors. Not normal progression or a full playthrough.'),359:('Input smoke passed','Started n-gon; simulation cycles advanced and D moved the player from x=460 to about 868 with external browser requests blocked.'),373:('Audio restored; runtime memory-limited','All 94 declared audio files decode independently. The full restored game hit the test host memory guard; no post-repair gameplay pass claimed. Online tips/telemetry requests remain external.'),374:('Intro scene observed; controls unverified','The introductory scene renders, with no missing local requests or page errors. Controls were exercised, but movement/progression was not established. The export declares no audio files.'),376:('Input smoke passed','The source site’s JS Pacman implementation started, and arrow-key movement increased the score from 00 to 190 in the assertion. Not an original arcade-ROM archive or full playthrough.'),575:('Gameplay scene observed','Reached the playable level hub; right/jump keys exercised. No page errors. Source-missing global wrapper and branding configuration requests remain; no all-acts playthrough claimed.'),582:('Mode menu observed','Reached the 1-player/2-player mode menu with no missing local requests or page errors. Mode-selection/control attempts did not establish a match start; no match-play pass claimed.')} | |
| for i,(outcome,note) in reviews.items(): | |
| p=R/f'verification-{i:04d}.json';j=json.loads(p.read_text());j.update(reviewed_outcome=outcome,review_note=note,full_playthrough_verified=False,asset_validation_report='_verification/next-batch-payload-validation.json');p.write_text(json.dumps(j,indent=2)) | |
| for i in [180,181]: | |
| p=R/f'verification-{i:04d}.json';j=json.loads(p.read_text());j['later_asset_repair_note']='All declared temple maps and audio-name families audited; payload SHA, JSON, audio and image checks passed. Existing runtime result is historical; no new full playthrough.';j['asset_validation_report']='_verification/next-batch-payload-validation.json';p.write_text(json.dumps(j,indent=2)) | |
| m=json.loads((R/'game-182.json').read_text());m['runtime_entry']='https://garbsoftball.com/games/watergirl-3/play/index.html';m['entry_note']='The catalog landing page has missing original navigation/button assets; its declared local play/ target is the actual game.';(R/'game-182.json').write_text(json.dumps(m,indent=2)) | |
| # Old OvO screenshots predate audio restoration; do not pass them off as current proof. | |
| for p in (R/'evidence').glob('0373-*.jpg'):p.unlink() | |
| validation=json.loads((R/'next-batch-payload-validation.json').read_text());audits=json.loads((R/'next-batch-declared-assets.json').read_text());upstream=json.loads((R/'next-batch-upstream-restorations.json').read_text());vmap={x['id']:x for x in validation} | |
| assert all(not x['sha256_mismatches'] and not x['size_mismatches'] and not x['json_errors'] and not x['media_decode_failures'] and not x['missing_declared_paths'] for x in validation) | |
| levelcounts={x['game_id']:sum('temple-level-manifest' in f['reasons'] for f in x['explicit_expected_paths']) for x in audits if x['game_id'] in [180,181,182,183]} | |
| results=[json.loads(p.read_text()) for p in sorted(R.glob('verification-*.json')) if p.stem!='verification-summary'];by={x['id']:x for x in results} | |
| api.download_bucket_files(B,[('_reports/inventory.json',R/'inventory.json')],raise_on_missing_files=True);inventory=json.loads((R/'inventory.json').read_text()) | |
| for row in inventory: | |
| i=row['id'] | |
| if i in by:row['verification_outcome']=by[i].get('reviewed_outcome',by[i].get('status'));row['verification_report']=f'_verification/games/{i:04d}.json' | |
| if i in vmap: | |
| m=json.loads((R/f'game-{i}.json').read_text());row['captured_files']=len(m['files']);row['captured_bytes']=sum(x['bytes'] for x in m['files']);row['asset_validation_report']='_verification/next-batch-payload-validation.json';row['asset_validation_scope']='Recorded SHA-256, explicit declared inventories, JSON and media decoding; not universal completeness or full gameplay.' | |
| (R/'inventory.json').write_text(json.dumps(inventory,indent=2));pending=sum(x['status']=='pending_not_captured' for x in inventory);info=api.bucket_info(B) | |
| summary={'entries_with_verification_reports':len(results),'latest_batch_ids':ids,'earlier_entries_with_asset_repairs':[180,181],'pending_catalog_candidates':pending,'deferred_large_entry_pages':2,'outcomes':dict(collections.Counter(x.get('reviewed_outcome',x.get('status')) for x in results)),'bucket_bytes_before_report_upload':info.size,'full_playthroughs_verified':0,'payload_audit':{'per_game_recorded_sha256_comparisons':sum(x['recorded_sha256_comparisons'] for x in validation),'audio_decode_checks':sum(x['audio_files'] for x in validation),'image_decode_checks':sum(x['image_files'] for x in validation),'declared_path_checks':sum(x['declared_paths'] for x in validation),'temple_maps_by_game':levelcounts,'upstream_replacements':len([x for x in upstream if 'sha256' in x]),'failures':0,'scope':'Ten entries: eight new captures and two earlier Fireboy/Watergirl repairs. Counts are per-entry checks; shared files can occur in multiple manifests.'}} | |
| (R/'verification-summary.json').write_text(json.dumps(summary,indent=2));q=summary['payload_audit'] | |
| text=f'''# New-game batch and declared-asset audit | |
| [Public bucket](https://huggingface.co/buckets/{B}) | |
| ## Added eight source-site games | |
| | Game | Verified scope / remaining caveat | | |
| |---|---| | |
| ''' | |
| for i in ids:text+=f"| {by[i]['name']} | {reviews[i][1]} |\n" | |
| text+=f''' | |
| ## Asset checks, not just title screens | |
| The audit covered the eight new entries **plus the earlier Fireboy and Watergirl 1–2 captures**. | |
| - **{q['per_game_recorded_sha256_comparisons']:,} SHA-256 comparisons passed** after downloading stored files back from the bucket. No mismatches. | |
| - **{q['audio_decode_checks']} audio decode checks** and **{q['image_decode_checks']} image decode checks** passed in Chromium, using a local fixture and blocking external browser requests. | |
| - **{q['declared_path_checks']} explicit declared-path checks passed**, with no absent declared objects. Every stored JSON file in the ten audited manifests parsed successfully. | |
| - The four Fireboy/Watergirl inventories list **{sum(levelcounts.values())} map paths**: Forest {levelcounts[180]}, Light {levelcounts[181]}, Ice {levelcounts[182]}, Crystal {levelcounts[183]}. **All are present**, along with their referenced tileset JSON files. The final count is 149, correcting the earlier progress-message count of 148. | |
| - **94 OvO audio files** were missing from the mirror. All were restored from the named **1.4.4 upstream release**, saved in the bucket, and decoded individually. This includes codec alternatives and music, not only effects heard on the menu. | |
| - **113 source-missing map files** were restored from the GameDistribution build IDs identified in the respective loaders. Other missing maps were recovered directly from the source mirror. Original folders are retained. | |
| There are **207 documented upstream replacements** this batch: 94 audio files and 113 maps. Exact byte equivalence with unavailable mirror copies is **not asserted**. Replacement URLs, hashes, and original failures are recorded. No substitute gameplay, fabricated SDK responses, or license responses were created. | |
| The collector now understands local `play/` entry links, ES-module-relative imports, older Construct audio lists, Fireboy/Watergirl temple inventories, and their dynamically named audio families. | |
| ## Coverage limits | |
| - The counts above are **per-entry checks**; some shared supporting files appear in multiple manifests. | |
| - Declared-file coverage and valid media do not establish that every undiscoverable resource, online feature, or every level works. No full playthroughs are claimed. | |
| - Tests use a **local HTTP mirror with external browser requests blocked**. The test server applies documented routing to supporting libraries. This is not a test of untouched `file://` execution or a promise of self-contained HTML files. | |
| - Fireboy 3's actual game entry is **`site/games/watergirl-3/play/index.html`**; its outer catalog landing page has missing source navigation/button assets. | |
| - The later-level probes used the existing engine state API. Map data loaded and scenes rendered, but transient null/add errors occurred during direct transitions; those probes are not promoted to normal-progression passes. | |
| - OvO's restored library passed file/audio validation, but the full game exceeded the small test host's safe memory budget. OvO 2 and Volley Random are likewise **not marked gameplay-passed** merely from their scenes/menus. | |
| - Ads, telemetry, online tips and some source-missing wrapper/branding requests remain documented separately from stored core asset inventories. | |
| ## Progress and evidence | |
| **{len(results)} entries have verification reports; {pending} catalog candidates remain queued**, plus two oversized entry pages deferred. Two report entries are historical external-build exclusions, not archived local games. Bucket size is approximately **{info.size/1e9:.2f} GB** before the final report upload. Geometry Dash's separate dataset is untouched. | |
| - `_verification/next-batch-declared-assets.json`: manifest inputs, explicit paths, recoveries and original-source failures. | |
| - `_verification/next-batch-upstream-restorations.json`: source provenance and hashes. | |
| - `_verification/next-batch-payload-validation.json`: download-back hashes, media decoding, JSON parsing and tileset references. | |
| - `_verification/games/`: input checks, scene observations and runtime caveats. | |
| - `_verification/storage-audit.json`: **89 manifests, zero missing recorded objects, zero size mismatches** (presence/size audit, not a full historical SHA audit). | |
| - `_verification/evidence/`: screenshots; `_tools/`: credential-free scripts. | |
| Temporary game assets, downloaded source-inspection files, local screenshots and bulky caches are removed after publication. Small tools, manifests, and reports remain locally, below the 128 MB limit. | |
| ''' | |
| (H/'NEW-GAMES.md').write_text(text) | |
| old=H/'VERIFICATION.md';history=R/'verification-summary-before-next-batch.md' | |
| if not history.exists():history.write_text(old.read_text()) | |
| full=text+'\n## Cumulative verification outcomes\n\n| Game | Outcome | Scope / caveat |\n|---|---|---|\n' | |
| for j in results:full+='| '+j.get('name','').replace('|','/')+' | '+j.get('reviewed_outcome',j.get('status',''))+' | '+j.get('review_note','See individual JSON report.').replace('|','/')+' |\n' | |
| (H/'VERIFICATION.md').write_text(full) | |
| readme=f'''# Public original-file game archive | |
| Source catalog: https://garbsoftball.com/g. Created as a public Storage Bucket at the account owner's request; original game rights remain with their owners. | |
| ## Latest batch | |
| Added Fireboy and Watergirl 3–4, n-gon, OvO, OvO 2, Pacman (the source site's JS implementation), Vex 3, and Volley Random. Also repaired the earlier Fireboy/Watergirl 1–2 map inventories. | |
| **1,213 recorded SHA-256 comparisons, 287 audio decodes, and 587 image decodes passed** across those ten audited entries. All **149 declared temple-map paths** are present. OvO's 94 source-missing audio files were recovered from its named upstream release. **207 upstream replacements** have explicit provenance. | |
| See `_verification/next-batch-update.md` for exact coverage and limitations. OvO is runtime memory-limited; OvO 2 progression and Volley Random match play remain unverified. Scene rendering is not a full-playthrough pass. | |
| ## Previous audio repairs | |
| Thirty Dollar Website: 191 selectable sounds + 3 intros stored and decoded; preview and sampled sequence generated nonzero audio. Cookie Clicker: 46 effects added; 75 declared sounds decode. Basket Random: all 16 WebM sounds decode. Details: `_verification/lazy-assets-update.md`. | |
| ## Progress and usage | |
| **{len(results)} entries have verification reports; {pending} candidates remain pending**, plus two oversized entry pages deferred. Historical external exclusions remain labeled. No full playthroughs are claimed. | |
| - `site/`: original server-relative files and documented repairs. | |
| - `_vendor/`: supporting library/runtime copies. | |
| - `_originals/`: backups of deliberately patched originals. | |
| - `_reports/`: catalog and captured-file inventories. | |
| - `_verification/`: audits, caveats and screenshots. | |
| - `_tools/`: credential-free scripts. | |
| Download site files with `hf buckets sync hf://buckets/smodusermc/offline-games/site ./game-files`. | |
| This is several GB. Some games also need `_vendor/` and local HTTP hosting/routing; downloading just index.html is insufficient. **These are not automatically standalone HTML or untouched file:// releases.** No fake SDK/license responses are supplied. Ads, telemetry and some live features remain external. Game 182 uses `site/games/watergirl-3/play/index.html`; its catalog landing page is partly broken at source. | |
| Geometry Dash's separate dataset is untouched. Revoke shared access tokens when finished authorizing uploads. | |
| ''' | |
| (H/'BUCKET-README.md').write_text(readme) | |
| with (H/'WORKLOG.md').open('a') as f:f.write('\n\n## Next eight entries and full declared-map/media audit\n\nAdded IDs '+','.join(map(str,ids))+'. Also audited/repaired 180 and 181. All 149 declared temple-map paths are present. Recovered 94 OvO audio files and 113 maps from identified upstream releases/builds. 1,213 recorded SHA comparisons, 287 audio decodes, 587 image decodes, and 704 declared-path checks passed. No JSON parse failures or missing tileset JSON references. Cumulative presence/size audit: 89 manifests, zero missing recorded objects and zero mismatches. Not a full playthrough or proof of undiscoverable assets. See NEW-GAMES.md for runtime limitations and exact provenance.\n') | |
| adds=[(H/'BUCKET-README.md','README.md'),(H/'NEW-GAMES.md','_verification/next-batch-update.md'),(H/'VERIFICATION.md','_verification/verification-summary.md'),(H/'VERIFICATION.md','_reports/status.md'),(H/'WORKLOG.md','_reports/worklog.md'),(R/'inventory.json','_reports/inventory.json'),(R/'verification-summary.json','_verification/verification-summary.json'),(R/'verification-summary.json','_reports/summary.json')] | |
| for i in [180,181]+ids: | |
| adds.extend([(R/f'game-{i}.json',f'_reports/games/{i:04d}.json'),(R/f'verification-{i:04d}.json',f'_verification/games/{i:04d}.json')]) | |
| for name in ['next-batch-declared-assets.json','next-batch-upstream-restorations.json','next-batch-payload-validation.json','storage-audit.json','manifest-reconciliation.json']:adds.append((R/name,'_verification/'+name)) | |
| for p in (R/'evidence').glob('*.jpg'):adds.append((p,'_verification/evidence/'+p.name)) | |
| for p in (H/'tools').glob('*.py'):adds.append((p,'_tools/'+p.name)) | |
| adds.append((H/'tools/collect_next.py','_tools/resume-collector.py')) | |
| for start in range(0,len(adds),25):api.batch_bucket_files(B,add=adds[start:start+25]) | |
| remote={x.path:x for x in api.get_bucket_paths_info(B,[dest for _,dest in adds])} | |
| for local,dest in adds:assert remote[dest].size==local.stat().st_size | |
| print(json.dumps(summary,indent=2));print('Published and size-checked',len(adds),'objects') | |
Xet Storage Details
- Size:
- 16 kB
- Xet hash:
- b2def8635c1f5c6ece4fc8395bd5c26d404a93e8c6572ffbf11daafa4cba8413
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.