pppro-browser-linux (2.6.0-1) unstable; urgency=medium

  * Demo template overhaul — the Linux UI no longer embeds its own
    copies of the 11 demo ZPL templates; everything fetches from the
    agent's /__demos endpoint (single source of truth for every
    platform). FNSKU + Transparency demos in particular have shifted
    layout fixes that the Linux team validated against ZD220 + ZD421
    hardware; macOS users now pick those up automatically.
  * New POST /__test-print endpoint — the agent renders + sends a
    chosen demo against a chosen printer server-side, so the
    Settings UI on every platform can fire a test print without
    re-fetching the rendered ZPL.
  * Tray icon shows a green "in use" dot while the agent is
    actively printing (Linux-visible; macOS keeps the standard
    NSStatusBar icon).
  * Per-listener health surface + UI restart action added on the
    agent's admin endpoints.
  * macOS picks up all of the above via the standard cross-compile
    — version bumped 2.5.4 → 2.6.0 across linux/Makefile,
    cmd/.../main.go, ui/Cargo.toml, packaging/rpm/...spec,
    packaging/debian/changelog, macos/ui/project.yml, macos/README.md.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Mon, 18 May 2026 13:00:00 +0000

pppro-browser-linux (2.5.4-1) unstable; urgency=medium

  * Network printer status icon + dims now work on macOS. The
    /__printers/{uid}/status handler was using split Write+Read
    against the printer (USB-shaped), which races over TCP +
    Bluetooth (closing the write fd discards anything still in the
    kernel receive buffer). Now uses Printer.Query() — the
    transport-aware Write+Read-on-one-connection helper added in
    v2.4.5 — so the network printer's `~HS` response actually makes
    it back. Status pill reads "Ready" (or paper-out / paused / etc.)
    instead of "Printer responded but the status couldn't be
    decoded"; the Reading-printer-info spinner resolves into real
    dpi / headWidth / labelLength values.
  * Drain loop in the status handler is now USB-only — on
    network/Bluetooth/IPP each Query() opens its own short-lived
    connection so there's no shared pipe to drain; running 8 read
    loops there cost ~250ms of empty TCP reads per call.
  * usb.Discover on darwin no longer treats "no iterator for
    IOUSBHostDevice or IOUSBDevice" as an error — it's the normal
    state on a Mac with only network/Bluetooth printers. Empty
    slice + nil error instead. Suppresses the `available:` log
    line that fired on every /available poll.
  * Printers tab empty-state copy now mentions Network + Bluetooth
    tabs rather than only USB.
  * macOS README markdown lint cleanup (line 132 wrap landed `+
    quality` at line-start, which the linter parsed as a `+` list
    marker; collapsed the wrap).

 -- Print Platform Pro Builds <support@printplatformpro.com>  Mon, 18 May 2026 12:30:00 +0000

pppro-browser-linux (2.5.3-1) unstable; urgency=medium

  * Fix FindByUID returning a 404-shaped error against persisted
    network/Bluetooth printers on a Mac with no USB Zebra plugged
    in. Companion to v2.5.2's DiscoverAll fix: DiscoverAll now
    returns the network printer + an "info-level" USB-not-found
    error; FindByUID was propagating that error verbatim and
    masking the valid match. The UI surfaced this as
    "HTTP 404: printer not found: IOServiceGetMatchingServices:
    no iterator for IOUSBHostDevice or IOUSBDevice" next to the
    Calibrate / Diagnostics / Quality buttons on a network
    printer's row.
  * FindByUID now only returns DiscoverAll's error when zero
    printers were found — if any transport surfaced printers,
    the per-transport errors are swallowed and the UID match
    proceeds.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Mon, 18 May 2026 12:00:00 +0000

