Skip to content

fix(reservation): surface committed metadata on getReservation (v0.1.25.34, closes #197)#198

Merged
amavashev merged 2 commits into
mainfrom
fix/getreservation-committed-metadata
Jun 18, 2026
Merged

fix(reservation): surface committed metadata on getReservation (v0.1.25.34, closes #197)#198
amavashev merged 2 commits into
mainfrom
fix/getreservation-committed-metadata

Conversation

@amavashev

Copy link
Copy Markdown
Collaborator

Summary

Fixes the read-side half of #197: commit-time metadata was write-only on the server. commit.lua already persists the COMMIT request's metadata as committed_metadata_json on the reservation hash, but getReservationById only projected the reserve-time metadata_json — so commit metadata was accepted and stored but never returned, which is why a client inspecting the reservation saw nothing.

Change

  • ReservationDetail gains a committed_metadata field (@JsonInclude(NON_NULL)).
  • getReservationById parses committed_metadata_json into it. Reserve-time metadata is unchanged and stays distinct.

v0.1.25.33 → v0.1.25.34. Per cycles-protocol v0.1.25.7 (runcycles/cycles-protocol#114, merged — adds committed_metadata to the ReservationDetail schema).

Tests

  • RedisReservationCrudTest +2 — read-path projection: parsed, kept distinct from reserve metadata, omitted when absent.
  • ReservationLifecycleIntegrationTest +2 — end-to-end commit-with-metadata round-trip through real Redis + commit.lua, and NON_NULL wire omission (the field is absent from the JSON when the commit carried no metadata).

Full mvn verify green against cycles-protocol@main; jacoco 95% gate met. Codex-reviewed (two test-depth findings applied: added the end-to-end round-trip and the wire-omission assertions).

Scope

…25.34)

commit.lua already persists the COMMIT request's metadata as
committed_metadata_json on the reservation hash, but getReservationById only
projected the reserve-time metadata_json — so commit metadata was write-only:
accepted, stored, never returned (#197).

- ReservationDetail gains a committed_metadata field (NON_NULL).
- getReservationById parses committed_metadata_json into it; reserve-time
  metadata is unchanged and stays distinct.

Per cycles-protocol v0.1.25.7 (runcycles/cycles-protocol#114, merged).

Tests: RedisReservationCrudTest +2 (read-path projection: parsed, distinct
from reserve metadata, omitted when absent); ReservationLifecycleIntegrationTest
+2 (end-to-end commit-with-metadata round-trip through real Redis + commit.lua;
NON_NULL wire omission). Full mvn verify green against cycles-protocol@main,
jacoco 95% gate met.

The starter needs no change (it already transmits commit metadata). The @cycles
SpEL-metadata enhancement is tracked at runcycles/cycles-spring-boot-starter#88.
The top **Date:** block was a compact one-line-per-version changelog that did
not match the rest of the file's "### date — version: title" + **bold-category**
detailed-entry format. Dissolve it into detailed entries so every version
conforms:

- Add detailed ### entries for the whole CyclesEvidence epoch (v0.1.25.22–.34
  plus the getEvidenceJwks live-serving test and the two WIP/no-version evidence
  entries), above v0.1.25.21.
- Backfill the previously index-only CVE/dependency entries v0.1.25.16–.19,
  between v0.1.25.20 and v0.1.25.15.
- Keep the **Spec:**/**Server:** preamble; remove the compact block.

Docs-only; no version bump, no code/spec/wire change.
@amavashev amavashev merged commit abf5126 into main Jun 18, 2026
8 checks passed
@amavashev amavashev deleted the fix/getreservation-committed-metadata branch June 18, 2026 16:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant