From 7df79e50d9c232e1bc8b9565bf10c294d6dcf2c3 Mon Sep 17 00:00:00 2001 From: Cam Proudlock Date: Mon, 17 Aug 2026 13:29:05 -0400 Subject: [PATCH] Release 0.11.0 --- CHANGELOG.md | 26 ++++++++++++++++++++++++++ frontend/package.json | 2 +- shopdb/__init__.py | 2 +- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 15d1ffc4..a610ff65 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,11 +10,17 @@ ADR-007 and ADR-002. ## [Unreleased] +## [0.11.0] - 2026-08-17 + The floor map became a set of drawings instead of one picture. A site can hold more than one building, a building more than one level, and every map position now records which drawing its coordinates belong to. Driven by a real move: a second floor was added, a new blueprint changed size, and machines relocated. +Alongside it, a sweep of what search can actually reach. Two identifiers the UI +collects were findable in almost no way, and two plugins' records were findable +in no way at all. + ### Added - Buildings and levels (ADR-017). Each level owns its own blueprint per theme @@ -62,6 +68,26 @@ second floor was added, a new blueprint changed size, and machines relocated. place so a rollback still finds them. Verified end to end on MySQL 5.6 from a production-shaped database. +### Fixed + +- `gaugelabreference` was matched only on measuring tools and + `maintenancereference` was matched nowhere at all, for any asset type, while + Settings offers both identifiers on machines, PCs, printers and network + devices. Both are now matched by global search AND by every asset list's + `?search=`. An identifier that can be entered has to be findable, or it is a + write-only field, and the tag is read off the physical machine by someone + looking at the list page. +- USB devices and printed items were unreachable from global search entirely. + Neither is an asset, so the generic asset search could not see them and no + searcher existed. They now match on serial, asset tag and label, and on bin + code (`itemcode`), gage-lab tag, name and description respectively - both + honouring `isactive`, both with Settings toggles, result labels and filter + chips. +- Global search returned knowledge-base articles whose topic application is + retired, while `GET /api/knowledgebase` hid them. A filter that only some paths + apply is not a filter: the article stayed two keystrokes away and the result + printed the retired application as its subject. + ### Known gaps - The Pascal printer-installer map still compiles in one drawing's dimensions and diff --git a/frontend/package.json b/frontend/package.json index 5547c034..a8dfb8c6 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "shopdb-frontend", - "version": "0.10.0", + "version": "0.11.0", "private": true, "type": "module", "scripts": { diff --git a/shopdb/__init__.py b/shopdb/__init__.py index 28a39adc..980a0908 100644 --- a/shopdb/__init__.py +++ b/shopdb/__init__.py @@ -63,7 +63,7 @@ __contract_version__ = '0.20.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.10.0' +__version__ = '0.11.0' def create_app(config_name: str = None) -> Flask: