@groupby/ai-dev 0.5.10 → 0.5.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/package.json +1 -1
  2. package/teams/fhr-neowise/commands/address-pr.md +120 -0
  3. package/teams/fhr-neowise/commands/ready-pr.md +70 -0
  4. package/teams/fhr-neowise/commands/review-pr.md +111 -0
  5. package/teams/fhr-neowise/commands/tdd-implementation.md +86 -0
  6. package/teams/fhr-neowise/commands/write-plan.md +23 -0
  7. package/teams/fhr-neowise/commands/write-pr.md +21 -0
  8. package/teams/fhr-neowise/commands/write-spec.md +25 -0
  9. package/teams/fhr-neowise/skills/agent-routing/SKILL.md +72 -0
  10. package/teams/fhr-neowise/skills/code-review/SKILL.md +83 -0
  11. package/teams/fhr-neowise/skills/code-review/review-template.md +90 -0
  12. package/teams/fhr-neowise/skills/mermaid-diagram/SKILL.md +94 -0
  13. package/teams/fhr-neowise/skills/mermaid-diagram/references/BEST_PRACTICES.md +96 -0
  14. package/teams/fhr-neowise/skills/mermaid-diagram/references/architecture.md +434 -0
  15. package/teams/fhr-neowise/skills/mermaid-diagram/references/block.md +753 -0
  16. package/teams/fhr-neowise/skills/mermaid-diagram/references/c4.md +619 -0
  17. package/teams/fhr-neowise/skills/mermaid-diagram/references/classDiagram.md +1186 -0
  18. package/teams/fhr-neowise/skills/mermaid-diagram/references/config-configuration.md +72 -0
  19. package/teams/fhr-neowise/skills/mermaid-diagram/references/config-directives.md +342 -0
  20. package/teams/fhr-neowise/skills/mermaid-diagram/references/config-layouts.md +40 -0
  21. package/teams/fhr-neowise/skills/mermaid-diagram/references/config-math.md +96 -0
  22. package/teams/fhr-neowise/skills/mermaid-diagram/references/config-theming.md +246 -0
  23. package/teams/fhr-neowise/skills/mermaid-diagram/references/config-tidy-tree.md +89 -0
  24. package/teams/fhr-neowise/skills/mermaid-diagram/references/cynefin.md +279 -0
  25. package/teams/fhr-neowise/skills/mermaid-diagram/references/entityRelationshipDiagram.md +670 -0
  26. package/teams/fhr-neowise/skills/mermaid-diagram/references/eventmodeling.md +475 -0
  27. package/teams/fhr-neowise/skills/mermaid-diagram/references/examples.md +301 -0
  28. package/teams/fhr-neowise/skills/mermaid-diagram/references/flowchart.md +2116 -0
  29. package/teams/fhr-neowise/skills/mermaid-diagram/references/gantt.md +725 -0
  30. package/teams/fhr-neowise/skills/mermaid-diagram/references/gitgraph.md +2138 -0
  31. package/teams/fhr-neowise/skills/mermaid-diagram/references/ishikawa.md +66 -0
  32. package/teams/fhr-neowise/skills/mermaid-diagram/references/kanban.md +161 -0
  33. package/teams/fhr-neowise/skills/mermaid-diagram/references/mindmap.md +335 -0
  34. package/teams/fhr-neowise/skills/mermaid-diagram/references/packet.md +153 -0
  35. package/teams/fhr-neowise/skills/mermaid-diagram/references/pie.md +93 -0
  36. package/teams/fhr-neowise/skills/mermaid-diagram/references/quadrantChart.md +267 -0
  37. package/teams/fhr-neowise/skills/mermaid-diagram/references/radar.md +269 -0
  38. package/teams/fhr-neowise/skills/mermaid-diagram/references/railroad.md +337 -0
  39. package/teams/fhr-neowise/skills/mermaid-diagram/references/requirementDiagram.md +495 -0
  40. package/teams/fhr-neowise/skills/mermaid-diagram/references/sankey.md +415 -0
  41. package/teams/fhr-neowise/skills/mermaid-diagram/references/sequenceDiagram.md +1195 -0
  42. package/teams/fhr-neowise/skills/mermaid-diagram/references/stateDiagram.md +670 -0
  43. package/teams/fhr-neowise/skills/mermaid-diagram/references/timeline.md +571 -0
  44. package/teams/fhr-neowise/skills/mermaid-diagram/references/treeView.md +321 -0
  45. package/teams/fhr-neowise/skills/mermaid-diagram/references/treemap.md +353 -0
  46. package/teams/fhr-neowise/skills/mermaid-diagram/references/userJourney.md +42 -0
  47. package/teams/fhr-neowise/skills/mermaid-diagram/references/venn.md +134 -0
  48. package/teams/fhr-neowise/skills/mermaid-diagram/references/wardley.md +732 -0
  49. package/teams/fhr-neowise/skills/mermaid-diagram/references/xyChart.md +312 -0
  50. package/teams/fhr-neowise/skills/mermaid-diagram/references/zenuml.md +474 -0
  51. package/teams/fhr-neowise/skills/mermaid-diagram/scripts/sync_docs.py +138 -0
  52. package/teams/fhr-neowise/skills/pull-request-authoring/COMPLEX.template.md +52 -0
  53. package/teams/fhr-neowise/skills/pull-request-authoring/NON-CODE.template.md +15 -0
  54. package/teams/fhr-neowise/skills/pull-request-authoring/SIMPLE.template.md +20 -0
  55. package/teams/fhr-neowise/skills/pull-request-authoring/SKILL.md +102 -0
  56. package/teams/fhr-neowise/skills/spec-investigation/SKILL.md +139 -0
  57. package/teams/fhr-neowise/skills/spec-investigation/TEMPLATE.spec.md +74 -0
  58. package/teams/fhr-neowise/skills/tdd-workflow/SKILL.md +137 -0
  59. package/teams/fhr-neowise/skills/write-plan/SKILL.md +285 -0
  60. package/teams/fhr-neowise/skills/write-plan/assets/TEMPLATE.checklist.json +79 -0
  61. package/teams/fhr-neowise/skills/write-plan/assets/TEMPLATE.plan.md +158 -0
