Back to blog
2026-06-12 Thijs Creemers

Release: v1.0.1-alpha-30

We just tagged v1.0.1-alpha-30. This is a feature release focused on boundary-payments: the IPaymentProvider port is extended with off-session payments, checkout-session expiry and mandate-aware checkout options (BOU-62). This is preparatory work for the Stripe PaymentIntents adapter (BOU-63) and the boundary-license billing engine.

Added: off-session, expiry and mandate-aware checkout on IPaymentProvider

The port gains two new methods and richer checkout options:

  • create-off-session-payment — charge a stored mandate without the customer present, returning a :pending, :paid or :failed result.

  • expire-checkout-session — programmatically expire an open checkout session.

  • create-checkout-session now accepts setup-future-usage, customer-email and provider-customer-id, so a checkout can establish a mandate for later off-session charges.

The schemas follow suit: a shared PaymentStatus enum (:pending :paid :failed :cancelled :expired :chargeback) aligned with boundary-license, new OffSessionPaymentRequest/Result and ExpireCheckoutResult schemas, and optional payment-id / mandate fields on CheckoutResult and PaymentStatusResult.

The mock adapter implements all new methods (auto-approve by default, with a :mock-status metadata override and mock mandate ids), so application code and tests can target the full port today. The Stripe and Mollie adapters stub the new methods with clear {:type :not-implemented} errors until BOU-63 lands.

Fixed: Mollie expired payments

Two corrections to expiry handling in the Mollie adapter:

  • Mollie’s "expired" status now maps to :expired instead of :failed, matching the new shared status enum.

  • Mollie sends a webhook when a payment expires, but the event normalizer had no "expired" entry — process-webhook threw an :internal-error and :expired was only reachable via polling. A new :payment.expired event type lets expired webhooks flow through normally.

Fixed: GitHub release creation in the publish workflow

The publish workflow introduced in alpha-29 could publish to Clojars but lacked permission to create the GitHub release; publish.yml now grants contents: write so the release is created automatically alongside the Clojars deploy.

Version alignment

All 25 libraries bumped to v1.0.1-alpha-30 to maintain lockstep versioning.

Upgrade

Re-run the installer to pick up the latest release:

curl -fsSL https://get.boundary-app.org | bash

The port changes are additive — existing IPaymentProvider consumers keep working. Note one behavioural change: Mollie payments that expire now surface as :expired rather than :failed; if you branch on :failed to detect expiry, switch to :expired.

Feedback and issues welcome on GitHub.