0.0.2-alpha.2

This commit is contained in:
2026-09-23 11:19:21 +02:00
parent 1a5dd0908c
commit 5f9b84c980
9 changed files with 634 additions and 19 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/rules/000-README.md -->
<!-- version: 6 -->
<!-- version: 7 -->
# Index des règles PGR
@@ -15,6 +15,10 @@ Les règles générales actuellement nécessaires restent dans `RULES.md`. La fa
- [`210-WORKFLOW.md`](210-WORKFLOW.md) — contrats des artefacts workflow, ordre delta/history/commit, reprise et baselines de release.
- [`300-DOCUMENTATION.md`](300-DOCUMENTATION.md) — rôles des documents, taxonomie, révisions internes, documents vivants et snapshots historiques.
- [`400-VALIDATION.md`](400-VALIDATION.md) — matrice de validation, preuves proportionnelles, tests/audits/diagnostics, doubles de test et autorité du gate opérateur.
- [`500-LANGUAGES.md`](500-LANGUAGES.md) — contrat commun des profils langage/écosystème et de leurs spécialisations de build.
- [`600-PLATFORMS.md`](600-PLATFORMS.md) — contrat commun des profils plateforme.
Le modèle transversal d'ownership, d'applicabilité et de composition est décrit dans [`../architecture/003-RULE_PROFILE_MODEL.md`](../architecture/003-RULE_PROFILE_MODEL.md).
## Organisation prévue
@@ -25,7 +29,7 @@ Les autres familles seront créées uniquement lorsqu'elles disposent d'un conte
200 — governance
300 — documentation
400 — validation
500 — languages
500 — languages / ecosystems
600 — platforms
700 — frameworks
800 — architecture

View File

@@ -0,0 +1,76 @@
<!-- file: docs/rules/500-LANGUAGES.md -->
<!-- version: 1 -->
# Règles de profils langage et écosystème
## Scope
Cette famille définit le contrat commun des profils liés à un langage, son écosystème et, lorsque pertinent, ses build tools ou package managers.
Les règles propres à Rust/Cargo, Java, Maven, Gradle ou à d'autres technologies sont ajoutées dans des documents plus spécifiques uniquement lorsqu'un contenu normatif réel existe.
## Responsabilités de la famille
Un profil langage/écosystème MAY posséder les règles spécifiques concernant notamment :
- l'organisation canonique des sources, packages, modules, crates ou workspaces ;
- les manifests et fichiers de configuration propres à l'écosystème ;
- la toolchain de compilation ou d'exécution lorsqu'elle appartient au langage ;
- les build tools et package managers liés à cet écosystème ;
- les dépendances, features, scopes ou configurations propres au gestionnaire utilisé ;
- le formatter, le linter et les commandes officielles de vérification ;
- les conventions d'API, d'import, d'erreur ou de safety réellement propres au langage ;
- l'organisation des tests lorsque l'écosystème lui donne une structure spécifique ;
- les artefacts générés ou lockfiles lorsque leur traitement dépend réellement de l'écosystème.
Un profil langage/écosystème MUST NOT absorber des règles dont le propriétaire naturel est une plateforme, un framework, un domaine métier ou le projet particulier.
## Héritage
Les profils de cette famille héritent des règles générales PGR et ne doivent pas recopier les contrats déjà possédés par les familles de gouvernance, documentation ou validation.
Une règle générale comme l'interdiction de versionner des secrets reste applicable sans être répétée dans chaque profil langage.
Lorsqu'un langage ou un build tool impose une exception réelle à une règle générale, le profil spécifique doit déclarer l'override et sa justification.
## Langage et build tool
PGR ne force pas un découpage identique pour tous les écosystèmes.
Un langage et son build tool MAY partager un profil lorsque leurs responsabilités sont suffisamment liées et que les séparer ne produirait que des renvois artificiels.
Ils SHOULD être séparés lorsque plusieurs build tools interchangeables possèdent chacun des règles propres significatives.
Dans ce second cas, la composition est explicite :
```text
language profile
↓
build-tool specialization
```
Une spécialisation de build tool ne devient pas une règle du langage entier.
## Versions d'outils et dépendances
Un profil MUST NOT figer une version exacte d'outil ou de dépendance uniquement parce qu'une version apparaît dans un projet source historique.
Une contrainte de version appartient au profil lorsqu'elle répond à une nécessité démontrée de compatibilité, reproductibilité, support, sécurité ou matrice imposée par un outil plus spécifique.
Une contrainte introduite par une plateforme ou un framework reste possédée par ce scope plus spécifique et ne se propage pas au langage entier.
## Validation spécialisée
Un profil langage/écosystème peut ajouter des commandes de formatage, lint, check ou test propres à sa toolchain.
Ces commandes complètent la gouvernance de validation générale ; elles ne redéfinissent ni l'autorité du gate opérateur, ni les statuts de preuve, ni le principe de proportionnalité.
Un audit Python PGR ne doit pas réimplémenter une propriété déjà contrôlée de façon fiable par le compilateur, le formatter, le linter ou le build tool officiel sans besoin distinct démontré.
## Nomenclature documentaire
Le document `500-LANGUAGES.md` possède le contrat commun de la famille.
Les profils spécifiques utilisent la plage `510` à `599`. Leur numéro identifie la navigation documentaire et ne représente ni une priorité normative implicite ni une version technologique.
L'applicabilité et les relations de spécialisation sont déterminées par le contenu du profil conformément à [`../architecture/003-RULE_PROFILE_MODEL.md`](../architecture/003-RULE_PROFILE_MODEL.md), jamais par l'ordre lexical des fichiers.

