0.3.4-rc.1
This commit is contained in:
404
prompts/006-V0_3_5_START_PROMPT.md
Normal file
404
prompts/006-V0_3_5_START_PROMPT.md
Normal file
@@ -0,0 +1,404 @@
|
||||
<!-- file: prompts/006-V0_3_5_START_PROMPT.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Prompt de démarrage `0.3.5` — POC WebTransport/QUIC et fallback WebSocket
|
||||
|
||||
## 1. Base exacte et cible
|
||||
|
||||
Partir uniquement de la version stable/taggée :
|
||||
|
||||
```text
|
||||
v0.3.4
|
||||
```
|
||||
|
||||
Si ce prompt est lu avant la publication effective de `0.3.4`, terminer d'abord la RC puis la release stable `0.3.4`. Une archive annoncée comme téléchargement ZIP du tag Gitea est autoritaire conformément à `CMD-GIT-003` et `CMD-GIT-004` ; l'absence de `.git` n'est pas un défaut.
|
||||
|
||||
Version cible :
|
||||
|
||||
```text
|
||||
0.3.5
|
||||
```
|
||||
|
||||
Première tranche attendue :
|
||||
|
||||
```text
|
||||
0.3.5-alpha.1
|
||||
```
|
||||
|
||||
`alpha.1` est obligatoirement le gate de cadrage : audit de la stable, recherche des stacks WebTransport/QUIC actuelles, requirements, sizing, risques, matrice plateforme, validations et création du plan actif avant développement lourd.
|
||||
|
||||
## 2. Sources de vérité
|
||||
|
||||
Lire intégralement, dans cet ordre :
|
||||
|
||||
```text
|
||||
RULES.md
|
||||
ROADMAP.md
|
||||
CHANGELOG.md
|
||||
docs/000-README.md
|
||||
```
|
||||
|
||||
Puis au minimum :
|
||||
|
||||
```text
|
||||
docs/rules/RULES_GENERAL.md
|
||||
docs/rules/RULES_RUST.md
|
||||
docs/rules/RULES_PROJECT.md
|
||||
docs/rules/RULES_DOCUMENTATION.md
|
||||
docs/rules/FILE_CONTRACTS.md
|
||||
docs/rules/VERSION_WORKFLOW.md
|
||||
docs/rules/RULES_COMMANDS.md
|
||||
docs/rules/RULES_VALIDATION_MATRIX.md
|
||||
docs/rules/RULES_SESSION_PLANNING.md
|
||||
docs/rules/PROMPT_STRUCTURE.md
|
||||
```
|
||||
|
||||
Transmission réseau et plateforme :
|
||||
|
||||
```text
|
||||
docs/architecture/012-MODULAR_LAYERING_AND_OWNERSHIP.md
|
||||
docs/architecture/013-NETWORK_AND_SERVER_ARCHITECTURE.md
|
||||
docs/architecture/015-PLATFORM_POC_ARCHITECTURE.md
|
||||
docs/studies/006-REALTIME_MULTIPLAYER_SERVER_STUDY.md
|
||||
docs/studies/009-PLATFORM_POC_CANDIDATES.md
|
||||
docs/studies/011-PLATFORM_POC_VALIDATION_MATRIX.md
|
||||
docs/studies/012-PLATFORM_POC_SEQUENCE.md
|
||||
docs/plans/004-V0_3_4_REALTIME_TRANSPORT_WEBSOCKET_PLAN.md
|
||||
history/0.3.4/
|
||||
deltas/0.3.4/
|
||||
crates/common/game-realtime-transport-lib/README.md
|
||||
crates/common/game-realtime-websocket-lib/README.md
|
||||
crates/common/game-realtime-websocket-lib/USAGE.md
|
||||
```
|
||||
|
||||
Le plan `0.3.4` est historique une fois la stable publiée ; `0.3.5-alpha.1` crée `docs/plans/005-V0_3_5_WEBTRANSPORT_QUIC_POC_PLAN.md`, qui devient alors l'autorité prévisionnelle active.
|
||||
|
||||
## 3. État hérité attendu de 0.3.4
|
||||
|
||||
La stable `0.3.4` doit laisser une frontière realtime déjà testée :
|
||||
|
||||
```text
|
||||
transport-neutral contract
|
||||
↓
|
||||
WebSocket backend
|
||||
↓
|
||||
future wire/session layers
|
||||
```
|
||||
|
||||
État attendu :
|
||||
|
||||
- `game-realtime-transport-lib` sans Tokio, WebSocket, QUIC, HTTP ou TLS ;
|
||||
- payload binaire opaque `TransportMessage` ;
|
||||
- split `RealtimeConnection -> Sender + Receiver` ;
|
||||
- fermeture distante propre distinguée des erreurs ;
|
||||
- catégories d'erreur transport-neutral ;
|
||||
- `game-realtime-websocket-lib` comme backend de référence Tokio/tokio-tungstenite ;
|
||||
- client `ws://`, listener serveur, close propre, limites, deadlines et tracing ;
|
||||
- aucun runtime Tokio privé ni task backend détachée ;
|
||||
- aucun moteur ou gameplay dépendant du backend WebSocket ;
|
||||
- `game-realtime-websocket-smoke` comme preuve runtime localhost hors harness `#[test]` ;
|
||||
- aucune politique TLS directe, aucun wire codec final, aucune session joueur/room et aucune simulation authoritative.
|
||||
|
||||
À la rédaction de ce prompt pendant la RC `0.3.4`, `beta.1` a déjà validé le workspace complet, le smoke et les frontières de dépendances. Ne présenter cependant aucune validation future de `0.3.4-rc.1` ou de la stable comme acquise avant sa sortie réelle.
|
||||
|
||||
## 4. Mission 0.3.5
|
||||
|
||||
Évaluer puis prototyper **WebTransport/QUIC** comme second transport realtime en conservant WebSocket comme baseline/fallback de référence.
|
||||
|
||||
Le résultat recherché n'est pas « remplacer WebSocket parce que QUIC est plus moderne ». `0.3.5` doit répondre avec des preuves :
|
||||
|
||||
- un backend WebTransport/QUIC est-il viable sur les plateformes réellement visées ?
|
||||
- peut-il consommer la frontière `game-realtime-transport-lib` sans la déformer artificiellement ?
|
||||
- quelles différences de sémantique existent entre WebSocket et WebTransport : streams, datagrams, ordering, reliability, fermeture, backpressure ?
|
||||
- le bénéfice mesuré justifie-t-il la complexité TLS/HTTP3/QUIC et les contraintes navigateur/infrastructure ?
|
||||
- quel fallback WebSocket est réellement nécessaire et à quel niveau doit-il être choisi ?
|
||||
|
||||
La frontière conceptuelle reste :
|
||||
|
||||
```text
|
||||
transport
|
||||
↓
|
||||
wire codec
|
||||
↓
|
||||
session protocol
|
||||
↓
|
||||
synchronization
|
||||
↓
|
||||
authoritative simulation
|
||||
```
|
||||
|
||||
`0.3.5` reste concentrée sur le transport et la comparaison. Elle ne doit pas profiter du POC QUIC pour concevoir prématurément les couches supérieures.
|
||||
|
||||
## 5. Recherche alpha.1 obligatoire
|
||||
|
||||
Avant de choisir une crate ou d'écrire un backend, vérifier sur les sources actuelles :
|
||||
|
||||
- état et versions des crates Rust candidates WebTransport/QUIC ;
|
||||
- maintenance, MSRV, Tokio/runtime, licence et dépendances ;
|
||||
- support client et serveur natif ;
|
||||
- possibilité réelle côté navigateur/WASM et relation éventuelle avec l'API WebTransport du navigateur ;
|
||||
- support Android natif pertinent pour la trajectoire du projet ;
|
||||
- exigences TLS/certificats et contraintes de développement localhost ;
|
||||
- HTTP/3/QUIC sous-jacent et besoins UDP ;
|
||||
- compatibilité Debian Stable pour un serveur auto-hébergé ;
|
||||
- interaction avec reverse proxy/edge lorsqu'elle est réellement nécessaire ;
|
||||
- support des streams bidirectionnels/unidirectionnels et des datagrams ;
|
||||
- comportement de backpressure, limites, fermeture et cancellation ;
|
||||
- maturité des APIs de test loopback/local ;
|
||||
- disponibilité et stabilité des APIs navigateur sur les cibles réellement testables.
|
||||
|
||||
Ne pas figer dans ce prompt un nom de crate WebTransport/QUIC : `alpha.1` doit comparer l'état actuel de l'écosystème au moment du développement.
|
||||
|
||||
## 6. Question centrale : compatibilité du contrat 0.3.4
|
||||
|
||||
Le contrat `game-realtime-transport-lib` a été volontairement minimal et orienté « messages binaires fiables/ordonnés » parce que WebSocket était le premier backend.
|
||||
|
||||
`alpha.1` doit déterminer si :
|
||||
|
||||
1. WebTransport peut implémenter ce contrat proprement via un stream fiable sans perte significative ;
|
||||
2. les datagrams WebTransport apportent une capability réellement utile qui ne rentre pas dans ce contrat ;
|
||||
3. une capability supplémentaire doit être séparée au lieu d'élargir `RealtimeConnection` ;
|
||||
4. le POC doit garder deux chemins distincts afin de comparer avant toute extraction commune.
|
||||
|
||||
Interdiction de modifier `game-realtime-transport-lib` uniquement pour rendre les APIs WebSocket et QUIC esthétiquement identiques. Toute évolution du contrat commun doit être motivée par au moins deux consommateurs réels et un besoin sémantique partagé.
|
||||
|
||||
## 7. Scope inclus
|
||||
|
||||
Le scope candidat comprend :
|
||||
|
||||
- audit/recherche WebTransport/QUIC ;
|
||||
- plan `0.3.5` et matrice de preuves ;
|
||||
- second backend transport si la stack retenue est suffisamment viable ;
|
||||
- preuve client/serveur locale ou équivalent reproductible ;
|
||||
- payload binaire opaque réutilisant le contrat commun lorsque cela est sémantiquement correct ;
|
||||
- fermeture/cancellation, limites, timeouts et erreurs du nouveau backend ;
|
||||
- tracing séparé ;
|
||||
- preuve du fallback WebSocket ou d'un choix de transport au niveau approprié, uniquement si le POC le justifie ;
|
||||
- comparaison mesurée WebSocket vs WebTransport/QUIC ;
|
||||
- documentation des contraintes plateforme/TLS/infrastructure ;
|
||||
- smoke runtime distinct du harness de test si nécessaire pour prouver le nouveau chemin.
|
||||
|
||||
## 8. Hors scope
|
||||
|
||||
Sauf nécessité strictement démontrée par le POC transport, ne pas introduire :
|
||||
|
||||
- Uroburas Mode 3 ;
|
||||
- matchmaking ;
|
||||
- auth complète ;
|
||||
- protocole session joueur/room ;
|
||||
- codec wire définitif ;
|
||||
- snapshot/delta gameplay ;
|
||||
- prediction/reconciliation ou rollback ;
|
||||
- simulation authoritative ;
|
||||
- persistence gameplay ;
|
||||
- Redis/NATS/Kafka ;
|
||||
- sharding/regions ;
|
||||
- CDN/edge complexe ;
|
||||
- orchestration Kubernetes ;
|
||||
- remplacement de la stack Web/API Actix ;
|
||||
- framework générique multi-transport massif.
|
||||
|
||||
## 9. Mesures et comparaison
|
||||
|
||||
Le POC doit définir avant mesure les métriques réellement utiles. Candidats :
|
||||
|
||||
- temps d'établissement ;
|
||||
- latence aller-retour de petits payloads ;
|
||||
- débit sur payloads bornés ;
|
||||
- overhead observable ;
|
||||
- comportement sous plusieurs messages en vol ;
|
||||
- coût CPU/mémoire si la mesure est suffisamment reproductible ;
|
||||
- différence fiable/ordonnée vs datagram lorsque ce dernier est réellement disponible ;
|
||||
- complexité opérationnelle : certificats, UDP, ports, reverse proxy et debugging.
|
||||
|
||||
Un benchmark loopback ne suffit pas à conclure sur Internet/mobile. Il sert à vérifier l'implémentation et à comparer des overheads locaux contrôlés. Toute conclusion produit doit distinguer mesure locale, comportement protocolaire connu et test réseau externe réellement effectué.
|
||||
|
||||
Les benchmarks doivent rester bornés, reproductibles et ne pas devenir une infrastructure de performance disproportionnée pour un POC.
|
||||
|
||||
## 10. Fallback WebSocket
|
||||
|
||||
WebSocket reste la baseline fonctionnelle jusqu'à preuve contraire.
|
||||
|
||||
Le fallback ne doit pas être codé dans le gameplay. `alpha.1` doit décider l'ownership du choix de transport parmi :
|
||||
|
||||
- composition/application ;
|
||||
- client/platform adapter ;
|
||||
- petit sélecteur technique dédié si deux backends réels le justifient.
|
||||
|
||||
Ne pas créer un `TransportManager`, registry dynamique ou système de plugins uniquement pour choisir entre deux transports POC.
|
||||
|
||||
## 11. Plateformes à challenger
|
||||
|
||||
Le plan `alpha.1` doit expliciter ce qui est réellement testable dans la session :
|
||||
|
||||
- Linux natif : client/server local de référence ;
|
||||
- navigateur/WASM : important pour WebTransport, mais seulement avec une chaîne de test réaliste ;
|
||||
- Android : vérifier la trajectoire et la compatibilité, sans rouvrir le pipeline multi-ABI `0.3.3` si aucun code Android n'est touché ;
|
||||
- iOS/macOS : documenter les contraintes connues mais ne pas bloquer la version en l'absence d'environnement Apple.
|
||||
|
||||
Une plateforme non testée ne doit pas être présentée comme validée.
|
||||
|
||||
## 12. TLS, certificats et sécurité transport
|
||||
|
||||
Contrairement à la baseline locale `ws://`, WebTransport navigateur peut imposer des contraintes de sécurité/certificats. `alpha.1` doit vérifier les exigences actuelles au lieu de les supposer.
|
||||
|
||||
La version peut introduire uniquement la politique minimale nécessaire au POC. Ne pas transformer `0.3.5` en projet PKI complet. Les certificats de développement, s'ils sont nécessaires, restent hors secrets du dépôt et leur génération/installation doit être documentée de façon reproductible.
|
||||
|
||||
Aucune désactivation dangereuse de validation TLS ne devient un chemin produit permanent uniquement pour simplifier un smoke.
|
||||
|
||||
## 13. Documentation README/USAGE
|
||||
|
||||
Appliquer `DOC-CRATE-*` à tout nouveau composant :
|
||||
|
||||
- backend WebTransport/QUIC durable : README probable ;
|
||||
- configuration/workflow/certificats non triviaux : USAGE probablement utile ;
|
||||
- launcher de benchmark/smoke très petit : documentation locale seulement si le plan central ne couvre pas suffisamment son rôle ;
|
||||
- ne jamais créer des fichiers vides ou redondants par cérémonie.
|
||||
|
||||
La documentation propre à la fonctionnalité évolue avec la tranche qui l'introduit ; la RC ne doit pas être utilisée pour reporter toute documentation à la fin.
|
||||
|
||||
## 14. Validation et responsabilité
|
||||
|
||||
Les audits statiques peuvent être exécutés par le générateur. Les builds, tests, benchmarks et smokes finaux restent côté utilisateur conformément à `CMD-BUILD-005` et ne sont jamais déclarés réussis sans sortie réelle.
|
||||
|
||||
Dès qu'un fichier Rust ou Cargo change :
|
||||
|
||||
```bash
|
||||
cargo fmt --all
|
||||
cargo fmt --all -- --check
|
||||
cargo check --workspace
|
||||
cargo clippy --workspace --all-targets --all-features -- -D warnings
|
||||
```
|
||||
|
||||
Les tests restent ciblés pendant l'implémentation. `cargo test --workspace --all-targets --all-features` est réservé aux jalons larges planifiés ou lorsqu'une évolution transverse le justifie.
|
||||
|
||||
`cargo tree` est utilisé lorsque les dépendances changent ou lorsqu'une frontière doit être prouvée, pas comme cérémonie à chaque tranche.
|
||||
|
||||
Toute commande nécessitant un `cd` doit être englobée dans un sous-shell `(cd ... && ...)`.
|
||||
|
||||
## 15. Deltas, history, changelog et roadmap
|
||||
|
||||
À partir de `0.3.5`, conserver la nomenclature :
|
||||
|
||||
```text
|
||||
0.3.5-alpha.N
|
||||
0.3.5-alpha.N.fix.M
|
||||
0.3.5-beta.N
|
||||
0.3.5-beta.N.fix.M
|
||||
0.3.5-rc.N
|
||||
0.3.5-rc.N.fix.M
|
||||
0.3.5
|
||||
```
|
||||
|
||||
Chaque delta indique sa base, son scope, les fichiers touchés et les validations attendues.
|
||||
|
||||
`history/0.3.5/<jalon>.md` est créé uniquement par la tranche suivante ou son fix après validation réelle du jalon précédent.
|
||||
|
||||
`CHANGELOG.md` reste normalement silencieux avant la RC. `ROADMAP.md` reste macroscopique et ne change que si le scope, l'ordre ou le statut évolue réellement.
|
||||
|
||||
Un échec fermé d'une tranche produit `<jalon>.fix.N`. Une validation propre permet de poursuivre automatiquement vers la tranche planifiée suivante. Une session doit fermer au minimum une version concrète jusqu'à sa stable ; ne pas s'arrêter volontairement sur une prerelease.
|
||||
|
||||
## 16. Cadrage alpha.1 obligatoire
|
||||
|
||||
Avant développement lourd :
|
||||
|
||||
1. auditer la stable `v0.3.4` et vérifier ses gates/historique ;
|
||||
2. relire le contrat transport et le backend WebSocket réellement livrés ;
|
||||
3. rechercher l'écosystème WebTransport/QUIC actuel ;
|
||||
4. établir une matrice plateforme/runtime/TLS ;
|
||||
5. comparer les stacks candidates et justifier le choix ;
|
||||
6. décider si le contrat transport-neutral reste inchangé ;
|
||||
7. décider ownership physique des nouvelles crates/outils ;
|
||||
8. définir les preuves locales, navigateur éventuel, benchmarks et smokes ;
|
||||
9. définir précisément ce que signifie « fallback WebSocket » dans ce POC ;
|
||||
10. créer `docs/plans/005-V0_3_5_WEBTRANSPORT_QUIC_POC_PLAN.md` ;
|
||||
11. produire un forecast révisé jusqu'à stable et redécouper la version si le scope excède une session raisonnable.
|
||||
|
||||
## 17. Forecast initial non contraignant
|
||||
|
||||
Le forecast ci-dessous est une hypothèse de départ. `alpha.1` doit le réviser à partir des résultats réels et le plan actif devient ensuite l'autorité prévisionnelle.
|
||||
|
||||
### `0.3.5-alpha.1` — audit WebTransport/QUIC et design du POC
|
||||
|
||||
- audit stable `0.3.4` ;
|
||||
- recherche des stacks actuelles ;
|
||||
- matrice plateforme/TLS/runtime ;
|
||||
- challenge du contrat commun ;
|
||||
- stratégie fallback ;
|
||||
- métriques et gates ;
|
||||
- plan actif.
|
||||
|
||||
Aucun backend lourd n'est créé avant fermeture de ces décisions.
|
||||
|
||||
### `0.3.5-alpha.2` — backend minimal et loopback
|
||||
|
||||
Si `alpha.1` confirme la viabilité :
|
||||
|
||||
- créer le backend retenu avec dépendances minimales ;
|
||||
- établir client/server local ;
|
||||
- transporter un payload binaire ;
|
||||
- close/cancellation et erreurs de base ;
|
||||
- tests loopback déterministes ;
|
||||
- tracing dédié.
|
||||
|
||||
Si le contrat commun ne convient pas, documenter le besoin avant de le modifier.
|
||||
|
||||
### `0.3.5-alpha.3` — plateforme/fallback réel
|
||||
|
||||
Selon les résultats :
|
||||
|
||||
- preuve navigateur/WASM si elle est techniquement et opérationnellement réalisable ;
|
||||
- ou preuve native plus complète si le navigateur exige une infrastructure disproportionnée à cette tranche ;
|
||||
- fallback WebSocket au niveau d'ownership retenu ;
|
||||
- tests des deux chemins sans couplage au gameplay.
|
||||
|
||||
Cette tranche peut être fusionnée ou scindée selon TLS/certificats et tooling réellement nécessaires.
|
||||
|
||||
### `0.3.5-alpha.4` — mesures et robustesse conditionnelles
|
||||
|
||||
Si nécessaire :
|
||||
|
||||
- mesures WebSocket vs WebTransport/QUIC ;
|
||||
- streams vs datagrams lorsque réellement supportés ;
|
||||
- limites, timeouts, backpressure et peer drop ;
|
||||
- smoke runtime/benchmark borné ;
|
||||
- décision documentée sur la valeur réelle du second transport.
|
||||
|
||||
Ne pas créer cette tranche si `alpha.2/alpha.3` ferment déjà ces preuves proprement.
|
||||
|
||||
### `0.3.5-beta.1` — validation large
|
||||
|
||||
- workspace complet ;
|
||||
- smokes réellement retenus ;
|
||||
- graphes de dépendances ;
|
||||
- vérification qu'aucun gameplay/engine ne dépend d'un backend concret ;
|
||||
- comparaison et limitations documentées.
|
||||
|
||||
Un défaut fermé produit `beta.1.fix.N`. Une capacité majeure manquante réouvre une alpha.
|
||||
|
||||
### `0.3.5-rc.1` — candidate gelée
|
||||
|
||||
- aucun nouveau comportement volontaire ;
|
||||
- consolidation durable ;
|
||||
- `CHANGELOG.md` ;
|
||||
- `ROADMAP.md` si statut macro à réconcilier ;
|
||||
- historique beta ;
|
||||
- prompt `0.3.6` préparant la consolidation des POC plateforme/réseau ;
|
||||
- gates de publication proportionnelles aux changements depuis beta.
|
||||
|
||||
### `0.3.5` — stable
|
||||
|
||||
Promotion autant que possible mécanique : version stable, historique RC, changelog stable, clôture du plan, roadmap, delta final et ajustement mécanique du prompt `0.3.6`.
|
||||
|
||||
## 18. Critère de réussite produit de 0.3.5
|
||||
|
||||
La version est réussie même si la conclusion est de **ne pas adopter WebTransport immédiatement**, à condition que le POC fournisse une réponse technique solide et reproductible.
|
||||
|
||||
La décision finale doit pouvoir distinguer clairement :
|
||||
|
||||
- WebTransport/QUIC retenu comme second backend utile ;
|
||||
- viable mais reporté faute de bénéfice suffisant ou de contraintes plateforme/infrastructure ;
|
||||
- non viable pour la trajectoire actuelle ;
|
||||
- besoin d'une étude complémentaire explicitement reportée.
|
||||
|
||||
Le résultat ne doit jamais être forcé pour justifier le temps investi dans le POC.
|
||||
Reference in New Issue
Block a user