Files
zeekayandHanzo Dev 5ac678fd84 no hogs: the person services, the mock's customer, and one enum member
PersonHog was the last of it, and it was not only a name. The package is
personinsights and the types in it are already Person* -- the shipped
descriptor under personinsights_client/proto/generated says PersonService
and the tests say TestFakePersonClient -- but the .proto still declared
PersonHogService. A client dialling one service name and a server built
from a .proto declaring another is not a naming problem, it is a wire
that does not connect; the only reason nobody hit it is that none of
these services runs here yet. Five service declarations now say what the
generated client has said all along.

StreamHog was a second fictional company, invented so a Stripe mock had
someone to bill. This fork already has Hedgebox, in five hundred
fixtures, so the mock bills Hedgebox and there is one made-up company
again instead of two.

REVIEW_HOG was an enum member in three enums that had to agree, whose
value has been `review` since the app was renamed. Only the member said
otherwise.

Every rule is in bin/debrand and every spelling is refused there, so a
fresh upstream import lands on these names and none of them can come
back. Two are named as outstanding rather than refused, with the reason
each is still sayable: hogdesk survives inside applied migrations'
choices lists, where Django compares it in Python and never writes it --
the member is Desk = "desk" and all three tables that store it hold no
rows; sherlockhog keys a service in another repository that still calls
itself that, and renaming our half would classify its traffic as a
product that does not exist.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-13 13:57:50 -07:00
..
…

Proto Definitions

Language-agnostic protobuf definitions for Insights services.

Structure

proto/
├── buf.yaml
├── cymbal/               # Cymbal internal services
│   └── resolution/v1/    # Exception-level symbol resolution
├── kafka_assigner/       # Kafka partition assignment
└── personinsights/            # Person data service
    ├── types/v1/
    ├── replica/v1/
    └── service/v1/

Consumers

Proto Rust Python
cymbal/ rust/cymbal-proto (auto via tonic) —
personinsights/ rust/personinsights-proto (auto via tonic) insights/personinsights_client/proto/generated/ (checked in)
kafka_assigner/ rust/kafka-assigner-proto (auto via tonic) —

Updating protos

  1. Edit .proto files in the relevant directory
  2. Regenerate language bindings for affected consumers (see table above)
  3. Commit generated files — CI rejects stale stubs

Python stubs (personinsights only)

bin/generate_personinsights_proto.sh

Only needed when personinsights/ protos change. Requires grpcio-tools and protoletariat (uv sync).

If you added or removed message types, update the re-exports in insights/personinsights_client/proto/__init__.py. If you added or removed RPCs, update the wrapper methods in insights/personinsights_client/client.py.

Rust

No action needed — Rust bindings regenerate on cargo build.

CI

.github/workflows/ci-proto.yml runs on proto changes:

  • buf lint — style and naming
  • buf breaking — backwards compatibility against master
  • Python codegen staleness check