Commit Graph

4 Commits

Author SHA1 Message Date
type-two
b6c9c5eb23 Untrack mrpgi-vault build artifacts (254 compiled files; also carried stray game-name strings)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-26 10:44:35 +10:00
type-two
eb4a21491e vault backup: document the daily launchd schedule + macOS TCC gotcha
Scheduled daily at 4am on the ultra. launchd can't exec scripts inside
~/Documents (TCC), so the job runs a copy under Application Support;
header documents the sync/manage/remove commands.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 12:32:10 +10:00
type-two
24f812dbfd vault: offline backup script (pull accounts + worlds to local snapshots)
The vault's user data (argon2 hashes + saved worlds) only lives on the
VPS and isn't in git. backup.sh pulls /opt/mrpgi-vault/data down as a
timestamped tarball, keeps the 30 newest, and documents the restore
path in its header.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 12:22:44 +10:00
type-two
cd7f658444 Accounts + cloud saves: the front door for the web engine
- mrpgi-vault (standalone crate): tiny signup/login/world-save service.
  Argon2 password hashes, random session cookies, JSON-file storage,
  naive per-IP rate limit, 4MB body cap. tiny_http, no framework, no db.
  Runs as a container on the dealgod network; nginx proxies
  /engine/api/ to it.
- core: WorldBundle — a whole world (manifest + every room) as one JSON
  document, with World::to_bundle/apply_bundle.
- web bridge: mrpgi_request_save / mrpgi_alloc / mrpgi_world_in exports
  + an mrpgi_world_saved JS plugin import; the page's SAVE button pulls
  the live world out of the running engine, LOAD swaps it back in.
  SAVE_REQUESTED is an AtomicBool on purpose — wasm's thread-less
  Mutex<bool> is a plain static to LLVM and release builds const-folded
  the read (the only writer is JS-visible, not IR-visible).
- web UI: SIGN IN tab → create account (own username + password) /
  sign in / Save world / Load world / sign out. Session restores on
  revisit.

Verified live end-to-end through Cloudflare: signup → save → reload →
anonymous rejected; throwaway account removed after.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 11:38:27 +10:00