The curriculum map for the tutorial corpus on wanderland.dev. Where the style guide names voice and shape, this storyboard names the concept order — what each tutorial introduces, what it assumes, where it sits in a series. Read it before drafting a new tutorial or updating an existing one so the layering stays consistent: don't reintroduce a concept already covered upstream, don't skip a foundation a downstream tutorial leans on.
The corpus today is two arcs: the Getting Started trio that scaffolds a new wanderland-core application, and the Engine in a Box series that builds a real puzzle engine on top of that foundation.
Three posts, taken in order. By the end the reader has a working my-app/ directory with custom boundaries, scenarios passing under three test lenses, and an HTTP adapter wrapping external calls — the framework's surface for a typical microservice.
Scope: Scaffold a new wanderland-core application from empty directory through running tests, in 21 numbered steps.
Introduces:
Gemfile, config.yml, config.ru, Rakefile, lib/<app_name>/boundaries/Wanderland.boot(config_path) and the RuntimeWanderland::Boundary.register)boundary: and name:)--type http, --type cli, --type testscenarios: in config.yml--type test runner, X-Wanderland-Verify HTTP probe, Scenario.rspec_describe! rspec hook--wanderland-verify CLI flagAssumes: Ruby fundamentals, Bundler.
Scope: Walk through writing two real-world HTTP-calling boundaries (baby_lookup, babies_by_origin) end-to-end with halts and scenarios.
Introduces:
identity, scopes, capabilities, input_shape, output_shape, when_shapeinput_shape)Net::HTTP.get_response directly inside a boundary (foreshadowing adapters)Assumes: Hello World — project structure, scenarios block, custom boundary basics. Ruby HTTP basics.
Scope: Port the two HTTP boundaries from Writing Boundaries onto the HTTP adapter; record cassettes; introduce per-scenario mocks; toggle modes via env.
Introduces:
adapters: [:http], route mounts the adapter, framework wires the rest)live, replay, mock--wanderland-record-to) and cassette file format!Fixture (lift cassette), !Merge (twist cassette)WANDERLAND_HTTP_MODE)Net::HTTP escape hatchAssumes: Writing Boundaries — HTTP boundary code. Hello World — config.yml, scenarios.
Six posts, taken in order, drafted iteratively. The series scaffolds sprout-engine — a wanderland-core application that runs grid-shaped workflows for the puzzle UI in sprout-shorts-context-accumulating-dag. Each post extends the previous one's running engine.
Scope: Scaffold sprout-engine from empty directory to running Docker container with the full introspection surface answering against an /echo route.
Introduces:
/health, /status, /healthcheck/inspect/routes, /inspect/route/:name, /inspect/boundaries, /inspect/boundary/:name, /inspect/diagnosticsCORE_ROUTES (framework-mounted, immutable)enforce_denials, verify_route, trace_emit, format, sealuser_chain vs compiled_chain)Assumes: Hello World — project bones, routes. Bundler, Docker basics.
Scope: Add a grid route (POST /run, POST /run/step) that walks Nita's grocery errand. Introduces run_grid, the located-context model, ShapeMatcher in depth, and pause-resume mechanics.
Introduces:
grid: YAML shorthand → synthetic chain: [run_grid] slotrun_grid system boundary; chain-slot architecture (no special grid path){ id, position, context, awaiting?, halted? } — no separate state fieldWanderland::Context access patterns: bracket (context["bag"]), dot (context.boundary_name), chainable filters (signed, for_boundary, by_identity, with_capability)/run runs to completion, /run/step advances one tickargs_override for resume after a pause:signals:stop:grid:dead-end, unrecoverable)count, gte, in_order, first, nth, etc.; custom predicate registrationoculus_fence boundary (calls oculus's stateless fence-execute API; surfaces session_id)emit_signal boundary (returns crossing with :signals:web:<action> type_addr)Assumes: Engine in a Box #1 — sprout-engine scaffold, introspection surface. Hello World — scenarios, --type test, rspec hook. Writing Boundaries — boundary registration anatomy.
wanderland-dev-tutorial-engine-web-signalsScope: Fan events[] out via window.lanternBus; drive <oculus-node> scene swaps; opt into the full trace via X-Wanderland-Trace.
wanderland-dev-tutorial-engine-puzzle-componentScope: Native <wanderland-puzzle> Custom Element. Render-from-state, Run / Step buttons, walks events[], calls lanternBus.emit(action, payload).
wanderland-dev-tutorial-engine-puzzle-ideScope: Palette, placements loader, modeline-base header, footer modelines, trace panel with playback controls, harvests panel.
wanderland-dev-tutorial-engine-shorts-integrationScope: Drive sprout-shorts-context-accumulating-dag scene swaps from the puzzle. Wire wanderland-engine into the larger sprout compose orchestration.
Quick "where is X introduced?" lookup for the active corpus.
| Concept | Tutorial |
|---|---|
Project structure (Gemfile, config.yml, ...) |
Hello World |
| Custom boundary registration | Hello World |
| Routes — single boundary | Hello World |
| Scenarios block | Hello World |
--type test runner |
Hello World |
X-Wanderland-Verify header |
Hello World |
Scenario.rspec_describe! |
Hello World |
| Boundary anatomy in depth | Writing Boundaries |
| Halt semantics | Writing Boundaries |
HTTP boundary (raw Net::HTTP) |
Writing Boundaries |
| Adapter concept | Adapter Modes |
live / replay / mock modes |
Adapter Modes |
| Cassette recording | Adapter Modes |
!Fixture / !Merge mock tags |
Adapter Modes |
WANDERLAND_HTTP_MODE env override |
Adapter Modes |
Liveness triptych (/health, /status, /healthcheck) |
Engine in a Box |
| Introspection endpoints | Engine in a Box |
CORE_ROUTES |
Engine in a Box |
Default injections (enforce_denials, ...) |
Engine in a Box |
| Diagnostics cache | Engine in a Box |
| Dockerfile / docker-compose | Engine in a Box |
| Grid routes | Walking the Grid |
run_grid boundary |
Walking the Grid |
| Located context | Walking the Grid |
Wanderland::Context (in tutorials) |
Walking the Grid |
| Cells, springs, harvests, connections | Walking the Grid |
| Stateless stepping | Walking the Grid |
Pause / args_override / resume |
Walking the Grid |
| Dead-end halt | Walking the Grid |
| ShapeMatcher predicates | Walking the Grid |
oculus_fence boundary |
Walking the Grid |
emit_signal boundary |
Walking the Grid |
When drafting or updating a tutorial:
wanderland.dev