324 lines
13 KiB
Markdown
324 lines
13 KiB
Markdown
# 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. |