Repository navigation
Conversation
|
Note CI : les 3 jobs |
StephaneTrebel
left a comment
There was a problem hiding this comment.
Le correctif du POST décrit dans #2950 est effectif : 32 tests de schémas et 6 sondes supplémentaires sur le contrat exact et le ZodValidationPipe passent, dont le rejet du CSV en 400. Une remarque non bloquante concerne la portée du test versionné ; la CI reste en échec sur la publication GHCR (denied: installation not allowed to Write organization package, run 40539505724), sans échec de compilation relevé dans ces jobs.
3acc902 to
9f5277e
Compare
9f5277e to
5bfc68f
Compare
StephaneTrebel
left a comment
There was a problem hiding this comment.
No findings. Le test consomme désormais le contrat exact : 32 tests ciblés et le lint passent, et retirer l’extension fait échouer ce test avant qu’il repasse après restauration ; la remarque précédente est corrigée. La CI reste rouge sur le push GHCR des trois images (denied: installation not allowed to Write organization package, run 40667240564), suivi par #2945/#2956, sans nouveau défaut fonctionnel relevé dans ce diff.
5bfc68f to
3cffc6e
Compare
c622ea0 to
39bfbaa
Compare
POST /api/v1/projects/:projectId/roles renvoyait 500 (Cannot convert 256,512 to a BigInt) sur un permissions CSV : le schéma source acceptait toute chaîne et la validation n'atteignait jamais le service. Correctif à la source, en deux volets : - permissionLevelSchema (réponses, wire string) porte un refine /^\d+$/ — tout CSV/non-entier est rejeté en 400 par le contrat, avant les services. - permissionLevelInputSchema (corps de requête) transforme la chaîne validée en BigInt via .transform(BigInt) : createProjectRole, patchProjectRoles, patchAdminRoles, createAdminToken et updateProject.everyonePerms délèguent la conversion au schéma. Les sept BigInt() manuels des services disparaissent (project-roles, admin-role, admin-token, project — legacy fastify et nestjs), avec le piège de falsiness 0n réglé par ??. Le default '0' du contrat createProjectRole préserve les corps sans permissions (l'ancien z.coerce.string() les convertissait en la chaîne littérale "undefined" — un 500 BigInt latent). Les réponses sérialisent des BigInt DB via toString(), le refine ne peut pas les casser. Specs : rejet CSV au niveau schéma + contrat, sortie bigint (256n), default 0n. Closes cloud-pi-native#2950 Co-authored-by: Automata <automata@shikanime.studio>
39bfbaa to
40b3bf5
Compare
Pourquoi
POST /api/v1/projects/:projectId/rolesrenvoie un 500 (Cannot convert 256,512 to a BigInt) quandpermissionsest un CSV — le schéma source acceptait toute chaîne et la validation n'atteignait jamais le service avantBigInt().Quoi
Correctif à la source, en deux volets :
permissionLevelSchema(réponses, wire = string) porte un refine/^\d+$/: tout non-entier est rejeté en 400 par le contrat, avant les services.permissionLevelInputSchema(corps de requête) = le même refine +.transform(BigInt): la conversion est déléguée au schéma.createProjectRole,patchProjectRoles,patchAdminRoles,createAdminTokenetupdateProject.everyonePermslivrent unbigintaux services — les septBigInt()manuels des services (project-roles, admin-role, admin-token, project — legacy fastify et nestjs) disparaissent, avec le piège de falsiness0nréglé par??.Le
default('0')du contratcreateProjectRolepréserve les corps sanspermissions(l'ancienz.coerce.string()les convertissait en la chaîne littérale"undefined"— un 500BigIntlatent en production). Les réponses sérialisent des BigInt DB via.toString()(toujours/^\d+$/) : le refine ne peut pas les casser.Vérification
pnpm --filter @cpn-console/shared test— 95/95, dont le spec : rejet CSV au niveau schéma et contrat, sortie256n, default0n.nest build(server-nestjs),tsc(server),vue-tsc(client) — 0 erreur.Closes #2950
Co-authored-by: Automata automata@shikanime.studio