Repository navigation
hack: reject breaking proto changes across each proto package - #1607
Tim Hockin (thockin) merged 4 commits into
Conversation
|
I'm not sure if we are there yet for something like this. We are intentionally making breaking changes to the API. Does preserving IDs really give us any guaranty about backward compatibility? I don't think, unless we design every change in a way that is backwards compatible, and we are not doing that on Tim Hockin (@thockin) thoughts? |
Julian Gutierrez Oschmann (@juli4n) , this PR has two commits. The commit for A little bit context of how I got here. I am renaming an API field in #1597 and realize that some field numbers are retired but not reserved. |
Tim Hockin (thockin)
left a comment
There was a problem hiding this comment.
I like the test, though it's not quite obvious if there's a calling convention?
We will probably renumber all the tags before we go GA, how do we do that on purpose?
When I run this I get a boatload of warnings and it fails:
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/any.proto:128:9:`Any` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/api.proto:59:9:`Api` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/compiler/plugin.proto:33:9:`Version` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/cpp_features.proto:15:24:`cpp` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/cpp_features.proto:18:9:`CppFeatures` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:129:24:`options` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:167:36:`options` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:173:27:`options` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:193:32:`uninterpreted_option` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:197:20:`number` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:201:21:`full_name` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:206:21:`type` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:211:19:`reserved` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:215:19:`repeated` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:223:24:`declaration` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:238:30:`verification` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:324:19:`json_name` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:326:25:`options` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:355:25:`options` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:364:24:`options` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:395:29:`options` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:403:27:`options` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:418:26:`options` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:479:17:`java_multiple_files` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:494:17:`java_string_check_utf8` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:503:25:`optimize_for` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:532:17:`deprecated` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:578:32:`uninterpreted_option` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:606:17:`message_set_wire_format` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:617:17:`deprecated` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:642:17:`map_entry` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:666:32:`uninterpreted_option` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:680:18:`ctype` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:702:17:`packed` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:715:19:`jstype` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:749:17:`lazy` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:754:17:`unverified_lazy` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:760:17:`deprecated` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:795:29:`targets` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:798:22:`edition` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:799:21:`value` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:801:27:`edition_defaults` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:814:22:`edition_introduced` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:818:22:`edition_deprecated` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:822:21:`deprecation_warning` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:827:22:`edition_removed` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:829:27:`feature_support` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:832:32:`uninterpreted_option` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:849:32:`uninterpreted_option` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:859:17:`allow_alias` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:865:17:`deprecated` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:884:32:`uninterpreted_option` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:895:17:`deprecated` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:912:32:`uninterpreted_option` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:935:17:`deprecated` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:938:32:`uninterpreted_option` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:955:17:`deprecated` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:975:32:`uninterpreted_option` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/descriptor.proto:1018:9:`FeatureSet` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/duration.proto:102:9:`Duration` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/empty.proto:51:9:`Empty` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/field_mask.proto:242:9:`FieldMask` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/go_features.proto:17:23:`go` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/go_features.proto:20:9:`GoFeatures` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/java_features.proto:19:25:`java` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/java_features.proto:22:9:`JavaFeatures` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/source_context.proto:44:9:`SourceContext` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/struct.proto:51:9:`Struct` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/timestamp.proto:133:9:`Timestamp` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/type.proto:52:9:`Type` declared multiple times
benchmarking/locust/codegen/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/wrappers.proto:66:9:`DoubleValue` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/annotations.proto:19:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/annotations.proto:30:3:cannot find `HttpRule` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/annotations.proto:30:12:`http` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/auth.proto:43:9:`Authentication` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/backend.proto:26:9:`Backend` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/billing.proto:57:9:`Billing` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/client.proto:19:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/client.proto:65:19:`method_signature` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/client.proto:78:10:`default_host` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/client.proto:100:10:`oauth_scopes` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/client.proto:116:10:`api_version` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/client.proto:120:9:`CommonLanguageSettings` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/client.proto:142:3:cannot find `LaunchStage` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/config_change.proto:31:9:`ConfigChange` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/consumer.proto:40:9:`ProjectProperties` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/context.proto:61:9:`Context` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/control.proto:19:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/control.proto:33:9:`Control` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/control.proto:40:12:cannot find `MethodPolicy` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/distribution.proto:42:9:`Distribution` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/documentation.proto:80:9:`Documentation` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/endpoint.proto:46:9:`Endpoint` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:35:6:`ErrorReason` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:37:3:`ERROR_REASON_UNSPECIFIED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:54:3:`SERVICE_DISABLED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:71:3:`BILLING_DISABLED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:86:3:`API_KEY_INVALID` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:102:3:`API_KEY_SERVICE_BLOCKED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:118:3:`API_KEY_HTTP_REFERRER_BLOCKED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:134:3:`API_KEY_IP_ADDRESS_BLOCKED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:150:3:`API_KEY_ANDROID_APP_BLOCKED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:166:3:`API_KEY_IOS_APP_BLOCKED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:201:3:`RATE_LIMIT_EXCEEDED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:235:3:`RESOURCE_QUOTA_EXCEEDED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:256:3:`LOCATION_TAX_POLICY_VIOLATED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:273:3:`USER_PROJECT_DENIED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:290:3:`CONSUMER_SUSPENDED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:305:3:`CONSUMER_INVALID` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:326:3:`SECURITY_POLICY_VIOLATED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:340:3:`ACCESS_TOKEN_EXPIRED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:359:3:`ACCESS_TOKEN_SCOPE_INSUFFICIENT` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:381:3:`ACCOUNT_STATE_INVALID` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:396:3:`ACCESS_TOKEN_TYPE_UNSUPPORTED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:413:3:`CREDENTIALS_MISSING` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:432:3:`RESOURCE_PROJECT_INVALID` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:448:3:`SESSION_COOKIE_INVALID` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:465:3:`USER_BLOCKED_BY_ADMIN` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:482:3:`RESOURCE_USAGE_RESTRICTION_VIOLATED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:500:3:`SYSTEM_PARAMETER_UNSUPPORTED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:517:3:`ORG_RESTRICTION_VIOLATION` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:534:3:`ORG_RESTRICTION_HEADER_INVALID` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:553:3:`SERVICE_NOT_VISIBLE` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:569:3:`GCP_SUSPENDED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:588:3:`LOCATION_POLICY_VIOLATED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:604:3:`MISSING_ORIGIN` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:621:3:`OVERLOADED_CREDENTIALS` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:641:3:`LOCATION_ORG_POLICY_VIOLATED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:660:3:`TLS_ORG_POLICY_VIOLATED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:676:3:`EMULATOR_QUOTA_EXCEEDED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:691:3:`CREDENTIAL_ANDROID_APP_INVALID` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:706:3:`IAM_PERMISSION_DENIED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:720:3:`JWT_TOKEN_INVALID` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:735:3:`CREDENTIAL_TYPE_UNSUPPORTED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:749:3:`ACCOUNT_TYPE_UNSUPPORTED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:769:3:`ENDPOINT_USAGE_RESTRICTION_VIOLATED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:789:3:`TLS_CIPHER_RESTRICTION_VIOLATED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/error_reason.proto:806:3:`MCP_SERVER_DISABLED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/field_behavior.proto:40:37:`field_behavior` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/field_behavior.proto:49:6:`FieldBehavior` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/field_behavior.proto:51:3:`FIELD_BEHAVIOR_UNSPECIFIED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/field_behavior.proto:56:3:`OPTIONAL` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/field_behavior.proto:61:3:`REQUIRED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/field_behavior.proto:67:3:`OUTPUT_ONLY` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/field_behavior.proto:72:3:`INPUT_ONLY` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/field_behavior.proto:77:3:`IMMUTABLE` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/field_behavior.proto:83:3:`UNORDERED_LIST` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/field_behavior.proto:89:3:`NON_EMPTY_DEFAULT` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/field_behavior.proto:103:3:`IDENTIFIER` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/field_info.proto:45:24:`field_info` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/field_info.proto:49:9:`FieldInfo` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/http.proto:28:9:`Http` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/httpbody.proto:70:9:`HttpBody` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/label.proto:26:9:`LabelDescriptor` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/launch_stage.proto:27:6:`LaunchStage` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/launch_stage.proto:29:3:`LAUNCH_STAGE_UNSPECIFIED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/launch_stage.proto:32:3:`UNIMPLEMENTED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/launch_stage.proto:35:3:`PRELAUNCH` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/launch_stage.proto:42:3:`EARLY_ACCESS` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/launch_stage.proto:53:3:`ALPHA` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/launch_stage.proto:60:3:`BETA` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/launch_stage.proto:64:3:`GA` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/launch_stage.proto:71:3:`DEPRECATED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/log.proto:19:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/log.proto:35:9:`LogDescriptor` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/log.proto:45:12:cannot find `LabelDescriptor` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/logging.proto:54:9:`Logging` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/metric.proto:19:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/metric.proto:20:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/metric.proto:33:9:`MetricDescriptor` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/metric.proto:101:5:cannot find `LaunchStage` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/metric.proto:138:12:cannot find `LabelDescriptor` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/metric.proto:265:3:cannot find `LaunchStage` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/monitored_resource.proto:19:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/monitored_resource.proto:20:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/monitored_resource.proto:40:9:`MonitoredResourceDescriptor` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/monitored_resource.proto:70:12:cannot find `LabelDescriptor` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/monitored_resource.proto:73:3:cannot find `LaunchStage` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/monitoring.proto:77:9:`Monitoring` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/policy.proto:29:26:`field_policy` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/policy.proto:34:27:`method_policy` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/policy.proto:45:9:`FieldPolicy` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/quota.proto:76:9:`Quota` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/resource.proto:30:32:`resource_reference` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/resource.proto:36:42:`resource_definition` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/resource.proto:42:33:`resource` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/resource.proto:92:9:`ResourceDescriptor` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/routing.proto:29:26:`routing` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/routing.proto:395:9:`RoutingRule` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:19:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:20:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:21:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:22:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:23:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:24:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:25:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:26:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:27:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:28:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:29:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:30:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:31:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:32:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:33:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:34:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:35:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:36:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:80:9:`Service` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:127:3:cannot find `Documentation` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:130:3:cannot find `Backend` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:133:3:cannot find `Http` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:136:3:cannot find `Quota` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:139:3:cannot find `Authentication` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:142:3:cannot find `Context` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:145:3:cannot find `Usage` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:150:12:cannot find `Endpoint` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:153:3:cannot find `Control` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:156:12:cannot find `LogDescriptor` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:159:12:cannot find `MetricDescriptor` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:163:12:cannot find `MonitoredResourceDescriptor` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:166:3:cannot find `Billing` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:169:3:cannot find `Logging` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:172:3:cannot find `Monitoring` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:175:3:cannot find `SystemParameters` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:178:3:cannot find `SourceInfo` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/service.proto:183:3:cannot find `Publishing` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/source_info.proto:28:9:`SourceInfo` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/system_parameter.proto:31:9:`SystemParameters` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/usage.proto:26:9:`Usage` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/visibility.proto:29:29:`enum_visibility` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/visibility.proto:34:29:`value_visibility` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/visibility.proto:39:29:`field_visibility` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/visibility.proto:44:29:`message_visibility` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/visibility.proto:49:29:`method_visibility` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/visibility.proto:54:29:`api_visibility` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/api/visibility.proto:80:9:`Visibility` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/cloud/common_resources.proto:22:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/cloud/common_resources.proto:25:9:cannot find `google.api.resource_definition` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/cloud/common_resources.proto:31:9:cannot find `google.api.resource_definition` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/cloud/common_resources.proto:37:9:cannot find `google.api.resource_definition` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/cloud/common_resources.proto:43:9:cannot find `google.api.resource_definition` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/cloud/common_resources.proto:48:9:cannot find `google.api.resource_definition` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/cloud/extended_operations.proto:65:28:`operation_field` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/cloud/extended_operations.proto:76:10:`operation_request_field` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/cloud/extended_operations.proto:87:10:`operation_response_field` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/cloud/extended_operations.proto:116:10:`operation_service` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/cloud/extended_operations.proto:120:8:`operation_polling_method` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/cloud/extended_operations.proto:127:6:`OperationResponseMapping` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/cloud/extended_operations.proto:129:3:`UNDEFINED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/cloud/extended_operations.proto:133:3:`NAME` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/cloud/extended_operations.proto:141:3:`STATUS` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/cloud/extended_operations.proto:145:3:`ERROR_CODE` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/cloud/extended_operations.proto:149:3:`ERROR_MESSAGE` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/cloud/location/locations.proto:19:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/cloud/location/locations.proto:21:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/cloud/location/locations.proto:32:9:`Locations` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/cloud/location/locations.proto:33:11:cannot find `google.api.default_host` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/cloud/location/locations.proto:34:11:cannot find `google.api.oauth_scopes` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/cloud/location/locations.proto:38:13:cannot find `google.api.http` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/cloud/location/locations.proto:48:13:cannot find `google.api.http` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/gapic/metadata/gapic_metadata.proto:30:9:`GapicMetadata` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/logging/type/http_request.proto:32:9:`HttpRequest` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/logging/type/log_severity.proto:43:6:`LogSeverity` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/logging/type/log_severity.proto:45:3:`DEFAULT` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/logging/type/log_severity.proto:48:3:`DEBUG` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/logging/type/log_severity.proto:51:3:`INFO` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/logging/type/log_severity.proto:55:3:`NOTICE` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/logging/type/log_severity.proto:58:3:`WARNING` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/logging/type/log_severity.proto:61:3:`ERROR` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/logging/type/log_severity.proto:64:3:`CRITICAL` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/logging/type/log_severity.proto:67:3:`ALERT` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/logging/type/log_severity.proto:70:3:`EMERGENCY` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:19:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:20:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:25:1:imported file does not exist
benchmarking/locust/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:43:36:`operation_info` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:55:9:`Operations` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:56:11:cannot find `google.api.default_host` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:61:13:cannot find `google.api.http` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:64:13:cannot find `google.api.method_signature` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:71:13:cannot find `google.api.http` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:74:13:cannot find `google.api.method_signature` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:82:13:cannot find `google.api.http` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:85:13:cannot find `google.api.method_signature` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:100:13:cannot find `google.api.http` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:104:13:cannot find `google.api.method_signature` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:144:5:cannot find `google.rpc.Status` in this scope
benchmarking/locust/venv/lib/python3.13/site-packages/google/rpc/code.proto:32:6:`Code` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/rpc/code.proto:36:3:`OK` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/rpc/code.proto:41:3:`CANCELLED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/rpc/code.proto:50:3:`UNKNOWN` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/rpc/code.proto:58:3:`INVALID_ARGUMENT` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/rpc/code.proto:67:3:`DEADLINE_EXCEEDED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/rpc/code.proto:78:3:`NOT_FOUND` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/rpc/code.proto:84:3:`ALREADY_EXISTS` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/rpc/code.proto:96:3:`PERMISSION_DENIED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/rpc/code.proto:102:3:`UNAUTHENTICATED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/rpc/code.proto:108:3:`RESOURCE_EXHAUSTED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/rpc/code.proto:128:3:`FAILED_PRECONDITION` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/rpc/code.proto:137:3:`ABORTED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/rpc/code.proto:156:3:`OUT_OF_RANGE` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/rpc/code.proto:162:3:`UNIMPLEMENTED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/rpc/code.proto:169:3:`INTERNAL` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/rpc/code.proto:180:3:`UNAVAILABLE` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/rpc/code.proto:185:3:`DATA_LOSS` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/rpc/context/attribute_context.proto:46:9:`AttributeContext` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/rpc/context/audit_context.proto:27:9:`AuditContext` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/rpc/error_details.proto:51:9:`ErrorInfo` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/rpc/http.proto:26:9:`HttpRequest` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/rpc/status.proto:34:9:`Status` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/calendar_period.proto:28:6:`CalendarPeriod` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/calendar_period.proto:30:3:`CALENDAR_PERIOD_UNSPECIFIED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/calendar_period.proto:33:3:`DAY` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/calendar_period.proto:37:3:`WEEK` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/calendar_period.proto:42:3:`FORTNIGHT` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/calendar_period.proto:45:3:`MONTH` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/calendar_period.proto:49:3:`QUARTER` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/calendar_period.proto:52:3:`HALF` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/calendar_period.proto:55:3:`YEAR` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/color.proto:151:9:`Color` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/date.proto:41:9:`Date` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/datetime.proto:51:9:`DateTime` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/dayofweek.proto:26:6:`DayOfWeek` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/dayofweek.proto:28:3:`DAY_OF_WEEK_UNSPECIFIED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/dayofweek.proto:31:3:`MONDAY` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/dayofweek.proto:34:3:`TUESDAY` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/dayofweek.proto:37:3:`WEDNESDAY` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/dayofweek.proto:40:3:`THURSDAY` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/dayofweek.proto:43:3:`FRIDAY` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/dayofweek.proto:46:3:`SATURDAY` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/dayofweek.proto:49:3:`SUNDAY` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/decimal.proto:30:9:`Decimal` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/expr.proto:56:9:`Expr` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/fraction.proto:26:9:`Fraction` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/interval.proto:33:9:`Interval` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/latlng.proto:30:9:`LatLng` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/localized_text.proto:26:9:`LocalizedText` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/money.proto:26:9:`Money` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/month.proto:26:6:`Month` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/month.proto:28:3:`MONTH_UNSPECIFIED` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/month.proto:31:3:`JANUARY` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/month.proto:34:3:`FEBRUARY` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/month.proto:37:3:`MARCH` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/month.proto:40:3:`APRIL` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/month.proto:43:3:`MAY` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/month.proto:46:3:`JUNE` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/month.proto:49:3:`JULY` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/month.proto:52:3:`AUGUST` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/month.proto:55:3:`SEPTEMBER` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/month.proto:58:3:`OCTOBER` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/month.proto:61:3:`NOVEMBER` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/month.proto:64:3:`DECEMBER` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/phone_number.proto:51:9:`PhoneNumber` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/postal_address.proto:42:9:`PostalAddress` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/quaternion.proto:82:9:`Quaternion` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/google/type/timeofday.proto:29:9:`TimeOfDay` declared multiple times
benchmarking/locust/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/cpp_features.proto:15:30:field number `1000` used more than once
benchmarking/locust/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/go_features.proto:17:28:field number `1002` used more than once
benchmarking/locust/venv/lib/python3.13/site-packages/grpc_tools/_proto/google/protobuf/java_features.proto:19:32:field number `1001` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/annotations.proto:19:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/annotations.proto:30:3:cannot find `HttpRule` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/annotations.proto:30:19:field number `72295728` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/client.proto:19:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/client.proto:65:38:field number `1051` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/client.proto:78:25:field number `1049` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/client.proto:100:25:field number `1050` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/client.proto:116:24:field number `525000001` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/client.proto:142:3:cannot find `LaunchStage` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/control.proto:19:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/control.proto:40:12:cannot find `MethodPolicy` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/field_behavior.proto:40:54:field number `1052` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/field_info.proto:45:37:field number `291403980` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/log.proto:19:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/log.proto:45:12:cannot find `LabelDescriptor` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/metric.proto:19:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/metric.proto:20:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/metric.proto:101:5:cannot find `LaunchStage` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/metric.proto:138:12:cannot find `LabelDescriptor` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/metric.proto:265:3:cannot find `LaunchStage` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/monitored_resource.proto:19:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/monitored_resource.proto:20:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/monitored_resource.proto:70:12:cannot find `LabelDescriptor` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/monitored_resource.proto:73:3:cannot find `LaunchStage` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/policy.proto:29:41:field number `158361448` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/policy.proto:34:43:field number `161893301` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/resource.proto:30:53:field number `1055` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/resource.proto:36:64:field number `1053` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/resource.proto:42:44:field number `1053` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/routing.proto:29:36:field number `72295729` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:19:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:20:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:21:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:22:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:23:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:24:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:25:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:26:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:27:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:28:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:29:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:30:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:31:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:32:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:33:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:34:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:35:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:36:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:127:3:cannot find `Documentation` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:130:3:cannot find `Backend` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:133:3:cannot find `Http` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:136:3:cannot find `Quota` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:139:3:cannot find `Authentication` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:142:3:cannot find `Context` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:145:3:cannot find `Usage` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:150:12:cannot find `Endpoint` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:153:3:cannot find `Control` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:156:12:cannot find `LogDescriptor` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:159:12:cannot find `MetricDescriptor` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:163:12:cannot find `MonitoredResourceDescriptor` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:166:3:cannot find `Billing` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:169:3:cannot find `Logging` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:172:3:cannot find `Monitoring` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:175:3:cannot find `SystemParameters` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:178:3:cannot find `SourceInfo` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/service.proto:183:3:cannot find `Publishing` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/visibility.proto:29:47:field number `72295727` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/visibility.proto:34:48:field number `72295727` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/visibility.proto:39:48:field number `72295727` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/visibility.proto:44:50:field number `72295727` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/visibility.proto:49:49:field number `72295727` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/api/visibility.proto:54:46:field number `72295727` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/cloud/common_resources.proto:22:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/cloud/common_resources.proto:25:9:cannot find `google.api.resource_definition` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/cloud/common_resources.proto:31:9:cannot find `google.api.resource_definition` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/cloud/common_resources.proto:37:9:cannot find `google.api.resource_definition` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/cloud/common_resources.proto:43:9:cannot find `google.api.resource_definition` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/cloud/common_resources.proto:48:9:cannot find `google.api.resource_definition` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/cloud/extended_operations.proto:65:46:field number `1149` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/cloud/extended_operations.proto:76:36:field number `1150` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/cloud/extended_operations.proto:87:37:field number `1151` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/cloud/extended_operations.proto:116:30:field number `1249` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/cloud/extended_operations.proto:120:35:field number `1250` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/cloud/location/locations.proto:19:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/cloud/location/locations.proto:21:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/cloud/location/locations.proto:33:11:cannot find `google.api.default_host` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/cloud/location/locations.proto:34:11:cannot find `google.api.oauth_scopes` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/cloud/location/locations.proto:38:13:cannot find `google.api.http` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/cloud/location/locations.proto:48:13:cannot find `google.api.http` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:19:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:20:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:25:1:imported file does not exist
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:43:53:field number `1049` used more than once
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:56:11:cannot find `google.api.default_host` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:61:13:cannot find `google.api.http` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:64:13:cannot find `google.api.method_signature` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:71:13:cannot find `google.api.http` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:74:13:cannot find `google.api.method_signature` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:82:13:cannot find `google.api.http` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:85:13:cannot find `google.api.method_signature` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:100:13:cannot find `google.api.http` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:104:13:cannot find `google.api.method_signature` in this scope
benchmarking/nighthawk-ingress/venv/lib/python3.13/site-packages/google/longrunning/operations_proto.proto:144:5:cannot find `google.rpc.Status` in this scope
What's going on with that?
62cfd8d to
0e85cd9
Compare
Tim Hockin (@thockin) , there were merge conflicts. I rebased the PR. Here is how I test this locally:
|
|
How do I set that variable so that I can pass CI? What I mean is that eventually we will do this on purpose and I don't see a way to bypass this test, which means I need to user GH admin power to allow a failing CI to merge? I don't really see another way? |
0e85cd9 to
71f4b4f
Compare
|
Tim Hockin (@thockin) , here is an alternative. If a breaking change is intended, the last paragraph of the commit message must carry a trailer With this, we don't need to merge a PR failing CI. |
|
Discussed this in the OSS community meeting today, decided to hold onto the PR until we get closer to the GA date. Converted to draft for now. |
5a1b324 to
3146224
Compare
7a4aa72 to
ac484f9
Compare
ddf3104 to
0df5054
Compare
|
|
||
| breaking: | ||
| use: | ||
| - WIRE |
There was a problem hiding this comment.
Notes for reviewers:
buf has four categories, from loosest to strictest. Each stricter one forbids everything the looser ones do.
| Category | Rules | Adds |
|---|---|---|
WIRE |
15 | binary wire compatibility |
WIRE_JSON |
22 | field and enum names, since protobuf's JSON form uses names |
PACKAGE |
51 | generated code within a package; types can move between files |
FILE |
51 | generated code per file; files can't move or be deleted |
Common changes under each
| Change | WIRE |
FILE |
|---|---|---|
| Renumber a field | rejected | rejected |
Change a field to a wire-incompatible type, e.g. string to int32 |
rejected | rejected |
Change a field to a wire-compatible type, e.g. int32 to int64, or a renamed message type |
allowed (buf still flags the renamed message, because it compares type names) | rejected (FIELD_SAME_TYPE) |
Delete a field and add reserved <n> |
allowed | rejected (FIELD_NO_DELETE) |
| Rename a field or enum value | allowed | rejected (FIELD_SAME_NAME, ENUM_VALUE_SAME_NAME) |
| Change a field's JSON name | allowed | rejected (FIELD_SAME_JSON_NAME) |
| Delete an RPC, message, service or enum | allowed | rejected (RPC_NO_DELETE, MESSAGE_NO_DELETE, …) |
| Change an RPC's request or response type, or its streaming mode | rejected | rejected |
Delete or move a .proto file |
allowed | rejected (FILE_NO_DELETE) |
Change go_package or other language options |
allowed | rejected (FILE_SAME_GO_PACKAGE, …) |
Remove a reserved statement |
rejected | rejected |
Why the difference
-
WIREcares only about the bytes. On the wire, a field is just a number and a type, and an RPC is a method path with a request and response type. Names, files and Go packages never appear in the bytes, soWIRElets you change them. Deleting things is also fine, as long as the old numbers can't be reused. -
FILEalso cares about generated code:- Renaming a field removes the Go getter
GetFoo(), so callers stop compiling. - Deleting an RPC removes a client method.
- Moving a file or changing
go_packagechanges import paths.
So
FILEforbids almost every removal or rename. - Renaming a field removes the Go getter
There was a problem hiding this comment.
Eitan Yarmush (@EItanya) , Benjamin Elder (@BenTheElder) , Tim Hockin (@thockin) , Julian Gutierrez Oschmann (@juli4n) , I picked WIRE here. Let me know if we should use a stricter category.
There was a problem hiding this comment.
I believe this is correct because we also use binary marshalling for the DB objects
There was a problem hiding this comment.
If we ever make a change that keeps WIRE compat but breaks FILE, it's still a client break, requiring a new version of the "SDK". We punted that fort now, but I am calling it out.
There was a problem hiding this comment.
I would like to bump this higher in a week or so for actual 1.0, but I think this is a good start to get people thinking until then
There was a problem hiding this comment.
I changed the compatibility setting from WIRE to PACKAGE.
Here is a quick comparison of these four settings:
| Aspect | WIRE |
WIRE_JSON |
PACKAGE |
FILE |
|---|---|---|---|---|
| Binary wire compatibility | Yes | Yes | Yes | Yes |
ProtoJSON compatibility (kubectl-ate manifests, snapshot-state.json) |
No | Yes | Yes | Yes |
Prevents foo = 1 → reserved 1; foo = 2 silent DB data loss |
No | Yes | Yes | Yes |
Prevents deleting fields (FIELD_NO_DELETE), which breaks RejectUnknownFieldsUnaryInterceptor |
No | No | Yes | Yes |
Prevents deleting RPCs/services (RPC_NO_DELETE) |
No | No | Yes | Yes |
Protects Go callers & plugins importing go.ate.dev/substrate/api/... |
No | No | Yes | Yes |
Allows adding optional to an existing scalar (e.g. CredentialHeader.credential_uri) |
Yes | Yes | No (FIELD_SAME_ONEOF) |
No (FIELD_SAME_ONEOF) |
Allows splitting a large .proto (like 3,259-line ateapi.proto) into multiple files in the same package |
Yes | Yes | Yes | No (FILE_NO_DELETE) |
Eitan Yarmush (EItanya)
left a comment
There was a problem hiding this comment.
This is a LGTM
|
Are we DONE with any proto changes / scrubs / cleanups we need to make? It's not that we can't open this door once shut, but it will take extraordinary action. Julian Gutierrez Oschmann (@juli4n) Luiz Oliveira (@laoj2) Eitan Yarmush (@EItanya) |
I'm not sure, e.g. we didn't close out the thread on enums vs strings and compat, but we do have the truly exceptional option to force merge, similar to dealing with broken / deadlocked CI, at minimum. Need to read through this. |
Other findings from an audit I did this morning:
|
|
Let's hold this just a bit, since it is not code |
b5e7248 to
83ff2f7
Compare
ateapi stores resources as binary protobuf in bytea columns. Binary protobuf identifies a field only by its number. If a field is renumbered, stored rows lose its value. If a retired number is reused, stored rows decode into the wrong field. atepg.go unmarshals with DiscardUnknown, so the original bytes are dropped on the next read-modify-write. Nothing reports this at runtime. Add buf as a tool module and a verify script that runs `buf breaking` on api/ateapi/v1 against the merge base with main. The WIRE rules reject renumbering, wire-incompatible type changes, and deleting a field without reserving its number. They allow field renames. WIRE_JSON would also pin names, which is too strict while the API is unreleased. Other protos are not stored, so they keep the AGENTS.md rule against reserved statements. AGENTS.md now lists api/ateapi/v1 field numbers as the exception. Signed-off-by: Haiyan Meng <[email protected]>
verify-all.sh ran the hack/verify scripts under errexit, so the first failing verifier stopped the loop and the rest never ran. A presubmit run then showed only one failure, and fixing it could reveal the next. Run every verifier, collect the ones that fail, list them at the end, and exit non-zero if any failed. Signed-off-by: Haiyan Meng <[email protected]>
Check the protos under api/, internal/proto/, and pkg/proto/ with buf's PACKAGE rules, which cover binary wire format, protojson names, RPCs, and generated code within each proto package. Accept an optional base ref in hack/verify/proto-breaking.sh. Breaking changes are no longer acceptable once this check is in, so remove the Backward Compatibility section from AGENTS.md. Signed-off-by: Haiyan Meng <[email protected]>
83ff2f7 to
14a133d
Compare
|
I changed the compatibility setting from Here is a quick comparison of these four settings:
|
Check upstream/main, origin/main, and main when no base ref is passed to hack/verify/proto-breaking.sh, and keep the newest merge base with HEAD so a stale fork or local main branch does not win. Print 'Verification failed:' from hack/verify-all.sh so hack/metrics/ci-failure-analysis.py matches failures from every verifier. Signed-off-by: Haiyan Meng <[email protected]>
Bring `release-1.0` up to `main` at 5a5b192 with the 19 changes merged since the previous batch in #3536. The final tree matches that commit exactly. **Please use Rebase and merge to preserve the individual commits and author attribution.** All 19 applied cleanly in upstream order. Original authors, author dates, co-author and sign-off trailers, and `-x` source references are retained. Upgrade notes: - #3533: old gVisor MEMORY snapshots, including goldens, no longer restore. Recreate them after upgrading. MicroVM MEMORY snapshots still resume with their old mounts until recreated. `/tmp` is now always tmpfs; ROOTFS snapshots no longer preserve its contents, and image-provided files there are hidden. MicroVM `/tmp` counts against actor memory and is capped at half the guest's memory. gVisor `/dev/shm` is now a 64 MiB tmpfs. Mount a `durableDir` at either path when persistence or more space is needed. `/run` now comes from the image rootfs. - #3447: remove `--actor-jwt-jwks-file` from custom credential-exchange sidecar configs. Set `--actor-jwt-issuer-ca-file` only when the issuer uses a private CA other than the service DNS CA. - #3450: do not reuse a deleted atespace name. See the updated atespace name-reuse guidance. Includes #3505, which overlaps the open backport in #3547. GKE provisioning and teardown now live in [substrate-gke](https://github.com/ai-on-gke/substrate-gke) rather than this repository. <details> <summary>Included PRs, in cherry-pick order</summary> 1. #3500: demos/{sandbox,jupyter,multi-template}: fix tutorial prerequisites, walkthroughs, and counter volume 2. #3498: demos/counter: inline gVisor walkthrough and fix setup commands 3. #3511: e2e tests: Extend the existing tests to cover tag actor. 4. #2775: Generate API reference documentation and publish it on Substrate website 5. #3119: Document how people, pods and CI jobs should authenticate to ate-api 6. #3505: tools: remove setup-gcp and hack/teardown.sh 7. #3147: e2e: resume fidelity after SandboxConfig version edits 8. #3370: ate-setup: reconcile ate-api-server ConfigMaps and roll out on config changes 9. #1607: hack: reject breaking proto changes across each proto package 10. #3415: docs: update and add security diagrams 11. #3485: Resuming a microVM actor on the same node no longer reads its rootfs upper back from disk 12. #3447: Verify actor JWTs in the credential exchange through OIDC discovery 13. #3533: ocispec: mount tmpfs at /dev/shm, and /tmp on both runtimes 14. #3450: docs: Document that atespace names must not be reused 15. #3410: Document using more than one egress credential provider 16. #3486: atelet: register the device plugin on a new socket each time 17. #3553: ate-setup: wait for the demo namespace in delete demo 18. #3560: Fix multiple issues in claude-code-multiplex demo 19. #3517: docs: remove inaccurate early-stage architecture documentation </details> Validation: every intermediate tree matches its upstream source commit, all 19 authorship records and original attribution trailers are preserved, and `git diff --check` passes. The original 18 backport commits are unchanged. AI use: AI-assisted cherry-picking, attribution checks, and review. - [ ] Tests pass - [x] Docs updated --------- Signed-off-by: Mofi Rahman <[email protected]> Signed-off-by: Eitan Yarmush <[email protected]> Signed-off-by: Nayana Bidari <[email protected]> Signed-off-by: Julian Gutierrez Oschmann <[email protected]> Signed-off-by: Max Thompson <[email protected]> Signed-off-by: Steven Shriver <[email protected]> Signed-off-by: Grant McCloskey <[email protected]> Signed-off-by: Shrutiya <[email protected]> Signed-off-by: Haiyan Meng <[email protected]> Signed-off-by: Greg Castle <[email protected]> Signed-off-by: Benjamin Elder <[email protected]> Signed-off-by: Anish Ramasekar <[email protected]> Signed-off-by: Shruti Nair <[email protected]> Signed-off-by: Haven Xia <[email protected]> Co-authored-by: Mofi Rahman <[email protected]> Co-authored-by: nybidari <[email protected]> Co-authored-by: Julian Gutierrez Oschmann <[email protected]> Co-authored-by: Max Thompson <[email protected]> Co-authored-by: Grant McCloskey <[email protected]> Co-authored-by: Steven Shriver <[email protected]> Co-authored-by: shrutiyam-glitch <[email protected]> Co-authored-by: haiyanmeng <[email protected]> Co-authored-by: Greg Castle <[email protected]> Co-authored-by: Benjamin Elder <[email protected]> Co-authored-by: Anish Ramasekar <[email protected]> Co-authored-by: Shruti Nair <[email protected]> Co-authored-by: Haven Xia <[email protected]> Co-authored-by: Adam Wathieu <[email protected]>
ateapi stores resources as binary protobuf in `bytea` columns. Binary protobuf identifies a field only by its number. If a field is renumbered, existing rows lose its value. If a retired number is reused, existing rows decode into the wrong field. `atepg.go` unmarshals with `DiscardUnknown: true`, so the original bytes are dropped on the next read-modify-write. Nothing reports this at runtime. - `hack/tools/buf`: adds buf v1.72.0 as a tool module, run through `hack/run-tool.sh`. - `buf.yaml`: checks the protos under `api/`, `internal/proto/`, and `pkg/proto/` with buf's `PACKAGE` breaking rules. Within a proto package, declarations may move between `.proto` files, but messages, enums, services, RPCs, fields, enum values, and reserved ranges cannot be deleted, renamed, renumbered, or retyped. - `hack/verify/proto-breaking.sh`: runs `buf breaking` on the working tree against the merge base of `HEAD` and `origin/main` (or `main`). CI checks out with `fetch-depth: 0`, so the merge base is available there. It passes `--against-config buf.yaml` so a baseline commit without `buf.yaml` still builds. - `AGENTS.md`: removes the Backward Compatibility section. Breaking changes are no longer acceptable once this check is in. - `hack/verify-all.sh`: runs every verifier and lists the failures at the end, instead of stopping at the first one. This is to make sure the CI runs every verifier on a PR including breaking proto changes. I can split this into its own PR if you prefer. I used Claude Code to help write the change and this description. --------- Signed-off-by: Haiyan Meng <[email protected]> (cherry picked from commit ae3ac05) Signed-off-by: Eitan Yarmush <[email protected]>
ateapi stores resources as binary protobuf in
byteacolumns. Binary protobuf identifies a field only by its number. If a field is renumbered, existing rows lose its value. If a retired number is reused, existing rows decode into the wrong field.atepg.gounmarshals withDiscardUnknown: true, so the original bytes are dropped on the next read-modify-write. Nothing reports this at runtime.hack/tools/buf: adds buf v1.72.0 as a tool module, run throughhack/run-tool.sh.buf.yaml: checks the protos underapi/,internal/proto/, andpkg/proto/with buf'sPACKAGEbreaking rules. Within a proto package, declarations may move between.protofiles, but messages, enums, services, RPCs, fields, enum values, and reserved ranges cannot be deleted, renamed, renumbered, or retyped.hack/verify/proto-breaking.sh: runsbuf breakingon the working tree against the merge base ofHEADandorigin/main(ormain). CI checks out withfetch-depth: 0, so the merge base is available there. It passes--against-config buf.yamlso a baseline commit withoutbuf.yamlstill builds.AGENTS.md: removes the Backward Compatibility section. Breaking changes are no longer acceptable once this check is in.hack/verify-all.sh: runs every verifier and lists the failures at the end, instead of stopping at the first one. This is to make sure the CI runs every verifier on a PR including breaking proto changes. I can split this into its own PR if you prefer.I used Claude Code to help write the change and this description.