Skip to content

chore(contract): sync flipcash2 protos to e1f4116c and add the 0.8.0 entry - #14

Merged
bmc08gt merged 2 commits into
mainfrom
chore/sync-flipcash2-e1f4116c
Sep 16, 2026
Merged

bmc08gt merged 2 commits into
mainfrom
chore/sync-flipcash2-e1f4116c

Conversation

@bmc08gt

@bmc08gt bmc08gt commented Sep 16, 2026 •

Copy link
Copy Markdown
Collaborator

Syncs the contract to e1f4116c and adds the 0.8.0 changelog entry.

The range picks up two upstream commits: #102, which is the contract change, and #101, a CLAUDE.md edit that touches no contract file.

The contract diff

20 added lines across two files. Nothing removed, nothing changed shape, nothing renumbered.

chat/v1/model.proto — new IdempotencyKey message: one bytes value (field 1), validated to exactly 16 bytes via min_len: 16 / max_len: 16. Client-minted, never exposed as the created object's identity.

chat/v1/chat_service.proto — new field on StartChatRequest:

IdempotencyKey idempotency_key = 9 [(validate.rules).message.required = true];

Field 9, between the parameters oneof (field 1) and auth (field 10). Both keep their numbers.

StartChatResponse.Result is untouched — all six cases (OK, DENIED, TITLE_MODERATED, PICTURE_BLOB_NOT_ACCEPTED, INVALID_RULES, RULES_NOT_SATISFIED) stay in place, so the positional rawValue mapping iOS uses over result enums does not shift.

The field being required is the part consumers have to act on: the contract is additive, but 0.7.0 has no way to set it, and a key minted fresh per retry attempt passes validation while defeating the point of the field. The changelog entry says so rather than leaving it to be rediscovered.

Consumers

Both apps are scaffolded and building against this branch through the local override, each pinning 0.8.0 in a draft PR that cannot go green until this merges and publishes:

Checks

  • ./gradlew build passes.
  • scripts/generate-swift.sh is idempotent against the committed Sources/, so the "committed Swift is up to date" gate will pass.
  • swift build was not verified locally. It fails on this machine for reasons unrelated to this change — Xcode 27 / Swift 6.2.1 cannot compile grpc-swift-protobuf's command plugin or swift-protobuf's generated resource accessor for the host-macOS target — and it fails identically on an unmodified main checkout. The generated Swift itself was verified by building the package for an iOS destination, which succeeds. CI runs on macos-15, where this is expected to be green.
  • scripts/toolchain.env is unchanged, and the Sources/ diff moves only with proto/.

StartChatRequest gains a required idempotency_key (field 9), backed by a new
IdempotencyKey message in chat/v1/model.proto. Nothing existing changed shape and
no enum was renumbered.

Upstream also carries a CLAUDE.md edit (#101) that touches no contract file.
The required idempotency_key is the part a consumer has to act on: the contract
is additive, but 0.7.0 cannot set the field, and a key minted per retry attempt
passes validation while defeating the point of it.

Also says group chat is still in flux, so the minor bump is not read as the
surface having settled.
@bmc08gt
bmc08gt force-pushed the chore/sync-flipcash2-e1f4116c branch from 783a42b to 7b67a7f Compare September 16, 2026 18:52
@bmc08gt
bmc08gt merged commit 400ad51 into main Sep 16, 2026
3 checks passed
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