app.ownership_transfers
TableRow level security on
An Owner's offer to hand the org to another member (Section 14.7). The member accepts with step-up (a second factor) within 7 days; the old Owner then becomes an Admin, or leaves if they chose to, and the org keeps an Owner at every step (invariant 4). Written only by the transfer RPCs; every change is audited.
Primary key: id
| Column | Type | Nullable | Description |
|---|---|---|---|
| id | uuid | No | Primary key, UUID v7. |
| org_id | uuid | No | Owning org. A row never moves to another org.References app.organizations.id |
| from_person_id | uuid | No | Owner who offered the org.References app.people.id |
| to_person_id | uuid | No | Member the org is offered to; becomes an Owner on accepting.References app.people.id |
| previous_owner_outcome | text | No | What happens to the Owner who offered on acceptance: admin (becomes an Admin) or leave (their membership ends). |
| offered_at | timestamp with time zone | No | When the offer was made. |
| expires_at | timestamp with time zone | No | When an unanswered offer lapses: midnight on the org's calendar after the seventh whole day after it was made. |
| accepted_at | timestamp with time zone | Yes | When the member accepted and became an Owner. |
| declined_at | timestamp with time zone | Yes | When the member declined. |
| canceled_at | timestamp with time zone | Yes | When an Owner withdrew the offer. |
| canceled_by | uuid | Yes | Owner who withdrew it.References app.people.id |
| expired_at | timestamp with time zone | Yes | When the lifecycle job found the offer unanswered past its end. |
| created_at | timestamp with time zone | No | When the row was inserted. Set by the database. |
| created_by | uuid | Yes | Person who inserted the row, or null for a platform process. Set by the database.References app.people.id |
| updated_at | timestamp with time zone | No | When the row last changed. Set by the database. |
| updated_by | uuid | Yes | Person who last changed the row, or null for a platform process. Set by the database.References app.people.id |
| deleted_at | timestamp with time zone | Yes | Soft delete time. A row with deleted_at set is ignored by every access helper. |