diff --git a/CHANGELOG.md b/CHANGELOG.md index 27a9de0..5841183 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,61 @@ ADR-007 and ADR-002. ## [Unreleased] +## [0.8.1] - 2026-08-05 + +Everything here shipped after v0.8.0 was tagged the same morning, driven by two +sites putting real data in for the first time. Most of it is defects that only +appear when somebody who did not build the software tries to use it. + +### Fixed + +- A blank optional code could be saved once and never again. A unique nullable + column accepts any number of NULLs but exactly one empty string, so the second + business unit with no code collided with the first and returned 500 from a + field the form correctly showed as optional. Blank now stores as NULL, which + covers every unique nullable column - asset numbers, hostnames, item codes, + subnet names, gage-lab tags - not just the one that was reported. A genuine + duplicate answers 409 with a readable message instead of a bare 500. +- A lobby display with exactly two slides never changed between them. The + slideshow was started twice, and two timer chains advancing one slide each + landed back on the first every cycle. With three or more slides it advanced by + two and merely skipped one, which is why it went unnoticed. The per-slide + duration the feed has always sent was also ignored in favour of a hardcoded + ten seconds. +- Clicking slightly outside a modal discarded a part-filled form, in 35 modals + across 30 files. Confirmation dialogs still dismiss that way, since they hold + nothing to lose. +- Selecting a filter while past page one returned an empty list, because the + filter asked for page five of a result set that now had one page. +- Model photos could not be saved: an uploaded photo sets the field to an + application path, and the input was type="url", which demands an absolute + address. The upload button was also hidden when creating a model. +- An empty bordered box appeared after Notes on the network device form. + +### Added + +- The equipment catalog travels. `flask seed catalog` loads 53 vendors, 128 + models with photos, 146 printer supply part numbers and every type vocabulary, + so a new site can start adding printers immediately instead of retyping a + catalog another site spent a year building. Idempotent and additive; catalog + only, with nothing site-specific. Offered by the installer as a tick-box and + by the operator console. +- `shopdb-admin.ps1 repair` completes an interrupted provisioning, and `check` + now says when a server is not fully provisioned instead of leaving it to be + inferred from 500s on unrelated pages. +- Network devices can be linked to a catalog model, and their map position is + picked on the floor plan rather than typed as coordinates. +- An asset's vendor and type can be derived from its catalog model, by exact + name match only, with a reviewable backfill script. + +### Changed + +- Labels say whose type they mean: Machine Type, PC Type, Printer Type, Device + Type, next to the catalog's Model type. +- The 3D parts kiosk label prefix is a setting rather than one site's initials + hardcoded in the source. +- The operator console menu is grouped by what each action touches. + ## [0.8.0] - 2026-08-05 First release to carry the Windows installer. Everything below shipped after @@ -603,7 +658,8 @@ letting other GE Aerospace sites stand up their own self-hosted instance integration that passed the key as a query parameter. See `docs/COLLECTOR-INTEGRATION.md`. -[Unreleased]: https://gitea.proudtech.net/ge-aerospace/shopdb-flask/compare/v0.8.0...HEAD +[Unreleased]: https://gitea.proudtech.net/ge-aerospace/shopdb-flask/compare/v0.8.1...HEAD +[0.8.1]: https://gitea.proudtech.net/ge-aerospace/shopdb-flask/compare/v0.8.0...v0.8.1 [0.8.0]: https://gitea.proudtech.net/ge-aerospace/shopdb-flask/compare/v0.7.0...v0.8.0 [0.7.0]: https://gitea.proudtech.net/ge-aerospace/shopdb-flask/compare/v0.6.0...v0.7.0 [0.6.0]: https://gitea.proudtech.net/ge-aerospace/shopdb-flask/compare/v0.5.0...v0.6.0 diff --git a/docs/openapi.json b/docs/openapi.json index 474a11e..5bf29b0 100644 --- a/docs/openapi.json +++ b/docs/openapi.json @@ -2,7 +2,7 @@ "openapi": "3.1.0", "info": { "title": "ShopDB Flask API", - "version": "0.8.0", + "version": "0.8.1", "description": "Asset-management API (core + plugins). Responses use a `success_response` envelope: `{status, data, meta}`. Auth: Bearer JWT (login or a managed PAT) for `jwt`/`admin`/`permission:*`; `X-API-Key` for collector/managed-token endpoints; public endpoints need neither." }, "servers": [ diff --git a/frontend/package.json b/frontend/package.json index 3ca7bbb..b83df5c 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "shopdb-frontend", - "version": "0.8.0", + "version": "0.8.1", "private": true, "type": "module", "scripts": { diff --git a/shopdb/__init__.py b/shopdb/__init__.py index c858280..c428366 100644 --- a/shopdb/__init__.py +++ b/shopdb/__init__.py @@ -42,7 +42,7 @@ __contract_version__ = '0.15.0' # plugin-contract version above are distinct series with independent # bump rules. Not part of the shopdb.api contract surface, so it is # not re-exported there. -__version__ = '0.8.0' +__version__ = '0.8.1' def create_app(config_name: str = None) -> Flask: