Skip to content

v0.1.25.32 — lenient deserialization on cross-plane read schemas

Choose a tag to compare

@amavashev amavashev released this 18 Apr 23:39
· 213 commits to main since this release
e9405d0

Cross-plane read tolerance hardening — closes the second of two items from the post-v0.1.25.31 alignment audit against runtime v0.1.25.14 (paired with runcycles/cycles-server#108 which closed the first). No spec change, no wire change — read-side tolerance adjustment in admin only.


Changed

  • Lenient deserialization on cross-plane read schemas. Event and WebhookDelivery now declare @JsonIgnoreProperties(ignoreUnknown = true) at the class level. Runtime (cycles-server) is the authoritative writer of event:* and delivery:* Redis records; admin only reads them. Previously the admin POJOs were ignoreUnknown = false — so any additive field runtime shipped in a patch release would break admin's listEvents / listWebhookDeliveries with UnrecognizedPropertyException until admin lockstep-updated the POJO. This violated the "additive fields are safe" invariant the admin/runtime split is built on. Runtime can now ship additive fields in any patch without forcing an admin release.
  • Hygiene: removed a dead @JsonIgnoreProperties(ignoreUnknown = false) from ErrorResponse. That annotation was never reachable at runtime (admin writes ErrorResponse to the wire; no reader path exists inside admin), so it was inert.

Unchanged (scope discipline)

  • Strict mode preserved on admin-owned schemas: WebhookSubscription, Tenant, Budget, Policy, ApiKey, every EventData* subtype, every Bulk*Request / Bulk*Filter, every *CreateRequest / *UpdateRequest. Admin writes these — a typo there is an admin-internal bug and must fail loudly. The lenient tolerance is scoped to schemas runtime writes.

Internal

  • No wire contract change. No spec edits (cycles-governance-admin-v0.1.25.yaml still at info.version=0.1.25.28).
  • Two test cases pin the invariant: EventModelTest#event_tolerantOfUnknownFieldAddedByRuntime and WebhookModelTest#webhookDelivery_tolerantOfUnknownFieldAddedByRuntime. A future regression — someone re-adding ignoreUnknown = false — would fail these tests immediately.

Compatibility

  • No client-visible behavior change. Admin-written request/response payloads still validate strictly.
  • No DB migration.
  • No upgrade ordering with runtime — that's the whole point of the change.