@@ -0,0 +1,474 @@
1
+ > **Warning**
2
+ >
3
+ > ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT.
4
+ >
5
+ > ## Please edit the corresponding file in [/packages/mermaid/src/docs/syntax/zenuml.md](../../packages/mermaid/src/docs/syntax/zenuml.md).
6
+
7
+ # ZenUML
8
+
9
+ > A Sequence diagram is an interaction diagram that shows how processes operate with one another and in what order.
10
+
11
+ Mermaid can render sequence diagrams with [ZenUML](https://zenuml.com). Note that ZenUML uses a different
12
+ syntax than the original Sequence Diagram in mermaid.
13
+
14
+ ```mermaid-example
15
+ zenuml
16
+ title Demo
17
+ Alice->John: Hello John, how are you?
18
+ John->Alice: Great!
19
+ Alice->John: See you later!
20
+ ```
21
+
22
+ ```mermaid
23
+ zenuml
24
+ title Demo
25
+ Alice->John: Hello John, how are you?
26
+ John->Alice: Great!
27
+ Alice->John: See you later!
28
+ ```
29
+
30
+ ## Syntax
31
+
32
+ ### Participants
33
+
34
+ The participants can be defined implicitly as in the first example on this page. The participants or actors are
35
+ rendered in order of appearance in the diagram source text. Sometimes you might want to show the participants in a
36
+ different order than how they appear in the first message. It is possible to specify the actor's order of
37
+ appearance by doing the following:
38
+
39
+ ```mermaid-example
40
+ zenuml
41
+ title Declare participant (optional)
42
+ Bob
43
+ Alice
44
+ Alice->Bob: Hi Bob
45
+ Bob->Alice: Hi Alice
46
+ ```
47
+
48
+ ```mermaid
49
+ zenuml
50
+ title Declare participant (optional)
51
+ Bob
52
+ Alice
53
+ Alice->Bob: Hi Bob
54
+ Bob->Alice: Hi Alice
55
+ ```
56
+
57
+ ### Annotators
58
+
59
+ If you specifically want to use symbols instead of just rectangles with text you can do so by using the annotator syntax to declare participants as per below.
60
+
61
+ ```mermaid-example
62
+ zenuml
63
+ title Annotators
64
+ @Actor Alice
65
+ @Database Bob
66
+ Alice->Bob: Hi Bob
67
+ Bob->Alice: Hi Alice
68
+ ```
69
+
70
+ ```mermaid
71
+ zenuml
72
+ title Annotators
73
+ @Actor Alice
74
+ @Database Bob
75
+ Alice->Bob: Hi Bob
76
+ Bob->Alice: Hi Alice
77
+ ```
78
+
79
+ Here are the available annotators:
80
+ ![img.png](img/zenuml-participant-annotators.png)
81
+
82
+ ### Aliases
83
+
84
+ The participants can have a convenient identifier and a descriptive label.
85
+
86
+ ```mermaid-example
87
+ zenuml
88
+ title Aliases
89
+ A as Alice
90
+ J as John
91
+ A->J: Hello John, how are you?
92
+ J->A: Great!
93
+ ```
94
+
95
+ ```mermaid
96
+ zenuml
97
+ title Aliases
98
+ A as Alice
99
+ J as John
100
+ A->J: Hello John, how are you?
101
+ J->A: Great!
102
+ ```
103
+
104
+ ## Messages
105
+
106
+ Messages can be one of:
107
+
108
+ 1. Sync message
109
+ 2. Async message
110
+ 3. Creation message
111
+ 4. Reply message
112
+
113
+ ### Sync message
114
+
115
+ You can think of a sync (blocking) method in a programming language.
116
+
117
+ ```mermaid-example
118
+ zenuml
119
+ title Sync message
120
+ A.SyncMessage
121
+ A.SyncMessage(with, parameters) {
122
+ B.nestedSyncMessage()
123
+ }
124
+ ```
125
+
126
+ ```mermaid
127
+ zenuml
128
+ title Sync message
129
+ A.SyncMessage
130
+ A.SyncMessage(with, parameters) {
131
+ B.nestedSyncMessage()
132
+ }
133
+ ```
134
+
135
+ ### Async message
136
+
137
+ You can think of an async (non-blocking) method in a programming language.
138
+ Fire an event and forget about it.
139
+
140
+ ```mermaid-example
141
+ zenuml
142
+ title Async message
143
+ Alice->Bob: How are you?
144
+ ```
145
+
146
+ ```mermaid
147
+ zenuml
148
+ title Async message
149
+ Alice->Bob: How are you?
150
+ ```
151
+
152
+ ### Creation message
153
+
154
+ We use `new` keyword to create an object.
155
+
156
+ ```mermaid-example
157
+ zenuml
158
+ new A1
159
+ new A2(with, parameters)
160
+ ```
161
+
162
+ ```mermaid
163
+ zenuml
164
+ new A1
165
+ new A2(with, parameters)
166
+ ```
167
+
168
+ ### Reply message
169
+
170
+ There are three ways to express a reply message:
171
+
172
+ ```mermaid-example
173
+ zenuml
174
+ // 1. assign a variable from a sync message.
175
+ a = A.SyncMessage()
176
+
177
+ // 1.1. optionally give the variable a type
178
+ SomeType a = A.SyncMessage()
179
+
180
+ // 2. use return keyword
181
+ A.SyncMessage() {
182
+ return result
183
+ }
184
+
185
+ // 3. use @return or @reply annotator on an async message
186
+ @return
187
+ A->B: result
188
+ ```
189
+
190
+ ```mermaid
191
+ zenuml
192
+ // 1. assign a variable from a sync message.
193
+ a = A.SyncMessage()
194
+
195
+ // 1.1. optionally give the variable a type
196
+ SomeType a = A.SyncMessage()
197
+
198
+ // 2. use return keyword
199
+ A.SyncMessage() {
200
+ return result
201
+ }
202
+
203
+ // 3. use @return or @reply annotator on an async message
204
+ @return
205
+ A->B: result
206
+ ```
207
+
208
+ The third way `@return` is rarely used, but it is useful when you want to return to one level up.
209
+
210
+ ```mermaid-example
211
+ zenuml
212
+ title Reply message
213
+ Client->A.method() {
214
+ B.method() {
215
+ if(condition) {
216
+ return x1
217
+ // return early
218
+ @return
219
+ A->Client: x11
220
+ }
221
+ }
222
+ return x2
223
+ }
224
+ ```
225
+
226
+ ```mermaid
227
+ zenuml
228
+ title Reply message
229
+ Client->A.method() {
230
+ B.method() {
231
+ if(condition) {
232
+ return x1
233
+ // return early
234
+ @return
235
+ A->Client: x11
236
+ }
237
+ }
238
+ return x2
239
+ }
240
+ ```
241
+
242
+ ## Nesting
243
+
244
+ Sync messages and Creation messages are naturally nestable with `{}`.
245
+
246
+ ```mermaid-example
247
+ zenuml
248
+ A.method() {
249
+ B.nested_sync_method()
250
+ B->C: nested async message
251
+ }
252
+ ```
253
+
254
+ ```mermaid
255
+ zenuml
256
+ A.method() {
257
+ B.nested_sync_method()
258
+ B->C: nested async message
259
+ }
260
+ ```
261
+
262
+ ## Comments
263
+
264
+ It is possible to add comments to a sequence diagram with `// comment` syntax.
265
+ Comments will be rendered above the messages or fragments. Comments on other places
266
+ are ignored. Markdown is supported.
267
+
268
+ See the example below:
269
+
270
+ ```mermaid-example
271
+ zenuml
272
+ // a comment on a participant will not be rendered
273
+ BookService
274
+ // a comment on a message.
275
+ // **Markdown** is supported.
276
+ BookService.getBook()
277
+ ```
278
+
279
+ ```mermaid
280
+ zenuml
281
+ // a comment on a participant will not be rendered
282
+ BookService
283
+ // a comment on a message.
284
+ // **Markdown** is supported.
285
+ BookService.getBook()
286
+ ```
287
+
288
+ ## Loops
289
+
290
+ It is possible to express loops in a ZenUML diagram. This is done by any of the
291
+ following notations:
292
+
293
+ 1. while
294
+ 2. for
295
+ 3. forEach, foreach
296
+ 4. loop
297
+
298
+ ```zenuml
299
+ while(condition) {
300
+ ...statements...
301
+ }
302
+ ```
303
+
304
+ See the example below:
305
+
306
+ ```mermaid-example
307
+ zenuml
308
+ Alice->John: Hello John, how are you?
309
+ while(true) {
310
+ John->Alice: Great!
311
+ }
312
+ ```
313
+
314
+ ```mermaid
315
+ zenuml
316
+ Alice->John: Hello John, how are you?
317
+ while(true) {
318
+ John->Alice: Great!
319
+ }
320
+ ```
321
+
322
+ ## Alt
323
+
324
+ It is possible to express alternative paths in a sequence diagram. This is done by the notation
325
+
326
+ ```zenuml
327
+ if(condition1) {
328
+ ...statements...
329
+ } else if(condition2) {
330
+ ...statements...
331
+ } else {
332
+ ...statements...
333
+ }
334
+ ```
335
+
336
+ See the example below:
337
+
338
+ ```mermaid-example
339
+ zenuml
340
+ Alice->Bob: Hello Bob, how are you?
341
+ if(is_sick) {
342
+ Bob->Alice: Not so good :(
343
+ } else {
344
+ Bob->Alice: Feeling fresh like a daisy
345
+ }
346
+ ```
347
+
348
+ ```mermaid
349
+ zenuml
350
+ Alice->Bob: Hello Bob, how are you?
351
+ if(is_sick) {
352
+ Bob->Alice: Not so good :(
353
+ } else {
354
+ Bob->Alice: Feeling fresh like a daisy
355
+ }
356
+ ```
357
+
358
+ ## Opt
359
+
360
+ It is possible to render an `opt` fragment. This is done by the notation
361
+
362
+ ```zenuml
363
+ opt {
364
+ ...statements...
365
+ }
366
+ ```
367
+
368
+ See the example below:
369
+
370
+ ```mermaid-example
371
+ zenuml
372
+ Alice->Bob: Hello Bob, how are you?
373
+ Bob->Alice: Not so good :(
374
+ opt {
375
+ Bob->Alice: Thanks for asking
376
+ }
377
+ ```
378
+
379
+ ```mermaid
380
+ zenuml
381
+ Alice->Bob: Hello Bob, how are you?
382
+ Bob->Alice: Not so good :(
383
+ opt {
384
+ Bob->Alice: Thanks for asking
385
+ }
386
+ ```
387
+
388
+ ## Parallel
389
+
390
+ It is possible to show actions that are happening in parallel.
391
+
392
+ This is done by the notation
393
+
394
+ ```zenuml
395
+ par {
396
+ statement1
397
+ statement2
398
+ statement3
399
+ }
400
+ ```
401
+
402
+ See the example below:
403
+
404
+ ```mermaid-example
405
+ zenuml
406
+ par {
407
+ Alice->Bob: Hello guys!
408
+ Alice->John: Hello guys!
409
+ }
410
+ ```
411
+
412
+ ```mermaid
413
+ zenuml
414
+ par {
415
+ Alice->Bob: Hello guys!
416
+ Alice->John: Hello guys!
417
+ }
418
+ ```
419
+
420
+ ## Try/Catch/Finally (Break)
421
+
422
+ It is possible to indicate a stop of the sequence within the flow (usually used to model exceptions).
423
+
424
+ This is done by the notation
425
+
426
+ ```
427
+ try {
428
+ ...statements...
429
+ } catch {
430
+ ...statements...
431
+ } finally {
432
+ ...statements...
433
+ }
434
+ ```
435
+
436
+ See the example below:
437
+
438
+ ```mermaid-example
439
+ zenuml
440
+ try {
441
+ Consumer->API: Book something
442
+ API->BookingService: Start booking process
443
+ } catch {
444
+ API->Consumer: show failure
445
+ } finally {
446
+ API->BookingService: rollback status
447
+ }
448
+ ```
449
+
450
+ ```mermaid
451
+ zenuml
452
+ try {
453
+ Consumer->API: Book something
454
+ API->BookingService: Start booking process
455
+ } catch {
456
+ API->Consumer: show failure
457
+ } finally {
458
+ API->BookingService: rollback status
459
+ }
460
+ ```
461
+
462
+ ## Integrating with your library/website.
463
+
464
+ Zenuml uses the experimental lazy loading & async rendering features which could change in the future.
465
+
466
+ You can use this method to add mermaid including the zenuml diagram to a web page:
467
+
468
+ ```html
469
+ <script type="module">
470
+ import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs';
471
+ import zenuml from 'https://cdn.jsdelivr.net/npm/@mermaid-js/mermaid-zenuml@0.1.0/dist/mermaid-zenuml.esm.min.mjs';
472
+ await mermaid.registerExternalDiagrams([zenuml]);
473
+ </script>
474
+ ```
@@ -0,0 +1,138 @@
1
+ #!/usr/bin/env python3
2
+ import os
3
+ import re
4
+ import shutil
5
+ import subprocess
6
+
7
+ SKILL_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
8
+ REFERENCES_DIR = os.path.join(SKILL_DIR, "references")
9
+ SKILL_MD = os.path.join(SKILL_DIR, "SKILL.md")
10
+ MERMAID_SOURCE = os.path.join(SKILL_DIR, "mermaid-source")
11
+
12
+ CONFIG_FILES = [
13
+ "configuration.md",
14
+ "directives.md",
15
+ "layouts.md",
16
+ "math.md",
17
+ "theming.md",
18
+ "tidy-tree.md"
19
+ ]
20
+
21
+ def run_cmd(cmd, cwd=None):
22
+ print(f"Running: {' '.join(cmd)}")
23
+ subprocess.run(cmd, cwd=cwd, check=True)
24
+
25
+ def clone_mermaid():
26
+ if os.path.exists(MERMAID_SOURCE):
27
+ shutil.rmtree(MERMAID_SOURCE)
28
+
29
+ os.makedirs(MERMAID_SOURCE)
30
+
31
+ # Use sparse checkout for efficiency
32
+ run_cmd(["git", "clone", "--filter=blob:none", "--no-checkout", "--depth", "1",
33
+ "https://github.com/mermaid-js/mermaid.git", MERMAID_SOURCE])
34
+
35
+ run_cmd(["git", "sparse-checkout", "set", "docs/syntax", "docs/config"], cwd=MERMAID_SOURCE)
36
+ run_cmd(["git", "checkout", "develop"], cwd=MERMAID_SOURCE)
37
+
38
+ def sync_references():
39
+ os.makedirs(REFERENCES_DIR, exist_ok=True)
40
+
41
+ syntax_dir = os.path.join(MERMAID_SOURCE, "docs", "syntax")
42
+ config_dir = os.path.join(MERMAID_SOURCE, "docs", "config")
43
+
44
+ new_syntax_files = []
45
+
46
+ # Copy syntax files
47
+ if os.path.exists(syntax_dir):
48
+ for file in os.listdir(syntax_dir):
49
+ if file.endswith(".md"):
50
+ src = os.path.join(syntax_dir, file)
51
+ dst = os.path.join(REFERENCES_DIR, file)
52
+ shutil.copy2(src, dst)
53
+ new_syntax_files.append(file)
54
+
55
+ # Copy config files
56
+ if os.path.exists(config_dir):
57
+ for file in CONFIG_FILES:
58
+ src = os.path.join(config_dir, file)
59
+ if os.path.exists(src):
60
+ dst = os.path.join(REFERENCES_DIR, f"config-{file}")
61
+ shutil.copy2(src, dst)
62
+
63
+ return new_syntax_files
64
+
65
+ def extract_title(md_path):
66
+ # Try to find the first level 1 heading
67
+ try:
68
+ with open(md_path, 'r', encoding='utf-8') as f:
69
+ for line in f:
70
+ if line.startswith("# "):
71
+ return line[2:].strip()
72
+ # Fallback to filename
73
+ return os.path.basename(md_path).replace(".md", "").capitalize()
74
+ except Exception:
75
+ return os.path.basename(md_path).replace(".md", "").capitalize()
76
+
77
+ def update_skill_md(new_syntax_files):
78
+ if not os.path.exists(SKILL_MD):
79
+ print(f"{SKILL_MD} not found!")
80
+ return
81
+
82
+ with open(SKILL_MD, 'r', encoding='utf-8') as f:
83
+ content = f.read()
84
+
85
+ # Find the table. We assume it's the one starting with "| Type"
86
+ table_pattern = re.compile(r'(\| Type\s*\| Documentation\s*\| Use Cases\s*\|.*?)\n\n', re.DOTALL)
87
+ match = table_pattern.search(content)
88
+
89
+ if not match:
90
+ print("Could not find the diagram types table in SKILL.md")
91
+ return
92
+
93
+ table_block = match.group(1)
94
+
95
+ # Extract existing referenced files
96
+ existing_files = set(re.findall(r'\[.*?\]\(references/(.*?)\)', table_block))
97
+
98
+ new_rows = []
99
+ for file in sorted(new_syntax_files):
100
+ if file not in existing_files and file != "README.md" and file != "examples.md":
101
+ title = extract_title(os.path.join(REFERENCES_DIR, file))
102
+ # Fallback title if it's super long or has weird characters
103
+ if len(title) > 30:
104
+ title = file.replace(".md", "").capitalize()
105
+
106
+ # Format row
107
+ row = f"| {title} | [{file}](references/{file}) | Auto-synced from upstream |"
108
+ new_rows.append(row)
109
+ print(f"Adding new diagram type to table: {file}")
110
+
111
+ if new_rows:
112
+ updated_table = table_block + "\n" + "\n".join(new_rows)
113
+ new_content = content.replace(table_block, updated_table)
114
+
115
+ with open(SKILL_MD, 'w', encoding='utf-8') as f:
116
+ f.write(new_content)
117
+ print("SKILL.md updated successfully.")
118
+ else:
119
+ print("No new diagram types found to add.")
120
+
121
+ def main():
122
+ print("Cloning Mermaid repository (sparse checkout)...")
123
+ clone_mermaid()
124
+
125
+ print("Syncing markdown references...")
126
+ new_syntax_files = sync_references()
127
+
128
+ print("Updating SKILL.md...")
129
+ update_skill_md(new_syntax_files)
130
+
131
+ print("Cleaning up...")
132
+ if os.path.exists(MERMAID_SOURCE):
133
+ shutil.rmtree(MERMAID_SOURCE)
134
+
135
+ print("Done!")
136
+
137
+ if __name__ == "__main__":
138
+ main()
@@ -0,0 +1,52 @@
1
+ <!-- Title: FHR-<number>: <Ticket Title> -->
2
+
3
+ ## Summary
4
+
5
+ <1–3 sentences: what this change does and why it is needed. Reference the ticket: FHR-<number>.>
6
+
7
+ ## What Changed
8
+
9
+ <The substantive changes, grouped by module/area when the PR spans several.>
10
+ - **<module>**: <change>
11
+ - **<module>**: <change>
12
+
13
+ ## Flow / Behaviour Changes
14
+
15
+ <Mermaid diagram showing how the flow or behaviour changes — prefer before → after.
16
+ Use a flowchart for control/data flow, or a sequenceDiagram for cross-service interaction.
17
+ Generated with the `mermaid-diagram` skill. Delete this section only if no flow/behaviour changed.>
18
+
19
+ ```mermaid
20
+ <diagram>
21
+ ```
22
+
23
+ ## Structure / Class Changes
24
+
25
+ <Mermaid classDiagram of new/changed classes, types, and their relationships.
26
+ Generated with the `mermaid-diagram` skill. Delete this section only if no types/structure changed.>
27
+
28
+ ```mermaid
29
+ <diagram>
30
+ ```
31
+
32
+ <!-- A complex PR must keep at least one of the two diagram sections above; delete the section that does not apply. -->
33
+
34
+ ## Impacted Areas
35
+
36
+ <Modules, files, and contracts touched, plus downstream consumers affected
37
+ (APIs, GraphQL fields, SQL/Delta tables, dashboard components, schedulers).>
38
+ - <area / contract>
39
+ - <downstream consumer>
40
+
41
+ ## Testing
42
+
43
+ <How the change is verified: unit/integration tests added or updated, plus any manual checks.>
44
+ - <test>
45
+
46
+ ## Risk & Rollout
47
+
48
+ <Blast radius, backward-compatibility, data migrations, feature flags, and rollback plan.>
49
+
50
+ ## Reviewer Notes
51
+
52
+ <Suggested review order, anything non-obvious, and decisions reviewers should sanity-check.>
@@ -0,0 +1,15 @@
1
+ <!-- Title: FHR-<number>: <Ticket Title> -->
2
+
3
+ ## Summary
4
+
5
+ <One line: what this non-code change covers (docs, config, tooling). Reference the ticket: FHR-<number>.>
6
+
7
+ ## Changes
8
+
9
+ - <change>
10
+ - <change>
11
+ - <change>
12
+
13
+ ## Impact
14
+
15
+ <One line confirming scope, e.g. "Docs/config only — no production code, tests, or dependency versions changed.">
@@ -0,0 +1,20 @@
1
+ <!-- Title: FHR-<number>: <Ticket Title> -->
2
+
3
+ ## Summary
4
+
5
+ <1–2 sentences: what changed and why. Reference the ticket: FHR-<number>.>
6
+
7
+ ## Change
8
+
9
+ <A short description of what was done. For a bugfix, name the root cause and the fix.>
10
+
11
+ ## Impacted Areas
12
+
13
+ <The places this change touched — files, methods, and the module(s) affected.>
14
+ - <path / method>
15
+ - <module>
16
+
17
+ ## Testing
18
+
19
+ <Tests added or run, and the result.>
20
+ - <test>