com.bijection:consumer-sdk exactly. Publish the artifact through your
normal Maven repository workflow. Its JAR includes the selected contract, schemas,
resource documentation, and examples. Independent consumers require no backend
source. The runtime uses the JDK HTTP client and lossless native codecs.
Presence<T> separates omission from a present nullable value. Native integers
use Long, bytes use byte[], and numbers use Double. IDs and semantic scalar
values have named wrappers. Structural codecs reject unknown and missing fields.
Generated builders retain required-argument checks at the contract boundary.
The backend owns authorization, ID membership, and semantic admission.
ask, restore, and explain. A retained Request<O> implements
AutoCloseable: use try-with-resources, an explicit bounded collect(maxRows), and
result(Duration) for local wait limits. Interruption or timeout leaves the request
recoverable. A durable close intent prevents further result reads and makes
runtime().retry(id) replay close alone. Typed restore refuses a changed model;
neutral operation inspection retains the original captured identity.
Queries offer typed select, aggregate, related, union, intersect, and
subtract. Continuations bind the query, input digest, basis, and caller. Remote
rowsets expose query bindings without inventing point readers. run accepts an
explicit ExecutionBinding; Bijection does not provision compute.
watch(Duration) is a demand-aware Flow.Publisher using native polling.
Cancellation interrupts only its local worker. Refusals deliver an observation
with no stale value. Private file journals require POSIX permissions, atomic hard
links, and directory synchronization; supply a durable RequestStore adapter on
other platforms. Candidate Maven installation, hosted qualification, and public
release availability are distinct evidence levels.
Saved proposals return typed Proposal<R> values. Review, approve, or revoke through runtime().reviewProposal, approveProposal, and revokeApproval; native policy decides each caller’s authority. Submit the same capture with request.invoke(proposal). The proposal locator carries no replacement input.