Follow what the live server does with tenants and domains

A run on the production server with throwaway tenants, a role, lists and a
domain, all removed, found three things the source reading had not:

- Something in a tenant has to be on a domain in that tenant (a list in a
  tenant on an unassigned domain is invalidForeignKey), while something in
  no tenant may be on a tenant's domain. The account panel's tenant choice
  offered every tenant; it offers only the domain's now, and a new account
  starts in the tenant of the domain it is made on. The domain list reads
  memberTenantId for it.
- A domain created in a tenant puts its DKIM keys there too, and they keep
  the tenant from being deleted. They are counted with the rest, so Delete
  is not offered while any remain.
- Stalwart lets a domain leave a tenant while the tenant still has accounts
  on it, stranding them. The panel asks first and refuses while any are
  there.

The refusal to delete a tenant that holds anything was confirmed, as were
tenant create, quota pointers, logo and rename. The mock follows the domain
rule, filters DKIM keys by tenant, and KNOWN-ISSUES records the run.

The non-Enterprise notice is now just "Tenants are a Stalwart Enterprise
feature." Two sentences were reworded and one plural added, in all nine
catalogues, and the old sentences are gone.
This commit is contained in:
2026-09-15 09:37:00 -07:00
parent ce5eb04c2d
commit 40df0f658b
21 changed files with 211 additions and 48 deletions
+4 -3
View File
@@ -258,7 +258,7 @@ export const catalog: Catalog = {
"The server did not say whether the role was created.": "Le serveur na pas indiqué si le rôle a été créé.",
"No tenant": "Aucun locataire",
"You can't move your own account into a tenant.": "Vous ne pouvez pas déplacer votre propre compte dans un locataire.",
"An account in a tenant is limited by the tenant's role and counts towards its limits, and Administrator means administrator of that tenant.": "Un compte dans un locataire est limité par le rôle du locataire et compte dans ses limites, et Administrateur signifie administrateur de ce locataire.",
"An account can be in the tenant its domain is in. In a tenant it is limited by the tenant's role and counts towards its limits, and Administrator means administrator of that tenant.": "Un compte peut être dans le locataire où se trouve son domaine. Dans un locataire, il est limité par le rôle du locataire et compte dans ses limites, et Administrateur signifie administrateur de ce locataire.",
"Tenants": "Locataires",
"Storage in GB": "Stockage en Go",
"Default tenant roles": "Rôles de locataire par défaut",
@@ -281,13 +281,13 @@ export const catalog: Catalog = {
"Take {domain} out of the tenant": "Retirer {domain} du locataire",
"No domains in this tenant yet": "Aucun domaine dans ce locataire pour linstant",
"Domain to add": "Domaine à ajouter",
"Only domains in no tenant can be added. The accounts already on a domain stay where they are; move each from its own panel.": "Seuls les domaines hors de tout locataire peuvent être ajoutés. Les comptes déjà sur un domaine restent où ils sont ; déplacez chacun depuis son propre panneau.",
"Only domains in no tenant can be added, and the accounts already on one stay where they are. A domain comes out only once none of this tenant's accounts are on it.": "Seuls les domaines hors de tout locataire peuvent être ajoutés, et les comptes déjà dessus restent où ils sont. Un domaine ne peut être retiré quune fois quaucun compte de ce locataire ny est plus.",
"An empty tenant can be deleted.": "Un locataire vide peut être supprimé.",
"Delete tenant…": "Supprimer le locataire…",
"Still holds {things}. Move them out first.": "Contient encore {things}. Déplacez-les dabord.",
"Delete tenant": "Supprimer le locataire",
"Separate organisations on one server, each with its own people, domains and limits.": "Des organisations distinctes sur un même serveur, chacune avec ses personnes, ses domaines et ses limites.",
"Tenants are a Stalwart Enterprise feature. This server does not report Enterprise, so anyone inside a tenant has only an ordinary user's permissions.": "Les locataires sont une fonctionnalité de Stalwart Enterprise. Ce serveur ne se déclare pas Enterprise : toute personne dans un locataire na donc que les autorisations dun utilisateur ordinaire.",
"Tenants are a Stalwart Enterprise feature.": "Les locataires sont une fonctionnalité de Stalwart Enterprise.",
"Search tenants": "Rechercher des locataires",
"No tenants match": "Aucun locataire ne correspond",
"No tenants yet": "Aucun locataire pour linstant",
@@ -1694,6 +1694,7 @@ export const catalog: Catalog = {
"Grants {n} permissions": { one: "Accorde {n} autorisation", other: "Accorde {n} autorisations" },
"{n} roles": { one: "{n} rôle", other: "{n} rôles" },
"{n} tenants": { one: "{n} locataire", other: "{n} locataires" },
"{n} accounts in this tenant are still on {domain}. Move them or delete them before taking the domain out.": { one: "{n} compte de ce locataire est encore sur {domain}. Déplacez-le ou supprimez-le avant de retirer le domaine.", other: "{n} comptes de ce locataire sont encore sur {domain}. Déplacez-les ou supprimez-les avant de retirer le domaine." },
"{n} DKIM keys": { one: "{n} clé DKIM", other: "{n} clés DKIM" },
"{n} other items": { one: "{n} autre élément", other: "{n} autres éléments" },
// ── Administration ────────────────────────────────────────────────