sirena 0.1.0
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.
- checksums.yaml +7 -0
- data/.github/workflows/build_deploy.yml +59 -0
- data/.github/workflows/links.yml +85 -0
- data/.github/workflows/rake.yml +15 -0
- data/.github/workflows/release.yml +27 -0
- data/.gitignore +68 -0
- data/.rspec +3 -0
- data/.rubocop.yml +14 -0
- data/.rubocop_todo.yml +70 -0
- data/ARCHITECTURE.md +744 -0
- data/Gemfile +12 -0
- data/LICENSE +25 -0
- data/README.adoc +357 -0
- data/Rakefile +11 -0
- data/docs/.gitignore +1 -0
- data/docs/Gemfile +13 -0
- data/docs/_config.yml +182 -0
- data/docs/_diagram_types/architecture-diagram.adoc +314 -0
- data/docs/_diagram_types/block-diagram.adoc +345 -0
- data/docs/_diagram_types/c4-diagram.adoc +559 -0
- data/docs/_diagram_types/class-diagram.adoc +816 -0
- data/docs/_diagram_types/er-diagram.adoc +719 -0
- data/docs/_diagram_types/error-diagram.adoc +114 -0
- data/docs/_diagram_types/examples/flowchart-examples.adoc +29 -0
- data/docs/_diagram_types/flowchart.adoc +488 -0
- data/docs/_diagram_types/gantt-chart.adoc +502 -0
- data/docs/_diagram_types/git-graph.adoc +600 -0
- data/docs/_diagram_types/index.adoc +192 -0
- data/docs/_diagram_types/info-diagram.adoc +103 -0
- data/docs/_diagram_types/kanban-diagram.adoc +262 -0
- data/docs/_diagram_types/mindmap.adoc +603 -0
- data/docs/_diagram_types/packet-diagram.adoc +378 -0
- data/docs/_diagram_types/pie-chart.adoc +335 -0
- data/docs/_diagram_types/quadrant-chart.adoc +406 -0
- data/docs/_diagram_types/radar-chart.adoc +528 -0
- data/docs/_diagram_types/requirement-diagram.adoc +416 -0
- data/docs/_diagram_types/sankey-diagram.adoc +357 -0
- data/docs/_diagram_types/sequence-diagram.adoc +664 -0
- data/docs/_diagram_types/state-diagram.adoc +658 -0
- data/docs/_diagram_types/timeline.adoc +352 -0
- data/docs/_diagram_types/treemap-diagram.adoc +462 -0
- data/docs/_diagram_types/user-journey.adoc +602 -0
- data/docs/_features/index.adoc +129 -0
- data/docs/_guides/cli-reference.adoc +203 -0
- data/docs/_guides/index.adoc +56 -0
- data/docs/_guides/installation.adoc +100 -0
- data/docs/_guides/quick-start.adoc +132 -0
- data/docs/_pages/comparison.adoc +441 -0
- data/docs/_pages/compatibility.adoc +300 -0
- data/docs/_pages/index.adoc +39 -0
- data/docs/_references/index.adoc +103 -0
- data/docs/_tutorials/index.adoc +57 -0
- data/docs/index.adoc +166 -0
- data/docs/lychee.toml +54 -0
- data/examples/.gitignore +10 -0
- data/examples/README.adoc +196 -0
- data/examples/README.md +64 -0
- data/examples/architecture/01-basic-services.mmd +9 -0
- data/examples/architecture/01-basic-services.svg +37 -0
- data/examples/architecture/02-service-groups.mmd +16 -0
- data/examples/architecture/02-service-groups.svg +55 -0
- data/examples/architecture/README.adoc +79 -0
- data/examples/block/01-basic-blocks.mmd +13 -0
- data/examples/block/01-basic-blocks.svg +44 -0
- data/examples/block/02-block-shapes.mmd +13 -0
- data/examples/block/02-block-shapes.svg +47 -0
- data/examples/block/README.adoc +85 -0
- data/examples/c4/01-context-diagram.mmd +10 -0
- data/examples/c4/01-context-diagram.svg +45 -0
- data/examples/c4/02-container-diagram.mmd +24 -0
- data/examples/c4/02-container-diagram.svg +105 -0
- data/examples/c4/README.adoc +92 -0
- data/examples/class_diagram/01-basic-classes.mmd +61 -0
- data/examples/class_diagram/01-basic-classes.svg +117 -0
- data/examples/class_diagram/02-relationships.mmd +61 -0
- data/examples/class_diagram/02-relationships.svg +129 -0
- data/examples/class_diagram/README.adoc +93 -0
- data/examples/er_diagram/01-basic-entities.mmd +64 -0
- data/examples/er_diagram/01-basic-entities.svg +5 -0
- data/examples/er_diagram/02-cardinality.mmd +57 -0
- data/examples/er_diagram/02-cardinality.svg +125 -0
- data/examples/er_diagram/README.adoc +88 -0
- data/examples/error/01-basic-error.mmd +1 -0
- data/examples/error/01-basic-error.svg +13 -0
- data/examples/error/02-error-display.mmd +1 -0
- data/examples/error/02-error-display.svg +13 -0
- data/examples/error/README.adoc +71 -0
- data/examples/error_message_example.svg +13 -0
- data/examples/flowchart/00-original.mmd +13 -0
- data/examples/flowchart/00-original.svg +5 -0
- data/examples/flowchart/01-basic-flow.mmd +7 -0
- data/examples/flowchart/01-basic-flow.svg +52 -0
- data/examples/flowchart/01-basic-flow.yml +13 -0
- data/examples/flowchart/02*.svg +87 -0
- data/examples/flowchart/02-node-shapes.mmd +9 -0
- data/examples/flowchart/02-node-shapes.svg +33 -0
- data/examples/flowchart/03-edge-types.mmd +7 -0
- data/examples/flowchart/03-edge-types.svg +53 -0
- data/examples/flowchart/04-subgraphs.mmd +9 -0
- data/examples/flowchart/04-subgraphs.svg +33 -0
- data/examples/flowchart/05-styling.mmd +9 -0
- data/examples/flowchart/05-styling.svg +33 -0
- data/examples/flowchart/06-complex-flow.mmd +8 -0
- data/examples/flowchart/06-complex-flow.svg +59 -0
- data/examples/flowchart/README.adoc +167 -0
- data/examples/gantt/01-simple-timeline.* +14 -0
- data/examples/gantt/01-simple-timeline.mmd +6 -0
- data/examples/gantt/01-simple-timeline.svg +26 -0
- data/examples/gantt/02-task-dependencies.mmd +6 -0
- data/examples/gantt/02-task-dependencies.svg +26 -0
- data/examples/gantt/README.adoc +86 -0
- data/examples/git_graph/01-linear-history.mmd +12 -0
- data/examples/git_graph/01-linear-history.svg +26 -0
- data/examples/git_graph/02-branching.mmd +12 -0
- data/examples/git_graph/02-branching.svg +26 -0
- data/examples/git_graph/README.adoc +73 -0
- data/examples/info/02-showinfo.mmd +1 -0
- data/examples/info/02-showinfo.svg +10 -0
- data/examples/info/README.adoc +58 -0
- data/examples/info_showinfo_example.svg +10 -0
- data/examples/kanban/01-simple-board.mmd +8 -0
- data/examples/kanban/01-simple-board.svg +43 -0
- data/examples/kanban/02-workflow.mmd +8 -0
- data/examples/kanban/02-workflow.svg +43 -0
- data/examples/kanban/README.adoc +79 -0
- data/examples/mindmap/01-simple-tree.mmd +19 -0
- data/examples/mindmap/01-simple-tree.svg +61 -0
- data/examples/mindmap/02-knowledge-map.mmd +19 -0
- data/examples/mindmap/02-knowledge-map.svg +61 -0
- data/examples/mindmap/README.adoc +77 -0
- data/examples/packet/01-basic-packet.* +17 -0
- data/examples/packet/01-basic-packet.mmd +4 -0
- data/examples/packet/01-basic-packet.svg +82 -0
- data/examples/packet/README.adoc +58 -0
- data/examples/pie/01-simple-chart.mmd +5 -0
- data/examples/pie/01-simple-chart.svg +17 -0
- data/examples/pie/02-labeled-slices.mmd +6 -0
- data/examples/pie/02-labeled-slices.svg +19 -0
- data/examples/pie/README.adoc +75 -0
- data/examples/quadrant/01-basic-quadrant.mmd +13 -0
- data/examples/quadrant/01-basic-quadrant.svg +33 -0
- data/examples/quadrant/02-positioned-items.mmd +14 -0
- data/examples/quadrant/02-positioned-items.svg +35 -0
- data/examples/quadrant/README.adoc +84 -0
- data/examples/radar/01-simple-radar.* +5 -0
- data/examples/radar/01-simple-radar.mmd +3 -0
- data/examples/radar/01-simple-radar.svg +25 -0
- data/examples/radar/02-multiple-curves.mmd +4 -0
- data/examples/radar/02-multiple-curves.svg +43 -0
- data/examples/radar/README.adoc +75 -0
- data/examples/requirement/01-basic-requirements.mmd +23 -0
- data/examples/requirement/01-basic-requirements.svg +49 -0
- data/examples/requirement/02-risk-levels.mmd +23 -0
- data/examples/requirement/02-risk-levels.svg +49 -0
- data/examples/requirement/README.adoc +85 -0
- data/examples/sankey/01-simple-flow.mmd +7 -0
- data/examples/sankey/01-simple-flow.svg +34 -0
- data/examples/sankey/02-multi-stage.mmd +11 -0
- data/examples/sankey/02-multi-stage.svg +44 -0
- data/examples/sankey/README.adoc +74 -0
- data/examples/sequence/01-basic-sequence.mmd +27 -0
- data/examples/sequence/01-basic-sequence.svg +5 -0
- data/examples/sequence/02-activations.mmd +17 -0
- data/examples/sequence/02-activations.svg +78 -0
- data/examples/sequence/README.adoc +86 -0
- data/examples/state_diagram/01-simple-states.mmd +29 -0
- data/examples/state_diagram/01-simple-states.svg +5 -0
- data/examples/state_diagram/02-composite.mmd +19 -0
- data/examples/state_diagram/02-composite.svg +81 -0
- data/examples/state_diagram/README.adoc +90 -0
- data/examples/timeline/01-simple-timeline.mmd +11 -0
- data/examples/timeline/01-simple-timeline.svg +36 -0
- data/examples/timeline/02-periods.mmd +15 -0
- data/examples/timeline/02-periods.svg +47 -0
- data/examples/timeline/README.adoc +78 -0
- data/examples/treemap/01-basic-treemap.mmd +12 -0
- data/examples/treemap/01-basic-treemap.svg +59 -0
- data/examples/treemap/README.adoc +59 -0
- data/examples/user_journey/01-simple-journey.mmd +23 -0
- data/examples/user_journey/01-simple-journey.svg +5 -0
- data/examples/user_journey/02-multi-actor.mmd +18 -0
- data/examples/user_journey/02-multi-actor.svg +129 -0
- data/examples/user_journey/README.adoc +81 -0
- data/examples/xychart/01-line-chart.mmd +5 -0
- data/examples/xychart/01-line-chart.svg +43 -0
- data/examples/xychart/02-bar-chart.mmd +7 -0
- data/examples/xychart/02-bar-chart.svg +48 -0
- data/examples/xychart/README.adoc +80 -0
- data/exe/sirena +7 -0
- data/lib/sirena/cli.rb +138 -0
- data/lib/sirena/commands/batch.rb +117 -0
- data/lib/sirena/commands/render.rb +80 -0
- data/lib/sirena/commands/types.rb +29 -0
- data/lib/sirena/commands/version.rb +24 -0
- data/lib/sirena/diagram/architecture.rb +46 -0
- data/lib/sirena/diagram/base.rb +61 -0
- data/lib/sirena/diagram/block.rb +81 -0
- data/lib/sirena/diagram/c4.rb +328 -0
- data/lib/sirena/diagram/class_diagram.rb +385 -0
- data/lib/sirena/diagram/er_diagram.rb +238 -0
- data/lib/sirena/diagram/error.rb +38 -0
- data/lib/sirena/diagram/flowchart.rb +160 -0
- data/lib/sirena/diagram/gantt.rb +71 -0
- data/lib/sirena/diagram/git_graph.rb +36 -0
- data/lib/sirena/diagram/info.rb +38 -0
- data/lib/sirena/diagram/kanban.rb +178 -0
- data/lib/sirena/diagram/mindmap.rb +54 -0
- data/lib/sirena/diagram/packet.rb +79 -0
- data/lib/sirena/diagram/pie.rb +115 -0
- data/lib/sirena/diagram/quadrant.rb +138 -0
- data/lib/sirena/diagram/radar.rb +52 -0
- data/lib/sirena/diagram/requirement.rb +133 -0
- data/lib/sirena/diagram/sankey.rb +217 -0
- data/lib/sirena/diagram/sequence.rb +242 -0
- data/lib/sirena/diagram/state_diagram.rb +237 -0
- data/lib/sirena/diagram/timeline.rb +171 -0
- data/lib/sirena/diagram/treemap.rb +84 -0
- data/lib/sirena/diagram/user_journey.rb +149 -0
- data/lib/sirena/diagram/xy_chart.rb +76 -0
- data/lib/sirena/diagram.rb +8 -0
- data/lib/sirena/diagram_registry.rb +101 -0
- data/lib/sirena/engine.rb +292 -0
- data/lib/sirena/parser/architecture.rb +41 -0
- data/lib/sirena/parser/base.rb +41 -0
- data/lib/sirena/parser/block.rb +72 -0
- data/lib/sirena/parser/c4.rb +53 -0
- data/lib/sirena/parser/class_diagram.rb +63 -0
- data/lib/sirena/parser/er_diagram.rb +40 -0
- data/lib/sirena/parser/error.rb +49 -0
- data/lib/sirena/parser/flowchart.rb +71 -0
- data/lib/sirena/parser/gantt.rb +60 -0
- data/lib/sirena/parser/git_graph.rb +95 -0
- data/lib/sirena/parser/grammars/architecture.rb +145 -0
- data/lib/sirena/parser/grammars/block.rb +190 -0
- data/lib/sirena/parser/grammars/c4.rb +226 -0
- data/lib/sirena/parser/grammars/class_diagram.rb +284 -0
- data/lib/sirena/parser/grammars/common.rb +84 -0
- data/lib/sirena/parser/grammars/er_diagram.rb +114 -0
- data/lib/sirena/parser/grammars/error.rb +40 -0
- data/lib/sirena/parser/grammars/flowchart.rb +298 -0
- data/lib/sirena/parser/grammars/gantt.rb +252 -0
- data/lib/sirena/parser/grammars/git_graph.rb +167 -0
- data/lib/sirena/parser/grammars/info.rb +58 -0
- data/lib/sirena/parser/grammars/kanban.rb +83 -0
- data/lib/sirena/parser/grammars/mindmap.rb +115 -0
- data/lib/sirena/parser/grammars/packet.rb +73 -0
- data/lib/sirena/parser/grammars/pie.rb +128 -0
- data/lib/sirena/parser/grammars/quadrant.rb +199 -0
- data/lib/sirena/parser/grammars/radar.rb +150 -0
- data/lib/sirena/parser/grammars/requirement.rb +188 -0
- data/lib/sirena/parser/grammars/sankey.rb +104 -0
- data/lib/sirena/parser/grammars/sequence.rb +247 -0
- data/lib/sirena/parser/grammars/state_diagram.rb +172 -0
- data/lib/sirena/parser/grammars/timeline.rb +142 -0
- data/lib/sirena/parser/grammars/treemap.rb +120 -0
- data/lib/sirena/parser/grammars/xy_chart.rb +120 -0
- data/lib/sirena/parser/info.rb +49 -0
- data/lib/sirena/parser/kanban.rb +97 -0
- data/lib/sirena/parser/mindmap.rb +106 -0
- data/lib/sirena/parser/packet.rb +76 -0
- data/lib/sirena/parser/pie.rb +49 -0
- data/lib/sirena/parser/quadrant.rb +57 -0
- data/lib/sirena/parser/radar.rb +104 -0
- data/lib/sirena/parser/requirement.rb +70 -0
- data/lib/sirena/parser/sankey.rb +64 -0
- data/lib/sirena/parser/sequence.rb +51 -0
- data/lib/sirena/parser/state_diagram.rb +69 -0
- data/lib/sirena/parser/timeline.rb +57 -0
- data/lib/sirena/parser/transforms/architecture.rb +97 -0
- data/lib/sirena/parser/transforms/block.rb +254 -0
- data/lib/sirena/parser/transforms/c4.rb +347 -0
- data/lib/sirena/parser/transforms/class_diagram.rb +352 -0
- data/lib/sirena/parser/transforms/er_diagram.rb +169 -0
- data/lib/sirena/parser/transforms/error.rb +58 -0
- data/lib/sirena/parser/transforms/flowchart.rb +293 -0
- data/lib/sirena/parser/transforms/gantt.rb +215 -0
- data/lib/sirena/parser/transforms/git_graph.rb +160 -0
- data/lib/sirena/parser/transforms/info.rb +58 -0
- data/lib/sirena/parser/transforms/kanban.rb +176 -0
- data/lib/sirena/parser/transforms/mindmap.rb +227 -0
- data/lib/sirena/parser/transforms/packet.rb +63 -0
- data/lib/sirena/parser/transforms/pie.rb +143 -0
- data/lib/sirena/parser/transforms/quadrant.rb +177 -0
- data/lib/sirena/parser/transforms/radar.rb +126 -0
- data/lib/sirena/parser/transforms/requirement.rb +272 -0
- data/lib/sirena/parser/transforms/sankey.rb +122 -0
- data/lib/sirena/parser/transforms/sequence.rb +342 -0
- data/lib/sirena/parser/transforms/state_diagram.rb +292 -0
- data/lib/sirena/parser/transforms/timeline.rb +177 -0
- data/lib/sirena/parser/transforms/treemap.rb +81 -0
- data/lib/sirena/parser/transforms/xy_chart.rb +132 -0
- data/lib/sirena/parser/treemap.rb +98 -0
- data/lib/sirena/parser/user_journey.rb +120 -0
- data/lib/sirena/parser/xy_chart.rb +114 -0
- data/lib/sirena/parser.rb +8 -0
- data/lib/sirena/renderer/architecture.rb +251 -0
- data/lib/sirena/renderer/base.rb +251 -0
- data/lib/sirena/renderer/block.rb +286 -0
- data/lib/sirena/renderer/c4.rb +490 -0
- data/lib/sirena/renderer/class_diagram.rb +499 -0
- data/lib/sirena/renderer/er_diagram.rb +417 -0
- data/lib/sirena/renderer/error.rb +131 -0
- data/lib/sirena/renderer/flowchart.rb +301 -0
- data/lib/sirena/renderer/gantt.rb +331 -0
- data/lib/sirena/renderer/git_graph.rb +368 -0
- data/lib/sirena/renderer/info.rb +93 -0
- data/lib/sirena/renderer/kanban.rb +295 -0
- data/lib/sirena/renderer/mindmap.rb +396 -0
- data/lib/sirena/renderer/packet.rb +239 -0
- data/lib/sirena/renderer/pie.rb +235 -0
- data/lib/sirena/renderer/quadrant.rb +292 -0
- data/lib/sirena/renderer/radar.rb +323 -0
- data/lib/sirena/renderer/requirement.rb +371 -0
- data/lib/sirena/renderer/sankey.rb +255 -0
- data/lib/sirena/renderer/sequence.rb +424 -0
- data/lib/sirena/renderer/state_diagram.rb +328 -0
- data/lib/sirena/renderer/timeline.rb +304 -0
- data/lib/sirena/renderer/treemap.rb +152 -0
- data/lib/sirena/renderer/user_journey.rb +331 -0
- data/lib/sirena/renderer/xy_chart.rb +452 -0
- data/lib/sirena/renderer.rb +8 -0
- data/lib/sirena/svg/circle.rb +41 -0
- data/lib/sirena/svg/document.rb +103 -0
- data/lib/sirena/svg/element.rb +65 -0
- data/lib/sirena/svg/ellipse.rb +33 -0
- data/lib/sirena/svg/group.rb +71 -0
- data/lib/sirena/svg/line.rb +49 -0
- data/lib/sirena/svg/path.rb +76 -0
- data/lib/sirena/svg/polygon.rb +43 -0
- data/lib/sirena/svg/polyline.rb +35 -0
- data/lib/sirena/svg/rect.rb +57 -0
- data/lib/sirena/svg/style.rb +44 -0
- data/lib/sirena/svg/text.rb +72 -0
- data/lib/sirena/svg.rb +19 -0
- data/lib/sirena/text_measurement.rb +71 -0
- data/lib/sirena/theme/builtin/dark.yml +70 -0
- data/lib/sirena/theme/builtin/default.yml +80 -0
- data/lib/sirena/theme/builtin/high_contrast.yml +70 -0
- data/lib/sirena/theme/builtin/light.yml +70 -0
- data/lib/sirena/theme/color_palette.rb +48 -0
- data/lib/sirena/theme/effect_styles.rb +28 -0
- data/lib/sirena/theme/registry.rb +41 -0
- data/lib/sirena/theme/shape_styles.rb +28 -0
- data/lib/sirena/theme/spacing_config.rb +24 -0
- data/lib/sirena/theme/typography.rb +30 -0
- data/lib/sirena/theme.rb +69 -0
- data/lib/sirena/transform/architecture.rb +273 -0
- data/lib/sirena/transform/base.rb +199 -0
- data/lib/sirena/transform/block.rb +215 -0
- data/lib/sirena/transform/c4.rb +288 -0
- data/lib/sirena/transform/class_diagram.rb +296 -0
- data/lib/sirena/transform/er_diagram.rb +204 -0
- data/lib/sirena/transform/error.rb +39 -0
- data/lib/sirena/transform/flowchart.rb +161 -0
- data/lib/sirena/transform/gantt.rb +253 -0
- data/lib/sirena/transform/git_graph.rb +283 -0
- data/lib/sirena/transform/info.rb +39 -0
- data/lib/sirena/transform/kanban.rb +180 -0
- data/lib/sirena/transform/mindmap.rb +251 -0
- data/lib/sirena/transform/packet.rb +185 -0
- data/lib/sirena/transform/pie.rb +62 -0
- data/lib/sirena/transform/quadrant.rb +167 -0
- data/lib/sirena/transform/radar.rb +227 -0
- data/lib/sirena/transform/requirement.rb +233 -0
- data/lib/sirena/transform/sankey.rb +212 -0
- data/lib/sirena/transform/sequence.rb +143 -0
- data/lib/sirena/transform/state_diagram.rb +228 -0
- data/lib/sirena/transform/timeline.rb +139 -0
- data/lib/sirena/transform/treemap.rb +120 -0
- data/lib/sirena/transform/user_journey.rb +207 -0
- data/lib/sirena/transform/xy_chart.rb +273 -0
- data/lib/sirena/transform.rb +8 -0
- data/lib/sirena/version.rb +5 -0
- data/lib/sirena.rb +328 -0
- data/lib/tasks/benchmark.rake +532 -0
- data/lib/tasks/examples.rake +468 -0
- data/lib/tasks/generate_mermaid_fixtures.rake +363 -0
- data/lib/tasks/mermaid_fixtures.rake +46 -0
- data/scripts/extract_mermaid_tests.rb +493 -0
- data/scripts/rename_to_sirena.rb +73 -0
- data/sirena.gemspec +47 -0
- metadata +529 -0
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
= Requirement Diagrams
|
|
2
|
+
:toc:
|
|
3
|
+
:toclevels: 3
|
|
4
|
+
|
|
5
|
+
== General
|
|
6
|
+
|
|
7
|
+
Requirement diagrams in Sirena provide visualization for system requirements, their relationships, and verification methods. These diagrams are commonly used in systems engineering and software requirements management to model requirements hierarchies, traceability, and validation approaches.
|
|
8
|
+
|
|
9
|
+
Requirement diagrams are declared with the `requirementDiagram` keyword and support:
|
|
10
|
+
|
|
11
|
+
* Requirements with multiple types (functional, performance, interface, etc.)
|
|
12
|
+
* Requirement properties (ID, text, risk level, verification method)
|
|
13
|
+
* Elements representing system components or external entities
|
|
14
|
+
* Relationships between requirements and elements (satisfies, verifies, contains, etc.)
|
|
15
|
+
* Styling and class definitions for customization
|
|
16
|
+
* Risk level visualization through color coding
|
|
17
|
+
|
|
18
|
+
== Basic requirement diagram
|
|
19
|
+
|
|
20
|
+
The simplest requirement diagram contains requirements and elements with relationships:
|
|
21
|
+
|
|
22
|
+
[source,mermaid]
|
|
23
|
+
----
|
|
24
|
+
requirementDiagram
|
|
25
|
+
|
|
26
|
+
requirement test_req {
|
|
27
|
+
id: 1
|
|
28
|
+
text: the test text.
|
|
29
|
+
risk: high
|
|
30
|
+
verifymethod: test
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
element test_entity {
|
|
34
|
+
type: simulation
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
test_entity - satisfies -> test_req
|
|
38
|
+
----
|
|
39
|
+
|
|
40
|
+
This creates a requirement with properties and an element that satisfies it.
|
|
41
|
+
|
|
42
|
+
== Requirement declarations
|
|
43
|
+
|
|
44
|
+
=== Basic requirements
|
|
45
|
+
|
|
46
|
+
Requirements are declared with the `requirement` keyword:
|
|
47
|
+
|
|
48
|
+
[source,mermaid]
|
|
49
|
+
----
|
|
50
|
+
requirementDiagram
|
|
51
|
+
|
|
52
|
+
requirement simple_req {
|
|
53
|
+
id: 1
|
|
54
|
+
text: A simple requirement
|
|
55
|
+
}
|
|
56
|
+
----
|
|
57
|
+
|
|
58
|
+
Without additional properties, a requirement needs at least an ID to be valid.
|
|
59
|
+
|
|
60
|
+
=== Requirement types
|
|
61
|
+
|
|
62
|
+
Requirements can have different types that indicate their category:
|
|
63
|
+
|
|
64
|
+
[source,mermaid]
|
|
65
|
+
----
|
|
66
|
+
requirementDiagram
|
|
67
|
+
|
|
68
|
+
requirement basic_req {
|
|
69
|
+
id: 1
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
functionalRequirement func_req {
|
|
73
|
+
id: 2
|
|
74
|
+
text: Functional requirement
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
performanceRequirement perf_req {
|
|
78
|
+
id: 3
|
|
79
|
+
text: Performance requirement
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
interfaceRequirement int_req {
|
|
83
|
+
id: 4
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
physicalRequirement phys_req {
|
|
87
|
+
id: 5
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
designConstraint design_con {
|
|
91
|
+
id: 6
|
|
92
|
+
}
|
|
93
|
+
----
|
|
94
|
+
|
|
95
|
+
Where:
|
|
96
|
+
|
|
97
|
+
`requirement`:: Generic requirement (default type)
|
|
98
|
+
`functionalRequirement`:: Functional requirement
|
|
99
|
+
`performanceRequirement`:: Performance requirement
|
|
100
|
+
`interfaceRequirement`:: Interface requirement
|
|
101
|
+
`physicalRequirement`:: Physical requirement
|
|
102
|
+
`designConstraint`:: Design constraint
|
|
103
|
+
|
|
104
|
+
=== Requirement properties
|
|
105
|
+
|
|
106
|
+
Requirements support several properties:
|
|
107
|
+
|
|
108
|
+
[source,mermaid]
|
|
109
|
+
----
|
|
110
|
+
requirementDiagram
|
|
111
|
+
|
|
112
|
+
requirement detailed_req {
|
|
113
|
+
id: 1
|
|
114
|
+
text: The system shall process requests within 100ms
|
|
115
|
+
risk: medium
|
|
116
|
+
verifymethod: test
|
|
117
|
+
}
|
|
118
|
+
----
|
|
119
|
+
|
|
120
|
+
Where:
|
|
121
|
+
|
|
122
|
+
`id`:: Unique identifier for the requirement
|
|
123
|
+
`text`:: Description of the requirement
|
|
124
|
+
`risk`:: Risk level (low, medium, high)
|
|
125
|
+
`verifymethod`:: Verification approach (Analysis, Inspection, Test, Demonstration)
|
|
126
|
+
|
|
127
|
+
== Element declarations
|
|
128
|
+
|
|
129
|
+
=== Basic elements
|
|
130
|
+
|
|
131
|
+
Elements represent system components or external entities:
|
|
132
|
+
|
|
133
|
+
[source,mermaid]
|
|
134
|
+
----
|
|
135
|
+
requirementDiagram
|
|
136
|
+
|
|
137
|
+
element component {
|
|
138
|
+
type: software
|
|
139
|
+
}
|
|
140
|
+
----
|
|
141
|
+
|
|
142
|
+
Elements have a name and can have a type property.
|
|
143
|
+
|
|
144
|
+
=== Element properties
|
|
145
|
+
|
|
146
|
+
Elements support these properties:
|
|
147
|
+
|
|
148
|
+
[source,mermaid]
|
|
149
|
+
----
|
|
150
|
+
requirementDiagram
|
|
151
|
+
|
|
152
|
+
element api_service {
|
|
153
|
+
type: service
|
|
154
|
+
docref: /docs/api.html
|
|
155
|
+
}
|
|
156
|
+
----
|
|
157
|
+
|
|
158
|
+
Where:
|
|
159
|
+
|
|
160
|
+
`type`:: Category of the element (software, hardware, service, etc.)
|
|
161
|
+
`docref`:: Reference to documentation
|
|
162
|
+
|
|
163
|
+
== Relationships
|
|
164
|
+
|
|
165
|
+
=== Relationship types
|
|
166
|
+
|
|
167
|
+
Requirements and elements can be connected with typed relationships:
|
|
168
|
+
|
|
169
|
+
[source,mermaid]
|
|
170
|
+
----
|
|
171
|
+
requirementDiagram
|
|
172
|
+
|
|
173
|
+
requirement parent_req {
|
|
174
|
+
id: 1
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
requirement child_req {
|
|
178
|
+
id: 2
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
element system {
|
|
182
|
+
type: software
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
parent_req - contains -> child_req
|
|
186
|
+
parent_req - copies -> child_req
|
|
187
|
+
parent_req - derives -> child_req
|
|
188
|
+
system - satisfies -> parent_req
|
|
189
|
+
system - verifies -> parent_req
|
|
190
|
+
child_req - refines -> parent_req
|
|
191
|
+
child_req - traces -> parent_req
|
|
192
|
+
----
|
|
193
|
+
|
|
194
|
+
Where:
|
|
195
|
+
|
|
196
|
+
`contains`:: Parent requirement contains child requirement
|
|
197
|
+
`copies`:: Requirement is copied from another
|
|
198
|
+
`derives`:: Requirement is derived from another
|
|
199
|
+
`satisfies`:: Element satisfies a requirement
|
|
200
|
+
`verifies`:: Element verifies a requirement
|
|
201
|
+
`refines`:: Requirement refines another requirement
|
|
202
|
+
`traces`:: Requirement traces to another requirement
|
|
203
|
+
|
|
204
|
+
=== Relationship syntax
|
|
205
|
+
|
|
206
|
+
Relationships follow this pattern:
|
|
207
|
+
|
|
208
|
+
[source,mermaid]
|
|
209
|
+
----
|
|
210
|
+
source - relationship_type -> target
|
|
211
|
+
----
|
|
212
|
+
|
|
213
|
+
The arrow direction indicates the relationship flow.
|
|
214
|
+
|
|
215
|
+
== Risk level visualization
|
|
216
|
+
|
|
217
|
+
=== Risk colors
|
|
218
|
+
|
|
219
|
+
Requirements are color-coded based on their risk level:
|
|
220
|
+
|
|
221
|
+
[source,mermaid]
|
|
222
|
+
----
|
|
223
|
+
requirementDiagram
|
|
224
|
+
|
|
225
|
+
requirement low_risk {
|
|
226
|
+
id: 1
|
|
227
|
+
risk: low
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
requirement medium_risk {
|
|
231
|
+
id: 2
|
|
232
|
+
risk: medium
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
requirement high_risk {
|
|
236
|
+
id: 3
|
|
237
|
+
risk: high
|
|
238
|
+
}
|
|
239
|
+
----
|
|
240
|
+
|
|
241
|
+
Where:
|
|
242
|
+
|
|
243
|
+
`low`:: Green border indicating low risk
|
|
244
|
+
`medium`:: Yellow border indicating medium risk
|
|
245
|
+
`high`:: Red border indicating high risk
|
|
246
|
+
|
|
247
|
+
== Styling
|
|
248
|
+
|
|
249
|
+
=== Inline styling
|
|
250
|
+
|
|
251
|
+
Style individual requirements or elements using the `style` directive:
|
|
252
|
+
|
|
253
|
+
[source,mermaid]
|
|
254
|
+
----
|
|
255
|
+
requirementDiagram
|
|
256
|
+
|
|
257
|
+
requirement styled_req {
|
|
258
|
+
id: 1
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
style styled_req fill:#f9f,stroke:#333
|
|
262
|
+
----
|
|
263
|
+
|
|
264
|
+
Where:
|
|
265
|
+
|
|
266
|
+
`fill:#f9f`:: Background color
|
|
267
|
+
`stroke:#333`:: Border color
|
|
268
|
+
`stroke-width`:: Border width
|
|
269
|
+
|
|
270
|
+
=== Class definitions
|
|
271
|
+
|
|
272
|
+
Define reusable style classes:
|
|
273
|
+
|
|
274
|
+
[source,mermaid]
|
|
275
|
+
----
|
|
276
|
+
requirementDiagram
|
|
277
|
+
|
|
278
|
+
requirement req1 {
|
|
279
|
+
id: 1
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
classDef criticalClass fill:#ff6,stroke:#f00,stroke-width:3px
|
|
283
|
+
class req1 criticalClass
|
|
284
|
+
----
|
|
285
|
+
|
|
286
|
+
=== Class assignment
|
|
287
|
+
|
|
288
|
+
Assign classes to multiple items at once:
|
|
289
|
+
|
|
290
|
+
[source,mermaid]
|
|
291
|
+
----
|
|
292
|
+
requirementDiagram
|
|
293
|
+
|
|
294
|
+
requirement req1 {
|
|
295
|
+
id: 1
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
requirement req2 {
|
|
299
|
+
id: 2
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
classDef important fill:#faa
|
|
303
|
+
class req1,req2 important
|
|
304
|
+
----
|
|
305
|
+
|
|
306
|
+
=== Class shorthand
|
|
307
|
+
|
|
308
|
+
Use inline class syntax during declaration:
|
|
309
|
+
|
|
310
|
+
[source,mermaid]
|
|
311
|
+
----
|
|
312
|
+
requirementDiagram
|
|
313
|
+
|
|
314
|
+
classDef special fill:#afa
|
|
315
|
+
|
|
316
|
+
requirement req1:::special {
|
|
317
|
+
id: 1
|
|
318
|
+
}
|
|
319
|
+
----
|
|
320
|
+
|
|
321
|
+
== Complete example
|
|
322
|
+
|
|
323
|
+
Here's a comprehensive example showing various features:
|
|
324
|
+
|
|
325
|
+
[source,mermaid]
|
|
326
|
+
----
|
|
327
|
+
requirementDiagram
|
|
328
|
+
|
|
329
|
+
functionalRequirement sys_req {
|
|
330
|
+
id: SYS-001
|
|
331
|
+
text: System shall provide user authentication
|
|
332
|
+
risk: high
|
|
333
|
+
verifymethod: test
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
functionalRequirement auth_req {
|
|
337
|
+
id: AUTH-001
|
|
338
|
+
text: System shall support OAuth 2.0
|
|
339
|
+
risk: medium
|
|
340
|
+
verifymethod: test
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
performanceRequirement perf_req {
|
|
344
|
+
id: PERF-001
|
|
345
|
+
text: Authentication shall complete within 2 seconds
|
|
346
|
+
risk: low
|
|
347
|
+
verifymethod: test
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
element auth_service {
|
|
351
|
+
type: microservice
|
|
352
|
+
docref: /docs/auth
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
element oauth_provider {
|
|
356
|
+
type: external
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
sys_req - contains -> auth_req
|
|
360
|
+
sys_req - contains -> perf_req
|
|
361
|
+
auth_service - satisfies -> auth_req
|
|
362
|
+
auth_service - verifies -> perf_req
|
|
363
|
+
oauth_provider - satisfies -> auth_req
|
|
364
|
+
|
|
365
|
+
classDef critical fill:#ffcccc
|
|
366
|
+
class sys_req critical
|
|
367
|
+
----
|
|
368
|
+
|
|
369
|
+
This creates a requirements hierarchy with:
|
|
370
|
+
|
|
371
|
+
* Multiple requirement types
|
|
372
|
+
* Hierarchical requirement relationships
|
|
373
|
+
* Elements implementing requirements
|
|
374
|
+
* Risk level visualization
|
|
375
|
+
* Custom styling
|
|
376
|
+
|
|
377
|
+
== Implementation notes
|
|
378
|
+
|
|
379
|
+
=== Layout algorithm
|
|
380
|
+
|
|
381
|
+
Requirements and elements are positioned using a level-based layout:
|
|
382
|
+
|
|
383
|
+
. Elements are placed at level 0
|
|
384
|
+
. Requirements without dependencies are placed at level 1
|
|
385
|
+
. Requirements with dependencies are placed at higher levels based on their dependency depth
|
|
386
|
+
|
|
387
|
+
This creates a hierarchical view showing requirement traceability.
|
|
388
|
+
|
|
389
|
+
=== Requirement rendering
|
|
390
|
+
|
|
391
|
+
Requirements are rendered as styled boxes with:
|
|
392
|
+
|
|
393
|
+
* Header section showing type and name
|
|
394
|
+
* Property lines for ID, text, risk, and verification method
|
|
395
|
+
* Color-coded borders based on risk level
|
|
396
|
+
* Auto-sizing based on text content
|
|
397
|
+
|
|
398
|
+
=== Element rendering
|
|
399
|
+
|
|
400
|
+
Elements are rendered as hexagonal shapes to visually distinguish them from requirements.
|
|
401
|
+
|
|
402
|
+
=== Relationship routing
|
|
403
|
+
|
|
404
|
+
Relationships use bezier curves for smooth connections between nodes, with labels showing the relationship type.
|
|
405
|
+
|
|
406
|
+
== Theme integration
|
|
407
|
+
|
|
408
|
+
Requirement diagrams support full theme integration:
|
|
409
|
+
|
|
410
|
+
* Requirement box colors from theme palette
|
|
411
|
+
* Border colors and styles
|
|
412
|
+
* Text styling and fonts
|
|
413
|
+
* Relationship colors and styles
|
|
414
|
+
* Risk level colors (can be overridden in theme)
|
|
415
|
+
|
|
416
|
+
All visual properties can be customized through themes or inline styling.
|