
resolve-issue
by washanhanzi
One Axum handler serves them ALL. Connect, gRPC, gRPC-Web, and HTTP.
SKILL.md
name: resolve-issue description: Investigate and resolve GitHub issues for connectrpc-axum. Requires a GitHub issue link or number. Analyzes the issue, references architecture docs and connect-go implementation, creates integration tests if needed, then posts a resolution plan or answer.
Resolve Issue
Investigate and resolve GitHub issues for the connectrpc-axum project.
Requirements
A GitHub issue link or number is required. Examples:
#4242https://github.com/frankgreco/connectrpc-axum/issues/42
Workflow
1. Fetch Issue Details
Get the issue content using gh:
gh issue view <number> --repo frankgreco/connectrpc-axum
Identify the issue type:
- Question: User needs help understanding something
- Bug Report: Something isn't working as expected
- Feature Request: New functionality requested
2. Research Phase
2a. Check Project Documentation
Read relevant docs based on the issue topic:
docs/guide/architecture.md- Module structure, request flow, key typesdocs/guide/index.md- Features and capabilities- Topic-specific guides in
docs/guide/:configuration.md- Service/handler configcompression.md- Compression supporttimeout.md- Timeout handlingtonic.md- Tonic integrationgrpc-web.md- gRPC-Web support
2b. Check connect-go Reference
Use the connect-go-reference skill to verify protocol behavior:
# Search local connect-go/ directory
Grep pattern="<relevant-pattern>" path="connect-go/"
Read file_path="connect-go/<relevant-file>.go"
Key files:
protocol_connect.go- Connect protocol implementationprotocol_grpc.go- gRPC protocolerror.go- Error handlingenvelope.go- Streaming frame format
NEVER use WebFetch/WebSearch for connect-go - always use local files.
2c. Search Codebase
Search the project for relevant code:
# Find related implementations
Grep pattern="<keyword>" path="connectrpc-axum/"
Grep pattern="<keyword>" path="connectrpc-axum-build/"
3. For Bugs - Reproduce and Verify
3a. Run Existing Tests
First, check if existing tests cover the issue:
# Run unit tests
cargo test
# Run integration tests
go test -C connectrpc-axum-examples/go-client -v -timeout 300s
3b. Create Reproduction Test
If the bug isn't covered by existing tests, create an integration test:
- Create Rust server in
connectrpc-axum-examples/src/bin/<issue-name>.rs:
use axum::Router;
use connectrpc_axum::prelude::*;
use tokio::net::TcpListener;
// Import generated code
use connectrpc_axum_examples::hello::*;
#[tokio::main]
async fn main() {
let app = Router::new()
.connect_service(HelloWorldServiceBuilder::new()
.say_hello(|req: ConnectRequest<HelloRequest>| async move {
// Handler implementation
Ok(HelloResponse {
message: format!("Hello, {}!", req.message.name.unwrap_or_default()),
})
})
);
let listener = TcpListener::bind("0.0.0.0:3000").await.unwrap();
println!("Server ready on port 3000");
axum::serve(listener, app).await.unwrap();
}
- Create Go test in
connectrpc-axum-examples/go-client/<issue-name>_test.go:
package main
import (
"context"
"net/http"
"testing"
"connectrpc.com/connect"
"github.com/connectrpc-axum/examples/go-client/gen"
"github.com/connectrpc-axum/examples/go-client/gen/genconnect"
)
func TestIssue42(t *testing.T) {
s := startServer(t, "<issue-name>", "")
defer s.stop()
client := genconnect.NewHelloWorldServiceClient(
http.DefaultClient,
serverURL,
)
// Test the specific scenario from the issue
resp, err := client.SayHello(context.Background(), connect.NewRequest(&gen.HelloRequest{
Name: proto.String("test"),
}))
if err != nil {
t.Fatalf("RPC failed: %v", err)
}
// Assert expected behavior
if resp.Msg.Message != "expected" {
t.Errorf("got %q, want %q", resp.Msg.Message, "expected")
}
}
- Run the specific test:
go test -C connectrpc-axum-examples/go-client -v -run TestIssue42
4. Formulate Resolution
Based on findings, prepare one of:
For Questions
- Write a clear answer with code examples
- Reference relevant documentation
- Suggest documentation improvements if the answer wasn't obvious
For Bugs
- Document the root cause
- Create a fix plan with specific files and changes
- Include test cases that verify the fix
For Feature Requests
- Assess feasibility based on architecture
- Outline implementation approach
- Identify affected modules and files
- Note any connect-go reference patterns to follow
5. Post Response to GitHub
Use gh to comment on the issue:
gh issue comment <number> --repo frankgreco/connectrpc-axum --body "$(cat <<'EOF'
## Investigation Summary
<summary of what was found>
## Root Cause / Answer
<explanation>
## Resolution Plan
<if applicable: specific steps to fix>
## References
- `docs/guide/<relevant>.md`
- `connect-go/<file>.go` (lines X-Y)
- `connectrpc-axum/src/<file>.rs` (lines X-Y)
---
*Investigated by Claude Code*
EOF
)"
6. For Fixes - Create Implementation Plan
If fixing the issue, outline:
- Files to modify with specific changes
- New tests to add
- Documentation updates if needed
Then either:
- Implement the fix directly (for small changes)
- Create a detailed plan for user approval (for larger changes)
Reference Skills
- connect-go-reference: Verify protocol behavior against Go implementation
- test: Run the complete test suite
- architecture: Understand project structure and design
Integration Test Patterns
Existing test patterns in connectrpc-axum-examples/go-client/:
| File | Tests |
|---|---|
unary_test.go | Basic unary RPC |
server_stream_test.go | Server streaming |
bidi_stream_test.go | Bidirectional streaming |
timeout_test.go | Connect-Timeout-Ms |
error_details_test.go | Error detail encoding |
compression_test.go | Compression negotiation |
grpc_web_test.go | gRPC-Web protocol |
Use these as templates for new reproduction tests.
Score
Total Score
Based on repository quality metrics
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
1ヶ月以内に更新
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
Reviews
Reviews coming soon
