Skip to content

spec: no pxf.* dual-emission — @required/@default are carrier-only (RFC-001 §8.5) - #110

Merged
trendvidia merged 2 commits into
mainfrom
rfc001-92-no-pxf-dual-emission
Jul 16, 2026
Merged

spec: no pxf.* dual-emission — @required/@default are carrier-only (RFC-001 §8.5)#110
trendvidia merged 2 commits into
mainfrom
rfc001-92-no-pxf-dual-emission

Conversation

@trendvidia

Copy link
Copy Markdown
Owner

Summary

Resolves #92 (S3 ratification closer 2 of 2) as carrier-only — no dual-emission:

  • §8.5 (new normative paragraph): @required/@default(value) lower only to the 50400 carrier; the compiler MUST NOT synthesize (pxf.required) (50000) / (pxf.default) (50001) from them. Brackets and annotations are disjoint surfaces — brackets lower exactly as written, annotations to the carrier, neither back-filled. Coexistence on one field is allowed during migration; compilers MAY warn on conflicting values, MUST NOT reconcile.
  • §5.2 hedge ("lowering preserves the legacy options where consumers depend on them") replaced with the carrier-only rule; Appendix A migration notes updated (upgrade consumers before migrating schemas).
  • Draft -01 Coexistence with Bracket Options: the "@required lowers to set both … AND (pxf.required) = true" claim is removed; disjoint-surface rule + migration ordering stated normatively.
  • STABILITY.md: corrects the now-wrong "lower to the same descriptor shape as the existing bracket forms" sentence; adds a No legacy dual-emission bullet: consumers reading only the legacy extension numbers (e.g. protowire-go's PXF decode-time (pxf.required) enforcement) are not supported against schemas using the annotation forms.
  • Fixture 04_required_and_default.proto header: dual-emission expectation replaced with the disjoint-lowering expectation (bracket-only fields unchanged, MAY-warn rule, carrier-aware validation semantics).

Consequences

Verification

Grep sweep for remaining dual-emission claims across docs/, STABILITY.md, CHANGELOG.md, testdata/ — none remain (CHANGELOG's existing wording was already carrier-neutral).

Closes #92. Tracked by #55.

…FC-001 §8.5)

Resolves the #92 decision as carrier-only:

- §5.2/§8.5: @required/@default lower exclusively to the 50400
  carrier; the compiler MUST NOT synthesize (pxf.required)/
  (pxf.default) from them. Brackets and annotations are disjoint
  surfaces, neither back-filled from the other; coexistence allowed,
  MAY warn on conflicting values, MUST NOT reconcile.
- Appendix A migration notes: legacy-option consumers see only
  bracket-written options — upgrade consumers before migrating
  schemas.
- Draft -01 Coexistence section: drops the 'lowers to set both'
  claim, states the disjoint-surface rule and migration ordering.
- STABILITY.md: corrects the 'same descriptor shape' claim; new
  'No legacy dual-emission' bullet declaring v1.1 legacy-option
  readers unsupported against annotation-form schemas.
- Fixture 04 header: dual-emission expectation replaced with the
  disjoint-lowering expectation.

Ratifies shipped protocompile M1 carrier-only emission as-is; the
#33/#34 dual-emission acceptance boxes are struck in the
resolution record.
@trendvidia
trendvidia merged commit 8ca669b into main Jul 16, 2026
4 checks passed
@trendvidia
trendvidia deleted the rfc001-92-no-pxf-dual-emission branch July 16, 2026 20:13
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.

RFC-001: @required/@default legacy (pxf.*) dual-emission decision

1 participant