← indexProefhaven test scenario — "one afternoon at the lock" source: draft/testdataset/SCENARIO.md

Proefhaven test scenario — "one afternoon at the lock"

TEST DATA, NOT FOR NAVIGATION. Fictional geometry in open water (~52.00N 4.00E), deliberately overlaying no real port. Companion to ZZASI001_base.gml; poll responses in pollresponses/.

Purpose. A conformance walk, S-164-style: each step states the stream input and the single correct portrayal outcome. A viewer that renders every step correctly has implemented the portrayal guide; steps marked ⊘ MUST also fail/grey exactly as stated — they test the safety rails, which is most of the point.

The scenario runs T0–T9. Each Tn is a complete poll response (whole-state snapshot, per C1 — note that a feature absent from a snapshot has simply not changed; the responses repeat all features for readability).

TEvent (the story)Stream changeCorrect portrayal
T0Quiet afternoon. Everything normal.all features report; lock=vesselManagement, basin=operational, gates W closed/E open, spans closed, sluice not flowing (fill reports flow, not aperture), berth1 clear, berth2 taken+Bravo, anchor berth reserved, anchorage clear, fairway clear, MTI area operational, crane idle at start pos, ponton operationallock ○white · basin ○white no » · gate W ○black, gate E ○white · spans ○black · sluice ○black no » · berth1 ○white · berth2 ○black + ⚑B · anchor berth ○orange · anchorage ○white · fairway ○white · crane ○black · ponton ○white · MTI area drawn nowhere
T1A lockage begins: W gate opens for an inbound vessel.gate W = moving — no directionSense, a gate's leaf travel has no 2D directiongate W ○blue, no chevron — blue alone says in transition (PG 5.2.1); everything else as T0
T2Chamber filling toward canal level. Meanwhile the fairway reach is declared restricted, on two counts at once.gate W closed; basin = levelling, sense=2; fairway = restricted plus operationalSubStatus 3 and 4 (depth and speed restricted — the repeatable case)gate W ○black; basin ○blue + » pointing east (090° = against orientation) — chevron toward the level being made; fairway ○orange, no extra symbol — both restriction kinds appear only on selection (PG 4.3/4.4)
T3Crane starts a container move: slews out over the water while travelling along the quay.crane = partsOverWater; position steps 12 m east (outside the 5 m movement buffer) — no movement state and no bearing are sentcrane ○orange + » along the course made good — orange dominates blue, and movement survives on the chevron because the client derives it from position (B2/8.3, PG 5.5)
T4The SCADA link to the sluice dies. No sluice report arrives for > 2× updateInterval.sluice absent past its declared 300 ssluice ○grey. NOT red, NOT last-value — a broken sensor cannot close a waterway
T5A corrupt source asserts an illegal value: berth1 reports operationalStatus=14 (waterManagement — not permitted for coa 8).berth1 = 14berth1 ○grey (6.1b service sanity). A viewer that draws blue FAILS this step
T6The duty officer declares the lock obstructed — floating debris in the approach.lock = obstructed (human-attributed)lock ○red; basin, both gates and the lock's span also ○red (R41 · PG 8.1.1), each carrying the duty officer's name and a note that the obstruction was declared on the lock. No chevron on any of them. Bridge + its spans unaffected. Changed 2026-08-09: the components used to grey — which claimed not to know something that had just been declared.
T7Meanwhile the bridge keeper goes off duty; bridge not in operation.bridge = notInOperationbridge ○black; its spans keep their states — opening span ○black, fixed span still absent (8.1: bridge n.i.o. does NOT grey spans)
T8Ponton Bravo breaks its mooring and drifts out of the kadezone.ponton position outside MTI area polygon — the stream reports it honestly; the containment test is the client'sponton not drawn at all — not at the drift position (untrusted), and not at its home position either, because the product now holds positive evidence it is not at home (PG 8.4/B3). A drifting object is S-124's business.
T9Debris cleared; the officer lifts the obstruction. Sluice link restored, spuiing seawards.lock = vesselManagement (human clears own red); sluice = flowing, sense=1lock ○white; children resume live states instantly (no operator ack — 6.2); sluice ○white + » pointing seawards
T9b⊘ Regression guard: automation attempts to clear a red (replay of T6 state where a machine writes lock=vesselManagement with no human attribution).write REJECTED at API (R37/R11)portrayal unchanged — the write never reaches the stream. This step tests the server, not the viewer

Coverage checklist — every load-bearing rule appears at least once: pure fill function (T0) · moving barrier draws blue with NO chevron (T1) · chevron presence/direction, both senses (T2, T9) · orange dominance (T3) · update-rate grey (T4) · illegal-value grey (T5) · parent propagation, both kinds and now distinguishable — obstructed ⇒ components RED (T6), not-in-operation ⇒ untouched spans (T7) · MTI left-area suppression (T8) · human-only red, set and clear (T6, T9, T9b) · flags essential (T0, berth2 ⚑B persists every step) · exception-only spanFixed (absent T0–T9) · MTI area never drawn (all steps) · operationalSubStatus: flag-drawing values (T0 ⚑B) and non-drawing restriction kinds, repeated on one feature (T2).

Not covered here (needs a second scenario): certificate/edition refusal at the server, service levels and tier suppression, Level 2 suppression of the charted object, two-authority boundary.


© 2026 W.D. de Pooter · Independent marine consultant and developer · fabian@maraton.consulting Licensed under Creative Commons Attribution 4.0 International. SPDX-License-Identifier: CC-BY-4.0

activeAssets — rendered from draft/testdataset/SCENARIO.md by tools/md2html.py