フローチャートポスターを描く
作業は2つのパートに分かれます。
- プロセスをMermaidに変換する。 ここで判断力が求められます。状態は何か、どの分岐が欠けているか、プロセスがどこで詰まるか、ルールを破る可能性があるかを見極めます。
scripts/make_poster.pyでレンダリングする。 モデルは関与しないため、同じ入力からは常に同じポスターが生成されます。
<skill> はこのファイルが格納されているフォルダを指します。
ワークフロー
-
プロセスを理解する。 ユーザーの目標を1文で言い換えます。あいまいな点、欠落した分岐(「このステップが失敗したらどうなるのか?」)、リスクのあるステップをリストアップします。自分で解決できない分岐についてのみユーザーに質問します。
-
モデル化する。 チャート用のフォルダを作成します(ポスター1枚につき1フォルダ)。
- pstackを使用する場合(推奨)。 pstackの
statechartスキルが利用可能な場合(Claude Code:/pstack:statechart、Cursor:/statechart、またはディスク上のSKILL.md)、それを使用します。ユーザーのルールをINVARIANTとして持つTLA+仕様を書き、実行し、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ノードごとに1行のカードを番号順に記述します。 -
レンダリングする。
python3 <skill>/scripts/make_poster.py <folder>エラーがある間はチェックのみ行われ、何も描画されません。すべてのエラーを修正し、すべての警告を読みます。出力:
poster.html(セルフコンテイン、オフラインでも動作)、poster.png(2倍サイズ)、poster.svg。 -
poster.pngを確認する。 画像を表示できない場合やコスト削減のため、このタスクをより安価なモデルやサブエージェントに引き渡します。以下をチェックします:- 赤丸で囲まれたノードすべてにカードの行があり、番号が一致していること。
- 線がテキストを横切っていない、または間違ったボックスに付いていないこと。
- ラベルがユーザーの言語であり、読み取れる十分な長さであること。
- 重要な部分が密集していないこと。修正:ラベルを短くする、改行したい箇所にスペースを入れる、大きなチャートを2枚のポスターに分割する、または
poster.jsonのstyleで間隔を上書きする。その後、再度レンダリングします。
-
ユーザーに報告する。 最初にPNGパス、次に問題ごとに1行(ルールと、プロセスがそこに到達する方法)、最後にモデルが省略している内容を伝えます。
poster.htmlにPNG/SVGエクスポートボタンがあることを言及します。
要件
- Python 3.8以上(標準ライブラリ;Pillowがインストールされていれば写真の縮小に使用)。
- PNG/SVGエクスポートにはChrome、Edge、またはChromium。見つからない場合でも
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では中国語用にNoto Serif CJKなどのCJKフォントをインストールします。
制限事項
- 上から下へのレイアウトのみ対応。
- 複合状態、並列領域、ノート、サブグラフは非対応。ステートチャート出力ではフラットなビュー(
state()が文字列を返す)を使用します。 - 15~25ボックスが最適。30を超えるとチェックが警告を出します。より大きなプロセスは複数のポスターに分割します。
- 自動レイアウトでは、時折不関連のボックスの近くに線が通ることがあります。そのためステップ5が存在します。
例
リポジトリ内の examples/paper-submission/:ジャーナル投稿のTLA+モデル(statechart/)、変換された flow.mmd、poster.json、およびレンダリングされたポスター。examples/paper-submission-zh/ は同じモデルの中国語ビューです。