お待たせして申し訳ありません。この件についてかなり考えてみました。
投稿を保留(pending)状態にするということは、その投稿をハードデリートし、必要なデータをすべてレビュー対象(reviewable)の payload 属性に保存して再作成できるようにするということです。dependent: :destroy や dependent: :delete_all とタグ付けされたアソシエーションによって、この移行中にデータが失われるのではないかと懸念したため、この処理は数回書き直しを行いました。しかし、いくつかのテストを行った結果、安全に行えると考えています。
トピックに返信がない場合、または最初の投稿でない場合にこれを行うことは、低から中程度の労力で可能でしょう。投稿をキューに追加するロジックはすべて NewPostManager#enqueue メソッド内にありますので、これを別クラスに抽出して再利用する必要があります。承認後は常にトピックの末尾に保留中の投稿を追加するため、特定の位置に追加するにはもう少し作業が必要になります。
一方、返信があるトピックを保留状態に戻すことは、このアプローチではより複雑になるでしょう。レビュー対象としてシリアライズするのは少しやりすぎかもしれません。代わりに、トピックを一時的に非表示にするのはどうでしょうか?例えば、信頼されたユーザーによってスパムとしてフラグ付けされた場合に、すでにこの処理を行っています。
あるいは、常にフラグ付けして削除(または非表示)にするという方法もあり、それによってすべてが簡単になるかもしれません。ハードデリートして投稿をキューに追加する方が優れている理由を思いつきません。