chiark / gitweb /
cargo: Document updates
[otter.git] / CHANGELOG.md
1 Version 0.8.0 - UNRELEASED
2 ==========================
3
4 Bugfixes
5 --------
6
7  * Complete overhaul of Z coordinate (stacking order) handling, including
8    reworked Z lowering algorithm (`b` key function).  Changes and
9    consequences include:
10
11     - On page load, use player's view of the Z coordinate for sort order (Z
12       display order) of occulted pieces, not actual Z (!)  avoiding
13       incoherent client state and arbitrary behaviours eg:
14     - Now we no longer ever raise a piece when user asks to lower (!!)
15     - Occulters (hands and decks) more uniformly try to be low down.
16     - e.g. user will no longer accidentally put card under their hand (!!)
17     - Do not derange relative ordering of multiple lowered pieces.
18     - Fix a Rust panic in Z coordinate handling which might occur in some
19       attempts to lower pieces.
20     - When the user asks to raise but nothing can be raised, log a message.
21
22  * Substantial overhaul of error handling for problems detected when
23    processing client API requests:
24
25     - It should no longer be possible for the user to cause JS exceptions or
26       other lossage merely by asking to do things which it happens that the
27       server (unbeknownst to user or client script.ts) won't permit.  Report
28       these errors in the user-facing client log window, instead.
29     - New discussion of inapplicable-api-op etc. error handling in
30       `PROTOCOL.md`, and implementation of the new scheme.
31     - Principled client decisions about what to show the user - which
32       things are errors, which things are to be rported as conflicts, and
33        generally what to put in the user-facing message log.
34
35  * Do not re-raise things during drag if the user explicitly lowered
36    them with `b` (since the user grasped them).
37
38  * Fix JS exception if user selected multiple pieces which used the same key
39    for different purposes.  (Even transiently, for example by selecting
40    multiple hand repositories and claiming them all - you'd briefly have `C`
41    for claim for some, and `C` for unclaim for others.)
42
43 New features
44 ------------
45
46  * New general `t` keystroke to bring a piece to the top of the
47    stacking order.
48
49  * Player hands now show the count of contained pieces.
50
51  * New loosely synchronised approach to "regrab", to enable a player
52    to release a piece (eg, a card they have just drawn) and
53    immediately, asynchronously, regrab it, while the server is sending
54    an update (eg resulting from an occultation status change).  I.e.:
55      - You can now draw a card into your hand in Mao and immediately regrasp
56        it, planning to decide whether to play it - and you can do the regrasp
57        without waiting for the server to show you the card.  Your regrasp and
58        the server update run concurrently.
59
60 Other user-facing changes
61 -------------------------
62
63  * `vatikan` game spec: Make the two hand repositoriess at the bottom bigger.
64  * Deck card count uses a monospaced font.
65  * Demo game: Add a label to the test hand.
66
67 Internal and development/test changes
68 -------------------------------------
69
70  New tests (and new checks in existing tests):
71  * Test Z lowering algorithm with new test facility.
72  * Test handling of UI actions which server decides (unpredictably
73    from client POV) cannot be performed.
74  * Add more tests of the zcoord module.
75  * Webdriver tests: check that there were no JS exceptions.
76  * Add in-browser testing of inapplicable-api-op error handling.
77  * Test new regrab feature, and adjust tests to cope with regrab
78    feature's somewhat different reporting of simultaneous-drag-attempts.
79  * Tests do a consistency check of the Z coordinates vs the in-SVG
80    subelement stacking order.
81
82  Testing, supporting changes:
83  * New jstest facility for running for-browser JS in a nodejs
84    environment with some cheesy mockups.  (New `otter-nodejs-tests`
85    crate; involves a separate invocation of `wasm-bindgen`.)
86  * Webdriver tests: pass window size arguments to firefox so we
87    get a window big enough for the provided game specs.  Involves
88    wrapper script for `firefox`.  Also Xvfb server screen size.
89
90  Internal and protocol improvements:
91  * New "loose" update (api op) concept to support new regrab feature.
92  * Improve defensive programming in the zcoord module.
93  * Abolish the incoherent `OnlineError` error type and replace it
94    with `Inapplicable` and `Fatal`.
95  * Abolish old incoherent and ununused `conflict_expected` in client JS.
96  * Improved debug output in various places (when enabled or in tests).
97  * Promote some debugging support to otter-base.
98
99  Internal docs improvements:
100  * Fix some bogus links in internal docs.
101  * Add some more internal documentation to the zcoord module.
102  * Tidy up some leftover comments etc.
103  * Typo and formatting fixes in `PROTOCOL.md`.
104  * Fixes to `cargo doc` build.
105
106  Build system and dependencies:
107  * Update many dependencies to new versions.
108  * Dependencies on tera templating engine slightly rationalised.
109  * Maekfile: avoid rebuilding the otter cli over and over again,
110    by touching it when we rebuild it.
111
112
113 Version 0.7.1 - 2021-06-09
114 ==========================
115
116 Bugfixes
117 --------
118
119  * `make shapelib` builds, and reports a URL for, the actual
120    documentation for shape library layout and spec syntax, not to an
121    obsolete location.
122
123 Installation and deployment changes
124 -----------------------------------
125
126  * Better documentation of how to install just the command line
127    game management client (eg for use via ssh).
128
129  * Update Rocket dependency in Cargo.lock to one which builds with
130    recent Nightly Rust.
131
132  * Update usvg dependency in Cargo.toml to a version with revised
133    less-insane command line parsing, and adjust all calls to it.
134
135  * Updated other dependencies.
136
137  * Work around a cargo bug which breaks the docs build:
138     https://github.com/rust-lang/cargo/issues/9564
139
140 Installation and deployment changes
141 -----------------------------------
142
143  * Improvements to release checklist and release script.  Notably,
144    add a checklist item for checking the build on recent Nightly.
145
146
147 Version 0.7.0 - 2021-06-08
148 ==========================
149
150 New features
151 ------------
152
153  * Game spec files can now be processed with Tera for templating.
154
155  * ssh-based access for `otter` cli, including appropriately-
156    restricted access via authorized_keys in the server role account,
157    and a mechanism for self-service public key management.
158
159  * `otter` cli can now read a preferences file
160    (`~/.config/otter/prefs.toml` by default) to allow pre-configuring
161    commonly-required command line options like `--game` and `--ssh`.
162    See `otter --help` for documentation.
163
164  * Mao and Penultima slightly updated (and, those game specs now
165    use the new templating feature).
166
167 Bugfixes
168 --------
169
170  * UI: When multiple pieces are selected and are to be raised (whether
171    by explicit request, or because of drag distance), their relative
172    ordering is preserved.  So dragging a group of pieces no longer
173    scrambles their z order.
174
175  * UI: When the SSE connection auto-reconnects, do not declare it an
176    error and suggest to the user that reloading might help.  Instead,
177    simply hope that it is going to be OK (since it generally is).  If
178    the SSE connection declares failure (state 2), report a scarier
179    message.
180
181  * Docs: Fixes to some documentation errors (including a fix
182    contributed by Simon Tatham).
183
184  * CLI etc.: Improve a number of error messages; in particular,
185    replace several "debug prints" of error messages with proper
186    formatting, and print a better program kname.
187
188  * CLI: Much better handling of stdout write errors.
189
190 Installation and deployment changes
191 -----------------------------------
192
193  * The `otter` command line utility is now in its own Rust package
194    `otter-cli`.
195
196  * Better logging by server of events on command connections.
197
198 Internal and development changes
199 --------------------------------
200
201  * make-release now polls crates.io's github view to work around
202    cargo/crates.io bug https://github.com/rust-lang/cargo/issues/9507
203    and has a release checklist in it.
204
205  * Some internal renamings for clarity, especially regarding
206    Authorisation proof tokens.
207
208  * Reworked the types involved in management command channels, to
209    use a different stacking of read/write adapters.  In particular,
210    a new `childio` facility for handling conversations with a child
211    process (in support of using `ssh` as a command conn transport).
212
213  * `otter` cli no longer uses println!.  Instead we have a special
214    wrapper for stdout which handles the errors and buffering for us.
215
216  * `otter` cli subcommand dispatch made nicer and the program's code
217    broken out into multiple files.
218
219  * Internal apitest case code restructured somewhat.
220
221
222 Version 0.6.0 - 2021-05-23
223 ==========================
224
225 New features
226 ------------
227
228  * Support uploading bundles of game materials, so games can be played
229    that are not playable with Otter's provided piece libraries.
230
231  * New `vatikan.game.toml`, suitable for many variants of
232    Manipulation Rummy.
233
234  * New `private.table.toml` and `same-scope.table.toml` for
235    less-public games.
236
237 Command line usage changes, etc.
238 --------------------------------
239
240  * otter(1) now takes the game name using a `--game` (`-g`) global
241    option rather than a per-subcommand positional argument.
242
243  * Library listing, piece identification, and so on, changed,
244    including changes to `otter library-add` and `otter library-list`.
245    Specifically, per-game libraries mean that `library-list` now
246    needs the `--game` option.
247
248  * otter(1) and otterlib(!) now honour `OTTER_CLI_LOG`
249    (in Rust env_logger format).
250
251  * otter(1) no longer acts on change_directory server config
252    setting (but still resolves paths in config relative to that dir).
253
254  * Much better reporting of errors, especially from otter(1).
255    Previously even straightforward errors would result in a controlled
256    `panic`; now a prettier message is printed.
257
258  * Default table size is now 300,200 (like `penultima` and `mao`; was
259    400,200).
260
261   * otter(1) can be used to issue adhoc management commands supplied
262     on the command line in JSON or RON format.
263
264 Bugfixes
265 --------
266
267  * Fix a serious bug with acl handling which might allow players who
268    can access a game more access than intended.
269
270  * Occult ilks are properly sorted out during piece load and game
271    save/load.  Previously a game with occulted pieces might not be
272    reloadable.
273
274  * Test suite might previously fail with EBADF due to off-by-one error
275    in fd cleanup routiine.
276
277 Documentation
278 -------------
279
280  * Document uploadable bundle format.
281
282 n * Document game and piece spec format.
283
284  * Document shape library catalogue format (previously this was done
285    with rustdoc annotations on Rust structs used with serde, which
286    produced incomplete and very hard to understand information).
287  
288  * De-emphasize docs for for amending the builtin shape libraries;
289    suggest making bundles instead.
290
291  * Examples, of game specs, shape libs, buncdles.
292
293 Installation and deployment changes
294 -----------------------------------
295
296  * usvg is now built shipped by the otter build system.
297
298  * server-config.toml can specify the path to `usvg`, `libexec`,
299    etc.
300
301 Compatibility notes
302 -------------------
303
304  * The otter(1) command line interface has changed and many common
305    operations need to be specified differently.
306
307  * The management API protocol has completely changed.  Old otter(1)
308    clients will not work.
309
310  * Savefiles from older versions of Otter are not loadable.
311
312 Internal and development changes
313 --------------------------------
314
315  * Change CLI to server management wire protocol to binary-framed
316    MessagePack (was newline-framed JSON).
317
318  * Update dependencies.
319
320  * Build system and test suite improvements and fixes.
321
322  * Move game spec parsing from client to server.
323
324  * Better error messages, especially from otter(1)
325
326  * Tests have better error reporting and output capturing.
327
328  * Various substantial refactorings to tests.
329
330  * Test the supplied game specs.
331
332  * Test game save/load.
333
334  * Use the sphinx feature sphinx.ext.autosectionlabel for xrefs.
335
336  * Server management channel now has an idle timout.  Should not be
337    relevant with the supplied otter(1) client.
338
339  * Much internal refactoring, new macros etc., to support the other
340    work.
341
342  * Reset game (game spec parsing and implemnetation) is now
343    done in the server rather than the client.
344  
345  * Improvements and bugfixes to `make-release` and `update-version`
346    scripts.  Fix anomalous (but working) `Cargo.toml` version
347    dependency syntax.
348
349 Version 0.5.1 - 2021-04-19
350 ==========================
351
352 This was the first public release.
353
354 [comment]: # Local variables:
355 [comment]: # mode: text
356 [comment]: # End: