# Delta 0.1.3-beta.1 — réconciliation Android et décision finale d'artefacts ## Baseline et version Baseline attendue : commit opérateur de `0.1.3-alpha.3`, réalisé après application de `history/0.1.3/alpha.3.md` avec statut `PASS`. Version avant application : ```text 0.1.3-alpha.3 ``` Version après application : ```text 0.1.3-beta.1 ``` ## Objet Cette tranche exécute la réconciliation prévue après les révisions Android `alpha.2` et `alpha.3`. Elle ne crée aucune nouvelle règle fonctionnelle et ne modifie pas `610-ANDROID.md`. La beta vérifie que le profil révisé reste générique face au corpus Games, se compose correctement avec `400-VALIDATION.md`, `520-JAVA.md`, `522-GRADLE.md` et `600-PLATFORMS.md`, puis tranche explicitement la question des artefacts Android supplémentaires. ## Scope REPLACE : ```text VERSION README.md docs/000-README.md docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md ``` ADD : ```text deltas/0.1.3/beta.1.md ``` DELETE : aucun. Aucun `history/0.1.3/beta.1.md` n'est anticipé. ## Réconciliation contre les owners PGR La revue confirme la composition suivante : ```text 400-VALIDATION.md sélection et autorité générales des preuves 520-JAVA.md Java uniquement lorsqu'il est présent 522-GRADLE.md Gradle uniquement lorsqu'il est utilisé 600-PLATFORMS.md contrat commun des plateformes 610-ANDROID.md spécialisation Android ``` Le profil Android ne recopie donc pas les contrats Java/Gradle généraux et ne transforme pas la présence d'AGP ou d'un JDK de build en applicabilité automatique du profil Java. `400-VALIDATION.md` possède déjà la validation proportionnée et les catégories de preuves. `610-ANDROID.md` ajoute uniquement les responsabilités Android nécessaires pour choisir Lint, tests, packaging, installation et smokes selon le risque. ## Réconciliation contre Games Les choix réutilisables démontrés par Games sont intégrés comme contrats génériques sans reprendre ses valeurs concrètes. Restent explicitement locaux à Games : ```text chemin concret Android/ Groovy DSL Gradle système sans Wrapper AGP 9.4.0 Gradle 9.7.1 / contrainte système >= 9.6.0 JDK 25.0.4.1 Java source/target 17 compileSdk 36 / targetSdk 36 / minSdk 21 NDK r28c arm64-v8a / armeabi-v7a / x86_64 / x86 cargo ndk / bridge JNI / SDL3 / staging jniLibs modules, Activities, labels et assets Games ``` Aucune de ces valeurs n'est promue comme minimum Android PGR. Les deux corrections `OVERRIDE` initiales sont résolues : le Wrapper n'est plus présenté comme élément structurel obligatoire et `minSdk` est un contrat produit explicitement justifié. Le sujet 16 KB, initialement `DEFER`, a été vérifié pendant `alpha.3` puis normalisé uniquement de manière conditionnelle au code natif, au package et au canal de distribution concerné. Les versions d'outils et échéances observées restent des informations datées, pas des defaults universels. ## Décision finale d'artefacts Aucun artefact technique supplémentaire n'est justifié pour `0.1.3`. Ne sont donc pas créés : ```text docs/validation/006-ANDROID_VALIDATION.md skeleton Android template de build Android générique audit Python Android owner JNI / Rust Android / SDL ``` `400 + 600 + 610`, complétés par `520` et `522` lorsqu'ils sont applicables, couvrent déjà les responsabilités réutilisables démontrées. PGR ne possède en outre aucun build Android exécutable qui fournirait aujourd'hui un sujet légitime pour un skeleton, template ou audit spécialisé. Si un nouvel artefact fonctionnel devenait réellement nécessaire, il exigerait un REPLAN vers une tranche alpha dédiée. La beta ne doit pas ajouter opportunément du contenu fonctionnel nouveau. ## Documentation durable La tranche actualise : - le statut racine de la release ; - l'index documentaire `0.1.3` ; - le plan actif avec le `PASS` réel de `alpha.3`, la résolution des classifications et la décision finale d'artefacts. `610-ANDROID.md` reste en révision `5`. `ROADMAP.md`, `CHANGELOG.md`, `RULES.md`, les owners `400/520/522/600`, les skeletons, templates, validations et scripts restent inchangés. Tauri demeure strictement réservé à `0.1.4` et l'adoption Games à `0.1.5`. ## Validation opérateur Après application du history `PASS` de `alpha.3`, commit/push de `alpha.3`, puis application du présent delta : ```bash test "$(cat VERSION)" = '0.1.3-beta.1' git cat-file -e HEAD:history/0.1.3/alpha.3.md test -f history/0.1.3/alpha.3.md test -f deltas/0.1.3/beta.1.md test ! -e history/0.1.3/beta.1.md grep -A2 '^## Statut$' history/0.1.3/alpha.3.md | grep -Fx 'PASS' grep -Fx '' README.md grep -Fx '' docs/000-README.md grep -Fx '' docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md grep -Fx '' docs/rules/610-ANDROID.md grep -Fx '' docs/rules/400-VALIDATION.md grep -Fx '' docs/rules/520-JAVA.md grep -Fx '' docs/rules/522-GRADLE.md grep -Fx '' docs/rules/600-PLATFORMS.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.3.md').read_text(encoding='utf-8') assert re.search(r'## Statut\s+PASS\s', history) validation = Path('docs/rules/400-VALIDATION.md').read_text(encoding='utf-8') java = Path('docs/rules/520-JAVA.md').read_text(encoding='utf-8') gradle = Path('docs/rules/522-GRADLE.md').read_text(encoding='utf-8') platforms = Path('docs/rules/600-PLATFORMS.md').read_text(encoding='utf-8') android = Path('docs/rules/610-ANDROID.md').read_text(encoding='utf-8') plan = Path('docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md').read_text(encoding='utf-8') for phrase in ( 'La validation existe pour fournir une preuve utile proportionnée au changement.', 'BUILD, PACKAGE et PUBLISH', '## Autorité du gate opérateur', ): assert phrase in validation, phrase assert '# Profil Java' in java assert '# Profil Gradle' in gradle assert '# Règles de profils plateforme' in platforms for phrase in ( 'Android ne sélectionne pas à lui seul le langage applicatif du projet.', 'Le choix de `minSdk` MUST être justifié par le contrat produit', 'PGR ne fixe ni version NDK ni liste universelle d\'ABI.', 'PGR MUST NOT supposer qu\'un build Gradle ordinaire exécute Lint automatiquement.', 'Un AAB n\'est pas directement une preuve d\'installation ou d\'exécution sur device.', '## Pages mémoire 16 KB et packaging natif', 'PGR MUST NOT imposer une version AGP/NDK globale uniquement pour cette raison.', ): assert phrase in android, phrase for forbidden in ( 'targetSdk MUST être 36', 'minSdk MUST être 21', 'NDK MUST être r28', 'MUST supporter arm64-v8a, armeabi-v7a, x86_64 et x86', 'Gradle MUST être 9.7.1', 'AGP MUST être 9.4.0', 'JDK MUST être 25', ): assert forbidden not in android, forbidden for phrase in ( '## Décision après `alpha.3` et réconciliation `beta.1`', 'La gate opérateur de `alpha.3` est `PASS`', '### Résolution de la classification initiale', '### Décision finale d\'artefacts Android', 'Aucun artefact technique supplémentaire n\'est justifié pour `0.1.3`.', 'docs/validation/006-ANDROID_VALIDATION.md', '### Frontières après réconciliation', 'Tauri 0.1.4', 'adoption Games 0.1.5', ): assert phrase in plan, phrase assert not Path('docs/validation/006-ANDROID_VALIDATION.md').exists() assert not Path('history/0.1.3/beta.1.md').exists() for forbidden_path in ( 'templates/android', 'docs/skeletons/004-ANDROID.md', 'docs/rules/620-JNI.md', ): assert not Path(forbidden_path).exists(), forbidden_path print('0.1.3 beta.1 reconciliation audit: clean (Android profile generic, Games-local choices preserved, existing owners sufficient, no extra artifacts justified)') PYGATE git diff --check git add README.md VERSION \ docs/000-README.md \ docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md \ deltas/0.1.3/beta.1.md git diff --cached --check git status --short ``` Le scope indexé attendu avant ajout du history est exactement : ```text M README.md M VERSION A deltas/0.1.3/beta.1.md M docs/000-README.md M docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md ``` La revue qualitative doit confirmer que : - aucun choix local Games n'est devenu une règle Android générale ; - les contraintes NDK/ABI/16 KB restent conditionnelles et n'imposent aucune toolchain universelle ; - Java et Gradle restent des profils composés uniquement lorsqu'ils sont applicables ; - `400 + 600 + 610` expriment déjà la validation Android sans contrat séparé redondant ; - aucun skeleton, template, audit ou owner spécialisé n'est ajouté pour satisfaire une structure théorique ; - Tauri `0.1.4` n'est pas commencé et l'adoption Games `0.1.5` reste hors scope ; - aucun `0.1.8` n'est réservé. ## Transition ### PASS Produire `history/0.1.3/beta.1.md`, puis préparer `0.1.3-rc.1` pour geler le scope Android, préparer le changelog candidat et le prompt de reprise `0.1.4`, puis rejouer le release gate complet sans commencer Tauri. ### FAIL Consigner le diagnostic réel dans `history/0.1.3/beta.1.md`, puis produire `beta.1.fix.N` ou effectuer un REPLAN uniquement si un défaut d'ownership, de généricité ou de frontière ne peut pas être corrigé localement sans nouvelle matière fonctionnelle.