# 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_03-14_08_13.tar.zst | Property | Value | | --- | --- | | File | vzdump-lxc-1105-2026_05_03-14_08_13.tar.zst | | Date | 2026-05-03 14:08:13 UTC | | Size | 1.21 GB | | Container | LXC 1105 — otivm-dev | | Host | srv-a (10.0.0.11) | | Storage | /var/lib/vz/dump/ + offsite cold storage | | Gitea HEAD | main — 3700f5a iv: retire Prologue.jsx and Ledger.jsx | **Container state at time of archive:** - OTIVM-I, OTIVM-II, OTIVM-III, OTIVM-IV complete and live - Server startup message: `OTIVM server running on port 3000 — OTIVM-IV` - Bootstrap 5.3.3 and Bootstrap Icons 1.11.3 vendored and pinned in `package.json` - `src/App.css` — reduced to project overrides. Roman palette as CSS custom properties. All classes prefixed `otivm-`. Bootstrap handles all layout. - Shell architecture live — `src/components/Shell.jsx` and `src/components/Section.jsx` built once. Sidebar with context dropdown replaces tab navigation. Four layout types. Nine panel types in Section.jsx. - Context JSON files — `src/config/contexts.json`, `context-actor.json`, `context-forum.json`, `context-map.json`. Dropdown-driven, extensible. - Sub-components — `src/components/ParameterRow.jsx`, `CostRow.jsx`, `DriftEntry.jsx` - `src/screens/Actor.jsx` — background selection (when `background_id = null`) or full parameter instrument view (three-col layout). - `src/screens/Forum.jsx` — dispatch/otium decisions. Full cost breakdown visible on route cards. Periodic expenditures panel. Journal collapsible. - `src/App.jsx` — Shell wired. Three contexts: ACTOR, FORUM, MAP. - `server/index.js` — three named otium expenditure trigger types per otium cycle: `otium_access_fee` (2 dn), `personal_maintenance` (4 dn), `officia_obligation` (2 dn). Each writes a separate `parameter_drift_log` entry with academic source note. - `src/screens/Prologue.jsx` and `src/screens/Ledger.jsx` — deleted. Replaced by Actor.jsx and Forum.jsx. - `docs/economy/cost-calibration-model.md` — ceramic cup baseline, reference wages, periodic cost calibration. Committed. - `docs/economy/cost-calibration-additional-goods.md` — garum, grain, amber, marble capital. Five good patterns established. Committed. - `docs/Roadmap-OTIVM-IV.md` — approved roadmap document. Committed. - PM2 log clean — no errors. - Live player databases verified: - Token `1fa3f5fc` (Freedman Trader) — 2 ventures, drift log correct - Token `3b1546e8` (Noble Younger Son) — extensive play, auctoritas progressed through four band transitions (low→medium→high→distinguished), drift log recording all three otium expenditure types correctly per cycle **Known deferred items:** - Real cost model — 60/25/15 split (vectura/portoria/other) is a placeholder - Transformation routes (grain→bread) and barter — architecture defined, not built - Market reader — deferred, architectural constraints documented and must not be violated - H7 cells rendered as circles — hex geometry deferred pending client-side h3-js - Map coastline — five isolated H5 clusters, route corridor deferred - Terrain — modern WorldCover, restoration layer (HYDE 3.3 + KK10) not yet built - OTIVM-V scope — not yet defined, project owner decides **What this archive is good for:** First complete OTIVM-IV baseline. Situation instrument live. Shell architecture established. Economic sub-trace recording correctly with named, citable trigger types. Safe restore point before any OTIVM-V development begins. **Restore command (run on srv-a as root):** ```bash pct restore 1105 /var/lib/vz/dump/vzdump-lxc-1105-2026_05_03-14_08_13.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 without this archive, 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_03-04_36_55.tar.zst | Property | Value | | --- | --- | | File | vzdump-lxc-1105-2026_05_03-04_36_55.tar.zst | | Date | 2026-05-03 04:36:55 UTC | | Size | 1.21 GB | | Container | LXC 1105 — otivm-dev | | Host | srv-a (10.0.0.11) | | Storage | /var/lib/vz/dump/ + offsite cold storage | | Gitea HEAD | main — d1e1b98 iv: fix drift log trigger type — dispatch_cost vs venture_complete | **Container state at time of archive:** - OTIVM-I, OTIVM-II, OTIVM-III complete and live - `server/index.js` — OTIVM-III complete. Per-player SQLite live. Ventures, venture_legs, and parameter_drift_log all wired and recording. Drift log trigger types correct: `dispatch_cost` (den decreases), `venture_complete` (den increases), `interval_complete` (auctoritas band change after otium) - `data/create_player_db.sql` — schema version 5. `UNIQUE(actor_id)` on `actor_profile`. FK references from all child tables valid. 72 seed rows confirmed clean. - `data/repair_player_db_fk.sql` — repair script for pre-v5 player databases. Applied successfully to `78cec864.sqlite3` during this session. - Background selection wired end-to-end. PM2 log flushed. - `docs/handover-game-dev.md` — updated to reflect OTIVM-III complete state. **Known deferred items:** - Cost model: 60/25/15 split is a placeholder - Journal local state does not reset on new game (React state issue, low priority) - H7 cells rendered as circles — hex geometry deferred pending client-side h3-js - Map coastline — five isolated H5 clusters - Terrain — modern WorldCover, restoration layer not yet built - OTIVM-IV scope: defined in `docs/Roadmap-OTIVM-IV.md` **What this archive is good for:** First complete OTIVM-III baseline with sub-trace live. Ventures, legs, and drift log all recording correctly. Background selection wired end-to-end. Safe restore point before OTIVM-IV development. **Restore command (run on srv-a as root):** ```bash pct restore 1105 /var/lib/vz/dump/vzdump-lxc-1105-2026_05_03-04_36_55.tar.zst --force ``` After restore: `cd ~/OTIVM && git pull && npm install && npm run build && pm2 restart otivm` --- ### 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 **Restore command (run on srv-a as root):** ```bash 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` --- ### 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 - Law and commerce 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 **Restore command (run on srv-a as root):** ```bash 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` --- ### 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:** - 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 - Map renders H7 land cells at real geographic positions, fog-of-war reveal by chapter - `staging_otivm.sqlite3` present and in sync with production database **Restore command (run on srv-a as root):** ```bash 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` --- ### 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:** - OTIVM-I complete and playable at otium.civicus.us - Fastify backend running — static serving + save API on port 3000 - All five trade routes working — Ostia → Capua → Brundisium → Carthago → Alexandria - Journal entries, otium/negotium mechanic working - 128 concurrent players supported - H3 IDs assigned to all five waypoints — permanent, TESSERA-compatible **Restore command (run on srv-a as root):** ```bash 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:** - Vite + React scaffold present at /home/otivm/OTIVM - `npm run build` completed — dist/ present - PM2 configured via ecosystem.config.cjs, running, saved - App serving on port 3000, responding HTTP 200 - otium.civicus.us live and serving Vite welcome page over HTTPS **Restore command (run on srv-a as root):** ```bash 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 - Node.js v22 installed (system) - Python venv at /home/otivm/venv - 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 **Restore command (run on srv-a as root):** ```bash 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.