v0.29.0
Minor Changes
-
omitModels()projects a schema by exclusion — the companion toselectModels. Keep every model except the named ones, so one app can be the general case while a separate app owns the models it drops. The suite shell narrows withomitModels(full, ['reports', 'reportSections'])while the standalone app selects those same models. Validation matchesselectModels: relations into the omitted set are dropped, and a droppedparentedge throws, so a model whose scope routes through an omitted parent can’t be silently kept. Each app now binds its own schema projection rather than sharing one global registration. -
Every application model has one typed access path:
ablo.<model>. Both the WebSocket and stateless HTTP clients return bare rows fromretrieveand accept the same typed create/update/delete forms. The schema-lessAblo({ schema: null })overload, the public.model(name)accessors, the transport-envelope types, and the hidden capability CRUD client are removed. Selecttransport: 'http'for workers without changing model syntax, usecommits.createonly for atomic multi-row writes, andsessions.createto mint a scoped user or agent credential. -
The commit wire names only the protocol that actually runs.
@abloatai/ablo/wireexportsCommitMessage,MutationResultMessage,commitOperationSchema, andcommitPayloadSchemadirectly. The prospective v2 commit contract published under@abloatai/ablo/commitin 0.28.0 — itsCommitReceipttype, thelegacyCommit*wire aliases, and the unsent named-mutation frame — is removed, so there is one contract to implement and test. Idempotency-key sealing and fencing move totransactions/idempotencyKey.ts(ADR 0006: the v1/v2 boundary lives at ingress, not in the client). LocaluseMutatorscalls still compose normal transactions; this removes only the dead server wire path. -
Protocol support is backed by codecs, not a numeric claim (ADR 0005). The wire package publishes an explicit supported-version manifest; the server must provide a decoder for every entry. Durable HTTP writes seal their original protocol version and replay with it after an upgrade. Application-schema hashes are an advisory bootstrap warning rather than an exact WebSocket gate, so additive schema versions can overlap through an expand/contract rollout.
-
The injected write-storage option is
durableWrites, andDurableWriteStoreis its interface. ThecommitOutboxclient option andCommitOutboxStoreinterface introduced in 0.28.0 are renamed.durableWritesConfigSchema,durableWriteStoreSchema,pendingWriteSchema, and theDurableWritesConfig/DurableWriteStore/PendingWritetypes are exported from the package root, so a workflow-, SQLite-, or filesystem-backed adapter validates against the shipped schema instead of an interface you re-declare. The oldcommitOutbox/CommitOutboxStorenames remain as deprecated aliases through the next major release. -
Registerregisters yourSchemaandUserMeta— those are the two keys. ThePresenceandClaimsregistration keys and theirResolvePresence/ResolveClaimsresolver types are gone, matching the removed presence and claim React placeholders. Read presence throughusePeersoruseWatch, and row claims throughablo.<model>.claim. The default resolver now carries aSchemaRecordfallback, so a shared package typechecks standalone with no app registration in scope. -
One signed adapter export:
dataSource. TheabloSourcealias is removed, and the parallelDataSource*type names (DataSourceOptions,DataSourceCommitParams,DataSourceHandlerContext, and the rest) collapse into the canonicalSource*types — one name per shape. Endpoints already built withdataSource()are unchanged; only the duplicate names are gone. -
The claim type surface is reached through
Ablo.Claim.*.ClaimOptions,ClaimParams,ClaimLookupParams,ClaimReorderParams,Claim,ClaimHeartbeat,ClaimHeartbeatOptions, andModelOperationsare namespace members rather than top-level exports;HeldClaimstays as a deprecated top-level alias because 0.20.1 documented it. The internal construction typesInternalAbloOptionsandHttpClaimApiare no longer exported — the public surface names only what an application builds against.
Patch Changes
- Removed React placeholders that had no working runtime.
usePresence,useClaim,SyncGroupProvider, anduseSyncGroupare no longer exported. UseusePeersoruseWatchfor presence and scoped participation, andablo.<model>.claimfor row claims. The unusedRegister.Presence/Register.Claimsresolver types are gone with them.