You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A complete Protocol Buffers / gRPC compiler was drafted in #21 (branch feat/protobuf-compiler, head 2345b07, +10,170 lines across 67 files). It lowers proto2, proto3 and the 2023 edition through github.com/bufbuild/protocompile: messages and enums into the ID-keyed registry, field numbers onto Property.WireID, oneof as a WireTagged union behind a Flatten wrapper, repeated/map as hoisted containers, the well-known types, extensions and reserved ranges — with a conformance corpus under testdata/conformance/protobuf and goldens under testdata/golden/protobuf. The PR body is the design record; read it before starting over.
It was opened 2026-07-21, last pushed 2026-07-23, and has not been reviewed. README milestone 5 places the Protobuf compiler after AsyncAPI and GraphQL, so this is the tracking issue for that row, not a request to land the draft now.
Why the draft cannot land as it stands
Measured against main at e1e92a0 (166 commits ahead of the draft's base):
Package layout. The draft predates the micro-compiler restructure (docs/micro-compiler-design.md) and is one flat package. internal/archtest's rules map, the 20-method cap on compiler types, and the per-package allowlists all postdate it; the arch_test.go conflict is that map having been rewritten underneath it.
go.sum conflicts, and CI was green only against the July main.
What reviving it needs
Rebase is not the shape of the work — start a fresh branch from main and port the lowering, using the draft as the reference for the proto→IR mapping decisions.
Implement Detect (a .proto source is recognisable from syntax = / edition = at the top; bounded sniff, same discipline as compilers/openapi/detect.go).
Lay it out as compilers/protobuf + compilers/protobuf/internal/*, each internal package with its own archtest rules entry; use compilers/compile for naming and IDs rather than a local grammar.
Regenerate the goldens at the current IRVersion and re-derive the conformance matrix witnesses (docs/ir-spec-matrix.md row keys) for the rows Protobuf can express.
Run the full oracle sweep: go run ./cmd/morphic-harness testdata/conformance/protobuf.
Decision needed
Whether #21 stays open as a draft or is closed with this issue as its pointer. Either way the branch should not be deleted — the design work in it is the asset.
What exists
A complete Protocol Buffers / gRPC compiler was drafted in #21 (branch
feat/protobuf-compiler, head2345b07, +10,170 lines across 67 files). It lowers proto2, proto3 and the 2023 edition throughgithub.com/bufbuild/protocompile: messages and enums into the ID-keyed registry, field numbers ontoProperty.WireID,oneofas aWireTaggedunion behind aFlattenwrapper,repeated/mapas hoisted containers, the well-known types, extensions and reserved ranges — with a conformance corpus undertestdata/conformance/protobufand goldens undertestdata/golden/protobuf. The PR body is the design record; read it before starting over.It was opened 2026-07-21, last pushed 2026-07-23, and has not been reviewed. README milestone 5 places the Protobuf compiler after AsyncAPI and GraphQL, so this is the tracking issue for that row, not a request to land the draft now.
Why the draft cannot land as it stands
Measured against
mainate1e92a0(166 commits ahead of the draft's base):compilers.Compilernow requiresFormats,DetectandCompile(compilers/compilers.go, added by feat(engine)!: let compilers own format detection and options #341). The draft implementsFormatsandCompileonly, so it does not build."irVersion": "0.1.0";mainis at0.4.0after three breaking revisions (feat(ir)!: add Payload.Required and Parameter.Provenance #437–feat(ir)!: bump IRVersion to 0.4.0 for the stack's shape changes #442, feat(ir)!: land the IR 0.4.0 stack #464). The lowering targets struct shapes that no longer exist —ErrorCaseis a response, exclusive bounds are carried separately,Payload.RequiredandParameter.Provenanceexist, and so on.docs/micro-compiler-design.md) and is one flat package.internal/archtest'srulesmap, the 20-method cap on compiler types, and the per-package allowlists all postdate it; thearch_test.goconflict is that map having been rewritten underneath it.canonicalWordsand the identifier grammar were extracted intocompilers/compileby compilers/compile: own the identifier grammar shared by every compiler #162/compilers/compile: own the canonical naming grammar #163/refactor: move the naming and ID grammars into the framework #183 specifically because the draft's copy had diverged (compilers: canonical naming grammar diverges across the three compilers #161). The draft still carries its own.go.sumconflicts, and CI was green only against the Julymain.What reviving it needs
mainand port the lowering, using the draft as the reference for the proto→IR mapping decisions.Detect(a.protosource is recognisable fromsyntax =/edition =at the top; bounded sniff, same discipline ascompilers/openapi/detect.go).compilers/protobuf+compilers/protobuf/internal/*, each internal package with its ownarchtestrules entry; usecompilers/compilefor naming and IDs rather than a local grammar.IRVersionand re-derive the conformance matrix witnesses (docs/ir-spec-matrix.mdrow keys) for the rows Protobuf can express.go run ./cmd/morphic-harness testdata/conformance/protobuf.Decision needed
Whether #21 stays open as a draft or is closed with this issue as its pointer. Either way the branch should not be deleted — the design work in it is the asset.
Refs #21.