chiark / gitweb /
changelog: document recent changes
[otter.git] / CHANGELOG.md
1 Version 1.2.1 - 2022-06-26
2 ==========================
3
4 Bugfixes
5 --------
6
7  * Fix "flickering drag select" effect in Chromium, by preventing
8    propagation of mouse events which Otter's JS has handled itself.
9
10  * Fix documetation of
11     - Date of Version 1.2.0 in this changelog
12     - Format version status and release dates
13
14  * Developer docs: improvements to internal release checklist.
15
16
17 Version 1.2.0 - 2022-06-24
18 ==========================
19
20 General changes to game and UI
21 ------------------------------
22
23  * Counting pickup decks, hands, etc., now include un-occulatable
24    pieces in their count, not only occultable ones.  This means
25    counting piles can now be used to count unoccultable pieces.
26
27  * Fiddle with CSS to try to get mouse cursor to update more promptly.
28    (This is still not perfect, probably due to browser misbehaviour.)
29
30  * otter(1): When printing game access URL, say in message that it's private
31
32  * Change monospace font to DejaVu Sans.  Reportedly the previous font
33    was not always available, causing the chess clock to perhaps misrender.
34
35  * Add piece descriptions to more messages.
36
37  * UI improvements relating to selecting, wresting, and dragging:
38    - Mouse cursor shows differently when in wresting mode.
39    - Allow backspace to delete typed special count.
40    - Leave wresting mode when the user presses space.
41    - Allow rectangle select drag to start on pinned pieces. hands, etc.
42
43 Otter CLI
44 ---------
45
46  * Provide set-access subcommand.  Previously the game ACL could only
47    be adjusted by resetting the whole game, or abstruse alter-game-* runes.
48
49  * fix typo in usage message part concerning `otter reset`.
50
51 Game client UI fixes
52 --------------------
53
54  * Split a banknote (currency) when the user makes a counted click,
55    even if they are currently holding the note itself.
56    (previously this would simply unselect it).
57
58  * When pieces are newly inserted (inclidng on game reset), properly
59    record their description (for use in messages) and bbox.
60    Previously, the description would show as "undefined" until page reload.
61
62  * When pieces are deleted (including on game reset), properly remove
63    the client's idea of any active occultations they might have had.
64    Previously, "ghost" occultations would remain, causing dotted-line
65    grasp highlighting in places where the hands etc. were.
66
67  * When a player changes their nick, update this in the clients, so
68    that the new nick appears in the info pane and in the various affordances.
69
70  * Fix minor bugs in mouse click handling corner cases.
71
72 Documentation
73 -------------
74
75  * Correct the description of the shapelib group parameter `desc_template`.
76    (Previously this wrongly said the parameter was `desc`.)
77
78 Demo (testing) game changes
79 ---------------------------
80
81  * Increase table size.
82  * Add a pickup deck.
83  * Fix a misindent in the spec file.
84
85 Internal and testing chnages
86 -----------------------------
87
88  * Server/client protocol change: Rename AddPlayer to SetPlayer.
89  * apitest: Suppress some hyper log messages by default.
90  * Add two debug console.log's to the JS code.
91  * Refactorings and internal comment updates.
92
93
94 Version 1.1.0 - 2022-05-26
95 ==========================
96
97 Bundle format
98 -------------
99
100 Introduced bundle format versions, and bundle format version `2`.
101 Bundle format version `1` is still supported.  There are significant
102 changes and improvements in version `2`, available by writing
103 `format=2`.  See "Bundle compatibility" in the documentation.
104
105  * Handling of piece size and angle specification overhauled.
106  * New and better template substitution syntax.
107  * Fixed piece angle specification in game specs.
108
109 Breaking change to otterlib CLI program
110 ---------------------------------------
111
112  * otterlib (the library preview utility, not normally needed for bundle
113    development) now needs to know the nwtemplates directory (so it can
114    properly process etc. magic library items).
115
116 New features
117 ------------
118
119  * Dice, via the `Die` piece type.
120  * Currency (money, and similar things), via the `Currency` piece type.
121  * Shape libraries can provide canned "magic" items
122    (which are then based on the library's own image(s).
123  * `stack_pos` parameter for `PickupDeck` pieces, specifying where the
124    "neat pickup deck" should appear, so it doesn't have to central.
125  * otter CLI client: Allow uploading a directory directly as a
126    bundle zipfile (helpful for bundle development).
127  * Include piece description in some log messages.
128
129 Fixes and improvements
130 ----------------------
131
132  * Do not randomly panic when trying to print truncated debug output
133    for non-ASCII piece HTML.
134  * Set default fonts for SVG processing: in bundle SVGs, at all (so
135    that text is not elided); in builtin libraries, more widely
136    (without effect on the existing pieces).
137  * Notice errors during JS startup, and display them.
138  * Correct sense of pin/unpin log message.
139  * Shape library previews: fix (and improve) the HTML (from otterlib).
140  * Fix a tiny rendering error in arrowheads.
141  * Test suite: `childio`: work around a Linux kernel race bug: you can
142    sometimes reap a child and then write to its pipe without EPIPE.
143  * Build system: run miri with +nightly, so that tests work when stable
144    Rust is the default.  Document that these tests require nightly.
145  * Correct an error message about JSON serialisation.
146  * Remove some direct stderr debug prints from production code.
147  * Log message colourisation on a tty now leaves the logs more readable.
148  * Some improvements to bundle/shapelib loading error messages.
149
150 Docs
151 ----
152
153  * Dcouemnt the semver stability promises.
154  * Publish the docs to an Otter-version-specific directory, so that
155    old docs versions are retained.
156  * Fix some formatting errors and typos.
157  * Correct some leftover todos.
158  * Clarify extra field syntax in shape library catalogue `files` entries.
159
160 Protocol and model enhancements
161 -------------------------------
162
163  * `multigrab`: pieces that can capture the number of pieces the user
164    says to grab, and instead handle the whole multigrab operation.
165  * `fastsplit`: pieces that can be split and merged during play
166    without having to rewrite the aux save file (containing SVG images).
167  * Non-mixing OccultIlk, for pieces which always remain distinguishable.
168  * Special rendering instructions, for pieces whose display involves
169    bespoke code in the TypeScript.
170  * OpOutcomeThunk system to allow piece implementations to be reinvoked
171    with an ability to make much wider mutable borrows.
172
173 Build system, internal changes, etc.
174 ------------------------------
175
176  * Update to Rust 2021.
177  * Break out an additional `otter-support` crate (to try to
178    improve incremental build times).
179  * Use `ambassador` macro crate to help delegate trait impls.
180  * When formatting the Rust docs, pass `--document-private-items`.
181    (The Rust doc tree is for Otter developers.)
182  * Rationalised and sanitised the item import (`use`) practices.
183  * Refactoring in the test suite to support new tests.
184  * Fake time facility for testing.
185  * Concrete protocol: more Quiet PieceUpdateOps.
186  * Work around inkscape extension fail-to-save bug (seen in recolour).
187  * Reorganised and shuffled about `Outline` types.
188  * Avoid saving various things to savefiles that aren't needed
189    (mostly `None`s).
190  * Add some internal documentation about `ModifyingPieces`.
191  * Code motion to better organise shapelib.rs and utils.rs
192  * Centralised some UI properties in ui.rs.
193  * Made some type names more consistent (eg `GOccults`, `Catalogue`).
194  * Renamed some PacketFrame types etc. from MgmtChannel.
195  * Other minor improvements.
196
197
198 Version 1.0.0 - 2022-04-02
199 ==========================
200
201 Significant changes
202 -------------------
203
204  * Compile on stable Rust.
205  * Uses actix-web rather than Rocket (should be similar in overall
206    functionality but there may well be behavioural changes).
207  * Always listen on localhost:8000 by default regardless of `debug` config.
208    But, support explicit configuration of listening addresses.
209  * Do not sometimes leak (in game log) piece identity of face-down cards.
210
211 Minor improvements
212 ------------------
213
214  * Add short crate-level docs with reference to website etc.
215  * Fix inconsequential misacceptance of some odd-length hex byte strings.
216  * Fix some almost-incosequential short write bugs (might manifest as races).
217  * Typo fix in one error message.
218
219 Build system
220 ------------
221
222  * Turn on integer overflow checks for release builds.
223  * Don't override environment's SPHINXBUILD or NAILING_CARGO.
224  * Update dependency versions.
225  * Skip some unnecessaary miri runs of certain tests.
226  * Support for controlling the Rust version via RUST_VERSION.
227  * `make deploy` MUSL build is in release mode by default.
228  * Document that build now requires 6G rather than 10G.
229
230 Internal improvements
231 ---------------------
232
233  * Drop wee-alloc as allocator from WASM.
234  * Many internal code style improvements prompted by rust-clippy.
235  * Remove some unused internal bits and bobs.
236  * Require layout parameter in session URL loads.
237  * Miscellanous Other cleanups.
238
239
240 Version 0.7.3 - 2021-07-25
241 ==========================
242
243 Build system bugfixes
244 ---------------------
245
246  * `cargo` publication in `make-release` uses better pre-clean
247    approach.  (Removes some junk from caago packages.)
248
249 drop our own directory from cargo.nail
250
251 Version 0.7.2 - 2021-07-25
252 ==========================
253
254 Bugfixes
255 --------
256
257  * Complete overhaul of Z coordinate (stacking order) handling, including
258    reworked Z lowering algorithm (`b` key function).  Changes and
259    consequences include:
260
261     - On page load, use player's view of the Z coordinate for sort order (Z
262       display order) of occulted pieces, not actual Z (!)  avoiding
263       incoherent client state and arbitrary behaviours eg:
264     - Now we no longer ever raise a piece when user asks to lower (!!)
265     - Occulters (hands and decks) more uniformly try to be low down.
266     - e.g. user will no longer accidentally put card under their hand (!!)
267     - Do not derange relative ordering of multiple lowered pieces.
268     - Fix a logic errors and panics in Z coordinate handling which
269       might prevent some attmepts to lower (or, mayby, raise) pieces.
270     - When the user asks to raise but nothing can be raised, log a message.
271     - Automatically lower occulting pieces when they are enabled, and
272       pieces which are being pinned (insofar as reasonable); this
273       significantly reduces the probability of mysterious trouble
274       lowering a piece ("would disturb a piece held by another player").
275
276  * Substantial overhaul of error handling for problems detected when
277    processing client API requests:
278
279     - It should no longer be possible for the user to cause JS exceptions or
280       other lossage merely by asking to do things which it happens that the
281       server (unbeknownst to user or client script.ts) won't permit.  Report
282       these errors in the user-facing client log window, instead.
283     - New discussion of inapplicable-api-op etc. error handling in
284       `PROTOCOL.md`, and implementation of the new scheme.
285     - Principled client decisions about what to show the user - which
286       things are errors, which things are to be rported as conflicts, and
287       generally what to put in the user-facing message log.
288
289  * Do not re-raise things during drag if the user explicitly lowered
290    them with `b` (since the user grasped them).
291
292  * Fix JS exception if user selected multiple pieces which used the same key
293    for different purposes.  (Even transiently, for example by selecting
294    multiple hand repositories and claiming them all - you'd briefly have `C`
295    for claim for some, and `C` for unclaim for others, triggering the bug.)
296
297 New features
298 ------------
299
300  * New general `t` keystroke to bring a piece to the top of the
301    stacking order.
302
303  * Player hands now show the count of contained pieces.
304
305  * New loosely synchronised approach to "regrab", to enable a player
306    to release a piece (eg, a card they have just drawn) and
307    immediately, asynchronously, regrab it, while the server is sending
308    an update (eg resulting from an occultation status change).  I.e.:
309      - You can now draw a card into your hand in Mao and immediately regrasp
310        it, planning to decide whether to play it - and you can do the regrasp
311        without waiting for the server to show you the card.  Your regrasp and
312        the server update run concurrently.
313
314 Other user-facing changes
315 -------------------------
316
317  * `vatikan` game spec: Make the two hand repositoriess at the bottom bigger.
318  * Deck card count uses a monospaced font.
319  * Demo game: Add a label to the test hand.
320
321 Internal and development/test changes
322 -------------------------------------
323
324 New tests (and new checks in existing tests):
325
326  * Test Z lowering algorithm with new test facility.
327  * Test handling of UI actions which server decides (unpredictably
328    from client POV) cannot be performed.
329  * Add more tests of the zcoord module.
330  * Webdriver tests: check that there were no JS exceptions.
331  * Add in-browser testing of inapplicable-api-op error handling.
332  * Test new regrab feature, and adjust tests to cope with regrab
333    feature's somewhat different reporting of simultaneous-drag-attempts.
334  * Tests do a consistency check of the Z coordinates vs the in-SVG
335    subelement stacking order.
336
337 Testing, supporting changes:
338
339  * New jstest facility for running for-browser JS in a nodejs
340    environment with some cheesy mockups.  (New `otter-nodejs-tests`
341    crate; involves a separate invocation of `wasm-bindgen`.)
342  * Webdriver tests: pass window size arguments to firefox so we
343    get a window big enough for the provided game specs.  Involves
344    wrapper script for `firefox`.  Also Xvfb server screen size.
345
346 Internal and protocol improvements:
347
348  * New "loose" update (api op) concept to support new regrab feature.
349  * Fix a wdriver synch race which could lead to spurious tests failures.
350  * Improve defensive programming in the zcoord module.
351  * Abolish the incoherent `OnlineError` error type and replace it
352    with `Inapplicable` and `Fatal`.
353  * Abolish old incoherent and ununused `conflict_expected` in client JS.
354  * Improved debug output in various places (when enabled or in tests).
355  * Cleaned up a few flabby idioms in some tests.
356  * Promote some debugging support to otter-base.
357
358 Internal docs improvements:
359
360  * Fix some bogus links in internal docs.
361  * Add some more internal documentation to the zcoord module.
362  * Tidy up some leftover comments etc.
363  * Typo and formatting fixes in `PROTOCOL.md`.
364  * Fixes to `cargo doc` build.
365
366 Build system and dependencies:
367
368  * Update many dependencies to new versions.
369  * Tested build with Rust nightly-2021-07-15.
370  * Dependencies on tera templating engine slightly rationalised.
371  * Maekfile: avoid rebuilding the otter cli over and over again,
372    by touching it when we rebuild it.
373
374
375 Version 0.7.1 - 2021-06-09
376 ==========================
377
378 Bugfixes
379 --------
380
381  * `make shapelib` builds, and reports a URL for, the actual
382    documentation for shape library layout and spec syntax, not to an
383    obsolete location.
384
385 Installation and deployment changes
386 -----------------------------------
387
388  * Better documentation of how to install just the command line
389    game management client (eg for use via ssh).
390
391  * Update Rocket dependency in Cargo.lock to one which builds with
392    recent Nightly Rust.
393
394  * Update usvg dependency in Cargo.toml to a version with revised
395    less-insane command line parsing, and adjust all calls to it.
396
397  * Updated other dependencies.
398
399  * Work around a cargo bug which breaks the docs build:
400     https://github.com/rust-lang/cargo/issues/9564
401
402 Installation and deployment changes
403 -----------------------------------
404
405  * Improvements to release checklist and release script.  Notably,
406    add a checklist item for checking the build on recent Nightly.
407
408
409 Version 0.7.0 - 2021-06-08
410 ==========================
411
412 New features
413 ------------
414
415  * Game spec files can now be processed with Tera for templating.
416
417  * ssh-based access for `otter` cli, including appropriately-
418    restricted access via authorized_keys in the server role account,
419    and a mechanism for self-service public key management.
420
421  * `otter` cli can now read a preferences file
422    (`~/.config/otter/prefs.toml` by default) to allow pre-configuring
423    commonly-required command line options like `--game` and `--ssh`.
424    See `otter --help` for documentation.
425
426  * Mao and Penultima slightly updated (and, those game specs now
427    use the new templating feature).
428
429 Bugfixes
430 --------
431
432  * UI: When multiple pieces are selected and are to be raised (whether
433    by explicit request, or because of drag distance), their relative
434    ordering is preserved.  So dragging a group of pieces no longer
435    scrambles their z order.
436
437  * UI: When the SSE connection auto-reconnects, do not declare it an
438    error and suggest to the user that reloading might help.  Instead,
439    simply hope that it is going to be OK (since it generally is).  If
440    the SSE connection declares failure (state 2), report a scarier
441    message.
442
443  * Docs: Fixes to some documentation errors (including a fix
444    contributed by Simon Tatham).
445
446  * CLI etc.: Improve a number of error messages; in particular,
447    replace several "debug prints" of error messages with proper
448    formatting, and print a better program kname.
449
450  * CLI: Much better handling of stdout write errors.
451
452 Installation and deployment changes
453 -----------------------------------
454
455  * The `otter` command line utility is now in its own Rust package
456    `otter-cli`.
457
458  * Better logging by server of events on command connections.
459
460 Internal and development changes
461 --------------------------------
462
463  * make-release now polls crates.io's github view to work around
464    cargo/crates.io bug https://github.com/rust-lang/cargo/issues/9507
465    and has a release checklist in it.
466
467  * Some internal renamings for clarity, especially regarding
468    Authorisation proof tokens.
469
470  * Reworked the types involved in management command channels, to
471    use a different stacking of read/write adapters.  In particular,
472    a new `childio` facility for handling conversations with a child
473    process (in support of using `ssh` as a command conn transport).
474
475  * `otter` cli no longer uses println!.  Instead we have a special
476    wrapper for stdout which handles the errors and buffering for us.
477
478  * `otter` cli subcommand dispatch made nicer and the program's code
479    broken out into multiple files.
480
481  * Internal apitest case code restructured somewhat.
482
483
484 Version 0.6.0 - 2021-05-23
485 ==========================
486
487 New features
488 ------------
489
490  * Support uploading bundles of game materials, so games can be played
491    that are not playable with Otter's provided piece libraries.
492
493  * New `vatikan.game.toml`, suitable for many variants of
494    Manipulation Rummy.
495
496  * New `private.table.toml` and `same-scope.table.toml` for
497    less-public games.
498
499 Command line usage changes, etc.
500 --------------------------------
501
502  * otter(1) now takes the game name using a `--game` (`-g`) global
503    option rather than a per-subcommand positional argument.
504
505  * Library listing, piece identification, and so on, changed,
506    including changes to `otter library-add` and `otter library-list`.
507    Specifically, per-game libraries mean that `library-list` now
508    needs the `--game` option.
509
510  * otter(1) and otterlib(!) now honour `OTTER_CLI_LOG`
511    (in Rust env_logger format).
512
513  * otter(1) no longer acts on change_directory server config
514    setting (but still resolves paths in config relative to that dir).
515
516  * Much better reporting of errors, especially from otter(1).
517    Previously even straightforward errors would result in a controlled
518    `panic`; now a prettier message is printed.
519
520  * Default table size is now 300,200 (like `penultima` and `mao`; was
521    400,200).
522
523   * otter(1) can be used to issue adhoc management commands supplied
524     on the command line in JSON or RON format.
525
526 Bugfixes
527 --------
528
529  * Fix a serious bug with acl handling which might allow players who
530    can access a game more access than intended.
531
532  * Occult ilks are properly sorted out during piece load and game
533    save/load.  Previously a game with occulted pieces might not be
534    reloadable.
535
536  * Test suite might previously fail with EBADF due to off-by-one error
537    in fd cleanup routiine.
538
539 Documentation
540 -------------
541
542  * Document uploadable bundle format.
543
544 n * Document game and piece spec format.
545
546  * Document shape library catalogue format (previously this was done
547    with rustdoc annotations on Rust structs used with serde, which
548    produced incomplete and very hard to understand information).
549  
550  * De-emphasize docs for for amending the builtin shape libraries;
551    suggest making bundles instead.
552
553  * Examples, of game specs, shape libs, buncdles.
554
555 Installation and deployment changes
556 -----------------------------------
557
558  * usvg is now built shipped by the otter build system.
559
560  * server-config.toml can specify the path to `usvg`, `libexec`,
561    etc.
562
563 Compatibility notes
564 -------------------
565
566  * The otter(1) command line interface has changed and many common
567    operations need to be specified differently.
568
569  * The management API protocol has completely changed.  Old otter(1)
570    clients will not work.
571
572  * Savefiles from older versions of Otter are not loadable.
573
574 Internal and development changes
575 --------------------------------
576
577  * Change CLI to server management wire protocol to binary-framed
578    MessagePack (was newline-framed JSON).
579
580  * Update dependencies.
581
582  * Build system and test suite improvements and fixes.
583
584  * Move game spec parsing from client to server.
585
586  * Better error messages, especially from otter(1)
587
588  * Tests have better error reporting and output capturing.
589
590  * Various substantial refactorings to tests.
591
592  * Test the supplied game specs.
593
594  * Test game save/load.
595
596  * Use the sphinx feature sphinx.ext.autosectionlabel for xrefs.
597
598  * Server management channel now has an idle timout.  Should not be
599    relevant with the supplied otter(1) client.
600
601  * Much internal refactoring, new macros etc., to support the other
602    work.
603
604  * Reset game (game spec parsing and implemnetation) is now
605    done in the server rather than the client.
606  
607  * Improvements and bugfixes to `make-release` and `update-version`
608    scripts.  Fix anomalous (but working) `Cargo.toml` version
609    dependency syntax.
610
611 Version 0.5.1 - 2021-04-19
612 ==========================
613
614 This was the first public release.
615
616 [comment]: # Local variables:
617 [comment]: # mode: text
618 [comment]: # End: