[aside] run_sql の行は DuckDB `to_json` 経由なので列がアルファベット順に固定される ── agent 向けに「本文を先頭」等の並べ替えができない
PR #299(agent-read 便利 view)で唯一直せなかった finding(#299 本文の指摘 ⑤)。
- **構造**: `src/server.rs::run_sql` は user クエリを `SELECT to_json(t) AS row FROM (<query>) t` で包む(`src/server.rs:1435` 付近)。`to_json(struct)` は **キーをアルファベット順にソート**する(実測: `SELECT 2 AS zeta, 1 AS alpha` → `{"alpha":1,"zeta":2}`)。結果、SELECT 順や view の列定義順に関わらず agent が受け取る JSON は常にアルファベット順になり、`body`(一番見たい中身)が `audience_group_id` と `created_at` の間に埋もれ、`id` が `body` の後に来る。
- **触らない判断**: #299 は view で列を足す/束ねる範囲。列順を制御するには to_json を外して `duckdb::types::Value` で行を組む経路が要るが、それは「TIMESTAMP で panic した」ため意図的に避けられている経路(`src/server.rs:1431-1433` のコメント)。実害が小さく、コスト/リスクが見合わない。
- **想定インパクト / トリガー**: 走査効率の微妙な劣化のみ(機能影響なし)。列順が読みやすさの実害になったとき、または DuckDB upgrade で Value 抽出の TIMESTAMP panic が解消したときに、to_json を外して列順を制御する(代替: 主要列を `id, body, …` の固定プレフィクスで明示 SELECT する慣習を敷く)。元 finding は n_01KT19G7JGBY731PF5GBQYYVN5(created_agent 列ドリフト、#299 で解消)。