Skip to content

v0.21.0

Choose a tag to compare

@trendvidia trendvidia released this 25 Jul 20:52
d6de621

What's Changed

  • Reserved protowire. prefix rejected in @sensitive(class) values (#125) — RFC-001 §6.7 classification parameter, rule 1 (protowire#111/protowire#163): class names beginning with protowire. are reserved for future spec-defined classes, mirroring the §7 violation-code reservation. The B3 use-arg validation pass now rejects a string-literal class argument (named or positional) that is exactly "protowire" or any dotted extension of it, keyed on the resolved FQN protowire.schema.v1.sensitive — user annotations that happen to be named sensitive are unaffected, as are lookalike prefixes (protowirex.pii), bare @sensitive, and class = "". Closes the v0.19.0/v0.20.0 corpus-ahead-of-toolchain gap: MUST-NOT-COMPILE fixture invalid/reserved_sensitive_class.proto now fails with exactly the expected diagnostic (#123).
  • TypeDecl.base_type_fqn now emitted fully qualified (#126) — the carrier contract pins the field as the FQN of the base type, but the lowering recorded the base as written in source, so bare in-package references stayed bare (type CompanyEmail = Email"Email"). The IR now resolves each alias's base in a quiet resolveTypeAliasBases pass and the new ir.TypeAlias.BaseTypeFQN() accessor feeds the FDP carrier; primitives keep their predeclared name, chained aliases record their immediate base fully qualified, and unresolved bases fall back to the as-written text (#121). Corpus fixtures 02_composition, 06_cross_file_lib, and 14_refinement_kinds now produce exactly the fixture-pinned FQNs (e.g. SettledStatus → fixtures.refine.OrderStatus, DisplayName → google.protobuf.StringValue).

Release gate: ci-local-full verified on this tag — generate/lint/test clean, checkspecdrift matches the protowire checkout, benchmarks pass.

Full Changelog: v0.20.0...v0.21.0