pppro-browser-linux (2.5.2-1) unstable; urgency=medium

  * Fix /available swallowing network + Bluetooth printers on
    macOS when no USB Zebra is plugged in. usb.Discover on darwin
    returns "no iterator for IOUSBHostDevice or IOUSBDevice" as
    an error rather than an empty slice, and DiscoverAll's early
    `if err != nil { return nil, err }` bailed before reaching
    the network/Bluetooth append loops — so a freshly added
    network printer (visible at /__network-printers) never
    surfaced in /available and the Settings UI's Connected
    Printers list stayed empty.
  * DiscoverAll now collects per-transport errors but always
    proceeds through network + Bluetooth regardless, matching
    the contract the HTTP /available handler already documented
    ("DiscoverAll returns USB results even on network-config
    errors", inverse now also holds).

 -- Print Platform Pro Builds <support@printplatformpro.com>  Mon, 18 May 2026 11:35:00 +0000

pppro-browser-linux (2.5.1-1) unstable; urgency=medium

  * macOS Settings — About tab restructured to match the Linux
    v2.4.3 layout: lead description, Licensing card, Version pane
    (Agent + UI separately, plus Host string), Project section
    with Downloads / Protocol-reference links and the MIT licence
    note. The previous flat list with single Version row is gone.
  * macOS Settings — Status tab restructured: new Auto-start
    toggle at the top (managed via the agent's LaunchAgent in
    ~/Library/LaunchAgents/com.printplatformpro.BrowserAgent.plist),
    an Agent card (version + HTTP/HTTPS listeners), and a
    Connection-status card with a green-tick / red-cross
    indicator. The previous identity dump (hostname / OS /
    machine ID) now lives under a "More details" disclosure
    expander.
  * New /__autostart HTTP endpoint (GET + same-origin POST)
    backing the toggle. GET is a fs.Stat on the plist (macOS)
    or systemctl is-enabled (Linux); POST flips Enable/Disable
    on the internal/autostart package. The libadwaita UI's
    existing D-Bus autostart surface is unchanged.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Mon, 18 May 2026 11:00:00 +0000

pppro-browser-linux (2.5.0-1) unstable; urgency=medium

  * macOS Settings: Printers tab now has USB / Network / Bluetooth
    sub-tabs matching the v2.4.2 libadwaita layout. Each sub-tab
    carries its own setup affordances (Add-network sheet, Pair-
    Bluetooth System-Settings shortcut, USB first-time-setup note);
    the unified Connected-printers list lives below.
  * Network discovery via the new HTTP endpoint
    `GET /__network-printers/scan`. Wraps the existing
    internal/discovery package's parallel mDNS + TCP-9100 sweep.
    Accepts `extra_subnets=` query param for multi-subnet LANs.
    macOS Settings's Add-Network-Printer sheet now has a Scan
    section with click-to-fill results — same UX as the Linux
    libadwaita dialog.
  * IPP transport now compiles + writes on macOS. Zebra ZSB-series
    printers (port 631, IPP-only) are recognised by AddNetwork
    based on port, the writeIPP path is wired through
    Printer.Write on darwin, and Read returns empty (IPP doesn't
    tunnel ZPL host-commands the way raw 9100 does — callers
    degrade gracefully).
  * Cross-platform Printer.Query on macOS: closes the same TCP/SPP
    response-loss class of bugs that v2.4.2 fixed on Linux —
    queries now keep one connection open across Write→Read.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Mon, 18 May 2026 10:15:00 +0000

pppro-browser-linux (2.4.5-1) unstable; urgency=medium

  * Unblock macOS cross-build (no functional change on Linux).
    v2.4.2..v2.4.4 work introduced Linux-only build tags on
    internal/discovery, internal/usb/ipp.go, and the Printer.Query
    method on the USB printer type, breaking `GOOS=darwin go build`
    and stranding macOS users on v2.3.2.
  * internal/discovery: avahi-browse mDNS shim moved to mdns_linux.go
    behind `//go:build linux`; mdns_darwin.go uses `dns-sd -B` for
    the macOS equivalent; mdns_other.go no-op for other OS targets.
    The TCP-9100 subnet sweep + ZPL ~HI probe in scan.go is now
    cross-platform.
  * internal/usb/printer_darwin.go: new Query() method mirroring the
    Linux dispatcher (network→queryNetwork, bluetooth→queryBluetooth,
    ipp→typed error, default→Write+Read). Closes the same TCP/SPP
    response-loss class of bugs that v2.4.2 fixed on Linux.
  * internal/usb/bluetooth_darwin.go: new queryBluetooth() — single
    fd Write+Read across the /dev/tty.* SPP virtual-serial port.
  * internal/usb/ipp.go: build constraint removed (file is pure
    net/http + binary encoding, no Linux-specific deps).

 -- Print Platform Pro Builds <support@printplatformpro.com>  Mon, 18 May 2026 09:00:00 +0000

pppro-browser-linux (2.4.3-1) unstable; urgency=medium

  * IPP transport for Zebra ZSB-series printers. Zebra's small-
    business desktop line (ZSB-DP12, ZSB-DP14, ZSB-DP15) is IPP-
    only on port 631 and doesn't open the raw-9100 socket every
    other Zebra model uses — until v2.4.3 the agent could see
    these printers in /available but couldn't print to them.
    Now end-to-end:
      - discovery: scan probes port 631 with an HTTP GET / and
        accepts hosts whose <title> contains a Zebra / ZTC
        signature. No full IPP parser needed for the fingerprint.
      - data model: NetworkPrinter gains a Protocol field
        ("raw" or "ipp"); UIDs prefix accordingly ("net:host:port"
        vs "ipp:host:port"); a new Connection value "ipp" routes
        Write/Read/Query through the IPP backend.
      - write path: hand-rolled IPP Print-Job over HTTP with
        document-format `application/vnd.zebra-zpl` — Zebra
        registered that MIME type so the firmware renders our
        existing ZPL templates natively, no protocol translation.
        ~150 lines, no external deps.
      - DPI auto-detect: ZSB-DP14 is 300 dpi (not 203). The
        agent's GetPrinterDpi D-Bus method now queries IPP
        `printer-resolution-default` for ipp: printers via
        hand-rolled Get-Printer-Attributes, so Test Prints demos
        scale to the right physical size on ZSB hardware.
      - AddNetworkPrinter auto-detects Protocol from port (631 →
        ipp), so the existing UI flow (Scan → click result → Add)
        works without protocol-aware UI changes.
  * SGD-style probes (~HI, ~HS, ~HQES, ! U1 getvar, ^HH config
    dump) return a typed error on IPP printers — IPP doesn't
    tunnel host-commands the way raw-9100 does. The Printers
    page row degrades gracefully: prints work, dpi auto-detect
    works, but per-printer dims subtitle is suppressed.
  * Cross-tab refresh: adding or removing a network printer on
    the Printers page now bubbles refresh_all() through
    ZbplWindow so the Test Prints picker re-pulls in the same
    moment. Was an in-place self-refresh; the Test Prints tab
    showed stale data until the user re-activated it.

 -- Unified Retail Services Ltd <support@printplatformpro.com>  Sun, 17 May 2026 21:50:00 +0100

pppro-browser-linux (2.4.2-1) unstable; urgency=medium

  * Network printer discovery + smart scan. New ScanNetworkPrinters
    D-Bus method runs a parallel mDNS (avahi) + subnet sweep with
    ZPL ~HI host-identification probe; surfaces every Zebra on
    the local /24 plus any caller-supplied extra subnet. New
    internal/discovery/ package with full Zebra-signature detection
    (the canonical Zebra response is wrapped in STX/ETX framing —
    strip both before fingerprinting). Settings UI's Add-Network-
    Printer dialog gains a "Scan network" section that fills the
    manual entry fields on click.
  * Add a network printer / Remove a network printer D-Bus methods
    (AddNetworkPrinter, RemoveNetworkPrinter) so the Settings UI
    can manage the agent's network-printers.json without the user
    needing the CLI. Each network printer row now has a destructive
    ✕ icon to remove it; USB + Bluetooth rows show a greyed ✕ so
    the row chrome stays symmetric.
  * Printers tab restructured into USB · Network · Bluetooth
    sub-tabs (Adw.ViewSwitcher) for the per-transport setup
    affordances; the "Connected printers" list stays ALWAYS visible
    below the switcher, with two prefix icons per row — the
    standard printer glyph plus a transport icon (USB / network /
    bluetooth) so users can identify each printer's transport at
    a glance.
  * Fix network printer SGD response loss. Every host-command
    probe (~HI, ~HS, ~HQES, ^HH config dump, all SGD getvars) now
    uses a new Printer.Query() method that keeps ONE connection
    open across write→read. The previous Write-then-Read pattern
    silently dropped responses on TCP and Bluetooth transports
    because closing the write connection discarded the kernel's
    receive buffer; USB worked through endpoint-level buffering.
    Symptom of the bug: networked ZD230 returned no dpi / label
    length / status on the Test Prints tab, status probes logged
    "unparseable HQES response". All SGD callers across
    dbusapi/service.go, printerops/, and diagnostics/ converted.
  * FNSKU + Transparency demo: ZD220/ZD421 cross-firmware
    consistency. Switched the template from ^CF (set-once font)
    to per-field canonical ^FO → ^A0N,h,w → ^FB → ^FD → ^FS form
    so the title's multi-line wrap math is identical on ZD220
    (font-A fallback) and ZD421 (true scalable font 0). Same fix
    applied to the plain FNSKU template. Added ^FWN prologue to
    reset field-word orientation each label, immune to lingering
    session state. The Do-Not-Cover caption is back as rotated
    text in canonical form so the rotation is field-scoped.
  * UI polish: dropped the libadwaita pill style from every button
    across all tabs (matches the label app's compact pattern);
    Logs page now wraps in Adw.Clamp at the libadwaita 600px
    default so it sits at the same visual width as the other
    Preferences-Page-based tabs; main window default-width 864 →
    1024 to leave room for the Add Network Printer dialog's two
    sections without horizontal squeeze.
  * No protocol or wire-format changes. Browser SDK clients keep
    working unchanged.

 -- Unified Retail Services Ltd <support@printplatformpro.com>  Sun, 17 May 2026 17:00:00 +0100

pppro-browser-linux (2.4.1-1) unstable; urgency=high

  * Settings UI: fix Settings app crash at startup. Both v2.3.4 and
    v2.4.0 shipped a regression where the new Logs page template
    (data/ui/logs_page.blp → ui/logs_page.ui) was referenced from
    Rust code but missing from data/resources.gresource.xml — so
    the .ui blob was never bundled into the GResource bundle and
    GTK couldn't find it at runtime. Symptom: launching
    "Print Platform Pro Browser" from the app menu (or the tray's
    Settings entry) immediately panics with
    "Failed to retrieve template child" and the window never
    appears. The agent itself was unaffected — only the Settings
    UI. Fix is the one-line manifest add; cargo build doesn't
    catch this because the #[template(resource = "…")] macro just
    stores the path string at compile time; failure only fires
    at runtime in gtk_widget_init_template.
  * Affects every v2.3.4 and v2.4.0 install. Hotfix; upgrade
    recommended.

 -- Unified Retail Services Ltd <support@printplatformpro.com>  Sun, 17 May 2026 14:30:00 +0100

pppro-browser-linux (2.4.0-1) unstable; urgency=medium

  * Bluetooth printer support on Linux. The agent now enumerates
    paired Bluetooth Zebra printers via BlueZ (system D-Bus) and
    opens raw AF_BLUETOOTH / BTPROTO_RFCOMM sockets on channel 1
    (SPP) for write + read. Discovery filters by advertised name
    (ZBR / Zebra / ZQ / iMZ / QLn / ZD), matching the patterns the
    macOS path uses. Paired printers appear in the Printers tab
    with Connection="bluetooth" alongside USB and network entries
    — the HTTP layer treats them identically.
  * Settings UI: new "Bluetooth printers" group on the Printers tab
    with a "Pair…" button that opens the system Bluetooth panel
    (tries gnome-control-center, kcmshell6, systemsettings5,
    blueman-manager in that order). Once paired in the system UI,
    the printer is picked up by the agent on the next Refresh.
  * No pairing flow inside the app — that path needs Agent1
    registration + PIN entry; deferring to the system pair UI is
    the right separation of concerns and matches the macOS app's
    pattern of opening System Settings → Bluetooth.
  * Channel discovery: hardcoded to RFCOMM channel 1. Every Zebra
    Bluetooth printer encountered exposes SPP there; future work
    can add SDP-based channel lookup if a printer appears that
    disagrees.
  * Runtime dep: bluez (added to debian/control Depends and RPM
    spec Requires). Modern Linux desktops ship it; missing BlueZ
    degrades gracefully to "no Bluetooth printers" so headless
    servers / containers still work.

 -- Unified Retail Services Ltd <support@printplatformpro.com>  Sun, 17 May 2026 16:00:00 +0100

pppro-browser-linux (2.3.4-1) unstable; urgency=medium

  * Settings UI: new Logs tab, mirroring the macOS Settings app's
    Logs view. Renders a merged ZPL + agent-runtime timeline with
    colour-coded source pills (accent for ZPL, success for AGENT),
    always-on refresh every 3 seconds, search filter, copy-to-
    clipboard, save-to-disk, and per-entry expander for the full
    ZPL payload on print rows. Lives between Test Prints and About
    in the tab strip.
  * Agent now writes its runtime log to a file when
    ZBPL_LOG_PATH is set, and the systemd user unit sets that env
    var to ~/.config/pppro-browser-linux/agent.log. Without this,
    the agent-side stream of the Logs tab would be empty (Linux
    agents previously logged to stderr → journald only). The agent
    also MkdirAll's the parent directory before opening the log,
    so a fresh install where the config dir doesn't exist yet
    starts cleanly instead of fatal'ing at open.
  * No protocol or wire-format changes; the new tab reads the
    existing /__logs/{zpl,agent} HTTP endpoints (same shape used
    by the macOS UI).

 -- Unified Retail Services Ltd <support@printplatformpro.com>  Sun, 17 May 2026 14:30:00 +0100

pppro-browser-linux (2.3.3-1) unstable; urgency=medium

  * Fix tray icon missing after reboot / re-login on Linux. The
    systemd user unit shipped with WantedBy=default.target, which
    is reached very early in the user systemd-pid-1 boot — before
    GNOME / KDE imports DISPLAY and WAYLAND_DISPLAY into the user
    environment. The agent's tray-init code checked for those vars
    at process start, found nothing, logged "running headless", and
    stayed trayless for the rest of the session. Unit now installs
    with WantedBy=graphical-session.target, which the shell only
    reaches after import-environment runs. Pairs with the existing
    PartOf=graphical-session.target so the agent also stops cleanly
    at logout.
  * postinst now migrates existing installs: removes the stale
    /etc/systemd/user/default.target.wants/ symlink (and the
    per-user equivalent under ~/.config/) so the unit isn't
    double-wanted post-upgrade, then restarts (not just starts)
    the running agent for every logged-in user so the
    already-headless process is replaced by a fresh one that
    inherits the now-imported display env.

 -- Unified Retail Services Ltd <support@printplatformpro.com>  Sun, 17 May 2026 13:00:00 +0100

pppro-browser-linux (2.3.2-1) unstable; urgency=medium

  * macOS Settings: Logs tab now actually renders. v2.3.1 had two
    bugs blanking it: URL.appendingPathComponent encoded "?" into
    "%3F" so /__logs/zpl?limit=N hit a 404, and `.fixedSize` on the
    long header Text silently blanked the whole detail pane on
    macOS 26.
  * Logs tab is now a single merged timeline (ZPL traffic + agent
    activity) with colour-coded source pills, search filter,
    always-on live refresh, Copy-to-clipboard + Save-to-disk.
  * Per-printer status icon on the Printers tab: ready / warning
    / error / offline with a plain-English summary line. Reads
    `~HS` (universal across every Zebra model since the 90s)
    rather than `~HQES` (entry-level ZD220-class doesn't support
    it).
  * USB bulk-in pipe drain before status queries — prior queries'
    leftover bytes from /diagnostics no longer pollute the ~HS
    read on macOS IOKit.
  * Log noise: D-Bus export attempt only logs on Linux; macOS
    tray startup line reads "NSStatusBar" not "DISPLAY/WAYLAND".
  * About panel: removed the GitHub Source link.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Sun, 17 May 2026 11:30:00 +0000

pppro-browser-linux (2.3.1-1) unstable; urgency=medium

  * macOS Settings app: real AppIcon (was shipping the default
    dotted-square placeholder).
  * New Logs tab in the Settings app: ZPL traffic + agent runtime
    log streams with live filter, auto-refresh, expandable
    payloads, and save-to-disk export.
  * macOS LaunchAgent: capture stdout/stderr + ZBPL_LOG_PATH to
    ~/Library/Logs/PrintPlatformProBrowser/. Previously the
    agent's runtime log went to /dev/null on the .pkg install
    path — major debug gap closed.
  * Go agent: new /__logs/{zpl,agent} endpoints plus raw-download
    variants feeding the Logs tab.
  * Billing: drop trial_period_days from Stripe Checkout so
    subscribers pay immediately. The 30-day trial is now
    exclusively via the agent install path.
  * release-macos.yml: select Xcode 16 explicitly + flip
    workflow_dispatch precedence so manual re-runs against a
    given tag work correctly.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Sun, 17 May 2026 09:30:00 +0000

pppro-browser-linux (2.3.0-1) unstable; urgency=medium

  * macOS Browser Print agent reaches General Availability —
    universal binary, SwiftUI Settings app (Status / Domains /
    Printers / Test Prints / About), pppro-browser:// URL scheme
    for tray → app deep links, end-to-end validated on real ZD220
    hardware.
  * IOKit-native USB on macOS via IOUSBInterfaceInterface300 +
    USBInterfaceOpenSeize — removes the libusb dependency and
    survives hot-unplug/replug with handle invalidation +
    retry.
  * Network printers (TCP raw socket / JetDirect port 9100) and
    Bluetooth SPP printers (paired via System Settings, surfaced
    via /dev/tty.*) supported on every platform.
  * File-backed printer-info cache with timestamp-based hit
    detection — UI tab switches no longer trigger USB probes;
    explicit ↻ refresh button is the only path to fresh SGD
    queries.
  * User-facing copy reviewed end-to-end — ZPL-speak replaced
    with plain language, offset directions explained from the
    operator's perspective.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Sat, 16 May 2026 09:30:00 +0000

pppro-browser-linux (2.2.18-1) unstable; urgency=medium

  * Strip unresolved <screenshots> URLs from BrowserAgent metainfo.
    v2.2.17's appstreamcli compose hit "file-read-error" trying to
    GET https://printplatformpro.com/screenshots/{origins,settings}.png
    — both 404s — and collapsed the per-component catalog to a
    20-byte empty <components> wrapper. Reinstate the block once
    the website actually publishes screenshots.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Thu, 14 May 2026 21:40:00 +0000

pppro-browser-linux (2.2.17-1) unstable; urgency=medium

  * Compose AppStream catalog per-component (fault-isolated) and
    merge outputs. v2.2.16 surfaced the real failure mode:
    appstreamcli compose was raising two file-read-error events
    on icons and aborting the whole batch with exit 1, leaving
    zero output. Looping over each component dir produces
    catalog data for whichever ones DO process cleanly, and
    we concatenate the per-component XML fragments into one
    pppro.xml.gz at the end.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Thu, 14 May 2026 23:15:00 +0000

pppro-browser-linux (2.2.16-1) unstable; urgency=medium

  * More compose-step debug: pipefail on rpm2cpio|cpio,
    byte-count + stderr capture for rpm2cpio, and ls of the
    extracted usr/share/ tree before invoking compose. v2.2.15
    confirmed find /usr/share/metainfo was empty after unpack
    — likely rpm2cpio failing silently; need to see the
    bytes output / stderr.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Thu, 14 May 2026 22:55:00 +0000

pppro-browser-linux (2.2.15-1) unstable; urgency=medium

  * appstreamcli compose debug visibility: drop the
    `cpio -idm 2>/dev/null` mask so unpack errors surface,
    `ls`-confirm each component's metainfo + desktop after
    extraction, run compose with `--verbose`, and capture
    its exit code separately so stderr is no longer collapsed
    by the previous `|| { ...; exit 0; }` short-circuit.
    v2.2.14 had compose exit non-zero with zero visible output
    — these changes pin down the actual cause.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Thu, 14 May 2026 22:40:00 +0000

pppro-browser-linux (2.2.14-1) unstable; urgency=medium

  * appstreamcli compose: drop --media-dir. Our metainfo doesn't
    reference external screenshots/videos, so the flag triggers
    "Media result directory is set, but media base URL is not"
    and aborts the compose. With it dropped the AppStream catalog
    actually lands in the DNF repo metadata.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Thu, 14 May 2026 22:15:00 +0000

pppro-browser-linux (2.2.13-1) unstable; urgency=medium

  * release-linux.yml: install `appstream-compose` apt package
    alongside `appstream`. v2.2.12's `appstreamcli compose`
    invocation failed with "AppStream Compose binary
    '/usr/libexec/appstreamcli-compose' was not found!" because
    Debian/Ubuntu split the compose addon into its own package.
    With it installed the catalog actually gets produced + indexed
    into the DNF repo metadata.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Thu, 14 May 2026 21:55:00 +0000

pppro-browser-linux (2.2.12-1) unstable; urgency=medium

  * release-linux.yml: migrate Generate AppStream catalog step
    from the phased-out `appstream-builder` (appstream-glib
    project, no longer packaged on Ubuntu Noble) to
    `appstreamcli compose` from the maintained `appstream`
    package. Pipeline: unpack each latest-per-name .rpm into a
    components dir via rpm2cpio|cpio, run appstreamcli compose
    over them, stage the produced XML/icons at the names
    modifyrepo_c expects (pppro.xml.gz + pppro-icons.tar.gz).
    GNOME Software / Discover will surface a polished card +
    working Install/Uninstall button for both apps.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Thu, 14 May 2026 21:30:00 +0000

pppro-browser-linux (2.2.11-1) unstable; urgency=medium

  * build-msi.ps1: pass `-bindpath $Stage` to `wix build` so the
    bundled WixToolset.UI.wixext's LicenseAgreementDlg.wxs can
    resolve its hardcoded `EULA.rtf` reference. Our own Product.wxs
    already uses `$(var.StageDir)\EULA.rtf`, but the WixUI
    extension's loose reference goes through the binder's search
    path; without bindpath it failed with WIX0103.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Thu, 14 May 2026 21:10:00 +0000

pppro-browser-linux (2.2.10-1) unstable; urgency=medium

  * Ship the two installer resources Product.wxs references that
    were missing from the repo:
      - apps/browser-print/windows/installer/AppIcon.ico — 16/32/
        48/64/128/256-px ICO generated from the tray icon.png.
      - apps/browser-print/windows/installer/EULA.rtf — RTF wrap
        of LICENSE (the WixVariable WixUILicenseRtf points at
        this; the WixToolset.UI.wixext's LicenseAgreementDlg
        reads it). v2.2.9 hit WIX0103 "Cannot find the Icon /
        Control file" because build-msi.ps1's Copy-Item had
        -ErrorAction SilentlyContinue and silently skipped the
        missing sources.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Thu, 14 May 2026 20:45:00 +0000

pppro-browser-linux (2.2.9-1) unstable; urgency=medium

  * Product.wxs: give the agent .exe `<File>` an explicit
    `Id="AgentExe"` so the StartAgent CustomAction's `FileRef=`
    resolves. WiX 4 auto-generates a hash-based Id when omitted,
    which doesn't match the matching Component Id — they're
    different namespaces. v2.2.8 hit WIX0094 here.

  * Fix /__approve POST rejected as "cross-origin approval
    submission rejected" when the user reaches the prompt via a
    loopback alias other than the canonical `localhost`.
    `isSameOrigin` now runs both the inbound Origin/Referer and
    the agent's `SelfOrigin` through `canonicaliseLoopback`, which
    normalises 127.0.0.1 / [::1] / 0.0.0.0 → localhost on both
    sides. Foreign origins (incl. evasion attempts like
    `localhost.evil.com` and `127.0.0.1.nip.io`) are still
    rejected — only the four loopback aliases are accepted.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Thu, 14 May 2026 20:20:00 +0000

pppro-browser-linux (2.2.8-1) unstable; urgency=medium

  * macOS build-zip.sh now leaves the raw .app bundle in $DIST after
    zipping so build-pkg.sh's `find "$DIST" -name "*.app"` succeeds.
    Previously the script tore down $STAGE here and the .pkg job
    failed with "fatal: Print Platform Pro Browser.app not found".

  * Linux publish-rpm-repo "Generate AppStream catalog" step made
    non-fatal: Ubuntu Noble's `appstream-util` package no longer
    ships the `appstream-builder` binary, so the step warns + skips
    on a missing binary. RPM/DEB publish still works; only the
    GNOME Software metadata is absent. Proper fix is migrating to
    `appstreamcli compose` from the `appstream` package.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Thu, 14 May 2026 19:55:00 +0000

pppro-browser-linux (2.2.7-1) unstable; urgency=medium

  * release-windows.yml: install the WiX UI extension after the
    WiX CLI itself. Product.wxs references `WixToolset.UI.wixext`
    via `-ext`; without it `wix build` errors with WIX0144 "could
    not be found" and the .msi never gets written, breaking the
    follow-on Copy-Item for the *_latest_x64.msi alias.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Thu, 14 May 2026 19:30:00 +0000

pppro-browser-linux (2.2.6-1) unstable; urgency=medium

  * chmod +x in the git index for four shell scripts that the
    workflows / users invoke directly via the shell:
      - apps/browser-print/macos/installer/build-pkg.sh (the
        .pkg build that v2.2.5 hit with "Permission denied")
      - apps/browser-print/macos/Install.sh
      - apps/browser-print/macos/Uninstall.sh
      - apps/browser-print/linux/packaging/repo/install-deb-repo.sh
    Same class of bug as build-zip.sh in v2.2.1; cleaned them all
    up in one pass.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Thu, 14 May 2026 19:15:00 +0000

pppro-browser-linux (2.2.5-1) unstable; urgency=medium

  * Three concrete release-workflow bugs surfaced by v2.2.4's
    hosted-runner revert, all fixed:
      - release-linux.yml: apt package is `appstream-util` (which
        ships the `appstream-builder` binary), NOT `appstream-glib`.
        That misnomer is why every previous Ubuntu install hit
        "Unable to locate package". The 22.04 pin on
        publish-rpm-repo is no longer needed; reverted to
        ubuntu-latest.
      - apps/browser-print/macos/scripts/build-zip.sh: amd64 build
        is now `|| true` so a missing x86_64 libusb (very common on
        the arm64 macos-14 runners) falls back to single-arch arm64
        instead of aborting the whole script under `set -e`.
      - apps/browser-print/windows/installer/build-msi.ps1: $Root
        now ascends 4 levels (../../../..) to reach the repo root.
        The 3-level form landed at <workspace>/apps, producing the
        doubled /apps/apps/ path that broke Push-Location.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Thu, 14 May 2026 18:45:00 +0000

pppro-browser-linux (2.2.4-1) unstable; urgency=medium

  * Revert tag-driven release workflows to GitHub-hosted runners.
    Self-hosted reserved for the platform/web side that needs
    prod-like infra; release artefact builds are rare and benefit
    from pre-installed Xcode / MSVC / WiX / NSIS on hosted runners.
      - release-linux.yml: ubuntu-latest for build/publish jobs,
        ubuntu-22.04 pin retained on publish-rpm-repo (for
        appstream-glib until we migrate to appstreamcli compose).
      - release-macos.yml: macos-14 for build jobs, ubuntu-latest
        for the publish job.
      - release-windows.yml: windows-latest for build jobs,
        ubuntu-latest for the publish job.
    Pairs with the path / cross-compile / chmod fixes already on
    main (v2.2.1 + v2.2.2), so the hosted runners should now reach
    every step end-to-end.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Thu, 14 May 2026 18:00:00 +0000

pppro-browser-linux (2.2.3-1) unstable; urgency=medium

  * Switch release-{linux,macos,windows}.yml release jobs from
    GitHub-hosted runners to `self-hosted`. Single shared label
    matches the existing CI / deploy convention. The user is
    provisioning the runners with whatever toolchain the build
    jobs need (Go, Rust, rpmbuild, dpkg-buildpackage, GTK/WebKit,
    libusb, codesign / signtool, etc.); GitHub-hosted runners were
    hitting layered failures around package availability and
    cross-arch toolchains we can side-step entirely on self-hosted.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Thu, 14 May 2026 17:30:00 +0000

pppro-browser-linux (2.2.2-1) unstable; urgency=medium

  * Release-script + workflow path/runner fixes (no behaviour
    changes; /__info endpoint unchanged from 2.2.0):
      - apps/browser-print/macos/scripts/build-zip.sh: ROOT now
        ascends 4 levels (../../../..) so it lands at the repo
        root instead of <workspace>/apps, fixing the doubled
        /apps/apps/ path that broke pushd $AGENT_SRC.
      - apps/browser-print/windows/scripts/build-zip.ps1: DistRoot
        now ascends 2 levels above $Root (apps/browser-print)
        instead of 3, so the zip lands at <repo>/dist where
        upload-artifact looks for it.
      - .github/workflows/release-linux.yml: publish-rpm-repo job
        pinned to ubuntu-22.04. Noble (24.04) dropped the
        appstream-glib apt package that provides appstream-builder.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Thu, 14 May 2026 16:30:00 +0000

pppro-browser-linux (2.2.1-1) unstable; urgency=medium

  * Cross-platform release-workflow fixes (no protocol changes; the
    /__info endpoint shipped in 2.2.0 is unchanged). Linux .deb build
    no longer trips on the stale debian/compat file (label-app dir),
    macOS build-zip.sh has its executable bit set in the index, and
    the Windows cross-compile no longer fails on usb.Printer /
    ReadTimeout / webview_go — shared types moved out of the
    linux-tagged file, webview gated behind //go:build linux with a
    `open`/`rundll32` fallback for darwin/windows.

 -- Print Platform Pro Builds <support@printplatformpro.com>  Thu, 14 May 2026 16:00:00 +0000

pppro-browser-linux (2.2.0-1) unstable; urgency=medium

  * Add GET /__info workstation-identity endpoint mounted on both
    :9100 and :9101, behind the same CORS allowlist as /available.
    Returns hostname, machineId (/etc/machine-id with fallback to
    /var/lib/dbus/machine-id), os, osPretty (parsed from
    /etc/os-release PRETTY_NAME), kernel (uname.Release), arch
    (uname.Machine), and the agent's build-stamped version.
    Cross-origin Hub dashboards use this to recognise the same
    workstation across reinstalls; empty-field fallback when any
    source is unavailable.
  * macOS + Windows cross-compile carry equivalent implementations:
    IOPlatformUUID via ioreg + sw_vers (Darwin); MachineGuid +
    CurrentVersion via registry (Windows).

 -- Print Platform Pro Builds <support@printplatformpro.com>  Thu, 14 May 2026 10:00:00 +0000

pppro-browser-linux (2.0.0-1) unstable; urgency=medium

  * Rebrand to Print Platform Pro Browser. Source package renamed
    zebra-browser-print-linux → pppro-browser-linux; the old binary
    package is Replaced/Conflicted so `apt upgrade` swaps it in
    cleanly. Provides: zebra-browser-print-linux keeps reverse-deps
    resolving.
  * Ship AppStream MetaInfo + .desktop launcher + branded hicolor
    icons (12 sizes + symbolic SVG) so GNOME Software / KDE Discover
    show the correct branding instead of the package-name fallback.
  * Licence: switched from MIT to a proprietary EULA referencing
    https://printplatformpro.com/terms.
  * postinst: stops + disables the old user systemd unit if active so
    port 9100/9101 doesn't double-bind during the upgrade.
  * First-launch shim in the binary migrates
    ~/.config/zebra-browser-print-linux/ → ~/.config/pppro-browser-linux/
    so existing approvals + printer settings carry over.
  * No protocol or behavioural changes; wire-compat with v1.0.x.

 -- Unified Retail Services Ltd <support@printplatformpro.com>  Tue, 12 May 2026 12:00:00 +0000

zebra-browser-print-linux (1.0.1-1) unstable; urgency=medium

  * UI translations: ship 12 locales (de, zh_CN, pt_BR, ja, es, fr, it,
    ko, pl, ru, tr, ar). Existing English source stays the reference.
    Locale resolves from $LANG at runtime; .mo catalogues installed to
    /usr/share/locale/<lang>/LC_MESSAGES/ via the release pipeline.
  * release-linux.yml: msgfmt step + .mo bundling in tarball.
  * No protocol or behavioural changes — wire-compat with v1.0.0.

 -- Unified Retail Services Ltd <support@printplatformpro.com>  Tue, 12 May 2026 06:00:00 +0000

zebra-browser-print-linux (1.0.0-1) unstable; urgency=medium

  * First production release.
  * libadwaita UI: 5 tabs (Status, Domains, Printers, Test Prints, About).
  * Test Prints: 11 demo labels covering ZPL text, fonts, 1D/2D barcodes,
    graphics primitives, embedded GFA bitmaps, FNSKU + Transparency,
    shipping labels.
  * Per-printer Print Offset (additive ^LS+^LT injection).
  * Per-printer Print Quality (speed + darkness, saved to NV).
  * Per-printer Diagnostics report covering all standard ZPL queries.
  * ZPL history log with rotation; downloadable from the About tab.
  * Polkit rule auto-allows --fix-perms for wheel/sudo (silent Refresh).
  * Async-fill of printer rows so the window opens instantly.

 -- Unified Retail Group <support@unifiedretail.com>  Mon, 11 May 2026 18:30:00 +0000

zebra-browser-print-linux (0.3.0-1) unstable; urgency=medium

  * Initial Debian package. Mirrors the RPM build under packaging/rpm/.

 -- Unified Retail Group <support@unifiedretail.com>  Fri, 08 May 2026 09:00:00 +0000
