NewMCP agent API — drive Promenade from your own AI agent
Rust · WebAssemblyView · TypeScriptObject-centricViews

Metro Map

run.promenade.metro-map

Renders an object-centric process as a transit-schematic 'metro map': activities become stations shared across object types, object types become color-coded lines routed with 45°-only turns and consistent parallel lane order, top to bottom in roughly process time order. Discover it from an Object-Centric Petri Net (choice/parallelism drawn as X/+ gateways read off the net structure) or from an Object-Centric Directly-Follows Graph (no gateways, but real per-station/per-arc frequencies and a complexity slider). Both mine their upstream model transparently as an internal stage.

Produces

  • OCMetroMap

Runtimes

  • Rust · WebAssemblyCompiled to WebAssembly, runs in the page or on an engine
  • View · TypeScriptRenders an artifact inside a sandboxed iframe

Versions

VersionReleasedSizeNotes
0.19.5latestInvalid Date308 KB—
0.19.418 Sept 2026307 KBSink markers now center under the edges that actually target them after final track allocation. Alignment uses graph endpoint identity rather than coincident column/rank geometry and retains marker, caption, and unrelated-route clearance.
0.19.318 Sept 2026306 KBA centered join's single outgoing branch now stays on the diamond's final centerline for its whole initial vertical run, removing the S-shaped hook caused by briefly reconnecting to the old pre-centering lane.
0.19.218 Sept 2026306 KBJoin diamonds now sit at the midpoint of their incoming track span, and the outgoing branch starts from that same adjusted center. The shared regression covers an asymmetric two-in/one-out gateway and asserts both relationships.
0.19.118 Sept 2026306 KBIncoming join-gateway branches now retain separate allocated tracks through a vertical final approach and stop just above the diamond's bounding box, instead of converging into overlapping slanted arrowheads. Split gateways continue to fan out from the marker. Regression coverage asserts distinct vertical arrivals at the gateway's top bound.
0.19.018 Sept 2026306 KBThe view-side layout — re-laying out the filtered subgraph, track allocation, routing and the drawn-geometry refinement — is now a shared `metro-layout` package rather than code copied into the Variant Metro plugin, and both plugins run and gate on its one invariant suite. This plugin's own drawing is unchanged by the move. Separately: an object type's start marker now sits one rank above the activity it feeds whatever the stability setting. The ranking only ever pushed nodes down from a floor, so a node with no predecessor never moved; with "Preserve layout stability" off that floor is one shared value per component, and every start marker collapsed onto the top row. Markers are annotations, not process steps, so they are now placed from the visible topology alone. Stability-on output is unchanged byte for byte, and the three drawn overlaps 0.17.6 had to baseline are gone, so that allowance was removed.
0.18.217 Sept 2026305 KBThe standby screen no longer labels its three interchanges. The names were legible, but they were the one thing on that screen that could be read as the map being computed. The larger interchange rings stay, which keeps the Budapest shape recognisable without naming anything.
0.18.117 Sept 2026305 KBThe long wait before a large map appears is 30-40x shorter: Order Management (18 activities, 105 arcs, station captions on) took about 2.9 s of blocked main thread to lay out and now takes about 70 ms. Profiling put essentially all of it in the drawing refinement's overlap verifier, which compared every pair of segments in the drawing and asked the "same metro line?" predicate before any cheap geometric test. It now scans only segments whose lines can coincide, asks that predicate last and memoised, answers a proposal with only the overlaps that touch what it moved, reuses one scratch copy of the drawing instead of cloning it per proposal, and skips node boxes a polyline cannot reach; the re-layout's transpose pass carries its crossing count forward. No pixel moves: the full drawing hashes identically across four real maps x two station styles x four detail levels x stability on/off, and the invariant check's own output over its 27 graphs is byte-for-byte unchanged.
0.18.017 Sept 2026303 KBThe two long waits are no longer a blank screen. Discovery now opens its panel immediately (the view opts into the host's run-bound live preview) and both that wait and the layout pass for a large map show an animated Budapest metro schematic, with trains running station to station, plus the run's own progress. The top-bar indicator gains a Cancel button. The animation is compositor-driven CSS on transform/opacity, so it keeps moving while the layout pass blocks the main thread. Also fixes a latent race in receiving saved view settings: host handlers are now registered before the handshake, not from a React effect.
0.17.610 Sept 2026299 KBRefined drawing geometry without changing activity ranks or the frequency tie-break: short unbranched source tails now align to their arrival ports when clearance permits, removing unnecessary sparse-view bends, and obstructed interior vertical runs detour around actual node footprints and sink captions while gateway branches stay separate up to the marker. Per-corner chamfer limits remove overlapping diagonal sections without flattening every corner. Added a Logistics fixture and checks at 14/77 and 38/77 in both station styles, with stability on/off.
0.17.57 Sept 2026296 KBThe OC-DFG N% shown readout was frequency-weighted, not a plain arc count, so it could read e.g. 85% shown next to 8/22 arcs. pct is now a plain shown/total arc count, matching the X/Y arcs readout right next to it and matching 0.17.4's own seed target.
0.17.47 Sept 2026296 KBCorrected 0.17.2's detail-slider default: it meant 50% of the slider's own numeric scale, not 50% of arcs actually shown, which for unevenly-sized object types could show far less than half the graph. The seed now searches for whichever slider position first brings the combined arc count to about half of every arc in the graph (e.g. 70 arcs total -> shows ~35), regardless of how many object types there are or how unevenly sized they are.
0.17.36 Sept 2026296 KBFixed a flicker on Animate flow for a line's first/last (dashed) edge: the static 8 4 dash pattern and the flow pulse's own independent travelling dash beat against each other on the same path. The base line now draws solid whenever Animate flow is on.