Files
pgr/deltas/0.1.3/alpha.2.md
2026-09-28 10:41:03 +02:00

8.6 KiB

Delta 0.1.3-alpha.2 — contrats Android de base

Baseline

Ce delta s'applique après :

0.1.3-alpha.1
+ history/0.1.3/alpha.1.md PASS
+ commit/push complet de la tranche alpha.1

Il ne doit pas être appliqué avant l'intégration du history alpha.1.

Objet

Réviser le profil Android uniquement sur les contrats de base démontrés par le corpus Games et confirmés par la documentation Android officielle courante : structure Android-only versus multi-plateforme, composition langage/build, matrice AGP/Gradle/JDK, niveaux SDK, identité applicative, versioning, configuration locale et signing.

Cette tranche ne couvre pas encore NDK/ABI/native packaging, APK/AAB, Android Lint, tests instrumentés, installation/smokes device/AVD ni exigences 16 KB ; ces responsabilités restent réservées à alpha.3.

Modifications

Version

VERSION devient :

0.1.3-alpha.2

Plan Android

docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md passe en révision interne 2 et enregistre :

  • le PASS opérateur réel de alpha.1 ;
  • l'absence de fix avant alpha.2 ;
  • les sources Android officielles vérifiées le 2026-09-28 ;
  • la confirmation que les valeurs Games AGP 9.4.0, Gradle >= 9.6.0 et JDK observé restent des preuves locales et non des minima PGR ;
  • le scope exact de alpha.2 ;
  • le maintien du détail 16 KB dans alpha.3.

Profil Android

docs/rules/610-ANDROID.md passe en révision interne 4.

La révision :

  • conserve Android/ comme convention conditionnelle d'un dépôt multi-plateforme, mais retire gradlew* du layout d'exemple afin de ne plus présenter le Wrapper comme structure obligatoire ;
  • rend le profil Android neutre quant au langage applicatif et applique 520-JAVA.md uniquement lorsque du Java est réellement présent ;
  • distingue le JDK qui exécute Gradle/AGP du niveau Java du code applicatif ;
  • conserve la matrice AGP/Gradle/JDK sans recopier les règles générales possédées par 522-GRADLE.md ;
  • clarifie compileSdk, targetSdk et minSdk comme trois contrats distincts ;
  • remplace l'objectif implicite « minSdk aussi bas que possible » par une décision de compatibilité produit explicitement justifiée ;
  • introduit la séparation explicite entre namespace et applicationId ;
  • conserve VERSION, versionName et versionCode comme contrats distincts selon le release train réellement possédé ;
  • précise que local.properties est réservé à l'environnement local Android/AGP et ne doit pas devenir une source de configuration partagée ou un fourre-tout de propriétés produit ;
  • consolide le traitement des keystores, clés et mots de passe de signing sans recopier l'interdiction générale des secrets ;
  • clarifie que le manifest possède composants/permissions/capabilities tandis que les identités namespace / applicationId restent dans la configuration Android du module.

Aucun template, skeleton, audit Python ou contrat de validation Android n'est créé.

Vérification officielle utilisée

La vérification courante effectuée avant préparation du delta couvre :

Android Gradle plugin 9.4.0 release notes
Configure your build
Java versions in Android builds
Configure the app module
Sign your app

Elle confirme notamment la matrice AGP/Gradle/JDK, la distinction du JDK de build et du niveau Java, les responsabilités compileSdk / targetSdk / minSdk, la séparation namespace / applicationId, le rôle local de local.properties et le caractère secret des clés de signing.

Elle n'est pas utilisée pour normaliser encore la contrainte 16 KB.

Validation opérateur

Après application du history PASS, commit/push de alpha.1, puis application du présent delta :

test "$(cat VERSION)" = '0.1.3-alpha.2'
git cat-file -e HEAD:history/0.1.3/alpha.1.md
test -f history/0.1.3/alpha.1.md
test -f deltas/0.1.3/alpha.2.md
test ! -e history/0.1.3/alpha.2.md

grep -A2 '^## Statut$' history/0.1.3/alpha.1.md | grep -Fx 'PASS'
grep -Fx '<!-- version: 2 -->' docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md
grep -Fx '<!-- version: 4 -->' 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.3/alpha.1.md').read_text(encoding='utf-8')
assert re.search(r'## Statut\s+PASS\s', history)

