docs: roadmap à jour, archive TODO.fr, session DDD + droits yavsc

TODO.fr.md (2016-2017) archivé en TODO.fr.md.archive.
ROADMAP.md reformule les jalons en s'appuyant sur l'Architecture
et la session DDD du 14 juin 2026.
doc/Architecture.md: section 'Droits de yavsc' ajoutée (admin, groupes, user yavsc).
doc/ddd-exploration-2026-06-14.md: première session d'Event Storming narratif.
This commit is contained in:
Paul Schneider 2026-06-14 04:55:50 +01:00
commit 6dbdc2d408
4 changed files with 486 additions and 0 deletions

212
ROADMAP.md Normal file
View file

@ -0,0 +1,212 @@
# Yavsc — Roadmap
> **Statut** : document vivant. Reflète l'état du repo et les décisions en cours.
>
> L'ancienne liste en français (jalons 15, 20162017) est archivée dans
> [`TODO.fr.md.archive`](./TODO.fr.md.archive) — tout ce qui en a été réalisé
> ou reformulé est ici.
---
## 🧭 Vision
Yavsc est une plateforme de **mise en relation client / fournisseur / coordinateur**,
spécialisable par activité, avec une **origine musicale**.
Origine du nom : *Yet Another Very Small Company*.
Le domaine est modélisé en **DDD** (cf. [`doc/ddd-exploration-2026-06-14.md`](./doc/ddd-exploration-2026-06-14.md))
et l'architecture globale est décrite dans [`doc/Architecture.md`](./doc/Architecture.md).
Trois principes non négociables traversent tous les jalons :
1. **Devis, pas facturation directe.** Le flux contractuel prime sur le flux
d'encaissement ; l'argent arrive seulement après accord signé.
2. **Open by design.** Le code des livrables et la plateforme sont sous licence
libre ; les workflows métier aboutissent à des livrables sous licence libre.
3. **Pas de MVP borné.** Le périmètre est complet dès la conception — les
jalons ne sont pas une découpe de fonctionnalités, mais une **séquence de
stabilisation**.
---
## 🏗️ État de l'art (juin 2026)
### Périmètre technique
| Brique | Module | État |
|---|---|---|
| Backend ASP.NET | `Yavsc.Server`, `Yavsc.Web`, `Yavsc.Api`, `Yavsc.Org` | actif, build OK, cible .NET 10 |
| Domaine partagé | `Yavsc.Abstract` | actif |
| Blogs | `Yavsc.Blogs` | actif |
| Client chat (`PostIt`) | `PostIt` (Avalonia) + `PostIt.Android` / `PostIt.Browser` / `PostIt.Desktop` | actif, OIDC |
| CLI admin | `src/cli` | actif |
| Tests | `test/yavscTests` | présents, à densifier |
| Conteneurisation | `Dockerfile`, `Dockerfile.backend`, `docker-compose.yaml` | actif, image `pazof/yavsc-build-env` |
| CI | `.github/workflows/`, Dependabot (multi-ecosystems) | actif |
| Docs | `doc/Architecture.md`, `doc/ddd-exploration-2026-06-14.md` | frais (1314 juin 2026) |
### Bounded Contexts identifiés
| # | BC | Module | Maturité |
|---|---|---|---|
| 1 | Chat | `PostIt` | client riche + backend, OIDC |
| 2 | Profil & Identité | `Yavsc.Org` | en place |
| 3 | Activités Légales | `Yavsc.Org` (à séparer ?) | taxonomie présente |
| 4 | Blogs | `Yavsc.Blogs` | en place |
| 5 | Prestation | `Yavsc.Server` | cœur métier, à compléter |
| 6 | Paiements | `Yavsc.Server` | PayPal NVP/SOAP, **arrhes vs avance** à clarifier |
| 7 | Rencontre (mode 2) | à créer | pas démarré |
| 8 | Modération | `Yavsc.Org` / à séparer | workflow 2 étages, amorcé |
| 9 | Trust & Safety | à séparer | blacklist plateforme, à industrialiser |
| 10 | Conciliation | à créer | jalon 5, pas démarré |
---
## 🚦 Jalons
> Convention : `☐` à faire · `◐` en cours · `✔` livré
>
> Chaque jalon a un **critère de sortie** vérifiable.
### Jalon 0 — Fondations techniques *(en cours)*
> Cible : pouvoir parler du domaine sans se battre avec le runtime.
- ◐ Centralisation des versions NuGet (`Directory.Packages.props`) — **fait pour l'essentiel, à compléter**
- ◐ Conteneurisation de bout en bout (build env + run + compose)
- ☐ Tests d'intégration smoke par BC
- ☐ Découpage `Yavsc.Org` vs `Yavsc.Server` vs `Yavsc.Api` clarifié dans l'Architecture
- ☐ `CONTRIBUTING.md` (build, tests, conventions, DDD sessions)
**Critère de sortie** : `dotnet build` + `dotnet test` + `docker compose up` verts sur une machine vierge.
---
### Jalon 1 — Prestation signée de bout en bout
> Cible : un projet client/fournisseur aboutit à un **devis signé par les deux parties**, traçable, avec notifications.
Sous-jalons du `TODO.fr.md.archive` repris ici :
- ◐ **Devis validé fournisseur → client** : notification + mise à disposition du devis signé
- ☐ **Accord client sur devis** : notification fournisseur + mise à disposition signature client + commentaire
- ☐ **Édition facture non acquittée** depuis mobile
- ☐ **Édition contrat** depuis mobile
- ☐ **Notification & mise à disposition contrat** pour le client
- ☐ **Signature contrat par le client**
- ☐ **Notification facture non acquittée** au client
- ☐ **Paiement du client** (arrhes ? — voir jalon 2)
- ☐ **Édition facture marquée acquittée + signée** par le fournisseur
- ☐ **Notification facture acquittée signée** au client
- ☐ **Évaluation de la prestation** (des deux côtés)
**Critère de sortie** : scénario E2E web + mobile, devis → signature croisée → contrat → facture, sans intervention manuelle d'un opérateur.
---
### Jalon 2 — Espace personnel, blog opérationnel, marché ouvert
> Cible : un prestataire vit sur Yavsc (stocke, publie, est trouvé).
Repris du `TODO.fr.md.archive`, jalon 1 (sélection) + jalon 2 (interface) :
- ☐ **Gestion du profil utilisateur** Simple & Prestataire, sur **Android** (Web ✔)
- ☐ **Gestion de l'espace de stockage personnel** (Web, API web, Mobile)
- ☐ **Création d'une annonce**
- ☐ **Transformation annonce ↔ demande nominative**
- ☐ **Sélection d'une star** depuis le **mobile** (Web ✔)
- ☐ **Sélection DJ / chanteur / formation** (recherche par critères : date, lieu, tendance, taille, répertoire) depuis le **mobile**
- ☐ **Géocodeur de lieu** côté mobile
- ☐ **Géocodeur d'adresse postale** (Web + Mobile)
- ☐ **Évaluation des trajets**
- ☐ **Interface de gestion des collaborateurs** (sous-traitance — déjà amorcée dans `doc/Architecture.md`)
- ☐ **Migration de l'identifiant utilisateur** : `string` GUID → `long` auto-incrémenté (Npgsql)
- ☐ **Login with Twitter / PayPal**
- ☐ **Contrôle Web du rating**
- ☐ **Saisie et usage des disponibilités** (ponctuelles, récurrentes, congés)
- ☐ **Notifications structurelles** (impératives, par groupe)
- ☐ **Notifications aux posts, à l'arrivée d'un artiste, à une success story**
- ☐ **Construction du droit à l'envoi d'un message privé** (par destinataire, par accréditation, temporaire / définitif, par plage de temps, par validité d'un devis)
- ☐ **Paiement client du reste de la prestation**
- ☐ **Podcasts**
- ☐ **Personnalisation des blogs**
- ☐ **Monétisations**
- ☐ **Distribution de gold card / green card** (par un prestataire, donnant accès au chat privé)
- ☐ **Carte blanche** (délégation d'agenda, implique droit au chat privé)
- ☐ **Badges temporaires** (téléchargement unique, limité dans le temps, sans autre autorisation)
**Critère de sortie** : un utilisateur mobile peut publier une annonce, être sélectionné, signer, encaisser.
---
### Jalon 3 — Commande générique & formulaires extensibles
> Cible : le système de prise de commande n'est plus codé en dur par activité.
- ☐ **Saisie du devis sur commande générique** : les commandes sont des *projets utilisateur* associés à des *listes de formulaires* spécialisables
- ☐ **Groupe de champs** avec titre, contenant des champs :
- ☐ Label
- ☐ Type de valeur
- ☐ Type de contrôle
- ☐ Liste de validateurs
- ☐ Invitation à la saisie
- ☐ **Saisie d'un devis à destination d'un invité** (envoi par email, contact local)
- ☐ **Paiement d'arrhes** (cf. décision arrhes vs avance à prendre en jalon 0/1)
**Critère de sortie** : ajouter une nouvelle activité (code APE, formulaire, contrôles) sans toucher au code du backend, par simple configuration.
---
### Jalon 4 — Rencontre, géolocalisation, streaming
> Cible : Yavsc devient aussi un lieu de rencontre (Mode 2), pas seulement un outil de travail.
- ☐ **Aide à la rencontre physique** : carte interactive, geofencing, alertes
- ☐ **Activités secondaires** : spécialisation d'une activité, activités filles, *activité principale* (code APE)
- ☐ **Streaming vidéo pair-à-pair**
- ☐ **Streaming vidéo public**
**Critère de sortie** : un événement géolocalisé notifie ses participants confirmés à l'approche du point de rendez-vous.
---
### Jalon 5 — Conciliation & réseau pro
> Cible : un conflit entre client et fournisseur a un chemin de résolution outillé.
- ☐ **Conciliation** : double vue client/fournisseur sur le dossier, indicateurs, *FrontOffice* tranche et propose un partage des torts
- ☐ **Réseau pro** : sous-traitance en cascade, une demande n'est validable que lorsque **tous les devis** dont elle dépend sont validés
**Critère de sortie** : un dossier en litige peut être instruit par un conciliateur sans échange d'emails en parallèle.
---
## 🔒 Hygiène transverse (à tous les jalons)
### Sécurité
- ☐ Quota filesystem par utilisateur
- ☐ Clés anti-forge sur toutes les interfaces Web
- ☐ Limites de taille des chaînes du modèle (là où ça manque)
- ☐ Revue des scopes OIDC (PostIt, API)
### Accessibilité
- ☐ Correction des libellés manquants / en anglais
### Réécritures techniques programmées
- ☐ Éviter la création de fichiers TeX intermédiaires pour la génération PDF
- ☐ Isolation `Yavsc.Api` (auth + rate limiting)
### Configurabilité
- ☐ Gestion de contenu des pages du site au format interne (non exposé au Web)
- Cible : `@Html.SiteContent<AccessRules>(id).Responsible` (style à finaliser)
---
## 🗃️ Archive
- [`TODO.fr.md.archive`](./TODO.fr.md.archive) — liste d'origine (20162017), conservée pour mémoire.
Tout ce qui en a été repris l'est dans le jalon correspondant ci-dessus.