fix(web): setup wizard no longer forces printers to bind to a barrier
"Cilën barrierë shërben kjo pajisje?" is load-bearing for readers and cameras (which barrier a scan opens + inherited direction) but nothing consumes it on a printer — print routing is role + failoverRank (printer-routing.ts). The wizard applied the requirement to every non-controller device, so adding a printer demanded a meaningless relay pick that got stored as dead config. Printers are now exempt: no requirement, the binding panel is hidden, the binding is not persisted (a stale pre-fix one drops off on next edit), and the device list shows the printer's ROLE instead of a bogus amber "unbound". Server never validated it — no API change. Claude-Session: https://claude.ai/code/session_01Xcm6ikLgGoCxxHrxtjkk5V
This commit is contained in:
+42
@@ -2372,3 +2372,45 @@ The published-history sidebar built for the lab landed only there; the operator
|
||||
effective date, active badge), click → formFromVersion loads it into the editor as the seed for
|
||||
the next publish (which, per the sidebar hint, always creates a NEW immutable version). Details on
|
||||
[[tariff]] (Composer section).
|
||||
|
||||
## [2026-07-05] update | Reports dashboard: occupancy curve, hour×dow heatmap, stay histogram, fraud KPIs
|
||||
|
||||
Operator ask on /reports. Added the parking-shaped graphics (details on [[reporting-analytics]]):
|
||||
occupancy step-area vs capacity line (prior-ledger fold for range-start, per-bucket occupancyEnd),
|
||||
entries heatmap hour×day-of-week (replaces the flat hour histogram; feeds tariff-window design per
|
||||
[[tariff-industry-survey]]), stay-duration histogram at tariff-shaped edges (30m/1h/2h/4h/8h/24h),
|
||||
voids+anomalies KPI counters (accented when >0 — the look-closer signal), cash/card stacked revenue
|
||||
bars, peak-occupancy KPI, richer CSV (cash/card/occupancy_end). Server: reports.ts aggregation +
|
||||
Intl formatter cached per tz; db package re-exports lt/gt. 5 new tests (295 server green).
|
||||
|
||||
## [2026-07-06] update | USB printer truncation fixed (NONBLOCK partial write) — ICS XP-K200L
|
||||
|
||||
First on-hardware USB print test failed exactly as the transport bug predicts: text printed,
|
||||
barcode + cut missing (both live in the dropped tail). sendRawUsb did ONE write() on an O_NONBLOCK
|
||||
usblp fd and never checked bytesWritten — anything past the printer's ~8 KB USB buffer was
|
||||
silently discarded; TCP was immune. Fixed with writeAllUsb (4 KB chunks, partial-write
|
||||
continuation, EAGAIN retry, deadline with N/M diagnostic) + 4 fake-handle tests. Also verified on
|
||||
hardware (10.0.10.11): the ICS XP-K200L serves NO /prn_stat.htm → on network use the cashino
|
||||
driver (reachability-only), not rongta, or monitoring calls a working printer offline. Details on
|
||||
[[printer-usb-transport]].
|
||||
|
||||
## [2026-07-06] update | Driver rename: "cashino" → "escpos" (generic ESC/POS printer)
|
||||
|
||||
The ICS XP-K200L exposed that the reachability-only clone driver carried its first unit's vendor
|
||||
name — "cashino" in the setup UI was misleading for every other clone. Renamed properly:
|
||||
printer-cashino.ts → printer-generic.ts, id "cashino" → "escpos", label "Generic ESC/POS 80mm
|
||||
printer (Cashino, ICS/Xprinter…)". Stored rows rewritten by migration 0023; the registry keeps a
|
||||
PERMANENT cashino→escpos alias so restored pre-rename backups still resolve. Prose mentions of the
|
||||
Cashino as hardware stay (it's a real printer). Driver guidance for the XP-K200L: escpos on both
|
||||
transports (it serves no /prn_stat.htm — verified; rongta would false-flag it). See
|
||||
[[printer-usb-transport]], [[printer-status-monitoring]].
|
||||
|
||||
## [2026-07-06] update | Setup wizard: printers no longer forced to bind to a barrier relay
|
||||
|
||||
Operator hit the wizard's blanket "pick the controller and relay this device sits at" gate while
|
||||
adding the ICS printer. The binding (controllerId+relay → which barrier a scan opens + inherited
|
||||
direction) is load-bearing for READERS and CAMERAS only; nothing consumes it on a printer —
|
||||
printer routing is role + failoverRank (printer-routing.ts). Wizard now skips the requirement,
|
||||
hides the "Cilën barrierë shërben kjo pajisje?" panel, and stops persisting the binding for
|
||||
printers (a stale pre-fix binding drops off on next edit); the device list shows the printer's
|
||||
ROLE instead of a bogus amber "unbound". Server never required it (no validation change).
|
||||
|
||||
Reference in New Issue
Block a user