Working design repository for a systems-thinking, process-discovery, automation, architecture, and software-development simulation game.
This is a pre-alpha vertical slice under active development. The deterministic headless simulation, Windows Stride greybox, first-shift onboarding and quest arc, initial progression, evidence-backed pattern Codex, save/resume, and automated validation paths are runnable; production art, distribution packaging, and human readiness validation are not complete.
Reviewer-facing captures of the delivered first-shift features are retained in the feature screenshot gallery.
See Contributing, Security Policy, and Third-Party Notices before redistributing or contributing assets.
The player begins with little authority and little understanding. They get a job, perform real work, observe how the organization actually functions, improve processes, document knowledge, delegate work, mechanize it, automate it, and eventually design systems and organizations capable of operating at enormous scale.
The game is not about maximizing an "automation percentage." The player is rewarded for building reliable capability: outcomes that remain useful when people behave unexpectedly, machines fail, vendors change, networks become unreliable, policies conflict, and the player's own assumptions prove incomplete.
The central educational progression is:
Do the work
-> understand the work
-> describe the work
-> improve the work
-> delegate the work
-> automate the work
-> validate the automation
-> compose systems
-> design organizations
-> decide what should be done
Programming arrives late. By the time text code appears, the player already understands state, inputs, decisions, effects, interfaces, contracts, events, processes, failures, and evidence because they have been manipulating those concepts visually for hours.
The initial client will use Stride 4.3, C# 14, and .NET 10. The game simulation is engine-independent and must run headlessly without Stride. Stride is initially responsible for presentation, input, audio, asset integration, scene authoring, and client tooling, not for ownership of simulation truth.
See ADR-0001 and Architecture.
- Product Vision
- Design Pillars
- Core Game Loop
- Simulation Ontology
- Gameplay Systems
- Architecture
- Stride Client Plan
- Stories, Quests, and Scenarios
- Progression, Skills, and Abilities
- Implementation Roadmap
- Initial Backlog
| Document | Purpose |
|---|---|
01_PRODUCT_VISION.md |
Product thesis, audience, fantasy, outcomes |
02_DESIGN_PILLARS.md |
Non-negotiable design rules |
03_CORE_GAME_LOOP.md |
Minute-to-minute and campaign loops |
04_SIMULATION_ONTOLOGY.md |
Primitive nouns/verbs from which worlds are built |
05_GAMEPLAY_SYSTEMS.md |
Economy, work, process, automation, reliability systems |
06_ARCHITECTURE.md |
Engine-independent application architecture |
07_STRIDE_CLIENT.md |
Stride-specific presentation/client integration |
08_WORLD_CAMERA_PRESENTATION.md |
3D orthographic-first visual approach |
09_STORY_QUEST_SCENARIO_SYSTEM.md |
Narrative and educational content model |
10_ROLES_ABILITIES_SKILLS_PROGRESSION.md |
Career and capability progression |
11_INDUSTRIES_AND_CAMPAIGN.md |
Industry progression and scenario themes |
12_AUTOMATION_OUTSOURCING_OWNERSHIP.md |
Automation debt, delegation, human ownership |
13_UI_UX_SYSTEM_LENSES.md |
Reality/process/state/architecture/runtime/code lenses |
14_CONTENT_AUTHORING.md |
Data-driven authoring workflow |
15_ASSET_PIPELINE.md |
Art/audio/model sourcing, creation, generation, licensing |
16_DATA_AND_SCHEMAS.md |
Save/content/runtime data conventions |
17_SAVE_REPLAY_DETERMINISM.md |
Snapshots, commands, replay, seeded randomness |
18_AI_NPC_ORGANIZATIONS.md |
NPC behavior and organizational simulation |
19_MODDING_AND_SCRIPTING.md |
Future extensibility and player code |
20_TESTING_VALIDATION_PERFORMANCE.md |
Quality strategy and performance budgets |
21_IMPLEMENTATION_ROADMAP.md |
Phased development plan |
22_EPICS_STORIES_AND_TASKS.md |
Initial implementation backlog |
23_RISK_REGISTER.md |
Technical/product/design risks |
24_DEFINITION_OF_DONE.md |
Completion gates for systems and content |
25_GLOSSARY.md |
Shared project language |
TheAutomationGame/
src/
Automation.Domain/
Automation.Simulation/
Automation.Content/
Automation.Persistence/
Automation.Headless/
Automation.Client.Stride/
Automation.Tools/
tests/
Automation.Domain.Tests/
Automation.Simulation.Tests/
Automation.Content.Tests/
Automation.Integration.Tests/
Automation.Performance.Tests/
content/
industries/
jobs/
scenarios/
quests/
processes/
incidents/
skills/
abilities/
assets/
assets-src/
models/
textures/
audio/
ui/
concept/
docs/
tools/
The first vertical slice is intentionally mundane: a small restaurant dish station. The player begins by manually moving dirty dishes through scrape, sort, wash, dry, and return steps. Increasing volume exposes queues, bottlenecks, missing information, machine constraints, failure handling, worker knowledge, measurement, and the first opportunities for mechanization and automation.
The vertical slice is successful when a player can:
- perform the process manually;
- observe and diagram it;
- improve layout and sequence;
- introduce a machine with imperfect behavior;
- define a process explicitly;
- automate one bounded decision;
- experience a failure caused by an incomplete assumption;
- inspect why the failure happened;
- refine the model and validate the improved system;
- view the same system through reality, process, state, architecture, and runtime lenses.
The first runnable slice moves plates, glasses, and trays through an authoritative, deterministic dish-station simulation. Its complete restaurant presentation is accepted for the internal vertical slice: every critical room, equipment, item, cast, UI, audio, and VFX surface is either production or explicitly approved alpha with provenance, limitations, and a replacement trigger. Renderer-safe primitives remain failure fallbacks, not unreviewed critical-path placeholders.
The spatial greybox projects the authoritative process queues onto a selectable isometric sandbox floor. Workstations, dish stacks, service supply, the player, and the delegated worker are presentation objects derived from snapshots rather than owners of gameplay state. With the process lens enabled, the floor adds flow traces, accumulated item-ticks (queue pressure), oldest current item age, completed average residence time, and the current pressure leader; these are simulation metrics, not client-side estimates.
The sandbox floor is editable. Placement mode proposes engine-neutral fixture/cell commands, rejects collisions, sealed interaction ports, and unsafe washer relocation, supports command-based undo and preset reset, and immediately exposes the resulting handoff route. Workstation footprint cells are blocked. Direct movement accepts only unobstructed neighboring steps, while floor/fixture clicks generate a deterministic route and feed those same authoritative step commands to the simulation. Compact custom routes improve delegated action frequency; inefficient arrangements lose that advantage. Player location and walking distance are authoritative and replayable, while movement animation remains a client projection.
The player and new hire use one shared procedural humanoid rig with distinct catalog-backed appearance variants. Authoritative position and action snapshots drive presentation-only idle, walk, facing, and work poses; the player carries a persistent selection ring, and reduced-motion mode snaps travel while retaining static readable work poses. Named restaurant speakers use a consistent client-only color-and-monogram badge. The character presenter never writes simulation or save state.
The client renders the world through a centered 1024×600 virtual canvas with automatic scaling and letterboxing. UI uses a separately fitted canvas so its persisted 75–100% scale and pointer hit testing stay aligned without cropping fixed-layout panels.
The Windows client uses the saved windowed/borderless preference and targets the actual leftmost monitor work area rather than assuming the primary display. Gameplay remains visible as the continuous background; the objective, service health, selected action, notifications, and earned build tools are translucent HUD overlays. State, knowledge, automation, runtime, responsibility, handbook, settings, and benchmark views open as consistent dimmed informational modals. Consequence-bypassing sandbox tools remain locked until the first shift is complete. Pass --windowed or --fullscreen to override the persisted startup mode for one launch.
Career progress and versioned client settings save atomically to the user's local application-data directory. Settings persist live master volume (including mute), fitted UI scale, camera sensitivity, startup window mode, and the complete logical input-binding profile. A later launch offers Continue or a confirmation-protected New Career; the previous checkpoint remains intact until the replacement intro is completed.
The approved-alpha audio set adds quiet dish-room ambience plus distinct cues for work, washer start/running/completion, blocked actions, operational failures, quest completion, and UI confirmation. Existing authoritative commands, notifications, and progression evidence drive playback; audio never enters simulation or save state. Every information-bearing cue is paired with a visible SOUND • ... caption and the existing detailed HUD message. Missing content or an unavailable audio device falls back to captions and silence.
The client begins with a five-page first-shift briefing and replayable choices for guided/contextual/minimal assistance, reduced motion, and high contrast. The first-hours journal then tracks eight outcome quests and their active-simulation duration across one manual restock, dinner-rush observation, bottleneck diagnosis, a measured layout improvement, explicit delegation, a rare exception, bounded washer automation, and a live reliability window. Each quest has a navigable detail page; situation and observable outcome are available immediately, while the causal discovery is recorded only after the outcome is complete. Quest outcomes grant XP, seven initial career levels, and observation/action capabilities rather than throughput bonuses. A unified progression receipt keeps outcome, XP, level, unlocked capability, and its authored “why now” explanation visible together; same-level rewards do not masquerade as level-ups. Completing the episode leaves the sandbox running for experimentation or post-shift tools.
After identifying the first constraint, the player compares the 22-step baseline route with a U-shaped cell. The same dish states then require 10 handling steps, and the shorter route gives delegated work more action opportunities; it does not erase service demand or washer capacity.
The episode then introduces a new hire. The player can transfer only the visible happy-path flow, observe the resulting plate-first behavior during glass demand, and explicitly add the missing rush-priority knowledge. Delegation is validated when service consumes a glass produced by the worker. An uncommon tray then exposes a second omitted fact: without its orientation knowledge the worker creates rework; after that fact is documented, the same tray completes normally.
Finally, the player enables a controller that starts a present rack whenever the washer reports ready. After successful cycles, a sticky-ready signal causes an unsafe start request while the previous rack is physically still in the machine. The controller halts, the player inspects the reported/physical-state divergence, and a corroborated-ready policy prevents the same unsafe request during validation.
dotnet build TheAutomationGame.sln -c Release
dotnet test TheAutomationGame.sln -c Release --no-build
dotnet test tests/Automation.Content.Tests/Automation.Content.Tests.csproj -c Release
dotnet run --project src/Automation.Headless -c Release -- --ticks 250 --seed 42
dotnet run --project src/Automation.Headless -c Release -- --benchmark-actors 100000 --benchmark-ticks 100
dotnet run --project src/Automation.Headless -c Release -- --sandbox-demo --ticks 20
dotnet run --project src/Automation.Headless -c Release -- --automation-ir-demo
dotnet run --project src/Automation.Headless -c Release -- --automation-editor-demo
dotnet run --project src/Automation.Headless -c Release -- --automation-compare-demo
dotnet run --project src/Automation.Headless -c Release -- --pattern-knowledge-demo
dotnet run --project src/Automation.Headless -c Release -- --pattern-naming-demo
dotnet run --project src/Automation.Headless -c Release -- --vendor-demo
dotnet run --project src/Automation.Headless -c Release -- --compile-content content/fixtures/schema-v1/minimal-restaurant.yaml
dotnet run --project src/Automation.Headless -c Release -- --compile-content content/restaurant/first-shift.yaml
dotnet run --project src/Automation.Headless -c Release -- --expand-template content/templates/proofs/seeded-scenario.template.yaml --named-seed proof-0 --parameter facility-slug=proof-house --parameter rack-capacity=12
dotnet run --project src/Automation.Client.Stride.Windows -c Release
dotnet run --project src/Automation.Client.Stride.Windows -c Release -- --windowedThe headless runner accepts typed scenario overrides. Run dotnet run --project src/Automation.Headless -- --help for the full matrix. For example:
dotnet run --project src/Automation.Headless -c Release -- --empty --ticks 120 `
--initial-plates 12 --initial-glasses 4 --arrival-interval 20 --glass-every 2 `
--rack-capacity 3 --washer-cycle 12 --worker-enabled --knowledge full `
--worker-interval 4 --flow-worker-interval 2 --automation safe --layout cell `
--demand-kind Glass --demand-interval 10 --rush --sticky-after 0 --fault-permille 25Authored content has a strict schema_version: 1 YAML compiler boundary. The reference bundle contains one industry, facility, item, workstation, process, scenario, quest, and character; compilation validates semantic IDs and typed references, normalizes immutable runtime definitions, and prints a deterministic manifest hash. The complete contract is in content/SCHEMA_V1.md. The production first shift defines Avery, Ray, Jules, Tessa, and Devon with stable roles, knowledge, authority, relationships, presentation fallbacks, explicit quest participation, contextual barks, and chapter-level briefing/debrief copy. Authoritative world transitions drive the narrative event evidence; the client resolves and presents authored text without changing outcomes. --narrative-demo --ticks 330 --seed 42 prints the complete chapter and proves 8/8 completion without developer supply or fault commands.
The same content boundary supports deterministic template-v1 expansion before ordinary schema validation. Templates declare typed parameters and finite seeded variant fields; output includes normalized YAML, compiled content and manifest hash, and immutable provenance with its own expansion hash. No arbitrary script execution, recursive includes, or implicit randomness is supported.
Client controls:
Keyboard defaults are defined by a versioned, engine-neutral action-binding profile. The Stride client resolves those bindings to logical actions, and visible keyboard hints read from the same profile. The model is serializable and remap-ready; a production rebinding screen remains scheduled separately.
- onboarding, guidance and comfort cards, Continue/New Career, journal rows and details, handbook close, and the Shift Scorecard all support direct mouse selection as well as their displayed keyboard controls;
Enteradvances the intro briefing; on its guidance pageQ/Echanges the selected mode;F12opens the progression-aware Shift Handbook. It shows core interaction, the current opportunity, and only capabilities already earned; it does not reveal hidden quest discoveries;Oopens Settings from gameplay, while saved-career start menus also expose a Settings card; use arrows to select/change values,Enter/Spaceto confirm,Backspaceto restore defaults, andEsc/Oto close;Jopens the first-hours quest journal;Q/EorUp/Downselects a quest,Enter/Spaceopens its detail page, andEscreturns or closes it;W/A/S/Dmove the player in camera-relative isometric directions; holding a direction repeats movement and opposing inputs cancel deterministically;Kopens the level-7 first-shift report after Own the Shift is complete;- approach or click a workstation, then press
Eto perform its contextual work;Finspects the selected in-range fixture and reports its current state; - middle-drag pans the isometric floor, the wheel zooms within its supported range, and
C/Homerecenters; arrow keys andZ/Xremain keyboard fallbacks; - hover a fixture to preview
MOVE,WORK,INSPECT, orBLOCKED; left-click a fixture to route around workstation footprints to its interaction port and click again to work or inspect, or click a walkable floor tile to route there. Pressing WASD cancels a pending click route and takes over immediately (Spaceremains a compatibility alias for in-range contextual work); Mopens placement mode; useQ/Eto choose a fixture, arrows or a floor click to move its preview,Enterto place it,Backspaceto undo, andHto restore the linear preset;1scrape,2rack,3start washer,4unload,5dry/restock;Tabswitches between plates and glasses;Ltoggles the process lens andRtoggles dinner-rush demand;Hstarts or finishes capture of successful manual work. After at least one capture is complete,Enteropens the process editor; the simulation pauses while it is open. UseUp/Downto select a step,Q/Eto reorder,Ato assign it to the player/new hire,Rto cycle routing priority,Enter/Spaceto validate and apply, andEscto discard the draft;Bconfirms the selected workstation as the current bottleneck hypothesis when the tutorial asks;Garranges the U-shaped flow cell when the tutorial asks;Ntoggles the new hire,Ttransfers the happy-path flow, andYadds the rush glass-priority knowledge;Udocuments the uncommon-tray handling knowledge when that exception is discovered;6opens the paused Automation Rule Editor. UseUp/Downto select enabled state, rack/readiness conditions, or the closed Start Washer action;Spacechanges an editable value,Entervalidates/applies, andEscdiscards.Bsaves the applied rule as baseline,Vsaves it as variant, andRruns both under the same controlled seed/scenario. The panel shows metric deltas plus authoritative inputs, predicates, selected effect, and command outcome;- after the first shift,
7opens Two Stations, One Problem.Left/Rightselects main or patio in the same routing decision slot,Up/Downchanges that station's policy,Ccopies main to patio,Enterruns both stations under the same authored horizon, andEsccloses. The board shows authoritative completion, shortage, and net consequences and reveals the discovery only after both demands are supplied; - after the copied and fitted routing trials establish recognition,
8opens the Pattern Codex. Its pre-name page cites the player's two restaurant records and consequences;Enterrecords the player's reflection and reveals Strategy Pattern with intent, structure, benefits, and tradeoffs. This is an acknowledgement, not a quiz.Esccloses the Codex; - after Strategy is named,
9opens Sam Rivera's Buy the Box comparison.Left/Rightselects the in-house, managed-vendor, or observable-vendor proposal;Enterruns the selected contract through the same rare-tray boundary incident;Esccloses. Compare at least two viable proposals by cost, missed service, support response, trace, fallback, and retained knowledge; Iinspects an automation incident andPreplays the captured incident against the currently applied player rule;- scenario-driving trace and reliability-window actions remain available to explicit developer-session controls and have no production WASD binding;
Vcycles the currently unlocked reality, process, state, knowledge, automation, runtime, and responsibility lenses;- after the first shift is complete,
F1opens post-shift sandbox tools:F2injects dirty dishes,F3provisions clean supply,F4resets,F5pauses,F6steps,F7injects sticky-ready, andF8toggles layout. Development runs can opt in earlier withAUTOMATION_DEVELOPER_TOOLS=1; - in god mode,
F9renders a batched 10k representative subset from the 100k-actor benchmark,F10creates a deterministic quick-save, andF11restores it; Esccloses an open journal; otherwise it exits.
Native UI smoke test (Windows):
dotnet build TheAutomationGame.sln -c Release
.\tools\ui-smoke.ps1 -AllowDesktopInputThe smoke driver takes exclusive control of the shared OS cursor and opens/resizes real windows; run it only while the desktop is idle. The required -AllowDesktopInput switch prevents accidental takeover. It first launches an ordinary player process and verifies developer tools are locked, then launches the Stride executable and combines semantic controls with real OS pointer movement and clicks. Pointer paths cover every intro page, guidance and comfort selection, handbook, quest rows and details, scorecard, Continue, and New Career confirmation in addition to sandbox movement and work. It completes the episode and live reliability window, opens every lens, validates placement, checks save–mutate–restore while paused, renders the 100k benchmark subset, captures the major HUD and modal layers through DPI-safe settled-frame capture, validates a 4K-scale viewport, and resumes the same level-7 career in a second process. Use -KeepOpen to retain the resumed window for review.
The client writes smoke screenshots from its Stride back buffer when the runner supplies its private request channel, so artifact capture does not depend on a desktop screen DC. On a detached Windows session, add -SemanticOnly: the same progression, authoritative commands, modals, screenshots, evidence, save/restore, and resume checks run without cursor injection. This mode does not replace the default pointer-path gate on an interactive desktop.
To refresh checked-in reviewer artifacts after a client-facing delivery, run ./tools/ui-smoke.ps1 -AllowDesktopInput -RetainScreenshotsPath docs/screenshots/first-shift, inspect the changed images, and update the gallery mapping for the delivered session.
Fresh-career human playtest (Windows):
.\tools\playtest-first-hours.ps1 -PlayerId novice-01This launches the normal visible client with an isolated save under artifacts/playtests/. When the final quest completes, the client atomically emits objective onboarding, progression, quest, duration, per-stage handbook-use, reliability-window, and frozen scorecard evidence. After the window closes, the launcher records separate movement, interaction, bottleneck, reported/physical readiness, replay/proof, and pre-name Strategy judgments plus guidance mode, interventions, blockers, and owned critical issues. Add -Windowed only when the test setup requires a resizable window, or -NonInteractive when another study system will write a schema-v3 facilitator observation.
After multiple sessions, summarize the formative gate with:
.\tools\summarize-first-hours-playtests.ps1The summarizer validates observation/completion identity and writes artifacts/playtests/readiness-report.md. It evaluates every fixed N5 threshold, lists per-session comprehension observations, and prioritizes recurring blockers and owned critical issues. Synthetic test fixtures are explicitly excluded from human counts. The formative first-shift duration envelope is fixed at 45–120 wall-clock minutes before collection.
The reviewed repository aggregate is the S035 restaurant human-readiness report. It remains NOT READY until actual de-identified human observations replace the empty-cohort state; native smoke or synthetic fixtures cannot change that status.
The engine renders the world. The simulation owns the world.
Project-owned code and documentation are available under the MIT License. Third-party assets retain the terms documented in THIRD_PARTY_NOTICES.md.