Skip to content

feat(submitqueue): cut over internal queues to protojson - #703

Open
behinddwalls wants to merge 1 commit into
mainfrom
preetam/request-history
Open

feat(submitqueue): cut over internal queues to protojson#703
behinddwalls wants to merge 1 commit into
mainfrom
preetam/request-history

Conversation

@behinddwalls

@behinddwalls behinddwalls commented Sep 11, 2026

Copy link
Copy Markdown
Collaborator

Summary

Why?

SubmitQueue's pipeline still serialized Go structs with encoding/json, while Stovepipe and the queue-contract RFC use proto3 + protojson with one message per topic key. That left the internal contract without a language-neutral schema and made additive field growth a shared-struct change.

What?

Add submitqueue/core/messagequeue (proto payloads, protojson glue, TopicKey constants, and entity mapping). Gateway and orchestrator publish and consume the message bound to each topic. MarshalID/UnmarshalID take the topic key so a later field is not discarded onto the wrong type. Proto filenames that collide in the protobuf registry are prefixed (submitqueuemerge, submitqueuebuild, submitqueuebuildsignal). Queue-only ToBytes/FromBytes helpers are removed from entities. Hard cutover: drain or drop in-flight start and log messages; id-only topics stay {id,queue}.

Test Plan

bazel test of //submitqueue/core/messagequeue:go_default_test plus gateway and orchestrator/DLQ controller tests
bazel test //test/e2e/submitqueue:go_default_test --test_filter=TestE2EIntegration
bazel test //test/e2e/submitqueue:go_default_test --test_filter=TestGitMergeE2E

## Summary

### Why?

SubmitQueue's pipeline still serialized Go structs with encoding/json, while Stovepipe and the queue-contract RFC use proto3 + protojson with one message per topic key. That left the internal contract without a language-neutral schema and made additive field growth a shared-struct change.

### What?

Add submitqueue/core/messagequeue (proto payloads, protojson glue, TopicKey constants, and entity mapping). Gateway and orchestrator publish and consume the message bound to each topic. MarshalID/UnmarshalID take the topic key so a later field is not discarded onto the wrong type. Proto filenames that collide in the protobuf registry are prefixed (submitqueuemerge, submitqueuebuild, submitqueuebuildsignal). Queue-only ToBytes/FromBytes helpers are removed from entities. Hard cutover: drain or drop in-flight start and log messages; id-only topics stay {id,queue}.

## Test Plan

✅ `bazel test` of `//submitqueue/core/messagequeue:go_default_test` plus gateway and orchestrator/DLQ controller tests
✅ `bazel test //test/e2e/submitqueue:go_default_test --test_filter=TestE2EIntegration`
✅ `bazel test //test/e2e/submitqueue:go_default_test --test_filter=TestGitMergeE2E`
@behinddwalls
behinddwalls marked this pull request as ready for review September 11, 2026 21:56
@behinddwalls
behinddwalls requested review from a team and sbalabanov as code owners September 11, 2026 21:56
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.

2 participants