database.policy.write_proposed
Markdownv0.3.0
Appliquer à une table la politique que la plateforme propose, éprouvée avant.
- API
POST /v1/projects/{projectId}/database/policies/proposed - MCP
database_policy_write_proposed - CLI
bastide database policy write_proposed
Enchaîne database.policy.list et database.policy.write : lit la proposition engendrée pour la table, la pose, l'éprouve sur quatre personas et ne la valide qu'après confirmation si une ligne se voit sans être possédée. Une table fermée n'a pas de prédicat : rien n'est écrit.
| Propriété | Valeur |
|---|---|
| Niveau | project |
| Rang minimal | maintainer |
| Rôle transversal | — |
| Portées | db:write, db:read |
| Compte de service | ne la mène pas : cette écriture ne lui est pas ouverte |
| Réversibilité | E — réversible avec effort : validation d'une personne avant l'appel, puis cinq minutes pour tout défaire d'un seul appel |
| Idempotence | une clé d'idempotence est acceptée : le rejeu rend la première réponse |
| Limites de débit, par jeton | 600 appels par 60 secondes (general), et 60 appels par 60 secondes (sensitive) |
API
POST /v1/projects/{projectId}/database/policies/proposed — succès en 200.
| Paramètre | Où | Type | Requis | Description |
|---|---|---|---|---|
projectId | chemin | texte, motif ^prj_[0-9A-HJKMNP-TV-Z]{26}$ | oui | Identifiant de projet |
Idempotency-Key | en-tête | texte, de 8 à 128 caractères | non | Clé d'idempotence. Un rejeu portant la même clé retourne le résultat initial sans nouvel effet de bord, et la réponse porte alors « Idempotency-Replayed: true ». Équivaut au champ « idempotencyKey » du corps ; les deux à la fois ne sont acceptés que s'ils sont identiques. |
table | corps | texte, motif ^[a-z_][a-z0-9_]{0,62}$ | oui | Identifiant SQL en minuscules |
confirmationNonce | corps | texte | non | |
idempotencyKey | corps | texte, de 8 à 128 caractères | non | Clé d'idempotence, obligatoire. Un rejeu portant la même clé rend le résultat initial, sans nouvel effet de bord. |
La réponse :
| Champ | Type | Description |
|---|---|---|
proposal | objet | La proposition lue, telle que database.policy.list la rend |
written | objet (applied, rewrite, verifications, report, indexCreated, undoToken), ou nul | Ce que database.policy.write a rendu ; nul pour une table fermée |
undoToken | nul | Aucun jeton : une politique se remplace par un nouvel appel, qui retire la précédente avant de poser la sienne. |
En-têtes de la réponse : RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset, RateLimit-Policy, Idempotency-Replayed.
Autres réponses : 400, 401, 403, 404, 409, 429, 500, 503 — communes à toute opération.
Ligne de commande
bastide database policy write_proposed --project-id <valeur> --table <valeur>
| Option | Type | Requise | Défaut | Description |
|---|---|---|---|---|
--project-id | texte | oui | — | Identifiant de projet |
--table | texte | oui | — | Identifiant SQL en minuscules |
--confirmation-nonce | texte | non | — | |
--idempotency-key | texte | non | — | Clé d'idempotence, obligatoire. Un rejeu portant la même clé rend le résultat initial, sans nouvel effet de bord. |
La commande demande une confirmation avant d'agir, sauf avec « --yes ».
MCP
Outil database_policy_write_proposed.
| Propriété | Valeur |
|---|---|
| Lecture seule | non |
| Destructif | oui |
| Idempotent | oui |
| Monde ouvert | non |
| Confirmation en deux temps | non |
| Budget de jetons du résultat | 2500 |
Erreurs
| Code | Surface | Cause |
|---|---|---|
confirmation_requise | les deux | L'opération est irréversible : elle se confirme en deux temps, par le nonce que ce refus porte. |
nonce_expire | les deux | Le nonce de confirmation a plus de cinq minutes. |
nonce_invalide | les deux | Le nonce de confirmation n'a pas été émis par ce serveur pour cet appel, ou il a déjà servi. |
validation_humaine_requise | les deux | Une opération irréversible se valide par une personne, pas par un jeton de compte de service. |
backend_indisponible | les deux | La base de données du projet n'est pas joignable par la plateforme ; le message nomme la cause. |
idempotency_key_conflict | API | Deux clés d'idempotence différentes ont été présentées, dans le corps et dans l'en-tête. |
S'y ajoutent les refus communs à toute opération — entrée invalide, authentification, autorisation, cible introuvable, conflit, limite de débit, indisponibilité — que le catalogue des erreurs décrit.
Exemples
Poser la politique proposée pour une table, éprouvée avant application :
{
"projectId": "prj_01JQ8ZK4M7NP2RSTVWXYZ34567",
"table": "commandes",
"idempotencyKey": "politique-proposee-commandes-2026-10-13"
}