* Renaming of fields or package namespaces for a proto must not occur. This is inherently dangerous, since:
* Fields renames break wire compatibility. This is stricter than standard proto development procedure
in the sense that it does not break binary wire format. However, it **does** break loading
of YAML/JSON into protos as well as text protos. Since we consider YAML/JSON to be first class
inputs, we must not change field names.
* For service definitions, the gRPC endpoint URL is inferred from package
namespace, so this will break client/server communication.
* For a message embedded in an `Any` object, the type URL, which the package
namespace is a part of, may be used by Envoy or other API consuming code.
Currently, this applies to the top-level resources embedded in
`DiscoveryResponse` objects, e.g. `Cluster`, `Listener`, etc.
* Consuming code will break and require source change to match the changes.
* Non-frozen fields should be tagged with `[#not-implemented-hide:]`, `[#not-implemented-warn:]`, `[#proto-status: draft]` or `[#proto-status: experimental]`.
* Every proto directory should have a `README.md` describing its content. See
for example [envoy.service](envoy/service/README.md).