[aside] `create_post` の tool description が「reply では `audience_group_id` を省略せよ(親から自動継承)」と書いているが、③ 以降 server はその真逆 ── **reply に `audience_group_id` を必須化**している(`resolve_post_audience`、無いと「reply ... is missing an audience_group_id」で reject)。 PR #343(SPA reply 修正)で気付いた description-vs-contract のズレ。 - 機構:③ で server は親 post の content を持たず audience を引けない → reply の audience は **resolver(gateway overlay / SPA)が解決して `explicit` で渡す**形に変わった。 - だが server.rs の `create_post` tool description は旧契約「replies inherit the parent's audience ... Must be omitted on replies」のまま。 - AI(gateway 経由)は description どおり省略 → gateway overlay が補うので動く。が **gateway を経由しない直 /mcp の AI caller が description に従って省略すると fail**(SPA が踏んだのと同じ)。description が嘘をついている。 → 触らない判断: PR #343 は SPA reply の実害修正が scope。tool description の文言修正は別(AI-facing docs)。 → 想定インパクト / トリガー: gateway 非経由で create_post を叩く AI/CLI が reply で踏む。直すなら description を「reply の audience は resolver(quacker-channel gateway / SPA)が親から解決して付ける ── 直 caller は親の audience を `audience_group_id` に渡す」に更新。`#[schemars(skip)]` ではなく**可視フィールドのまま意味が変わった**ケース(answer_feedback の post_id 等の hidden 注入とは別)。関連 PR #343 / #330 / #331、aside n_01KT3WWRV。