Purpose: Clean up the issue tracker so Phase 1 is complete. Both issues are already solved by existing features -- #91 by the (sebuf.http.unwrap) = true annotation on repeated fields, and #94 by proto3's built-in json_name field option. Closing them with proper documentation prevents future confusion.
Output: Both issues closed on GitHub with explanatory comments.
<execution_context> @/Users/sebastienmelki/.claude/get-shit-done/workflows/execute-plan.md @/Users/sebastienmelki/.claude/get-shit-done/templates/summary.md </execution_context>
Step 1: Verify the existing implementation by confirming these files exist:
internal/httpgen/testdata/proto/unwrap.proto-- containsRootRepeatedResponsetest message (lines 91-95)internal/httpgen/unwrap.go-- containsgenerateRootRepeatedUnwrapMarshalJSONandgenerateRootRepeatedUnwrapUnmarshalJSONinternal/httpgen/unwrap_test.go-- containsTestRootUnwrapFileGenerationwithRootRepeatedResponsesubtest
Step 2: Close the issue with the exact comment below:
gh issue close 91 --comment "$(cat <<'COMMENT'
This is already supported via the existing `(sebuf.http.unwrap) = true` annotation on repeated fields. No new annotation is needed.
**Usage:**
\`\`\`proto
message ListItemsResponse {
repeated Item items = 1 [(sebuf.http.unwrap) = true];
}
\`\`\`
**Result:** The response serializes as `[{...}, {...}]` instead of `{"items": [{...}, {...}]}`.
The implementation generates custom `MarshalJSON`/`UnmarshalJSON` methods on the response message that marshal/unmarshal the repeated field directly at the root level.
**Test coverage:**
- Proto fixture: `internal/httpgen/testdata/proto/unwrap.proto` (`RootRepeatedResponse` message)
- Implementation: `internal/httpgen/unwrap.go` (`generateRootRepeatedUnwrapMarshalJSON`, `generateRootRepeatedUnwrapUnmarshalJSON`)
- Tests: `internal/httpgen/unwrap_test.go` (`TestRootUnwrapFileGeneration`)
**Documentation:** See the "Root-level unwrap" section in CLAUDE.md for full examples including root repeated, root map, and combined unwrap patterns.
This works across all generators: go-http (server marshal/unmarshal), go-client (same marshaling), and openapiv3 (array schema at root level).
COMMENT
)"Step 1: Check issue state:
gh issue view 94 --json state,commentsExpected state: CLOSED (confirmed during research -- closed by @SebastienMelki with comment explaining proto3's json_name as the existing solution).
Step 2: If the issue is already closed with a thorough comment (which research confirms), no further action is needed. Simply log confirmation.
Step 3: If for any reason the issue is NOT closed or the comment is insufficient, close it with the exact comment below:
gh issue close 94 --comment "$(cat <<'COMMENT'
Closing -- proto3's built-in \`json_name\` field option provides per-field JSON name override:
\`\`\`proto
message User {
string first_name = 1 [json_name = "firstName"]; // camelCase in JSON
string last_name = 2 [json_name = "LastName"]; // PascalCase in JSON
string user_id = 3; // defaults to "userId" per proto3 spec
}
\`\`\`
For global snake_case output, use \`protojson.MarshalOptions{UseProtoNames: true}\` when marshaling.
See https://protobuf.dev/programming-guides/proto3/#json for the proto3 JSON mapping specification.
No sebuf-specific annotation is needed -- this is handled entirely by proto3 and protojson.
COMMENT
)"This should be a no-op since issue #94 is already closed with a detailed comment from the repo owner.
# Verify issue is closed
gh issue view 94 --json state | jq '.state'
# Should output: "CLOSED"
# Verify closing comment exists and mentions json_name
gh issue view 94 --json comments | jq '.comments[0].body' | grep -q "json_name"gh issue view 91 --json statereturns"CLOSED"gh issue view 94 --json statereturns"CLOSED"- Issue #91 closing comment references
(sebuf.http.unwrap) = truewith proto example showingrepeated Item items = 1 [(sebuf.http.unwrap) = true] - Issue #94 closing comment references proto3
json_namefield option with proto example and protobuf.dev link
<success_criteria>
- GitHub issue #91 is closed with a comment documenting how existing unwrap annotation covers root-level arrays
- GitHub issue #94 is confirmed closed with a comment documenting proto3
json_nameas the existing solution - No code changes needed -- these are purely issue tracker housekeeping </success_criteria>
