Known Hubuum server v0.0.17 OpenAPI gaps¶
The pinned client contract records these limitations in the server v0.0.17 specification explicitly:
GET /api/v1/search/streamdeclarestext/event-streambut does not describe the individual event payload schemas.- Import and export submission support
Idempotency-Keyin the server and client, but the header is not represented as an operation parameter. UpdateGroupomits the runtime-supporteddescriptionfield. The typedGroupPatchexposes it, with live integration coverage, so callers do not need to fall back toraw().TaskCancelRequest.reasondeclares a 512-character limit, but runtime admission enforces 512 UTF-8 bytes, rejects blank reasons, and forbids control characters.TaskCancellationReasonfollows the runtime rules.
The scheduled drift job remains strict about changes on the server's main
branch. These gaps can be removed when a targeted server specification corrects
them.
Model reconciliation exceptions¶
The machine-readable mappings in openapi/model-contract.json document the
small set of intentional property-level differences between OpenAPI schemas and
Rust wire models:
- Classes, groups, users, and service accounts use shared Rust models for point, list, compact, or expanded response projections. Projection-only fields remain optional and are recorded explicitly as Rust-only fields.
- The
identity_scopeandmanaged_bygroup fields and theprovider_manageduser field retain Serde defaults for compatibility with older server responses. Object.dataremains optional for compatibility and serializes an explicit null when absent.TaskResponse.unattempted_itemsdefaults to zero for older responses that predate cancellation accounting.EventDelivery.purposedefaults toEventfor older responses. Import sink requests always serializeconfig, although the server can default it.UpdateUser.passwordis intentionally absent fromUserPatch; the async and blocking clients provide dedicatedset_passwordhelpers. Future unmapped properties can still be reached through the constrainedraw()extension point until a typed API is added.
Intentional client limitations¶
POST /api/v1/searchandPOST /api/v1/search/streamaccept the new structured search DSL. This release retains the existing typed GET search and SSE APIs; POST search is available through authenticatedraw()requests. POST SSE responses can be read through the boundedraw().send_text()API, but there is no typed incremental structured-search stream yet.- Class object lists'
related.<alias>filter groups have no dedicated typed builders. Useraw_paramwith the server's documented query keys. - Database diagnostics can return 404 for storage backends that do not provide
them, such as the experimental memory backend.
meta_db()andmeta_db_full()preserve that structured HTTP error. Required integration uses PostgreSQL. - Server traversal, export, and template batch resource limits may reject work that previously fit older limits. The client preserves the server error; callers must narrow queries or reduce traversal depth and template workloads.
Credential approval coverage¶
The pinned v0.0.17 contract includes both approval endpoints and the approval
headers on all six protected operations. The existing typed approval API covers
them, and required integration checks assert enforcement. Ordinary mutation calls
retain their behavior and can return reauthentication_required; applications
must use the approval workflow.
v0.0.17 notifications¶
All seven newly declared operations are available through authenticated raw()
requests in both client modes; this release has no dedicated typed route helpers:
| Operations | Route |
|---|---|
| GET, POST | /api/v1/system-event-subscriptions |
| GET, PATCH, DELETE | /api/v1/system-event-subscriptions/{subscription_id} |
| POST | /api/v1/event-sinks/{sink_id}/preview |
| POST | /api/v1/event-sinks/{sink_id}/test |
System subscriptions reuse NewEventSubscription and UpdateEventSubscription
request models. Decode their responses as application-owned models or
serde_json::Value: EventSubscription is collection-scoped and requires a
collection ID. Preview and test requests take subscription_id and the source
event_id UUID string. Preview returns a sink kind and a rendered JSON payload;
test returns an EventDelivery with purpose Test. These administrator-only
operations can bypass disabled flags and subscription filters to test a real
source event. Protect rendered payloads as potentially sensitive data.
Existing typed sink CRUD and imports now preserve delivery_policy; a policy
with min_interval_ms limits admission pacing, and an empty policy clears it.
The server retains provider cooldowns when pacing changes. Webhook payload,
secret-backed URL, authentication, acknowledgement, and retry settings remain in
the existing JSON config model. EventSubscriptionFilter.task_kinds narrows
task lifecycle notifications. Delivery responses preserve purpose and
deferred_reason; debug output redacts the latter. System subscription health
uses collection_id: None.
The combined live suite covers all seven routes through both async and blocking public clients, including typed pacing, filter serialization, nullable health, and test-delivery decoding.