agentic-mermaid 0.1.1 → 0.2.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.
Files changed (340) hide show
  1. package/AGENT_NATIVE.md +155 -91
  2. package/CHANGELOG.md +163 -4
  3. package/Instructions_for_agents.md +10 -10
  4. package/LICENSES/Apache-2.0.txt +202 -0
  5. package/README.md +31 -38
  6. package/THIRD_PARTY_NOTICES.md +29 -0
  7. package/assets/hero.png +0 -0
  8. package/dist/agent-core.d.ts +463 -0
  9. package/dist/agent-core.js +397 -0
  10. package/dist/agent.d.ts +73 -1868
  11. package/dist/agent.js +336 -37325
  12. package/dist/agentic-mermaid-mcp.js +7 -38399
  13. package/dist/am.js +33626 -40446
  14. package/dist/chunk-2P5FKUQC.js +3485 -0
  15. package/dist/chunk-2S3VSS6I.js +149 -0
  16. package/dist/chunk-2SILJDW2.js +37 -0
  17. package/dist/chunk-BJYMBT4I.js +61963 -0
  18. package/dist/chunk-FDM43XU7.js +615 -0
  19. package/dist/chunk-MYPDVZCO.js +4702 -0
  20. package/dist/index-DWPa2MJs.d.ts +6780 -0
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.js +310 -33014
  23. package/dist/mcp-cli-5J47WEY3.js +17 -0
  24. package/docs/README.md +39 -31
  25. package/docs/agent-api-cookbook.md +44 -35
  26. package/docs/agent-mutation-policy.md +1 -1
  27. package/docs/agent-workflow-examples.md +2 -2
  28. package/docs/api.md +284 -77
  29. package/docs/ascii.md +26 -16
  30. package/docs/code-mode-impact.md +214 -0
  31. package/docs/comparison.md +23 -11
  32. package/docs/computational-aesthetics-prototype-plan.md +252 -0
  33. package/docs/config.md +26 -10
  34. package/docs/custom-fonts.md +265 -0
  35. package/docs/custom-style-cookbook.md +130 -9
  36. package/docs/diagram-families.md +48 -23
  37. package/docs/features.md +59 -52
  38. package/docs/fork-differences.md +6 -3
  39. package/docs/getting-started.md +23 -16
  40. package/docs/issue-derived-test-cases.md +29 -22
  41. package/docs/mcp-code-mode-rationale.md +13 -6
  42. package/docs/mcp-http-transport.md +20 -13
  43. package/docs/mermaid-layout-complaints.md +66 -52
  44. package/docs/mutation-testing.md +145 -66
  45. package/docs/quality.md +23 -14
  46. package/docs/react.md +2 -2
  47. package/docs/schemas/style-spec.schema.json +1221 -30
  48. package/docs/style-authoring.md +241 -38
  49. package/docs/svg-semantic-contract.md +49 -0
  50. package/docs/testing-strategy.md +166 -58
  51. package/docs/theming.md +19 -32
  52. package/examples/styles/catalog.json +54 -0
  53. package/examples/styles/cloudflare-workers-inspired-prototype.mmd +9 -0
  54. package/examples/styles/cloudflare-workers-inspired-prototype.style.json +110 -0
  55. package/examples/styles/cupertino-prototype.mmd +10 -0
  56. package/examples/styles/cupertino-prototype.style.json +63 -0
  57. package/examples/styles/mid-century-report.style.json +2 -2
  58. package/examples/styles/star-chart-atlas.style.json +2 -1
  59. package/examples/styles/transit-route-map.style.json +2 -2
  60. package/examples/styles/vercel-inspired-prototype.mmd +6 -0
  61. package/examples/styles/vercel-inspired-prototype.style.json +87 -0
  62. package/package.json +85 -45
  63. package/server.json +2 -2
  64. package/skills/agentic-mermaid-diagram-workflow/SKILL.md +17 -36
  65. package/skills/agentic-mermaid-diagram-workflow/references/cli.md +4 -5
  66. package/skills/agentic-mermaid-diagram-workflow/references/code-mode.md +15 -31
  67. package/skills/agentic-mermaid-diagram-workflow/references/sequence.md +10 -14
  68. package/skills/agentic-mermaid-live-editor/SKILL.md +100 -206
  69. package/TODO.md +0 -684
  70. package/dist/index-wjRjbsP-.d.ts +0 -1102
  71. package/docs/assets/improvements/box-start-connector.png +0 -0
  72. package/docs/assets/improvements/comment-dropped-lint.png +0 -0
  73. package/docs/assets/improvements/er-content-loss.png +0 -0
  74. package/docs/assets/improvements/fan-in-trunks.png +0 -0
  75. package/docs/assets/improvements/gantt-family.png +0 -0
  76. package/docs/assets/improvements/gantt-milestone-clamp.png +0 -0
  77. package/docs/assets/improvements/gantt-verify-seam.png +0 -0
  78. package/docs/assets/improvements/subgraph-container-edges.png +0 -0
  79. package/docs/assets/improvements/wrapper-frontmatter.png +0 -0
  80. package/docs/assets/improvements/wrapper-init-directive.png +0 -0
  81. package/docs/assets/improvements/wrapper-leading-comment.png +0 -0
  82. package/docs/assets/style-cookbook/mid-century-report.png +0 -0
  83. package/docs/assets/style-cookbook/star-chart-atlas.png +0 -0
  84. package/docs/assets/style-cookbook/transit-route-map.png +0 -0
  85. package/docs/contributing/adding-diagram-types.md +0 -144
  86. package/docs/contributing/diagram-family-citizenship.matrix.json +0 -2127
  87. package/docs/contributing/diagram-family-citizenship.md +0 -82
  88. package/docs/contributing/harvesting-upstream-tests.md +0 -126
  89. package/docs/contributing/lessons-learned.md +0 -276
  90. package/docs/contributing/releasing.md +0 -82
  91. package/docs/contributing/visual-review-evidence.md +0 -53
  92. package/docs/design/families/README.md +0 -26
  93. package/docs/design/families/architecture-beta.md +0 -48
  94. package/docs/design/families/flowchart-parser-conformance.md +0 -22
  95. package/docs/design/families/gantt-research.md +0 -137
  96. package/docs/design/families/gantt.md +0 -329
  97. package/docs/design/families/journey-agentic-cards-before.png +0 -0
  98. package/docs/design/families/journey-experience-curve-implementation.png +0 -0
  99. package/docs/design/families/journey-mermaid-classic-implementation.png +0 -0
  100. package/docs/design/families/journey-mermaid-classic-prototype.png +0 -0
  101. package/docs/design/families/journey-mermaid-classic-prototype.svg +0 -163
  102. package/docs/design/families/journey-mermaid-classic-prototype.svg.png +0 -0
  103. package/docs/design/families/journey-migration-parity.md +0 -439
  104. package/docs/design/families/journey-section-overlap-after.png +0 -0
  105. package/docs/design/families/journey-section-overlap-before.png +0 -0
  106. package/docs/design/families/journey-usage-research.md +0 -423
  107. package/docs/design/families/journey.md +0 -153
  108. package/docs/design/families/xychart.md +0 -85
  109. package/docs/design/system/README.md +0 -45
  110. package/docs/design/system/abstraction-audit.md +0 -224
  111. package/docs/design/system/abstraction-recommendations.md +0 -655
  112. package/docs/design/system/architecture.mmd +0 -29
  113. package/docs/design/system/architecture.svg +0 -137
  114. package/docs/design/system/layout-guarantees-and-robustness.md +0 -351
  115. package/docs/design/system/layout-rubric.md +0 -138
  116. package/docs/design/system/route-contracts.md +0 -848
  117. package/docs/design/system/source-preservation-ladder.md +0 -52
  118. package/docs/design/system/styles-rollout.md +0 -216
  119. package/docs/design/system/ugly-layouts.md +0 -119
  120. package/docs/layout-characterization/README.md +0 -245
  121. package/docs/layout-characterization/contact-sheet-families.md +0 -498
  122. package/docs/layout-characterization/contact-sheet.md +0 -638
  123. package/docs/layout-characterization/properties.md +0 -281
  124. package/docs/layout-characterization/visual-quality.md +0 -160
  125. package/docs/layout-characterization/visual-snapshots/architecture.svg +0 -79
  126. package/docs/layout-characterization/visual-snapshots/class.svg +0 -60
  127. package/docs/layout-characterization/visual-snapshots/er.svg +0 -61
  128. package/docs/layout-characterization/visual-snapshots/flowchart.svg +0 -58
  129. package/docs/layout-characterization/visual-snapshots/gantt.svg +0 -52
  130. package/docs/layout-characterization/visual-snapshots/journey.svg +0 -98
  131. package/docs/layout-characterization/visual-snapshots/pie.svg +0 -36
  132. package/docs/layout-characterization/visual-snapshots/quadrant.svg +0 -47
  133. package/docs/layout-characterization/visual-snapshots/sequence.svg +0 -59
  134. package/docs/layout-characterization/visual-snapshots/state.svg +0 -52
  135. package/docs/layout-characterization/visual-snapshots/timeline.svg +0 -64
  136. package/docs/layout-characterization/visual-snapshots/xychart.svg +0 -97
  137. package/docs/project/divergences.md +0 -98
  138. package/docs/project/dogfooding-docs-strategy.md +0 -66
  139. package/docs/project/hosted-mcp-cloudflare-plan.md +0 -338
  140. package/docs/project/lessons-learned.md +0 -1019
  141. package/docs/project/remove-role-styling-plan.md +0 -176
  142. package/examples/agent-improve-auth-flow.ts +0 -206
  143. package/examples/agent-loop.ts +0 -53
  144. package/examples/mcp-vs-cli-complex-diagrams.ts +0 -133
  145. package/llms.txt +0 -104
  146. package/skill-evals/README.md +0 -77
  147. package/skill-evals/fixtures/architecture-cache/input.mmd +0 -5
  148. package/skill-evals/fixtures/class-payment/input.mmd +0 -4
  149. package/skill-evals/fixtures/er-orders/input.mmd +0 -10
  150. package/skill-evals/fixtures/flowchart-cache/input.mmd +0 -3
  151. package/skill-evals/fixtures/gantt-release/input.mmd +0 -7
  152. package/skill-evals/fixtures/journey-checkout/input.mmd +0 -6
  153. package/skill-evals/fixtures/pie-exports/input.mmd +0 -5
  154. package/skill-evals/fixtures/quadrant-priorities/input.mmd +0 -11
  155. package/skill-evals/fixtures/sequence-retry/input.mmd +0 -8
  156. package/skill-evals/fixtures/state-lifecycle/input.mmd +0 -5
  157. package/skill-evals/fixtures/timeline-release/input.mmd +0 -6
  158. package/skill-evals/fixtures/xychart-growth/input.mmd +0 -5
  159. package/skill-evals/shared-benchmark.json +0 -510
  160. package/src/agent/analyze.ts +0 -157
  161. package/src/agent/apply.ts +0 -146
  162. package/src/agent/architecture-body.ts +0 -458
  163. package/src/agent/certificates.ts +0 -110
  164. package/src/agent/class-body.ts +0 -319
  165. package/src/agent/core.ts +0 -207
  166. package/src/agent/create.ts +0 -106
  167. package/src/agent/describe.ts +0 -368
  168. package/src/agent/er-body.ts +0 -224
  169. package/src/agent/facts.ts +0 -360
  170. package/src/agent/families-builtin.ts +0 -920
  171. package/src/agent/families.ts +0 -232
  172. package/src/agent/family-layouts.ts +0 -832
  173. package/src/agent/flowchart-body.ts +0 -372
  174. package/src/agent/flowchart-unsupported.ts +0 -243
  175. package/src/agent/font-coverage.ts +0 -288
  176. package/src/agent/gantt-body.ts +0 -495
  177. package/src/agent/index.ts +0 -10
  178. package/src/agent/journey-body.ts +0 -374
  179. package/src/agent/label-metrics.ts +0 -28
  180. package/src/agent/layout-to-rendered.ts +0 -63
  181. package/src/agent/mutate.ts +0 -97
  182. package/src/agent/mutation-ops.ts +0 -51
  183. package/src/agent/op-schema.ts +0 -443
  184. package/src/agent/parse.ts +0 -223
  185. package/src/agent/pie-body.ts +0 -270
  186. package/src/agent/png.ts +0 -171
  187. package/src/agent/quadrant-body.ts +0 -336
  188. package/src/agent/quality.ts +0 -363
  189. package/src/agent/readability-audit.ts +0 -92
  190. package/src/agent/rendered-route-audit.ts +0 -61
  191. package/src/agent/sequence-body.ts +0 -345
  192. package/src/agent/serialize.ts +0 -214
  193. package/src/agent/state-body.ts +0 -589
  194. package/src/agent/structural-count.ts +0 -150
  195. package/src/agent/timeline-body.ts +0 -280
  196. package/src/agent/trace-log.ts +0 -43
  197. package/src/agent/types.ts +0 -995
  198. package/src/agent/verify.ts +0 -603
  199. package/src/agent/xychart-body.ts +0 -472
  200. package/src/architecture/config.ts +0 -282
  201. package/src/architecture/layout.ts +0 -496
  202. package/src/architecture/parser.ts +0 -375
  203. package/src/architecture/renderer.ts +0 -611
  204. package/src/architecture/types.ts +0 -113
  205. package/src/ascii/ansi.ts +0 -423
  206. package/src/ascii/architecture.ts +0 -210
  207. package/src/ascii/canvas.ts +0 -443
  208. package/src/ascii/class-diagram.ts +0 -697
  209. package/src/ascii/converter.ts +0 -475
  210. package/src/ascii/draw.ts +0 -1693
  211. package/src/ascii/edge-bundling.ts +0 -328
  212. package/src/ascii/edge-routing.ts +0 -330
  213. package/src/ascii/er-diagram.ts +0 -439
  214. package/src/ascii/gantt.ts +0 -276
  215. package/src/ascii/grid.ts +0 -747
  216. package/src/ascii/index.ts +0 -196
  217. package/src/ascii/journey.ts +0 -169
  218. package/src/ascii/meta.ts +0 -244
  219. package/src/ascii/multiline-utils.ts +0 -80
  220. package/src/ascii/pathfinder.ts +0 -301
  221. package/src/ascii/pie.ts +0 -67
  222. package/src/ascii/quadrant.ts +0 -158
  223. package/src/ascii/reverse.ts +0 -216
  224. package/src/ascii/sequence.ts +0 -499
  225. package/src/ascii/shapes/circle.ts +0 -27
  226. package/src/ascii/shapes/corners.ts +0 -143
  227. package/src/ascii/shapes/diamond.ts +0 -27
  228. package/src/ascii/shapes/hexagon.ts +0 -27
  229. package/src/ascii/shapes/index.ts +0 -106
  230. package/src/ascii/shapes/rectangle.ts +0 -168
  231. package/src/ascii/shapes/rounded.ts +0 -27
  232. package/src/ascii/shapes/special.ts +0 -332
  233. package/src/ascii/shapes/stadium.ts +0 -110
  234. package/src/ascii/shapes/state.ts +0 -192
  235. package/src/ascii/shapes/types.ts +0 -73
  236. package/src/ascii/timeline.ts +0 -141
  237. package/src/ascii/types.ts +0 -312
  238. package/src/ascii/validate.ts +0 -120
  239. package/src/ascii/width.ts +0 -81
  240. package/src/ascii/wrap.ts +0 -131
  241. package/src/ascii/xychart.ts +0 -919
  242. package/src/browser.ts +0 -29
  243. package/src/class/layout.ts +0 -240
  244. package/src/class/parser.ts +0 -332
  245. package/src/class/renderer.ts +0 -638
  246. package/src/class/types.ts +0 -129
  247. package/src/cli/agent-instructions.ts +0 -1
  248. package/src/cli/am-bin.ts +0 -6
  249. package/src/cli/exit-codes.ts +0 -18
  250. package/src/cli/index.ts +0 -1132
  251. package/src/cli/init-agent.ts +0 -147
  252. package/src/cli/run-entrypoint.ts +0 -10
  253. package/src/color-resolver.ts +0 -152
  254. package/src/elk-instance.ts +0 -114
  255. package/src/er/layout.ts +0 -187
  256. package/src/er/parser.ts +0 -226
  257. package/src/er/renderer.ts +0 -792
  258. package/src/er/types.ts +0 -99
  259. package/src/family-rubric.ts +0 -425
  260. package/src/font-manifest.ts +0 -31
  261. package/src/gantt/layout.ts +0 -365
  262. package/src/gantt/parser.ts +0 -282
  263. package/src/gantt/pipeline.ts +0 -27
  264. package/src/gantt/renderer.ts +0 -414
  265. package/src/gantt/schedule.ts +0 -513
  266. package/src/gantt/types.ts +0 -255
  267. package/src/index.ts +0 -368
  268. package/src/journey/layout.ts +0 -554
  269. package/src/journey/parse-core.ts +0 -251
  270. package/src/journey/parser.ts +0 -101
  271. package/src/journey/renderer.ts +0 -917
  272. package/src/journey/types.ts +0 -144
  273. package/src/layout/geometry.ts +0 -182
  274. package/src/layout/pass.ts +0 -142
  275. package/src/layout/passes/index.ts +0 -3916
  276. package/src/layout-engine.ts +0 -1565
  277. package/src/layout-rubric.ts +0 -659
  278. package/src/mcp/artifacts.ts +0 -137
  279. package/src/mcp/dynamic-harness.ts +0 -31
  280. package/src/mcp/dynamic-modules.d.ts +0 -7
  281. package/src/mcp/facade.ts +0 -608
  282. package/src/mcp/harness-runtime.ts +0 -203
  283. package/src/mcp/hosted-server.ts +0 -468
  284. package/src/mcp/mcp-bin.ts +0 -3
  285. package/src/mcp/mcp-cli.ts +0 -82
  286. package/src/mcp/protocol.ts +0 -13
  287. package/src/mcp/sandbox.ts +0 -195
  288. package/src/mcp/sdk-decl.ts +0 -391
  289. package/src/mcp/server.ts +0 -362
  290. package/src/mcp/tool-surface.ts +0 -146
  291. package/src/mermaid-source.ts +0 -655
  292. package/src/multiline-utils.ts +0 -228
  293. package/src/parser.ts +0 -1031
  294. package/src/pie/layout.ts +0 -168
  295. package/src/pie/parser.ts +0 -136
  296. package/src/pie/renderer.ts +0 -234
  297. package/src/pie/types.ts +0 -82
  298. package/src/quadrant/layout.ts +0 -191
  299. package/src/quadrant/parser.ts +0 -183
  300. package/src/quadrant/renderer.ts +0 -322
  301. package/src/quadrant/types.ts +0 -113
  302. package/src/render-family-hooks.ts +0 -244
  303. package/src/renderer.ts +0 -1099
  304. package/src/route-contracts.ts +0 -2723
  305. package/src/scene/backend.ts +0 -76
  306. package/src/scene/fidelity.ts +0 -183
  307. package/src/scene/hybrid-backend.ts +0 -174
  308. package/src/scene/ir.ts +0 -181
  309. package/src/scene/marks.ts +0 -127
  310. package/src/scene/rough-backend.ts +0 -378
  311. package/src/scene/seed.ts +0 -46
  312. package/src/scene/style-registry.ts +0 -556
  313. package/src/sequence/layout.ts +0 -456
  314. package/src/sequence/parser.ts +0 -255
  315. package/src/sequence/renderer.ts +0 -604
  316. package/src/sequence/types.ts +0 -154
  317. package/src/shape-clipping.ts +0 -351
  318. package/src/shared/accessibility-directives.ts +0 -22
  319. package/src/shared/batched.ts +0 -61
  320. package/src/shared/color-math.ts +0 -93
  321. package/src/shared/svg-a11y.ts +0 -29
  322. package/src/shared/syntax-error.ts +0 -17
  323. package/src/shared/unicode-ranges.ts +0 -135
  324. package/src/styles.ts +0 -318
  325. package/src/svg-paths.ts +0 -28
  326. package/src/text-metrics.ts +0 -248
  327. package/src/theme.ts +0 -710
  328. package/src/timeline/layout.ts +0 -381
  329. package/src/timeline/parser.ts +0 -215
  330. package/src/timeline/renderer.ts +0 -538
  331. package/src/timeline/types.ts +0 -105
  332. package/src/types.ts +0 -462
  333. package/src/website-worker-modules.d.ts +0 -18
  334. package/src/xychart/axis-utils.ts +0 -109
  335. package/src/xychart/colors.ts +0 -124
  336. package/src/xychart/config.ts +0 -88
  337. package/src/xychart/layout.ts +0 -656
  338. package/src/xychart/parser.ts +0 -504
  339. package/src/xychart/renderer.ts +0 -640
  340. package/src/xychart/types.ts +0 -282
