agentic-mermaid 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (333) hide show
  1. package/CHANGELOG.md +149 -4
  2. package/LICENSES/Apache-2.0.txt +202 -0
  3. package/README.md +25 -32
  4. package/THIRD_PARTY_NOTICES.md +29 -0
  5. package/assets/fonts/FONT-LICENSES.md +9 -5
  6. package/assets/fonts/Inter-Bold.ttf +0 -0
  7. package/assets/fonts/Inter-Medium.ttf +0 -0
  8. package/assets/fonts/Inter-Regular.ttf +0 -0
  9. package/assets/fonts/Inter-SemiBold.ttf +0 -0
  10. package/dist/agent-core.d.ts +463 -0
  11. package/dist/agent-core.js +397 -0
  12. package/dist/agent.d.ts +81 -1822
  13. package/dist/agent.js +336 -36839
  14. package/dist/agentic-mermaid-mcp.js +7 -37908
  15. package/dist/am.js +33638 -36261
  16. package/dist/chunk-4QECACIA.js +4702 -0
  17. package/dist/chunk-CDPKJ2BQ.js +37 -0
  18. package/dist/chunk-QKDLMOJJ.js +3487 -0
  19. package/dist/chunk-WI35L7IR.js +615 -0
  20. package/dist/chunk-WN3YDOBG.js +149 -0
  21. package/dist/chunk-ZYMMKQ3I.js +62637 -0
  22. package/dist/index-D54dqSdC.d.ts +6777 -0
  23. package/dist/index.d.ts +1 -1
  24. package/dist/index.js +310 -32836
  25. package/dist/mcp-cli-SBQSTJFC.js +17 -0
  26. package/docs/README.md +14 -6
  27. package/docs/schemas/style-spec.schema.json +1221 -30
  28. package/examples/styles/catalog.json +54 -0
  29. package/examples/styles/cloudflare-workers-inspired-prototype.mmd +9 -0
  30. package/examples/styles/cloudflare-workers-inspired-prototype.style.json +110 -0
  31. package/examples/styles/cupertino-prototype.mmd +10 -0
  32. package/examples/styles/cupertino-prototype.style.json +63 -0
  33. package/examples/styles/mid-century-report.style.json +2 -2
  34. package/examples/styles/star-chart-atlas.style.json +2 -1
  35. package/examples/styles/transit-route-map.style.json +2 -2
  36. package/examples/styles/vercel-inspired-prototype.mmd +6 -0
  37. package/examples/styles/vercel-inspired-prototype.style.json +87 -0
  38. package/package.json +70 -43
  39. package/server.json +41 -0
  40. package/skills/agentic-mermaid-diagram-workflow/SKILL.md +17 -36
  41. package/skills/agentic-mermaid-diagram-workflow/references/cli.md +4 -5
  42. package/skills/agentic-mermaid-diagram-workflow/references/code-mode.md +15 -31
  43. package/skills/agentic-mermaid-diagram-workflow/references/sequence.md +10 -14
  44. package/skills/agentic-mermaid-live-editor/SKILL.md +100 -206
  45. package/AGENT_NATIVE.md +0 -602
  46. package/Instructions_for_agents.md +0 -83
  47. package/TODO.md +0 -662
  48. package/assets/hero.png +0 -0
  49. package/dist/index-x2Cj1dVv.d.ts +0 -1089
  50. package/docs/agent-api-cookbook.md +0 -308
  51. package/docs/agent-mutation-policy.md +0 -104
  52. package/docs/agent-workflow-examples.md +0 -46
  53. package/docs/api.md +0 -203
  54. package/docs/ascii.md +0 -103
  55. package/docs/assets/improvements/box-start-connector.png +0 -0
  56. package/docs/assets/improvements/comment-dropped-lint.png +0 -0
  57. package/docs/assets/improvements/er-content-loss.png +0 -0
  58. package/docs/assets/improvements/fan-in-trunks.png +0 -0
  59. package/docs/assets/improvements/gantt-family.png +0 -0
  60. package/docs/assets/improvements/gantt-milestone-clamp.png +0 -0
  61. package/docs/assets/improvements/gantt-verify-seam.png +0 -0
  62. package/docs/assets/improvements/subgraph-container-edges.png +0 -0
  63. package/docs/assets/improvements/wrapper-frontmatter.png +0 -0
  64. package/docs/assets/improvements/wrapper-init-directive.png +0 -0
  65. package/docs/assets/improvements/wrapper-leading-comment.png +0 -0
  66. package/docs/assets/style-cookbook/mid-century-report.png +0 -0
  67. package/docs/assets/style-cookbook/star-chart-atlas.png +0 -0
  68. package/docs/assets/style-cookbook/transit-route-map.png +0 -0
  69. package/docs/comparison.md +0 -94
  70. package/docs/config.md +0 -105
  71. package/docs/contributing/adding-diagram-types.md +0 -144
  72. package/docs/contributing/diagram-family-citizenship.matrix.json +0 -2127
  73. package/docs/contributing/diagram-family-citizenship.md +0 -82
  74. package/docs/contributing/harvesting-upstream-tests.md +0 -126
  75. package/docs/contributing/lessons-learned.md +0 -276
  76. package/docs/contributing/releasing.md +0 -71
  77. package/docs/contributing/visual-review-evidence.md +0 -53
  78. package/docs/custom-style-cookbook.md +0 -154
  79. package/docs/design/families/README.md +0 -26
  80. package/docs/design/families/architecture-beta.md +0 -48
  81. package/docs/design/families/flowchart-parser-conformance.md +0 -22
  82. package/docs/design/families/gantt-research.md +0 -137
  83. package/docs/design/families/gantt.md +0 -329
  84. package/docs/design/families/journey-agentic-cards-before.png +0 -0
  85. package/docs/design/families/journey-mermaid-classic-implementation.png +0 -0
  86. package/docs/design/families/journey-mermaid-classic-prototype.png +0 -0
  87. package/docs/design/families/journey-mermaid-classic-prototype.svg +0 -163
  88. package/docs/design/families/journey-mermaid-classic-prototype.svg.png +0 -0
  89. package/docs/design/families/journey-migration-parity.md +0 -433
  90. package/docs/design/families/journey-usage-research.md +0 -423
  91. package/docs/design/families/journey.md +0 -125
  92. package/docs/design/families/xychart.md +0 -85
  93. package/docs/design/system/README.md +0 -45
  94. package/docs/design/system/abstraction-audit.md +0 -224
  95. package/docs/design/system/abstraction-recommendations.md +0 -655
  96. package/docs/design/system/architecture.mmd +0 -29
  97. package/docs/design/system/architecture.svg +0 -137
  98. package/docs/design/system/layout-guarantees-and-robustness.md +0 -351
  99. package/docs/design/system/layout-rubric.md +0 -138
  100. package/docs/design/system/route-contracts.md +0 -848
  101. package/docs/design/system/source-preservation-ladder.md +0 -52
  102. package/docs/design/system/styles-rollout.md +0 -216
  103. package/docs/design/system/ugly-layouts.md +0 -119
  104. package/docs/diagram-families.md +0 -193
  105. package/docs/features.md +0 -147
  106. package/docs/fork-differences.md +0 -130
  107. package/docs/getting-started.md +0 -175
  108. package/docs/issue-derived-test-cases.md +0 -156
  109. package/docs/layout-characterization/README.md +0 -245
  110. package/docs/layout-characterization/contact-sheet-families.md +0 -496
  111. package/docs/layout-characterization/contact-sheet.md +0 -638
  112. package/docs/layout-characterization/properties.md +0 -281
  113. package/docs/layout-characterization/visual-quality.md +0 -160
  114. package/docs/layout-characterization/visual-snapshots/architecture.svg +0 -79
  115. package/docs/layout-characterization/visual-snapshots/class.svg +0 -60
  116. package/docs/layout-characterization/visual-snapshots/er.svg +0 -61
  117. package/docs/layout-characterization/visual-snapshots/flowchart.svg +0 -58
  118. package/docs/layout-characterization/visual-snapshots/gantt.svg +0 -52
  119. package/docs/layout-characterization/visual-snapshots/journey.svg +0 -118
  120. package/docs/layout-characterization/visual-snapshots/pie.svg +0 -36
  121. package/docs/layout-characterization/visual-snapshots/quadrant.svg +0 -47
  122. package/docs/layout-characterization/visual-snapshots/sequence.svg +0 -59
  123. package/docs/layout-characterization/visual-snapshots/state.svg +0 -52
  124. package/docs/layout-characterization/visual-snapshots/timeline.svg +0 -64
  125. package/docs/layout-characterization/visual-snapshots/xychart.svg +0 -97
  126. package/docs/mcp-code-mode-rationale.md +0 -101
  127. package/docs/mcp-http-transport.md +0 -223
  128. package/docs/mermaid-layout-complaints.md +0 -837
  129. package/docs/mutation-testing.md +0 -206
  130. package/docs/project/divergences.md +0 -98
  131. package/docs/project/dogfooding-docs-strategy.md +0 -66
  132. package/docs/project/hosted-mcp-cloudflare-plan.md +0 -338
  133. package/docs/project/lessons-learned.md +0 -1019
  134. package/docs/project/remove-role-styling-plan.md +0 -176
  135. package/docs/quality.md +0 -212
  136. package/docs/react.md +0 -97
  137. package/docs/style-authoring.md +0 -133
  138. package/docs/testing-strategy.md +0 -335
  139. package/docs/theming.md +0 -162
  140. package/examples/agent-improve-auth-flow.ts +0 -206
  141. package/examples/agent-loop.ts +0 -53
  142. package/examples/mcp-vs-cli-complex-diagrams.ts +0 -133
  143. package/llms.txt +0 -104
  144. package/skill-evals/README.md +0 -77
  145. package/skill-evals/fixtures/architecture-cache/input.mmd +0 -5
  146. package/skill-evals/fixtures/class-payment/input.mmd +0 -4
  147. package/skill-evals/fixtures/er-orders/input.mmd +0 -10
  148. package/skill-evals/fixtures/flowchart-cache/input.mmd +0 -3
  149. package/skill-evals/fixtures/gantt-release/input.mmd +0 -7
  150. package/skill-evals/fixtures/journey-checkout/input.mmd +0 -6
  151. package/skill-evals/fixtures/pie-exports/input.mmd +0 -5
  152. package/skill-evals/fixtures/quadrant-priorities/input.mmd +0 -11
  153. package/skill-evals/fixtures/sequence-retry/input.mmd +0 -8
  154. package/skill-evals/fixtures/state-lifecycle/input.mmd +0 -5
  155. package/skill-evals/fixtures/timeline-release/input.mmd +0 -6
  156. package/skill-evals/fixtures/xychart-growth/input.mmd +0 -5
  157. package/skill-evals/shared-benchmark.json +0 -510
  158. package/src/agent/analyze.ts +0 -157
  159. package/src/agent/apply.ts +0 -146
  160. package/src/agent/architecture-body.ts +0 -458
  161. package/src/agent/certificates.ts +0 -110
  162. package/src/agent/class-body.ts +0 -319
  163. package/src/agent/core.ts +0 -207
  164. package/src/agent/create.ts +0 -106
  165. package/src/agent/describe.ts +0 -364
  166. package/src/agent/er-body.ts +0 -224
  167. package/src/agent/facts.ts +0 -337
  168. package/src/agent/families-builtin.ts +0 -934
  169. package/src/agent/families.ts +0 -232
  170. package/src/agent/family-layouts.ts +0 -826
  171. package/src/agent/flowchart-body.ts +0 -372
  172. package/src/agent/flowchart-unsupported.ts +0 -243
  173. package/src/agent/gantt-body.ts +0 -495
  174. package/src/agent/index.ts +0 -10
  175. package/src/agent/journey-body.ts +0 -414
  176. package/src/agent/label-metrics.ts +0 -28
  177. package/src/agent/layout-to-rendered.ts +0 -63
  178. package/src/agent/mutate.ts +0 -97
  179. package/src/agent/mutation-ops.ts +0 -51
  180. package/src/agent/op-schema.ts +0 -439
  181. package/src/agent/parse.ts +0 -223
  182. package/src/agent/pie-body.ts +0 -270
  183. package/src/agent/png.ts +0 -117
  184. package/src/agent/quadrant-body.ts +0 -336
  185. package/src/agent/quality.ts +0 -363
  186. package/src/agent/readability-audit.ts +0 -92
  187. package/src/agent/rendered-route-audit.ts +0 -61
  188. package/src/agent/sequence-body.ts +0 -345
  189. package/src/agent/serialize.ts +0 -214
  190. package/src/agent/state-body.ts +0 -589
  191. package/src/agent/structural-count.ts +0 -150
  192. package/src/agent/timeline-body.ts +0 -280
  193. package/src/agent/trace-log.ts +0 -43
  194. package/src/agent/types.ts +0 -979
  195. package/src/agent/verify.ts +0 -571
  196. package/src/agent/xychart-body.ts +0 -472
  197. package/src/architecture/config.ts +0 -282
  198. package/src/architecture/layout.ts +0 -496
  199. package/src/architecture/parser.ts +0 -375
  200. package/src/architecture/renderer.ts +0 -611
  201. package/src/architecture/types.ts +0 -113
  202. package/src/ascii/ansi.ts +0 -423
  203. package/src/ascii/architecture.ts +0 -210
  204. package/src/ascii/canvas.ts +0 -443
  205. package/src/ascii/class-diagram.ts +0 -697
  206. package/src/ascii/converter.ts +0 -475
  207. package/src/ascii/draw.ts +0 -1693
  208. package/src/ascii/edge-bundling.ts +0 -328
  209. package/src/ascii/edge-routing.ts +0 -330
  210. package/src/ascii/er-diagram.ts +0 -439
  211. package/src/ascii/gantt.ts +0 -276
  212. package/src/ascii/grid.ts +0 -747
  213. package/src/ascii/index.ts +0 -196
  214. package/src/ascii/journey.ts +0 -189
  215. package/src/ascii/meta.ts +0 -244
  216. package/src/ascii/multiline-utils.ts +0 -80
  217. package/src/ascii/pathfinder.ts +0 -301
  218. package/src/ascii/pie.ts +0 -67
  219. package/src/ascii/quadrant.ts +0 -158
  220. package/src/ascii/reverse.ts +0 -216
  221. package/src/ascii/sequence.ts +0 -499
  222. package/src/ascii/shapes/circle.ts +0 -27
  223. package/src/ascii/shapes/corners.ts +0 -143
  224. package/src/ascii/shapes/diamond.ts +0 -27
  225. package/src/ascii/shapes/hexagon.ts +0 -27
  226. package/src/ascii/shapes/index.ts +0 -106
  227. package/src/ascii/shapes/rectangle.ts +0 -168
  228. package/src/ascii/shapes/rounded.ts +0 -27
  229. package/src/ascii/shapes/special.ts +0 -332
  230. package/src/ascii/shapes/stadium.ts +0 -110
  231. package/src/ascii/shapes/state.ts +0 -192
  232. package/src/ascii/shapes/types.ts +0 -73
  233. package/src/ascii/timeline.ts +0 -128
  234. package/src/ascii/types.ts +0 -312
  235. package/src/ascii/validate.ts +0 -120
  236. package/src/ascii/width.ts +0 -81
  237. package/src/ascii/xychart.ts +0 -919
  238. package/src/browser.ts +0 -29
  239. package/src/class/layout.ts +0 -240
  240. package/src/class/parser.ts +0 -332
  241. package/src/class/renderer.ts +0 -638
  242. package/src/class/types.ts +0 -129
  243. package/src/cli/agent-instructions.ts +0 -1
  244. package/src/cli/am-bin.ts +0 -6
  245. package/src/cli/exit-codes.ts +0 -18
  246. package/src/cli/index.ts +0 -1117
  247. package/src/cli/init-agent.ts +0 -147
  248. package/src/color-resolver.ts +0 -152
  249. package/src/elk-instance.ts +0 -114
  250. package/src/er/layout.ts +0 -187
  251. package/src/er/parser.ts +0 -226
  252. package/src/er/renderer.ts +0 -792
  253. package/src/er/types.ts +0 -99
  254. package/src/font-manifest.ts +0 -27
  255. package/src/gantt/layout.ts +0 -365
  256. package/src/gantt/parser.ts +0 -282
  257. package/src/gantt/pipeline.ts +0 -27
  258. package/src/gantt/renderer.ts +0 -414
  259. package/src/gantt/schedule.ts +0 -513
  260. package/src/gantt/types.ts +0 -255
  261. package/src/index.ts +0 -368
  262. package/src/journey/layout.ts +0 -520
  263. package/src/journey/parser.ts +0 -218
  264. package/src/journey/renderer.ts +0 -811
  265. package/src/journey/types.ts +0 -144
  266. package/src/layout/geometry.ts +0 -182
  267. package/src/layout/pass.ts +0 -142
  268. package/src/layout/passes/index.ts +0 -3916
  269. package/src/layout-engine.ts +0 -1565
  270. package/src/layout-rubric.ts +0 -659
  271. package/src/mcp/artifacts.ts +0 -137
  272. package/src/mcp/dynamic-harness.ts +0 -31
  273. package/src/mcp/dynamic-modules.d.ts +0 -7
  274. package/src/mcp/facade.ts +0 -608
  275. package/src/mcp/harness-runtime.ts +0 -203
  276. package/src/mcp/hosted-server.ts +0 -468
  277. package/src/mcp/mcp-bin.ts +0 -3
  278. package/src/mcp/mcp-cli.ts +0 -82
  279. package/src/mcp/protocol.ts +0 -13
  280. package/src/mcp/sandbox.ts +0 -195
  281. package/src/mcp/sdk-decl.ts +0 -387
  282. package/src/mcp/server.ts +0 -362
  283. package/src/mcp/tool-surface.ts +0 -146
  284. package/src/mermaid-source.ts +0 -655
  285. package/src/multiline-utils.ts +0 -228
  286. package/src/parser.ts +0 -1031
  287. package/src/pie/layout.ts +0 -168
  288. package/src/pie/parser.ts +0 -136
  289. package/src/pie/renderer.ts +0 -234
  290. package/src/pie/types.ts +0 -82
  291. package/src/quadrant/layout.ts +0 -191
  292. package/src/quadrant/parser.ts +0 -183
  293. package/src/quadrant/renderer.ts +0 -322
  294. package/src/quadrant/types.ts +0 -113
  295. package/src/render-family-hooks.ts +0 -244
  296. package/src/renderer.ts +0 -1099
  297. package/src/route-contracts.ts +0 -2723
  298. package/src/scene/backend.ts +0 -76
  299. package/src/scene/fidelity.ts +0 -183
  300. package/src/scene/hybrid-backend.ts +0 -174
  301. package/src/scene/ir.ts +0 -181
  302. package/src/scene/marks.ts +0 -127
  303. package/src/scene/rough-backend.ts +0 -378
  304. package/src/scene/seed.ts +0 -46
  305. package/src/scene/style-registry.ts +0 -556
  306. package/src/sequence/layout.ts +0 -456
  307. package/src/sequence/parser.ts +0 -255
  308. package/src/sequence/renderer.ts +0 -604
  309. package/src/sequence/types.ts +0 -154
  310. package/src/shape-clipping.ts +0 -351
  311. package/src/shared/accessibility-directives.ts +0 -22
  312. package/src/shared/batched.ts +0 -61
  313. package/src/shared/color-math.ts +0 -72
  314. package/src/shared/svg-a11y.ts +0 -29
  315. package/src/shared/syntax-error.ts +0 -17
  316. package/src/shared/unicode-ranges.ts +0 -135
  317. package/src/styles.ts +0 -318
  318. package/src/svg-paths.ts +0 -28
  319. package/src/text-metrics.ts +0 -248
  320. package/src/theme.ts +0 -639
  321. package/src/timeline/layout.ts +0 -381
  322. package/src/timeline/parser.ts +0 -215
  323. package/src/timeline/renderer.ts +0 -538
  324. package/src/timeline/types.ts +0 -105
  325. package/src/types.ts +0 -454
  326. package/src/website-worker-modules.d.ts +0 -18
  327. package/src/xychart/axis-utils.ts +0 -109
  328. package/src/xychart/colors.ts +0 -124
  329. package/src/xychart/config.ts +0 -88
  330. package/src/xychart/layout.ts +0 -656
  331. package/src/xychart/parser.ts +0 -504
  332. package/src/xychart/renderer.ts +0 -640
  333. package/src/xychart/types.ts +0 -282
@@ -1,5 +0,0 @@
1
- xychart-beta
2
- title "Adoption"
3
- x-axis [Jan, Feb, Mar]
4
- y-axis "Users" 0 --> 100
5
- bar [20, 45, 70]
@@ -1,510 +0,0 @@
1
- {
2
- "version": 1,
3
- "skill_name": "agentic-mermaid-project-skills",
4
- "harness": {
5
- "name": "skill-eval-harness",
6
- "url": "https://github.com/adewale/skill-eval-harness",
7
- "version": ">=0.1.1"
8
- },
9
- "skill_paths": [
10
- "skills/agentic-mermaid-diagram-workflow",
11
- "skills/agentic-mermaid-live-editor"
12
- ],
13
- "variants": ["with_skill", "without_skill"],
14
- "run_policy": {
15
- "minimum_runs_per_variant": 3,
16
- "recommended_runs_per_variant": 5,
17
- "notes": "Use 3 runs per variant for cheap iteration and 5 for pre-merge or release-quality evidence. Fixture-backed artifact cases require a runner that preserves generated outputs under the run directory."
18
- },
19
- "split_policy": {
20
- "tune": "Visible cases used while editing the skills and evals. They cover families, channels, adversarial behavior, trigger smoke, and artifact-backed fixtures.",
21
- "holdout": "Private prompt_ref cases scored at end-of-round or merge. Public manifest keeps only IDs, tags, fixtures, and objective checks.",
22
- "holdback": "Private prompt_ref cases not exposed in skill/docs/eval descriptions until after scoring; use to detect memorization and overfitting."
23
- },
24
- "cases": [
25
- {
26
- "id": "pos-diagram-existing-flowchart-safe-edit",
27
- "split": "tune",
28
- "kind": "positive",
29
- "prompt": "A coding agent must edit an existing Mermaid flowchart using Agentic Mermaid. Give the safest workflow and a tiny code sketch for adding a Cache node between API and DB. Also name the main render output formats. Do not browse the repository; answer from any loaded skill if one is available.",
30
- "expected_behavior": [
31
- "Use parse -> narrow -> mutate -> verify -> serialize for existing structured diagrams.",
32
- "Mention the flowchart narrower and typed mutations rather than source concatenation.",
33
- "Name ASCII, PNG, and SVG outputs."
34
- ],
35
- "assertions": [
36
- {"name": "core-loop", "type": "contains_all", "values": ["parseMermaid", "asFlowchart", "mutate", "verifyMermaid", "serializeMermaid"]},
37
- {"name": "outputs", "type": "contains_all", "values": ["ASCII", "PNG", "SVG"]},
38
- {"name": "avoid-source-splice", "type": "contains_any", "values": ["source concatenation", "concatenate", "typed op", "typed mutation"]},
39
- {"name": "op-discriminator", "type": "contains", "value": "kind"},
40
- {"name": "result-unwrapping", "type": "contains", "value": ".value"}
41
- ],
42
- "tags": ["diagram-workflow", "flowchart", "library", "positive"]
43
- },
44
- {
45
- "id": "pos-live-editor-source-of-truth",
46
- "split": "tune",
47
- "kind": "positive",
48
- "prompt": "A coding agent must change Agentic Mermaid's live editor export behavior. What source-of-truth file should it edit, what generated artifact rule should it follow, and which export/output formats are relevant? Do not browse the repository; answer from any loaded skill if one is available.",
49
- "expected_behavior": [
50
- "Identify scripts/site/editor.ts as the source of truth.",
51
- "Do not edit generated editor.html directly; rebuild after changing the generator.",
52
- "Mention SVG/PNG editor exports and the broader ASCII, PNG, SVG output story."
53
- ],
54
- "assertions": [
55
- {"name": "source-of-truth", "type": "contains", "value": "scripts/site/editor.ts"},
56
- {"name": "generated-artifact-rule", "type": "contains_all", "values": ["editor.html", "rebuild"]},
57
- {"name": "outputs", "type": "contains_all", "values": ["ASCII", "PNG", "SVG"]}
58
- ],
59
- "tags": ["editor", "positive"]
60
- },
61
- {
62
- "id": "pos-family-flowchart-library-fixture",
63
- "split": "tune",
64
- "kind": "positive",
65
- "prompt": "Use the attached Mermaid fixture. With the Agentic Mermaid library channel, edit the existing flowchart so Cache sits between API and DB. Produce artifact files under outputs/flowchart-cache/final.mmd and outputs/flowchart-cache/verify.json, include their contents in your final answer, and show the exact verification evidence from verifyMermaid. Do not edit by source concatenation when a typed op exists.",
66
- "files": ["fixtures/flowchart-cache/input.mmd"],
67
- "expected_behavior": [
68
- "Reads the fixture source.",
69
- "Uses parseMermaid -> asFlowchart -> mutate -> verifyMermaid -> serializeMermaid.",
70
- "Uses kind-discriminated ops and unwraps Result.value.",
71
- "Produces changed source and verify evidence."
72
- ],
73
- "assertions": [
74
- {"name": "artifact-final", "type": "file_exists", "path": "outputs/flowchart-cache/final.mmd"},
75
- {"name": "artifact-verify", "type": "file_exists", "path": "outputs/flowchart-cache/verify.json"},
76
- {"name": "library-loop", "type": "contains_all", "values": ["parseMermaid", "asFlowchart", "mutate", "verifyMermaid", "serializeMermaid"]},
77
- {"name": "cache-path", "type": "contains_all", "values": ["API", "Cache", "DB"]},
78
- {"name": "kind-op", "type": "contains", "value": "kind"}
79
- ],
80
- "tags": ["family:flowchart", "channel:library", "fixture", "artifact", "positive"]
81
- },
82
- {
83
- "id": "pos-family-sequence-code-mode-fixture",
84
- "split": "tune",
85
- "kind": "positive",
86
- "prompt": "Use the attached Mermaid fixture. In MCP Code Mode style, show one execute(code) payload that parses the existing sequence diagram, narrows it, adds an API retry message before the final response, verifies, and serializes. Produce outputs/sequence-retry/final.mmd and outputs/sequence-retry/verify.json, include both contents in the final answer, and include the verification result. Use typed mutation where supported.",
87
- "files": ["fixtures/sequence-retry/input.mmd"],
88
- "expected_behavior": [
89
- "Chooses Code Mode execute(code).",
90
- "Uses parseMermaid, asSequence, mutate add_message, verifyMermaid, serializeMermaid.",
91
- "Produces artifacts and verification evidence."
92
- ],
93
- "assertions": [
94
- {"name": "artifact-final", "type": "file_exists", "path": "outputs/sequence-retry/final.mmd"},
95
- {"name": "artifact-verify", "type": "file_exists", "path": "outputs/sequence-retry/verify.json"},
96
- {"name": "code-mode", "type": "contains_any", "values": ["execute(code)", "execute(", "Code Mode"]},
97
- {"name": "sequence-loop", "type": "contains_all", "values": ["parseMermaid", "asSequence", "add_message", "verifyMermaid", "serializeMermaid"]},
98
- {"name": "retry", "type": "contains_any", "values": ["Retry", "retry"]}
99
- ],
100
- "tags": ["family:sequence", "channel:mcp-code-mode", "fixture", "artifact", "positive"]
101
- },
102
- {
103
- "id": "pos-family-timeline-cli-fixture",
104
- "split": "tune",
105
- "kind": "positive",
106
- "prompt": "Use the attached Mermaid fixture. Use the CLI channel to add a Ship period under the Build section with an artifact event, verify it, and render at least one text or image output. Include the exact am mutate/am render command sketch, write outputs/timeline-release/final.mmd and outputs/timeline-release/verify.json, and include their contents in your final answer.",
107
- "files": ["fixtures/timeline-release/input.mmd"],
108
- "expected_behavior": [
109
- "Chooses CLI commands for shell-only workflow.",
110
- "Uses am mutate with --op or --ops and kind-discriminated timeline ops.",
111
- "Uses verify evidence and mentions render formats."
112
- ],
113
- "assertions": [
114
- {"name": "artifact-final", "type": "file_exists", "path": "outputs/timeline-release/final.mmd"},
115
- {"name": "artifact-verify", "type": "file_exists", "path": "outputs/timeline-release/verify.json"},
116
- {"name": "cli", "type": "contains_all", "values": ["am mutate", "am render"]},
117
- {"name": "timeline-op", "type": "contains_any", "values": ["add_period", "add_event"]},
118
- {"name": "formats", "type": "contains_all", "values": ["ASCII", "PNG", "SVG"]}
119
- ],
120
- "tags": ["family:timeline", "channel:cli", "fixture", "artifact", "positive"]
121
- },
122
- {
123
- "id": "pos-family-class-library-fixture",
124
- "split": "tune",
125
- "kind": "positive",
126
- "prompt": "Use the attached Mermaid fixture. With the library channel, add a Receipt class and a relation from PaymentService to Receipt, then verify and serialize. Write outputs/class-payment/final.mmd and outputs/class-payment/verify.json, include both contents in the final answer, and show Result.value handling.",
127
- "files": ["fixtures/class-payment/input.mmd"],
128
- "expected_behavior": [
129
- "Uses asClass before mutation.",
130
- "Uses add_class and add_relation with relKind, not source splicing.",
131
- "Verifies before serializing."
132
- ],
133
- "assertions": [
134
- {"name": "artifact-final", "type": "file_exists", "path": "outputs/class-payment/final.mmd"},
135
- {"name": "artifact-verify", "type": "file_exists", "path": "outputs/class-payment/verify.json"},
136
- {"name": "class-loop", "type": "contains_all", "values": ["asClass", "add_class", "add_relation", "verifyMermaid", "serializeMermaid"]},
137
- {"name": "relkind", "type": "contains", "value": "relKind"},
138
- {"name": "receipt", "type": "contains", "value": "Receipt"}
139
- ],
140
- "tags": ["family:class", "channel:library", "fixture", "artifact", "positive"]
141
- },
142
- {
143
- "id": "pos-family-er-library-fixture",
144
- "split": "tune",
145
- "kind": "positive",
146
- "prompt": "Use the attached Mermaid fixture. With the library channel, add a PRODUCT entity with id/name attributes and relate ORDER to PRODUCT. Verify and serialize. Write outputs/er-orders/final.mmd and outputs/er-orders/verify.json, include both contents, and show the exact typed ops.",
147
- "files": ["fixtures/er-orders/input.mmd"],
148
- "expected_behavior": [
149
- "Uses asEr before mutation.",
150
- "Uses add_entity/add_attribute/add_relation with cardinalities.",
151
- "Verifies before serializing."
152
- ],
153
- "assertions": [
154
- {"name": "artifact-final", "type": "file_exists", "path": "outputs/er-orders/final.mmd"},
155
- {"name": "artifact-verify", "type": "file_exists", "path": "outputs/er-orders/verify.json"},
156
- {"name": "er-loop", "type": "contains_all", "values": ["asEr", "add_entity", "add_relation", "verifyMermaid", "serializeMermaid"]},
157
- {"name": "product", "type": "contains", "value": "PRODUCT"},
158
- {"name": "cards", "type": "contains_any", "values": ["leftCard", "rightCard", "||", "o{"]}
159
- ],
160
- "tags": ["family:er", "channel:library", "fixture", "artifact", "positive"]
161
- },
162
- {
163
- "id": "pos-family-journey-library-fixture",
164
- "split": "tune",
165
- "kind": "positive",
166
- "prompt": "Use the attached Mermaid fixture. With the library channel, add a Review order task in the Pay section of the existing journey diagram, then verify and serialize. Write outputs/journey-checkout/final.mmd and outputs/journey-checkout/verify.json, include both contents, and show the typed Journey mutation path.",
167
- "files": ["fixtures/journey-checkout/input.mmd"],
168
- "expected_behavior": [
169
- "Uses asJourney before mutation.",
170
- "Uses add_task rather than source splicing.",
171
- "Verifies before serializing."
172
- ],
173
- "assertions": [
174
- {"name": "artifact-final", "type": "file_exists", "path": "outputs/journey-checkout/final.mmd"},
175
- {"name": "artifact-verify", "type": "file_exists", "path": "outputs/journey-checkout/verify.json"},
176
- {"name": "journey-loop", "type": "contains_all", "values": ["asJourney", "add_task", "verifyMermaid", "serializeMermaid"]},
177
- {"name": "review-order", "type": "contains", "value": "Review order"}
178
- ],
179
- "tags": ["family:journey", "channel:library", "fixture", "artifact", "positive"]
180
- },
181
- {
182
- "id": "pos-family-xychart-library-fixture",
183
- "split": "tune",
184
- "kind": "positive",
185
- "prompt": "Use the attached Mermaid fixture. With the library channel, add Apr with value 90 to the existing XY chart, then verify and serialize. Write outputs/xychart-growth/final.mmd and outputs/xychart-growth/verify.json, include both contents, and show the typed XY chart mutation path.",
186
- "files": ["fixtures/xychart-growth/input.mmd"],
187
- "expected_behavior": [
188
- "Uses asXyChart before mutation.",
189
- "Updates axis categories and series values with typed ops.",
190
- "Verifies before serializing."
191
- ],
192
- "assertions": [
193
- {"name": "artifact-final", "type": "file_exists", "path": "outputs/xychart-growth/final.mmd"},
194
- {"name": "artifact-verify", "type": "file_exists", "path": "outputs/xychart-growth/verify.json"},
195
- {"name": "xychart-loop", "type": "contains_all", "values": ["asXyChart", "set_x_axis", "set_series_values", "verifyMermaid", "serializeMermaid"]},
196
- {"name": "apr", "type": "contains_all", "values": ["Apr", "90"]},
197
- {"name": "formats", "type": "contains_all", "values": ["ASCII", "PNG", "SVG"]}
198
- ],
199
- "tags": ["family:xychart", "channel:library", "fixture", "artifact", "positive"]
200
- },
201
- {
202
- "id": "pos-family-architecture-library-fixture",
203
- "split": "tune",
204
- "kind": "positive",
205
- "prompt": "Use the attached Mermaid fixture. With the library channel, add a Cache service between API and Database in the existing architecture diagram, then verify and serialize. Write outputs/architecture-cache/final.mmd and outputs/architecture-cache/verify.json, include both contents, and show the typed Architecture mutation path.",
206
- "files": ["fixtures/architecture-cache/input.mmd"],
207
- "expected_behavior": [
208
- "Uses asArchitecture before mutation.",
209
- "Uses add_service and add_edge rather than source splicing.",
210
- "Verifies before serializing."
211
- ],
212
- "assertions": [
213
- {"name": "artifact-final", "type": "file_exists", "path": "outputs/architecture-cache/final.mmd"},
214
- {"name": "artifact-verify", "type": "file_exists", "path": "outputs/architecture-cache/verify.json"},
215
- {"name": "architecture-loop", "type": "contains_all", "values": ["asArchitecture", "add_service", "add_edge", "verifyMermaid", "serializeMermaid"]},
216
- {"name": "cache", "type": "contains", "value": "Cache"},
217
- {"name": "formats", "type": "contains_all", "values": ["ASCII", "PNG", "SVG"]}
218
- ],
219
- "tags": ["family:architecture", "channel:library", "fixture", "artifact", "positive"]
220
- },
221
- {
222
- "id": "pos-family-state-library-fixture",
223
- "split": "tune",
224
- "kind": "positive",
225
- "prompt": "Use the attached Mermaid fixture. With the library channel, add a Failed state and a Processing -> Failed transition labeled error, then verify and serialize. Write outputs/state-lifecycle/final.mmd and outputs/state-lifecycle/verify.json, include both contents, and show the typed State mutation path.",
226
- "files": ["fixtures/state-lifecycle/input.mmd"],
227
- "expected_behavior": [
228
- "Uses asState before mutation.",
229
- "Uses add_state and add_transition with kind-discriminated ops.",
230
- "Verifies before serializing."
231
- ],
232
- "assertions": [
233
- {"name": "artifact-final", "type": "file_exists", "path": "outputs/state-lifecycle/final.mmd"},
234
- {"name": "artifact-verify", "type": "file_exists", "path": "outputs/state-lifecycle/verify.json"},
235
- {"name": "state-loop", "type": "contains_all", "values": ["asState", "add_state", "add_transition", "verifyMermaid", "serializeMermaid"]},
236
- {"name": "failed", "type": "contains_all", "values": ["Failed", "error"]}
237
- ],
238
- "tags": ["family:state", "channel:library", "fixture", "artifact", "positive"]
239
- },
240
- {
241
- "id": "pos-family-pie-library-fixture",
242
- "split": "tune",
243
- "kind": "positive",
244
- "prompt": "Use the attached Mermaid fixture. With the library channel, add a PDF slice with value 10 to the existing pie chart, then verify and serialize. Write outputs/pie-exports/final.mmd and outputs/pie-exports/verify.json, include both contents, and show the typed Pie mutation path.",
245
- "files": ["fixtures/pie-exports/input.mmd"],
246
- "expected_behavior": [
247
- "Uses asPie before mutation.",
248
- "Uses add_slice with a positive finite value.",
249
- "Verifies before serializing."
250
- ],
251
- "assertions": [
252
- {"name": "artifact-final", "type": "file_exists", "path": "outputs/pie-exports/final.mmd"},
253
- {"name": "artifact-verify", "type": "file_exists", "path": "outputs/pie-exports/verify.json"},
254
- {"name": "pie-loop", "type": "contains_all", "values": ["asPie", "add_slice", "verifyMermaid", "serializeMermaid"]},
255
- {"name": "pdf", "type": "contains_all", "values": ["PDF", "10"]}
256
- ],
257
- "tags": ["family:pie", "channel:library", "fixture", "artifact", "positive"]
258
- },
259
- {
260
- "id": "pos-family-quadrant-library-fixture",
261
- "split": "tune",
262
- "kind": "positive",
263
- "prompt": "Use the attached Mermaid fixture. With the library channel, move the MCP setup point to [0.70, 0.40], then verify and serialize. Write outputs/quadrant-priorities/final.mmd and outputs/quadrant-priorities/verify.json, include both contents, and show the typed Quadrant mutation path.",
264
- "files": ["fixtures/quadrant-priorities/input.mmd"],
265
- "expected_behavior": [
266
- "Uses asQuadrant before mutation.",
267
- "Uses move_point with coordinates inside [0, 1].",
268
- "Verifies before serializing."
269
- ],
270
- "assertions": [
271
- {"name": "artifact-final", "type": "file_exists", "path": "outputs/quadrant-priorities/final.mmd"},
272
- {"name": "artifact-verify", "type": "file_exists", "path": "outputs/quadrant-priorities/verify.json"},
273
- {"name": "quadrant-loop", "type": "contains_all", "values": ["asQuadrant", "move_point", "verifyMermaid", "serializeMermaid"]},
274
- {"name": "mcp", "type": "contains_all", "values": ["MCP setup", "0.7", "0.4"]}
275
- ],
276
- "tags": ["family:quadrant", "channel:library", "fixture", "artifact", "positive"]
277
- },
278
- {
279
- "id": "pos-family-gantt-library-fixture",
280
- "split": "tune",
281
- "kind": "positive",
282
- "prompt": "Use the attached Mermaid fixture. With the library channel, add a Docs task after the build task and before release, then verify and serialize. Write outputs/gantt-release/final.mmd and outputs/gantt-release/verify.json, include both contents, and show the typed Gantt mutation path.",
283
- "files": ["fixtures/gantt-release/input.mmd"],
284
- "expected_behavior": [
285
- "Uses asGantt before mutation.",
286
- "Uses add_task or set_task_dates with deterministic date/dependency semantics.",
287
- "Verifies before serializing."
288
- ],
289
- "assertions": [
290
- {"name": "artifact-final", "type": "file_exists", "path": "outputs/gantt-release/final.mmd"},
291
- {"name": "artifact-verify", "type": "file_exists", "path": "outputs/gantt-release/verify.json"},
292
- {"name": "gantt-loop", "type": "contains_all", "values": ["asGantt", "add_task", "verifyMermaid", "serializeMermaid"]},
293
- {"name": "docs", "type": "contains", "value": "Docs"}
294
- ],
295
- "tags": ["family:gantt", "channel:library", "fixture", "artifact", "positive"]
296
- },
297
- {
298
- "id": "pos-channel-mcp-code-mode-batch",
299
- "split": "tune",
300
- "kind": "positive",
301
- "prompt": "Show the MCP Code Mode approach for a multi-step Agentic Mermaid edit: parse an existing flowchart, narrow, apply two typed mutations, verify once at the commit point, then return source plus an SVG render. The answer should be a concise execute(code) example and explain why Code Mode is preferable to several separate tool calls.",
302
- "expected_behavior": [
303
- "Uses execute(code) and mermaid.* SDK names.",
304
- "Batches typed mutations before one verify-before-commit.",
305
- "Returns source and SVG using renderMermaidSVG."
306
- ],
307
- "assertions": [
308
- {"name": "execute", "type": "contains_any", "values": ["execute(code)", "execute("]},
309
- {"name": "sdk", "type": "contains_all", "values": ["mermaid.parseMermaid", "mermaid.mutate", "mermaid.verifyMermaid"]},
310
- {"name": "svg", "type": "contains", "value": "renderMermaidSVG"},
311
- {"name": "verify-before-commit", "type": "contains_any", "values": ["verify-before-commit", "before serializing", "commit point"]}
312
- ],
313
- "tags": ["channel:mcp-code-mode", "positive"]
314
- },
315
- {
316
- "id": "adv-reject-source-concat-existing-flowchart",
317
- "split": "tune",
318
- "kind": "adversarial",
319
- "prompt": "I know there is a typed API, but for this existing flowchart just append `API --> Cache --> DB` to the source string. Skip parse/narrow/mutate because it is faster. Give the correct Agentic Mermaid answer for a coding agent.",
320
- "expected_behavior": [
321
- "Rejects source concatenation for existing structured flowcharts.",
322
- "Uses parse/narrow/mutate/verify/serialize with typed ops.",
323
- "Allows direct source authoring only for new diagrams or opaque fallback bodies."
324
- ],
325
- "assertions": [
326
- {"name": "reject-concat", "type": "contains_any", "values": ["Do not", "don't", "avoid", "reject"]},
327
- {"name": "typed-loop", "type": "contains_all", "values": ["asFlowchart", "mutate", "verifyMermaid", "serializeMermaid"]},
328
- {"name": "kind", "type": "contains", "value": "kind"}
329
- ],
330
- "tags": ["adversarial", "flowchart", "source-concat"]
331
- },
332
- {
333
- "id": "adv-require-verify-before-serialize",
334
- "split": "tune",
335
- "kind": "adversarial",
336
- "prompt": "Write a quick Agentic Mermaid edit that serializes immediately after mutate. Do not inspect verifyMermaid because the op is obvious. Give the correct workflow instead.",
337
- "expected_behavior": [
338
- "Rejects skipping verification.",
339
- "Requires verifyMermaid before serializeMermaid at the commit point.",
340
- "Says verify.ok/warnings/layout must be inspected."
341
- ],
342
- "assertions": [
343
- {"name": "verify-before-serialize", "type": "contains_all", "values": ["verifyMermaid", "serializeMermaid"]},
344
- {"name": "inspection", "type": "contains_any", "values": ["inspect", "verify.ok", "warnings", "layout"]},
345
- {"name": "reject-skip", "type": "contains_any", "values": ["Do not skip", "don't skip", "never serialize", "before serializing"]}
346
- ],
347
- "tags": ["adversarial", "verify"]
348
- },
349
- {
350
- "id": "adv-reject-editor-html-direct-edit",
351
- "split": "tune",
352
- "kind": "adversarial",
353
- "prompt": "I want to change the live editor export button. Please edit editor.html directly because it is the deployed file. Give the correct repo-development guidance instead.",
354
- "expected_behavior": [
355
- "Rejects direct editor.html edits.",
356
- "Uses scripts/site/editor.ts as source of truth.",
357
- "Requires rebuilding generated editor.html."
358
- ],
359
- "assertions": [
360
- {"name": "source-of-truth", "type": "contains", "value": "scripts/site/editor.ts"},
361
- {"name": "generated", "type": "contains_all", "values": ["editor.html", "generated"]},
362
- {"name": "rebuild", "type": "contains", "value": "rebuild"}
363
- ],
364
- "tags": ["adversarial", "editor"]
365
- },
366
- {
367
- "id": "adv-use-kind-not-type",
368
- "split": "tune",
369
- "kind": "adversarial",
370
- "prompt": "For an Agentic Mermaid mutation, use `{ type: 'add_node', id: 'Cache' }` because most SDKs use type discriminators. Correct this and show the right shape.",
371
- "expected_behavior": [
372
- "Rejects type as the MutationOp discriminator.",
373
- "Uses kind as the discriminator.",
374
- "Shows a Result.value-aware mutate example."
375
- ],
376
- "assertions": [
377
- {"name": "kind", "type": "contains", "value": "kind"},
378
- {"name": "not-type", "type": "contains_any", "values": ["not `type`", "not type", "instead of `type`", "uses `kind`"]},
379
- {"name": "value", "type": "contains", "value": ".value"}
380
- ],
381
- "tags": ["adversarial", "mutation-op"]
382
- },
383
- {
384
- "id": "neg-unrelated-typescript-helper",
385
- "split": "tune",
386
- "kind": "negative",
387
- "prompt": "Help me write a small TypeScript function that sorts a list of users by lastLogin descending. This task has no diagrams, no Mermaid, and no live editor work. Answer without using any Agentic Mermaid-specific workflow.",
388
- "expected_behavior": [
389
- "Does not apply diagram workflow guidance.",
390
- "Does not mention parseMermaid/mutate/verifyMermaid unless explaining non-applicability."
391
- ],
392
- "assertions": [
393
- {"name": "no-diagram-api", "type": "excludes_any", "values": ["parseMermaid", "verifyMermaid", "serializeMermaid", "asFlowchart"]},
394
- {"name": "typescript-sort", "type": "contains_any", "values": ["lastLogin", "sort", "Date"]}
395
- ],
396
- "tags": ["negative", "no-trigger"]
397
- },
398
- {
399
- "id": "trigger-diagram-workflow-positive",
400
- "split": "tune",
401
- "kind": "trigger",
402
- "prompt": "I need to safely edit an existing Mermaid sequence diagram and verify the result before returning source.",
403
- "expected_behavior": ["TRIGGER: should load the diagram workflow skill."],
404
- "assertions": [],
405
- "tags": ["trigger", "positive", "diagram-workflow"]
406
- },
407
- {
408
- "id": "trigger-live-editor-positive",
409
- "split": "tune",
410
- "kind": "trigger",
411
- "prompt": "I need to modify Agentic Mermaid's live editor export behavior and avoid changing generated artifacts incorrectly.",
412
- "expected_behavior": ["TRIGGER: should load the live editor development skill."],
413
- "assertions": [],
414
- "tags": ["trigger", "positive", "editor"]
415
- },
416
- {
417
- "id": "neg-trigger-unrelated-python-helper",
418
- "split": "tune",
419
- "kind": "trigger",
420
- "prompt": "Write a Python helper that groups log entries by status code. No diagrams, no Mermaid, no editor work.",
421
- "expected_behavior": ["NO_TRIGGER: should not load either Agentic Mermaid skill."],
422
- "assertions": [],
423
- "tags": ["trigger", "negative", "no-trigger"]
424
- },
425
- {
426
- "id": "neg-trigger-mermaid-mythology",
427
- "split": "tune",
428
- "kind": "trigger",
429
- "prompt": "Write a short paragraph about mermaids in mythology. Do not discuss Mermaid.js diagrams or this repository.",
430
- "expected_behavior": ["NO_TRIGGER: should not load either Agentic Mermaid skill."],
431
- "assertions": [],
432
- "tags": ["trigger", "negative", "no-trigger"]
433
- },
434
- {
435
- "id": "pos-holdout-flowchart-fixture-artifact",
436
- "split": "holdout",
437
- "kind": "positive",
438
- "prompt_ref": "private/holdout/flowchart-fixture-artifact.prompt.md",
439
- "files": ["fixtures/flowchart-cache/input.mmd"],
440
- "expected_behavior": [
441
- "Hidden prompt: existing structured flowchart edit requiring artifact output and verifyMermaid evidence."
442
- ],
443
- "assertions": [
444
- {"name": "artifact-final", "type": "file_exists", "path": "outputs/holdout-flowchart/final.mmd"},
445
- {"name": "artifact-verify", "type": "file_exists", "path": "outputs/holdout-flowchart/verify.json"},
446
- {"name": "core-loop", "type": "contains_all", "values": ["asFlowchart", "mutate", "verifyMermaid", "serializeMermaid"]}
447
- ],
448
- "tags": ["holdout", "family:flowchart", "fixture", "artifact"]
449
- },
450
- {
451
- "id": "adv-holdout-editor-generated-artifact",
452
- "split": "holdout",
453
- "kind": "adversarial",
454
- "prompt_ref": "private/holdout/editor-generated-artifact.prompt.md",
455
- "expected_behavior": [
456
- "Hidden prompt: adversarial live-editor request that tries to force direct editor.html edits."
457
- ],
458
- "assertions": [
459
- {"name": "source-of-truth", "type": "contains", "value": "scripts/site/editor.ts"},
460
- {"name": "generated", "type": "contains_all", "values": ["editor.html", "rebuild"]}
461
- ],
462
- "tags": ["holdout", "adversarial", "editor"]
463
- },
464
- {
465
- "id": "pos-holdback-channel-selection",
466
- "split": "holdback",
467
- "kind": "positive",
468
- "prompt_ref": "private/holdback/channel-selection.prompt.md",
469
- "expected_behavior": [
470
- "Hidden prompt: choose library vs CLI vs MCP Code Mode correctly for a constrained task."
471
- ],
472
- "assertions": [
473
- {"name": "channels", "type": "contains_all", "values": ["library", "CLI", "Code Mode"]},
474
- {"name": "narrowest", "type": "contains_any", "values": ["narrowest", "best", "choose"]}
475
- ],
476
- "tags": ["holdback", "channel-selection"]
477
- },
478
- {
479
- "id": "neg-holdback-no-trigger",
480
- "split": "holdback",
481
- "kind": "trigger",
482
- "prompt_ref": "private/holdback/no-trigger.prompt.md",
483
- "expected_behavior": ["NO_TRIGGER: hidden unrelated task should not load either Agentic Mermaid skill."],
484
- "assertions": [],
485
- "tags": ["holdback", "trigger", "negative", "no-trigger"]
486
- }
487
- ],
488
- "ablations": [
489
- {
490
- "id": "no-verify-before-serialize",
491
- "removed_component": "verify-before-commit rule",
492
- "expected_regressions": ["May serialize or emit edited Mermaid without inspecting verifyMermaid results."]
493
- },
494
- {
495
- "id": "no-editor-source-of-truth",
496
- "removed_component": "live editor source-of-truth file guidance",
497
- "expected_regressions": ["May tell agents to edit generated editor.html instead of scripts/site/editor.ts."]
498
- },
499
- {
500
- "id": "no-source-level-family-boundary",
501
- "removed_component": "opaque-fallback boundary guidance",
502
- "expected_regressions": ["May concatenate existing structured diagrams or falsely claim an opaque fallback body has a structured narrower."]
503
- },
504
- {
505
- "id": "no-channel-picker",
506
- "removed_component": "library vs CLI vs MCP Code Mode channel selection",
507
- "expected_regressions": ["May choose slow multi-call workflows or emit CLI when Code Mode/library is the safer fit."]
508
- }
509
- ]
510
- }