260 lines
10 KiB
Markdown
260 lines
10 KiB
Markdown
<!-- file: deltas/0.1.2/alpha.2.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# Delta 0.1.2-alpha.2 — révision ciblée Java / Gradle
|
|
|
|
## Baseline et version
|
|
|
|
Baseline attendue : commit opérateur de `0.1.2-alpha.1`, réalisé après application de `history/0.1.2/alpha.1.md` avec statut `PASS`.
|
|
|
|
Le hash de ce commit n'est pas anticipé.
|
|
|
|
Version avant application :
|
|
|
|
```text
|
|
0.1.2-alpha.1
|
|
```
|
|
|
|
Version après application :
|
|
|
|
```text
|
|
0.1.2-alpha.2
|
|
```
|
|
|
|
## Objet
|
|
|
|
Appliquer la révision normative ciblée décidée après l'audit Games de `alpha.1` sans transformer les choix locaux du corpus en prescriptions générales.
|
|
|
|
La tranche précise uniquement :
|
|
|
|
- la distinction entre JDK de build, niveau source et bytecode/runtime supporté ;
|
|
- la possibilité pour un JDK plus récent de cibler explicitement un niveau Java plus ancien ;
|
|
- l'ownership naturel de `settings.gradle(.kts)`, du build root, des builds de modules et de `gradle.properties` partagé ;
|
|
- la nécessité qu'une politique « Gradle système » possède une contrainte effectivement vérifiée ;
|
|
- la séparation entre configuration Gradle partagée portable et état local/machine/secrets ;
|
|
- la frontière entre règles Java/Gradle générales et overrides Android.
|
|
|
|
Les sections Maven sont relues et conservées sans nouvel artefact : Games `0.3.6` ne contient aucun projet Maven permettant de justifier une normalisation supplémentaire.
|
|
|
|
## Scope
|
|
|
|
REPLACE :
|
|
|
|
```text
|
|
VERSION
|
|
docs/plans/008-V0_1_2_JAVA_GRADLE_REEVALUATION_PLAN.md
|
|
docs/rules/520-JAVA_MAVEN_GRADLE.md
|
|
```
|
|
|
|
ADD :
|
|
|
|
```text
|
|
deltas/0.1.2/alpha.2.md
|
|
```
|
|
|
|
DELETE : aucun.
|
|
|
|
`docs/rules/610-ANDROID.md`, `RULES.md`, `ROADMAP.md`, `CHANGELOG.md`, les autres profils, templates, skeletons, validations, scripts et tests restent inchangés.
|
|
|
|
Aucun `history/0.1.2/alpha.2.md` n'est anticipé.
|
|
|
|
## Décisions Java
|
|
|
|
Le contrat existant est conservé et rendu plus explicite :
|
|
|
|
```text
|
|
JDK de build
|
|
!= niveau Java du code source
|
|
!= niveau de bytecode/runtime minimal supporté
|
|
```
|
|
|
|
Un JDK de build plus récent peut être utilisé avec une cible Java plus ancienne lorsque cette cible est déclarée explicitement par le build et réellement supportée par la toolchain.
|
|
|
|
PGR ne rend obligatoire ni `--release`, ni une toolchain Java, ni `sourceCompatibility`/`targetCompatibility` pour tous les builds. Le mécanisme concret dépend de Maven, Gradle, du plugin et du projet ; le contrat important est que la compatibilité ne soit pas une conséquence implicite du JDK actif.
|
|
|
|
Les versions Games observées restent locales : ni JDK 25 LTS ni Java 17 ne deviennent un minimum PGR.
|
|
|
|
## Décisions Gradle
|
|
|
|
### Ownership
|
|
|
|
La responsabilité est explicitée sans imposer le layout Games :
|
|
|
|
```text
|
|
settings.gradle(.kts)
|
|
composition du build
|
|
politiques globales de résolution lorsqu'elles existent
|
|
contraintes de bootstrap/version devant agir avant les projets
|
|
|
|
build root
|
|
plugins, versions et conventions réellement partagés
|
|
|
|
build de module
|
|
plugins, dépendances, sources, tâches et paramètres locaux au module
|
|
|
|
gradle.properties partagé
|
|
propriétés portables, non secrètes et réellement communes
|
|
```
|
|
|
|
Une logique transverse devenue importante peut être extraite dans un script, build logic ou plugin possédé plutôt que dupliquée. Aucun de ces mécanismes n'est rendu obligatoire.
|
|
|
|
### Gradle système et Wrapper
|
|
|
|
Le Wrapper reste conditionnel : il est recommandé lorsqu'il apporte une reproductibilité utile, mais son absence dans Games reste `KEEP-LOCAL` et n'est pas généralisée.
|
|
|
|
Lorsqu'un projet choisit un Gradle système, sa contrainte de compatibilité doit être effectivement vérifiée par le build ou par une gate exécutée par le projet/CI. Une version écrite uniquement dans la documentation ne suffit pas.
|
|
|
|
PGR ne reprend ni le minimum `9.6.0` ni l'API `GradleVersion.current()` de Games comme règle universelle. Ils constituent une implémentation valide d'une politique locale, pas la forme obligatoire de la vérification.
|
|
|
|
### Propriétés et état local
|
|
|
|
Un `gradle.properties` partagé doit rester portable et non secret. Les chemins machine, credentials, secrets et overrides développeur utilisent un mécanisme local approprié et restent hors Git.
|
|
|
|
Le version catalog reste optionnel. Groovy DSL et Kotlin DSL restent tous deux reconnus ; le choix Groovy de Games reste `KEEP-LOCAL`.
|
|
|
|
## Maven
|
|
|
|
Aucun `pom.xml`, Maven Wrapper ou projet Maven n'existe dans le corpus Games autoritaire. Les sections Maven de `520` ont donc uniquement été relues pour vérifier qu'elles restent cohérentes avec la philosophie générale : centraliser ce qui est réellement commun, ne pas imposer un Wrapper par cérémonie, préférer les gates ciblées et ne pas automatiser `clean` sans besoin.
|
|
|
|
Aucun template, skeleton, audit ou autre artefact Maven n'est ajouté.
|
|
|
|
## Frontière Android
|
|
|
|
`610-ANDROID.md` n'est pas modifié.
|
|
|
|
Les éléments suivants restent hors scope de `0.1.2` :
|
|
|
|
```text
|
|
AGP et sa matrice de compatibilité
|
|
compileSdk / targetSdk / minSdk
|
|
NDK et ABI
|
|
JNI / AAR / Prefab
|
|
applicationId / namespace
|
|
manifests / resources
|
|
APK / AAB / signing
|
|
Variant API Android
|
|
devices / AVD / smokes Android
|
|
contraintes 16 KB
|
|
SDL3 et architecture Games
|
|
```
|
|
|
|
`520` documente seulement qu'une plateforme ou un framework peut imposer un override plus étroit sans transformer cet override en minimum Java/Gradle général.
|
|
|
|
## Validation opérateur
|
|
|
|
Après application du history `PASS`, commit/push de `alpha.1`, puis application du présent delta :
|
|
|
|
```bash
|
|
test "$(cat VERSION)" = '0.1.2-alpha.2'
|
|
git cat-file -e HEAD:history/0.1.2/alpha.1.md
|
|
test -f history/0.1.2/alpha.1.md
|
|
test -f deltas/0.1.2/alpha.2.md
|
|
test ! -e history/0.1.2/alpha.2.md
|
|
|
|
grep -A2 '^## Statut$' history/0.1.2/alpha.1.md | grep -Fx 'PASS'
|
|
grep -Fx '<!-- version: 2 -->' docs/plans/008-V0_1_2_JAVA_GRADLE_REEVALUATION_PLAN.md
|
|
grep -Fx '<!-- version: 3 -->' docs/rules/520-JAVA_MAVEN_GRADLE.md
|
|
grep -Fx '<!-- version: 2 -->' docs/rules/610-ANDROID.md
|
|
|
|
python3 -B -m unittest discover -s tests -v
|
|
|
|
python3 -B scripts/audit_markdown_headers.py \
|
|
README.md RULES.md ROADMAP.md CHANGELOG.md docs deltas history prompts
|
|
python3 -B scripts/audit_markdown_tables.py \
|
|
README.md RULES.md ROADMAP.md CHANGELOG.md docs deltas history prompts
|
|
python3 -B scripts/audit_markdown_links.py \
|
|
README.md RULES.md ROADMAP.md CHANGELOG.md docs deltas history prompts
|
|
|
|
python3 -B - <<'PYGATE'
|
|
from pathlib import Path
|
|
import re
|
|
|
|
history = Path('history/0.1.2/alpha.1.md').read_text(encoding='utf-8')
|
|
assert re.search(r'## Statut\s+PASS\s', history)
|
|
|
|
profile = Path('docs/rules/520-JAVA_MAVEN_GRADLE.md').read_text(encoding='utf-8')
|
|
for phrase in (
|
|
'Un JDK de build plus récent MAY compiler un projet qui cible un niveau source ou bytecode plus ancien',
|
|
'Le simple fait qu\'une compilation réussisse avec le JDK actif ne constitue pas une déclaration de compatibilité.',
|
|
'composition du build et inclusion des projets',
|
|
'plugins, dépendances, sources, tâches et paramètres propres au module',
|
|
'propriétés portables, non secrètes et réellement communes au build',
|
|
'effectivement vérifiée',
|
|
'Une version seulement écrite dans la documentation sans contrôle exécutable n\'est pas une preuve suffisante',
|
|
'Son absence dans un corpus particulier ne constitue pas une règle générale.',
|
|
):
|
|
assert phrase in profile, phrase
|
|
|
|
for phrase in (
|
|
'AGP',
|
|
'`minSdk`',
|
|
'`targetSdk`',
|
|
'NDK',
|
|
'ABI/JNI',
|
|
'packaging APK/AAB',
|
|
'device/AVD',
|
|
):
|
|
assert phrase in profile, phrase
|
|
|
|
plan = Path('docs/plans/008-V0_1_2_JAVA_GRADLE_REEVALUATION_PLAN.md').read_text(encoding='utf-8')
|
|
for phrase in (
|
|
'## Décision après `alpha.1`',
|
|
'La gate opérateur de `alpha.1` est `PASS`',
|
|
'`KEEP-LOCAL` : Groovy DSL, absence de Wrapper dans Games, JDK 25 LTS et cible Java 17',
|
|
'`OVERRIDE` : matrice AGP/Gradle/JDK et autres contraintes de plateforme Android',
|
|
'`DEFER` : version catalog, skeleton Java/Gradle, audit Python Java/Gradle et nouveaux artefacts Maven',
|
|
'`alpha.2` est donc bornée à la révision du profil `520`',
|
|
):
|
|
assert phrase in plan, phrase
|
|
|
|
android = Path('docs/rules/610-ANDROID.md').read_text(encoding='utf-8')
|
|
assert android.startswith('<!-- file: docs/rules/610-ANDROID.md -->\n<!-- version: 2 -->')
|
|
|
|
for path in (
|
|
'docs/templates',
|
|
'docs/skeletons',
|
|
'scripts',
|
|
):
|
|
assert Path(path).is_dir(), path
|
|
|
|
print('0.1.2 alpha.2 Java/Gradle audit: clean (JDK/source/bytecode explicit, Gradle ownership and system-version verification clarified, Android boundary preserved)')
|
|
PYGATE
|
|
|
|
git diff --check
|
|
git add VERSION \
|
|
docs/plans/008-V0_1_2_JAVA_GRADLE_REEVALUATION_PLAN.md \
|
|
docs/rules/520-JAVA_MAVEN_GRADLE.md \
|
|
deltas/0.1.2/alpha.2.md
|
|
git diff --cached --check
|
|
git status --short
|
|
```
|
|
|
|
Le scope indexé attendu avant ajout du history est :
|
|
|
|
```text
|
|
M VERSION
|
|
A deltas/0.1.2/alpha.2.md
|
|
M docs/plans/008-V0_1_2_JAVA_GRADLE_REEVALUATION_PLAN.md
|
|
M docs/rules/520-JAVA_MAVEN_GRADLE.md
|
|
```
|
|
|
|
La revue qualitative doit confirmer que :
|
|
|
|
- aucune version JDK ou Java observée dans Games n'est devenue un minimum général ;
|
|
- un Gradle système reste permis seulement avec une contrainte réellement vérifiée ;
|
|
- le Wrapper reste conditionnel et le Groovy DSL n'est pas privilégié normativement ;
|
|
- `gradle.properties` partagé ne devient pas un emplacement pour secrets ou chemins machine ;
|
|
- les sections Maven n'ont pas acquis de règle provenant d'un corpus qui n'exerce pas Maven ;
|
|
- aucune responsabilité Android n'a été déplacée hors de `610` ou démarrée prématurément dans `0.1.2` ;
|
|
- aucun template, skeleton ou audit supplémentaire n'a été créé pour matérialiser artificiellement la release.
|
|
|
|
## Transition
|
|
|
|
### PASS
|
|
|
|
Produire `history/0.1.2/alpha.2.md`, puis préparer `0.1.2-beta.1` pour la réconciliation finale du profil contre Games, `500-LANGUAGES.md`, `610-ANDROID.md` et les règles générales de validation, ainsi que la décision explicite sur l'absence ou la nécessité d'artefacts supplémentaires.
|
|
|
|
### FAIL
|
|
|
|
Consigner le diagnostic réel dans `history/0.1.2/alpha.2.md` et rester dans `alpha.2.fix.N` sauf REPLAN justifié. Le fix MUST rester borné à la révision Java/Gradle et ne doit pas absorber `beta.1` ou le scope Android `0.1.3`.
|