Expand description
PostgreSQL schema contract and transaction orchestration for Syrup Rail.
Production service construction must not expose or invoke a migrator; host applications materialize versioned install artifacts as immutable migrations.
§syrup-rail-postgres
syrup-rail-postgres provides Syrup Rail’s canonical provider-neutral ledger,
SQLx operations, and high-level subscription billing service. Version 0.2
supports PostgreSQL 18 only and uses schema v2.
[dependencies]
syrup-rail = "0.2.0"
syrup-rail-postgres = "0.2.0"New hosts install schema/v2/install.sql through their normal migration
system. Hosts upgrading from 0.1 must stop every 0.1 billing writer, run the
checked-in v1 preflight and retry-reclassification audit, apply
schema/v2/upgrade_from_v1.sql transactionally, and roll forward with 0.2.
Schema v1 is immutable. Budget the stopped-writer maintenance window for a
full payment-attempt heap scan and transactional partial-index construction;
the detailed cutover guide explains the lock and rehearsal requirements.
After the host applies its migration and before it serves billing traffic, verify the runtime catalog:
syrup_rail_postgres::assert_runtime_schema_v2_compatible(pool).await?;During REINDEX CONCURRENTLY, PostgreSQL exposes the command, phase, and
target details only to the maintenance role and statistics-privileged roles.
The runtime assertion tolerates _ccnew and _ccold shadows only when those
visible progress details and the backend’s relation locks agree, then rechecks
the evidence before committing. Run maintenance and startup validation as the
same database role when startup must remain available during a reindex; a
cross-role observer fails closed. Drop stale invalid shadows left by failed
maintenance before serving billing traffic.
SubscriptionBillingService is the primary mutation facade. Hosts supply
offer locking, gateway resolution, abuse admission, and a transaction
coordinator that locks the authorized billing subject first and appends every
typed BillingEvent to the host outbox on the same connection. The packaged
host_integration example includes concrete service wiring and a versioned,
redacted host-owned event-envelope mapping. It separates first-write metadata
from the replay-stable value and demonstrates the complete atomic
insert/conflict-read/raw-structural-comparison/typed-reconstruction path on the
same transaction. Version 1 owns its nested enum labels instead of delegating
them to core display methods. The example keeps subject identifiers and
payload values out of Debug output; its card payload uses the core canonical
brand vocabulary and never copies an unknown provider string into the host
event.
Errors returned by host transaction, event, charge-target, and operator-review
callbacks remain opaque through ordinary formatting and the standard
Error::source() chain. A host can deliberately recover its original callback
error only by classifying the outer service error, destructuring an owned
callback-error variant, and consuming that wrapper with into_source() in a
protected diagnostic path.
Customer billing portal/history queries, stable due-renewal pagination, and other lower-level transaction-local operations remain available for hosts that need to compose them into a larger application transaction. The protected-write guard described below deliberately owns its top-level transaction instead. Authentication, authorization, migrations, job queues, and event transport remain host-owned.
Protected product writes use two ownership-enforced phases. Start an
EntitlementWriteTransaction from the pool and use its connection for any
preparatory host writes; that pending value has no commit operation.
require_entitlement_for_update returns an
AdmittedEntitlementWriteTransaction only when current paid or granted access
is admitted and keeps the relevant locks held for the host mutation. Completed
denials and SQL failures await rollback, while cancellation queues rollback of
the owned transaction, including any earlier host writes. Perform and commit
the host-owned protected mutation only through the admitted value, and finish
any nested savepoint before consuming that value with commit or rollback.
This package is proprietary software distributed under the terms in the
packaged LICENSE file.
Structs§
- Admitted
Entitlement Write Transaction - A top-level transaction that passed entitlement admission.
- Admitted
Host Charge - Admitted
Subscription Enrollment - One committed final-admission result that authorizes exactly one immediate provider submission by consuming this value.
- Admitted
Subscription Payment Method Replacement - One committed final-admission result authorizing exactly one immediate Customer Vault mutation.
- Admitted
Subscription Recovery - One committed final-admission result authorizing exactly one immediate subscription-recovery submission.
- Admitted
Subscription Renewal - One committed final-admission result authorizing exactly one immediate automatic recurring charge.
- Billing
Event Write Error - Value-redacted failure returned while appending a host outbox event.
- Billing
Transaction Error - Value-redacted failure returned by the host transaction coordinator.
- Entitlement
Write Transaction - A top-level PostgreSQL transaction awaiting entitlement admission.
- External
Reversal Host Store Error - Value-redacted failure returned by the host’s reversal target store.
- Gateway
Lifecycle Quarantine Alert - Gateway
Lifecycle Quarantine Resolution Record - Gateway
Lifecycle Quarantine Review Record - Gateway
Lifecycle Reconciliation Summary - Host
Charge Ledger Admission Query - Host
Charge Submission Admission - Host
Charge Target Error - Value-redacted failure returned by the host charge-target store.
- Host
Charge Target Reservation - Manual
Attempt Failure Host Store Error - Value-redacted failure returned by the host’s manual-failure store.
- Processor
Charge Classification Summary - Subscription
Billing Service - High-level provider-neutral billing facade for authorized host commands.
- Subscription
Enrollment Offer Context - Stable identity and lifecycle context for locking an enrollment offer.
Enums§
- Billing
Transaction Subject State - Durable availability of the host recipient locked for a billing event.
- Compensating
Processor Charge Outcome - Entitlement
Guard Error - Entitlement
Query Error - Exact
Query Observation - External
Reversal Attestation Outcome - External
Reversal Host Transition Outcome - Gateway
Lifecycle Apply Outcome - Gateway
Lifecycle Quarantine Resolution Outcome - Gateway
Lifecycle Reconciliation Error - Gateway
Mutation Cooldown Scope - Canonical cooldown level that stopped a gateway mutation before submission.
- Host
Charge Admission Outcome - Host
Charge Application Error - Host
Charge Ledger Admission - Host
Charge Ledger Admission Error - Host
Charge Ledger Admission Mode - Host
Charge Preflight Outcome - Host
Charge Provider Result - Host
Charge Reservation Decision - Host
Charge Reservation Outcome - Host
Charge Store Error - Host
Charge Submission Decision - Host
Charge Submission Outcome - Manual
Attempt Failure Host Transition Outcome - Operator
Review Error - Payment
Attempt Store Error - Processor
Charge Observation Outcome - Processor
Charge Store Error - Renewal
Store Error - Schema
Conformance Error - Why a host database does not satisfy a canonical schema contract.
- Subscription
Billing Portal Query Error - Error returned while loading a customer-facing billing portal projection.
- Subscription
Billing Service Error - Failure returned by the high-level subscription billing facade.
- Subscription
Billing Service Error Disposition - A stable, conservative operational category for a
SubscriptionBillingServiceError. - Subscription
Cancellation Error - Subscription
Discount Operation Error - Subscription
Enrollment Admission Outcome - Subscription
Enrollment Application Error - Subscription
Enrollment Offer Stage - The lifecycle boundary at which enrollment terms are locked.
- Subscription
Enrollment Provider Result - Subscription
Grant Mutation Error - Subscription
Payment Method Replacement Admission Outcome - Subscription
Payment Method Replacement Provider Result - Subscription
Recovery Admission Outcome - Subscription
Recovery Provider Result - Subscription
Renewal Admission Outcome - Subscription
Renewal Provider Result
Constants§
- SUPPORTED_
POSTGRES_ MAJOR_ VERSION - The only PostgreSQL major version supported by this crate and schema contract.
Traits§
- Billing
Transaction - One host-owned transaction and its typed event projection capability.
- Billing
Transaction Coordinator - Host-prepared transaction whose subject authorization lock is acquired before any shared billing lock.
- External
Reversal Host Store - Host
Charge Target Store - Host-owned target extension composed into shared ledger transactions.
- Manual
Attempt Failure Host Store - Subscription
Offer Store
Functions§
- activate_
gateway_ configuration - Activates an exact gateway configuration without touching cooldown state.
- admit_
host_ charge_ submission - admit_
host_ charge_ submission_ in_ transaction - admit_
subscription_ enrollment_ submission - Owns and commits final enrollment admission before exposing a one-shot
submission capability. A rolled-back transaction can never yield the
capability consumed by
submit_admitted_subscription_enrollment. - admit_
subscription_ enrollment_ submission_ in_ transaction - Revalidates a prepared initial attempt and durably admits its one provider mutation.
- admit_
subscription_ payment_ method_ replacement - Commits final payment-method replacement admission before exposing its one-shot Customer Vault capability.
- admit_
subscription_ payment_ method_ replacement_ in_ transaction - Revalidates the exact subscription baseline and commits one-shot Customer Vault admission. Semantic drift terminalizes the prepared attempt.
- admit_
subscription_ recovery_ submission - Commits final recovery admission before exposing its one-shot capability.
- admit_
subscription_ recovery_ submission_ in_ transaction - Revalidates the exact locked snapshot and commits one-shot provider admission. Every semantic rejection terminalizes the prepared attempt.
- admit_
subscription_ renewal_ submission - Commits final automatic-renewal admission and captures the exact stored credential.
- admit_
subscription_ renewal_ submission_ in_ transaction - Revalidates one exact renewal snapshot and commits one-shot submission admission.
- apply_
exact_ query_ observation - Applies one authoritative negative exact-query observation.
- apply_
gateway_ lifecycle_ evidence - apply_
host_ charge_ gateway_ outcome - apply_
reconciled_ host_ charge_ gateway_ outcome - apply_
reconciled_ subscription_ enrollment_ gateway_ outcome - Applies an already-observed provider outcome to an exact durable enrollment attempt.
- apply_
reconciled_ subscription_ payment_ method_ replacement_ gateway_ outcome - apply_
reconciled_ subscription_ recovery_ gateway_ outcome - Re-enters the same recovery application authority from durable evidence and never resolves a live gateway or submits another mutation.
- apply_
reconciled_ subscription_ renewal_ gateway_ outcome - apply_
staged_ gateway_ lifecycle_ evidence - apply_
subscription_ enrollment_ gateway_ outcome - Applies one initial-enrollment gateway outcome to the durable billing ledger.
- apply_
subscription_ payment_ method_ replacement_ gateway_ outcome - apply_
subscription_ recovery_ gateway_ outcome - Applies one recovery outcome through the canonical charge ledger and host billing transaction.
- apply_
subscription_ renewal_ gateway_ outcome - assert_
runtime_ schema_ v2_ compatible - Asserts that a host database is compatible with the canonical schema-v2 contract before the host accepts billing work.
- attempt_
review_ page - attest_
external_ reversal - billing_
deletion_ blockers - Reports the canonical financial rows that prevent host account deletion.
- cancel_
subscription_ in_ transaction - Cancels one exact scope/subscriber/plan subscription inside the caller’s transaction.
- claim_
exact_ reconciliation_ attempts - Claims one bounded, account-scoped batch for authoritative exact queries.
- claim_
gateway_ lifecycle_ quarantine_ alert - claim_
subscription_ discount - claim_
subscription_ discount_ in_ transaction - classify_
pending_ processor_ charges - Classifies one bounded batch of durable pending processor charges.
- clear_
subscription_ discount - clear_
subscription_ discount_ in_ transaction - create_
subscription_ discount_ code - create_
subscription_ discount_ code_ in_ transaction - Creates an active durable code after validating its terms against the
locked current offer. The returned value is the administrative record; use
validate_subscription_discount_code_in_transactionto obtain a quote. - create_
subscription_ grant - Creates a grant inside the caller’s transaction.
- disable_
subscription_ discount_ code - disable_
subscription_ discount_ code_ in_ transaction - Disables an administrative record even when its historical terms are no longer quoteable against the host’s current offer.
- due_
renewals - Returns the first deterministic, provider-neutral renewal dispatch page.
- due_
renewals_ page - Returns one deterministic page of renewal work due in a stable scan.
- entitlement
- Loads one exact scope/subscriber/plan entitlement from a single database snapshot.
- fail_
review_ required_ attempt - fail_
stale_ unsubmitted_ payment_ method_ replacements - Fails one bounded batch of stale payment-method replacements for an account.
- fail_
stale_ unsubmitted_ subscription_ enrollments - Expires every stale prepared enrollment for one account.
- find_
payment_ attempt_ by_ id_ in_ transaction - Loads an attempt by its exact scope and durable identity without locking it.
- gateway_
lifecycle_ quarantine_ review_ page - gateway_
lifecycle_ reconciliation_ start - host_
charge_ ledger_ admission - list_
subscription_ discount_ codes - list_
subscription_ discount_ codes_ in_ transaction - Lists durable administrative records without reinterpreting them against
the current offer. Quote eligibility is intentionally owned by
validate_subscription_discount_code_in_transaction. - lock_
payment_ attempt_ by_ idempotency_ in_ transaction - Locks the exact owner-scoped idempotency row for replay or mutation.
- mark_
subscription_ discount_ claim_ applied_ in_ transaction - observe_
processor_ charge_ in_ transaction - preflight_
host_ charge_ in_ transaction - preflight_
subscription_ enrollment_ in_ transaction - Resolves subscriber-wide enrollment idempotency before host admission.
- preflight_
subscription_ payment_ method_ replacement_ in_ transaction - Resolves payment-method replacement idempotency before host admission.
- preflight_
subscription_ recovery_ in_ transaction - Resolves subscriber-wide recovery idempotency before host admission.
- processor_
charge_ review_ page - reconcile_
gateway_ transaction_ reports - reconciliation_
gateway_ accounts - Returns every registered gateway account in deterministic locator order.
- record_
gateway_ lifecycle_ quarantines - register_
gateway_ account - Registers canonical gateway metadata on the caller’s connection.
- renewal_
attempt_ state - Computes the one shared renewal/recovery period ledger state.
- require_
entitlement_ for_ update - Locks and revalidates one exact entitlement inside a top-level transaction.
- reserve_
host_ charge_ in_ transaction - reserve_
subscription_ enrollment_ in_ transaction - Reserves or resumes one exact-plan initial enrollment inside the caller’s transaction.
- reserve_
subscription_ payment_ method_ replacement_ in_ transaction - Locks the exact subscription baseline and reserves a token-free replacement attempt before Customer Vault I/O.
- reserve_
subscription_ recovery_ in_ transaction - Locks the canonical subscription, derives the exact due-period request, and inserts a token-free recovery attempt in one transaction.
- reserve_
subscription_ renewal_ in_ transaction - Locks one exact due subscription and inserts its automatic-renewal attempt.
- resolve_
gateway_ lifecycle_ quarantine - revoke_
subscription_ grant - Revokes an exact grant inside the caller’s transaction.
- save_
gateway_ lifecycle_ reconciliation_ cursor - saved_
subscription_ discount_ claim - saved_
subscription_ discount_ claim_ in_ transaction - scrub_
subscriber_ billing_ data - Removes the canonical mutable billing PII for one subscriber.
- stage_
gateway_ lifecycle_ evidence - store_
compensating_ processor_ charge - submit_
admitted_ host_ charge - submit_
admitted_ subscription_ enrollment - Performs the one provider sale authorized by a committed final admission, then applies or durably parks its result.
- submit_
admitted_ subscription_ payment_ method_ replacement - Performs the one Customer Vault mutation authorized by committed admission.
- submit_
admitted_ subscription_ recovery - Performs the one provider sale authorized by committed recovery admission, then applies or durably parks its result without holding a database lock across provider I/O.
- submit_
admitted_ subscription_ renewal - Performs the one recurring sale authorized by committed renewal admission.
- subscription_
billing_ portal - Loads a provider-neutral customer billing portal from one PostgreSQL snapshot.
- subscription_
payment_ history_ page - Returns one strict descending page of exact-plan subscription payment history.
- transition_
processor_ charge_ in_ transaction - update_
subscription_ discount_ code - update_
subscription_ discount_ code_ in_ transaction - Updates a durable administrative record. Active records are validated against the locked current offer. Disabled records remain administrable without requiring their historical terms to be quoteable today.
- validate_
subscription_ discount_ code - validate_
subscription_ discount_ code_ in_ transaction