Fixed
- The `mcp` and `cli` extras install `tzdata` on every platform. Without a
system time zone database (Windows, slim containers), `nytg-mcp` failed to
start and `nytg` failed on Linux, with `ZoneInfoNotFoundError`. CI now
installs each extra alone, on Linux and Windows, and checks New York time
without a system database. (47)
- The REST API passes only the `NYT-S` login cookie on to NYT. It used to
forward every cookie sent to it, so mounted in an app with its own session
cookie, it sent that cookie to NYT too. A cookie that can't be sent is now
a 400 instead of a 500. If you relied on other cookies reaching NYT,
override `get_client`. (45)
- The MCP server's `export_crossword` never replaces a file unless
`overwrite` is set. It checked for the file before fetching the puzzle, so
a file created in the meantime was overwritten anyway; the file is now
created exclusively, and symlinks are never followed. With `overwrite`,
the new file is written next to the old one and moved into place, so a
failed write keeps the old file. `nytg ... --save` replaces files the same
way. (46)
- `export_crossword` is marked destructive in its MCP annotations, since
`overwrite` replaces files. (46)
- A response from NYT that's valid JSON but the wrong shape raises
`NYTGamesParseError`, as documented. It used to escape as Pydantic's
`ValidationError` or a `TypeError`, so the REST API answered 500 instead
of 502. If you caught those, catch `NYTGamesParseError` (a `ValueError`)
instead. (44)
- Errors never include NYT's response values, which can be your saved games.
`NYTGamesParseError` names the model, fields and error types only; the
models hide input values in validation errors; and the MCP server, CLI and
live check report these errors without them. The live check reports other
unexpected errors by type and location only, since its failures are
published in GitHub issues. (44)