diff --git a/internal/docgen/mintlify.go b/internal/docgen/mintlify.go
index 768894669..9a7dc0cf9 100644
--- a/internal/docgen/mintlify.go
+++ b/internal/docgen/mintlify.go
@@ -121,6 +121,8 @@ func (MintlifyFormatter) ExampleUseCases(commandName, example string) string {
exampleLines := all[i]
title := strings.Trim(exampleLines[0], ":")
if len(title) > 0 {
+ // Double quotes would terminate the JSX title attribute and break the MDX build.
+ title = strings.ReplaceAll(title, "\"", "'")
fmt.Fprintf(&b, "\n", strings.TrimSpace(title[1:]))
fmt.Fprintf(&b, "```shell\n%s\n```\n", strings.Join(exampleLines[1:], "\n"))
b.WriteString("\n")
diff --git a/internal/docgen/mintlify_test.go b/internal/docgen/mintlify_test.go
index 4949d3b8b..b579521f6 100644
--- a/internal/docgen/mintlify_test.go
+++ b/internal/docgen/mintlify_test.go
@@ -163,6 +163,18 @@ func TestMintlifyExampleUseCases(t *testing.T) {
}
}
+func TestMintlifyExampleUseCasesEscapesQuotesInTitle(t *testing.T) {
+ f := MintlifyFormatter{}
+ example := "# list controls whose name or identifier contains \"sdlc\":\nkosli list controls --search sdlc"
+ got := f.ExampleUseCases("kosli list controls", example)
+ if !strings.Contains(got, ``) {
+ t.Errorf("expected double quotes in title to be replaced with single quotes, got:\n%s", got)
+ }
+ if strings.Contains(got, `contains "sdlc"`) {
+ t.Errorf("expected no raw double quotes inside the title attribute, got:\n%s", got)
+ }
+}
+
func TestMintlifyLinkHandler(t *testing.T) {
f := MintlifyFormatter{}
got := f.LinkHandler("kosli_attest_snyk.md")