android = Path('docs/rules/610-ANDROID.md').read_text(encoding='utf-8')
assert android.startswith('<!-- file: docs/rules/610-ANDROID.md -->\n<!-- version: 4 -->')

for phrase in (
    'Android ne sélectionne pas à lui seul le langage applicatif du projet.',
    'JDK qui exécute Gradle / AGP',
    'Le choix de `minSdk` MUST être justifié par le contrat produit',
    '## Identité applicative et namespace',
    '`applicationId` identifie l\'application installée et distribuée.',
    '`local.properties` appartient à l\'environnement local du build Android/AGP',
    'release / upload keystore',
    '`AndroidManifest.xml` MUST déclarer uniquement les composants',
):
    assert phrase in android, phrase

structure = android.split('## Structure du projet', 1)[1].split('## Langage applicatif et logique de build', 1)[0]
assert 'gradlew' not in structure
assert 'settings.gradle(.kts)' in structure
assert '<module>/' in structure

assert 'Java est le langage applicatif Android par défaut du profil PGR' not in android
assert '`minSdk` SHOULD rester aussi bas que raisonnablement supportable' not in android

plan = Path('docs/plans/009-V0_1_3_ANDROID_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`',
    '### Vérification Android officielle courante pour `alpha.2`',
    'AGP `9.4.0` requiert actuellement au minimum Gradle `9.6.0` et JDK `17`',
    'La vérification 16 KB n\'est pas absorbée ici',
    '### Scope arrêté pour `alpha.2`',
):
    assert phrase in plan, phrase

assert not Path('docs/validation/006-ANDROID_VALIDATION.md').exists()
assert not Path('history/0.1.3/alpha.2.md').exists()

for path in (
    'docs/rules/520-JAVA.md',
    'docs/rules/522-GRADLE.md',
    'docs/rules/600-PLATFORMS.md',
):
    assert Path(path).is_file(), path

print('0.1.3 alpha.2 Android base-contract audit: clean (language/build ownership, SDK contracts, app identity, local config and signing clarified)')
PYGATE

git diff --check
git add VERSION \
    docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md \
    docs/rules/610-ANDROID.md \
    deltas/0.1.3/alpha.2.md
git diff --cached --check
git status --short

Le scope indexé attendu avant ajout du history est :

M  VERSION
A  deltas/0.1.3/alpha.2.md
M  docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md
M  docs/rules/610-ANDROID.md

La revue qualitative doit confirmer que :

  • aucun choix Games n'est devenu une règle Android générale par copie de valeur ;
  • Android n'impose plus Java par défaut et ne confond pas JDK de build avec niveau Java applicatif ;
  • l'exemple structurel ne rend ni Wrapper ni Gradle système obligatoire ;
  • minSdk est une décision de compatibilité produit et non un concours vers la valeur la plus basse ;
  • namespace et applicationId sont distingués sans imposer un schéma de nommage propriétaire ;
  • local.properties ne devient pas une configuration partagée et les secrets de signing restent hors Git ;
  • aucun contenu NDK/ABI/16 KB, Tauri ou adoption Games n'a été absorbé prématurément ;
  • aucun artefact supplémentaire n'a été créé uniquement pour remplir la release.

Transition

PASS

Produire history/0.1.3/alpha.2.md, puis préparer 0.1.3-alpha.3 pour les responsabilités conditionnelles NDK/ABI/native packaging, APK/AAB, Android Lint, niveaux de tests, install/smokes device/AVD et contraintes de distribution modernes réellement applicables.

Avant toute règle 16 KB, vérifier explicitement les exigences Android officielles courantes et borner le contrat au canal de distribution et aux artefacts natifs réellement concernés.

FAIL

Consigner le diagnostic réel dans history/0.1.3/alpha.2.md et rester dans alpha.2.fix.N sauf REPLAN justifié. Le fix MUST rester borné aux contrats Android de base et ne doit pas absorber le scope natif/distribution de alpha.3, Tauri 0.1.4 ou l'adoption Games 0.1.5.