@@ -1,163 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="1120" height="640" viewBox="0 0 1120 640" role="img" aria-labelledby="title desc">
2
- <title id="title">Mermaid-style Journey diagram prototype</title>
3
- <desc id="desc">A prototype Journey diagram using Mermaid's visual metaphor: actor legend at left, horizontal section spans, task boxes in source order, score-positioned sentiment marks, and a forward baseline.</desc>
4
- <defs>
5
- <marker id="arrowhead" markerWidth="10" markerHeight="8" refX="9" refY="4" orient="auto">
6
- <path d="M0,0 L10,4 L0,8 Z" fill="#4b5563" />
7
- </marker>
8
- <filter id="softShadow" x="-10%" y="-10%" width="120%" height="130%">
9
- <feDropShadow dx="0" dy="2" stdDeviation="2" flood-color="#111827" flood-opacity="0.12" />
10
- </filter>
11
- <style>
12
- .bg { fill: #fffdfb; }
13
- .title { fill: #1f2937; font: 700 24px system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
14
- .subtitle { fill: #6b7280; font: 500 12px system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
15
- .legend-title { fill: #374151; font: 700 13px system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
16
- .legend-label { fill: #374151; font: 500 13px system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
17
- .section-label { fill: #1f2937; font: 700 14px system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
18
- .task { fill: #ffffff; stroke: #cbd5e1; stroke-width: 1.2; filter: url(#softShadow); }
19
- .task-label { fill: #1f2937; font: 650 13px system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
20
- .task-meta { fill: #6b7280; font: 500 11px system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
21
- .track { stroke: #cbd5e1; stroke-width: 1.2; stroke-dasharray: 4 6; }
22
- .guide { stroke: #e5e7eb; stroke-width: 1; }
23
- .score-label { fill: #9ca3af; font: 600 10px system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
24
- .baseline { stroke: #4b5563; stroke-width: 2.2; marker-end: url(#arrowhead); }
25
- .face { fill: #facc15; stroke: #8a6d1d; stroke-width: 1.2; }
26
- .face-eye { fill: #3f3f46; }
27
- .face-mouth { fill: none; stroke: #3f3f46; stroke-width: 1.6; stroke-linecap: round; }
28
- .section-discover { fill: #e8f3ff; stroke: #93c5fd; }
29
- .section-try { fill: #eaf7ee; stroke: #86efac; }
30
- .section-recover { fill: #fff0dd; stroke: #fdba74; }
31
- .actor-user { fill: #2563eb; }
32
- .actor-support { fill: #16a34a; }
33
- .actor-ops { fill: #d97706; }
34
- </style>
35
- </defs>
36
-
37
- <rect class="bg" x="0" y="0" width="1120" height="640" />
38
- <text class="title" x="220" y="42">Checkout support journey</text>
39
- <text class="subtitle" x="220" y="64">Mermaid-style score curve, not task cards</text>
40
-
41
- <g aria-label="Actor legend">
42
- <text class="legend-title" x="40" y="122">Actors</text>
43
- <circle class="actor-user" cx="48" cy="148" r="6" />
44
- <text class="legend-label" x="66" y="153">User</text>
45
- <circle class="actor-support" cx="48" cy="176" r="6" />
46
- <text class="legend-label" x="66" y="181">Support</text>
47
- <circle class="actor-ops" cx="48" cy="204" r="6" />
48
- <text class="legend-label" x="66" y="209">Ops</text>
49
- </g>
50
-
51
- <g aria-label="Section spans">
52
- <rect class="section-discover" x="210" y="84" width="294" height="52" rx="6" />
53
- <text class="section-label" x="357" y="116" text-anchor="middle">Discover</text>
54
- <rect class="section-try" x="510" y="84" width="294" height="52" rx="6" />
55
- <text class="section-label" x="657" y="116" text-anchor="middle">Try</text>
56
- <rect class="section-recover" x="810" y="84" width="294" height="52" rx="6" />
57
- <text class="section-label" x="957" y="116" text-anchor="middle">Recover</text>
58
- </g>
59
-
60
- <g aria-label="Score guide">
61
- <line class="guide" x1="198" y1="294" x2="1084" y2="294" />
62
- <line class="guide" x1="198" y1="334" x2="1084" y2="334" />
63
- <line class="guide" x1="198" y1="374" x2="1084" y2="374" />
64
- <line class="guide" x1="198" y1="414" x2="1084" y2="414" />
65
- <line class="guide" x1="198" y1="454" x2="1084" y2="454" />
66
- <text class="score-label" x="176" y="298">5</text>
67
- <text class="score-label" x="176" y="338">4</text>
68
- <text class="score-label" x="176" y="378">3</text>
69
- <text class="score-label" x="176" y="418">2</text>
70
- <text class="score-label" x="176" y="458">1</text>
71
- </g>
72
-
73
- <line class="baseline" x1="200" y1="512" x2="1084" y2="512" />
74
-
75
- <g aria-label="Tasks">
76
- <g transform="translate(220 166)">
77
- <rect class="task" x="0" y="0" width="124" height="72" rx="5" />
78
- <text class="task-label" x="62" y="27" text-anchor="middle">Find docs</text>
79
- <text class="task-meta" x="62" y="49" text-anchor="middle">score 4</text>
80
- <circle class="actor-user" cx="54" cy="61" r="4" />
81
- <line class="track" x1="62" y1="74" x2="62" y2="346" />
82
- </g>
83
- <g transform="translate(370 166)">
84
- <rect class="task" x="0" y="0" width="124" height="72" rx="5" />
85
- <text class="task-label" x="62" y="27" text-anchor="middle">Choose setup</text>
86
- <text class="task-meta" x="62" y="49" text-anchor="middle">score 3</text>
87
- <circle class="actor-user" cx="47" cy="61" r="4" />
88
- <circle class="actor-support" cx="62" cy="61" r="4" />
89
- <line class="track" x1="62" y1="74" x2="62" y2="346" />
90
- </g>
91
- <g transform="translate(520 166)">
92
- <rect class="task" x="0" y="0" width="124" height="72" rx="5" />
93
- <text class="task-label" x="62" y="27" text-anchor="middle">Run install</text>
94
- <text class="task-meta" x="62" y="49" text-anchor="middle">score 2</text>
95
- <circle class="actor-user" cx="47" cy="61" r="4" />
96
- <circle class="actor-ops" cx="62" cy="61" r="4" />
97
- <line class="track" x1="62" y1="74" x2="62" y2="346" />
98
- </g>
99
- <g transform="translate(670 166)">
100
- <rect class="task" x="0" y="0" width="124" height="72" rx="5" />
101
- <text class="task-label" x="62" y="27" text-anchor="middle">First render</text>
102
- <text class="task-meta" x="62" y="49" text-anchor="middle">score 5</text>
103
- <circle class="actor-user" cx="54" cy="61" r="4" />
104
- <line class="track" x1="62" y1="74" x2="62" y2="346" />
105
- </g>
106
- <g transform="translate(820 166)">
107
- <rect class="task" x="0" y="0" width="124" height="72" rx="5" />
108
- <text class="task-label" x="62" y="27" text-anchor="middle">Hit error</text>
109
- <text class="task-meta" x="62" y="49" text-anchor="middle">score 1</text>
110
- <circle class="actor-user" cx="47" cy="61" r="4" />
111
- <circle class="actor-support" cx="62" cy="61" r="4" />
112
- <line class="track" x1="62" y1="74" x2="62" y2="346" />
113
- </g>
114
- <g transform="translate(970 166)">
115
- <rect class="task" x="0" y="0" width="124" height="72" rx="5" />
116
- <text class="task-label" x="62" y="27" text-anchor="middle">Recover flow</text>
117
- <text class="task-meta" x="62" y="49" text-anchor="middle">score 4</text>
118
- <circle class="actor-user" cx="39" cy="61" r="4" />
119
- <circle class="actor-support" cx="54" cy="61" r="4" />
120
- <circle class="actor-ops" cx="69" cy="61" r="4" />
121
- <line class="track" x1="62" y1="74" x2="62" y2="346" />
122
- </g>
123
- </g>
124
-
125
- <g aria-label="Score markers">
126
- <g transform="translate(282 334)">
127
- <circle class="face" cx="0" cy="0" r="18" />
128
- <circle class="face-eye" cx="-6" cy="-5" r="2" />
129
- <circle class="face-eye" cx="6" cy="-5" r="2" />
130
- <path class="face-mouth" d="M-8,5 Q0,12 8,5" />
131
- </g>
132
- <g transform="translate(432 374)">
133
- <circle class="face" cx="0" cy="0" r="18" />
134
- <circle class="face-eye" cx="-6" cy="-5" r="2" />
135
- <circle class="face-eye" cx="6" cy="-5" r="2" />
136
- <path class="face-mouth" d="M-8,6 L8,6" />
137
- </g>
138
- <g transform="translate(582 414)">
139
- <circle class="face" cx="0" cy="0" r="18" />
140
- <circle class="face-eye" cx="-6" cy="-5" r="2" />
141
- <circle class="face-eye" cx="6" cy="-5" r="2" />
142
- <path class="face-mouth" d="M-8,10 Q0,2 8,10" />
143
- </g>
144
- <g transform="translate(732 294)">
145
- <circle class="face" cx="0" cy="0" r="18" />
146
- <circle class="face-eye" cx="-6" cy="-5" r="2" />
147
- <circle class="face-eye" cx="6" cy="-5" r="2" />
148
- <path class="face-mouth" d="M-9,4 Q0,14 9,4" />
149
- </g>
150
- <g transform="translate(882 454)">
151
- <circle class="face" cx="0" cy="0" r="18" />
152
- <circle class="face-eye" cx="-6" cy="-5" r="2" />
153
- <circle class="face-eye" cx="6" cy="-5" r="2" />
154
- <path class="face-mouth" d="M-9,11 Q0,0 9,11" />
155
- </g>
156
- <g transform="translate(1032 334)">
157
- <circle class="face" cx="0" cy="0" r="18" />
158
- <circle class="face-eye" cx="-6" cy="-5" r="2" />
159
- <circle class="face-eye" cx="6" cy="-5" r="2" />
160
- <path class="face-mouth" d="M-8,5 Q0,12 8,5" />
161
- </g>
162
- </g>
163
- </svg>
@@ -1,439 +0,0 @@
1
- # Journey Migration Parity Spec
2
-
3
- Status: implemented — SVG visual metaphor (now with the experience-curve line
4
- and tiled section spans), shared parse core with typed opaque reasons,
5
- structured accessibility/literal text parity, semicolon statement parity,
6
- marker namespacing, ASCII width handling (grapheme-safe), style/palette/config
7
- coverage with WCAG-guarded section labels, and the Describe/Facts/Verify spec
8
- below. The elevation PR's description records why the first implementation's
9
- safeguards missed and what now enforces them.
10
- Last reviewed: 2026-07-10
11
- Issue: https://github.com/adewale/agentic-mermaid/issues/128
12
- Origin: https://github.com/adewale/agentic-mermaid/pull/6
13
- Research: [`journey-usage-research.md`](./journey-usage-research.md)
14
-
15
- ## Problem
16
-
17
- Journey diagrams had two different gaps that were easy to conflate:
18
-
19
- 1. Some Mermaid Journey syntax was parsed by the renderer path but still caused
20
- the agent structured parser to fall back to opaque source preservation.
21
- 2. Agentic Mermaid's previous Journey SVG used a card-based visual language,
22
- while Mermaid's native Journey renderer uses a timeline-like experience curve.
23
-
24
- The first gap was a correctness and migration-support issue. The second is a
25
- visual parity issue. Pre-launch, we do not need to preserve the previous
26
- card-based Journey layout as public behavior. The chosen direction is to make
27
- Mermaid's Journey visual metaphor the default public renderer.
28
-
29
- ## Origin
30
-
31
- Journey support was not originally requested through a tracked Agentic Mermaid
32
- issue. It landed in
33
- [`#6`](https://github.com/adewale/agentic-mermaid/pull/6), whose PR body says:
34
- there was "no tracked issue in this fork for the change." The immediate
35
- trigger was that Mermaid `journey` input failed with:
36
-
37
- ```text
38
- Invalid mermaid header: "journey"
39
- ```
40
-
41
- So the original implementation solved family coverage first: parse Mermaid
42
- Journey syntax, route it through SVG and ASCII rendering, preserve accessibility
43
- metadata, and add tests. The visual model was then made to fit the library's
44
- existing card-like house style. That is where the implementation diverged from
45
- Mermaid's own Journey metaphor.
46
-
47
- ## Goals
48
-
49
- - Preserve Mermaid Journey syntax as structured data whenever the syntax is part
50
- of Mermaid's documented Journey grammar.
51
- - Make parser failures explainable instead of silently collapsing to opaque.
52
- - Make `describe`, facts, verification, and ASCII output expose the same Journey
53
- semantics that the SVG renderer consumes.
54
- - Make the public SVG Journey renderer use Mermaid's Journey visual metaphor:
55
- a left-to-right experience curve with section spans, actor legend, actor
56
- dots, score-positioned sentiment marks, and a progression baseline.
57
- - Treat the current card layout as an implementation artifact unless we later
58
- choose to expose it as an explicitly named alternate look.
59
-
60
- ## Current Syntax Support Snapshot
61
-
62
- Agentic Mermaid now supports the documented Mermaid Journey grammar in both the
63
- renderer parser and the structured agent parser:
64
-
65
- - `journey` header;
66
- - `title ...`;
67
- - `accTitle: ...`;
68
- - inline `accDescr: ...`;
69
- - block `accDescr { ... }` and `accDescr: { ... }`;
70
- - `section ...`;
71
- - task lines in the documented form `Task name: <score>: <actor>, <actor>`;
72
- - task lines without actors, which Mermaid accepts in practice;
73
- - comments, YAML frontmatter, and `%%{init: ...}%%` / `%%{initialize: ...}%%`
74
- directives before parsing;
75
- - `<br>` / `<br/>` label normalization for title, section, task, and actor
76
- text;
77
- - title/accessibility-only Journey header furniture.
78
-
79
- Mermaid's official docs define the score as an integer from 1 through 5. The
80
- parser enforces that range rather than accepting Mermaid's currently buggy
81
- out-of-range face placement behavior.
82
-
83
- The implementation also accepts the current Mermaid `JourneyDiagramConfig`
84
- shape:
85
-
86
- - margins and sizing: `diagramMarginX`, `diagramMarginY`, `leftMargin`,
87
- `maxLabelWidth`, `width`, `height`, `taskMargin`;
88
- - title/task typography: `taskFontSize`, `taskFontFamily`, `titleColor`,
89
- `titleFontFamily`, `titleFontSize`;
90
- - Journey colors: `actorColours`, `sectionFills`, `sectionColours`;
91
- - sequence-era compatibility fields present on Mermaid's Journey config:
92
- `boxMargin`, `boxTextMargin`, `noteMargin`, `messageMargin`, `messageAlign`,
93
- `bottomMarginAdj`, `rightAngles`, `activationWidth`, `textPlacement`.
94
-
95
- The fields that visibly affect the current Journey SVG are the Journey-specific
96
- layout, typography, and color fields. The sequence-era fields are accepted for
97
- Mermaid config compatibility but do not all have meaningful Journey geometry.
98
-
99
- Known remaining syntax/parity gaps and caveats:
100
-
101
- - Semicolon-separated Journey statements now follow upstream lexer semantics:
102
- `;` terminates a statement (so `A: 5: Me; B: 3: Me` is two tasks) while
103
- HTML entities such as `&amp;` keep their semicolons as literal label text.
104
- - Journey ASCII remains a compact semantic list, not a visual clone of
105
- Mermaid's SVG Journey chart. It now wraps to `maxWidth` using terminal display
106
- width, including CJK/emoji text, but it is intentionally not a miniature SVG
107
- curve renderer.
108
- - Journey marker IDs are no longer the fixed `journey-arrowhead`; they are
109
- derived from the diagram content and also participate in the repo-wide
110
- `idPrefix` post-pass. Two different Journey diagrams no longer collide by
111
- default. Repeated identical SVGs on the same page still need distinct
112
- `idPrefix` values, matching the existing multi-diagram embedding contract.
113
-
114
- ## Non-goals
115
-
116
- - Do not expand Journey into full customer journey mapping, service blueprinting,
117
- emotional-lifecycle canvases, or swimlane workflow modeling in this issue.
118
- - Do not make Journey a flowchart variant.
119
- - Do not rely on embedding Mermaid's renderer as a black box.
120
- - Do not change the meaning of Mermaid Journey scores. Scores remain integers
121
- from 1 through 5.
122
-
123
- ## Current Failure Modes
124
-
125
- ### Parser split
126
-
127
- There are two Journey parsers with different responsibilities:
128
-
129
- - `src/journey/parser.ts` powers the Journey renderer.
130
- - `src/agent/journey-body.ts` powers structured agent parsing and mutations.
131
-
132
- The renderer and structured agent parsers now accept Journey accessibility
133
- directives:
134
-
135
- - `accTitle: ...`
136
- - `accDescr: ...`
137
- - multiline `accDescr { ... }`
138
-
139
- It also normalizes quoted labels and `<br>` tags.
140
-
141
- The agent body parser now models those accessibility directives as part of the
142
- Journey body, so their presence no longer forces an opaque fallback. Title-only
143
- and accessibility-only Journey header furniture also stays structured when it is
144
- otherwise valid.
145
-
146
- This is where the implementation had gone wrong: accessibility was handled as a
147
- rendering concern, but it is also part of the family syntax contract. Every
148
- Journey syntax line that the renderer accepts must either be represented in
149
- `JourneyBody`, represented as shared diagram metadata without forcing an opaque
150
- body, or produce a targeted diagnostic.
151
-
152
- ### Opaque fallback
153
-
154
- `structuredFamilyHooks` treats Journey parse misses as opaque source.
155
- The verifier still reports broad `UNSUPPORTED_SYNTAX` / `journey_opaque`
156
- diagnostics for genuinely unmodeled source. That preserves source, which is
157
- good, but migration tooling benefits when common malformed cases are separated:
158
-
159
- - unsupported documented syntax,
160
- - malformed score,
161
- - parser drift between renderer and agent paths,
162
- - or genuinely unknown Journey extension.
163
-
164
- Invalid Journey scores now receive a Journey-specific diagnostic. Broader
165
- malformed-line taxonomy is still a useful future refinement.
166
-
167
- ### Incomplete semantic surfaces
168
-
169
- Structured Journey output still has room to become richer:
170
-
171
- - JSON describe output exposes task nodes but not a full Journey model.
172
- - Facts mention labels but do not summarize sections, score ranges, actor
173
- participation, or Journey accessibility.
174
- - Verification offers targeted invalid-score diagnostics, but not yet precise
175
- remediation for every malformed-line class.
176
- - ASCII width handling now wraps Journey task and actor text to `maxWidth` using
177
- terminal display width; a visual clone of the SVG curve remains out of scope.
178
-
179
- ### Visual expectation mismatch
180
-
181
- Before this migration, Agentic Mermaid's Journey renderer presented the diagram
182
- as section columns containing stacked task cards. Native Mermaid Journey diagrams present
183
- the same syntax as a left-to-right journey, where each task is a point in a
184
- progression and its score controls vertical placement.
185
-
186
- That difference is not a small styling mismatch. It changes the user's first
187
- read of the diagram:
188
-
189
- - Agentic Mermaid reads as a structured checklist grouped by section.
190
- - Mermaid Journey reads as an experience curve over time.
191
-
192
- ## Mermaid Journey Visual Model
193
-
194
- Mermaid's native Journey renderer treats tasks as ordered points in a horizontal
195
- progression:
196
-
197
- - tasks are laid out left to right in source order,
198
- - sections span horizontal ranges across consecutive task columns,
199
- - actor names appear in a legend at the left,
200
- - actor participation on a task is shown with small colored dots,
201
- - each score maps to a vertical position,
202
- - each scored point is represented by a face icon,
203
- - a horizontal baseline or arrow reinforces forward progression.
204
-
205
- Journey-specific Mermaid config includes controls for task spacing, task font,
206
- actor colors, section fills, section colors, title color, left margin, and actor
207
- label wrapping. The implemented renderer maps those fields onto the Mermaid-like
208
- Journey metaphor while leaving sequence-era fields that do not apply to Journey
209
- geometry as accepted compatibility metadata.
210
-
211
- ## Agentic Mermaid Visual Model
212
-
213
- The previous Agentic Mermaid Journey renderer was documented in
214
- `docs/design/families/journey.md` and implemented by:
215
-
216
- - `src/journey/layout.ts`
217
- - `src/journey/renderer.ts`
218
- - `src/ascii/journey.ts`
219
-
220
- It intentionally used Agentic Mermaid's house style:
221
-
222
- - sections are side-by-side columns,
223
- - tasks stack vertically inside each section,
224
- - each task is a card,
225
- - scores are shown as local five-cell meters,
226
- - actors are shown as local text pills,
227
- - section containers use crisp frames and header bands.
228
-
229
- That model was useful for compact, scannable documents, but it was not visually
230
- compatible with Mermaid Journey examples found in the wild.
231
-
232
- ## Visual Parity Strategy
233
-
234
- Adopt Mermaid's Journey visual metaphor as the default public SVG renderer.
235
-
236
- Prototype and visual evidence:
237
-
238
- - [`journey-agentic-cards-before.png`](./journey-agentic-cards-before.png)
239
- - [`journey-mermaid-classic-prototype.svg`](./journey-mermaid-classic-prototype.svg)
240
- - [`journey-mermaid-classic-prototype.png`](./journey-mermaid-classic-prototype.png)
241
- - [`journey-mermaid-classic-implementation.png`](./journey-mermaid-classic-implementation.png)
242
-
243
- The old card layout has been removed from the public SVG renderer. If it ever
244
- returns, it should be an explicitly named alternate look rather than the default.
245
- The public default should remain Mermaid-compatible.
246
-
247
- Possible type if the alternate survives:
248
-
249
- ```ts
250
- type JourneyLook = "mermaid-classic" | "agentic-cards";
251
- ```
252
-
253
- Default:
254
-
255
- - Use `"mermaid-classic"`.
256
-
257
- There is currently no public alternate card layout. If one survives later, its
258
- setting should live near other render style options rather than in the parser:
259
-
260
- ```ts
261
- render(source, {
262
- journey: {
263
- look: "agentic-cards"
264
- }
265
- });
266
- ```
267
-
268
- If the public API already has a stronger convention for family-specific render
269
- options, use that convention instead.
270
-
271
- ## Mermaid-classic Acceptance Criteria
272
-
273
- The `"mermaid-classic"` Journey layout must:
274
-
275
- - place tasks in one left-to-right sequence using source order,
276
- - calculate section spans from the number of tasks in each section,
277
- - draw a left actor legend with stable actor colors,
278
- - wrap long actor labels within a configured maximum label width,
279
- - mark per-task actor participation with small colored dots,
280
- - map score 5 to the highest positive position and score 1 to the lowest,
281
- - render a neutral middle position for score 3,
282
- - show score state with face icons or an equivalent unmistakable sentiment mark,
283
- - draw a horizontal progression baseline or arrow,
284
- - keep visible title and accessibility metadata behavior unchanged,
285
- - support theme colors without hardcoded contrast regressions,
286
- - avoid clipping long task labels, actor labels, and section names.
287
-
288
- The implementation reuses the existing `JourneyDiagram` model. It does not
289
- introduce a second syntax model.
290
-
291
- ## Parser and Model Spec
292
-
293
- ### JourneyBody
294
-
295
- `JourneyBody` represents the supported Journey syntax consumed by the renderer:
296
-
297
- - visible title,
298
- - ordered sections,
299
- - ordered tasks,
300
- - score per task,
301
- - actors per task,
302
- - accessibility title,
303
- - accessibility description,
304
- - source locations when available through the shared source map.
305
-
306
- Accessibility metadata also appears in shared diagram metadata, but its presence
307
- does not force `JourneyBody` to become opaque.
308
-
309
- ### Shared normalization
310
-
311
- Renderer and agent parsing share normalization behavior for:
312
-
313
- - quoted labels,
314
- - escaped quotes,
315
- - `<br>` and `<br/>`,
316
- - comments,
317
- - frontmatter and init directives before the `journey` header.
318
-
319
- The same source text should not produce different task labels depending on which
320
- surface parsed it.
321
-
322
- ### Diagnostics
323
-
324
- Journey diagnostics should distinguish at least:
325
-
326
- - invalid score range,
327
- - malformed task line,
328
- - actor list parse failure,
329
- - unsupported but preserved Journey line,
330
- - parser drift between renderer and structured parser.
331
-
332
- Opaque fallback is still allowed for source preservation, but it should include
333
- the reason that triggered opacity.
334
-
335
- ## Describe, Facts, and Verify Spec
336
-
337
- `describe(..., { format: "json" })` should expose a Journey body with:
338
-
339
- - diagram kind,
340
- - visible title,
341
- - accessibility title and description when present,
342
- - sections in source order,
343
- - tasks in source order,
344
- - task score,
345
- - task actors,
346
- - implicit section state for unsectioned tasks.
347
-
348
- Text facts should include:
349
-
350
- - section count,
351
- - task count,
352
- - actor count,
353
- - score range,
354
- - average score,
355
- - lowest-scoring tasks,
356
- - highest-scoring tasks,
357
- - actor participation counts,
358
- - accessibility title/description presence.
359
-
360
- `verify` should report Journey-specific diagnostics instead of only generic
361
- opaque warnings when the source is close enough to classify.
362
-
363
- ## ASCII Spec
364
-
365
- Journey ASCII output should remain readable in plain terminals, but it should
366
- honor width constraints:
367
-
368
- - wrap task labels,
369
- - wrap actor labels,
370
- - keep score markers adjacent to the task they describe,
371
- - preserve section order,
372
- - avoid lines longer than `maxWidth` when a width is provided and feasible.
373
-
374
- A Mermaid-classic ASCII mode is optional. The priority is making current ASCII
375
- output truthful to the structured model and width contract.
376
-
377
- ## Follow-up Implementation Plan
378
-
379
- 1. Introduce a shared Journey parse core or shared normalization helpers so
380
- `src/journey/parser.ts` and `src/agent/journey-body.ts` cannot drift on
381
- documented syntax.
382
- 2. Extend `JourneyBody` and related JSON serializers for accessibility metadata
383
- and full section/task ordering.
384
- 3. Replace Journey opaque fallback with typed parse outcomes that carry a reason.
385
- 4. Update `verify` to map Journey parse outcomes to specific diagnostics.
386
- 5. Expand Journey facts and describe output.
387
- 6. Add richer Journey facts and JSON describe summaries.
388
- 7. Keep migration fixtures based on representative Mermaid Journey examples.
389
- 8. Decide separately whether the old card layout is worth reintroducing as a
390
- deliberately named alternate look.
391
-
392
- ## Test Plan
393
-
394
- Add fixtures covering:
395
-
396
- - `accTitle: ...`
397
- - `accDescr: ...`
398
- - multiline `accDescr { ... }`
399
- - quoted title, section, task, and actor labels,
400
- - `<br>` in title, section, task, actor, and accessibility text,
401
- - score values 1 through 5,
402
- - invalid scores 0, 6, and non-numeric scores,
403
- - tasks before the first explicit section,
404
- - long task labels,
405
- - long actor labels,
406
- - multiple actors per task,
407
- - repeated actors across sections.
408
-
409
- For each valid fixture, test:
410
-
411
- - renderer parser output,
412
- - agent structured body output,
413
- - `describe` JSON,
414
- - facts text,
415
- - `verify` result,
416
- - SVG accessibility metadata,
417
- - ASCII output under a narrow `maxWidth`.
418
-
419
- For the public Journey renderer, add SVG structure tests that assert:
420
-
421
- - tasks advance horizontally,
422
- - section spans cover the expected task columns,
423
- - actor legend is present,
424
- - actor dots are associated with the right tasks,
425
- - score positions are monotonic from 1 through 5.
426
-
427
- ## Migration Decision
428
-
429
- The current Journey renderer should be treated as a supported Agentic Mermaid
430
- prototype that proved parser and renderer coverage, not as a public compatibility
431
- contract. The failure was that the implementation made Journey exist by adopting
432
- the library's card-layout house style instead of preserving Mermaid's Journey
433
- visual metaphor.
434
-
435
- The immediate fix for issue #128 should prioritize parser parity and diagnostics.
436
- Pre-launch, the visual fix should replace the default SVG layout with the
437
- Mermaid-style experience curve. The old card layout should be removed from the
438
- public renderer unless we later decide to reintroduce it as a deliberately named
439
- alternate look.