Wanderland

Wanderland Loom Pack

The markdown-graph engine — the surface that the oculus_* MCP tools, lantern rendering, and editor plugins drive — rebuilt as wanderland-core boundaries over an append-only overlay store. When you oculus_look / oculus_poke / oculus_link a node, loom boundaries are what run. Part of the pack catalog in wanderland-dev-ai-reference; this is its deep-dive.

Source: /Users/graemefawcett/working/wanderland-loom-pack. Verified 2026-07-30.

The model

A slug is a stream of mdast tokens with holes. Sections, fences, and virtual-fences own token ranges within that stream. Reads are overlays (compose a baseline + its pokes at a level); writes are splices (append a typed record). Every record is typed at an address on core's append-only :store. Loom is policy over a dumb log — the store just appends; loom decides what "the current content at this address" means.

Adapters it consumes

Loom registers no adapter kind. A site mounts these and loom's boundaries use them:

Adapter Role Used by
:store the append-only crossing store 26 boundaries
:remark markdown → mdast bridge loom_ast, loom_peek
:ruby_runtime Ruby fence bridge (JSON-RPC 2.0 over stdio, out-of-process) loom_exec_ruby
:python_runtime Python fence bridge loom_exec_python

The runtime bridges run fences out of process so a fence can't block the engine — a Ruby fence talks JSON-RPC 2.0 over stdio to a worker on the far side of :ruby_runtime (bridges/ruby/runtime.rb).

Boundaries (34)

All prefixed loom_, under lib/wanderland_loom_pack/boundaries/.

Parse / ingest pipeline (the loom_ingest archetype chains these):

Content CRUD (via the Io seam):

Graph / links:

Read / render:

Code execution:

Lifecycle:

Archetype: loom_ingest

lib/wanderland_loom_pack/archetypes/ingest.yml. Slots: ast → section_markers → fence_markers → pattern_match → write_records. Each slot reads its upstream via !Context for_boundary.<slot>.<field>. (The entry comment mentions a render chain too, but only ingest.yml ships.)

Support

How it maps to the oculus tools

The oculus_* MCP surface is loom under the hood: oculus_look ≈ loom_peek / loom_page; oculus_poke ≈ loom_poke (or loom_poke path=content → a content-replacing compose); oculus_link / oculus_get_edges ≈ loom_link / loom_edges; oculus_add_tags / oculus_find_by_tag ≈ loom_tag / loom_tagged; oculus_execute_fence ≈ loom_execute_fence; oculus_undo / archive ≈ loom_undo / loom_archive.