_model: project --- schema_version: 1 --- project_id: xzbt-ngn --- title: XZBT-NGN Exhibit Engine --- summary: A generic single-exhibit host for XZBT Exhibit Contract 5.3: session negotiation, descriptor-driven control discovery, presentation-surface rendering, state inspection, and set/invoke operations, with no exhibit-specific vocabulary in the host. --- status: active --- started: 2026-09-13 --- author: cgcha --- repository_url: https://git.labyricorn.com/Labyricorn/XZBT-NGN --- default_branch: main --- tags: xzbt, xzbt-ngn, exhibit-engine, contract-5-3, multi-surface, javascript --- body: | XZBT-NGN is the host, orchestration and integration environment for exhibits that speak the XZBT Exhibit Contract. It does not replace an exhibit; it extends one. Everything an exhibit offers is discovered through the contract's target surface and rendered generically, so no exhibit-specific vocabulary is hard-coded anywhere in the host. ## Completed work The contract-boundary MVP is implemented and verified. A single unmodified host negotiates a session, requests `describe`, renders discovered capabilities and targets grouped by the exhibit's own categories, reads authoritative state, submits set and invoke operations with full descriptor validation, displays events with source and sequence, tracks registry and state revisions, and recovers from synchronization loss. That same unmodified host drives five maintained reference exhibits -- Aquarium, Planetarium, Haunted House, Museum Gallery and SciFi-XZBT -- with no fixture-specific logic. Contract 5.3 multi-surface support is complete. The host discovers presentation surfaces from `describe`, resolves their URLs against the supplying exhibit's document URL inside a same-origin boundary, and renders each in a local pane that carries no contract session of its own. Museum Gallery exercises three surfaces; SciFi-XZBT declares a console surface plus an Observation surface that attaches to the console's single authority and never creates a second one. Verification is automated and repeatable: 154 tests pass under `node --test` with no npm dependencies and no build step, and the loopback server exposes only `public/`, `src/` and `test-fixtures/` while denying paths that escape them. ## Formal design work This repository is the canonical home of the XZBT Exhibit Contract Specification (5.3 current; 5.2 retained as its historical predecessor, additively superseded), the XZBT Exhibit Authoring Guide, and the NGN Implementation Plan. The multi-surface architectural model was specified in full before implementation and fixes the Step 6 / Step 7 boundary at the schema level: a surface descriptor may name a document the host can load, and may never name a display transport, casting protocol, network endpoint or device class. ## Future work Step 7 -- display endpoints, meaning where a surface is physically shown -- is specified by contrast in the multi-surface model but is not started. Casting and remote displays, MIDI, MCP, webhooks, scenario authoring, recording, telemetry connectors, integration adapters, packaging, multi-exhibit orchestration and persistence all remain unimplemented; the host keeps in-memory state only. Five non-blocking follow-up items requiring sustained human observation remain open from the Step 6 closure.