Skip to content

Mission map

OpsQuest teaches operational problem-solving through incidents rather than isolated command drills. Missions provide a disposable environment, describe an observable goal, and accept any supported command sequence that produces the required outcome.

Learning journey

OpsQuest learning journey

Editable source: learning-journey.excalidraw

The curriculum has two independent tracks:

  • Linux: 23 missions across four ordered worlds. Bare opsquest play follows this track.
  • Docker: 16 optional missions across three worlds: Foundations, Container Triage, then Network Plumbing. Docker readiness never blocks Linux play.

Display numbers are global across both tracks: Docker World 1 occupies Missions 20–25, Linux World 4 resumes at Mission 26, Docker World 2 continues at Mission 30, and Docker World 3 at Mission 35. World and stage positions are derived separately inside each track. Persisted completions use stable mission IDs rather than display numbers, so profiles created before this expansion remain compatible.

The learning philosophy explains the incident loop and feedback model. Mission authoring describes how validators preserve equivalent solutions.

Follow or explore the path

$ opsquest play                 # resume Linux progress
$ opsquest map                  # see every world and stage
$ opsquest map --track docker   # see the optional Docker worlds
$ opsquest play --world 3       # stay within Production Friday
$ opsquest play 19              # begin at a global mission number
$ opsquest play linux-find-logs # begin at a stable mission ID

Worlds recommend an order but do not lock content. Every mission remains directly playable and replayable. Use --once when you want one mission rather than continuous play.

Current mission map

The “tools” column records suggested commands, not a mandatory solution. Outcome names are the declarative validator types exercised by the mission.

Global # Track position Difficulty Primary learning focus Suggested tools Observable outcomes
1 Linux W1.1 Beginner Identify the current directory pwd Output equals
2 Linux W1.2 Beginner Inspect and navigate a directory tree pwd, ls, cd Current directory equals
3 Linux W1.3 Beginner Read the correct short handoff file ls, cat, less Output equals
4 Linux W1.4 Beginner Create directories and files ls, mkdir, touch Directory and file exist
5 Linux W1.5 Beginner Search recursively and filter matching files find, grep Output contains all required paths and excludes noise
6 Linux W1.6 Beginner Move a release artifact without losing content ls, mv, cp, rm Destination content equals; source is missing
7 Linux W2.1 Beginner Inspect and repair executable permissions ls, stat, chmod File mode equals
8 Linux W2.2 Beginner Inspect and export environment variables env, echo, export Environment value equals
9 Linux W2.3 Beginner Select the opening lines of a startup log cat, head Output equals
10 Linux W2.4 Intermediate Inspect processes and stop the faulty one ps, kill Target stopped; healthy process still running
11 Linux W2.5 Intermediate Inspect and extract an archive ls, tar Extracted content contains and equals expected data
12 Linux W2.6 Advanced Build a multi-stage log-processing pipeline cat, grep, awk, sort, uniq Report file content equals
13 Linux W3.1 Beginner Select the newest log lines cat, tail Output equals
14 Linux W3.2 Beginner Count error records through filtering or a pipeline grep, wc Output equals
15 Linux W3.3 Intermediate Sort and aggregate repeated alerts cat, sort, uniq Report lines equal
16 Linux W3.4 Intermediate Repair configuration text while preserving mode cat, sed, vi Content and mode equal
17 Linux W3.5 Intermediate Correct ownership and permissions together stat, chown, chmod Owner and mode equal
18 Linux W3.6 Intermediate Compare disk usage and identify the right target ls, du, sort, tail Output includes target and excludes distractor
19 Linux W3.7 Advanced Resolve a multi-fault production incident tar, sed, vi, chmod, ps, kill Content, mode, and process-state checks
20 Docker W1.1 Beginner List mission containers and start a stopped service docker Owned count equals; targets are running
21 Docker W1.2 Beginner Read bounded logs from an exited job docker Output equals recorded log
22 Docker W1.3 Beginner Identify a successful one-shot job by exit code docker Output contains logical name and exit code; count equals
23 Docker W1.4 Beginner Stop one worker while preserving metrics docker Target stopped; healthy target running; count equals
24 Docker W1.5 Beginner Restore two stopped services docker All targets running; count equals
25 Docker W1.6 Beginner Perform a mixed start/stop handoff docker Replacement running; retiring target stopped; count equals
26 Linux W4.1 Beginner Inspect and run a supplied report script cat, less, chmod, sh Report content equals
27 Linux W4.2 Beginner Make a focused configuration edit with a modal editor cat, vi Content and mode equal
28 Linux W4.3 Intermediate Repair, permit, and run a reusable report script cat, less, vi, sed, chmod, sh Report content/lines and script mode
29 Linux W4.4 Advanced Reason about child-shell directory and environment scope cat, less, vi, sed, chmod, sh, pwd, env Parent scope preserved; report and script state correct
30 Docker W2.1 Beginner Remove finished job containers while services keep running docker Jobs absent; services running; count equals
31 Docker W2.2 Beginner Read only the end of a long job log docker Output equals final log lines
32 Docker W2.3 Intermediate Replace a running but unhealthy replica with its standby docker Unhealthy target stopped; healthy and standby running; count equals
33 Docker W2.4 Intermediate Stop a restart-policy crash loop and surface its fault docker Target stopped; service running; count equals; output contains fault
34 Docker W2.5 Advanced Triage health and exit codes while preserving evidence docker Canary and failed job stopped; successful jobs absent; api running; count equals
35 Docker W3.1 Beginner Map which containers share which networks docker Output contains network name and members
36 Docker W3.2 Beginner Connect a container to a second network docker Required pairs share a network; web isolated from db; count equals
37 Docker W3.3 Intermediate Remove an unnecessary network path docker Batch isolated from ledger; required pairs still share networks; count equals
38 Docker W3.4 Intermediate Move a pair of services onto a private network docker Pair shares a network; both isolated from api; gateway and api connected
39 Docker W3.5 Advanced Segment a flat network and retire a stale one docker Tier pairs share networks; web isolated from db; legacy network and cron absent; services running

