@cardenelabs/cdl 0.7.0 → 0.10.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/CHANGELOG.md +446 -0
- package/SPEC.md +42 -18
- package/dist/index.cjs +793 -347
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +73 -14
- package/dist/index.d.ts +73 -14
- package/dist/index.js +793 -347
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +658 -236
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +1 -1
- package/dist/react.d.ts +1 -1
- package/dist/react.js +658 -236
- package/dist/react.js.map +1 -1
- package/dist/{render-DquCvgOB.d.cts → render-CH1Qn3Jv.d.cts} +47 -2
- package/dist/{render-DquCvgOB.d.ts → render-CH1Qn3Jv.d.ts} +47 -2
- package/package.json +6 -3
- package/src/builder.ts +13 -1
- package/src/kinds/box-lines.ts +120 -0
- package/src/kinds/chart-line.tsx +94 -25
- package/src/kinds/gantt.tsx +152 -24
- package/src/kinds/mind-map.tsx +50 -12
- package/src/kinds/quadrant.tsx +28 -2
- package/src/kinds/shape-blockchain.tsx +65 -12
- package/src/kinds/shape-region.tsx +152 -34
- package/src/kinds/tree.tsx +92 -20
- package/src/layout/collisions.ts +10 -2
- package/src/layout/footer-shape.ts +86 -24
- package/src/layout/lifeline.ts +80 -0
- package/src/layout/spec.ts +21 -2
- package/src/layout/text-width.ts +92 -4
- package/src/layout/viewbox.ts +0 -8
- package/src/layout.ts +8 -1
- package/src/presets.ts +120 -22
- package/src/render/header.tsx +3 -1
- package/src/render/nodes.tsx +15 -1
- package/src/render/payload-binding.ts +31 -8
- package/src/render/stage.tsx +21 -34
- package/src/render/template-fields.ts +212 -0
- package/src/render/utils.ts +32 -2
- package/src/render.tsx +2 -9
- package/src/types.ts +47 -2
- package/src/validate.ts +45 -13
- package/src/visual-validate.ts +34 -1
- package/src/layout/label-shift.ts +0 -28
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
CDL (Chainome Diagram Language) の主要変更履歴。
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/ja/1.1.0/) format + [Semantic Versioning](https://semver.org/lang/ja/) 準拠。
|
|
5
|
+
|
|
6
|
+
## [Unreleased]
|
|
7
|
+
|
|
8
|
+
予定 ... feedback を反映した patch / minor。
|
|
9
|
+
|
|
10
|
+
## [0.10.0] - 2026-08-21
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **段の進みで折れ線を左の起点から伸ばせるようにした** (#513)
|
|
15
|
+
|
|
16
|
+
段 (`CdlPhase`) に `draw` を足した。 `activate` と同じ形で node id を並べると、その node が
|
|
17
|
+
段の進み (0 → 1) に合わせて描かれる。 最初の対象は折れ線 (`chart-line`) で、線が左端から
|
|
18
|
+
右へ伸び、点と値の数字は線の先が自分の位置に届いた時に現れる。 軸 / 格子 / 横軸の名前は
|
|
19
|
+
最初から出る。
|
|
20
|
+
|
|
21
|
+
伸ばすのは dash (`pathLength` / `strokeDasharray` / `strokeDashoffset`) で、`points` は進みに
|
|
22
|
+
関わらず全点を持つ。 点を削る形にすると、利用側が数えている点の数が進みの途中で変わる。
|
|
23
|
+
|
|
24
|
+
引き金に `activate` を使わないのは、1 箱で図全体を描く種別では焦点がその箱に解決されるため。
|
|
25
|
+
連続する段で光り続ける図が実在し、「光っていたら描く」 にすると値が動くだけの段でも線を
|
|
26
|
+
引き直すことになる。
|
|
27
|
+
|
|
28
|
+
組立て API は `PhaseBuilder.draw(...ids)`。 `draw` を書かない図は従来どおり全長で描き、
|
|
29
|
+
DOM に属性も 1 つも増えない。
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
|
|
33
|
+
- **候補が node の時に「定義済 lane」 と知らせるのをやめた** (#513)
|
|
34
|
+
|
|
35
|
+
近い候補が無い時に出る一覧の文言が `lane` 固定で、探す先を間違える案内になっていた。
|
|
36
|
+
`suggest` に候補の種別を渡せるようにし、node を候補にする 3 箇所 (`draw` / edge の `from` /
|
|
37
|
+
edge の `to`) を揃えた。
|
|
38
|
+
|
|
39
|
+
### Changed
|
|
40
|
+
|
|
41
|
+
- **repo 内の agent worktree を eslint の対象から外した** (#507)
|
|
42
|
+
|
|
43
|
+
指摘の 6 割が worktree の複製から出ており、実体を直しても消えなかった。
|
|
44
|
+
|
|
45
|
+
- **README と CONTRIBUTING の記述を実態に合わせた** (#505)
|
|
46
|
+
|
|
47
|
+
存在しない playground と command を前提にした記述が残っていた。
|
|
48
|
+
|
|
49
|
+
- **skip されていた検査 2 件を解除した** (#510 / #511)
|
|
50
|
+
|
|
51
|
+
どちらも routing の不具合ではなく、検査の前提が誤っていた。 実装は 1 行も変えていない。
|
|
52
|
+
併せて、行き先として書かれていた実在しない Issue 番号を実在するものに付け替えた。
|
|
53
|
+
|
|
54
|
+
## [0.9.0] - 2026-08-20
|
|
55
|
+
|
|
56
|
+
`0.8.0` は tag を打った後 npm に公開されないまま 17 commit が載った。 同じ番号で公開すると
|
|
57
|
+
tag の中身と公開物が食い違うため、番号を進めて 1 回だけ公開する。 `0.8.0` は npm に存在
|
|
58
|
+
しない番号として残る。
|
|
59
|
+
|
|
60
|
+
### Added
|
|
61
|
+
|
|
62
|
+
- **箱が狭くて描かれない文字を書き手に伝えるようにした** (#497)
|
|
63
|
+
|
|
64
|
+
箱の幅に対して文字が長いと、描画側が黙って切り落とす。 書き手には図を見るまで伝わらない。
|
|
65
|
+
検査の層で幅と文字数を突き合わせ、収まらない文字を知らせる。
|
|
66
|
+
|
|
67
|
+
- **工程表の横軸の範囲を書き手が宣言できるようにした** (#491)
|
|
68
|
+
|
|
69
|
+
従来は帯の位置から自動で決めていたため、帯が 1 本しかない図では目盛りが 1 本に縮んだ。
|
|
70
|
+
`ganttAxisMax` を足し、有限の正の数だけを採る。 壊れた値では自動に落とす。
|
|
71
|
+
|
|
72
|
+
- **1 行で作る書き方の入口でも値を状態から取れるようにした** (#484)
|
|
73
|
+
|
|
74
|
+
図表の中身の型は `{名前}` を受ける形で宣言されているのに、組み立ての入口は数と語しか
|
|
75
|
+
受けなかった。 入口の型を中身に揃えた。
|
|
76
|
+
|
|
77
|
+
併せて工程の帯の位置を整える処理を入れた。 始まりが負なら 0 に寄せ、終わりが始まりより
|
|
78
|
+
手前なら始まりに揃える。 落とさず整えるのは、状態が動く途中で一瞬だけ逆転する形が
|
|
79
|
+
あるため (帯が消えるより潰れて見える方がよい)。
|
|
80
|
+
|
|
81
|
+
### Fixed
|
|
82
|
+
|
|
83
|
+
- **字幅の見積りを実描画と突き合わせ、足りない分を直した** (#494)
|
|
84
|
+
- **小さい箱で絵に帯を譲り、補いの行を落とすようにした** (#493)
|
|
85
|
+
- **値の入れ物を継承なしに揃えた** (#490)
|
|
86
|
+
|
|
87
|
+
`{constructor}` のような名前が「値がある」 と読まれ、prototype の中身が図に出ていた。
|
|
88
|
+
|
|
89
|
+
- **下げた名札の座標を実際の描画に合わせた** (#489)
|
|
90
|
+
- **1 lane の名札の異常で図の全 lane から縦線が消えないようにした** (#488)
|
|
91
|
+
- **`{名前}` を読む欄と検査する欄を一致させた** (#487)
|
|
92
|
+
|
|
93
|
+
読み手と書ける側で名前の字種の定義がずれると、定義はできるのにどの箱からも読めない
|
|
94
|
+
名前ができる。 定義を 1 か所に集めた。
|
|
95
|
+
|
|
96
|
+
- **連鎖の箱が書き手の題と副題を読むようにした** (#486)
|
|
97
|
+
- **木と放射の箱に補足を描き、上の小ラベルを型から外した** (#485)
|
|
98
|
+
- **工程表の目盛りの裸の数字を消し、象限図の枠を名前の幅に合わせた** (#482)
|
|
99
|
+
- **下端の名札を位置でなく構造上の目印で判定するようにした** (#480)
|
|
100
|
+
- **変更履歴を公開物に入れ、版から commit を辿れるようにした** (#477)
|
|
101
|
+
- **実時間で測る検査を負荷に強くした** (#496)
|
|
102
|
+
|
|
103
|
+
### Changed
|
|
104
|
+
|
|
105
|
+
- **`no-op` になっていた `label-shift.ts` を消した** (#498)
|
|
106
|
+
- **工程の帯の丸めを守る検査を足した** (#500)
|
|
107
|
+
|
|
108
|
+
丸めは #484 で入っていたが、外して全 5286 件を回しても 0 件しか落ちなかった。
|
|
109
|
+
幅の下限を `>= 0` から `> 0` に上げ、帯が消えた状態を「壊れていない」 と読まないようにした。
|
|
110
|
+
|
|
111
|
+
## [0.8.0] - 2026-08-17
|
|
112
|
+
|
|
113
|
+
### Added
|
|
114
|
+
|
|
115
|
+
- **`flow()` preset で矢印を宣言できるようにした** (#474)
|
|
116
|
+
|
|
117
|
+
`flow()` は矢印を `step()` の並び順から自動生成するだけで、呼び手が矢印を宣言する口が
|
|
118
|
+
無かった。 そのため `a` から `c` へ直接繋ぎ `b` を経由しない図が作れなかった。
|
|
119
|
+
|
|
120
|
+
`FlowPreset.autoChain` (既定 `true`) と `FlowBuilder.edge()` を足した。
|
|
121
|
+
|
|
122
|
+
```ts
|
|
123
|
+
flow({ id: "fl", topic: "T", autoChain: false })
|
|
124
|
+
.step({ id: "a", kind: "card", title: "A" })
|
|
125
|
+
.step({ id: "b", kind: "card", title: "B" })
|
|
126
|
+
.step({ id: "c", kind: "card", title: "C" })
|
|
127
|
+
.edge("a", "c", { label: "飛ばす" })
|
|
128
|
+
.build();
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
`autoChain: false` にすると `step()` は node だけを置き、矢印は `edge()` で宣言する。
|
|
132
|
+
枠 / 配置 / 段は preset のまま保たれる。
|
|
133
|
+
|
|
134
|
+
`edge()` は preset の既定の `tone` / `style` を引き継ぎ、第 3 引数で個別に上書きできる。
|
|
135
|
+
`edge()` で作った矢印も `build()` が作る段の点灯対象に載る (載せないと動きの中で光らず、
|
|
136
|
+
自動生成分と見た目が揃わない)。
|
|
137
|
+
|
|
138
|
+
**`autoChain` の既定は `true` なので、既存の呼び出しは 1 行も変えずに同じ図になる**。
|
|
139
|
+
既定を `false` に変える変異で既存の検査 4 件が落ちることを確認済。
|
|
140
|
+
|
|
141
|
+
## [0.7.0] - 2026-08-17
|
|
142
|
+
|
|
143
|
+
### Changed
|
|
144
|
+
|
|
145
|
+
- **木と放射の名前が状態を読むようになった** (#467)
|
|
146
|
+
|
|
147
|
+
`tree-hierarchy` と `mind-map` の名前 (木は `treeData[].title`、放射は `mindData.rootTitle` と
|
|
148
|
+
`branches[].title`) に `{名前}` を書くと、段ごとに解決するようになった。
|
|
149
|
+
|
|
150
|
+
この 2 種は「動かせる数を持たない」 という理由で解決層から外していた。 実際には
|
|
151
|
+
**この 2 種が持つのは数ではなく構造と名前** で、名前の側は動かせる。 利用側では
|
|
152
|
+
この 2 種だけが段を付けられず静止したまま残っていた。
|
|
153
|
+
|
|
154
|
+
**既存の図の見え方が変わる場合がある**。 木や放射の名前に `{...}` を含むテキストを
|
|
155
|
+
そのまま出していた図は、これまで書いた形のまま描かれていたが、今後は状態として解決を
|
|
156
|
+
試みる。 解決できない場合は書いた形のまま残り、`data-cdl-unresolved` が付く。
|
|
157
|
+
同じ性質の変更は図表 7 種で 0.6.0 に入っている。
|
|
158
|
+
|
|
159
|
+
解決できない名前は **書いたまま残す**。 数の欄は既定値 (0 等) に落とせるが、名前は
|
|
160
|
+
落とす先が無く、空にすると項目の存在まで図から消える。
|
|
161
|
+
|
|
162
|
+
解決しない範囲が 2 つある。 親子の繋がり (`parent`) は状態で繋ぎ替えると木の形そのものが
|
|
163
|
+
変わり、配置の計算と印の付け方が別問題になるため。 補足 (`subtitle`) はこの 2 種が
|
|
164
|
+
そもそも描いていないため = 解決だけ通すと、画面は何も変わらないのに解決できない時だけ
|
|
165
|
+
印が付く状態になる (描く方を足すかは #471)。
|
|
166
|
+
|
|
167
|
+
## [0.6.1] - 2026-08-16
|
|
168
|
+
|
|
169
|
+
### Added
|
|
170
|
+
|
|
171
|
+
- **段ごとの実効値を出す 2 つを公開した** (#465)
|
|
172
|
+
|
|
173
|
+
`computeStateValues` (段と進みから状態の値を組み立てる) と `interpolate`
|
|
174
|
+
(`{名前}` を値で置き換える) を `index.ts` から輸出した。
|
|
175
|
+
|
|
176
|
+
公開しない間、 利用者はこの 2 つに `src/render/utils` の相対 path で届くしかなかった。
|
|
177
|
+
`exports` は `.` と `./react` しか開いていないので package 経由では引けず、 隣に cdl を
|
|
178
|
+
checkout している前提の import になる。 実際 dragon の見本の検査がその形で、
|
|
179
|
+
**隣に cdl が無いと型検査も test も通らない**状態を作っていた (cardene777/dragon#1166)。
|
|
180
|
+
|
|
181
|
+
自前で書き直す形も採れない。 `computeStateValues` は同じ段の中で `set` を順に当ててから
|
|
182
|
+
`tween` が上書きする順序を持ち、 組み直すと描画とずれる。 `interpolate` が受ける名前の
|
|
183
|
+
字種は `template-name.ts` が 1 箇所で決めており、 別に書くと「読めるが書けない」 名前が
|
|
184
|
+
できる。
|
|
185
|
+
|
|
186
|
+
## [0.6.0] - 2026-08-16
|
|
187
|
+
|
|
188
|
+
図表が状態を読んで動くようになった版。 併せて動かせない種別 (放射状の図) を 1 つ落とした。
|
|
189
|
+
|
|
190
|
+
0.5.0 からの破壊的変更は **放射状の図の削除 1 件だけ**。 見た目の主題 (`CdlTheme`) と
|
|
191
|
+
検査軸 2 件の削除は 0.5.0 で既に出ており、 記録が漏れていたものを本版で `[0.5.0]` 節へ
|
|
192
|
+
書き足した。
|
|
193
|
+
|
|
194
|
+
### Added
|
|
195
|
+
|
|
196
|
+
- **図表 7 種の欄が `{signal}` を取れるようになった** (#451)
|
|
197
|
+
|
|
198
|
+
`chart-bar` / `chart-line` / `chart-pie` / `funnel-stages` / `gantt-timeline` の数の欄と、
|
|
199
|
+
`quadrant-matrix` / `journey-map` の語の欄で、 値の代わりに段の状態名を書けるようになった。
|
|
200
|
+
これまでは配列を受け取って一度描くだけで状態を読む経路が無く、 図表は永久に静止していた。
|
|
201
|
+
|
|
202
|
+
解決は `render/payload-binding.ts` に集約し、 各 kind は描画の直前に 1 回呼ぶ。
|
|
203
|
+
解決できない欄は **項目を落とさず** 既定値で描き、 `data-cdl-unresolved="true"` を付ける
|
|
204
|
+
(落とすと配列の長さが変わって図の形が別物になり、 どこが壊れたか読み取れなくなる)。
|
|
205
|
+
|
|
206
|
+
数を直接書いた図の描画は変わらない。 解決層が配列を組み直さないため、 描くものも
|
|
207
|
+
配列の同一性もそのまま。
|
|
208
|
+
|
|
209
|
+
`mind-map` / `tree-hierarchy` は動かせる数を持たないため配線していない。
|
|
210
|
+
|
|
211
|
+
- **他の値から決まる値を毎 frame 解く `derived` を足した** (#453)
|
|
212
|
+
|
|
213
|
+
`CdlDiagram` に `derived` を持たせ、 段の値を出した後に参照順で解いて `stateValues` に
|
|
214
|
+
載せる。 毎 frame ここを通るので、 掛け算 / 割り算 / 比較 / `min` / `max` のような
|
|
215
|
+
端点 2 点では表せない関係も、 段の補間の途中で正しい値になる。
|
|
216
|
+
|
|
217
|
+
式は既存の `formula/` を使う。 波括弧で囲んだ名前 (`{waiting}`) は図の他の場所と同じ
|
|
218
|
+
書き方で参照できる。 許可済の `Math` 関数は接頭辞なしでも書ける (`min(a, b)`)。
|
|
219
|
+
|
|
220
|
+
**名前に使えるのは英数字と `_` だけ** (`template-name.ts` の `TEMPLATE_NAME_CHARS` が
|
|
221
|
+
`\w+`)。 日本語の名前は `derived` の `id` に置くと `invalid-id` の通知が返り、
|
|
222
|
+
`{待ち}` のように参照しても `parse-error` になる。
|
|
223
|
+
|
|
224
|
+
併せて 6 つを輸出した。 値を解く `applyDerivedValues` と、 段の値に重ねる
|
|
225
|
+
`withDerivedValues`、 型の `CdlDerivedValue` / `DerivedResult` / `DerivedNotice` /
|
|
226
|
+
`DerivedNoticeKind`。
|
|
227
|
+
|
|
228
|
+
**組み立て器からは宣言できない**。 `formulas` には `.formula(id, expression)` があるが、
|
|
229
|
+
`derived` に対応する method はまだ無く、 `CdlDiagram` を直接組む経路でしか渡せない。
|
|
230
|
+
|
|
231
|
+
### Removed (破壊的変更)
|
|
232
|
+
|
|
233
|
+
- **放射状の図 (`mindMapRadial` / `mind-radial`) を削除した** (#460)
|
|
234
|
+
|
|
235
|
+
中心から 45 度間隔で 8 方向へ枝を配る図で、 数を持たず構造だけを持つため段の値
|
|
236
|
+
(`{signal}`) を解けない「動かせない種別」 だった。 engine を「状態を読んで動く図」 に
|
|
237
|
+
寄せる方針 (#451 / #453) の下で、 動かせないまま保守を続ける根拠が無くなった。
|
|
238
|
+
|
|
239
|
+
| 消えたもの | 代わりに使うもの |
|
|
240
|
+
|---|---|
|
|
241
|
+
| `mindMapRadial()` builder (`index.ts` から輸出) | `mindMap()`。 **同じ絵にはならない** (下記) |
|
|
242
|
+
| `MindMapRadialPreset` / `MindMapRadialBuilder` / `MindMapRadialBranch` 型 | `MindMapPreset` / `MindMapBuilder` / `MindBranch` |
|
|
243
|
+
| `NODE_KINDS` の `"mind-radial"` | `"mind-map"` |
|
|
244
|
+
| `CdlRole` の `"mind-radial-halo"` | 無し。 当てていた CSS は削除する |
|
|
245
|
+
|
|
246
|
+
**絵の形は変わる**。 `mind-radial` は第 1 階層を 45 度間隔の 8 方向へ放射状に置いたが、
|
|
247
|
+
`mind-map` は第 1 階層を左右 2 列に振り分けて縦に並べる (`computeMindMapLayout`)。
|
|
248
|
+
8 方向の放射状という見た目自体に代わりは無い。
|
|
249
|
+
|
|
250
|
+
**書き換えは名前の置換では済まない**。 2 つの組み立て器は引数の形が違う。
|
|
251
|
+
|
|
252
|
+
| | `mindMapRadial` (0.5.0) | `mindMap` (0.6.0) |
|
|
253
|
+
|---|---|---|
|
|
254
|
+
| 中心の指定 | `centerTitle` (id は `centerId`、 既定 `"center"`) | `rootId` と `rootTitle` の 2 つが必須 |
|
|
255
|
+
| 距離の指定 | `radius` (既定 350) | 無し (canvas から導く) |
|
|
256
|
+
| 枝の親 | 省略可 (中心に繋がる) | `parent` が必須 |
|
|
257
|
+
|
|
258
|
+
したがって呼出は次のように書き換える。
|
|
259
|
+
|
|
260
|
+
```ts
|
|
261
|
+
// 0.5.0
|
|
262
|
+
mindMapRadial({ id: "mr", topic: "...", centerTitle: "Product" })
|
|
263
|
+
.branch({ id: "users", title: "Users" })
|
|
264
|
+
|
|
265
|
+
// 0.6.0
|
|
266
|
+
mindMap({ id: "mr", topic: "...", rootId: "root", rootTitle: "Product" })
|
|
267
|
+
.branch({ id: "users", title: "Users", parent: "root" })
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
名前だけ置換すると型検査で落ちる (`'centerTitle' does not exist in type 'MindMapPreset'`
|
|
271
|
+
と `Property 'parent' is missing`)。 落ちるので黙って壊れることは無いが、 全ての呼出と
|
|
272
|
+
全ての `.branch()` に手を入れる必要がある。
|
|
273
|
+
|
|
274
|
+
枝の数の上限も外れる。 `mindMapRadial().branch()` は 9 本目で投げ、 描画も第 1 階層を
|
|
275
|
+
8 本で切っていた。 `mindMap()` に上限は無く、 配置は再帰で降りる。 深さ数千段の payload を
|
|
276
|
+
機械で作って渡すと `RangeError: Maximum call stack size exceeded` になる (実測 = 深さ
|
|
277
|
+
1000 は 2.5ms で通り、 5000 で投げる)。 人が書く図では届かない深さだが、 生成した payload を
|
|
278
|
+
流し込む場合は深さを見ておく。
|
|
279
|
+
|
|
280
|
+
`[data-cdl-role="mind-radial-halo"]` および `[data-cdl-role="mind-radial-edge"]` に
|
|
281
|
+
当てていた CSS は、 一致する要素が無くなるため削除する。
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
## [0.5.0] - 2026-06-28
|
|
285
|
+
|
|
286
|
+
本節の `Removed (破壊的変更)` と `Changed` の後半 3 項目は **公開後に書き足した**。
|
|
287
|
+
0.5.0 を公開した時点で CHANGELOG に記録し漏らしており、 0.6.0 を切る時に公開済の中身と
|
|
288
|
+
突き合わせて気付いた (`npm pack @cardenelabs/cdl@0.5.0` を展開して確認)。 一度 0.6.0 の
|
|
289
|
+
変更として書いたが、 実際には 0.5.0 で既に出ていたため本節へ移した。
|
|
290
|
+
|
|
291
|
+
### Added
|
|
292
|
+
|
|
293
|
+
Initial OSS release.
|
|
294
|
+
|
|
295
|
+
- **12 preset** ... sequence / flow / swimlane / er / state / topology / solidity / gantt / class / pie / c4 / mind
|
|
296
|
+
- **29 NodeKind** ... actor / function / storage / event / service / database / cache / queue / wallet / validator / 他
|
|
297
|
+
- **8 EdgeStyle** ... solid / dotted / dashed / dotted-flow / 他
|
|
298
|
+
- **6 Tone** ... accent / teal / success / error / warning / info
|
|
299
|
+
- **phase / state / tween / set / badge** ... 時系列 animation を宣言的に
|
|
300
|
+
- **Text DSL v0.5** ... mermaid 感覚の 5 ブロック箇条書き DSL (parser + compiler、 JA / EN i18n)
|
|
301
|
+
- **Visual Editor** (`apps/playground`) ... GUI 編集 + live preview + SVG export
|
|
302
|
+
- **Catalog** ... 12 preset × animation の visual 一覧
|
|
303
|
+
- **Docs site** ... 全 16 概念 × JA / EN、 humans tab + LLM tab、 Diátaxis 準拠
|
|
304
|
+
- **Pagefind 全文検索** ... Cmd+K で全 docs 高速 lookup
|
|
305
|
+
- **React + Astro 両対応** ... static / SSR / hybrid どこでも動く
|
|
306
|
+
- **CdlDiagramThumbnail** ... thumbnail + viewport いっぱいのモーダル拡大
|
|
307
|
+
- **CdlDiagramView** ... phase autoplay / focusPhaseId / hideHeader / debug props
|
|
308
|
+
- **Performance optimization** ... spatial hash 採用、 1000 node でも 60ms 以下の layout
|
|
309
|
+
- **TypeScript strict 全面 ON** + zod runtime validation
|
|
310
|
+
- **OSS 公開準備** ... README / CONTRIBUTING / SECURITY / ISSUE_TEMPLATE / PR_TEMPLATE 整備
|
|
311
|
+
- **380 件のテスト** ... unit + integration + visual screenshot diff + e2e
|
|
312
|
+
|
|
313
|
+
### Changed
|
|
314
|
+
|
|
315
|
+
- chainome monorepo から独立 OSS lib として分離 (旧 `chainome/packages/cdl` + `chainome/packages/anim` + `chainome/apps/web` の cdl 関連を移植)
|
|
316
|
+
- repo URL を `git@github.com:cardene777/cdl.git` に変更
|
|
317
|
+
- playground (旧 `apps/web`) を `apps/playground` に rename
|
|
318
|
+
|
|
319
|
+
- **`stateMachine` / `stateMachine2` の `stateWidth` が状態の箱の幅を指すようになった** (#357)
|
|
320
|
+
|
|
321
|
+
これまでは帯の幅にしか渡っておらず、 engine が帯を「箱の幅 320 + 余白 25 × 2 = 370」 まで広げ直すため、 **370 未満の指定は全て無視されていた** (260 / 300 / 340 のどれを指定しても図が 1 world も変わらない状態)。 option の名前が指すとおり箱の幅として扱うようにした。
|
|
322
|
+
|
|
323
|
+
既定値は 360 → 320 (`kind: "card"` の既定幅) に変えている。 これにより **`stateWidth` を指定しない図の座標は従来と完全に一致する** (帯は 320 + 50 = 370 を宣言し、 engine の再拡張も 370 で一致するため)。
|
|
324
|
+
|
|
325
|
+
**320 以外を明示していた図は全て変わる**。 値の範囲で内訳が違う。
|
|
326
|
+
|
|
327
|
+
| 明示値 | 従来 | 今後 |
|
|
328
|
+
|---|---|---|
|
|
329
|
+
| 320 | 無視 (帯 370 / 箱 320) | 同じ (帯 370 / 箱 320) |
|
|
330
|
+
| 80-319 | 無視 (帯 370 / 箱 320) | 効く (箱が指定値まで狭まり図が縮む) |
|
|
331
|
+
| 321-370 | 無視 (帯 370 / 箱 320) | 効く (箱が指定値まで広がり図が伸びる) |
|
|
332
|
+
| 371 以上 | 帯の幅として効く (箱は 320 のまま) | 箱の幅として効く (帯は指定値 + 50) |
|
|
333
|
+
|
|
334
|
+
370 以下は元から効いていなかったので、 今回初めて指定が反映される (option が名前どおりに働くようになった側)。 従来と同じ見た目に戻すなら `stateWidth: 320` を明示する。
|
|
335
|
+
|
|
336
|
+
371 以上を指定していた図は意味が変わる。 従来の「箱 320 を広い帯に置く」 形は preset では表現できなくなるため、 その見た目が要る場合は低位 API (`diagram().lane().node()`) で帯と箱を個別に宣言する。 3 状態の実測 = `stateWidth: 400` で `viewBox.w` 1440 → 1605。
|
|
337
|
+
|
|
338
|
+
併せて、 80 未満と有限でない値は例外を投げるようにした。 箱の幅として使う以上、 描画が壊れる値を黙って受け取らない。
|
|
339
|
+
|
|
340
|
+
- **`er` の `entityWidth` と `classDiagram` の `classWidth` が箱の幅を指すようになった** (#359)
|
|
341
|
+
|
|
342
|
+
#357 と同じ構造が 2 つ残っていた。 どちらも帯の幅にしか渡っておらず、 engine が帯を「箱の幅 400 + 余白 25 × 2 = 450」 まで広げ直すため、 **450 以下の指定は全て無視されていた** (200 / 300 / 450 のどれを指定しても図が 1 world も変わらない状態)。
|
|
343
|
+
|
|
344
|
+
既定値はどちらも `kind: "storage"` の既定幅 (400) から導く。 帯は `400 + 50 = 450` を宣言する。
|
|
345
|
+
|
|
346
|
+
| preset | 従来の帯 | 今後の帯 | 既定の図 |
|
|
347
|
+
|---|---|---|---|
|
|
348
|
+
| `classDiagram` | 420 宣言 → engine が 450 に拡張 | 450 宣言 | 変わらない |
|
|
349
|
+
| `er` | 460 宣言 (engine の 450 を上回るのでそのまま) | 450 宣言 | **10 world 狭くなる** |
|
|
350
|
+
|
|
351
|
+
`er` だけ既定の見た目が変わる。 従来の 460 は `storage` の既定幅とも他の preset とも揃っていない値で、 doc には 360 と書かれていて実装 (460) とも食い違っていた。 箱は 400 のままなので、 変わるのは帯の左右の余白が 30 → 25 になる分だけ (他の preset は全て 25)。 従来と同じ幅に戻すなら `entityWidth: 410` を明示する。
|
|
352
|
+
|
|
353
|
+
450 以下を明示していた図は全て変わる (今回初めて指定が反映される側)。 451 以上を指定していた図は意味が変わり、 従来の「箱 400 を広い帯に置く」 形は preset では表現できなくなる。 その見た目が要る場合は低位 API (`diagram().lane().node()`) で帯と箱を個別に宣言する。
|
|
354
|
+
|
|
355
|
+
併せて、 80 未満と有限でない値は例外を投げるようにした。
|
|
356
|
+
|
|
357
|
+
### Removed (破壊的変更)
|
|
358
|
+
|
|
359
|
+
- **見た目の主題 (`CdlTheme`) を型ごと削除した** (#426)
|
|
360
|
+
|
|
361
|
+
主題は SVG の根に `data-cdl-theme` を出すだけの素通しの札で、 描画の判断には使っていなかった。
|
|
362
|
+
唯一の利用者が主題という概念を廃止したため、 型と欄と属性の出力をまとめて外した。
|
|
363
|
+
|
|
364
|
+
| 消えたもの | 代わりに使うもの |
|
|
365
|
+
|---|---|
|
|
366
|
+
| `CdlTheme` 型 (`index.ts` / `builder.ts` から輸出) | 無し。 見た目は consumer 側の CSS が決める |
|
|
367
|
+
| `diagram(id, { theme })` の `theme` 欄 | 無し。 渡していた場合は削除する |
|
|
368
|
+
| `CdlDiagram.theme` / `LaidDiagram.theme` | 無し |
|
|
369
|
+
| SVG の根の `data-cdl-theme` 属性 | `[data-cdl-role="<role>"]` selector で見た目を当てる |
|
|
370
|
+
|
|
371
|
+
`[data-cdl-theme="x"] [data-cdl-role="y"]` の形で CSS を書いていた場合は、
|
|
372
|
+
前半を外して `[data-cdl-role="y"]` にする。 明暗の切替は consumer 側の仕組み
|
|
373
|
+
(`html` の class 等) で行う。
|
|
374
|
+
|
|
375
|
+
- **`VisualAxis` から 2 軸を削除した** (#426)
|
|
376
|
+
|
|
377
|
+
| 消えた軸 | 理由 |
|
|
378
|
+
|---|---|
|
|
379
|
+
| `svg-filter-integrity` | 前提にしていた filter (`cdl-nm-raised-soft`) が既に存在せず、 何も検査していなかった |
|
|
380
|
+
| `neumorphism-shadow-budget` | 主題固有の影 (6 world) を前提とする軸で、 主題の廃止で根拠が消えた。 隣接の間隔は `node-vertical-clearance` (40 world) と near-collision (70 world) が引き続き見る |
|
|
381
|
+
|
|
382
|
+
軸名を集計 / 比較している consumer は、 この 2 つを一覧から外す。
|
|
383
|
+
|
|
384
|
+
## [0.4.0] - 2026-06-27
|
|
385
|
+
|
|
386
|
+
### Added
|
|
387
|
+
|
|
388
|
+
- **Text DSL v0.4** ... 残 5 preset (flow / swimlane / er / state / topology) animation 拡張
|
|
389
|
+
- catalog の Text DSL demo page (`/catalog/text-dsl`) ... 6 preset × animation の visual 確認
|
|
390
|
+
- 全 docs code block への preview 強制 (48 件、 lint script による品質保証)
|
|
391
|
+
- integration test 21 件追加 (Permit / Topology / edge case / regression / 6 preset × animation)
|
|
392
|
+
|
|
393
|
+
## [0.3.0] - 2026-06-27
|
|
394
|
+
|
|
395
|
+
### Added
|
|
396
|
+
|
|
397
|
+
- **Text DSL v0.3** ... sequence preset で `アニメーション:` ブロック full compile
|
|
398
|
+
- DSL の `状態` / `ステップ` / `強調` / `遷移` / `切替` / `バッジ` / `説明` を実 phase / state / tween / set / activate / badge / body に注入
|
|
399
|
+
- highlight 解決 ... actor 名 → `header` + `footer` + `step box` を active 化、 `A→B` 矢印 → edge id を active 化
|
|
400
|
+
- アーキテクチャ ... animation あり時 builder 直接経路、 なし時 preset 経由 (v0.2 互換)
|
|
401
|
+
- test 6 件 (v0.3 機能)
|
|
402
|
+
|
|
403
|
+
## [0.2.0] - 2026-06-27
|
|
404
|
+
|
|
405
|
+
### Added
|
|
406
|
+
|
|
407
|
+
- **Text DSL v0.2** ... 6 preset 全対応 (sequence + flow + swimlane + er + state + topology)
|
|
408
|
+
- cardinality 自動解析 (1:1 / 1:N / N:M / 0..1 / 1..*)
|
|
409
|
+
- ER preset で entity 自動生成 + relation 自動 cardinality
|
|
410
|
+
- state preset で最初 actor = initial、 最後 = final 自動付与
|
|
411
|
+
- topology preset で 1 group 内 container 配置
|
|
412
|
+
- test 8 件 (5 preset 動作確認)
|
|
413
|
+
|
|
414
|
+
## [0.1.0] - 2026-06-27
|
|
415
|
+
|
|
416
|
+
### Added
|
|
417
|
+
|
|
418
|
+
- **Text DSL v0.1** ... 「タイトル / 種類 / 登場人物 / 流れ / アニメーション」 の 5 ブロック箇条書き DSL
|
|
419
|
+
- parser + compiler (sequence preset only) ... 行ベース parser + AST + LaidDiagram 変換
|
|
420
|
+
- 日本語 + 英語両対応 (キーワード i18n)
|
|
421
|
+
- 矢印正規化 (→ / -> / => / >>)
|
|
422
|
+
- duration 解析 (1.5 秒 / 1500ms / 2s)
|
|
423
|
+
- エラー親切 (行番号 + hint + 修正提案)
|
|
424
|
+
- LLM 生成ガイド + 5 few-shot 例
|
|
425
|
+
- ChatGPT/Claude/Cursor 即用 system prompt
|
|
426
|
+
- preview 強制 lint script (`pnpm lint:docs-preview`)
|
|
427
|
+
- text-dsl-spec.md + text-dsl-llm-guide.md (docs site 統合)
|
|
428
|
+
- test 11 件 (parse + compile + アニメーション parse)
|
|
429
|
+
|
|
430
|
+
## 版と commit の対応
|
|
431
|
+
|
|
432
|
+
各版の見出しから、 その版を公開した commit までの差分を辿れる。 `0.4.0` 以前はこの repo を
|
|
433
|
+
切り出す前 (旧 monorepo) の版で、 対応する commit がこの repo に無いため link を持たない。
|
|
434
|
+
|
|
435
|
+
最古の `0.5.0` だけ `/tree/` を指す (それ以前と比べる相手が無いため)。 `/releases/tag/` は
|
|
436
|
+
使わない = annotated tag を push しても GitHub Release は作られず、 Release を作っていない版で
|
|
437
|
+
行き止まりになる。
|
|
438
|
+
|
|
439
|
+
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.10.0...HEAD
|
|
440
|
+
[0.10.0]: https://github.com/cardene777/cdl/compare/v0.9.0...v0.10.0
|
|
441
|
+
[0.9.0]: https://github.com/cardene777/cdl/compare/v0.8.0...v0.9.0
|
|
442
|
+
[0.8.0]: https://github.com/cardene777/cdl/compare/v0.7.0...v0.8.0
|
|
443
|
+
[0.7.0]: https://github.com/cardene777/cdl/compare/v0.6.1...v0.7.0
|
|
444
|
+
[0.6.1]: https://github.com/cardene777/cdl/compare/v0.6.0...v0.6.1
|
|
445
|
+
[0.6.0]: https://github.com/cardene777/cdl/compare/v0.5.0...v0.6.0
|
|
446
|
+
[0.5.0]: https://github.com/cardene777/cdl/tree/v0.5.0
|
package/SPEC.md
CHANGED
|
@@ -123,11 +123,20 @@ diagram.phase(id, {
|
|
|
123
123
|
body: string, // 説明文 (日本語、 header に表示)
|
|
124
124
|
}, builder => builder
|
|
125
125
|
.activate(...ids) // active な node / edge id を列挙
|
|
126
|
+
.draw(...ids) // この phase で左の起点から描き始める node id を列挙
|
|
126
127
|
.tween(stateId, from, to) // state を線形補間
|
|
127
128
|
.badge(text) // BalanceDiffCard 等の status badge 文字列
|
|
128
129
|
);
|
|
129
130
|
```
|
|
130
131
|
|
|
132
|
+
`draw` は `activate` と別集合で持つ。 1 箱で図全体を描く種別では焦点がその箱に解決される
|
|
133
|
+
ため、 連続する phase で光り続ける図が実在し、 光っているかを引き金にすると値が動くだけの
|
|
134
|
+
phase でも線を引き直すことになる。
|
|
135
|
+
|
|
136
|
+
対象の node は phase の進み (0→1) に合わせて描かれる。 現在の対象種別は `chart-line` で、
|
|
137
|
+
折れ線が左端から右へ伸び、 点と値の数字は線の先が届いた時に現れる (軸 / 格子 / 横軸の名前は
|
|
138
|
+
最初から出る)。 `draw` を書かない図は従来どおり全長で描き、 DOM に dash 属性も付かない。
|
|
139
|
+
|
|
131
140
|
phase が定義されると自動的に。
|
|
132
141
|
- 全 phase が timeline 化 (autoplay + loop)
|
|
133
142
|
- 各 phase の active set 以外は inactive 化 (灰 dashed)
|
|
@@ -144,9 +153,12 @@ phase が定義されると自動的に。
|
|
|
144
153
|
6. **edge label** は path 中点から「path 進行方向の垂直方向」 に 50-80px 離して配置、 lane / node bbox との overlap を計算で避ける
|
|
145
154
|
7. **viewBox** は cdl が auto 計算 (全 lane の右端 + 余白 80px、 全 node の下端 + 余白 80px)
|
|
146
155
|
|
|
147
|
-
## Routing v8 (
|
|
156
|
+
## Routing v8-v10.1 (historical)
|
|
148
157
|
|
|
149
|
-
|
|
158
|
+
CAR-430 より前の routing v8-v10.1 では、 著者が座標 / offset / path 迂回を書かず、
|
|
159
|
+
`packages/cdl/src/layout/edges.ts` + 旧 `label-shift.ts` + `collisions.ts` が以下の配置を担っていた。
|
|
160
|
+
本節は係数と不具合の変遷を残す履歴資料であり、 **現行 pipeline の SSOT ではない**。
|
|
161
|
+
現行の権限フローは後節の「Chain 伝搬 shift + spec 固定化 SSOT」を参照する。
|
|
150
162
|
|
|
151
163
|
1. **fan-in 分散** ... 同 to node に集約する複数 edge を to 側 sidepoint offset で分散、 path 重複 0
|
|
152
164
|
2. **fan-out 分散** ... 同 from node からの複数 edge を to の cy 順で offset 分散、 交差 0
|
|
@@ -171,15 +183,16 @@ border case sweep test (`dragon apps/playground/tests/visual/overlap-detector.sp
|
|
|
171
183
|
10. **detour gap 拡張 (44 → 94、 +50)** ... label-shift v10 が detour path から NORMAL 100 world 上に label を置く挙動と組み合わせると、 obstacle.bottom + clearance 32 world では label bottom が obstacle と 24 world 割り込む (pattern-rollback e3 の label × commit 20 px² overlap の root cause、 cdl PR #58)。 gap +50 で label 位置が obstacle bottom から 66 world (DOM ~16 px) 離れる。
|
|
172
184
|
11. **fan-in slot 別 detour Y 分散** ... 同 to node の複数 detour edge (pattern-rollback の e3 + e5 が両方 → db) が同 y 帯集約して label × label collision する問題を解消。 `slotFromCenter = Math.round(offset / fanGap)` で slot index を復元、 slot 0 起点で obstacle 側から離れる方向にのみ 0..fanGap の絶対値 shift。 上迂回 case は逆方向 (上方) にのみ shift、 detour Y 符号に合わせて分散方向を決定 (`edges.ts` `isDownDetour ? +detourYAdjustAbs : -detourYAdjustAbs` SSOT)。
|
|
173
185
|
|
|
174
|
-
### routing
|
|
186
|
+
### 旧 routing 実測の前提
|
|
175
187
|
|
|
176
|
-
以下の 3
|
|
188
|
+
上記の旧 routing v8-v10.1 を評価した時点では、 以下の 3 前提を実測に使った。
|
|
177
189
|
|
|
178
190
|
- **dragon CdlDiagramThumbnail の display 幅** ... 490 px 相当 (SVG viewBox 1820 world unit と scale 0.269 で対応)
|
|
179
191
|
- **diagram viewBox 幅** ... 1500-2000 world unit 相当 (author lane 定数 SSOT の慣例値)
|
|
180
192
|
- **font family** ... Inter / Newsreader (measureTextWidth の pt 想定と一致)
|
|
181
193
|
|
|
182
|
-
|
|
194
|
+
これらが変更されたら、 現行値は `packages/cdl/src/layout/edges.ts` +
|
|
195
|
+
`packages/cdl/src/layout/spec.ts` + `packages/cdl/src/layout/clearance-constants.ts` を起点に再測定する。
|
|
183
196
|
|
|
184
197
|
## Chain 伝搬 shift + spec 固定化 SSOT (CAR-418 系)
|
|
185
198
|
|
|
@@ -194,32 +207,43 @@ layout constants は 2 種類の SSOT で管理する、 いずれも `packages/
|
|
|
194
207
|
| **positive spec** | engine が満たすべき正しい配置目標値 | `visualValidateLaid` axes / dragon pixel-perfect gate | `SPEC_CLEARANCE_POLICY` |
|
|
195
208
|
| **near-collision** | 「これ以下は誤読」 の下限 | `detectNearCollisions` (`collisions.ts`) | `NEAR_COLLISION_POLICY` |
|
|
196
209
|
|
|
197
|
-
primitive 定数 (`CLEARANCE_NODE_LABEL` / `CLEARANCE_LANE_LABEL` / `CLEARANCE_LABEL_LABEL` / `CLEARANCE_PATH_LABEL` / `TARGET_LABEL_PATH_DIST` 等) は `packages/cdl/src/layout/clearance-constants.ts` に置き、 spec.ts / collisions.ts /
|
|
210
|
+
primitive 定数 (`CLEARANCE_NODE_LABEL` / `CLEARANCE_LANE_LABEL` / `CLEARANCE_LABEL_LABEL` / `CLEARANCE_PATH_LABEL` / `TARGET_LABEL_PATH_DIST` 等) は `packages/cdl/src/layout/clearance-constants.ts` に置き、 spec.ts / collisions.ts / edges.ts の全 downstream が import で参照する。 CAR-424 で旧 `edges.ts` / `label-shift.ts` の module-local 定数を全削除、 `clearance-constants.ts` を 1 箇所 SSOT に集約した。
|
|
198
211
|
|
|
199
212
|
### 現行 pipeline と CAR-418 移行状態
|
|
200
213
|
|
|
201
|
-
現在 (2026-
|
|
214
|
+
現在 (2026-08-19) の `layout()` pipeline (`packages/cdl/src/layout.ts`) は以下 7 phase を走る。
|
|
202
215
|
|
|
203
|
-
1. `layoutLanes` → `layoutNodes` → `expandLanesForNodes` (lane / node 静的配置)
|
|
204
|
-
2. `layoutEdges` (edge routing
|
|
216
|
+
1. `layoutLanes` → `layoutNodes` → `expandLanesForNodes` → `expandLaneGapsForEdgeLabels` (lane / node 静的配置 + label 収納 gap 確保)
|
|
217
|
+
2. `layoutEdges` (edge routing + 初期 label 位置を決定)
|
|
205
218
|
3. `detectCollisions` → `resolveOverlaps` (node-node 後勝ち一発 shift)
|
|
206
|
-
4. `layoutEdges`
|
|
207
|
-
5. `
|
|
208
|
-
6. `
|
|
219
|
+
4. node が動いた場合の `layoutEdges` 再 route
|
|
220
|
+
5. `resolveEdgeLabelOverlapsWithChainAndPropagate` (edge label を起点に label / node / edge-path の chain 伝搬 shift を算出・反映。 lane-label は obstacle として扱うが、 返却された lane-label shift は現行 `layout()` では未適用)
|
|
221
|
+
6. `bowSharedStraightPaths` → `repositionParallelLabels` (共有直線 path を確定後、 parallel label の `labelY` を最終配置)
|
|
222
|
+
7. `detectCollisions` / `detectNearCollisions` → `computeViewBox` (最終検証 + viewport 決定)
|
|
209
223
|
|
|
210
|
-
|
|
224
|
+
label 位置は段階的に確定する。 `edges.ts routePath()` が初期位置を返し、 `layoutEdges` が
|
|
225
|
+
author 指定 offset / margin と parallel / fan-in / fan-out label 分散を加えて暫定位置を決める。
|
|
226
|
+
次に `resolveEdgeLabelOverlapsWithChainAndPropagate` が overlap / near-collision 発生時のみ
|
|
227
|
+
chain 伝搬で動かす。 node が chain shift された場合は `layoutEdges` を再実行して endpoint を追従させ、
|
|
228
|
+
最後に `repositionParallelLabels` が共有 node pair の label を兄弟 path に合わせて置き直す。
|
|
229
|
+
旧 `label-shift.ts` の 16 方向 × 26 段階探索は CAR-430 で削除済みで、 現行 pipeline には含まれない。
|
|
211
230
|
|
|
212
|
-
|
|
231
|
+
CAR-421 で新設した `resolveOverlapsWithChain(nodes, minClearance, maxIter)` は単体 API として残る。
|
|
232
|
+
実 pipeline の node-node 解消は、 既存 snapshot との互換性のため引き続き `resolveOverlaps` が担う。
|
|
213
233
|
|
|
214
|
-
### CAR-424 の完了範囲 (
|
|
234
|
+
### CAR-424 の完了範囲 (履歴)
|
|
215
235
|
|
|
216
|
-
CAR-424
|
|
236
|
+
CAR-424 時点では、 routing v8 / v10 系の一括削除を避け、 以下 3 点に scope を限定した。
|
|
237
|
+
後続の CAR-429 / CAR-430 で edge path の sidepoint 分散と旧 label 探索の段階削除が完了しているため、
|
|
238
|
+
以下は現行状態ではなく当時の完了範囲を示す。
|
|
217
239
|
|
|
218
240
|
- **module-local 重複定数の集約** ... `edges.ts` `CLEARANCE_NODE_LABEL = 32` と `label-shift.ts` の 4 clearance 定数を `clearance-constants.ts` import に置換 (dedup)
|
|
219
241
|
- **`CLEARANCE_POLICY` の SSOT 集約** ... `collisions.ts` module-local `CLEARANCE_POLICY` dict を `spec.ts` `NEAR_COLLISION_POLICY` に移管、 `collisions.ts requiredClearance` は `requiredNearClearance` に委譲する薄い adapter に縮小
|
|
220
242
|
- **本 SPEC.md 「Chain 伝搬 shift + spec 固定化 SSOT」 セクション追加** ... 二層 SSOT (positive spec / near-collision) 分離、 現行 pipeline の CAR-418 移行状態、 CAR-424 完了範囲を明文化
|
|
221
243
|
|
|
222
|
-
`edges.ts` fan-in / fan-out
|
|
244
|
+
当時は `edges.ts` fan-in / fan-out path の sidepoint offset 分散削除 + `label-shift.ts` shift 探索削除を
|
|
245
|
+
後続 Issue に送った。 これらは CAR-429 / CAR-430 で完了済み。 label 自体の parallel / fan-in /
|
|
246
|
+
fan-out 分散は `layoutEdges` 内の暫定位置決定として現行でも稼働する。
|
|
223
247
|
|
|
224
248
|
### 参照
|
|
225
249
|
|
|
@@ -336,7 +360,7 @@ export const erc20Transfer = diagram("erc20-transfer", { topic: "ERC-20 Transfer
|
|
|
336
360
|
| arrow | edge の from/to が存在、 同 from/to ペアが side hint なく被る |
|
|
337
361
|
| label | label / sublabel 文字数で box が lane 幅を超える |
|
|
338
362
|
| japanese-only | title / eyebrow / subtitle / label に uppercase 英単語 (FUNCTION/STORAGE/...) |
|
|
339
|
-
| phase-isolation | phase の activate id が存在する node/edge を指す |
|
|
363
|
+
| phase-isolation | phase の activate id が存在する node/edge を指す、 draw id が存在する node を指す |
|
|
340
364
|
| neumorphism | tone が定義された 4 色から外れる |
|
|
341
365
|
|
|
342
366
|
build error / warn を投げ、 著者は cdl 段階で修正できる (screenshot 取る前に)。
|