Files
otivm/docs/archives.md
2026-05-02 10:53:30 +00:00

12 KiB

OTIVM — Offline Archive Inventory

Offline archives are vzdump snapshots of LXC container 1105 (otivm-dev) on srv-a. Each archive is stored in /var/lib/vz/dump/ on srv-a and copied to USB after creation. Before restoring any archive, read the state description carefully. Restoring will overwrite everything on the container — all code, all data, all PM2 state. The Gitea repo is always the SSOT for code. Archives cover the OS, stack, and configuration.


Archive log

vzdump-lxc-1105-2026_05_02-05_37_24.tar.zst

Property Value
File vzdump-lxc-1105-2026_05_02-05_37_24.tar.zst
Date 2026-05-02 05:37 UTC
Size 1.3 GB
Container LXC 1105 — otivm-dev
Host srv-a (10.0.0.11)
Storage /var/lib/vz/dump/ + offsite cold storage
Gitea HEAD main — 1853c1c feat: wire per-player SQLite for OTIVM-III

Container state at time of archive:

  • All of archive 2026-05-02 03:15 plus:
  • OTIVM-III complete — per-player SQLite live in production
  • server/index.js replaced — per-player SQLite wiring active
  • data/create_player_db.sql committed — schema with 8 tables, 72 seed rows
  • data/saves/ — may contain first .sqlite3 player databases from live traffic
  • data/saves/*.json — legacy JSON saves preserved, never deleted
  • Roadmap and handover-game-dev.md updated to reflect OTIVM-III state
  • Parameter registry additions committed — 44 new tokens
  • Law and commerce corpus complete — 37 dialogues reviewed and cleared

Known deferred items:

  • Terrain in data/otivm.sqlite3 is modern WorldCover — restoration layer not yet built
  • Map coastline is five isolated H5 clusters — route corridor H5 hexes not in database
  • occ_flag is placeholder (0x00) everywhere
  • OTIVM-IV scope not yet defined — next discussion

What this archive is good for:

First complete OTIVM-III baseline. Per-player SQLite is live. Safe restore point before any OTIVM-IV development begins.

Restore command (run on srv-a as root):

pct restore 1105 /var/lib/vz/dump/vzdump-lxc-1105-2026_05_02-05_37_24.tar.zst --force

After restore: cd ~/OTIVM && git pull && npm install && npm run build && pm2 restart otivm

Note: otivm.sqlite3 and data/saves/*.sqlite3 are gitignored — present in archive but not in repo. If restoring to a fresh container, regenerate world database from data/create_otivm_db.sql and pipeline scripts. Player databases will be absent — players start fresh.


vzdump-lxc-1105-2026_05_02-03_15_12.tar.zst

Property Value
File vzdump-lxc-1105-2026_05_02-03_15_12.tar.zst
Date 2026-05-02 03:15 UTC
Size 1.3 GB
Container LXC 1105 — otivm-dev
Host srv-a (10.0.0.11)
Storage /var/lib/vz/dump/ + offsite cold storage
Gitea HEAD main — see commit log for exact SHA

Container state at time of archive:

  • All of archive 2026-04-28 plus:
  • OTIVM-II confirmed live — fog-of-war working, routes expanding during gameplay
  • Parameter registry additions committed — 44 new tokens across actor, city, scenario, and relation scopes
  • /law and /commerce doc folders reviewed, sanitized, and cleared
  • docs/parameter-registry-additions.md committed — derived from full corpus review
  • OTIVM-CANON-0001.md and LAW-PHASE-0001.md committed as canonical doctrine
  • Commerce and law dialogue corpus complete — 37 files reviewed and clean
  • Training corpus at 20 Layer 0 primitives, 5 Layer 1 worked examples, 1 sketch
  • commerce_chunks.jsonl — 230 chunks, 5 layers, evaluated and approved
  • Per-player SQLite schema design not yet started — next development task
  • Game development assistant role transferred from prior session

Known deferred items:

  • Per-player SQLite schema (OTIVM-III) — next blocking task
  • Layer 2/3/4 corpus markdown source files not yet written (exist in JSONL only)
  • Law domain corpus entries not yet authored
  • SKETCH-0001 not yet promoted to Layer 1

What this archive is good for:

Full working OTIVM-II baseline with complete doctrine and parameter registry. Correct restore point before OTIVM-III per-player database development begins.

Restore command (run on srv-a as root):

pct restore 1105 /var/lib/vz/dump/vzdump-lxc-1105-2026_05_02-03_15_12.tar.zst --force

After restore: cd ~/OTIVM && git pull && npm install && npm run build && pm2 restart otivm

Note: otivm.sqlite3 is gitignored — present in archive but not in repo. If restoring to a fresh container without this archive, regenerate from data/create_otivm_db.sql.


vzdump-lxc-1105-2026_04_28-00_39_03.tar.zst

Property Value
File vzdump-lxc-1105-2026_04_28-00_39_03.tar.zst
Date 2026-04-28 00:39 UTC
Size 1014 MB
Container LXC 1105 — otivm-dev
Host srv-a (10.0.0.11)
Storage /var/lib/vz/dump/ + workstation cold storage
Gitea HEAD main — see commit log for exact SHA

Container state at time of archive:

  • Debian 12, unprivileged LXC, 4 cores, 2 GB RAM, 8 GB disk
  • LAN IP: 10.0.0.23, WireGuard: 10.110.0.18
  • Node.js v22 (system), Python venv at /home/otivm/venv
  • PM2 running, startup configured via systemd pm2-otivm.service
  • Nginx on wg-pk proxying otium.civicus.us → 10.110.0.18:3000, SSL active
  • /opt/data/TESSERA_APR26 and /opt/data/TESSERA_WORLD are bind mounts — excluded from backup, not restored
  • pipeline-venv at /home/otivm/pipeline-venv with full dataset pipeline packages

OTIVM game state:

  • OTIVM-I complete — five trade routes, journal, otium/negotium, per-player saves
  • OTIVM-II complete — fog-of-war map rendering from real TESSERA H7 data
  • Fastify backend on port 3000 — static serving, save API, TESSERA map endpoint
  • data/otivm.sqlite3 present — 12,005 H9 rows across five H5 waypoints, status=2
  • data/otivm.sqlite3 has paleo_epochs table — 9 epochs, FK integrity clean
  • better-sqlite3 installed in node_modules
  • /api/map/:h5/:epoch endpoint live — returns H7 land/sea classification with real lat/lon centroids
  • Map renders H7 land cells at real geographic positions, fog-of-war reveal by chapter
  • Sea level parameterised by epoch — default roman_14bce (sl_offset_cm = -10)
  • data/saves/ contains live player save files (gitignored)
  • staging_otivm.sqlite3 present and in sync with production database

Architecture decisions present in this build:

  • active_dispatch and events[] in save state — sequencing substrate for future releases
  • galleyProgress() utility in gameState.js
  • Provenance fields on all routes (origin_h3_r5, origin_region, cultural_note)
  • session_abandoned event written to old save on new game — save files never deleted
  • paleo_epochs table follows RFC-TESSERA-3.0-PALEO-001

Known deferred items:

  • Journal local state does not reset on new game (React state issue, low priority)
  • H7 cell rendering uses circles — hex geometry deferred until h3-js available client-side
  • Map coastline is five isolated H5 clusters — route corridor H5 hexes not yet in database
  • Tree primitive 180° spread bug (inherited from CIVICVS, not applicable here)

What this archive is good for:

Full working OTIVM-II baseline. Game is live and playable. TESSERA SQLite integration complete. Fog-of-war map rendering from real elevation data working. This is the correct restore point if any subsequent OTIVM-III development breaks the database integration or map rendering pipeline.

Restore command (run on srv-a as root):

pct restore 1105 /var/lib/vz/dump/vzdump-lxc-1105-2026_04_28-00_39_03.tar.zst --force

After restore: cd ~/OTIVM && git pull && npm install && npm run build && pm2 restart otivm

Note: otivm.sqlite3 is gitignored — it is present in the archive but not in the repo. If restoring to a fresh container without this archive, the database must be regenerated from data/create_otivm_db.sql and the pipeline scripts.


vzdump-lxc-1105-2026_04_25-12_08_28.tar.zst

Property Value
File vzdump-lxc-1105-2026_04_25-12_08_28.tar.zst
Date 2026-04-25 12:08 UTC
Size 791 MB
Container LXC 1105 — otivm-dev
Host srv-a (10.0.0.11)
Storage /var/lib/vz/dump/ + USB copy

Container state at time of archive:

  • All of archive 2 plus:
  • OTIVM-I complete and playable at otium.civicus.us
  • Fastify backend running — static serving + save API on port 3000
  • Save files per player in data/saves/ (gitignored)
  • React frontend: App.jsx, Game.jsx, constants.js, gameState.js, api.js
  • H3 IDs assigned to all five waypoints — permanent, TESSERA-compatible
  • All five trade routes working — Ostia → Capua → Brundisium → Carthago → Alexandria
  • Journal entries firing correctly on dispatch milestones
  • Otium/negotium mechanic working
  • 128 concurrent players supported
  • Gitea repo at commit 9ef837d (Game.jsx) + subsequent commits
  • docs/roadmap.md committed — public, permanent

What this archive is good for:

Restoring OTIVM-I in its complete, playable state. This is the baseline before OTIVM-II map work begins. If OTIVM-II development breaks something fundamental, restore this archive and start OTIVM-II again from the Gitea repo at the commit before the rename/navigation scaffold.

Restore command (run on srv-a as root):

pct restore 1105 /var/lib/vz/dump/vzdump-lxc-1105-2026_04_25-12_08_28.tar.zst --force

vzdump-lxc-1105-2026_04_25-07_16_04.tar.zst

Property Value
File vzdump-lxc-1105-2026_04_25-07_16_04.tar.zst
Date 2026-04-25 07:16 UTC
Size 759 MB
Container LXC 1105 — otivm-dev
Host srv-a (10.0.0.11)
Storage /var/lib/vz/dump/ + USB copy

Container state at time of archive:

  • All of archive 1 plus:
  • Vite + React scaffold present at /home/otivm/OTIVM
  • npm run build completed — dist/ present
  • serve installed globally at /home/otivm/.npm-global/bin/serve
  • PM2 configured via ecosystem.config.cjs, running, saved
  • PM2 startup configured via systemd unit pm2-otivm.service
  • App serving on port 3000, responding HTTP 200
  • otium.civicus.us live and serving Vite welcome page over HTTPS
  • Gitea repo at commit 6725f11 (scaffold) + subsequent config commits

What this archive is good for:

Restoring a fully working serving stack. After restore the app will come up automatically via PM2 on boot. The game code is not yet present — pull from Gitea and run npm run build to get the latest game.

Restore command (run on srv-a as root):

pct restore 1105 /var/lib/vz/dump/vzdump-lxc-1105-2026_04_25-07_16_04.tar.zst --force

vzdump-lxc-1105-2026_04_25-04_10_53.tar.zst

Property Value
File vzdump-lxc-1105-2026_04_25-04_10_53.tar.zst
Date 2026-04-25 04:10 UTC
Size 552 MB
Container LXC 1105 — otivm-dev
Host srv-a (10.0.0.11)
Storage /var/lib/vz/dump/ + USB copy

Container state at time of archive:

  • Debian 12, unprivileged LXC
  • 2 cores, 512 MB RAM, 8 GB disk (upgraded to 4 cores, 2 GB RAM on 2026-04-25 after archive)
  • LAN IP: 10.0.0.23, WireGuard: 10.110.0.18
  • Node.js v22 installed (system)
  • Python venv at /home/otivm/venv
  • serve installed globally at /home/otivm/.npm-global/bin/serve
  • Nginx on wg-pk configured and proxying otium.civicus.us → 10.110.0.18:3000
  • SSL active on otium.civicus.us
  • otivm user created, bashrc configured, work alias present
  • Gitea repo cloned to /home/otivm/OTIVM
  • PM2 NOT yet configured at time of this archive
  • Vite + React scaffold NOT yet present at time of this archive

What this archive is good for:

Restoring the base OS and software stack if the container is lost or corrupted. After restore, you must: clone the repo, run npm install, run npm run build, install serve globally, and start PM2 manually.

Restore command (run on srv-a as root):

pct restore 1105 /var/lib/vz/dump/vzdump-lxc-1105-2026_04_25-04_10_53.tar.zst --force

Convention

Archive filenames follow Proxmox default: vzdump-lxc-{CTID}-{YYYY_MM_DD-HH_MM_SS}.tar.zst Add a new entry to this file every time an archive is created and copied to cold storage. Always note exactly what is and is not present in the container at time of archive. Most recent archive listed first.