README.md 12780 octets

RFCs Rustwarden

Ce répertoire contient les Request For Comments (RFC) du framework Rustwarden, conformément au processus d'évolution RUSTWARDEN_EVOLUTION_PROCESS.md.

À quoi sert une RFC

Une RFC est un document formalisé qui propose un changement structurant : nouvelle API publique, nouveau service, modification de schéma DB, changement de format sérialisé, nouvelle dépendance Cargo, ou changement de politique de sécurité. Elle force la formalisation des alternatives, des tests, et de la stratégie de migration avant de commencer à coder.

Voir la liste exhaustive des cas qui exigent une RFC dans RUSTWARDEN_EVOLUTION_PROCESS.md §2.

Convention de nommage

docs/rfcs/NNNN-slug-en-kebab-case.md
  • NNNN : numéro incrémental sur 4 chiffres (0001, 0002, …).
  • slug : identifiant court, kebab-case, descriptif (ex. fediverse-config-and-builder).

Le numéro est attribué à la création de la RFC (pas à son acceptation). En cas de RFC rejetée, son numéro reste réservé — on n'en réutilise jamais.

Cycle de vie d'une RFC

StatutSignification
DraftEn cours de rédaction, pas encore prête pour revue
Under ReviewSoumise à la revue communauté/mainteneurs
AcceptedValidée, score ≥ 25/35 sur 7 critères, l'implémentation peut commencer
RejectedRefusée — la décision et la raison sont consignées dans le document
Superseded by #MMMMRemplacée par une autre RFC plus récente

Workflow

  1. Identifier un changement candidat (cf. critères §2 du processus).
  2. Créer un nouveau fichier NNNN-slug.md à partir de 0000-template.md.
  3. Rédiger : Summary, Motivation, Non-goals, API proposée, Analyse de compatibilité, ≥ 3 alternatives (incluant "ne rien faire"), Testing plan, Migration guide, Open questions, Tracking issue.
  4. Soumettre en PR avec statut Under Review.
  5. Revoir : un mainteneur framework + un mainteneur consommateur. Score sur 7 critères, ≥ 25/35 pour passer en Accepted.
  6. Implémenter en suivant TDD (test-first), en respectant les quality gates de la constitution.
  7. Merge après quality gates verts (build/test/clippy/doc/audit).

Critères d'évaluation (35 points max)

Chaque critère noté de 1 (mauvais) à 5 (excellent) :

CritèreDescription
GénéralitéSert plusieurs consommateurs ou anticipe leurs besoins ?
Stabilité APINon-breaking par ajout pur ? Avec feature flag ? Breaking ?
PerformanceOverhead mesuré sur le hot path
SécuritéRégression possible sans mitigation, ou hardening net ?
Complexité d'implémentationLignes, refacto, unsafe requis ?
Charge de maintenanceDépendances externes maintenues, cas edge ?
DocumentationRustdoc, exemple, CHANGELOG, guide migration ?

Score minimum 25/35 pour passer en Accepted. Voir grille détaillée dans RUSTWARDEN_EVOLUTION_PROCESS.md §4.

Index des RFCs

#TitreStatutAuteurDate
0001Fediverse — FediverseConfig + with_fediverse() builderAccepted (28/35)EBO2026-05-09
0002Fediverse — WebFinger + Acteur + NodeInfo (couche découverte)Accepted (29/35)EBO2026-05-09
0003Fediverse — Stockage identités distantes + résolution @user@domainAccepted (26/35)EBO2026-05-09
0004Fediverse — Modèle de confiance (allowlist / blocklist + scope)Accepted (27/35)EBO2026-05-09
0005Fediverse — Stockage des clés d'acteur RSA chiffréesAccepted (26/35)EBO2026-05-09
0006Fediverse — Flow d'authentification AP-native (couche service)Accepted (26/35)EBO2026-05-09
0007Fediverse — Extension JWT Claims (identity_kind, remote_id)Accepted (27/35)EBO2026-05-09
0008Fediverse — Abstraction Identity + colonnes sibling FKAccepted (26/35)EBO2026-05-09
0009Fediverse — Équipes / partages cross-instance + invitationsAccepted (26/35)EBO2026-05-09
0010Fediverse — Signaux lifecycle + retry/backoff outboundAccepted (26/35)EBO2026-05-09
0011Fediverse — File outbound + worker (slice Phase 2 minimal)Accepted (26/35)EBO2026-05-09
0012Fediverse — Route HTTP /inbox lifecycle (slice routes 1/N)Accepted (26/35)EBO2026-05-10
0013Fediverse — Routes HTTP du flow d'auth AP-native (slice routes 2/N)Accepted (26/35)EBO2026-05-10
0014Fediverse — Routes HTTP des invitations cross-instance (slice routes 3/N)Accepted (26/35)EBO2026-05-10
0015Fediverse — Signatures HTTP draft-cavage (RSA-SHA256)Accepted (27/35)EBO2026-05-10
0016Fediverse — Élargissement SignatureVerifier + HttpSignedDeliveryAccepted (27/35)EBO2026-05-10
0017Fediverse — Auto-résolution PEM public dans HttpSigVerifierAccepted (27/35)EBO2026-05-10
0018Fediverse — Clôture dette technique (PK relax + JWT blacklist par remote)Accepted (26/35)EBO2026-05-10
0019Fediverse — Observabilité du worker outbound (tracing counters)Accepted (27/35)EBO2026-05-10
0020Fediverse — Tests d'interopérabilité wiremock (signed delivery round-trip)Accepted (26/35)EBO2026-05-10
0021Fediverse UI — Admin foundations (settings + trust list)Accepted (26/35)EBO2026-05-10
0022Smoke tests anti-régression (middleware AuthConfig + pagination admin)Accepted (26/35)EBO2026-05-10
0023Fediverse UI — Parcours utilisateur d'authentification fédérée (Slice B)Accepted (26/35)EBO2026-05-10
0024Fediverse UI — Invitations & ops admin (Slice C, 6 écrans)Accepted (26/35)EBO2026-05-10
0025Fediverse — Back-channel Accept(AuthRequest) (RFC 0006 Phase 3)Accepted (livré + 5 tests E2E verts)EBO2026-05-11
0026-0028réservés pour travaux framework en cours (cf. backlog interne)———
0029Fediverse — RemoteResourceShareService (partages cross-instance de ressources génériques)Accepted (33/35, livré + 11 tests E2E verts)EBO (origine gitrust)2026-05-15
0030Fediverse — RemotePersonalAccessTokenService (PAT pour identités remote)Accepted (34/35, livré + 20 tests E2E verts)EBO (origine gitrust)2026-05-15
0031Auth — fallback AuthConfig::from_env() sur la branche optional de AuthServiceAccepted (implémenté 2026-05-16)EBO (gitrust)2026-05-16
0032Fediverse — on_delete_actor sur FediverseEventObserverImplementedEBO (gitrust)2026-05-17
0033Fediverse — unifier apply_delete_actor* derrière DeleteActorHooksImplementedEBO2026-05-17
0034Workspace — cleanup rustfmt après migration édition 2024ImplementedEBO (gitrust)2026-05-18
0035OAuth — envoyer code_verifier PKCE à l'échange (GitHub & Discord)Implemented (2026-06-18)PasterMan2026-06-18
0036Auth — newtype Username (charset GitHub-like, audit M-1)ImplementedEBO (origine audit Gitrust / Rustwarden 1.0.1)2026-09-18
0037Auth — persister last_used_step TOTP (anti-rejeu multi-instance, audit M-7)ImplementedEBO (origine audit Gitrust / patch 1.0.1)2026-09-18
0038Auth — revalidation e-mail à UserService::update_profileSuperseded by 0041 (2026-09-19 ; était Accepted 2026-09-18)EBO (origine audit Gitrust / patch 1.0.1)2026-09-18
0039HTTP — SecurityHeadersConfig (CSP / COOP / CORP additifs)Implemented (phase 2, sans unsafe-eval)EBO (origine audit Gitrust / patch 1.0.1)2026-09-18
0040Auth — authenticate_user honore validation_email_requiredImplementedEBO (origine audit Gitrust / patch 1.0.1)2026-09-18
0041Auth — changement d'e-mail en deux temps (pending_email_changes) — remplace la 0038ImplementedEBO (origine audit Gitrust / suite de la RFC 0038)2026-09-19
0042Auth — AuthService / AdminService reçoivent l'AuthConfig résolue (overrides .login_path() / .auth_failure_mode() / .headless() ignorés par les middlewares de préfixe)Implemented (1.2.0, 2026-10-02 ; D1 = Alternative A, rupture de défaut headless assumée)EBO (origine BotPlace)2026-10-02

À mesure que les RFCs sont créées, elles doivent apparaître dans cette table avec leur statut courant.

Note sur la RFC 0038 : sa v1 (écriture immédiate de users.email + un-verify) n'a jamais été diffusée — le train 1.1.0 n'était pas coupé au moment de sa substitution. La RFC 0041 la remplace dans le même train : les consommateurs ne verront jamais le comportement v1. Le document 0038 est conservé intact comme trace de décision.

Note sur les RFCs 0029-0030 : ces deux RFCs trouvent leur origine côté gitrust (premier consommateur), tracking dans gitrust/, évaluation détaillée dans docs/plans/2026-05-15-rfcs-gitrust-evaluation.md. Une 3ᵉ RFC initialement proposée (gitrust-0003 RemoteTeamMembershipService) a été rejetée car la capacité est déjà livrée par les RFCs 0008/0009.

Note sur la remontée BotPlace du 2026-10-02 (docs/UPSTREAM_RUSTWARDEN.md, § « Workarounds / besoins upstream ») : deux besoins remontés. Le premier (CSP par défaut sans 'unsafe-eval' vs build Alpine standard) ne donne pas lieu à RFC : le chemin est déjà fourni par la RFC 0039 (DEFAULT_CONTENT_SECURITY_POLICY + RustwardenBuilder::security_headers), la sortie attendue est la migration consommateur vers @alpinejs/csp. Le second (overrides du builder non honorés par AuthService / AdminService) est un défaut générique du framework → RFC 0042.

RFCs liées au plan fediverse

Le plan d'intégration de la fédération d'identité (docs/plans/2026-05-09-fediverse-identity-federation.md §17) prévoit 11 RFCs :

#SlugPhase plan
0001fediverse-config-and-builder1
0002webfinger-actor-nodeinfo1
0003remote-identity-store1
0004fediverse-trust-model1
0005actor-key-storage1
0006ap-native-auth-flow2
0007jwt-claims-identity-kind2
0008identity-abstraction3
0009team-resource-cross-instance3
0010fediverse-lifecycle-signals4
0011fediverse-outbound-worker2-4

Chacune doit être rédigée et acceptée avant le démarrage du chantier correspondant.