commentables is discussion until you say otherwise. String entries stay valid. Use the array form when a model should behave as reviews or Q&A.
What each mode does
Replies stay
type = comment. Ratings apply only to top-level posts on a reviews thread. A second rating from the same author (or guest email) is rejected.
List responses include a thread object so Livewire, React, and Vue can show stars, averages, and accept controls without guessing:
duplicate_detection is an AI flag, not a mode. See Bring-your-own-key AI.
Ratings
On a reviews thread, the composer shows five stars. Sendrating (1-5) with POST {type}/{id}/comments. Livewire uses newCommentState.rating.
List responses expose thread.average_rating and thread.rating_count. Livewire shows the same via the thread-stats partial.
Accepted answers
On a Q&A thread, the page author (badges.author_key, default user_id) or a moderator can accept a reply. The accepted reply floats to the top of that question. Unaccept clears it.
cannot_accept_parent). Accepting on a non-Q&A thread returns accepted_answers_disabled.
Livewire, React, and Vue show Accept answer when comment.can.accept is true.
Schema
Pro migrations addtype, rating, accepted_at, and metadata on comments, plus commentify_embeddings. The MIT package does not know about those columns. Pro owns the schema and the Livewire UI for modes. The rest of the 1.1 tables are on Upgrade to Commentify Pro.

