v2.8.0
v2.8.0 — Named errors where the operator looks + an honest /health
Frontend-only release.
Frontend-only release. Zero migrations, zero backend product code.
Deployed to production at 2d6b13bf.
Operator-facing
Named errors now appear where the operator is working — and disappear when
the context changes. Every refusal the system already knew how to name
(KIT_NOT_EXPLODED, ADDRESS_INVALID, TOTE_IN_USE, wrong-product,
short-pick) now renders next to the control that produced it, on the station
console, PDA pick/pack/label, packaging, marketplace order actions and SKU
mapping rows. An error bound to one order no longer survives to the next.
Three product bugs found by that sweep — two of them could have shipped the wrong product to a customer:
- Scan verification accepted a prefix as a match: scanning
DUR-AA2verified the line forDUR-AA2-ALK, a different real SKU. Now exact match after normalize, aligned with the backend writer. - PDA Walk accepted a prefix location:
A-1verifiedA-1-1-1. Now exact. - On a 360×640 PDA the refusal rendered ~60px below the fold, behind the scan field. The operator had to scroll past the action to learn why the scan was rejected. Scan and error are now pinned together; the E2E asserts the error box stays inside the viewport, dark and light.
Platform
/healthreports the real version.wms-backendhad been pinned at1.0.0for seven releases, so the only runtime witness of which build is live said the same thing regardless of the deployed tag. Both packages are now bumped together, and the tests assert against the realpackage.jsonand rejectunknown— a forgotten bump turns CI red instead of ageing quietly.- Release checklist hardened: a clean
git statusis now part of the pre-tag gate, the tag ritual is executed one command at a time, and/healthreporting the tag number is a required release smoke. - Binding lessons L27 (an error outside the viewport is a silent failure by geometry — fix the layout, never the assert) and L28 (a verification step that cannot halt the sequence is decoration). Duplicate lesson numbers resolved.
Merged
- #106 — UX-ERRORS-01 (Fase A + Fase B)
- #108 — Fase B sweep: PDA and marketplace surfaces
- #107 — cloud agent local development environment
- #105 — sprint prompt
- #109 — release v2.8.0
Known issues
OpsAlertcan create duplicate OPEN rows for the same(companyId, type, scopeKey); the dashboard Not live badge does not yet show the reason it already computes. Both tracked for a follow-up fix.
Rollback
Re-deploy v2.7.0. No flags to turn off, no migrations to revert.
Fixed in v2.8.1 (in progress)
The dashboard Not live badge does not yet show the reason it already
computes, and OpsAlert can create duplicate OPEN rows for the same
(companyId, type, scopeKey). Both are being fixed now rather than carried:
a red light with no reason is not a cosmetic gap.