TL;DR
Attempting to DELETE the last _owner property entry on any entity returns HTTP 403 with message "Can't delete last _owner". This is a useful platform guarantee — entities can never become ownerless — but isn't surfaced in the docs.
Reproduction (probed 2026-05-17 against api.entu.app/polyphony)
DELETE /polyphony/property/<id of last _owner property>
→ HTTP 403
{
"error": true,
"status": 403,
"statusText": "Can't delete last _owner",
"message": "Can't delete last _owner"
}
Applies to every entity type (tested with a generic _type=entity probe). Deleting a non-last _owner succeeds normally.
Implication
Downstream apps can rely on this guarantee — they don't need to build their own "minimum-owner" enforcement at the platform layer. App-level invariants (e.g., "at least one owner must also be a member") can layer on top.
For ownership transfer: add the new owner first, then remove the old one (standard pattern enabled by this rule).
Suggested doc note
At https://www.entu.ee/api/properties/ in the property-deletion rules table, add an explicit row for "_owner (last one): cannot be deleted — at least one _owner must remain". (There's already an analogous row hinted at in some sections; making it canonical helps.)
Related: polyphony case study E1 — https://github.com/entu/research/blob/main/docs/case-studies/2026-05-polyphony-on-entu.md
TL;DR
Attempting to DELETE the last
_ownerproperty entry on any entity returnsHTTP 403with message"Can't delete last _owner". This is a useful platform guarantee — entities can never become ownerless — but isn't surfaced in the docs.Reproduction (probed 2026-05-17 against api.entu.app/polyphony)
Applies to every entity type (tested with a generic
_type=entityprobe). Deleting a non-last_ownersucceeds normally.Implication
Downstream apps can rely on this guarantee — they don't need to build their own "minimum-owner" enforcement at the platform layer. App-level invariants (e.g., "at least one owner must also be a member") can layer on top.
For ownership transfer: add the new owner first, then remove the old one (standard pattern enabled by this rule).
Suggested doc note
At https://www.entu.ee/api/properties/ in the property-deletion rules table, add an explicit row for "
_owner(last one): cannot be deleted — at least one_ownermust remain". (There's already an analogous row hinted at in some sections; making it canonical helps.)Related: polyphony case study E1 — https://github.com/entu/research/blob/main/docs/case-studies/2026-05-polyphony-on-entu.md