Release 0.11.0
Some checks failed
CI / backend (push) Failing after 7s
CI / naming (push) Successful in 3s
CI / frontend (push) Successful in 9s
CI / migrations-mysql (push) Failing after 7s

The floor map became a set of drawings instead of one picture, and search now
reaches what the forms have been collecting all along.

A site can hold more than one building and a building more than one level, and
every map position records which drawing its coordinates belong to. An existing
single-map site upgrades into one building and one default level carrying the
blueprint it already had, and nothing moves on screen. Landmark recalibration
moves a level's markers onto a redrawn plan, solved per axis from the landmarks
and never from the image dimensions, dry run by default, snapshotted before it
applies.

Two identifiers the UI collects were findable in almost no way and two plugins'
records in no way at all: gaugelabreference matched only measuring tools,
maintenancereference matched nothing anywhere, and USB devices and printed items
were absent from search entirely because neither is an asset. All four are
searchable now, from the global bar and from every list's own search box.

Contract 0.20.0 is additive: a plugin that writes a map position must write its
level with it.

The version and the changelog are the release; the detail is in the entry.
This commit is contained in:
cproudlock
2026-08-17 13:23:49 -04:00
parent aede5ac621
commit 24647aa8e8
4 changed files with 29 additions and 3 deletions

View File

@@ -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

View File

@@ -11,7 +11,7 @@ never by editing this file.
| series | value | governed by |
|---|---|---|
| product `__version__` | `0.10.0` | ADR-007 |
| product `__version__` | `0.11.0` | ADR-007 |
| plugin contract `__contract_version__` | `0.20.0` | ADR-002 |
They move independently. A contract bump is not a release.

View File

@@ -1,6 +1,6 @@
{
"name": "shopdb-frontend",
"version": "0.10.0",
"version": "0.11.0",
"private": true,
"type": "module",
"scripts": {

View File

@@ -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: