繪製流程圖海報
這項工作分為兩部分:
- 你將流程轉換為 Mermaid。 這部分需要判斷力:狀態是什麼、缺少哪些分支、流程在哪裡可能卡住或違反規則。
scripts/make_poster.py渲染它。 不涉及模型,因此同樣的輸入總是產生同樣的海報。
<skill> 是指存放此檔案的資料夾。
工作流程
-
理解流程。 用一句話重述使用者的目標。列出歧義、缺少的分支(「這一步失敗時會發生什麼?」)以及有風險的步驟。僅針對你自己無法解決的分岔點詢問使用者。
-
建立模型。 為圖表建立一個資料夾(每個海報一個資料夾)。
- 使用 pstack(優先)。 如果 pstack 的
statechart技能可用(Claude Code:/pstack:statechart;Cursor:/statechart;或其位於磁碟上的SKILL.md),請使用它:撰寫 TLA+ 規格,並將使用者的規則作為 INVARIANTs,執行它,閱讀report.md。按 references/pstack-statechart.md 所述撰寫檢視模組,以便圖表能乾淨轉換。然後轉換:
它會寫入python3 <skill>/scripts/make_poster.py <folder> --from-statechart <statechart-out>/chart.mmd<folder>/flow.mmd並按順序列印問題編號,以及每個問題違反的規則。 如果使用者要求保持 pstack 關閉,請勿開啟它;使用下一種路徑並說明原因。 - 不使用 pstack。 按照 references/mermaid-rules.md 手動撰寫
<folder>/flow.mmd。將你發現的每個問題(違反規則、死路、缺少分支)標記上breaks類別。 make_poster.py <folder> --init [--lang zh]會寫入一個起始的flow.mmd和poster.json供編輯。
- 使用 pstack(優先)。 如果 pstack 的
-
撰寫
<folder>/poster.json(references/poster-json.md):以使用者的語言填寫標題、副標題、圖例,以及一個卡片,每個breaks節點一行,順序與編號相同。 -
渲染。
python3 <skill>/scripts/make_poster.py <folder>它會先檢查,如果有錯誤則不繪製任何東西。修復所有錯誤;閱讀所有警告。輸出:
poster.html(自包含,可離線運作)、poster.png(2x)和poster.svg。 -
檢視
poster.png。 如果你無法檢視圖片,或為了節省成本,可將此步驟交給較便宜的模型或子代理。檢查:- 每個紅圈標記的節點都有對應的卡片行,且編號相符;
- 沒有線條穿過文字或看起來連錯了盒子;
- 標籤使用使用者的語言,且長度足以閱讀;
- 沒有任何重要部分過於擁擠。修正方法:縮短標籤、在應斷行處加入空格、將大圖表拆分成兩張海報,或在
poster.json的style中覆寫間距。然後重新渲染。
-
回報給使用者:先提供 PNG 路徑,然後每個問題一行(該規則以及流程如何觸及它),最後說明模型遺漏了什麼。提及
poster.html包含匯出 PNG/SVG 的按鈕。
需求
- Python 3.8+(標準庫;如有安裝 Pillow 可用於縮小照片)。
- Chrome、Edge 或 Chromium 用於匯出 PNG/SVG。如果找不到,
poster.html仍會寫入;設定CHROME環境變數指向瀏覽器二進位檔即可啟用匯出。 - 可選:pstack (https://github.com/cursor/plugins/tree/main/pstack) 用於 TLA+ 檢查,需要 Java 11+ 和 TLA+ 工具(請參閱 references/pstack-statechart.md)。
- 字型為系統字型(macOS: American Typewriter, Baskerville, Songti, Kaiti;Windows 和 Linux 回退到 Courier New / Georgia / SimSun / Noto Serif CJK)。在 Linux 上安裝 CJK 字型,例如用於中文的 Noto Serif CJK。
限制
- 僅支援由上而下的佈局。
- 不支援複合狀態、平行區域、註記或子圖。對於狀態圖輸出,請使用扁平檢視(
state()傳回字串)。 - 最佳使用規模為 15–25 個盒子;超過 30 個盒子時檢查會發出警告。請將較大的流程拆分成多張海報。
- 自動佈局偶爾會將線條畫在與不相關的盒子附近。這就是為什麼要有步驟 5。
範例
儲存庫中的 examples/paper-submission/:期刊投稿的 TLA+ 模型(statechart/)、轉換後的 flow.mmd、poster.json 和渲染後的海報。examples/paper-submission-zh/ 是相同模型的中文檢視。