Content fields are data, not code
Because content_type_fields and content_items.fields_json are schemaless, adding a field to an existing type never touches existing records.
Content
Content types, their fields, and their items all live as rows in content_types, content_type_fields, and content_items — nothing is a hardcoded model in the app. fields_json on an item is just JSON; the field-definition rows are only used to render admin forms and validate input, not to constrain what's already stored.
The practical effect: adding a new field to a type that already has published items is a pure insert into content_type_fields. Existing items don't need a migration or a backfill — they just don't have a value for that key until someone fills it in, and the admin form treats it as empty.