Skip to content

Commit 29bec57

Browse files
committed
fix: wrap Mermaid output in code fence for GitHub rendering
1 parent 03546de commit 29bec57

File tree

4 files changed

+38
-34
lines changed

4 files changed

+38
-34
lines changed

internal/renderer/mermaid.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ func truncate(s string, n int) string {
6060
func WriteMermaid(idx *schema.Index, path string) error {
6161
var sb strings.Builder
6262

63-
sb.WriteString("graph LR\n")
63+
// Wrap in markdown code fence so GitHub renders the diagram.
64+
sb.WriteString("```mermaid\ngraph LR\n")
6465

6566
// Collect which languages are actually used by modules.
6667
usedLangs := map[string]bool{}
@@ -106,5 +107,6 @@ func WriteMermaid(idx *schema.Index, path string) error {
106107
sb.WriteString(fmt.Sprintf(" %s --> %s\n", from, to))
107108
}
108109

110+
sb.WriteString("```\n")
109111
return os.WriteFile(path, []byte(sb.String()), 0644)
110112
}

internal/renderer/mermaid_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func TestRenderMermaid(t *testing.T) {
5757
content := string(data)
5858

5959
// Must start with graph LR
60-
if !strings.HasPrefix(content, "graph LR\n") {
60+
if !strings.HasPrefix(content, "```mermaid\ngraph LR\n") {
6161
t.Errorf("expected content to start with 'graph LR\\n', got: %q", content[:min(len(content), 20)])
6262
}
6363

@@ -102,7 +102,7 @@ func TestRenderMermaidEmpty(t *testing.T) {
102102
}
103103
content := string(data)
104104

105-
if !strings.HasPrefix(content, "graph LR\n") {
105+
if !strings.HasPrefix(content, "```mermaid\ngraph LR\n") {
106106
t.Errorf("expected empty diagram to start with 'graph LR\\n', got: %q", content)
107107
}
108108
}

stacklit.json

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{
22
"$schema": "https://stacklit.dev/schema/v1.json",
33
"version": "1",
4-
"generated_at": "2026-04-10T00:05:04Z",
4+
"generated_at": "2026-04-10T00:13:27Z",
55
"stacklit_version": "dev",
6-
"merkle_hash": "bd0d1090ba4aff650f9a9d9a308b118e7708043445a2cc9cbc202e800378608e",
6+
"merkle_hash": "a4375e781070df0cf5d9b49c6b64aa1a902ed9a002d18cc9f0e62544227f4b4a",
77
"project": {
88
"name": "stacklit",
99
"root": ".",
@@ -14,7 +14,7 @@
1414
"languages": {
1515
"go": {
1616
"files": 48,
17-
"lines": 5698
17+
"lines": 5700
1818
},
1919
"java": {
2020
"files": 1,
@@ -47,7 +47,7 @@
4747
"cmd/stacklit/main.go"
4848
],
4949
"total_files": 59,
50-
"total_lines": 5910
50+
"total_lines": 5912
5151
},
5252
"modules": {
5353
"assets": {
@@ -341,7 +341,7 @@
341341
"purpose": "Output renderers",
342342
"language": "go",
343343
"files": 5,
344-
"lines": 371,
344+
"lines": 373,
345345
"file_list": [
346346
"html.go",
347347
"json.go",
@@ -386,14 +386,14 @@
386386
],
387387
"type_defs": {
388388
"Architecture": "Pattern string, Summary string",
389-
"Hints": "AddFeature string, TestCmd string, EnvVars []string, DoNotTouch []string",
389+
"Dependencies": "Edges [][]string, Entrypoints []string, MostDepended []string, Isolated []string",
390+
"GitInfo": "HotFiles []HotFile, Recent []string, Stable []string",
390391
"HotFile": "Path string, Commits90d int",
391392
"Index": "Schema string, Version string, GeneratedAt string, StacklitVersion string, MerkleHash string, Project Project, Tech Tech, Structure Structure, Modules map[string]ModuleInfo, Dependencies Dependenci...",
392-
"LangStats": "Files int, Lines int",
393393
"ModuleInfo": "Purpose string, Language string, Files int, Lines int, FileList []string, Exports []string, TypeDefs map[string]string, DependsOn []string, DependedBy []string, Activity string",
394394
"MultiIndex": "Schema string, Version string, Type string, GeneratedAt string, TotalFiles int, TotalLines int, TotalModules int, Repos []RepoSummary",
395-
"Project": "Name string, Root string, Type string, Workspaces []string",
396395
"RepoSummary": "Name string, Path string, PrimaryLanguage string, TotalFiles int, TotalLines int, Modules map[string]ModuleInfo, Frameworks []string, Entrypoints []string",
396+
"Structure": "Entrypoints []string, TotalFiles int, TotalLines int, KeyDirectories map[string]string",
397397
"Tech": "PrimaryLanguage string, Languages map[string]LangStats, Frameworks []string"
398398
},
399399
"depended_by": [
@@ -578,15 +578,15 @@
578578
"hot_files": [
579579
{
580580
"path": "internal/engine/engine.go",
581-
"commits_90d": 12
581+
"commits_90d": 13
582582
},
583583
{
584584
"path": "stacklit.json",
585-
"commits_90d": 11
585+
"commits_90d": 12
586586
},
587587
{
588588
"path": "stacklit.mmd",
589-
"commits_90d": 11
589+
"commits_90d": 12
590590
},
591591
{
592592
"path": "assets/template.html",
@@ -602,7 +602,7 @@
602602
},
603603
{
604604
"path": "README.md",
605-
"commits_90d": 5
605+
"commits_90d": 6
606606
},
607607
{
608608
"path": "go.mod",
@@ -658,28 +658,28 @@
658658
}
659659
],
660660
"recent": [
661+
"npm/README.md",
662+
"npm/package.json",
661663
"README.md",
662-
"assets/template.html",
663664
"demo.gif",
664665
"demo.tape",
665-
"internal/mcp/server.go",
666+
"internal/engine/engine.go",
667+
"stacklit-og.png",
666668
"stacklit.json",
667669
"stacklit.mmd",
668-
"npm/README.md",
669-
"npm/bin/stacklit.js",
670-
"npm/package.json"
670+
"assets/template.html"
671671
],
672672
"stable": [
673673
"LICENSE",
674674
"action/action.yml",
675675
"assets/lang-icons.js",
676-
"demo.gif",
677-
"demo.tape",
678676
"internal/cli/serve.go",
679677
"internal/config/config.go",
680678
"internal/config/config_test.go",
681679
"internal/detect/envvars.go",
682-
"internal/detect/frameworks.go"
680+
"internal/detect/frameworks.go",
681+
"internal/detect/frameworks_test.go",
682+
"internal/git/activity.go"
683683
]
684684
},
685685
"hints": {

stacklit.mmd

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
1+
```mermaid
12
graph LR
23
classDef javascript fill:#c9d1d9,color:#0d1117,stroke:#c9d1d9
34
classDef java fill:#8b949e,color:#0d1117,stroke:#8b949e
45
classDef typescript fill:#c9d1d9,color:#0d1117,stroke:#c9d1d9
56
classDef python fill:#b1bac4,color:#0d1117,stroke:#b1bac4
67
classDef rust fill:#a5b3bf,color:#0d1117,stroke:#a5b3bf
78
classDef go fill:#e6edf3,color:#0d1117,stroke:#e6edf3
8-
internal_engine["internal/engine\nCore orchestration engine"]:::go
9-
internal_mcp["internal/mcp\nMCP server for AI agents"]:::go
10-
internal_monorepo["internal/monorepo\nMonorepo detection"]:::go
11-
internal_parser["internal/parser\nSource code parsers"]:::go
12-
internal_summary["internal/summary\nAI-powered codebase summaries"]:::go
9+
cmd_stacklit["cmd/stacklit\nStacklit"]:::go
10+
internal_cli["internal/cli\nCommand-line interface"]:::go
1311
internal_renderer["internal/renderer\nOutput renderers"]:::go
12+
internal_schema["internal/schema\nData schema definitions"]:::go
13+
internal_summary["internal/summary\nAI-powered codebase summaries"]:::go
1414
internal_walker["internal/walker\nFile system walker"]:::go
15-
internal_cli["internal/cli\nCommand-line interface"]:::go
16-
internal_git["internal/git\nGit integration"]:::go
17-
internal_graph["internal/graph\nDependency graph"]:::go
1815
npm["npm\nNpm"]:::go
16+
npm_bin["npm/bin\nBin"]:::go
17+
internal_graph["internal/graph\nDependency graph"]:::go
18+
internal_monorepo["internal/monorepo\nMonorepo detection"]:::go
1919
assets["assets\nStatic assets"]:::go
2020
internal_config["internal/config\nConfiguration management"]:::go
21+
internal_mcp["internal/mcp\nMCP server for AI agents"]:::go
22+
internal_parser["internal/parser\nSource code parsers"]:::go
2123
internal_detect["internal/detect\nFramework and tool detection"]:::go
22-
internal_schema["internal/schema\nData schema definitions"]:::go
23-
npm_bin["npm/bin\nBin"]:::go
24-
cmd_stacklit["cmd/stacklit\nStacklit"]:::go
24+
internal_engine["internal/engine\nCore orchestration engine"]:::go
25+
internal_git["internal/git\nGit integration"]:::go
2526
cmd_stacklit --> internal_cli
2627
internal_cli --> internal_engine
2728
internal_cli --> internal_git
@@ -44,3 +45,4 @@ graph LR
4445
internal_renderer --> assets
4546
internal_renderer --> internal_schema
4647
internal_summary --> internal_schema
48+
```

0 commit comments

Comments
 (0)