Personalities
Admin source-of-truth catalog for INSPIRE / HUMOR / posts.
About this section: Personalities catalogList of every authoring identity in admin_panel.
Purpose
Personalities are the admin source of truth for who authors content on customer-serving surfaces. INSPIRE per-site defaults, HUMOR per-personality eligibility, and any future surface that picks an author identity all read this catalog. The PUBLIC plane mirrors the table via the publish projection.
Fields
- Personality Tag
- Stable internal/editorial identifier (lowercase snake_case). UNIQUE across the catalog. Other tables reference personalities by id, but the tag is the human-friendly handle for ops.
- Display Name
- Author-facing label rendered in pickers and on customer-serving surfaces. Added per decision 641 alongside the editor.
- Kind
- human / ai_persona / system. Pickers filter out system. Human personalities additionally pair with a backing account so the human can self-edit when that feature lands.
- Lifecycle
- draft / active / inactive / archived. Pickers default to active; archived rows survive for audit but disappear from pickers. The draft value was appended to the existing ENUM per decision 641.
- Backing Account ID
- Logical FK to PUBLIC.account.id of the synthetic backing account auto-provisioned per Phase 45 decision 568. Required for human kind; NULL for ai_persona and system unless the system has a long-lived service account.
- Avatar Asset ID
- FK to asset.id (set null on asset delete). Reuses the global asset library and the /admin/asset/... derivative serving path.
- Sort Order
- Display order in pickers; 0 = first.
- Bio
- Free-form admin-facing notes; some surfaces may project this to PUBLIC depending on per-personality publishing rules.
- Auto Elect Eligible
- Per Phase 43 decision 554 boolean kill switch governing the cohort lane auto-elect default. Edited via the existing personality_event flow; not on this form yet.
Example
A new AI persona is added in draft, copy is reviewed in the bio field, then lifecycle is flipped to active so it appears in pickers.
Consequences
- Renaming personality_tag after other rows reference it can confuse tooling even if the database accepts it.
- Deleting a personality that is set as a site's INSPIRE default is blocked by the UI; clear the site's INSPIRE default first.
- Archiving a personality removes it from pickers immediately; existing posts that already reference it are unaffected.
Deeper dive
Why personalities live in admin (decision 641)
AI personas are admin-curated content authored by editorial / operations and pushed to PUBLIC like any other admin-owned entity. Treating PUBLIC as the source of truth would force admins to write into the customer-serving plane during authoring, which violates admin/PUBLIC separation.
Putting them in admin_panel also lets us tie ownership and lifecycle into the standard admin tooling (audit trail, lifecycle pills, policy gates). The PUBLIC mirror is rebuilt by the publish projection on save.
How INSPIRE consumes this catalog
Each site picks one personality as its INSPIRE default via site_config.inspire_default_personality_id. That column is now a real FK with ON DELETE SET NULL.
When INSPIRE renders per-asset cards, the site's default personality is the front of the card; the per-asset score + quote come from asset_inspire_analysis.
How HUMOR consumes this catalog
HUMOR uses personality_section_eligibility(personality_id, section_code='HUMOR') to opt specific personalities into authoring HUMOR posts. Each humor post inherits the personality's display name and avatar.
Per decision 643, the humor access_package is per-site (code = HUMOR_<site_slug>). Eligibility is per-personality and platform-wide; per-site visibility flows through the site_section_enablement gate plus the site's humor package binding.
Personalities 10
Source of truth for INSPIRE personality defaults, HUMOR eligibility, and any other surface that picks an author identity.
| ID | Tag | Display Name | Kind | Lifecycle | Backing acct | Updated | |
|---|---|---|---|---|---|---|---|
| 7 | maya_wire | Maya Wire | ai_persona | active | - | 2026-05-02 15:43:40 | Edit |
| 8 | leo_lens | Leo Lens | ai_persona | active | - | 2026-05-02 15:43:40 | Edit |
| 9 | nina_north | Nina North | ai_persona | active | - | 2026-05-02 15:43:40 | Edit |
| 10 | oscar_byte | Oscar Byte | ai_persona | active | - | 2026-05-02 15:43:40 | Edit |
| 11 | piper_pop | Piper Pop | ai_persona | active | - | 2026-05-02 15:43:40 | Edit |
| 12 | quinn_query | Quinn Query | ai_persona | active | - | 2026-05-02 15:43:40 | Edit |
| 13 | rhea_roast | Rhea Roast | ai_persona | active | - | 2026-05-02 15:43:40 | Edit |
| 14 | sami_signal | Sami Signal | ai_persona | active | - | 2026-05-02 15:43:40 | Edit |
| 15 | tessa_tablet | Tessa Tablet | ai_persona | active | - | 2026-05-02 15:43:40 | Edit |
| 16 | zane_zoom | Zane Zoom | ai_persona | active | - | 2026-05-02 15:43:40 | Edit |