|
50 | 50 | </CODE_BLOCK_RULES> |
51 | 51 |
|
52 | 52 | <MERMAID_SYNTAX_RULES> |
53 | | -CRITICAL: Follow these mermaid syntax rules exactly to avoid parse errors: |
| 53 | +CRITICAL: Follow these mermaid syntax rules exactly to avoid parse errors. |
| 54 | +Based on official Mermaid documentation and tested LLM patterns. |
54 | 55 |
|
55 | | -1. **Node IDs**: Use simple alphanumeric IDs without spaces (use underscores): |
56 | | - - ✅ `UserService` or `user_service` |
57 | | - - ❌ `User Service` (spaces break parsing) |
| 56 | +1. **Diagram Declaration**: ALWAYS start with diagram type: |
| 57 | + - ✅ `flowchart TD` or `flowchart LR` (top-down or left-right) |
| 58 | + - ✅ `graph TD` (alternative syntax) |
| 59 | + - ❌ Missing diagram type causes complete parse failure |
58 | 60 |
|
59 | | -2. **Node Labels**: Use square brackets with quotes for labels with spaces or special characters: |
60 | | - - ✅ `A["User Service"]` |
61 | | - - ✅ `B[UserRepository]` |
62 | | - - ✅ `C["@AuthenticationPrincipal"]` |
63 | | - - ❌ `A[User Service]` (unquoted spaces may break) |
64 | | -
|
65 | | -3. **Edge Labels**: ALWAYS use quotes if label contains special characters: |
66 | | - - ✅ `A -->|"provides data"| B` (safe - always quote) |
67 | | - - ✅ `A -->|"@Autowired"| B` (@ symbol needs quotes) |
68 | | - - ✅ `A -->|"organization(id)"| B` (parentheses need quotes) |
| 61 | +2. **Node IDs**: Use simple alphanumeric IDs (CamelCase or snake_case): |
| 62 | + - ✅ `UserService` or `user_service` or `A` or `Node1` |
| 63 | + - ❌ `User Service` (spaces break parsing) |
| 64 | + - ❌ Node IDs starting with lowercase "o" or "x" create circle/cross edges |
| 65 | + - ✅ Use `OrgService` not `orgService` to avoid edge confusion |
| 66 | +
|
| 67 | +3. **Node Labels**: ALWAYS use quotes for labels with spaces or special characters: |
| 68 | + - ✅ `A["User Service"]` (quotes for spaces) |
| 69 | + - ✅ `B["@RestController"]` (quotes for @ symbol) |
| 70 | + - ✅ `C["process()"]` (quotes for parentheses) |
| 71 | + - ✅ `D["UserDTO[]"]` (quotes for brackets) |
| 72 | + - ❌ `A[User Service]` (unquoted spaces cause errors) |
| 73 | + - ❌ `B[@RestController]` (unquoted @ causes errors) |
| 74 | +
|
| 75 | +4. **Reserved Keywords**: The word "end" breaks flowcharts: |
| 76 | + - ✅ `A["End"]` or `A["END"]` (capitalize one or all letters) |
| 77 | + - ❌ `A[end]` (lowercase breaks rendering completely) |
| 78 | +
|
| 79 | +5. **Edge/Link Syntax**: Use proper arrow and label format: |
| 80 | + **Basic arrows:** |
| 81 | + - ✅ `A --> B` (solid arrow) |
| 82 | + - ✅ `A --- B` (no arrow) |
| 83 | + - ✅ `A -.-> B` (dotted arrow) |
| 84 | + - ✅ `A ==> B` (thick arrow) |
| 85 | +
|
| 86 | + **Edge labels - ALWAYS quote if ANY special character:** |
| 87 | + - ✅ `A -->|"text"| B` (safe - always quote) |
| 88 | + - ✅ `A -->|"@Autowired"| B` (@ needs quotes) |
| 89 | + - ✅ `A -->|"getUser()"| B` (parentheses need quotes) |
69 | 90 | - ✅ `A -->|"UserDTO[]"| B` (brackets need quotes) |
70 | | - - ❌ `A -->|@Autowired| B` (@ causes parse error) |
71 | | - - ❌ `A -->|organization(id)| B` (parentheses cause errors) |
72 | | - - ❌ `A -->| provides data | B` (extra spaces) |
73 | | - - ❌ `A --> |label| B` (space before pipe) |
74 | | -
|
75 | | - **Special characters that REQUIRE quotes in edge labels:** |
76 | | - - @ (annotations): `-->|"@Service"|` |
77 | | - - () (function calls): `-->|"getUser()"|` |
78 | | - - [] (arrays): `-->|"String[]"|` |
79 | | - - {} (objects): `-->|"returns {data}"|` |
80 | | - - | (pipe): avoid or use `-->|"with | pipe"|` |
81 | | -
|
82 | | -4. **Line Endings**: Each statement on its own line, no semicolons needed: |
83 | | - - ✅ `A --> B` |
84 | | - - ❌ `A --> B;` (semicolons can cause issues) |
85 | | -
|
86 | | -5. **Subgraphs**: Use simple IDs and quoted titles: |
87 | | - - ✅ `subgraph data_layer["Data Layer"]` |
88 | | - - ❌ `subgraph Data Layer` (spaces in ID) |
89 | | -
|
90 | | -6. **CRITICAL - Close code blocks**: ALWAYS close mermaid blocks with triple backticks on their own line: |
91 | | - - ✅ End with ``` on a new line after diagram content |
92 | | - - ❌ Never leave mermaid blocks unclosed |
93 | | -
|
94 | | -Example of correct flowchart (note the closing backticks): |
| 91 | + - ✅ `A -->|"returns {data}"| B` (braces need quotes) |
| 92 | + - ❌ `A -->|@Autowired| B` (parse error) |
| 93 | + - ❌ `A -->|getUser()| B` (parse error) |
| 94 | + - ❌ `A --> |text| B` (space before pipe breaks) |
| 95 | + - ❌ `A -->| text | B` (spaces around text break) |
| 96 | +
|
| 97 | + **Special characters requiring quotes:** |
| 98 | + - `@` (annotations, emails) |
| 99 | + - `()` (function calls, parameters) |
| 100 | + - `[]` (arrays, generics) |
| 101 | + - `{}` (objects, blocks) |
| 102 | + - `<>` (generics, HTML) |
| 103 | + - `&` `|` (logical operators) |
| 104 | + - `#` `$` `%` (symbols) |
| 105 | +
|
| 106 | +6. **Subgraph Syntax**: Proper ID and title format: |
| 107 | + ``` |
| 108 | + subgraph id["Display Title"] |
| 109 | + direction TB |
| 110 | + A --> B |
| 111 | + end |
| 112 | + ``` |
| 113 | + - ✅ ID must be simple (no spaces): `data_layer` or `DataLayer` |
| 114 | + - ✅ Title in quotes can have spaces: `["Data Access Layer"]` |
| 115 | + - ❌ `subgraph Data Layer` (space in ID breaks) |
| 116 | +
|
| 117 | +7. **Comments**: Use %% for comments (on their own line): |
| 118 | + - ✅ `%% This is a comment` |
| 119 | + - ❌ `A --> B %% inline comment` (can cause issues) |
| 120 | + - ❌ `%%{} comment` (braces can break rendering) |
| 121 | +
|
| 122 | +8. **Line Structure**: One statement per line, no semicolons: |
| 123 | + - ✅ `A --> B` (clean) |
| 124 | + - ✅ `A --> B --> C` (chaining allowed) |
| 125 | + - ❌ `A --> B;` (semicolons not needed) |
| 126 | +
|
| 127 | +9. **Escaping Special Characters**: Use HTML entities if needed: |
| 128 | + - ✅ `A["Hash: #"]` (# as #) |
| 129 | + - ✅ `A["Ampersand: &"]` (& as &) |
| 130 | + - ✅ `A["Less: <"]` (< as <) |
| 131 | +
|
| 132 | +10. **Code Block Closure**: ALWAYS close mermaid blocks properly: |
| 133 | + - ✅ Close with ``` on its own line |
| 134 | + - ❌ Missing closing backticks breaks rendering |
| 135 | +
|
| 136 | +**COMPLETE EXAMPLE (tested and validated):** |
95 | 137 | ```mermaid |
96 | 138 | flowchart TD |
97 | | - A["User Controller"] -->|handles requests| B["User Service"] |
98 | | - B -->|queries| C["User Repository"] |
99 | | - C -->|returns data| B |
100 | | - B -->|returns response| A |
| 139 | + Start["Start Process"] -->|"initiates"| Controller["API Controller"] |
| 140 | + Controller -->|"@Autowired"| Service["Business Service"] |
| 141 | + Service -->|"getUser(id)"| Repository["User Repository"] |
| 142 | + Repository -->|"returns UserDTO[]"| Service |
| 143 | + Service -->|"transforms data"| Controller |
| 144 | + Controller -->|"returns JSON"| End["End"] |
| 145 | +
|
| 146 | + subgraph data_layer["Data Access Layer"] |
| 147 | + Repository -->|"queries"| DB[("Database")] |
| 148 | + end |
101 | 149 | ``` |
| 150 | +
|
| 151 | +**Validation Checklist Before Generating:** |
| 152 | +- [ ] Diagram starts with `flowchart TD` or `flowchart LR` |
| 153 | +- [ ] All node labels with spaces/special chars are quoted |
| 154 | +- [ ] No lowercase "end" in any label (use "End" or "END") |
| 155 | +- [ ] All edge labels with special chars are quoted |
| 156 | +- [ ] No spaces before/after pipes in edge labels |
| 157 | +- [ ] Subgraph IDs are simple (no spaces) |
| 158 | +- [ ] Code block closes with ``` on new line |
102 | 159 | </MERMAID_SYNTAX_RULES> |
103 | 160 |
|
104 | 161 | <LATEX_MATH_RULES> |
|
167 | 224 | </CODE_BLOCK_RULES> |
168 | 225 |
|
169 | 226 | <MERMAID_SYNTAX_RULES> |
170 | | -CRITICAL: Follow these mermaid syntax rules exactly to avoid parse errors: |
| 227 | +CRITICAL: Follow these mermaid syntax rules exactly to avoid parse errors. |
| 228 | +Based on official Mermaid documentation and tested LLM patterns. |
| 229 | +
|
| 230 | +1. **Diagram Declaration**: ALWAYS start with diagram type: |
| 231 | + - ✅ `flowchart TD` or `flowchart LR` (top-down or left-right) |
| 232 | + - ❌ Missing diagram type causes complete parse failure |
171 | 233 |
|
172 | | -1. **Node IDs**: Use simple alphanumeric IDs without spaces (use underscores): |
| 234 | +2. **Node IDs**: Use simple alphanumeric IDs (CamelCase or snake_case): |
173 | 235 | - ✅ `UserService` or `user_service` |
174 | 236 | - ❌ `User Service` (spaces break parsing) |
175 | | -
|
176 | | -2. **Node Labels**: Use square brackets with quotes for labels with spaces or special characters: |
177 | | - - ✅ `A["User Service"]` |
178 | | - - ✅ `B[UserRepository]` |
179 | | - - ✅ `C["@AuthenticationPrincipal"]` |
180 | | - - ❌ `A[User Service]` (unquoted spaces may break) |
181 | | -
|
182 | | -3. **Edge Labels**: ALWAYS use quotes if label contains special characters: |
183 | | - - ✅ `A -->|"provides data"| B` (safe - always quote) |
184 | | - - ✅ `A -->|"@Autowired"| B` (@ symbol needs quotes) |
185 | | - - ✅ `A -->|"organization(id)"| B` (parentheses need quotes) |
| 237 | + - ⚠️ Node IDs starting with lowercase "o" or "x" create circle/cross edges |
| 238 | + - ✅ Use `OrgService` not `orgService` to avoid confusion |
| 239 | +
|
| 240 | +3. **Node Labels**: ALWAYS use quotes for labels with spaces or special characters: |
| 241 | + - ✅ `A["User Service"]` (quotes for spaces) |
| 242 | + - ✅ `B["@RestController"]` (quotes for @ symbol) |
| 243 | + - ✅ `C["process()"]` (quotes for parentheses) |
| 244 | + - ❌ `A[User Service]` (unquoted spaces cause errors) |
| 245 | +
|
| 246 | +4. **Reserved Keywords**: The word "end" breaks flowcharts: |
| 247 | + - ✅ `A["End"]` or `A["END"]` (capitalize) |
| 248 | + - ❌ `A[end]` (lowercase breaks rendering) |
| 249 | +
|
| 250 | +5. **Edge Labels**: ALWAYS quote if ANY special character present: |
| 251 | + - ✅ `A -->|"text"| B` (safe - always quote) |
| 252 | + - ✅ `A -->|"@Autowired"| B` (@ needs quotes) |
| 253 | + - ✅ `A -->|"getUser()"| B` (parentheses need quotes) |
186 | 254 | - ✅ `A -->|"UserDTO[]"| B` (brackets need quotes) |
187 | | - - ❌ `A -->|@Autowired| B` (@ causes parse error) |
188 | | - - ❌ `A -->|organization(id)| B` (parentheses cause errors) |
189 | | - - ❌ `A -->| provides data | B` (extra spaces) |
190 | | - - ❌ `A --> |label| B` (space before pipe) |
| 255 | + - ❌ `A -->|@Autowired| B` (parse error) |
| 256 | + - ❌ `A --> |text| B` (space before pipe breaks) |
191 | 257 |
|
192 | | - **Special characters that REQUIRE quotes in edge labels:** |
193 | | - - @ (annotations): `-->|"@Service"|` |
194 | | - - () (function calls): `-->|"getUser()"|` |
195 | | - - [] (arrays): `-->|"String[]"|` |
196 | | - - {} (objects): `-->|"returns {data}"|` |
197 | | - - | (pipe): avoid or use `-->|"with | pipe"|` |
| 258 | + **Special characters requiring quotes:** |
| 259 | + `@` `()` `[]` `{}` `<>` `&` `|` `#` `$` `%` |
198 | 260 |
|
199 | | -4. **Line Endings**: Each statement on its own line, no semicolons needed: |
200 | | - - ✅ `A --> B` |
201 | | - - ❌ `A --> B;` (semicolons can cause issues) |
| 261 | +6. **Subgraphs**: Simple ID, quoted title: |
| 262 | + ``` |
| 263 | + subgraph id["Title"] |
| 264 | + A --> B |
| 265 | + end |
| 266 | + ``` |
202 | 267 |
|
203 | | -5. **CRITICAL - Close code blocks**: ALWAYS end mermaid blocks with ``` on its own line |
| 268 | +7. **Code Block Closure**: ALWAYS close with ``` on its own line |
204 | 269 |
|
205 | | -Example (note closing backticks): |
| 270 | +**EXAMPLE:** |
206 | 271 | ```mermaid |
207 | 272 | flowchart TD |
208 | | - A["Controller"] -->|"handles requests"| B["Service"] |
209 | | - B -->|"queries"| C["Repository"] |
| 273 | + A["Controller"] -->|"@Autowired"| B["Service"] |
| 274 | + B -->|"getUser()"| C["Repository"] |
210 | 275 | ``` |
211 | 276 | </MERMAID_SYNTAX_RULES> |
212 | 277 |
|
|
0 commit comments