Files
44r0n7 0265afa054 chore: bootstrap lean sysadmin-chronicles repo
Import the runnable game code, content, docs, scripts, and repo guidance while leaving local agent state, dependency installs, build output, and backup copies out of the published tree.
2026-05-02 11:49:07 -04:00

156 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Sysadmin Chronicles
A native Linux game where you work as a junior sysadmin at Axiom Works, handling
real tickets inside real Linux virtual machines managed by QEMU/KVM.
**Status**: Node.js server + Svelte HUD implemented. Server, frontend, and all
services are built. Pending: Phase 7 workstation VM verification + Phase 10 full playtest.
---
## Architecture Summary
The game runs as a Node.js server on the host, serving a Svelte web HUD into the
workstation VM's browser. The player works inside a real XFCE desktop.
```
Host machine
├── Node.js game server (port 3000) — quest logic, validation, VM control
└── Svelte HUD — tickets, mail, Sage, docs (served by game server)
Workstation VM (sc-workstation / ares) — Debian 12 XFCE desktop
├── Chromium → http://192.168.100.1:3000 (HUD, auto-opens on login)
└── Tilix → SSH to hermes/vulcan (real terminal, real SSH)
Target VMs (headless)
├── sc-web-server (hermes) — Q002Q005, Q007
└── sc-build-machine (vulcan) — Q006, Q008
```
Quest completion is validated by the server SSHing into the target VM and
evaluating real system state — not by tracking commands typed.
---
## Quick Start (Development)
### Prerequisites
```bash
# Install host dependencies
sudo apt install qemu-system-x86_64 libvirt-daemon-system virsh qemu-img \
nodejs npm virt-viewer
# Add yourself to the libvirt group
sudo usermod -aG libvirt $USER && newgrp libvirt
```
### First-Time Setup
```bash
# Check host capabilities
bash tools/setup/check-host.sh
# Create libvirt networks, storage pool, and SSH keys
bash tools/setup/first-run-setup.sh
# Build VM images and provision quest baselines
bash tools/setup/seed-vms.sh
```
### Build the Frontend
```bash
cd frontend && npm install && npm run build && cd ..
```
### Run the Game
```bash
# Start game server + open workstation VM via SPICE
bash scripts/start-game.sh
# Or run server only (for development/testing)
cd server && npm install && node src/index.js
```
### Validate Content
```bash
node tools/content/validate-content.js --verbose
```
### Run Server Tests
```bash
cd server && npm test
```
---
## Project Structure
```
sysadmin-chronicles/
├── server/ Node.js game server
│ └── src/
│ ├── index.js Entry point — Express + WebSocket
│ ├── routes/ REST API routes
│ └── services/ ContentLoader, QuestEngine, ValidationEngine, etc.
├── frontend/ Svelte web HUD
│ ├── src/ Components, api.js
│ └── dist/ Built output (served by game server)
├── scripts/
│ └── start-game.sh Start server + open SPICE viewer
├── content/ All game content (JSON — unchanged)
│ ├── quests/ Q001Q008
│ ├── tickets/ T001T008
│ ├── incidents/ I001I003
│ ├── dialogue/ All NPC dialogue files
│ ├── vm_profiles/ workstation, web_server, build_machine
│ └── progression/ trust_unlocks.json
├── tools/
│ ├── setup/ check-host.sh, first-run-setup.sh, seed-vms.sh
│ ├── vm/ build scripts, quest-prep/, suppress-maintenance-noise.sh
│ └── content/ validate-content.js, verify-clue-fingerprints.js
├── docs/
│ ├── ARCHITECTURE.md System design
│ ├── ROADMAP.md Phase tracking
│ └── QUEST_AUTHORING.md Content authoring guide
```
---
## Key Design Rules
- Game server is the single source of truth — frontend only displays results
- Validation is server-side only — SSH into VMs, evaluate real system state
- Quest completion is state-based only — never command-sequence tracking
- Only operate on `sc-` prefixed libvirt domains
- Content JSON is read-only at runtime — ContentLoader reads once at startup
- Save file is at `~/.local/share/sysadmin-chronicles/save.json`
---
## Current Build State
### Done
- Node.js game server with all services (ContentLoader, QuestEngine, TicketService,
ValidationEngine, VMManager, TrustSystem, ProgressionSystem, EmailService,
SageService, ShiftTimer, IncidentScheduler, ShiftReviewService, CertificationService)
- All REST routes (tickets, mail, docs, sage, state, vms, session)
- Svelte frontend with all panels (Tickets, Mail, Docs, Sage, VMs, Header)
- Built frontend (`frontend/dist/`) served by game server
- Content: Q001Q008, T001T008, I001I003, all dialogue, world_flags, trust_unlocks
- Content validator: `validate-content.js` exits zero
### Pending
- Phase 7: verify XFCE workstation VM (SPICE display, Chromium autostart, Tilix default)
- Phase 10: full end-to-end playtest (Q001→Q002 with real VMs)