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