Skip to content

Commit 1d1145b

Browse files
on-keydayclaude
andcommitted
docs: fix ADR 0048 section order and clarify the frontier snapshot
The bit-run endian entry was appended after the closing sections instead of beside the other 経過 entries; move it into place. Also mark the 72 / 38 figures as the starting snapshot, since the table above them now reports the current count. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1 parent e419ffe commit 1d1145b

1 file changed

Lines changed: 38 additions & 36 deletions

File tree

rebrgen/docs/decisions/0048-corpus-saturated-shift-to-ebmgen-conversion.md

Lines changed: 38 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,14 @@ unictest の入力コーパスは EBM ノード種別の粒度では既に飽和
3636
| `Expression LITERAL_CHAR` | 3 | `tar`, `pg_wire`, `fb_dnsrocks` |
3737
| `Statement CONTINUE` | 1 | `softether` |
3838

39-
変換できない 72 個の内訳(当面の作業リスト)。
39+
変換できない `.bgn` の内訳(当面の作業リスト)。着手時点は 72 個で、下記「経過」節の分だけ
40+
減っている。
4041

4142
**メッセージ単位で分類してはいけない。** `Unexpected nullptr``common.hpp`
4243
`unexpected_nullptr()` 一箇所から出る汎用エラーで、メッセージだけで括ると無関係な原因が
4344
混ざる(16 件に見えるが実際は 5 箇所に散っている)。エラーは `handle_error`
4445
`std::source_location` を付けて伝播チェーンを出力するので、**最深フレームで分類する**
45-
その粒度では 72 件 = **38 グループ**
46+
その粒度では着手時点の 72 件が **38 グループ**だった
4647

4748
主要なもの(件数はフレーム単位、2026-07-30 時点 = 58 件 / 35 グループ):
4849

@@ -136,40 +137,6 @@ callee 式しか手がかりが無い一般の `ast::Call` 用として残って
136137
`omg_cdr.bgn` ×1、`src/test/test_cases.bgn` ×1)
137138
- 回帰なし: ebm2go std-io が 74 PASS / 4 FAIL で、失敗する入力もエンディアンスコープ修正時点と同一
138139

139-
## 具体例
140-
141-
測定の手順は、各 `.bgn``tool/ebmgen` で EBM に変換し、`ebmgen -i <ebm> -d` のテキスト
142-
ダンプから `Statement|Expression|Type <KIND>` トークンの集合を取り、コーパス 21 フォーマットの
143-
和集合との差分を見るというもの。
144-
145-
この測定に至る前は「実在フォーマットのワイヤデータを増やす」方向で TCP / HTTP/2 / DNS /
146-
WebSocket / IPv6 に 21 サンプルを追加していた。それ自体は分岐網羅と境界値の面で意味があるが、
147-
**構造の新規性という観点では頭打ち**であることが測定で判明した。
148-
149-
## これは X を意味しない
150-
151-
- **コーパスのカバレッジが十分という意味ではない。** 測定はノード種別の**有無**しか見ておらず、
152-
構造の組み合わせ・ネストの深さ・再帰の段数・長さ式の演算内容は捉えていない。同じ種別集合でも
153-
生成コードは大きく異なり得る。「飽和」はこの指標に関しての言明。
154-
- **既存フォーマットへのサンプル追加が無価値という意味ではない。** 境界値(ゼロ長・等号ちょうど・
155-
型幅上限)は型依存でバックエンド間の差が出る領域であり、種別粒度の測定には現れない。
156-
ADR 0042 系の failure_case と合わせて引き続き有効。
157-
- **72 個すべてを直すという計画ではない。** フレーム単位のグループが作業単位であり、どこから
158-
着手するかは別途決める。
159-
- **`Unexpected nullptr` が 16 件の単一原因という意味ではない。** 5 つの異なる箇所から出ており、
160-
メッセージ単位の集計は誤り。フレームで分けること。
161-
162-
## 代替案
163-
164-
- **言語間の値レベル差分**(全バックエンドがデコード結果を正規化 JSON で吐いて突き合わせる)。
165-
却下。全バックエンドは同じ EBM から派生するため、IR レベルで解釈がズレていれば全言語が同じ
166-
間違いをして一致する。捕まえられるのは単一バックエンドの lowering ズレだけで、18 言語分の
167-
実装コストに見合わない。
168-
- **外部参照実装(scapy 等)との突き合わせ。** 却下。検出できるのは `.bgn` の定義が
169-
プロトコル仕様と合っているかであって、brgen の変換の正しさではない。フォーマット仕様著者の
170-
責任側の話であり、CI に scapy 依存を持ち込む対価に見合わない(ADR 0021 の責任分界と整合)。
171-
- **`--fuzz` を CI に載せる。** 構造の妥当性には効かない。`ebm2rmw` はモデルから入力を生成する
172-
ので、fuzz 入力は構成上モデルと整合する。クラッシュ耐性の検査としては別途有効。
173140

