77 lines
4.1 KiB
Markdown
77 lines
4.1 KiB
Markdown
<!-- 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.
|