View File

@@ -0,0 +1,65 @@
<!-- file: docs/rules/600-PLATFORMS.md -->
<!-- version: 1 -->
# Règles de profils plateforme
## Scope
Cette famille définit le contrat commun des profils liés à une plateforme de build, d'exécution ou de distribution telle qu'Android, iOS, Desktop, Web ou une cible embarquée lorsqu'un profil réel le justifie.
Les règles propres à une plateforme sont ajoutées dans des documents plus spécifiques uniquement lorsqu'elles possèdent un contenu normatif réel.
## Responsabilités de la famille
Un profil plateforme MAY posséder les règles spécifiques concernant notamment :
- la structure de projet imposée ou conventionnelle sur cette plateforme ;
- les SDKs, targets, runtimes et niveaux minimums supportés ;
- les contraintes de toolchain réellement imposées par la plateforme ;
- les permissions, manifests, capabilities ou métadonnées de plateforme ;
- le packaging, la signature et les artefacts de distribution ;
- les émulateurs, simulateurs, appareils ou environnements nécessaires aux smokes ;
- les adaptations de lifecycle, input ou services réellement propres à la plateforme ;
- les contraintes de compatibilité utilisateur liées à une version minimale de target/runtime.
Un profil plateforme MUST NOT recopier les règles du langage ou du build tool lorsque celles-ci restent valides sans spécialisation.
## Composition avec les langages et build tools
Une plateforme peut être utilisée avec plusieurs langages ou toolchains. Son profil ne doit donc pas supposer implicitement une combinaison unique lorsque la plateforme elle-même ne l'impose pas.
Lorsqu'une plateforme impose une contrainte plus précise à un langage ou build tool déjà applicable, la règle plateforme peut la raffiner ou la remplacer dans son scope à condition d'identifier clairement la contrainte et sa raison.
Cette contrainte MUST NOT se propager aux projets utilisant le même langage hors de cette plateforme.
## Toolchain de build et compatibilité de target
La modernité de la toolchain de build et la version minimale du runtime ou de la target sont deux décisions distinctes.
L'utilisation d'un SDK, compilateur ou build tool récent ne justifie pas à elle seule l'augmentation de la version minimale supportée par les utilisateurs.
Une hausse d'un minimum de target/runtime constitue un changement de compatibilité et doit être justifiée par une contrainte ou un bénéfice réel du projet.
Inversement, un minimum ancien ne doit pas être conservé artificiellement lorsqu'il empêche une capacité nécessaire, une maintenance raisonnable ou une chaîne de build supportée.
## Packaging, secrets et configuration locale
Les règles de packaging ou de signature spécifiques à une plateforme peuvent appartenir à son profil, mais les secrets eux-mêmes restent soumis aux règles générales PGR et ne sont jamais versionnés.
Une plateforme peut nécessiter des fichiers locaux ou générés particuliers ; leur politique Git doit être documentée dans le profil spécifique seulement lorsqu'elle diffère réellement du contrat général.
## Validation spécialisée
Un profil plateforme peut définir les builds, packages et smokes réellement nécessaires pour prouver le support annoncé.
La présence d'une plateforme dans un projet ne rend pas automatiquement tous ses smokes obligatoires à chaque tranche. La sélection reste proportionnée au scope modifié et aux preuves invalidées.
Les validations nécessitant un appareil, un simulateur, un service externe ou une chaîne de packaging réelle doivent être distinguées des contrôles documentaires ou unitaires qui ne prouvent pas ces comportements.
## Nomenclature documentaire
Le document `600-PLATFORMS.md` possède le contrat commun de la famille.
Les profils spécifiques utilisent la plage `610` à `699`. Leur numéro sert à la navigation et ne détermine pas une priorité normative implicite.
La résolution entre profils suit [`../architecture/003-RULE_PROFILE_MODEL.md`](../architecture/003-RULE_PROFILE_MODEL.md).