174141
## 経過: ビット連結に参加する struct メンバーの endian(2026-07-30)
175142

@@ -211,3 +178,38 @@ enum による上書きは従来のまま。連結時に外側フォーマット
211178
- より後段へ移動した 2 件: `media/ac3.bgn`, `ripple.bgn`
212179
`transform/bit_fields.cpp:72``Unexpected nullptr`(同グループが 1 → 3 件に)
213180
- 回帰なし: ebm2go std-io が 74 PASS / 4 FAIL で、失敗する入力も前段階と同一
181+
182+
## 具体例
183+
184+
測定の手順は、各 `.bgn``tool/ebmgen` で EBM に変換し、`ebmgen -i <ebm> -d` のテキスト
185+
ダンプから `Statement|Expression|Type <KIND>` トークンの集合を取り、コーパス 21 フォーマットの
186+
和集合との差分を見るというもの。
187+
188+
この測定に至る前は「実在フォーマットのワイヤデータを増やす」方向で TCP / HTTP/2 / DNS /
189+
WebSocket / IPv6 に 21 サンプルを追加していた。それ自体は分岐網羅と境界値の面で意味があるが、
190+
**構造の新規性という観点では頭打ち**であることが測定で判明した。
191+
192+
## これは X を意味しない
193+
194+
- **コーパスのカバレッジが十分という意味ではない。** 測定はノード種別の**有無**しか見ておらず、
195+
構造の組み合わせ・ネストの深さ・再帰の段数・長さ式の演算内容は捉えていない。同じ種別集合でも
196+
生成コードは大きく異なり得る。「飽和」はこの指標に関しての言明。
197+
- **既存フォーマットへのサンプル追加が無価値という意味ではない。** 境界値(ゼロ長・等号ちょうど・
198+
型幅上限)は型依存でバックエンド間の差が出る領域であり、種別粒度の測定には現れない。
199+
ADR 0042 系の failure_case と合わせて引き続き有効。
200+
- **72 個すべてを直すという計画ではない。** フレーム単位のグループが作業単位であり、どこから
201+
着手するかは別途決める。
202+
- **`Unexpected nullptr` が 16 件の単一原因という意味ではない。** 5 つの異なる箇所から出ており、
203+
メッセージ単位の集計は誤り。フレームで分けること。
204+
205+
## 代替案
206+
207+
- **言語間の値レベル差分**(全バックエンドがデコード結果を正規化 JSON で吐いて突き合わせる)。
208+
却下。全バックエンドは同じ EBM から派生するため、IR レベルで解釈がズレていれば全言語が同じ
209+
間違いをして一致する。捕まえられるのは単一バックエンドの lowering ズレだけで、18 言語分の
210+
実装コストに見合わない。
211+
- **外部参照実装(scapy 等)との突き合わせ。** 却下。検出できるのは `.bgn` の定義が
212+
プロトコル仕様と合っているかであって、brgen の変換の正しさではない。フォーマット仕様著者の
213+
責任側の話であり、CI に scapy 依存を持ち込む対価に見合わない(ADR 0021 の責任分界と整合)。
214+
- **`--fuzz` を CI に載せる。** 構造の妥当性には効かない。`ebm2rmw` はモデルから入力を生成する
215+
ので、fuzz 入力は構成上モデルと整合する。クラッシュ耐性の検査としては別途有効。

0 commit comments

Comments
 (0)