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