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
package/docs/testing-strategy.md
CHANGED
|
@@ -10,6 +10,27 @@ For the *definition* of "good looking" and the determinism guarantees, see
|
|
|
10
10
|
[`quality.md`](./quality.md). For mutation specifics, see
|
|
11
11
|
[`mutation-testing.md`](./mutation-testing.md). For the layout/visual
|
|
12
12
|
contracts, see [`layout-characterization/README.md`](./layout-characterization/README.md).
|
|
13
|
+
The current measured complexity-aware and registry-derived interaction
|
|
14
|
+
portfolio is specified in
|
|
15
|
+
[`project/complexity-aware-test-portfolio-plan.md`](./project/complexity-aware-test-portfolio-plan.md);
|
|
16
|
+
its immutable before and content-addressed candidate reports live under
|
|
17
|
+
`eval/test-portfolio/`.
|
|
18
|
+
|
|
19
|
+
## Local CI parity
|
|
20
|
+
|
|
21
|
+
Run `bun run quality:check` to execute the complete GitHub **Quality gates**
|
|
22
|
+
job locally. The command installs the frozen dependency graph and then runs
|
|
23
|
+
the dependency audit, font and website regeneration checks, evidence
|
|
24
|
+
freshness, sketch and whole-corpus audits, lint, repository-wide typechecking,
|
|
25
|
+
hero freshness, and the golden-drift guard. The workflow calls this same
|
|
26
|
+
entry point, so the local list and CI list cannot diverge.
|
|
27
|
+
|
|
28
|
+
Run `bun run evidence:check` for the narrower generated-evidence audit. It
|
|
29
|
+
executes every receipt-backed gallery plus palette-performance provenance,
|
|
30
|
+
continues after failures, and reports all stale artifacts together. Evidence
|
|
31
|
+
receipts hash their exact local source/fixture graph and the transitive Bun
|
|
32
|
+
lockfile closure of packages imported by that graph. Unrelated tools that are
|
|
33
|
+
present elsewhere in `bun.lock` do not invalidate visual evidence.
|
|
13
34
|
|
|
14
35
|
## The central problem: this is a partly non-testable program
|
|
15
36
|
|
|
@@ -40,7 +61,7 @@ audit-clean").
|
|
|
40
61
|
| **Derived (golden)** | Output matches a previously-blessed artifact | ASCII goldens, SVG snapshots, contact sheets, screenshot baselines |
|
|
41
62
|
| **Derived (differential)** | Our output agrees with an external reference corpus | mermaid-docs corpus, MermaidSeqBench, upstream-suite bench |
|
|
42
63
|
| **Metamorphic** | Related inputs produce related outputs (no ground truth needed) | round-trip idempotence, cross-process/cross-runtime determinism |
|
|
43
|
-
| **Pseudo /
|
|
64
|
+
| **Pseudo / fault sensitivity** | Selected seeded faults make the intended tests fail | incremental Stryker gate, sabotage suite |
|
|
44
65
|
| **Heuristic / perceptual** | Geometry falls inside human-plausible bounds | `measureQuality`/`checkQuality`, ugly-detector, layout rubric, heuristic-tracker |
|
|
45
66
|
| **Human / model** | Subjective quality on the axis nothing else covers | LLM-as-judge (periodic), manual visual review |
|
|
46
67
|
|
|
@@ -60,7 +81,7 @@ citizenship matrix. For an agent-native product the docs, schemas, CLI
|
|
|
60
81
|
help, and `llms.txt` *are* runtime surface (Loop 14), so they are tested
|
|
61
82
|
like code, not treated as prose.
|
|
62
83
|
|
|
63
|
-
**Runs:** every PR (`bun test
|
|
84
|
+
**Runs:** every PR (`bun run test`, including the canonical 30-second per-test budget).
|
|
64
85
|
**Does not prove:** that the diagram is *visually* good. `verify.ok` is
|
|
65
86
|
structural only — stated repeatedly because it has burned us (the Auth
|
|
66
87
|
Flow episode, Loop 15).
|
|
@@ -78,13 +99,51 @@ independent spec:
|
|
|
78
99
|
golden never moves silently.
|
|
79
100
|
|
|
80
101
|
**Runs:** ASCII/SVG goldens per PR. The browser/screenshot e2e suite also runs
|
|
81
|
-
per PR — it is the `e2e`
|
|
82
|
-
|
|
83
|
-
|
|
102
|
+
per PR — it is the five-lane `e2e` matrix in `ci.yml` (`needs: test`), including
|
|
103
|
+
an installed-tarball consumer run at the advertised Node 22 floor. Its
|
|
104
|
+
browser lane installs Chromium and runs `browser.test.ts` (screenshot diff)
|
|
105
|
+
plus the security contracts and the explicitly enabled theme/style/accessibility
|
|
106
|
+
browser suites. The browser lane builds the gitignored `website/public` tree once
|
|
107
|
+
before those contracts serve it (`browser.test.ts` builds only the separate root
|
|
108
|
+
`editor.html`). Each browser contract file then runs in its own Bun process so its
|
|
109
|
+
Chromium/server hooks cannot overlap and exhaust a constrained hosted runner. The
|
|
110
|
+
package and CI both invoke `e2e/run-browser-contracts.ts`, whose canonical file
|
|
111
|
+
list also fails if any contract executes zero positive tests, while independent
|
|
112
|
+
lanes run the CLI/single-binary, dist-artifact, and tarball-consumer suites.
|
|
113
|
+
Broad contact-sheet rendering is periodic/triggered rather than a per-PR sweep;
|
|
114
|
+
the committed citizenship manifest and pending review state remain cheap
|
|
115
|
+
per-PR contracts. Structured human review is recommended for visual releases
|
|
116
|
+
and remains hash-bound when recorded, but it is advisory rather than a package-publication gate.
|
|
84
117
|
**Does not prove:** that a *changed* golden is an improvement — only that
|
|
85
118
|
change was noticed. Judging the change still needs a human or the
|
|
86
119
|
before/after harness (`eval/layout-compare`).
|
|
87
120
|
|
|
121
|
+
## 2a. Registry-derived combinatorial conformance
|
|
122
|
+
|
|
123
|
+
`render-conformance-plan.test.ts` replaces the former exhaustive
|
|
124
|
+
family × Look × Palette docs-example matrix. The new family registry,
|
|
125
|
+
Style registries and mandatory family conformance profiles generate:
|
|
126
|
+
|
|
127
|
+
- exhaustive pure Look × Palette resolution;
|
|
128
|
+
- pairwise real-render coverage across family, Look, Palette, security,
|
|
129
|
+
background polarity and six complexity strata;
|
|
130
|
+
- higher-strength Look/Palette/background, family/backend/complexity,
|
|
131
|
+
palette-sensitive role, external-reference and contact-sheet obligations;
|
|
132
|
+
- a separate SVG/PNG/ASCII/Unicode portfolio with every-family Unicode stress.
|
|
133
|
+
|
|
134
|
+
An independently implemented tuple enumerator must report zero missing
|
|
135
|
+
obligations. Fake/removed-family, precedence, strict-reference, transparency,
|
|
136
|
+
seed and terminal sabotage probes guard fault sensitivity. A new `DiagramKind`
|
|
137
|
+
cannot compile without its minimal, representative, dense, text-stress,
|
|
138
|
+
family-risk and eval-corpus-outlier conformance material.
|
|
139
|
+
|
|
140
|
+
**Runs:** executable conformance and the bounded fault probes run per PR. The
|
|
141
|
+
larger citizenship/interaction/outlier contact sheets run when visual inputs
|
|
142
|
+
change, during periodic design review, or before release.
|
|
143
|
+
**Does not prove:** an unrendered three-way family/Look/Palette combination is
|
|
144
|
+
beautiful. The exact retained obligations are published by the candidate
|
|
145
|
+
report rather than implied by the word “exhaustive.”
|
|
146
|
+
|
|
88
147
|
## 3. Derived oracles — differential corpora
|
|
89
148
|
|
|
90
149
|
The strongest defense against our own blind spots is testing against
|
|
@@ -94,10 +153,12 @@ sources we did not write:
|
|
|
94
153
|
documentation; gates parse, verify, and round-trip.
|
|
95
154
|
- **MermaidSeqBench** (132 IBM-curated sequence diagrams) — parse rate,
|
|
96
155
|
structured-vs-opaque split, verify rate, round-trip stability.
|
|
97
|
-
- **upstream-suite bench** (`eval/mermaid-upstream-suite-bench/`,
|
|
98
|
-
|
|
99
|
-
(`ratchet.json`) that fails the build if coverage drops or
|
|
100
|
-
local-gap budgets grow.
|
|
156
|
+
- **upstream-suite bench** (`eval/mermaid-upstream-suite-bench/`, 736
|
|
157
|
+
executable cases / 746 imported blocks from pinned upstream commits) — with
|
|
158
|
+
a **ratchet** (`ratchet.json`) that fails the build if coverage drops or
|
|
159
|
+
per-family local-gap budgets grow. Mindmap/GitGraph use their declared
|
|
160
|
+
`f3dea583…` compatibility revision and account for all 26/69 official spec
|
|
161
|
+
blocks in a dedicated executable oracle.
|
|
101
162
|
|
|
102
163
|
These exist because our hand-written fixtures encode what we already knew
|
|
103
164
|
the parser modeled. Upstream examples are "adversarial in exactly the
|
|
@@ -125,7 +186,9 @@ must agree." This sidesteps the oracle problem without a human:
|
|
|
125
186
|
suite).
|
|
126
187
|
- **Determinism** — three separate processes produce byte-identical layout
|
|
127
188
|
JSON; Bun and Node produce byte-identical JSON on the same source; ASCII
|
|
128
|
-
and PNG output hash-stable across 10+ repeated runs.
|
|
189
|
+
and PNG output hash-stable across 10+ repeated runs. CI builds the Node bundle
|
|
190
|
+
before the unit shards so the Bun↔Node contracts cannot silently skip in a
|
|
191
|
+
clean checkout.
|
|
129
192
|
- **Layout/faithfulness relations** — `property-layout-metamorphic.test.ts`
|
|
130
193
|
formalizes relations that were previously implicit: determinism (same source
|
|
131
194
|
⇒ identical metrics), node-id **relabeling invariance** (ids carry no
|
|
@@ -148,14 +211,15 @@ default seed `20260702`). A red property in CI is therefore a real,
|
|
|
148
211
|
reproducible counterexample — never a seed lottery. The 2026-07 audit caught
|
|
149
212
|
three suites flaking on rolled seeds (the route-contracts certificate property
|
|
150
213
|
at ~1 CI run in 7, issue #83; the parser Cartesian-product property; both now
|
|
151
|
-
pin the exact seed that exposed their bug
|
|
152
|
-
global
|
|
214
|
+
pin the exact seed that exposed their bug through per-assert options, without
|
|
215
|
+
mutating process-global configuration).
|
|
153
216
|
|
|
154
217
|
- Reproduce a specific roll: `AM_FC_SEED=<int> bun test <file>`.
|
|
155
|
-
- Finder mode (deliberate randomness): `AM_FC_SEED=random bun test
|
|
218
|
+
- Finder mode (deliberate randomness): `AM_FC_SEED=random bun run test`.
|
|
156
219
|
- The policy is itself gated: `fc-seed-policy.test.ts` fails if the preload is
|
|
157
|
-
unwired
|
|
158
|
-
|
|
220
|
+
unwired and source-checks every test file so suite-specific seeds cannot use
|
|
221
|
+
process-global overrides in another shard; `zzz-fc-seed-policy-epilogue.test.ts`
|
|
222
|
+
also catches runtime drift within its own process.
|
|
159
223
|
|
|
160
224
|
Pinning is for *holding* known ground; randomness is for *finding* new
|
|
161
225
|
counterexamples ("an invariant enforced by a random property is a lottery,
|
|
@@ -166,37 +230,38 @@ swept across 48/24/12 seeds (scaled by runtime; 1,368 suite-runs total) with
|
|
|
166
230
|
zero failures — the pin does not freeze a known-bad ticket, and the sweep is
|
|
167
231
|
repeatable from the same knob.
|
|
168
232
|
|
|
169
|
-
## 5. Pseudo-oracles —
|
|
233
|
+
## 5. Pseudo-oracles — do selected seeded faults make the suite fail?
|
|
170
234
|
|
|
171
|
-
Tests can be green
|
|
235
|
+
Tests can be green while missing faults. Two bounded gates challenge selected
|
|
236
|
+
behaviors:
|
|
172
237
|
|
|
173
|
-
- **
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
238
|
+
- **Incremental mutation testing (Stryker)** — mutates the small, pure
|
|
239
|
+
faithfulness counter on every PR. A full run takes about one minute and its
|
|
240
|
+
measured floor is enforced. Broader ASCII, route, and family configs remain
|
|
241
|
+
available as opt-in survivor harvests, not scheduled gates. A *survived*
|
|
242
|
+
mutant is a test gap until classified; the historical catalogs record
|
|
243
|
+
reviewed performance guards and unreachable-by-convention cases. Mutation
|
|
244
|
+
testing has earned its keep when focused: it falsified an audit assumption
|
|
245
|
+
and found dead code the unit tests couldn't.
|
|
180
246
|
- **Sabotage suite** (`eval/sabotage/route-regressions.ts`) — deliberately
|
|
181
247
|
reverts a fixed bug in a detached worktree and asserts the suite goes
|
|
182
|
-
**red**, proving
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
(`src/agent/structural-count.ts`) with a sub-second unit runner, so it gates
|
|
194
|
-
**per-PR** (~1 min, measured 96% kill / break-threshold 90).
|
|
195
|
-
**Why this matters:** line coverage is reported per-PR but is a weak
|
|
248
|
+
**red**, proving five named route/link regression tests actually bite.
|
|
249
|
+
|
|
250
|
+
The broad scheduled mutation matrix was retired after 26 consecutive scheduled
|
|
251
|
+
runs produced no success and its final repair grew to 39 coverage workers (41
|
|
252
|
+
jobs total). The configs still
|
|
253
|
+
emit useful local scores and JSON reports, but have no break floors and carry no
|
|
254
|
+
acceptance authority. `docs/mutation-testing.md` records the commands, survivor
|
|
255
|
+
history, retained operational evidence, and re-enrollment criteria.
|
|
256
|
+
|
|
257
|
+
**Why this matters:** line coverage is reported per-PR as one merged LCOV
|
|
258
|
+
artifact assembled from the three unit shards, but it is a weak
|
|
196
259
|
adequacy signal — coverage is not strongly correlated with fault detection
|
|
197
260
|
once suite size is controlled (Inozemtseva & Holmes, ICSE 2014), whereas
|
|
198
261
|
mutant detection *is* correlated with real-fault detection (Just et al.,
|
|
199
|
-
FSE 2014).
|
|
262
|
+
FSE 2014). That supports focused mutation as one useful instrument, not mutation
|
|
263
|
+
score as a universal truth. Behavioral, property, differential, sabotage,
|
|
264
|
+
coverage, and mutation evidence answer different questions.
|
|
200
265
|
|
|
201
266
|
## 6. Heuristic / perceptual oracles — geometry inside human bounds
|
|
202
267
|
|
|
@@ -204,8 +269,8 @@ This is where we approximate aesthetics deterministically:
|
|
|
204
269
|
|
|
205
270
|
- **`measureQuality` / `checkQuality`** — edge crossings, label
|
|
206
271
|
legibility, whitespace balance, label-edge proximity, aspect ratio,
|
|
207
|
-
gated by `QualityBounds`. Cheap and deterministic; covers
|
|
208
|
-
renderable
|
|
272
|
+
gated by `QualityBounds`. Cheap and deterministic; covers every registered
|
|
273
|
+
renderable family via `RenderedLayout` adapters.
|
|
209
274
|
- **ugly-detector** (`eval/ugly-detector/`) — geometric defect detection:
|
|
210
275
|
diagonal segments, floating endpoints, edges through nodes, hitches.
|
|
211
276
|
- **layout rubric / visual-rubric** — hard violations (must be 0) plus soft
|
|
@@ -262,17 +327,51 @@ real judge run can.
|
|
|
262
327
|
`ci.yml` is the source of truth for what gates each PR — read it rather than a
|
|
263
328
|
table here, which would drift. In broad strokes:
|
|
264
329
|
|
|
265
|
-
- **Per-PR (`ci.yml`):** the unit/property suite (`bun test
|
|
330
|
+
- **Per-PR (`ci.yml`):** the three-shard unit/property suite (`bun run test`) —
|
|
266
331
|
Tier-1 verify, goldens, the differential + faithfulness + metamorphic gates,
|
|
267
|
-
`measureQuality`/ugly-detector/layout-rubric, the heuristic-tracker ratchet,
|
|
268
|
-
the corpus/seqbench/upstream benches — plus
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
- **Manual / periodic:**
|
|
275
|
-
competitors, and the real
|
|
332
|
+
`measureQuality`/whole-corpus ugly-detector/layout-rubric, the heuristic-tracker ratchet,
|
|
333
|
+
the corpus/seqbench/upstream benches — plus the high/critical dependency audit,
|
|
334
|
+
type check, the hero check, the
|
|
335
|
+
golden-drift gate, the parallel browser/CLI/binary/fuzz e2e matrix, the fast
|
|
336
|
+
incremental mutation lane, and the independent focused sabotage lane. A final
|
|
337
|
+
`CI complete` job waits for the required test aggregate, every E2E matrix job,
|
|
338
|
+
and mutation, providing one protectable result that cannot turn green early.
|
|
339
|
+
- **Manual / periodic:** opt-in broad Stryker survivor harvests,
|
|
340
|
+
`layout-compare` before/after, the benchmark vs competitors, and the real
|
|
341
|
+
LLM-as-judge run.
|
|
342
|
+
|
|
343
|
+
## Boundary-contract matrix — lessons applied from the 2026-07 agent audit
|
|
344
|
+
|
|
345
|
+
The PR #162 audit exposed a blind spot that family/layout coverage did not
|
|
346
|
+
address: a contract could be correct in one helper and false at another public
|
|
347
|
+
boundary. The review of
|
|
348
|
+
[`adewale/testing-best-practices`](https://github.com/adewale/testing-best-practices)
|
|
349
|
+
led to four concrete changes in how this suite treats those seams:
|
|
350
|
+
|
|
351
|
+
| Risk boundary | Previous false confidence | Required evidence now |
|
|
352
|
+
|---|---|---|
|
|
353
|
+
| JSON-RPC wire lexemes | hosted integer example only | one shared exact-id codec; property tests over unsafe integer, decimal, exponent, batch, nested-id, sentinel-collision, and malformed-text cases; real local HTTP and installed stdio-bin checks |
|
|
354
|
+
| CLI bootstrap/package | formatter helper unit test | walking-skeleton E2E against the real `am` and MCP source entrypoints in a copied checkout with Bun auto-install explicitly disabled |
|
|
355
|
+
| cache before dispatch | normalized-key examples | non-idempotent `execute` is uncacheable; remaining keys retain the complete raw argument object so a warm valid request cannot mask an invalid one; warm-cache regression tests inject the collision |
|
|
356
|
+
| docs/catalog claims | selected-subset presence checks | ordered exact equality against runtime registries, uniqueness, and existence of every catalog target; public `llms.txt` is checked after generation |
|
|
357
|
+
| sequence semantics | global message count | one shared branch-aware message-context model feeds describe, facts, verify/layout and typed edits; unsupported nested semantics must emit a warning |
|
|
358
|
+
| sockets/proxies/chunks | helper could return early | socket tests fail when bind/startup fails, proxy-origin SSE is read from the real stream, and split UTF-8 chunks are exercised at the byte boundary |
|
|
359
|
+
|
|
360
|
+
These follow the research's trust-boundary lens, walking-skeleton smoke tests,
|
|
361
|
+
property-based parser contracts, exact doc-sync, fault injection, and
|
|
362
|
+
correctness-by-construction guidance. Shared validators/codecs/context models
|
|
363
|
+
replace repeated per-layer checks; tests remain at the untyped HTTP/stdio/CLI
|
|
364
|
+
boundaries where TypeScript cannot enforce the wire contract.
|
|
365
|
+
|
|
366
|
+
The dated provenance and prevention analysis, including the reviews of PRs
|
|
367
|
+
#157 and #160, is recorded in
|
|
368
|
+
[`project/agent-interface-contract-audit-2026-07.md`](./project/agent-interface-contract-audit-2026-07.md).
|
|
369
|
+
|
|
370
|
+
The validation rule for future cross-surface changes is: enumerate every
|
|
371
|
+
public consumer first, then require at least one non-vacuous proof at the
|
|
372
|
+
lowest honest tier and one shipped-boundary proof where packaging, transport,
|
|
373
|
+
or generation can change the result. A test that silently returns because its
|
|
374
|
+
environment is unavailable is not evidence for a CI-required capability.
|
|
276
375
|
|
|
277
376
|
## Why the suite is shaped this way
|
|
278
377
|
|
|
@@ -300,23 +399,32 @@ gates rather than adding new machinery:
|
|
|
300
399
|
admittedly rough. The CI LLM mock's readability/aesthetics axes remain
|
|
301
400
|
metric-derived (only its faithfulness axis is now independent), so it
|
|
302
401
|
cannot validate those metrics — only a real periodic judge run can.
|
|
303
|
-
2.
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
402
|
+
2. Automatic mutation assurance is deliberately narrow: PR feedback uses the
|
|
403
|
+
fast incremental faithfulness-counter lane plus five focused sabotage probes.
|
|
404
|
+
Broad mutation configs are manual diagnostics because the retired scheduled
|
|
405
|
+
matrix did not justify its runner and maintenance cost. Line coverage is
|
|
406
|
+
framed as a finder, not a headline score.
|
|
308
407
|
3. The benchmark is not on the PR gate (timing variance). Browser/screenshot
|
|
309
408
|
e2e and the heuristic-tracker ratchet now are.
|
|
310
409
|
4. Determinism is proven Bun↔Node on one architecture; cross-architecture
|
|
311
410
|
byte equality is not asserted.
|
|
312
411
|
5. `QualityBounds` thresholds are now provenance-tagged, but the `chosen`
|
|
313
412
|
bands are still not validated against human-perception evidence.
|
|
314
|
-
6.
|
|
413
|
+
6. Golden movement still needs human judgment, but the snapshot drift sentinel
|
|
414
|
+
blocks unless the change is committed with the explicit `[approve-goldens]`
|
|
415
|
+
review token; the token proves acknowledgment, not visual quality.
|
|
315
416
|
|
|
316
417
|
The deepest gap is structural, and `project/lessons-learned.md` (Loop 13)
|
|
317
418
|
names it: every quality signal here is self-generated. The portfolio above
|
|
318
419
|
produces breadth and internal consistency; it cannot substitute for a real
|
|
319
|
-
external consumer.
|
|
420
|
+
external consumer. One boundary is now an exception: the MCP transport is
|
|
421
|
+
exercised by the reference `@modelcontextprotocol/sdk` client
|
|
422
|
+
(`src/__tests__/mcp-client-interop.test.ts`, per
|
|
423
|
+
`project/mcp-client-interop-verification-plan.md`) — a consumer we did not
|
|
424
|
+
write — over a real socket (hosted) and a real subprocess (stdio). That
|
|
425
|
+
closes the self-generated loop for the one boundary where a canonical
|
|
426
|
+
external consumer exists off the shelf; every other signal above remains
|
|
427
|
+
self-generated.
|
|
320
428
|
|
|
321
429
|
## References
|
|
322
430
|
|
package/docs/theming.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Palettes and theming
|
|
2
2
|
|
|
3
3
|
Agentic Mermaid themes start from a two-color contract (`bg`, `fg`) and can be enriched with optional semantic slots. This keeps diagrams usable in live editors, documentation pages, and agent-generated artifacts without requiring a large design-token object.
|
|
4
4
|
|
|
5
|
-
> **
|
|
6
|
-
> palette-only *style*, so its name works anywhere a style is accepted and
|
|
5
|
+
> **Palette is the registry kind.** Every built-in theme registers as a
|
|
6
|
+
> palette-only *style*, so its stable input name works anywhere a style is accepted and
|
|
7
7
|
> composes with full looks by stacking: `{ style: ['hand-drawn', 'dracula'] }`
|
|
8
8
|
> renders hand-drawn geometry with the Dracula palette. See
|
|
9
9
|
> [docs/style-authoring.md](./style-authoring.md) for the full model.
|
|
@@ -64,36 +64,16 @@ const svg = renderMermaidSVG(source, {
|
|
|
64
64
|
|
|
65
65
|
Because the generated SVG references variables directly, host pages can switch light/dark themes without re-rendering the diagram.
|
|
66
66
|
|
|
67
|
-
## Built-in
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
- `dusk`
|
|
73
|
-
- `zinc-light`
|
|
74
|
-
- `zinc-dark`
|
|
75
|
-
- `tokyo-night`
|
|
76
|
-
- `tokyo-night-storm`
|
|
77
|
-
- `tokyo-night-light`
|
|
78
|
-
- `catppuccin-mocha`
|
|
79
|
-
- `catppuccin-latte`
|
|
80
|
-
- `nord`
|
|
81
|
-
- `nord-light`
|
|
82
|
-
- `dracula`
|
|
83
|
-
- `github-light`
|
|
84
|
-
- `github-dark`
|
|
85
|
-
- `solarized-light`
|
|
86
|
-
- `solarized-dark`
|
|
87
|
-
- `one-dark`
|
|
88
|
-
- `salmon`
|
|
89
|
-
- `salmon-dark`
|
|
90
|
-
- `tufte`
|
|
91
|
-
- `tufte-dark`
|
|
67
|
+
## Built-in Palettes
|
|
68
|
+
|
|
69
|
+
`theme` is not a registry kind; discovery returns `kind: "palette"`.
|
|
70
|
+
Discover current Palette identities and stable input names with
|
|
71
|
+
`knownStyleDescriptors()` or `am styles`; this guide does not copy the registry.
|
|
92
72
|
|
|
93
73
|
```ts
|
|
94
|
-
import {
|
|
74
|
+
import { renderMermaidSVG } from 'agentic-mermaid'
|
|
95
75
|
|
|
96
|
-
const svg = renderMermaidSVG(source,
|
|
76
|
+
const svg = renderMermaidSVG(source, { style: 'tokyo-night' })
|
|
97
77
|
```
|
|
98
78
|
|
|
99
79
|
## Custom themes
|
|
@@ -122,7 +102,7 @@ renderMermaidSVG(source, myTheme)
|
|
|
122
102
|
|
|
123
103
|
Turn a Shiki or VS Code theme into a diagram palette:
|
|
124
104
|
|
|
125
|
-
```ts
|
|
105
|
+
```ts no-run
|
|
126
106
|
import { fromShikiTheme, renderMermaidSVG } from 'agentic-mermaid'
|
|
127
107
|
import githubDark from 'shiki/themes/github-dark.mjs'
|
|
128
108
|
|
|
@@ -147,7 +127,11 @@ For per-element emphasis, keep using Mermaid-native directives such as `classDef
|
|
|
147
127
|
|
|
148
128
|
## Security and fonts
|
|
149
129
|
|
|
150
|
-
Default SVG output
|
|
130
|
+
Default SVG output can include Google Fonts `@import` rules. The selected font
|
|
131
|
+
gets one only when it is a single plain family name; class and ER diagrams can
|
|
132
|
+
also import JetBrains Mono for monospace labels. CSS-variable references and
|
|
133
|
+
font stacks do not produce an import for the selected family. For offline,
|
|
134
|
+
strict, or agent-generated artifacts, use either:
|
|
151
135
|
|
|
152
136
|
```ts
|
|
153
137
|
renderMermaidSVG(source, { embedFontImport: false })
|
|
@@ -160,3 +144,6 @@ renderMermaidSVG(source, { security: 'strict' })
|
|
|
160
144
|
```
|
|
161
145
|
|
|
162
146
|
`security: 'strict'` disables external-fetch references and is the recommended default for untrusted diagrams.
|
|
147
|
+
|
|
148
|
+
For custom Style font selection, browser faces, PNG `fontDirs`, fallbacks, and
|
|
149
|
+
output-surface differences, see [Fonts in custom styles](./custom-fonts.md).
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"sample": "cupertino-prototype.mmd",
|
|
4
|
+
"examples": [
|
|
5
|
+
{
|
|
6
|
+
"id": "cupertino-prototype",
|
|
7
|
+
"style": "cupertino-prototype.style.json",
|
|
8
|
+
"screenshot": "cupertino-prototype.png",
|
|
9
|
+
"alt": "Documentation-only Cupertino-inspired public StyleSpec prototype",
|
|
10
|
+
"summary": "uses public role geometry, elevation, and inspect-only constraints to demonstrate concentric corner curves and rounded connector bends; it is not an Apple product, an endorsed implementation, or a built-in Agentic Mermaid Style.",
|
|
11
|
+
"docsOnly": true,
|
|
12
|
+
"renderOptions": { "shadow": true }
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "vercel-inspired-prototype",
|
|
16
|
+
"style": "vercel-inspired-prototype.style.json",
|
|
17
|
+
"sample": "vercel-inspired-prototype.mmd",
|
|
18
|
+
"screenshot": "vercel-inspired-prototype.png",
|
|
19
|
+
"alt": "Documentation-only Vercel-inspired public StyleSpec prototype",
|
|
20
|
+
"summary": "uses public role styles, XYChart category bindings, semantic slots, and inspect-only constraints; it is not a Vercel product, an endorsed implementation, or a built-in Agentic Mermaid Style.",
|
|
21
|
+
"docsOnly": true
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "cloudflare-workers-inspired-prototype",
|
|
25
|
+
"style": "cloudflare-workers-inspired-prototype.style.json",
|
|
26
|
+
"sample": "cloudflare-workers-inspired-prototype.mmd",
|
|
27
|
+
"screenshot": "cloudflare-workers-inspired-prototype.png",
|
|
28
|
+
"alt": "Documentation-only Cloudflare Workers-inspired public StyleSpec prototype",
|
|
29
|
+
"summary": "uses public role styles, Gantt section bindings, visible non-color cues, semantic slots, and inspect-only constraints; it is not a Cloudflare product, an endorsed implementation, or a built-in Agentic Mermaid Style.",
|
|
30
|
+
"docsOnly": true
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "transit-route-map",
|
|
34
|
+
"style": "transit-route-map.style.json",
|
|
35
|
+
"screenshot": "transit-route-map.png",
|
|
36
|
+
"alt": "Transit route map custom style",
|
|
37
|
+
"summary": "stresses thick connectors, rounded bends, compact station labels, and group labels."
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "mid-century-report",
|
|
41
|
+
"style": "mid-century-report.style.json",
|
|
42
|
+
"screenshot": "mid-century-report.png",
|
|
43
|
+
"alt": "Mid-century report custom style",
|
|
44
|
+
"summary": "uses palette, solid fills, typography, corners, and section bands without a custom renderer."
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"id": "star-chart-atlas",
|
|
48
|
+
"style": "star-chart-atlas.style.json",
|
|
49
|
+
"screenshot": "star-chart-atlas.png",
|
|
50
|
+
"alt": "Star chart atlas custom style",
|
|
51
|
+
"summary": "tests dark-page tokens, grid backdrop, pale strokes, and serif labels."
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
gantt
|
|
2
|
+
title Workers delivery
|
|
3
|
+
dateFormat YYYY-MM-DD
|
|
4
|
+
section Edge
|
|
5
|
+
Route request :done, route, 2026-01-05, 2d
|
|
6
|
+
Deploy isolate :crit, deploy, after route, 3d
|
|
7
|
+
section Runtime
|
|
8
|
+
Execute worker :run, after deploy, 4d
|
|
9
|
+
Observe release :milestone, observe, after run, 0d
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://agentic-mermaid.dev/schemas/style-spec.schema.json",
|
|
3
|
+
"formatVersion": 1,
|
|
4
|
+
"name": "look:cloudflare-workers-inspired-prototype",
|
|
5
|
+
"blurb": "Documentation-only Cloudflare Workers-inspired prototype exercising public role styles, Gantt category bindings, non-color cues, and inspect-only constraints; not built in or endorsed.",
|
|
6
|
+
"colors": {
|
|
7
|
+
"bg": "#f5f1eb",
|
|
8
|
+
"fg": "#521000",
|
|
9
|
+
"line": "#835446",
|
|
10
|
+
"accent": "#ff4801",
|
|
11
|
+
"muted": "#835446",
|
|
12
|
+
"surface": "#fffbf5",
|
|
13
|
+
"border": "#ebd5c1"
|
|
14
|
+
},
|
|
15
|
+
"font": "Inter",
|
|
16
|
+
"stroke": "crisp",
|
|
17
|
+
"strokeWidth": 1.25,
|
|
18
|
+
"intent": "premium",
|
|
19
|
+
"roles": {
|
|
20
|
+
"node": {
|
|
21
|
+
"fontSize": 13,
|
|
22
|
+
"fontWeight": 500,
|
|
23
|
+
"paddingX": 22,
|
|
24
|
+
"paddingY": 12,
|
|
25
|
+
"cornerRadius": 8,
|
|
26
|
+
"lineWidth": 1,
|
|
27
|
+
"fillColor": "#fffbf5",
|
|
28
|
+
"borderColor": "#ebd5c1",
|
|
29
|
+
"textColor": "#521000"
|
|
30
|
+
},
|
|
31
|
+
"edge": {
|
|
32
|
+
"fontSize": 11,
|
|
33
|
+
"fontWeight": 400,
|
|
34
|
+
"letterSpacing": 0.1,
|
|
35
|
+
"lineWidth": 1.25,
|
|
36
|
+
"bendRadius": 10,
|
|
37
|
+
"strokeColor": "#835446",
|
|
38
|
+
"textColor": "#835446"
|
|
39
|
+
},
|
|
40
|
+
"group": {
|
|
41
|
+
"fontFamily": "Share Tech Mono",
|
|
42
|
+
"fontSize": 11,
|
|
43
|
+
"fontWeight": 400,
|
|
44
|
+
"letterSpacing": 0.6,
|
|
45
|
+
"textTransform": "uppercase",
|
|
46
|
+
"paddingX": 18,
|
|
47
|
+
"paddingY": 18,
|
|
48
|
+
"cornerRadius": 12,
|
|
49
|
+
"lineWidth": 1,
|
|
50
|
+
"fillColor": "rgba(255,72,1,0.04)",
|
|
51
|
+
"headerFillColor": "rgba(255,72,1,0.08)",
|
|
52
|
+
"borderColor": "#ebd5c1",
|
|
53
|
+
"textColor": "#835446"
|
|
54
|
+
},
|
|
55
|
+
"label": {
|
|
56
|
+
"fontSize": 11,
|
|
57
|
+
"fontWeight": 400,
|
|
58
|
+
"letterSpacing": 0.1,
|
|
59
|
+
"textColor": "#835446"
|
|
60
|
+
},
|
|
61
|
+
"group-header": {
|
|
62
|
+
"fontFamily": "Share Tech Mono",
|
|
63
|
+
"fontSize": 11,
|
|
64
|
+
"fontWeight": 700,
|
|
65
|
+
"letterSpacing": 0.5,
|
|
66
|
+
"textTransform": "uppercase",
|
|
67
|
+
"textColor": "#521000",
|
|
68
|
+
"fillColor": "rgba(255,72,1,0.08)",
|
|
69
|
+
"borderColor": "#ebd5c1",
|
|
70
|
+
"lineWidth": 1
|
|
71
|
+
},
|
|
72
|
+
"task": {
|
|
73
|
+
"fillColor": "#fff0e8",
|
|
74
|
+
"borderColor": "#c2410c",
|
|
75
|
+
"lineWidth": 1.5,
|
|
76
|
+
"cue": "outline"
|
|
77
|
+
},
|
|
78
|
+
"milestone": {
|
|
79
|
+
"fillColor": "#ff4801",
|
|
80
|
+
"borderColor": "#8a2600",
|
|
81
|
+
"lineWidth": 2,
|
|
82
|
+
"cue": "pattern"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"semanticSlots": {
|
|
86
|
+
"edge-work": {
|
|
87
|
+
"fillColor": "#fff0e8",
|
|
88
|
+
"borderColor": "#c2410c",
|
|
89
|
+
"strokeColor": "#c2410c",
|
|
90
|
+
"lineWidth": 1.5,
|
|
91
|
+
"cue": "outline"
|
|
92
|
+
},
|
|
93
|
+
"runtime-work": {
|
|
94
|
+
"fillColor": "#ff4801",
|
|
95
|
+
"borderColor": "#8a2600",
|
|
96
|
+
"strokeColor": "#8a2600",
|
|
97
|
+
"lineWidth": 2,
|
|
98
|
+
"cue": "pattern"
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
"bindings": [
|
|
102
|
+
{ "channel": "category", "value": "Edge", "slot": "edge-work", "role": "task" },
|
|
103
|
+
{ "channel": "category", "value": "Runtime", "slot": "runtime-work", "role": "task" },
|
|
104
|
+
{ "channel": "category", "value": "Runtime", "slot": "runtime-work", "role": "milestone" }
|
|
105
|
+
],
|
|
106
|
+
"constraints": [
|
|
107
|
+
{ "kind": "contrast", "action": "warn", "minimum": 4.5 },
|
|
108
|
+
{ "kind": "accent-area", "action": "warn", "maxFraction": 0.35 }
|
|
109
|
+
]
|
|
110
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
flowchart LR
|
|
2
|
+
subgraph Core["Routing core"]
|
|
3
|
+
Intake["Intake"] --> Validate{"Valid?"}
|
|
4
|
+
Validate -- yes --> Render["Render SVG"]
|
|
5
|
+
Validate -- no --> Repair["Repair source"]
|
|
6
|
+
Repair --> Validate
|
|
7
|
+
end
|
|
8
|
+
Render --> Export["Export PNG"]
|
|
9
|
+
Render --> Audit["Contrast audit"]
|
|
10
|
+
Audit --> Export
|