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