Releases: osswald/order-platform
Release list
Release v2.15.4
fix(pi): SumUp cancel, failure sheet, and pay lock
Summary
- Operators can Abbrechen an in-progress SumUp connected checkout from the shared waiting overlay (all POS entry points).
- Failed/declined/timed-out SumUp attempts show a prominent failure sheet (not toast-only); dismiss returns to settle/pay without auto-retry.
- Cancel is quiet (Twint-style); order stays unpaid; pay is locked for the whole collection window to avoid empty-settle races after a reported failure.
OpenSpec change: sumup-payment-fail-cancel-ux.
Test plan
- Unit:
sumupCheckoutcancel during poll terminates and rejects withcancelled - Unit: timeout/failed status still terminate and do not return a payment
- Unit:
resolvePaymentsets failure message on fail, not on cancel;onSumupHideon both - Unit: App overlay shows Abbrechen / failure sheet and wires cancel + dismiss
- Unit:
useSplitPayignores re-entry while collection is in flight - Unit:
PayOrderViewmock includesterminalPaymentBusylock exports - Manual: start SumUp connected on register/table/collective → Abbrechen → still on settle, can pay again with another method
- Manual: decline/timeout → failure sheet → OK → retry or other method; no “nothing to settle”
Release
- No release (merge only;
latestPi images update) -
release:patch— bugfix release -
release:minor— feature release -
release:major— breaking release
Add exactly one release label to the PR if you want a semver bump, Git tag, and GitHub Release on merge. Do not edit VERSION manually — automation commits the bump on this branch after you add the label.
See docs/RELEASE.md.
Release v2.15.3
fix(pi): recover cash-register orders from stuck pickup-counter schema
Summary
- Cash-register order submit 500s on Pis stuck at Alembic
006_cash_session_uuidbecauseevent_pickup_counters.station_uuidwas never added (waiter orders still work). - Make migrations
006–010idempotent so upgrade can pass columns/tables already applied via runtime patches. - Add
apply_pickup_counter_schema_patches()so startup rebuilds the composite PK even if Alembic was previously blocked.
Test plan
-
cd pi/backend && uv run pytest tests/test_pickup_counter_schema_drift.py -v -
cd pi/backend && uv run pytest tests/ -q -
./scripts/lint.sh --staged - After merge/OTA: restart Pi backend, confirm Alembic reaches
010_pickup_counter_station(or patch applies), submit a cash-register order successfully
Release v2.15.2
fix(cloud): save pickup prefix mode from Stammdaten
Summary
- Move Abholcode-Buchstabe von into event Stammdaten (Config) so mode persists with Speichern
- Remove the Stationen/Kassen autosave bridge that left Station falling back to Kasse after reload
- Archive OpenSpec change
pickup-prefix-mode-stammdatenand sync mainpickup-prefix-modespec
Test plan
- Cloud frontend unit tests
- Backend
test_events_crudpickup prefix mode round-trip + pickup prefix mode suite - Lint + typecheck
- Manual: Stammdaten → Station → Speichern → reload → still Station; Stationen shows letters; Kassen hides register letters
Release v2.15.1
Cursor/fix locked additions edit dialog 040a
Summary
Test plan
- Tests pass locally / in CI
Release
- No release (merge only;
latestPi images update) -
release:patch— bugfix release -
release:minor— feature release -
release:major— breaking release
Add exactly one release label to the PR if you want a semver bump, Git tag, and GitHub Release on merge. Do not edit VERSION manually — automation commits the bump on this branch after you add the label.
See docs/RELEASE.md.
Release v2.15.0
feat(cloud): drag layout cells onto empty grid slots
Summary
- Cloud event Layouts grid: drag a filled cell onto an empty slot to move it (row/col only); content preserved
- Drops onto occupied cells are rejected (no swap/overwrite); empty cells are not drag sources
- Short press still opens the cell edit dialog; Pointer Events with movement threshold separate click vs drag
- OpenSpec change archived; living spec added under
openspec/specs/cloud-layout-cell-drag-move/
Test plan
- Open event config → Layouts; drag a filled button onto an empty slot and confirm it moves
- Try dropping onto an occupied cell — source stays put, target unchanged
- Click a cell (no drag) — edit dialog still opens
- Confirm autosave picks up the move (dirty → saved)
-
cd cloud/frontend && npm test -- --run src/utils/layoutCellMove.spec.ts src/components/EventConfigLayoutsSection.spec.ts
Release v2.14.1
fix(cloud): autosave pickup prefix mode from stations UI
Summary
Fixes stations-tab autosave for Abholcode-Buchstabe von and Abholcode-Buchstaben.
pickupPrefixMode lived on stammdaten (manual Save) while the control sits in the autosaved stations UI. Changing the mode marked the form dirty forever, so the status bar never showed a successful autosave even when station letters did save via configuration PUT.
Changes
- Include
pickupPrefixModein configuration autosave watch + snapshot - Persist mode with a partial event PUT alongside configuration save
- Clear stammdaten dirty state for that field after a successful mode save
- Unit coverage for snapshot/payload/baseline helpers
Test plan
-
eventDetailSaveunit tests - Related pickup-prefix section + dirty autosave tests
- Lint
- Manual: on Stations, switch mode and edit station letters; status bar should reach saved
Release
- No release (bugfix for already-shipped UI)
Release v2.14.0
Layout cell locked additions (one-tap combo buttons)
Summary
- Layout cells can lock Zusätze onto a single base article (
locked_addition_ids) for predefined POS variants. - Combo cells are one-tap: cart line gets locked additions at qty 1 with no Zusätze sheet (waiter + register).
- Grid disables a combo button when the base or any locked Zusatz is unsellable.
- Cloud admin cell dialog configures locked Zusätze when exactly one article and no vouchers are selected.
- Vouchers and classic multi-article cells are unchanged.
- OpenSpec change archived; main spec synced at
openspec/specs/layout-cell-locked-additions/.
Test plan
- Cloud backend:
tests/test_layout_cell_locked_additions.py - Cloud frontend: layouts payload + cell dialog specs
- Pi frontend: bundleHelpers + combo contract tests
- Lint / openspec validate
- Manual: create combo cell in event App-Layouts, sync Pi, one-tap add on register layout
Release v2.13.0
feat: pickup prefix mode (register vs station)
Summary
Event-level pickup_prefix_mode (register | station) so pickup-code letters can come from production stations instead of cash registers.
Changes
- Cloud:
events.pickup_prefix_mode,event_stations.pickup_code_prefix, validation, mode lock after leavingconfig, event copy, edge bundle - Cloud UI: mode control with show/hide of register vs station prefix fields; i18n; OpenAPI types
- Pi: per-station pickup counters, mode-aware allocation, restore/lifecycle; alembic
010_pickup_counter_station - OpenSpec: archived
pickup-prefix-modeintoopenspec/changes/archive/2026-09-13-pickup-prefix-mode/with main specs synced (pickup-prefix-mode, updatedstation-scoped-pickups)
Test plan
- Cloud backend pickup-prefix-mode tests
- Pi backend allocation / counter tests
- Cloud + Pi frontend tests / typecheck as applicable
- Lint
- CI green on feature branch
Release v2.12.4
Combine Dependabot updates and fix open security alerts
Summary
- Combine grouped Dependabot updates from #313, #315, #317, #318, #319, #320, #321, and #322 onto one CI-verified branch (no
VERSIONbump). - Land lockfile security floors the grouped PRs missed:
js-yaml≥ 4.3.1,nanoid≥ 3.3.18,postcss≥ 8.5.23, pluspypdf≥ 6.16.1 (resolved to 6.17.0) andbrace-expansion5.0.9. - Fix CodeQL #21/#22 by navigating the cloud admin UI only to same-origin relative paths after login and organisation/tenant hard-reloads.
Test plan
- Cloud backend pytest (610 passed)
- Pi backend pytest (404 passed)
- Cloud frontend tests + typecheck (365 passed)
- Pi frontend tests (470 passed)
- Website tests (8 passed)
-
./scripts/lint.sh - After merge, confirm GitHub Dependabot alerts 63, 68–71, 73–74, 76–79 and Code scanning #21/#22 clear (may wait for dependency-graph refresh)
Release v2.12.3
Kitchen monitor open-order count and table vs pickup icons
Summary
Kitchen Bestellungen chrome on the Pi monitor:
- Title row shows the open-ticket count next to the station:
Grill · 8 offen(including0; still visible on Produkte) - Each ticket title line gets a table vs pickup icon (official MDI
table-chair/food-takeout-box) at the top right - Table sky
#38bdf8, pickup violet#c084fc— glyph only, so wait-time green/amber/red bars stay the urgency channel - Ticket header padding, column gap, and min column width are unchanged
OpenSpec change kitchen-monitor-open-count-and-type is implemented, synced to openspec/specs/kitchen-monitor-order-chrome/spec.md, and archived.
Test plan
- Pi frontend kitchen tests:
KitchenMonitorHeader.spec.ts,KitchenTicketColumn.spec.ts,kitchenTicketType.test.ts(17 passed) - Full Pi frontend suite: 470 passed
-
npm run typecheckinpi/frontend -
./scripts/lint.sh --staged
Release
- No release (merge only;
latestPi images update) -
release:patch— bugfix release -
release:minor— feature release -
release:major— breaking release

