Executable specification

The client–server dialog

The boat's half of the conversation: the little state machine every party runs over the same events, the channel's idempotence, the alert rule, the corrected-time ladder, and the schema validator. tools/editor-drive/drive-race.mjs drives the same protocol against a live server, which is where the sequence is proved; this is the part that has no wire in it.

The same assertions tools/run-js-tests.mjs runs in the Maven build, imported from dialog-test.js rather than copied, so the page and the build cannot disagree.

Running…