@diagrammo/dgmo 0.18.0 → 0.18.1

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.
@@ -8,6 +8,7 @@
8
8
 
9
9
  1. [Universal Constructs](#1-universal-constructs)
10
10
  2. [Universal Name Handling](#2-universal-name-handling)
11
+ 2A. [Universal Aliases (`as` keyword)](#2a-universal-aliases-as-keyword)
11
12
  3. [Sequence Diagrams](#3-sequence-diagrams)
12
13
  4. [Infrastructure Diagrams](#4-infrastructure-diagrams)
13
14
  5. [Flowchart Diagrams](#5-flowchart-diagrams)
@@ -19,16 +20,21 @@
19
20
  11. [Kanban Boards](#11-kanban-boards)
20
21
  12. [Sitemap Diagrams](#12-sitemap-diagrams)
21
22
  13. [Gantt Charts](#13-gantt-charts)
23
+ 13A. [PERT Diagrams](#13a-pert-diagrams)
22
24
  14. [Boxes and Lines Diagrams](#14-boxes-and-lines-diagrams)
23
25
  15. [Timeline Diagrams](#15-timeline-diagrams)
24
26
  16. [Data Charts](#16-data-charts)
25
27
  17. [Visualizations](#17-visualizations)
26
- 18. [Tech Radar Diagrams](#18-tech-radar-diagrams)
28
+ 18. [Mindmap Diagrams](#18-mindmap-diagrams)
27
29
  19. [Wireframe Diagrams](#19-wireframe-diagrams)
28
- 20. [Pyramid Diagrams](#20-pyramid-diagrams)
29
- 21. [Ring Diagrams](#21-ring-diagrams)
30
- 22. [RACI Matrices](#22-raci-matrices-raci--rasci--daci)
31
- 23. [Colon Usage Summary](#23-colon-usage-summary)
30
+ 20. [Tech Radar Diagrams](#20-tech-radar-diagrams)
31
+ 21. [Cycle Diagrams](#21-cycle-diagrams)
32
+ 22. [Journey Map Diagrams](#22-journey-map-diagrams)
33
+ 23. [Pyramid Diagrams](#23-pyramid-diagrams)
34
+ 24. [Ring Diagrams](#24-ring-diagrams)
35
+ 24A. [RACI Matrices (RACI / RASCI / DACI)](#24a-raci-matrices-raci--rasci--daci)
36
+ 25. [Colon Usage Summary](#25-colon-usage-summary)
37
+ 26. [Authoring Rules (Generators Read This First)](#26-authoring-rules-generators-read-this-first)
32
38
 
33
39
  ---
34
40
 
@@ -1202,6 +1208,165 @@ parallel
1202
1208
 
1203
1209
  ---
1204
1210
 
1211
+ ## 13A. PERT Diagrams
1212
+
1213
+ PERT diagrams visualize project networks with three-point duration estimates, surfacing critical path, slack, and project μ/σ. Each activity renders as a node card (rectangle, or diamond for milestones); dependencies are arrows between them. Monte Carlo simulation runs automatically whenever any activity carries duration data.
1214
+
1215
+ ```
1216
+ pert Pirate Voyage
1217
+ time-unit w
1218
+ default-confidence medium
1219
+
1220
+ voyage approved 0
1221
+ -> recruit crew
1222
+
1223
+ recruit crew 1 2 4 as rc confidence: low
1224
+ -> load powder
1225
+
1226
+ load powder 0.5 1 2
1227
+ -> sail to atoll
1228
+
1229
+ sail to atoll 3 5 8
1230
+ -> count gold
1231
+ -> repair hull
1232
+
1233
+ count gold 0.5
1234
+ -> divvy shares
1235
+
1236
+ repair hull 2 3 5 confidence: low
1237
+ -> divvy shares
1238
+
1239
+ divvy shares 1 2 3
1240
+ ```
1241
+
1242
+ ### Directives
1243
+
1244
+ | Directive | Effect |
1245
+ |-----------|--------|
1246
+ | `time-unit <unit>` | Unit for bare-number durations (default `d`); accepts `min`, `h`, `d`, `bd`, `w`, `s` (sprints) |
1247
+ | `default-confidence <level>` | M-only heuristic: `high`, `medium`, `low`, or a custom `O/P` factor pair (e.g. `0.6/2.5`) |
1248
+ | `direction <LR\|TB>` | Layout direction (default `LR`) |
1249
+ | `node-detail <compact\|full>` | Visual density; `full` adds slack bars and σ-as-border-thickness |
1250
+ | `trials <N>` | Canonical Monte Carlo trial count (`< 100` clamps to analytical) |
1251
+ | `seed <N>` | Mulberry32 PRNG seed for deterministic runs |
1252
+ | `scrubber-trials <N>` | Fast-MC trials for the interactive duration scrubber |
1253
+ | `start-date <YYYY-MM-DD>` | Anchor the forward pass — accepts the literal `now` |
1254
+ | `end-date <YYYY-MM-DD>` | Anchor the backward pass (mutually exclusive with `start-date`) |
1255
+ | `sprint-length <duration>` | Sprint length when sprint mode is active (default `2w`) |
1256
+ | `sprint-number <N>` | Starting sprint label N — cells render as `S<N+offset>` (default `1`) |
1257
+ | `sprint-start <YYYY-MM-DD>` | Optional ISO date the starting sprint begins on |
1258
+ | `active-tag <GroupName>` | Pre-expand a tag group + drive node fill |
1259
+
1260
+ Sprint mode activates automatically when `time-unit s` is set, or explicitly when any `sprint-*` directive appears. ES/EF/LS/LF cells then render as `S5`, `S7`, etc.
1261
+
1262
+ ### Activities
1263
+
1264
+ An activity is `<name> [<durations>] [as <id>] [k: v, ...]`. Durations follow the name, separated by spaces or commas:
1265
+
1266
+ | Form | Meaning |
1267
+ |------|---------|
1268
+ | `recruit crew 1 2 4` | Three-point estimate: O M P (in the active `time-unit`) |
1269
+ | `recruit crew 2` | M-only; parser fills O and P from `default-confidence` factors |
1270
+ | `celebrate` | TBD: no estimate; downstream activities inherit `?` |
1271
+
1272
+ Two-number durations are rejected (the parser cannot disambiguate O+M, M+P, or O+P). Universal alias syntax per §2A applies: `recruit crew 1 2 4 as rc`. Names containing the literal token `as` parse cleanly when no actual alias suffix is appended (`serve as quartermaster 2 3 5`).
1273
+
1274
+ ### Milestones
1275
+
1276
+ Milestones are zero-duration nodes rendered as diamonds. Declare them as zero-duration activities using the standard grammar — there is **no** `milestone` keyword:
1277
+
1278
+ ```
1279
+ voyage approved 0
1280
+ landfall 0 0 0
1281
+ ```
1282
+
1283
+ Both forms render as diamonds and participate in the dependency graph and critical-path computation.
1284
+
1285
+ ### Dependencies
1286
+
1287
+ Indented `-> dest` lines under an activity declare a dependency from that activity to `dest`. Destinations must reference a **previously-declared** activity name or alias — inline forward-declaration on the arrow line is rejected.
1288
+
1289
+ #### Edge types and lag/lead
1290
+
1291
+ Edges default to **Finish-to-Start (FS) with zero lag**. The arrow may carry an inline label between two dashes to override either piece:
1292
+
1293
+ | Syntax | Meaning |
1294
+ |--------|---------|
1295
+ | `A -> B` | FS, 0 lag (default) |
1296
+ | `A -SS-> B` | Start-to-Start |
1297
+ | `A -2d-> B` | FS with +2d lag (lag-only shortcut) |
1298
+ | `A -SS+2d-> B` | SS with +2d lag |
1299
+ | `A -FF-1d-> B` | FF with -1d lead (negative lag) |
1300
+ | `A -SF+3d-> B` | SF with +3d lag |
1301
+
1302
+ | Type | Constraint | Use case |
1303
+ |------|------------|----------|
1304
+ | FS | `B.ES ≥ A.EF + lag` | Default; sequential work |
1305
+ | SS | `B.ES ≥ A.ES + lag` | Parallel start |
1306
+ | FF | `B.EF ≥ A.EF + lag` | Synchronized finish |
1307
+ | SF | `B.EF ≥ A.ES + lag` | Rare; included for completeness |
1308
+
1309
+ Type names are case-insensitive. Lag amount inherits the diagram's `time-unit`; per-edge unit overrides are accepted (`-SS+2d->`, `-FF+4h->`). A `-` sign denotes a **lead** (overlap). Non-default edges paint a small midpoint label (`SS +2d`, `FF -1d`); FS+0 edges stay clean. Every `->` is independently FS — there is no `default-edge-type` directive.
1310
+
1311
+ ### Groups
1312
+
1313
+ Bracketed `[group-name]` blocks cluster activities. Whether a group renders as a hammock super-edge or a tinted cluster rectangle is auto-detected from edge topology — single entry + single exit collapses to a hammock; multi-entry or multi-exit renders as a cluster.
1314
+
1315
+ ```
1316
+ [outfit ship]
1317
+ recruit crew 1 2 4
1318
+ -> load powder
1319
+ careen hull 1 1.5 2.5
1320
+ -> load powder
1321
+ load powder 0.5 1 2
1322
+ -> sail to atoll
1323
+
1324
+ sail to atoll 3 5 8
1325
+ ```
1326
+
1327
+ Groups can author `collapsed: true` to start collapsed.
1328
+
1329
+ ### Same-line metadata
1330
+
1331
+ | Key | Where | Meaning |
1332
+ |-----|-------|---------|
1333
+ | `confidence` | activity | Per-activity override of `default-confidence` (`high` / `medium` / `low` / `O/P`) |
1334
+ | `collapsed` | group | `true` to start the group collapsed |
1335
+ | tag aliases (e.g. `c: Captain`) | activity, group | Resolves to the declared tag group; drives node fill when the group is active |
1336
+
1337
+ ### Tags
1338
+
1339
+ PERT uses the universal tag system. Declarations live above the diagram body and apply to activities and groups via same-line metadata:
1340
+
1341
+ ```
1342
+ pert Pirate Voyage by Crew Role
1343
+ time-unit w
1344
+
1345
+ tag Crew as c
1346
+ Captain red
1347
+ Bosun orange
1348
+ Quartermaster blue
1349
+
1350
+ recruit crew 1 2 4 c: Quartermaster
1351
+ load powder 0.5 1 2 c: Bosun
1352
+ ```
1353
+
1354
+ Coloring is opt-in: without an `active-tag <GroupName>` directive (or a click in the app), the legend renders all groups as collapsed pills and nodes stay neutral. When a group is active, the activity card's middle (name) band picks up the tag color while the border continues to communicate criticality. Milestone diamonds adopt the tag color across the full pill.
1355
+
1356
+ ### Date anchoring
1357
+
1358
+ `start-date YYYY-MM-DD` anchors the forward pass; `end-date YYYY-MM-DD` anchors the backward pass. They are mutually exclusive. When anchored, ES / EF / LS / LF cells render as calendar dates and slack normalizes to days. `start-date now` resolves to today at parse time and is substituted before share-link compression so recipients see the author's view. `end-date now` is a parse error.
1359
+
1360
+ In backward mode with Monte Carlo active, the project-stats caption reframes its percentile rows from *finishes* to *latest-safe starts* — higher confidence demands an earlier start. Latest-safe-start dates that fall in the past relative to the parse-time today date append `(latest-safe start has passed)`.
1361
+
1362
+ ### Critical path and analysis
1363
+
1364
+ Forward/backward pass, slack, M-world critical path, and project μ/σ are always computed. Critical-path activities and edges paint with a red border (`palette.colors.red`) in analytical mode. When Monte Carlo runs (any non-milestone activity has a duration), criticality is banded by the criticality index: red ≥ 0.80, orange ≥ 0.50, yellow ≥ 0.25, green ≥ 0.10, blue ≥ 0.02. The project-stats caption reports expected duration, σ, and P50/P80/P95 dates. Activities downstream of a TBD activity render `?` for ES/EF/LS/LF/slack and dashed borders.
1365
+
1366
+ See spec §13A for full date-anchoring semantics, S-curve axes, and diagnostic codes.
1367
+
1368
+ ---
1369
+
1205
1370
  ## 14. Boxes and Lines Diagrams
1206
1371
 
1207
1372
  ### 13.1 Declaration
@@ -1642,69 +1807,129 @@ Navigator 0.85 0.8
1642
1807
 
1643
1808
  ---
1644
1809
 
1645
- ## 18. Tech Radar Diagrams
1810
+ ## 18. Mindmap Diagrams
1811
+
1812
+ A radial hierarchy of ideas branching out from a central root. Hierarchy is established by indentation, nodes accept descriptions and tag-driven coloring, and any subtree can be collapsed by default.
1646
1813
 
1647
1814
  ```
1648
- tech-radar Title
1815
+ mindmap Product Strategy
1649
1816
 
1650
- rings
1651
- Adopt
1652
- Trial
1653
- Assess
1654
- Hold
1817
+ tag Priority as p
1818
+ High red
1819
+ Low green
1655
1820
 
1656
- Techniques quadrant: top-right
1657
- Continuous Deployment ring: Adopt, trend: stable
1658
- Fully adopted across all services.
1659
- Micro Frontends ring: Trial, trend: up
1821
+ Research
1822
+ User Interviews p: High
1823
+ Competitor Analysis
1824
+ Development p: High
1825
+ MVP Features
1826
+ Auth System
1827
+ description: Login, signup, OAuth
1828
+ Dashboard
1829
+ Nice-to-haves p: Low, collapsed: true
1830
+ Dark Mode
1831
+ ```
1832
+
1833
+ ### Declaration
1660
1834
 
1661
- Tools quadrant: top-left
1662
- Vite ring: Adopt, trend: up
1663
- Webpack ring: Hold, trend: down
1835
+ ```
1836
+ mindmap [Title]
1664
1837
  ```
1665
1838
 
1666
- ### Rings
1839
+ The title doubles as the root node — `mindmap Product Strategy` renders a root labeled "Product Strategy". Indent-0 lines under the title become its children.
1667
1840
 
1668
- Declared in a `rings` block, one per indented line. Order: innermost (first) to outermost (last). Any names, any count.
1841
+ Omitting the title enables **multi-root mode**: each indent-0 line starts its own tree, and the title is inferred from the first root.
1669
1842
 
1670
- Aliases supported: `Adopt as a` — then blips can use `ring: a`. (Universal alias syntax per §2A.)
1843
+ ```
1844
+ mindmap
1671
1845
 
1672
- ### Quadrants
1846
+ Q1 Goals
1847
+ Ship MVP
1848
+ Q2 Goals
1849
+ Launch marketing
1850
+ ```
1673
1851
 
1674
- Exactly 4 required. Each is a top-level header with same-line metadata:
1852
+ ### Hierarchy
1853
+
1854
+ Indentation alone defines parent / child. Any indent step (typically two spaces) nests a node under the line above it.
1675
1855
 
1676
1856
  ```
1677
- Name quadrant: position
1857
+ mindmap Root
1858
+ Branch A
1859
+ Leaf A1
1860
+ Leaf A2
1861
+ Branch B
1678
1862
  ```
1679
1863
 
1680
- **Positions:** `top-left`, `top-right`, `bottom-left`, `bottom-right` — each used exactly once.
1864
+ ### Descriptions
1681
1865
 
1682
- Optional color override: `Tools quadrant: top-left, color: purple`
1866
+ Nodes accept a `description` field as either same-line metadata or an indented sub-line. Both populate the same field; same-line wins if both are present.
1683
1867
 
1684
- Default colors: top-left=blue, top-right=green, bottom-left=red, bottom-right=orange.
1868
+ ```
1869
+ mindmap Onboarding
1685
1870
 
1686
- ### Blips
1871
+ Surveys description: Quarterly NPS survey
1872
+ Auth System
1873
+ description: Handle login, signup, OAuth flows
1874
+ description OAuth supports Google and GitHub
1875
+ Login Page
1876
+ ```
1687
1877
 
1688
- Indented under their quadrant. Require `ring` metadata (case-insensitive match). Optional `trend`:
1878
+ - Multiple `description` lines accumulate into a multi-line description.
1879
+ - Indented descriptions must appear **before** any child node — placing one after a child emits a warning.
1880
+ - Only the literal key `description` is recognized as indented metadata; everything else indented under a node is treated as a child node (e.g. `role: Engineer` becomes a child labeled "role: Engineer").
1881
+ - Empty `description:` is silently skipped.
1882
+ - Inline markdown is supported: `**bold**`, `*italic*`, `` `code` ``, `[links](url)`, and `- bullet` lines render as `• bullet`.
1883
+
1884
+ ### Metadata keys
1885
+
1886
+ Same-line metadata uses the universal `key: value, key2: value2` form (§1.4). Recognized keys:
1887
+
1888
+ | Key | Effect |
1889
+ |-----|--------|
1890
+ | `description` | Description text (see above). |
1891
+ | `collapsed` | `true` collapses the subtree by default. |
1892
+ | Tag alias (e.g. `p:`, `d:`) | Assigns the node to a tag-group value. |
1689
1893
 
1690
1894
  ```
1691
- Item Name ring: Adopt, trend: stable
1895
+ Task p: High, d: Engineering
1896
+ Demo Video description: 2-min product walkthrough
1897
+ Nice-to-haves p: Low, collapsed: true
1692
1898
  ```
1693
1899
 
1694
- **Trends:** `new` (double circle), `up` (inward crescent), `down` (outward crescent), `stable` (plain circle). Omitting renders plain circle.
1900
+ ### Node color
1695
1901
 
1696
- ### Descriptions
1902
+ Color comes from **tag groups** (§1.3 of the spec), not from a trailing color token on the node label. Declare a tag, then reference it via its alias in same-line metadata:
1697
1903
 
1698
- Further-indented lines below a blip. Supports inline markdown (bold, italic, code, links).
1904
+ ```
1905
+ mindmap Roadmap
1699
1906
 
1907
+ tag Priority as p
1908
+ High red
1909
+ Medium yellow
1910
+ Low green
1911
+
1912
+ Ship MVP p: High
1913
+ Polish UX p: Medium
1700
1914
  ```
1701
- Rust ring: Assess, trend: new
1702
- Evaluating for **performance-critical** services.
1915
+
1916
+ ### Collapse
1917
+
1918
+ Any node with children may be collapsed. Set `collapsed: true` in same-line metadata to make a subtree start collapsed; collapsed nodes render with an accent drill-bar so they remain discoverable. Collapse state is runtime-only — the source is always fully expanded, and live toggling in the app does not mutate the file.
1919
+
1920
+ ```
1921
+ Nice-to-haves p: Low, collapsed: true
1922
+ Dark Mode
1923
+ Export PDF
1703
1924
  ```
1704
1925
 
1705
- ### Numbering
1926
+ ### Options
1706
1927
 
1707
- Blips receive sequential global numbers. Order: quadrants clockwise (top-left → top-right → bottom-right → bottom-left), then by ring (innermost first), then declaration order.
1928
+ | Option | Effect |
1929
+ |--------|--------|
1930
+ | `active-tag GroupName` | Sets the default active tag group. |
1931
+
1932
+ Universal options (`palette`, `theme`) apply as elsewhere.
1708
1933
 
1709
1934
  ---
1710
1935
 
@@ -1840,7 +2065,327 @@ wireframe Login Page
1840
2065
 
1841
2066
  ---
1842
2067
 
1843
- ## 20. Pyramid Diagrams
2068
+ ## 20. Tech Radar Diagrams
2069
+
2070
+ ```
2071
+ tech-radar Title
2072
+
2073
+ rings
2074
+ Adopt
2075
+ Trial
2076
+ Assess
2077
+ Hold
2078
+
2079
+ Techniques quadrant: top-right
2080
+ Continuous Deployment ring: Adopt, trend: stable
2081
+ Fully adopted across all services.
2082
+ Micro Frontends ring: Trial, trend: up
2083
+
2084
+ Tools quadrant: top-left
2085
+ Vite ring: Adopt, trend: up
2086
+ Webpack ring: Hold, trend: down
2087
+ ```
2088
+
2089
+ ### Rings
2090
+
2091
+ Declared in a `rings` block, one per indented line. Order: innermost (first) to outermost (last). Any names, any count.
2092
+
2093
+ Aliases supported: `Adopt as a` — then blips can use `ring: a`. (Universal alias syntax per §2A.)
2094
+
2095
+ ### Quadrants
2096
+
2097
+ Exactly 4 required. Each is a top-level header with same-line metadata:
2098
+
2099
+ ```
2100
+ Name quadrant: position
2101
+ ```
2102
+
2103
+ **Positions:** `top-left`, `top-right`, `bottom-left`, `bottom-right` — each used exactly once.
2104
+
2105
+ Optional color override: `Tools quadrant: top-left, color: purple`
2106
+
2107
+ Default colors: top-left=blue, top-right=green, bottom-left=red, bottom-right=orange.
2108
+
2109
+ ### Blips
2110
+
2111
+ Indented under their quadrant. Require `ring` metadata (case-insensitive match). Optional `trend`:
2112
+
2113
+ ```
2114
+ Item Name ring: Adopt, trend: stable
2115
+ ```
2116
+
2117
+ **Trends:** `new` (double circle), `up` (inward crescent), `down` (outward crescent), `stable` (plain circle). Omitting renders plain circle.
2118
+
2119
+ ### Descriptions
2120
+
2121
+ Further-indented lines below a blip. Supports inline markdown (bold, italic, code, links).
2122
+
2123
+ ```
2124
+ Rust ring: Assess, trend: new
2125
+ Evaluating for **performance-critical** services.
2126
+ ```
2127
+
2128
+ ### Numbering
2129
+
2130
+ Blips receive sequential global numbers. Order: quadrants clockwise (top-left → top-right → bottom-right → bottom-left), then by ring (innermost first), then declaration order.
2131
+
2132
+ ---
2133
+
2134
+ ## 21. Cycle Diagrams
2135
+
2136
+ Circular process flows where nodes sit on a ring and directed edges connect each to the next, wrapping from last back to first. Common use: OODA loops, PDCA, product lifecycles, continuous improvement.
2137
+
2138
+ ### Declaration
2139
+
2140
+ ```
2141
+ cycle [Title]
2142
+ ```
2143
+
2144
+ ### Nodes
2145
+
2146
+ Non-indented lines declare nodes. Nodes are positioned on the circle in source order. Minimum two nodes.
2147
+
2148
+ ```
2149
+ cycle PDCA
2150
+
2151
+ Plan
2152
+ Do
2153
+ Check
2154
+ Act
2155
+ ```
2156
+
2157
+ Color via the trailing-token form when it's the only setting:
2158
+
2159
+ ```
2160
+ Plan green
2161
+ Do blue
2162
+ Check orange
2163
+ Act red
2164
+ ```
2165
+
2166
+ ### Descriptions
2167
+
2168
+ Indented lines under a node become the description. Inline markdown is supported (`**bold**`, `*italic*`, `` `code` ``, `[links](url)`), and `- item` renders as `• item`.
2169
+
2170
+ ```
2171
+ Observe
2172
+ Gather raw information from the environment
2173
+ Monitor **unfolding** circumstances
2174
+ ```
2175
+
2176
+ A same-line `description:` works too, and concatenates with any indented lines (same-line first):
2177
+
2178
+ ```
2179
+ Plan description: Set the objective and the route
2180
+ ```
2181
+
2182
+ ### Edges
2183
+
2184
+ Edges are **implicit** — every node connects to the next, with the last wrapping to the first. Use `->` lines only when you want to label or style an edge. Indent the edge line under its source node, before or after description lines.
2185
+
2186
+ ```
2187
+ Observe blue
2188
+ -Unfold circumstances->
2189
+ Synthesize raw data into actionable context
2190
+ ```
2191
+
2192
+ Explicit targets after `->` are accepted but ignored — cycle edges always follow source order. A mismatch with the actual next node emits an info diagnostic.
2193
+
2194
+ ### Edge Metadata
2195
+
2196
+ Edges use the long-form `color: <name>` (narrow exception per §1.5 — edges have no trailing-token slot). `width` is in pixels.
2197
+
2198
+ | Key | Default | Notes |
2199
+ |-----|---------|-------|
2200
+ | `color` | inherits source node color | Long-form only on edges |
2201
+ | `width` | 3–4 px | Stroke width |
2202
+
2203
+ ```
2204
+ Decide orange
2205
+ -Commit to action-> color: orange, width: 5
2206
+ Act red
2207
+ -> width: 4
2208
+ ```
2209
+
2210
+ ### Shape and Direction Directives
2211
+
2212
+ | Directive | Effect |
2213
+ |-----------|--------|
2214
+ | `circle-nodes` | Render nodes as uniform-diameter circles instead of rounded rectangles |
2215
+ | `direction-counterclockwise` | Reverse the cycle (default: clockwise) |
2216
+
2217
+ ### Span Metadata
2218
+
2219
+ `span` controls the relative arc distance from a node to the next one. Default is `1`; decimals are allowed. Zero or negative values are a parse error. Use this to bias a step's footprint on the ring.
2220
+
2221
+ Because `span` rides alongside other keys, use the same-line metadata form — color reverts to long-form when sharing a line:
2222
+
2223
+ ```
2224
+ Plan color: green, span: 2
2225
+ Do color: blue, span: 1
2226
+ Check color: orange, span: 1
2227
+ Act color: red, span: 1.5
2228
+ ```
2229
+
2230
+ ### Parsing Notes
2231
+
2232
+ - Node labels cannot contain `->` or `<-` — parse error with hint.
2233
+ - A bare `-` followed by non-arrow text inside an indented block is a bullet, not an edge.
2234
+ - Minimum 2 nodes required.
2235
+
2236
+ ### Complete Example
2237
+
2238
+ ```
2239
+ cycle OODA Loop
2240
+
2241
+ Observe blue
2242
+ Gather raw information from the environment
2243
+ Monitor unfolding circumstances
2244
+ -Unfold circumstances-> color: blue
2245
+ Synthesize raw data into actionable context
2246
+ Identify **key patterns** and anomalies
2247
+
2248
+ Orient green
2249
+ Analyze and synthesize observations
2250
+ Form a mental model of the situation
2251
+ -Form hypothesis-> color: green
2252
+
2253
+ Decide orange
2254
+ Select a course of action
2255
+ -Commit to action-> color: orange
2256
+
2257
+ Act red
2258
+ Execute the chosen course of action
2259
+ -Generate feedback-> color: red
2260
+ Results flow back into observation
2261
+ ```
2262
+
2263
+ ---
2264
+
2265
+ ## 22. Journey Map Diagrams
2266
+
2267
+ Persona-centric mood landscapes. Steps carry a 1–5 score and optional emotion label; the renderer draws an emotion curve over phase-grouped step cards. **Declaration is required** — the `journey-map` keyword must appear on the first line (no inference, to avoid colliding with kanban's `[Column]` + indented items shape).
2268
+
2269
+ ### Declaration
2270
+
2271
+ ```
2272
+ journey-map [Title]
2273
+ ```
2274
+
2275
+ ### Persona
2276
+
2277
+ One persona per diagram. Name is the rest of the line; an indented line under it is a description.
2278
+
2279
+ ```
2280
+ persona Tech-Savvy Shopper
2281
+ 28yo developer, price-sensitive, does extensive research
2282
+ ```
2283
+
2284
+ Per §1.5, personas use long-form `color: <name>` (narrow exception — the persona-line parser does not peel a trailing color):
2285
+
2286
+ ```
2287
+ persona Captain Mara
2288
+ color: green
2289
+ description: Veteran navigator chasing one last horizon
2290
+ ```
2291
+
2292
+ ### Phases
2293
+
2294
+ Phases are `[Bracket]` headers at indent 0. Steps live indented under them. Phases are optional — omit them for a continuous flat flow.
2295
+
2296
+ ```
2297
+ [Research]
2298
+ Compare specs score: 4
2299
+ Watch reviews score: 5
2300
+ ```
2301
+
2302
+ ### Steps and Scores
2303
+
2304
+ Steps are step-name lines with §1.4 same-line metadata. `score` (1–5 integer, higher = better) and `emotion` (single word) are explicit, reserved keys. Scoreless steps render as cards but contribute no curve point.
2305
+
2306
+ ```
2307
+ Compare specs score: 4
2308
+ Hit error score: 1, emotion: Frustrated
2309
+ Got resolution score: 5, emotion: Relieved, ch: Mobile
2310
+ Browsed casually // no score = no curve point
2311
+ ```
2312
+
2313
+ - `score` outside 1–5, floats, or negatives → parse error.
2314
+ - Multi-word emotion labels (e.g. `emotion: Very Happy`) → parse error.
2315
+ - The legacy bare-score form (`Step | 4 Delighted`) is removed and emits `E_JOURNEY_BARE_SCORE_REMOVED`.
2316
+
2317
+ ### Reserved Metadata Keys
2318
+
2319
+ Six keys are reserved on step lines and indented annotation lines. `score` and `emotion` belong on the step line; the rest are typically indented under the step as their own lines.
2320
+
2321
+ | Key | Meaning | Render |
2322
+ |-----|---------|--------|
2323
+ | `score` | 1–5 integer | curve point + card intensity |
2324
+ | `emotion` | single-word label | emoji/label badge on the card |
2325
+ | `description` | general context | plain text under the card |
2326
+ | `pain` | pain point | red callout |
2327
+ | `opportunity` | improvement idea | green callout |
2328
+ | `thought` | inner monologue | italic callout |
2329
+
2330
+ Multiple annotations per step are allowed; each goes on its own indented line.
2331
+
2332
+ ```
2333
+ Forced account creation score: 1, emotion: Frustrated
2334
+ pain: Wants guest checkout
2335
+ pain: Password requirements too strict
2336
+ opportunity: Add social sign-in
2337
+ thought: This should not be this hard
2338
+ description: Spent ~4 minutes wrestling the form
2339
+ ```
2340
+
2341
+ ### Tag Groups
2342
+
2343
+ Standard tag blocks with aliases color the step cards by a categorical dimension (channel, device, persona segment, …). Reference the tag via its alias in step metadata.
2344
+
2345
+ ```
2346
+ tag Channel as ch
2347
+ Web blue
2348
+ Mobile purple
2349
+ Email teal
2350
+ In-Person green
2351
+
2352
+ [Research]
2353
+ Compare specs score: 4, ch: Web
2354
+ Ask friends score: 4, ch: In-Person
2355
+ ```
2356
+
2357
+ ### Directives
2358
+
2359
+ | Directive | Effect |
2360
+ |-----------|--------|
2361
+ | `active-tag GroupName` | Set the active tag group for step-card coloring |
2362
+ | `palette`, `theme` | Universal options |
2363
+
2364
+ ### Flat Mode
2365
+
2366
+ Omit `[Phase]` headers for a single horizontal strip:
2367
+
2368
+ ```
2369
+ journey-map Quick Feedback
2370
+
2371
+ Opened app score: 4
2372
+ Searched for feature score: 3
2373
+ Hit error score: 1, emotion: Frustrated
2374
+ pain: No helpful error message
2375
+ Contacted support score: 2
2376
+ Got resolution score: 5, emotion: Relieved
2377
+ ```
2378
+
2379
+ ### Rendering Notes
2380
+
2381
+ - Emotion curve is the hero — filled area chart with gradient (green above the 3 midline, red below).
2382
+ - Step cards tint by score (1=red → 5=green, palette-aware); phase headers tint to the phase's average score.
2383
+ - Sharp-drop zones (≥ 2 between consecutive scored steps) auto-accent.
2384
+ - Subtle horizontal grid lines at 1–5; score legend auto-generated.
2385
+
2386
+ ---
2387
+
2388
+ ## 23. Pyramid Diagrams
1844
2389
 
1845
2390
  Hierarchical pyramid visualization with stacked layers, descriptions, and optional per-layer color. Source order reads apex-first (top of file = top of pyramid).
1846
2391
 
@@ -1901,7 +2446,7 @@ When descriptions don't fit a layer's band the renderer wraps at the column edge
1901
2446
 
1902
2447
  ---
1903
2448
 
1904
- ## 21. Ring Diagrams
2449
+ ## 24. Ring Diagrams
1905
2450
 
1906
2451
  Concentric-ring visualization for nested or hierarchical categories. Source order reads core-out: top of file = innermost element (rendered as a filled disc), last line = outermost ring. Min 2 layers, max 15.
1907
2452
 
@@ -1968,7 +2513,7 @@ When ring band thickness would force the in-band label below the readable floor
1968
2513
 
1969
2514
  ---
1970
2515
 
1971
- ## 22. RACI Matrices (RACI / RASCI / DACI)
2516
+ ## 24A. RACI Matrices (RACI / RASCI / DACI)
1972
2517
 
1973
2518
  A tasks × roles responsibility matrix with author-time linting. **One chart type — `raci` — covers all three variants.** Variant is inferred from the markers used; an optional `variant-*` directive locks it explicitly.
1974
2519
 
@@ -2056,7 +2601,7 @@ Markers in cells are always **rendered in canonical alphabet order** (`R A C I`,
2056
2601
 
2057
2602
  ---
2058
2603
 
2059
- ## 23. Colon Usage Summary
2604
+ ## 25. Colon Usage Summary
2060
2605
 
2061
2606
  ### Constructs Where Colons Are REQUIRED
2062
2607
 
@@ -2112,3 +2657,88 @@ Markers in cells are always **rendered in canonical alphabet order** (`R A C I`,
2112
2657
  - Chart type declarations
2113
2658
  - Data rows for simple charts (space or comma delimited)
2114
2659
  - Structural syntax (groups, sections, arrows, comments)
2660
+
2661
+ ---
2662
+
2663
+ ## 26. Authoring Rules (Generators Read This First)
2664
+
2665
+ A consolidated checklist for generators. Following these prevents the most common parse errors. **LLMs generating DGMO: read this first.**
2666
+
2667
+ ### 26.1 Declare Before Reference
2668
+
2669
+ Every entity referenced by an edge or arrow target must be declared on a prior line, or inline at the reference site in chart types that allow it (e.g. PERT `-> name 1 2 4` is **not** supported — declare first, reference second).
2670
+
2671
+ ```
2672
+ // ❌ Sitemap: `Login` referenced before declaration
2673
+ Home
2674
+ -login-> Login
2675
+
2676
+ // ✅ Declare first
2677
+ Home
2678
+ Login
2679
+ Home -login-> Login
2680
+ ```
2681
+
2682
+ ### 26.2 Combine Metadata + Edges in One Declaration
2683
+
2684
+ Splitting a node into two declarations triggers a `Duplicate node` warning. Put metadata on the declaration line and indent edges below it.
2685
+
2686
+ ```
2687
+ // ❌ Duplicate-node warning
2688
+ API description: Main gateway
2689
+
2690
+ API
2691
+ -routes-> UserService
2692
+
2693
+ // ✅ Combined
2694
+ API description: Main gateway
2695
+ -routes-> UserService
2696
+ ```
2697
+
2698
+ ### 26.3 Scope of Universal-Looking Features
2699
+
2700
+ Some constructs *look* universal but are scoped to specific chart types. Don't transplant them across charts.
2701
+
2702
+ | Construct | Scope |
2703
+ |-----------|-------|
2704
+ | `collapsed: true` metadata | sequence, infra, mindmap, pert |
2705
+ | Same-line / indented metadata on declarations | all chart types except flowchart, state, data charts (§1.4) |
2706
+ | Trailing-keyword flag list | wireframe only (§19) |
2707
+ | `progress: <N>` key | gantt only (§13) |
2708
+ | `score: <N>` + `emotion: <Word>` keys | journey-map only (§22) |
2709
+ | `description: <text>` shorthand for layers | pyramid, ring (§23, §24) |
2710
+ | `milestone` keyword | **removed** — use `<name> 0` (§13A) |
2711
+ | `\|` operator as metadata delimiter | **removed** (§1.4). Surviving uses: wireframe `{A \| B}` braces, in-arrow `A -file\|name-> B`, quoted `"Order \| Items"` |
2712
+
2713
+ ### 26.4 Quoted Names + Aliases — Pick One
2714
+
2715
+ Quoted names cannot combine with `as <alias>` on the same line. If quoting only because of spaces, drop the quotes — bare names accept spaces. Reserve quoting for names with genuinely reserved characters (`|`, `:`).
2716
+
2717
+ ### 26.5 Sequence Participants Without `is a TYPE`
2718
+
2719
+ Standalone sequence participants accept only the bare-name form. For an alias or quoted name, declare with `is a <type>` (e.g. `is a person`). See spec §2.2b.
2720
+
2721
+ ### 26.6 Removed / Unsupported
2722
+
2723
+ Do NOT emit these — they're documented historically but no parser supports them:
2724
+
2725
+ - `milestone <name>` (PERT) — replaced by `<name> 0`
2726
+ - Inline forward-declaration of PERT edge targets (`-> name 1 2 4`) — declare first, reference second
2727
+ - `"Quoted Name" as alias` (any chart type) — drop quotes or drop alias
2728
+ - Standalone sequence participant `Name as a` (with metadata) without `is a TYPE` — use the typed form
2729
+ - The `|` operator as metadata delimiter — emits `E_PIPE_OPERATOR_REMOVED`. Use same-line or indented metadata per §1.4.
2730
+
2731
+ ### 26.7 Diagnostic-Free Checklist
2732
+
2733
+ Before considering DGMO output complete, mentally verify:
2734
+
2735
+ 1. Every edge target appears as a declaration on a prior line.
2736
+ 2. No entity is declared twice with conflicting metadata.
2737
+ 3. Metadata uses §1.4 — same-line `key: value, ...` after the name region, or indented `key: value` for reserved keys. No `|` delimiter anywhere except wireframe dropdowns, in-arrow label characters, and quoted name characters.
2738
+ 4. Wireframe flags are written as space-separated lowercase trailing keywords from the closed enum (§19).
2739
+ 5. Journey-map steps use `score: N, emotion: Word`; gantt tasks use `progress: N`; pyramid/ring layers use `description: <text>` (quote when the value contains commas).
2740
+ 6. All chart types use `collapsed: true` metadata for collapse (§26.3).
2741
+ 7. Quoted names don't carry `as <alias>` on the same line.
2742
+ 8. Sequence participants with alias or quoted names use `is a <type>`.
2743
+ 9. No `milestone` keyword in PERT — use `<name> 0`.
2744
+ 10. Tag declarations appear before the first non-tag content line.