Reading the world graph

The graph inspector is both a cartographer's table and a continuity debugger. It shows how entities are actually connected, which can differ from what descriptions or memories claim. Open the deployed inspector, authenticate for admin access, and connect to the live server or load a snapshot file.

Read each top-level view

ViewWhat it revealsQuestions to ask
Maprooms and directed exitsAre routes reciprocal, named, and intentionally gated?
Regionsgeographic hierarchyDoes every room belong to the right place and scale?
Socialcharacters and social/categorical edgesAre bonds directed correctly and relationships plausible?
Questsquests, objectives, rewards, status, acceptanceIs the arc structurally complete and current?

Use the view that matches the design question. A complete map does not prove a valid quest graph, and a clean social graph does not prove characters share a room.

Drill into containment

Enter a room to see occupants, items, containers, and other contents. Enter a character to see inventory and equipment. Open a container to follow nested contents.

Containment review catches common mistakes:

Turn on parent nodes when you need to understand how the selected entity fits into a larger chain.

Inspect components and outgoing edges

Selecting a node opens its ECS details. Compare structured state with the rendered story:

Click relationship targets to follow causality. For a quest, inspect objective and reward entities. For an obligation, follow debtor and creditor. For a character, follow controller, home, social, ownership, and quest relationships.

Use the event feed as a timeline

When connected live, enable events. The feed shows typed domain events independently of the debounced graph refresh. Use it to correlate attempted play with authoritative change:

character action
→ command result event
→ changed components or edges
→ consequence event
→ visible projection update

If dialogue announces a repair but no repair event or state change follows, the repair did not happen. If an event fires repeatedly, inspect the driving component and whether completion or cleanup ever changes it.

The feed is recent operational evidence, not permanent lore. Important outcomes still need persistent state, records, history, or memory.

Audit one expansion seam

Before adding content, select the anchor entity and trace outward:

  1. For a new room, inspect the door, containing room, intended direction, and nearby region.
  2. For a new character, inspect the room, existing cast, available controller, and needed resources.
  3. For a new item, inspect the parent container, current custody, matching actions, and any quest dependency.
  4. For a new event, inspect active incidents, open obligations, schedules, and current room population.

This context is exactly what a good LLM patch prompt should summarize.

Look for graph smells

SmellLikely problem
Many detached controllersruntime controller cleanup or handoff lifecycle
Many uncontained portable itemsspawn or consumption lifecycle
Several same-type edges to one singleton target rolemissing cardinality enforcement
Quest children with no quest parentorphaned objective or reward
Incident-spawned entities after resolutioncleanup consequence failure
Growing obligations with repetitive textspeech interpretation or resolution lifecycle
Rooms only reachable one wayaccidental missing reciprocal exit
Character goal contradicts component statestale authoring state

Some entities, such as controllers, history records, obligations, and world services, are intentionally not physically contained. “Uncontained” is only a smell when the entity's kind should have an owner or parent.

Inspector review

Next, use that context in LLM-assisted world patches.