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
| Statut | Signification |
|---|---|
Draft | En cours de rédaction, pas encore prête pour revue |
Under Review | Soumise à la revue communauté/mainteneurs |
Accepted | Validée, score ≥ 25/35 sur 7 critères, l'implémentation peut commencer |
Rejected | Refusée — la décision et la raison sont consignées dans le document |
Superseded by #MMMM | Remplacée par une autre RFC plus récente |
Workflow
- Identifier un changement candidat (cf. critères §2 du processus).
- Créer un nouveau fichier
NNNN-slug.mdà partir de0000-template.md. - 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.
- Soumettre en PR avec statut
Under Review. - Revoir : un mainteneur framework + un mainteneur consommateur. Score sur 7 critères, ≥ 25/35 pour passer en
Accepted. - Implémenter en suivant TDD (test-first), en respectant les quality gates de la constitution.
- 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ère | Description |
|---|---|
| Généralité | Sert plusieurs consommateurs ou anticipe leurs besoins ? |
| Stabilité API | Non-breaking par ajout pur ? Avec feature flag ? Breaking ? |
| Performance | Overhead mesuré sur le hot path |
| Sécurité | Régression possible sans mitigation, ou hardening net ? |
| Complexité d'implémentation | Lignes, refacto, unsafe requis ? |
| Charge de maintenance | Dépendances externes maintenues, cas edge ? |
| Documentation | Rustdoc, 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
| # | Titre | Statut | Auteur | Date |
|---|---|---|---|---|
| 0001 | Fediverse — FediverseConfig + with_fediverse() builder | Accepted (28/35) | EBO | 2026-05-09 |
| 0002 | Fediverse — WebFinger + Acteur + NodeInfo (couche découverte) | Accepted (29/35) | EBO | 2026-05-09 |
| 0003 | Fediverse — Stockage identités distantes + résolution @user@domain | Accepted (26/35) | EBO | 2026-05-09 |
| 0004 | Fediverse — Modèle de confiance (allowlist / blocklist + scope) | Accepted (27/35) | EBO | 2026-05-09 |
| 0005 | Fediverse — Stockage des clés d'acteur RSA chiffrées | Accepted (26/35) | EBO | 2026-05-09 |
| 0006 | Fediverse — Flow d'authentification AP-native (couche service) | Accepted (26/35) | EBO | 2026-05-09 |
| 0007 | Fediverse — Extension JWT Claims (identity_kind, remote_id) | Accepted (27/35) | EBO | 2026-05-09 |
| 0008 | Fediverse — Abstraction Identity + colonnes sibling FK | Accepted (26/35) | EBO | 2026-05-09 |
| 0009 | Fediverse — Équipes / partages cross-instance + invitations | Accepted (26/35) | EBO | 2026-05-09 |
| 0010 | Fediverse — Signaux lifecycle + retry/backoff outbound | Accepted (26/35) | EBO | 2026-05-09 |
| 0011 | Fediverse — File outbound + worker (slice Phase 2 minimal) | Accepted (26/35) | EBO | 2026-05-09 |
| 0012 | Fediverse — Route HTTP /inbox lifecycle (slice routes 1/N) | Accepted (26/35) | EBO | 2026-05-10 |
| 0013 | Fediverse — Routes HTTP du flow d'auth AP-native (slice routes 2/N) | Accepted (26/35) | EBO | 2026-05-10 |
| 0014 | Fediverse — Routes HTTP des invitations cross-instance (slice routes 3/N) | Accepted (26/35) | EBO | 2026-05-10 |
| 0015 | Fediverse — Signatures HTTP draft-cavage (RSA-SHA256) | Accepted (27/35) | EBO | 2026-05-10 |
| 0016 | Fediverse — Élargissement SignatureVerifier + HttpSignedDelivery | Accepted (27/35) | EBO | 2026-05-10 |
| 0017 | Fediverse — Auto-résolution PEM public dans HttpSigVerifier | Accepted (27/35) | EBO | 2026-05-10 |
| 0018 | Fediverse — Clôture dette technique (PK relax + JWT blacklist par remote) | Accepted (26/35) | EBO | 2026-05-10 |
| 0019 | Fediverse — Observabilité du worker outbound (tracing counters) | Accepted (27/35) | EBO | 2026-05-10 |
| 0020 | Fediverse — Tests d'interopérabilité wiremock (signed delivery round-trip) | Accepted (26/35) | EBO | 2026-05-10 |
| 0021 | Fediverse UI — Admin foundations (settings + trust list) | Accepted (26/35) | EBO | 2026-05-10 |
| 0022 | Smoke tests anti-régression (middleware AuthConfig + pagination admin) | Accepted (26/35) | EBO | 2026-05-10 |
| 0023 | Fediverse UI — Parcours utilisateur d'authentification fédérée (Slice B) | Accepted (26/35) | EBO | 2026-05-10 |
| 0024 | Fediverse UI — Invitations & ops admin (Slice C, 6 écrans) | Accepted (26/35) | EBO | 2026-05-10 |
| 0025 | Fediverse — Back-channel Accept(AuthRequest) (RFC 0006 Phase 3) | Accepted (livré + 5 tests E2E verts) | EBO | 2026-05-11 |
| 0026-0028 | réservés pour travaux framework en cours (cf. backlog interne) | — | — | — |
| 0029 | Fediverse — RemoteResourceShareService (partages cross-instance de ressources génériques) | Accepted (33/35, livré + 11 tests E2E verts) | EBO (origine gitrust) | 2026-05-15 |
| 0030 | Fediverse — RemotePersonalAccessTokenService (PAT pour identités remote) | Accepted (34/35, livré + 20 tests E2E verts) | EBO (origine gitrust) | 2026-05-15 |
| 0031 | Auth — fallback AuthConfig::from_env() sur la branche optional de AuthService | Accepted (implémenté 2026-05-16) | EBO (gitrust) | 2026-05-16 |
| 0032 | Fediverse — on_delete_actor sur FediverseEventObserver | Implemented | EBO (gitrust) | 2026-05-17 |
| 0033 | Fediverse — unifier apply_delete_actor* derrière DeleteActorHooks | Implemented | EBO | 2026-05-17 |
| 0034 | Workspace — cleanup rustfmt après migration édition 2024 | Implemented | EBO (gitrust) | 2026-05-18 |
| 0035 | OAuth — envoyer code_verifier PKCE à l'échange (GitHub & Discord) | Implemented (2026-06-18) | PasterMan | 2026-06-18 |
| 0036 | Auth — newtype Username (charset GitHub-like, audit M-1) | Implemented | EBO (origine audit Gitrust / Rustwarden 1.0.1) | 2026-09-18 |
| 0037 | Auth — persister last_used_step TOTP (anti-rejeu multi-instance, audit M-7) | Implemented | EBO (origine audit Gitrust / patch 1.0.1) | 2026-09-18 |
| 0038 | Auth — revalidation e-mail à UserService::update_profile | Superseded by 0041 (2026-09-19 ; était Accepted 2026-09-18) | EBO (origine audit Gitrust / patch 1.0.1) | 2026-09-18 |
| 0039 | HTTP — SecurityHeadersConfig (CSP / COOP / CORP additifs) | Implemented (phase 2, sans unsafe-eval) | EBO (origine audit Gitrust / patch 1.0.1) | 2026-09-18 |
| 0040 | Auth — authenticate_user honore validation_email_required | Implemented | EBO (origine audit Gitrust / patch 1.0.1) | 2026-09-18 |
| 0041 | Auth — changement d'e-mail en deux temps (pending_email_changes) — remplace la 0038 | Implemented | EBO (origine audit Gitrust / suite de la RFC 0038) | 2026-09-19 |
| 0042 | Auth — 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 train1.1.0n'é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 dansdocs/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 parAuthService/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 :
| # | Slug | Phase plan |
|---|---|---|
| 0001 | fediverse-config-and-builder | 1 |
| 0002 | webfinger-actor-nodeinfo | 1 |
| 0003 | remote-identity-store | 1 |
| 0004 | fediverse-trust-model | 1 |
| 0005 | actor-key-storage | 1 |
| 0006 | ap-native-auth-flow | 2 |
| 0007 | jwt-claims-identity-kind | 2 |
| 0008 | identity-abstraction | 3 |
| 0009 | team-resource-cross-instance | 3 |
| 0010 | fediverse-lifecycle-signals | 4 |
| 0011 | fediverse-outbound-worker | 2-4 |
Chacune doit être rédigée et acceptée avant le démarrage du chantier correspondant.
GitRust