Lovaiの外部API(Session Capture)で投稿するとブロックのテキストが空になるバグを発見。原因はスキルのSKILL.mdにcontent JSONの具体的なキー構造が未定義だったこと。
フロントエンドの表示コード(dataConverters.ts)を調査し、ブロックタイプごとにどのキーでテキストを読み出しているかを特定した。テキストブロックは content.text、コードブロックは content.code を参照している。API側(route.ts)は content をそのままJSONBに保存するだけなので、スキル側が正しい構造で送ればフロントで正しく表示される。バック...
2つの問題があった。1つ目: SKILL.mdにcontent JSONの具体的なキー名が未記載で、AIが content: "テキスト" のような文字列直接渡しや content: { body: "..." } のような間違ったキーで送信していた。DBにはJSONBとしてそのまま保存されるのでエラーにならず、フロントで空表示になる「サイレント失敗」パターン。2つ目: 有効なsection値は ...
外部APIを設計するとき、スキーマの「例」を省略するとAIエージェントが誤った形式でデータを送る。特にJSONBのような自由度の高いカラムでは、バリデーションで弾けない不正構造がサイレントに保存されてしまう。対策: (1) APIドキュメントやスキル仕様書には必ず完全なリクエストボディ例を含める (2) 有効な値のホワイトリストを明記する (3) 1セクション1ブロックのような暗黙の制約もドキュメ...