World progression

Linux World 1: First Day

The opening world establishes orientation and safe filesystem manipulation. It moves from observing location, through navigation and reading, to creation, recursive search, and a small state-changing incident. All six missions are beginner difficulty.

Linux World 2: The Logpocalypse

This world broadens the state model: permissions, environment, focused log reading, processes, and archives. Its first three stages are beginner-friendly, the next two combine inspection with mutation, and Stage 6 is the first advanced boss and sustained pipeline exercise.

Linux World 3: Production Friday

The third world reinforces text inspection, counting, and transformation while adding ownership and disk-usage reasoning. Its seven stages culminate in a multi-fault incident that combines archive extraction, configuration repair, permissions, and process control.

Linux World 4: The Automation Shift

The final Linux world moves from executing a supplied script to repairing reusable automation. It introduces the modal editor, executable virtual scripts, and the difference between child-shell scope and durable virtual state.

Docker World 1: It Works on My Machine

Docker Foundations progresses through listing, logs, sanitized exit status, targeted stop, multi-service recovery, and a mixed lifecycle handoff. Logical aliases hide real container names and IDs, keeping every lesson focused on observable state for exact attempt-owned resources.

Docker World 2: Container Triage

Container Triage separates evidence from clutter. It adds removal of stopped containers, log tails, health probes, and restart policies, then combines them in an advanced boss where the player must decide what to stop, what to remove, and what to keep for the postmortem.

Docker World 3: Network Plumbing

Network Plumbing teaches that containers can only reach each other over a network they share. It moves from reading network membership, through connecting and disconnecting existing containers, to creating a private network, and ends with an advanced boss that segments a flat network and retires a stale one. Every lab network is internal and owned by the attempt.

Curriculum evolution

The expanded map fills the early file-reading, focused log-preview, simple counting, supplied-script, beginner Docker lifecycle, Docker triage, and container networking gaps. Later curriculum work can deepen those skills through new declarative missions without weakening existing outcome validators or widening the Docker boundary casually.

Read Missions, hints, and progress for route, reward, and persistence behavior, and Mission authoring for the authoring checklist.

Mission content and its canonical success/incomplete coverage live in internal/mission/data and internal/game/missions_test.go. Use the repository's $add-mission skill when changing that content.