PlugStream is continuously updated to improve reliability, security, and user experience. This page provides a transparent record of every software and firmware release, including what changed and why it matters.
Latest
Billing API 1.5.6
Billing API – 1.5.6
1.5.6
Tests: passed (190/190)Coverage: 53.3%
Service
October 26, 2026
Tags
#billing-api
Billing API – 1.5.6
1.5.6 (2026-10-26)
Bug Fixes
accounts: a duplicate billing account is a 409, not a 500 (01d96ed)
config: a blank DATABASE_URL falls back to DATABASE__URL (FINDINGS #34) (e9f46e5)
config: Debug output never prints Xero, database or broker credentials (FINDINGS #34) (ed894b8)
config: only an explicit [secure] value turns XERO_DRY_RUN off (FINDINGS #26) (b353f6c)
errors: a 500 database_error body no longer echoes the driver message (FINDINGS #32) (4ce024a)
idempotency: a successful operation never runs twice under one key (FINDINGS #25) (0d48d42)
invoices: an amount too large to store is a 422, not a 500 (932cc71)
invoices: keep an invoice's lines in the order they were given (e4891f3)
invoices: write an invoice and its lines at once, and never strand claimed events (7b52265)
order-sync: keep order-api's address out of the sync-queue warning (11c5fcd)
order-sync: never raise two customers' orders on one "unknown" account (4ba7ce4)
runs: a PATCH cannot approve, execute or reopen a billing run (daf2efa), closes #15
runs: a run whose invoice never reached Xero is failed, not completed (05bbc1b)
subscriptions: don't complete a run whose events could not be reported (49dd07f)
subscriptions: one tenant's failure no longer stops the monthly job (0347ce0)
subscriptions: overlapping monthly jobs draft one run per account (15a5feb)
subscriptions: report events invoiced once Xero holds their invoice (191b8fa)
suspension: a hung Sentinel can't lock the operator out of a retry (b7b1600)
suspension: a suspension or resume Sentinel did not carry out is not done (795ddfc)
suspension: take a suspension decision only from the status it applies to (e9aa7b9)
xero: make XERO_TENANT_ID optional, as the README documents (b63d700)
xero: never raise an invoice in Xero twice or re-email a sent one (d5c7fb1), closes #11 #1
xero: never send a paid or voided invoice again (c4cbab5), closes #6
xero: record a failed customer email like any other Xero failure (e66e816)
xero: record a replayed webhook delivery once (abbda1a)
xero: stop trusting dry-run placeholder ids once dry run is off (d8abffc)