From 2287a8238c00405e34f55df5fb704b15940e2ee6 Mon Sep 17 00:00:00 2001 From: Rodin Date: Fri, 1 May 2026 21:35:41 -0700 Subject: [PATCH] feat: add role title as H1 header for visual differentiation When reviewer-name is set, prepend "# Security Review" / "# Sonnet Review" etc. as a top-level header. Makes it immediately obvious which role each review represents in the Gitea UI, especially when multiple reviews come from the same bot account. --- review/formatter.go | 5 +++++ review/formatter_test.go | 25 +++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/review/formatter.go b/review/formatter.go index f0af56d..3e54823 100644 --- a/review/formatter.go +++ b/review/formatter.go @@ -9,6 +9,11 @@ import ( func FormatMarkdown(result *ReviewResult, reviewerName string) string { var sb strings.Builder + if reviewerName != "" { + title := strings.ToUpper(reviewerName[:1]) + reviewerName[1:] + sb.WriteString(fmt.Sprintf("# %s Review\n\n", title)) + } + sb.WriteString("## Summary\n\n") sb.WriteString(result.Summary) sb.WriteString("\n\n") diff --git a/review/formatter_test.go b/review/formatter_test.go index dbc95db..aa28846 100644 --- a/review/formatter_test.go +++ b/review/formatter_test.go @@ -134,3 +134,28 @@ func TestFormatMarkdown_Sentinel(t *testing.T) { t.Error("should not contain sentinel when reviewer name is empty") } } + +func TestFormatMarkdown_RoleTitle(t *testing.T) { + result := &ReviewResult{ + Verdict: "APPROVE", + Summary: "All good.", + Recommendation: "Merge it.", + } + + // With reviewer name: should have title header + output := FormatMarkdown(result, "security") + if !strings.Contains(output, "# Security Review\n") { + t.Error("expected '# Security Review' header when reviewer name is set") + } + + output2 := FormatMarkdown(result, "gpt") + if !strings.Contains(output2, "# Gpt Review\n") { + t.Error("expected '# Gpt Review' header") + } + + // Without reviewer name: no title header + output3 := FormatMarkdown(result, "") + if strings.Contains(output3, "# ") && strings.Contains(output3, " Review\n") { + t.Error("should not contain role title header when reviewer name is empty") + } +}