diff --git a/CHANGELOG.md b/CHANGELOG.md index 398e4540..26011d45 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 diff --git a/frontend/package.json b/frontend/package.json index 3ca7bbb8..b83df5c0 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 c8582804..c4283669 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: