Saan Mermaid

安装

npx skills add yishan/saankits --skill saan-mermaid

本地校验需要 Python 3;渲染本页全部示例需要 Mermaid CLI 12。

图示类型

示例内容均为虚构。复制代码包含主题配置;Beta 语法需确认平台版本。

流程审查

先确定控制点清单,再审查流程。优先使用你提供的清单;从同一份资料提取时,结果会标明“不是独立依据”。

controls.txt,制度要求
source: user
control: 财务复核
must_pass: 执行付款 through 审核单据
separate: 提交付款申请 | 审核单据
一张能渲染的付款流程
%% saan: approval
swimlane-beta LR
  subgraph biz[业务部门]
    apply[提交付款申请]
    audit{审核单据}
  end
  subgraph fin[财务部门]
    pay[执行付款]
  end
  apply --> audit
  audit --> pay
  apply -->|小额| pay
check_mermaid.py 的实际输出
必须修改 [CP1] 控制点清单里的『财务复核』不在图上。补上节点,或告诉用户它为什么不用画
业务发现 [RT1] 1 个审批判断没有退回分支,资料或流程要写明未通过怎么走:审核单据
业务发现 [P1] 可以绕过『审核单据』到达『执行付款』
业务发现 [P5] 『提交付款申请』与『审核单据』都由『业务部门』执行,违反岗位分离
图的声明或清单项检查什么
saan: flowP2 走不到 · P3 死路 · P4 判断只有一个出口
saan: approval / audit再加 AP1 没有判断节点 · RT1 审批判断没有退回
saan: overview再加 OV1 总览出现回路
saan: archAR1 架构图里混入判断节点
controlCP1 清单里的控制点不在图上
must_passP1 可以绕过控制点
separateP5 不相容的两步由同一泳道执行

业务发现要报告给你,不会为了通过校验而删线。确认属实又确实要保留的,写 %% accept P1: 原因,脚本会标为已确认。

工具对比

Saan MermaidSaan Diagram
产出Mermaid 代码,可做 diff图片、HTML、飞书画板
适合README、Markdown、设计文档汇报、对外交付、飞书画板
排版自动布局,泳道能对齐,线路控制不了引擎精确控制
质量保证按控制点清单审查、配色校验、真实渲染、人工看图几何、对比度和业务规则校验
独有的图时序图、状态图、甘特图IDEF0、组织架构与数据隔离

绘图规则

画法规则

  • 只画来源支持的内容,假设写在图外。
  • 确实有分支才加判断节点。
  • 总览只画正向主线。审批和审计流程必须保留判断和退回,否则会藏掉控制风险。
  • 交接不是重点时,不写内部角色泳道。
  • 默认实线,虚线只留给退回或可选路径。
  • 核心节点最多高亮 3 个。
  • 一张流程图约 15 个节点,超过就拆成总览加细节。
  • 节点文字要短,功能清单写在正文里。

常见语法错误

  • 文字含标点或括号时加引号:A["合同(草稿)"]
  • 节点 ID 用英文,中文写在标签里:apply[提交申请]
  • 不要用小写 end 作节点 ID。
  • 分组内要纵向排列时,写 direction TB。
  • 流程图标签换行用 <br/>。
  • 时序图消息文字避免 : 和 ;。

主题配置

放在每张图最顶部,换一个平台也不用重新配。页面有深色模式时,要再看一眼效果。

业务节点默认,不用写
hub汇聚枢纽
core核心节点,最多 3 个
system内部系统
external外部系统
aiAI 能力

和 Saan Diagram 同一套色值。自造颜色、用 style 单独改色、核心节点超过 3 个,校验都不放行。

frontmatter
---
config:
  theme: base
  themeVariables:
    fontFamily: "PingFang SC, Microsoft YaHei, Noto Sans CJK SC, sans-serif"
    primaryColor: "#E3E5EA"
    primaryTextColor: "#1F2329"
    primaryBorderColor: "#E3E5EA"
    secondaryColor: "#E9ECF1"
    tertiaryColor: "#F5F6F8"
    lineColor: "#4E5563"
    textColor: "#1F2329"
    clusterBkg: "#F5F6F8"
    clusterBorder: "#D5D8DE"
    edgeLabelBackground: "#FFFFFF"
    dropShadow: "none"
    cScale0: "#E3E5EA"
    cScale1: "#E2EBFF"
    cScale2: "#E9ECF1"
    cScale3: "#F5F6F8"
---

交付检查

脚本会一起检查错误占位图和图宽,宽度超过 1200 就提醒。自动布局可能挤成一团,所以每张图还要看一眼。

mmdc -i diagram.mmd -o diagram.svg -b white -q
python3 check_mermaid.py --controls controls.txt diagram.mmd diagram.svg
  1. 能读每个标签都看得清,没有重叠。
  2. 顺向主线朝一个方向走,避开能避免的交叉。
  3. 不漏流程要求的判断和退回都在。
  4. 不编每个节点和连线都来自来源或写明的假设。

调一两次仍然缠在一起,就拆图。需要精确摆放,就换 Saan Diagram。

兼容性与限制

泳道依赖 Mermaid 12

swimlane-beta 能对齐泳道,但泳道之间没有分隔,线路也可能绕到外侧。低版本平台只能退回分组框,各列对不齐。

平台版本不同

每个平台内置的 Mermaid 版本不同。本页的图用 Mermaid CLI 12.2 渲染,还没在 GitHub 或飞书文档里测过。

只查结构和清单

它不判断业务本身对不对,清单之外的问题也查不出。清单如果和图出自同一个人,独立性就很弱。时序图等类型只查配色。

不保证画得更好

一次小样本匿名对比中,用它画图的总分没有超过不用它。它的价值在审查,不在画图本身。

Beta 类型风险最大

swimlane-beta、block-beta 和 ishikawa-beta 在旧版本上可能无法显示。要跨平台的文档,优先用稳定类型。

请求示例