Lane: reflection/parse (sweep 2, finding 6)
fromObject({e:"BOGUS"}) on a CLOSED enum silently leaves the field unset (src/converter.js:30-45, generated switch default: only assigns for OPEN enums) while verify({e:"BOGUS"}) returns "e: enum value expected" — verify/fromObject disagree and fromObject fabricates a message with dropped data. Contrast: bad message payloads throw TypeError (converter.js:47-48).
Repro (executed): fromObject → {}, verify → error string.
Verdicts: both Confirm, Worth exploring (fromObject has always been the lenient path).
Upstream: no direct match; ProtoJSON errors on unknown closed-enum names (philosophy precedent).
Decision question: Adopt (throw TypeError for unrepresentable enum inputs, matching the message-field precedent) or Reject as intended leniency?
Lane: reflection/parse (sweep 2, finding 6)
fromObject({e:"BOGUS"})on a CLOSED enum silently leaves the field unset (src/converter.js:30-45, generated switchdefault:only assigns for OPEN enums) whileverify({e:"BOGUS"})returns"e: enum value expected"— verify/fromObject disagree and fromObject fabricates a message with dropped data. Contrast: bad message payloads throw TypeError (converter.js:47-48).Repro (executed):
fromObject→{},verify→ error string.Verdicts: both Confirm, Worth exploring (fromObject has always been the lenient path).
Upstream: no direct match; ProtoJSON errors on unknown closed-enum names (philosophy precedent).
Decision question: Adopt (throw TypeError for unrepresentable enum inputs, matching the message-field precedent) or Reject as intended leniency?