@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.
- package/README.md +4 -4
- package/dist/advanced.cjs +5 -5
- package/dist/advanced.js +5 -5
- package/dist/auto.cjs +6 -6
- package/dist/auto.js +25 -25
- package/dist/auto.mjs +6 -6
- package/dist/cli.cjs +26 -26
- package/dist/index.cjs +5 -5
- package/dist/index.js +5 -5
- package/dist/internal.cjs +5 -5
- package/dist/internal.js +5 -5
- package/docs/language-reference.md +672 -42
- package/package.json +1 -1
- package/src/d3.ts +10 -7
- package/src/utils/legend-layout.ts +5 -2
|
@@ -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. [
|
|
28
|
+
18. [Mindmap Diagrams](#18-mindmap-diagrams)
|
|
27
29
|
19. [Wireframe Diagrams](#19-wireframe-diagrams)
|
|
28
|
-
20. [
|
|
29
|
-
21. [
|
|
30
|
-
22. [
|
|
31
|
-
23. [
|
|
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.
|
|
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
|
-
|
|
1815
|
+
mindmap Product Strategy
|
|
1649
1816
|
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
Assess
|
|
1654
|
-
Hold
|
|
1817
|
+
tag Priority as p
|
|
1818
|
+
High red
|
|
1819
|
+
Low green
|
|
1655
1820
|
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
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
|
-
|
|
1662
|
-
|
|
1663
|
-
Webpack ring: Hold, trend: down
|
|
1835
|
+
```
|
|
1836
|
+
mindmap [Title]
|
|
1664
1837
|
```
|
|
1665
1838
|
|
|
1666
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1843
|
+
```
|
|
1844
|
+
mindmap
|
|
1671
1845
|
|
|
1672
|
-
|
|
1846
|
+
Q1 Goals
|
|
1847
|
+
Ship MVP
|
|
1848
|
+
Q2 Goals
|
|
1849
|
+
Launch marketing
|
|
1850
|
+
```
|
|
1673
1851
|
|
|
1674
|
-
|
|
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
|
-
|
|
1857
|
+
mindmap Root
|
|
1858
|
+
Branch A
|
|
1859
|
+
Leaf A1
|
|
1860
|
+
Leaf A2
|
|
1861
|
+
Branch B
|
|
1678
1862
|
```
|
|
1679
1863
|
|
|
1680
|
-
|
|
1864
|
+
### Descriptions
|
|
1681
1865
|
|
|
1682
|
-
|
|
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
|
-
|
|
1868
|
+
```
|
|
1869
|
+
mindmap Onboarding
|
|
1685
1870
|
|
|
1686
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1900
|
+
### Node color
|
|
1695
1901
|
|
|
1696
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1702
|
-
|
|
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
|
-
###
|
|
1926
|
+
### Options
|
|
1706
1927
|
|
|
1707
|
-
|
|
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.
|
|
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
|
-
##
|
|
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
|
-
##
|
|
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
|
-
##
|
|
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.
|