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.
- package/AGENT_NATIVE.md +155 -91
- package/CHANGELOG.md +163 -4
- package/Instructions_for_agents.md +10 -10
- package/LICENSES/Apache-2.0.txt +202 -0
- package/README.md +31 -38
- package/THIRD_PARTY_NOTICES.md +29 -0
- package/assets/hero.png +0 -0
- package/dist/agent-core.d.ts +463 -0
- package/dist/agent-core.js +397 -0
- package/dist/agent.d.ts +73 -1868
- package/dist/agent.js +336 -37325
- package/dist/agentic-mermaid-mcp.js +7 -38399
- package/dist/am.js +33626 -40446
- package/dist/chunk-2P5FKUQC.js +3485 -0
- package/dist/chunk-2S3VSS6I.js +149 -0
- package/dist/chunk-2SILJDW2.js +37 -0
- package/dist/chunk-BJYMBT4I.js +61963 -0
- package/dist/chunk-FDM43XU7.js +615 -0
- package/dist/chunk-MYPDVZCO.js +4702 -0
- package/dist/index-DWPa2MJs.d.ts +6780 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +310 -33014
- package/dist/mcp-cli-5J47WEY3.js +17 -0
- package/docs/README.md +39 -31
- package/docs/agent-api-cookbook.md +44 -35
- package/docs/agent-mutation-policy.md +1 -1
- package/docs/agent-workflow-examples.md +2 -2
- package/docs/api.md +284 -77
- package/docs/ascii.md +26 -16
- package/docs/code-mode-impact.md +214 -0
- package/docs/comparison.md +23 -11
- package/docs/computational-aesthetics-prototype-plan.md +252 -0
- package/docs/config.md +26 -10
- package/docs/custom-fonts.md +265 -0
- package/docs/custom-style-cookbook.md +130 -9
- package/docs/diagram-families.md +48 -23
- package/docs/features.md +59 -52
- package/docs/fork-differences.md +6 -3
- package/docs/getting-started.md +23 -16
- package/docs/issue-derived-test-cases.md +29 -22
- package/docs/mcp-code-mode-rationale.md +13 -6
- package/docs/mcp-http-transport.md +20 -13
- package/docs/mermaid-layout-complaints.md +66 -52
- package/docs/mutation-testing.md +145 -66
- package/docs/quality.md +23 -14
- package/docs/react.md +2 -2
- package/docs/schemas/style-spec.schema.json +1221 -30
- package/docs/style-authoring.md +241 -38
- package/docs/svg-semantic-contract.md +49 -0
- package/docs/testing-strategy.md +166 -58
- package/docs/theming.md +19 -32
- package/examples/styles/catalog.json +54 -0
- package/examples/styles/cloudflare-workers-inspired-prototype.mmd +9 -0
- package/examples/styles/cloudflare-workers-inspired-prototype.style.json +110 -0
- package/examples/styles/cupertino-prototype.mmd +10 -0
- package/examples/styles/cupertino-prototype.style.json +63 -0
- package/examples/styles/mid-century-report.style.json +2 -2
- package/examples/styles/star-chart-atlas.style.json +2 -1
- package/examples/styles/transit-route-map.style.json +2 -2
- package/examples/styles/vercel-inspired-prototype.mmd +6 -0
- package/examples/styles/vercel-inspired-prototype.style.json +87 -0
- package/package.json +85 -45
- package/server.json +2 -2
- package/skills/agentic-mermaid-diagram-workflow/SKILL.md +17 -36
- package/skills/agentic-mermaid-diagram-workflow/references/cli.md +4 -5
- package/skills/agentic-mermaid-diagram-workflow/references/code-mode.md +15 -31
- package/skills/agentic-mermaid-diagram-workflow/references/sequence.md +10 -14
- package/skills/agentic-mermaid-live-editor/SKILL.md +100 -206
- package/TODO.md +0 -684
- package/dist/index-wjRjbsP-.d.ts +0 -1102
- package/docs/assets/improvements/box-start-connector.png +0 -0
- package/docs/assets/improvements/comment-dropped-lint.png +0 -0
- package/docs/assets/improvements/er-content-loss.png +0 -0
- package/docs/assets/improvements/fan-in-trunks.png +0 -0
- package/docs/assets/improvements/gantt-family.png +0 -0
- package/docs/assets/improvements/gantt-milestone-clamp.png +0 -0
- package/docs/assets/improvements/gantt-verify-seam.png +0 -0
- package/docs/assets/improvements/subgraph-container-edges.png +0 -0
- package/docs/assets/improvements/wrapper-frontmatter.png +0 -0
- package/docs/assets/improvements/wrapper-init-directive.png +0 -0
- package/docs/assets/improvements/wrapper-leading-comment.png +0 -0
- package/docs/assets/style-cookbook/mid-century-report.png +0 -0
- package/docs/assets/style-cookbook/star-chart-atlas.png +0 -0
- package/docs/assets/style-cookbook/transit-route-map.png +0 -0
- package/docs/contributing/adding-diagram-types.md +0 -144
- package/docs/contributing/diagram-family-citizenship.matrix.json +0 -2127
- package/docs/contributing/diagram-family-citizenship.md +0 -82
- package/docs/contributing/harvesting-upstream-tests.md +0 -126
- package/docs/contributing/lessons-learned.md +0 -276
- package/docs/contributing/releasing.md +0 -82
- package/docs/contributing/visual-review-evidence.md +0 -53
- package/docs/design/families/README.md +0 -26
- package/docs/design/families/architecture-beta.md +0 -48
- package/docs/design/families/flowchart-parser-conformance.md +0 -22
- package/docs/design/families/gantt-research.md +0 -137
- package/docs/design/families/gantt.md +0 -329
- package/docs/design/families/journey-agentic-cards-before.png +0 -0
- package/docs/design/families/journey-experience-curve-implementation.png +0 -0
- package/docs/design/families/journey-mermaid-classic-implementation.png +0 -0
- package/docs/design/families/journey-mermaid-classic-prototype.png +0 -0
- package/docs/design/families/journey-mermaid-classic-prototype.svg +0 -163
- package/docs/design/families/journey-mermaid-classic-prototype.svg.png +0 -0
- package/docs/design/families/journey-migration-parity.md +0 -439
- package/docs/design/families/journey-section-overlap-after.png +0 -0
- package/docs/design/families/journey-section-overlap-before.png +0 -0
- package/docs/design/families/journey-usage-research.md +0 -423
- package/docs/design/families/journey.md +0 -153
- package/docs/design/families/xychart.md +0 -85
- package/docs/design/system/README.md +0 -45
- package/docs/design/system/abstraction-audit.md +0 -224
- package/docs/design/system/abstraction-recommendations.md +0 -655
- package/docs/design/system/architecture.mmd +0 -29
- package/docs/design/system/architecture.svg +0 -137
- package/docs/design/system/layout-guarantees-and-robustness.md +0 -351
- package/docs/design/system/layout-rubric.md +0 -138
- package/docs/design/system/route-contracts.md +0 -848
- package/docs/design/system/source-preservation-ladder.md +0 -52
- package/docs/design/system/styles-rollout.md +0 -216
- package/docs/design/system/ugly-layouts.md +0 -119
- package/docs/layout-characterization/README.md +0 -245
- package/docs/layout-characterization/contact-sheet-families.md +0 -498
- package/docs/layout-characterization/contact-sheet.md +0 -638
- package/docs/layout-characterization/properties.md +0 -281
- package/docs/layout-characterization/visual-quality.md +0 -160
- package/docs/layout-characterization/visual-snapshots/architecture.svg +0 -79
- package/docs/layout-characterization/visual-snapshots/class.svg +0 -60
- package/docs/layout-characterization/visual-snapshots/er.svg +0 -61
- package/docs/layout-characterization/visual-snapshots/flowchart.svg +0 -58
- package/docs/layout-characterization/visual-snapshots/gantt.svg +0 -52
- package/docs/layout-characterization/visual-snapshots/journey.svg +0 -98
- package/docs/layout-characterization/visual-snapshots/pie.svg +0 -36
- package/docs/layout-characterization/visual-snapshots/quadrant.svg +0 -47
- package/docs/layout-characterization/visual-snapshots/sequence.svg +0 -59
- package/docs/layout-characterization/visual-snapshots/state.svg +0 -52
- package/docs/layout-characterization/visual-snapshots/timeline.svg +0 -64
- package/docs/layout-characterization/visual-snapshots/xychart.svg +0 -97
- package/docs/project/divergences.md +0 -98
- package/docs/project/dogfooding-docs-strategy.md +0 -66
- package/docs/project/hosted-mcp-cloudflare-plan.md +0 -338
- package/docs/project/lessons-learned.md +0 -1019
- package/docs/project/remove-role-styling-plan.md +0 -176
- package/examples/agent-improve-auth-flow.ts +0 -206
- package/examples/agent-loop.ts +0 -53
- package/examples/mcp-vs-cli-complex-diagrams.ts +0 -133
- package/llms.txt +0 -104
- package/skill-evals/README.md +0 -77
- package/skill-evals/fixtures/architecture-cache/input.mmd +0 -5
- package/skill-evals/fixtures/class-payment/input.mmd +0 -4
- package/skill-evals/fixtures/er-orders/input.mmd +0 -10
- package/skill-evals/fixtures/flowchart-cache/input.mmd +0 -3
- package/skill-evals/fixtures/gantt-release/input.mmd +0 -7
- package/skill-evals/fixtures/journey-checkout/input.mmd +0 -6
- package/skill-evals/fixtures/pie-exports/input.mmd +0 -5
- package/skill-evals/fixtures/quadrant-priorities/input.mmd +0 -11
- package/skill-evals/fixtures/sequence-retry/input.mmd +0 -8
- package/skill-evals/fixtures/state-lifecycle/input.mmd +0 -5
- package/skill-evals/fixtures/timeline-release/input.mmd +0 -6
- package/skill-evals/fixtures/xychart-growth/input.mmd +0 -5
- package/skill-evals/shared-benchmark.json +0 -510
- package/src/agent/analyze.ts +0 -157
- package/src/agent/apply.ts +0 -146
- package/src/agent/architecture-body.ts +0 -458
- package/src/agent/certificates.ts +0 -110
- package/src/agent/class-body.ts +0 -319
- package/src/agent/core.ts +0 -207
- package/src/agent/create.ts +0 -106
- package/src/agent/describe.ts +0 -368
- package/src/agent/er-body.ts +0 -224
- package/src/agent/facts.ts +0 -360
- package/src/agent/families-builtin.ts +0 -920
- package/src/agent/families.ts +0 -232
- package/src/agent/family-layouts.ts +0 -832
- package/src/agent/flowchart-body.ts +0 -372
- package/src/agent/flowchart-unsupported.ts +0 -243
- package/src/agent/font-coverage.ts +0 -288
- package/src/agent/gantt-body.ts +0 -495
- package/src/agent/index.ts +0 -10
- package/src/agent/journey-body.ts +0 -374
- package/src/agent/label-metrics.ts +0 -28
- package/src/agent/layout-to-rendered.ts +0 -63
- package/src/agent/mutate.ts +0 -97
- package/src/agent/mutation-ops.ts +0 -51
- package/src/agent/op-schema.ts +0 -443
- package/src/agent/parse.ts +0 -223
- package/src/agent/pie-body.ts +0 -270
- package/src/agent/png.ts +0 -171
- package/src/agent/quadrant-body.ts +0 -336
- package/src/agent/quality.ts +0 -363
- package/src/agent/readability-audit.ts +0 -92
- package/src/agent/rendered-route-audit.ts +0 -61
- package/src/agent/sequence-body.ts +0 -345
- package/src/agent/serialize.ts +0 -214
- package/src/agent/state-body.ts +0 -589
- package/src/agent/structural-count.ts +0 -150
- package/src/agent/timeline-body.ts +0 -280
- package/src/agent/trace-log.ts +0 -43
- package/src/agent/types.ts +0 -995
- package/src/agent/verify.ts +0 -603
- package/src/agent/xychart-body.ts +0 -472
- package/src/architecture/config.ts +0 -282
- package/src/architecture/layout.ts +0 -496
- package/src/architecture/parser.ts +0 -375
- package/src/architecture/renderer.ts +0 -611
- package/src/architecture/types.ts +0 -113
- package/src/ascii/ansi.ts +0 -423
- package/src/ascii/architecture.ts +0 -210
- package/src/ascii/canvas.ts +0 -443
- package/src/ascii/class-diagram.ts +0 -697
- package/src/ascii/converter.ts +0 -475
- package/src/ascii/draw.ts +0 -1693
- package/src/ascii/edge-bundling.ts +0 -328
- package/src/ascii/edge-routing.ts +0 -330
- package/src/ascii/er-diagram.ts +0 -439
- package/src/ascii/gantt.ts +0 -276
- package/src/ascii/grid.ts +0 -747
- package/src/ascii/index.ts +0 -196
- package/src/ascii/journey.ts +0 -169
- package/src/ascii/meta.ts +0 -244
- package/src/ascii/multiline-utils.ts +0 -80
- package/src/ascii/pathfinder.ts +0 -301
- package/src/ascii/pie.ts +0 -67
- package/src/ascii/quadrant.ts +0 -158
- package/src/ascii/reverse.ts +0 -216
- package/src/ascii/sequence.ts +0 -499
- package/src/ascii/shapes/circle.ts +0 -27
- package/src/ascii/shapes/corners.ts +0 -143
- package/src/ascii/shapes/diamond.ts +0 -27
- package/src/ascii/shapes/hexagon.ts +0 -27
- package/src/ascii/shapes/index.ts +0 -106
- package/src/ascii/shapes/rectangle.ts +0 -168
- package/src/ascii/shapes/rounded.ts +0 -27
- package/src/ascii/shapes/special.ts +0 -332
- package/src/ascii/shapes/stadium.ts +0 -110
- package/src/ascii/shapes/state.ts +0 -192
- package/src/ascii/shapes/types.ts +0 -73
- package/src/ascii/timeline.ts +0 -141
- package/src/ascii/types.ts +0 -312
- package/src/ascii/validate.ts +0 -120
- package/src/ascii/width.ts +0 -81
- package/src/ascii/wrap.ts +0 -131
- package/src/ascii/xychart.ts +0 -919
- package/src/browser.ts +0 -29
- package/src/class/layout.ts +0 -240
- package/src/class/parser.ts +0 -332
- package/src/class/renderer.ts +0 -638
- package/src/class/types.ts +0 -129
- package/src/cli/agent-instructions.ts +0 -1
- package/src/cli/am-bin.ts +0 -6
- package/src/cli/exit-codes.ts +0 -18
- package/src/cli/index.ts +0 -1132
- package/src/cli/init-agent.ts +0 -147
- package/src/cli/run-entrypoint.ts +0 -10
- package/src/color-resolver.ts +0 -152
- package/src/elk-instance.ts +0 -114
- package/src/er/layout.ts +0 -187
- package/src/er/parser.ts +0 -226
- package/src/er/renderer.ts +0 -792
- package/src/er/types.ts +0 -99
- package/src/family-rubric.ts +0 -425
- package/src/font-manifest.ts +0 -31
- package/src/gantt/layout.ts +0 -365
- package/src/gantt/parser.ts +0 -282
- package/src/gantt/pipeline.ts +0 -27
- package/src/gantt/renderer.ts +0 -414
- package/src/gantt/schedule.ts +0 -513
- package/src/gantt/types.ts +0 -255
- package/src/index.ts +0 -368
- package/src/journey/layout.ts +0 -554
- package/src/journey/parse-core.ts +0 -251
- package/src/journey/parser.ts +0 -101
- package/src/journey/renderer.ts +0 -917
- package/src/journey/types.ts +0 -144
- package/src/layout/geometry.ts +0 -182
- package/src/layout/pass.ts +0 -142
- package/src/layout/passes/index.ts +0 -3916
- package/src/layout-engine.ts +0 -1565
- package/src/layout-rubric.ts +0 -659
- package/src/mcp/artifacts.ts +0 -137
- package/src/mcp/dynamic-harness.ts +0 -31
- package/src/mcp/dynamic-modules.d.ts +0 -7
- package/src/mcp/facade.ts +0 -608
- package/src/mcp/harness-runtime.ts +0 -203
- package/src/mcp/hosted-server.ts +0 -468
- package/src/mcp/mcp-bin.ts +0 -3
- package/src/mcp/mcp-cli.ts +0 -82
- package/src/mcp/protocol.ts +0 -13
- package/src/mcp/sandbox.ts +0 -195
- package/src/mcp/sdk-decl.ts +0 -391
- package/src/mcp/server.ts +0 -362
- package/src/mcp/tool-surface.ts +0 -146
- package/src/mermaid-source.ts +0 -655
- package/src/multiline-utils.ts +0 -228
- package/src/parser.ts +0 -1031
- package/src/pie/layout.ts +0 -168
- package/src/pie/parser.ts +0 -136
- package/src/pie/renderer.ts +0 -234
- package/src/pie/types.ts +0 -82
- package/src/quadrant/layout.ts +0 -191
- package/src/quadrant/parser.ts +0 -183
- package/src/quadrant/renderer.ts +0 -322
- package/src/quadrant/types.ts +0 -113
- package/src/render-family-hooks.ts +0 -244
- package/src/renderer.ts +0 -1099
- package/src/route-contracts.ts +0 -2723
- package/src/scene/backend.ts +0 -76
- package/src/scene/fidelity.ts +0 -183
- package/src/scene/hybrid-backend.ts +0 -174
- package/src/scene/ir.ts +0 -181
- package/src/scene/marks.ts +0 -127
- package/src/scene/rough-backend.ts +0 -378
- package/src/scene/seed.ts +0 -46
- package/src/scene/style-registry.ts +0 -556
- package/src/sequence/layout.ts +0 -456
- package/src/sequence/parser.ts +0 -255
- package/src/sequence/renderer.ts +0 -604
- package/src/sequence/types.ts +0 -154
- package/src/shape-clipping.ts +0 -351
- package/src/shared/accessibility-directives.ts +0 -22
- package/src/shared/batched.ts +0 -61
- package/src/shared/color-math.ts +0 -93
- package/src/shared/svg-a11y.ts +0 -29
- package/src/shared/syntax-error.ts +0 -17
- package/src/shared/unicode-ranges.ts +0 -135
- package/src/styles.ts +0 -318
- package/src/svg-paths.ts +0 -28
- package/src/text-metrics.ts +0 -248
- package/src/theme.ts +0 -710
- package/src/timeline/layout.ts +0 -381
- package/src/timeline/parser.ts +0 -215
- package/src/timeline/renderer.ts +0 -538
- package/src/timeline/types.ts +0 -105
- package/src/types.ts +0 -462
- package/src/website-worker-modules.d.ts +0 -18
- package/src/xychart/axis-utils.ts +0 -109
- package/src/xychart/colors.ts +0 -124
- package/src/xychart/config.ts +0 -88
- package/src/xychart/layout.ts +0 -656
- package/src/xychart/parser.ts +0 -504
- package/src/xychart/renderer.ts +0 -640
- 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>
|
|
Binary file
|
|
@@ -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 `&` 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.
|
|
Binary file
|
|
Binary file
|