Skip to content

Telemetry v1 protobuf contracts (protos/crittercab/telemetry/v1)#39

Merged
erikshafer merged 1 commit into
mainfrom
protos/telemetry-v1
Jul 4, 2026
Merged

Telemetry v1 protobuf contracts (protos/crittercab/telemetry/v1)#39
erikshafer merged 1 commit into
mainfrom
protos/telemetry-v1

Conversation

@erikshafer

Copy link
Copy Markdown
Owner

Realizes Workshop 006 §10's owed Telemetry proto surface (design-locked R1–R8, ADR-018). Item 2 of the post-tidy-38 handoff. Transcription of a locked design into wire contracts — no re-grilling, no C#.

First gRPC client-streaming surface and first Kafka-event proto in CritterCab.

Deliverables

  • protos/crittercab/telemetry/v1/report_locations.protoTelemetryService.ReportLocations(stream LocationPing) → LocationIngestAck (client-streaming ingest, W006 §6.2).
  • protos/crittercab/telemetry/v1/driver_location_updated.protoDriverLocationUpdated Kafka event, message-only (W006 §6.3; ADR-018 supplier half). Mirrors ride_assigned.proto's header-comment shape.
  • protos/buf.yaml — the repo's first scoped ignore_only lint exception.
  • Prompt + retro under docs/{prompts,retrospectives}/decisions/003-protobuf-telemetry-v1.md; index entries; W006 ## Document History records the §10 realization (spec-delta closure loop).

Decisions (user sign-off 2026-07-04)

Four durable wire/config forks were put to the user (details in the prompt):

  1. RPC naming — keep the ubiquitous-language names LocationPing / LocationIngestAck via a file-scoped buf.yaml ignore_only for RPC_REQUEST_STANDARD_NAME + RPC_RESPONSE_STANDARD_NAME, rather than renaming to ...Request/...Response. Service conforms as TelemetryService. Every other proto stays fully STANDARD.
  2. Coordinates — flat lat/lon scalars (workshop's flat shape; lon matches common.v1.Location; no vestigial street_address on a ping).
  3. throttle_policy_versionint64 (verified numeric Marten stream version, long).
  4. buf codegen — deferred to the implementation session (no CritterCab.Telemetry.csproj yet; buf.gen.yaml already configured — PR Add Dispatch business-event protobuf contracts #4 precedent).

Forward-constraint for the implementation session (not a design change)

jasperfx-source-verifier confirmed WolverineFx.Grpc has no client-streaming auto-codegen adapter on the verified 5.x line — a [WolverineGrpcService]-marked stub declaring this RPC fails fast at startup (NotSupportedException). The .proto itself is plain proto3 (Wolverine imposes no proto-side shape), so the locked R5 client-streaming contract stands. The implementation session must hand-wire ReportLocations against IMessageBus, or re-verify 6.8's adapter support first (the local checkout was pre-6.0 and could not confirm 6.8).

Proto Change Classification

  • No proto changes
  • Non-breaking proto changes — list:
    • Added new package crittercab.telemetry.v1 with two files (report_locations.proto, driver_location_updated.proto). Net-new — no existing message, field, service, or RPC modified.
    • buf.yaml: added a file-scoped lint.ignore_only for two RPC-name rules (config-only; no wire impact).
  • Breaking proto changes

Verified locally via the npm-distributed @bufbuild/buf: buf lint, buf format, and buf breaking --against main all pass. (The ignore_only exception is load-bearing — lint fails without it.)

Notes

  • Surfaced two protobuf-contracts skill gaps (stale single-file directory diagram; a streaming example that would itself fail the repo's STANDARD gate) — registered in the retro for a future tidy: skills session, not fixed here (no opportunistic edits).
  • Observed the docs/prompts/README.md Decisions index was already missing its 002-bundled-pattern-adrs entry (pre-existing) — left as-is; flagging for housekeeping.

Realizes Workshop 006 §10's owed proto surface (design-locked R1–R8,
ADR-018): the TelemetryService.ReportLocations gRPC client-streaming
ingest with LocationPing/LocationIngestAck, and the DriverLocationUpdated
Kafka event (the ADR-018 supplier half). First gRPC client-streaming
surface and first Kafka-event proto in CritterCab.

Decisions (user sign-off 2026-07-04):
- Keep ubiquitous-language message names LocationPing/LocationIngestAck via
  the repo's first scoped buf.yaml ignore_only exception (the two
  RPC_*_STANDARD_NAME rules, telemetry ingest file only) rather than
  renaming to ...Request/...Response.
- Flat lat/lon scalars (workshop's flat shape; lon matches common.v1.Location).
- throttle_policy_version as int64 (verified numeric Marten stream version).
- buf codegen deferred to the implementation session (no service .csproj yet;
  buf.gen.yaml already configured).

Forward-constraint recorded (not a design change): WolverineFx.Grpc has no
client-streaming auto-codegen adapter on the verified 5.x line; the
implementation session must hand-wire ReportLocations against IMessageBus
or re-verify 6.8 support first.

buf lint / format / breaking all pass. Prompt + retro under
docs/{prompts,retrospectives}/decisions/003; W006 Document History records
the §10 realization (spec-delta closure loop).
@erikshafer erikshafer self-assigned this Jul 4, 2026
@erikshafer erikshafer merged commit d78bd82 into main Jul 4, 2026
1 check passed
@erikshafer erikshafer deleted the protos/telemetry-v1 branch July 4, 2026 05:44
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