Skip to content

July 14, 2026

Loop-free route frontiers

A real Wikidata round exposed a trivial reverse path: Austria could navigate to UNESCO, which then offered Austria again through the same membership statement. Inverse relationships remain valuable source data, so the graph bundle was not altered.

Instead, Webwoven now keeps the active forward route cycle-free:

  • the API removes entities already in the active route before ranking the six visible choices;
  • hint candidates use that same playable frontier;
  • the pure navigation domain rejects active-route targets as a server-authoritative invariant;
  • the explicit Back command pops the active route, allowing a deliberate retry afterward; and
  • the deterministic browser fallback mirrors the production rule.

Focused domain, API, and browser tests cover reverse-edge filtering, immutable rejection, empty frontiers, and Back behavior. No provider credentials or runtime AI calls were introduced.

Map clearance and stage following

Mobile measurement showed that the current and goal cards were only 1rem above their 3D tokens, while the current token ring extends roughly 2.2rem from its anchor. Both cards now use one shared 2.5rem clearance at every breakpoint. Follow and Back also pan the newly appended stage into the left third of the viewport over a synchronized 320ms camera transition while retaining the player's zoom. Direct manipulation cancels the automatic movement, and reduced-motion mode skips animation. The motion policy now observes both the in-game preference and the operating-system preference; keyboard focus also reveals an offscreen node, and Fit map lowers its deterministic zoom floor when needed to keep exceptionally wide histories inspectable.

A later desktop check exposed a second, independent collision: the widest connection card extended roughly 5px into the centered goal card. Deterministic column spacing is now 30rem instead of 26rem, leaving the active connections and goal in visibly separate lanes at every camera zoom. The domain layout, DOM labels, SVG fallback, and Three.js scene all consume the same coordinates.

Direct connection cards

The move frontier now uses each semantic card as its own graph endpoint. Ordinary blue choice tokens, card numbers, and repeated GO → labels were removed; the rendered line meets the card border on desktop and mobile. Native button behavior and fact-grounded accessible names remain intact. The current marker also no longer carries a large black halo: its vermilion token is sufficient to show position. Goal, breadcrumb, and discarded-route tokens remain visible. On narrow screens the camera keeps the active card edge inside the viewport after initial fit, Follow, and Back, while preserving the readable zoom floor appropriate to the available width.

Contextual dead-end recovery

An exhausted real-data branch previously left its passive instruction at the center of the full world, which could be far outside the player's panned viewport. The dead-end state is now anchored to the current node and presents one non-modal Back to {entity} action with the B shortcut and the one-move cost. The label comes from the server-owned navigation stack rather than the immutable visible trail, so it remains correct after earlier Back commands. Historical node clicks continue to open inspection only. The recovery action uses the Ink button treatment with an Ochre interaction outline, keeping it distinct from vermilion current-position cues. Desktop and phone browser tests cover the complete recovery flow.

Reachable goals now use the same lane-centered vertical geometry as ordinary connections while retaining their Ochre goal token and finish treatment. The card sits to the right of its marker instead of above it, so a goal in any deterministic frontier lane cannot intrude into the adjacent connection card. The browser regression fixture keeps another grounded London connection beside the reachable United Kingdom goal and verifies their measured rectangles never intersect.

Historical facts and presentation ownership

Resolved decisions now publish one destination choice with a deterministic primary summary plus a token-free connections collection containing every grounded fact that supported the move. The browser normalizes this contract as well as older snapshots that omitted the collection, so a read-only historical inspector never loses a second relationship to the same entity.

The API presentation layer was split into entity, session, Daily, and room modules. Route-safe frontier selection now has one pure domain owner shared by sessions and hints, while route handlers remain responsible only for transport. Persisted navigation also rejects legacy cyclic stacks and keeps the immutable visible trail distinct from the reversible active route.

Results and settings simplification

The results route now keeps attention on the completed path and next-route actions: the spoiler-free clipboard control and its application handler were removed. The optional high-contrast mode was also retired across the settings UI, preference model, styling overrides, and browser coverage. Reduced-motion support remains available both as an explicit preference and through the operating-system media query.