diff --git a/CHANGELOG.md b/CHANGELOG.md index 10b8944..ce561d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,5 @@ - + # Changelog Project Governance Rules @@ -7,7 +7,7 @@ Ce fichier décrit les changements utiles aux utilisateurs ou intégrateurs des Les tranches `alpha`, `beta`, `rc`, fixes, validations, audits et détails de développement appartiennent aux plans, deltas et historiques. Ils ne sont pas recopiés ici par défaut. -## 0.1.3 (candidate) +## 0.1.3 - réévalue le profil Android contre le corpus Games réel tout en conservant Android neutre vis-à-vis du langage applicatif et en composant Java/Gradle uniquement lorsqu'ils sont réellement présents ; - clarifie les responsabilités `compileSdk` / `targetSdk` / `minSdk`, l'identité `namespace` / `applicationId`, la configuration locale, le signing et les manifests/resources sans promouvoir les valeurs particulières de Games ; diff --git a/README.md b/README.md index b87e72d..6fe6e3d 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ - + # Project Governance Rules @@ -11,9 +11,9 @@ Le dépôt officiel est `https://git.sasedev.com/Sasedev/pgr`. ## Statut -PGR a clôturé sa phase de fondation `0.0.x`, dispose avec `0.1.0` de sa première baseline réutilisable stable, avec `0.1.1` d’une fondation frontend Web stable et avec `0.1.2` d’owners Java, Maven et Gradle séparés et composables après réévaluation du corpus Games. La release `0.1.3-beta.1` réconcilie maintenant le profil Android révisé contre Games et les owners PGR existants : les choix locaux Games restent locaux, les contraintes natives restent conditionnelles et aucun artefact Android supplémentaire n’est ajouté sans besoin démontré. Tauri reste réservé à `0.1.4` et l’adoption Games à `0.1.5`. +PGR a clôturé sa phase de fondation `0.0.x`, dispose avec `0.1.0` de sa première baseline réutilisable stable, avec `0.1.1` d’une fondation frontend Web stable, avec `0.1.2` d’owners Java, Maven et Gradle séparés et composables, et avec `0.1.3` d’un profil Android réévalué contre Games sans généraliser ses choix locaux. Les contrats SDK, identité, natif/ABI, Lint, tests, packaging et 16 KB sont désormais bornés par leur applicabilité réelle. Tauri reste réservé à `0.1.4` et l’adoption Games à `0.1.5`. -La version courante est définie par [`VERSION`](VERSION). La release `0.0.1` établit la gouvernance normative et documentaire de PGR lui-même. La release `0.0.2` ajoute les premiers profils réutilisables Rust/Cargo, Java/Maven/Gradle et Android, ainsi que deux audits Markdown. La release `0.0.3` fournit les premiers modèles Rust/Cargo, deux audits de style Rust facultatifs, l'audit des headers Markdown et la spécification du message manuel de reprise. La release `0.0.4` définit le contrat transversal des skeleton specifications, ajoute une fondation composable de gouvernance locale et une première spécialisation Rust/Cargo workspace fondée sur les profils `500 + 510` et les cinq templates existants. La release `0.0.5` réconcilie PGR avec les baselines réelles de `khadhroony-solana-project` et `sasedev-games` : prompts versionnés, contrats documentaires locaux, lifecycle inter-release, profil Rust strict et audits monotâches, premier profil Tauri 2 et décision explicite de différer son skeleton complet jusqu'à matérialisation d'owners Web suffisants. La release `0.1.0` stabilise la première baseline réutilisable : adoption `ADOPT / KEEP-LOCAL / OVERRIDE / DEFER`, skeletons/templates Rust/Cargo exercés par dry-run, clôture `rel.N`, handoff opérateur automatique et trajectoire `0.1.1` à `0.1.7` issue d'une revue d'horizon explicite. La release `0.1.1` stabilise la fondation frontend Web : owners indépendants TypeScript/package/Vite/CSS-Sass, déclarations de types externes conditionnelles, package manager neutre, validation frontend indépendante du host et skeleton Web composable, tout en conservant le skeleton Tauri en `DEFER` jusqu’à son réexamen `0.1.4`. La release `0.1.2` stabilise trois owners indépendants `520-JAVA`, `521-MAVEN` et `522-GRADLE`, clarifie JDK/source/bytecode et l'ownership Gradle, conserve Maven cohérent sans corpus artificiel et maintient les responsabilités Android dans `610-ANDROID.md` pour leur réévaluation distincte en `0.1.3`. +La version courante est définie par [`VERSION`](VERSION). La release `0.0.1` établit la gouvernance normative et documentaire de PGR lui-même. La release `0.0.2` ajoute les premiers profils réutilisables Rust/Cargo, Java/Maven/Gradle et Android, ainsi que deux audits Markdown. La release `0.0.3` fournit les premiers modèles Rust/Cargo, deux audits de style Rust facultatifs, l'audit des headers Markdown et la spécification du message manuel de reprise. La release `0.0.4` définit le contrat transversal des skeleton specifications, ajoute une fondation composable de gouvernance locale et une première spécialisation Rust/Cargo workspace fondée sur les profils `500 + 510` et les cinq templates existants. La release `0.0.5` réconcilie PGR avec les baselines réelles de `khadhroony-solana-project` et `sasedev-games` : prompts versionnés, contrats documentaires locaux, lifecycle inter-release, profil Rust strict et audits monotâches, premier profil Tauri 2 et décision explicite de différer son skeleton complet jusqu'à matérialisation d'owners Web suffisants. La release `0.1.0` stabilise la première baseline réutilisable : adoption `ADOPT / KEEP-LOCAL / OVERRIDE / DEFER`, skeletons/templates Rust/Cargo exercés par dry-run, clôture `rel.N`, handoff opérateur automatique et trajectoire `0.1.1` à `0.1.7` issue d'une revue d'horizon explicite. La release `0.1.1` stabilise la fondation frontend Web : owners indépendants TypeScript/package/Vite/CSS-Sass, déclarations de types externes conditionnelles, package manager neutre, validation frontend indépendante du host et skeleton Web composable, tout en conservant le skeleton Tauri en `DEFER` jusqu’à son réexamen `0.1.4`. La release `0.1.2` stabilise trois owners indépendants `520-JAVA`, `521-MAVEN` et `522-GRADLE`, clarifie JDK/source/bytecode et l'ownership Gradle, conserve Maven cohérent sans corpus artificiel et maintient les responsabilités Android dans `610-ANDROID.md` pour leur réévaluation distincte en `0.1.3`. La release `0.1.3` stabilise le profil Android générique : séparation des responsabilités SDK et identité applicative, contraintes natives conditionnelles, Android Lint explicite, niveaux de tests distincts, frontières APK/AAB et compatibilité 16 KB liée au code natif et au canal de distribution, sans imposer les versions ou ABI propres à Games. ## Entrées principales @@ -32,7 +32,7 @@ La version courante est définie par [`VERSION`](VERSION). La release `0.0.1` é - [`docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md`](docs/plans/006-V0_1_0_REUSABLE_BASELINE_PLAN.md) — plan historique de la première baseline réutilisable `0.1.0` ; - [`docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md`](docs/plans/007-V0_1_1_WEB_FRONTEND_FOUNDATION_PLAN.md) — plan historique de la fondation frontend Web stable `0.1.1` ; - [`docs/plans/008-V0_1_2_JAVA_GRADLE_REEVALUATION_PLAN.md`](docs/plans/008-V0_1_2_JAVA_GRADLE_REEVALUATION_PLAN.md) — plan historique de la stable `0.1.2` : réévaluation Games, scission Java/Maven/Gradle et maintien d'Android hors scope ; -- [`docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md`](docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md) — plan actif de la réévaluation pratique Android `0.1.3`, fondé sur Games avec classification `ADOPT / KEEP-LOCAL / OVERRIDE / DEFER` ; +- [`docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md`](docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md) — plan historique de la stable Android `0.1.3`, fondée sur Games avec classification `ADOPT / KEEP-LOCAL / OVERRIDE / DEFER` ; - [`docs/studies/001-KSP_GAMES_RECONCILIATION.md`](docs/studies/001-KSP_GAMES_RECONCILIATION.md) — étude de réconciliation et classification des écarts entre PGR, KSP et Games ; - [`docs/skeletons/000-README.md`](docs/skeletons/000-README.md) — index des skeleton specifications et de leur contrat de composition ; - [`docs/skeletons/001-PROJECT_GOVERNANCE_FOUNDATION.md`](docs/skeletons/001-PROJECT_GOVERNANCE_FOUNDATION.md) — fondation composable de gouvernance locale pour un projet adoptant PGR ; diff --git a/ROADMAP.md b/ROADMAP.md index 63685cc..4c0d79b 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,5 +1,5 @@ - + # Roadmap Project Governance Rules @@ -25,7 +25,7 @@ La revue d'horizon de `0.1.0-beta.1` engage les releases suivantes, chacune avec - `(x) 0.1.1` — fondation frontend Web : TypeScript, Vite, Sass/CSS, package/build outputs et validation frontend indépendante ; - `(x) 0.1.2` — réévaluation pratique de Java/Maven/Gradle, séparation des owners lorsque leurs applicabilités divergent et matérialisation uniquement des artefacts génériques réellement nécessaires ; -- `( ) 0.1.3` — réévaluation pratique du profil Android existant à partir de Games, sans absorber les décisions propres aux jeux ou à SDL ; +- `(x) 0.1.3` — réévaluation pratique du profil Android existant à partir de Games, sans absorber les décisions propres aux jeux ou à SDL ; - `( ) 0.1.4` — domaine Tauri : réexamen du `DEFER` et matérialisation du skeleton contrôlé seulement si les owners Web issus de `0.1.1` satisfont réellement les conditions de sortie ; - `( ) 0.1.5` — adoption réelle de PGR par `sasedev-games` avec mapping `ADOPT / KEEP-LOCAL / OVERRIDE / DEFER` ; - `( ) 0.1.6` — adoption réelle de PGR par `khadhroony-solana-project`, principalement sur Rust/Cargo + Tauri et sans dépendance aux profils non applicables ; diff --git a/VERSION b/VERSION index b9f8742..b1e80bb 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.1.3-rc.1 +0.1.3 diff --git a/deltas/0.1.3/rel.1.md b/deltas/0.1.3/rel.1.md new file mode 100644 index 0000000..81bad02 --- /dev/null +++ b/deltas/0.1.3/rel.1.md @@ -0,0 +1,288 @@ + + + +# Delta 0.1.3 rel.1 — promotion stable pré-tag + +## Baseline et version + +Baseline : `0.1.3-rc.1`, avec `history/0.1.3/rc.1.md` appliqué et committé. Ce delta MUST NOT être appliqué avant ce commit. + +Version avant application : + +```text +0.1.3-rc.1 +``` + +Version après application : + +```text +0.1.3 +``` + +`rel.1` identifie la clôture opérationnelle ; il ne fait pas partie de la version SemVer du produit. + +## Objet + +Promouvoir mécaniquement la RC validée vers la stable `0.1.3` sans rouvrir le scope fonctionnel. + +La tranche finalise uniquement la présentation et les métadonnées de release : version stable, roadmap terminée, changelog sans marqueur `candidate`, README/index en état stable et plan `009` historique. Aucun owner Android/Java/Gradle/Tauri, template, skeleton, validation, étude technique ou script d'audit n'est modifié. + +La validation de cette tranche est **pré-tag**. Le tag `v0.1.3`, son archive source Gitea et le rapport `pgr-0.1.3-publish.001-report.md` ne sont pas déclarés existants par ce delta. Ils suivent uniquement un history `rel.1` `PASS`, le commit stable `0.1.3` et la publication réelle du tag. + +## Scope + +REPLACE : + +```text +VERSION +README.md +ROADMAP.md +CHANGELOG.md +docs/000-README.md +docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md +``` + +ADD : + +```text +deltas/0.1.3/rel.1.md +``` + +DELETE : aucun. + +Le history `rc.1` est livré séparément. Le history `rel.1` sera produit uniquement après la gate opérateur. + +## Validation opérateur pré-tag + +Après application sur le commit contenant `history/0.1.3/rc.1.md` : + +```bash +test "$(cat VERSION)" = '0.1.3' +git cat-file -e HEAD:history/0.1.3/rc.1.md +test -f history/0.1.3/rc.1.md +test -f deltas/0.1.3/rel.1.md +test -f prompts/010-V0_1_4_START_PROMPT.md +test ! -e history/0.1.3/rel.1.md + +grep -A2 '^## Statut$' history/0.1.3/rc.1.md | grep -Fx 'PASS' +grep -Fx '' README.md +grep -Fx '' ROADMAP.md +grep -Fx '' CHANGELOG.md +grep -Fx '' docs/000-README.md +grep -Fx '' docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md +grep -F -- '- `(x) 0.1.3`' ROADMAP.md +grep -Fx '## 0.1.3' CHANGELOG.md +grep -F 'avec `0.1.3` d’un profil Android réévalué contre Games' README.md +grep -F 'plan historique de la stable `0.1.3`' docs/000-README.md + +python3 -B - <<'PYGATE' +from pathlib import Path +import re + +expected = { + "alpha.1.md": "PASS", + "alpha.2.md": "PASS", + "alpha.3.md": "PASS", + "beta.1.md": "PASS", + "rc.1.md": "PASS", +} + +for name, status in expected.items(): + delta = Path("deltas/0.1.3", name) + history = Path("history/0.1.3", name) + assert delta.is_file(), name + assert history.is_file(), name + text = history.read_text(encoding="utf-8") + assert re.search(rf"## Statut\s+{status}\s", text), (name, status) + +pending = {path.name for path in Path("deltas/0.1.3").glob("*.md")} - { + path.name for path in Path("history/0.1.3").glob("*.md") +} +assert pending == {"rel.1.md"}, pending + +roadmap = Path("ROADMAP.md").read_text(encoding="utf-8") +assert "- `(x) 0.1.3`" in roadmap +for version in ("0.1.4", "0.1.5", "0.1.6", "0.1.7"): + assert f"- `( ) {version}`" in roadmap, version +assert "- `( ) 0.1.8`" not in roadmap +assert "skeleton Tauri jusqu'au réexamen 0.1.4" in roadmap + +changelog = Path("CHANGELOG.md").read_text(encoding="utf-8") +assert "## 0.1.3" in changelog.splitlines() +assert "## 0.1.3 (candidate)" not in changelog +section = changelog.split("## 0.1.3", 1)[1].split("## 0.1.2", 1)[0] +for phrase in ( + "profil Android", + "compileSdk", + "targetSdk", + "minSdk", + "namespace", + "applicationId", + "NDK", + "Android Lint", + "tests instrumentés", + "APK/AAB", + "16 KB", + "0.1.4", + "0.1.5", +): + assert phrase in section, phrase +for forbidden in ("alpha.1", "alpha.2", "alpha.3", "beta.1", "rc.1", "rel.1"): + assert forbidden not in section, forbidden + +readme = Path("README.md").read_text(encoding="utf-8") +assert "avec `0.1.3` d’un profil Android réévalué contre Games" in readme +assert "plan historique de la stable Android `0.1.3`" in readme + +index = Path("docs/000-README.md").read_text(encoding="utf-8") +assert "plan historique de la stable `0.1.3`" in index +assert "à exécuter uniquement après publication et vérification post-tag de `v0.1.3`" in index + +plan = Path("docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md").read_text(encoding="utf-8") +assert "Plan 0.1.3 — réévaluation pratique Android" in plan +assert "### rc.1 — release candidate\n\nStatut opérateur : **PASS**." in plan +assert "history/0.1.3/rel.1.md" in plan +assert "pgr-0.1.3-publish.001-report.md" in plan +assert "commit `0.1.3` avant le tag `v0.1.3`" in plan +assert "plan historique de la stable `0.1.3`" in plan + +prompt = Path("prompts/010-V0_1_4_START_PROMPT.md").read_text(encoding="utf-8") +for phrase in ( + "tag Gitea `v0.1.3`", + "pgr-0.1.3-publish.001-report.md", + "0.1.4-alpha.1", + "002-TAURI_SKELETON_DECISION.md", + "710-TAURI.md", + "003-WEB_FRONTEND", + "ADOPT / KEEP-LOCAL / OVERRIDE / DEFER", + "adoption Games `0.1.5`", + "adoption KSP `0.1.6`", +): + assert phrase in prompt, phrase + +for path, version in ( + ("docs/rules/400-VALIDATION.md", 1), + ("docs/rules/520-JAVA.md", 4), + ("docs/rules/522-GRADLE.md", 1), + ("docs/rules/600-PLATFORMS.md", 1), + ("docs/rules/610-ANDROID.md", 5), + ("docs/rules/710-TAURI.md", 6), + ("docs/studies/002-TAURI_SKELETON_DECISION.md", 2), + ("docs/skeletons/003-WEB_FRONTEND.md", 1), + ("docs/validation/005-WEB_FRONTEND_VALIDATION.md", 1), +): + lines = Path(path).read_text(encoding="utf-8").splitlines() + assert lines[1] == f"", (path, lines[1]) + +android = Path("docs/rules/610-ANDROID.md").read_text(encoding="utf-8") +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 forbidden_path in ( + "docs/validation/006-ANDROID_VALIDATION.md", + "docs/skeletons/004-ANDROID.md", + "docs/rules/620-JNI.md", + "docs/skeletons/004-TAURI.md", +): + assert not Path(forbidden_path).exists(), forbidden_path + +workflow = Path("docs/rules/210-WORKFLOW.md").read_text(encoding="utf-8") +assert "history rel.1 FAIL / PARTIAL / BLOCKED" in workflow +assert "premier history rel.N[/fix.M] PASS qui établit réellement la stable" in workflow +assert "commit X.Y.Z" in workflow + +print("0.1.3 rel.1 stable gate audit: clean (5 prior histories, rel.1 pending, stable Android presentation and post-tag Tauri handoff coherent)") +PYGATE + +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 - <<'PYHYGIENE' +from pathlib import Path +import json +import tomllib + +for path in sorted(Path("templates/rust-cargo").rglob("*.toml")): + tomllib.loads(path.read_text(encoding="utf-8")) + +json.loads(Path("templates/web-typescript/package.json").read_text(encoding="utf-8")) +json.loads(Path("templates/web-typescript/tsconfig.json").read_text(encoding="utf-8")) + +roots = ( + Path("VERSION"), Path("README.md"), Path("RULES.md"), Path("ROADMAP.md"), Path("CHANGELOG.md"), + Path("docs"), Path("deltas"), Path("history"), Path("prompts"), Path("templates"), +) +files = [] +for root in roots: + if root.is_file(): + files.append(root) + elif root.is_dir(): + files.extend(path for path in root.rglob("*") if path.is_file()) +for path in files: + try: + data = path.read_bytes() + text = data.decode("utf-8") + except UnicodeDecodeError: + continue + assert b"\r" not in data, path + assert text.endswith("\n"), path + for number, line in enumerate(text.splitlines(), 1): + assert line == line.rstrip(" \t"), (path, number) +print("0.1.3 rel.1 text/template hygiene: clean") +PYHYGIENE + +git diff --check +git add VERSION README.md ROADMAP.md CHANGELOG.md docs/000-README.md \ + docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md \ + deltas/0.1.3/rel.1.md +git diff --cached --check +git status --short +``` + +Le scope attendu avant ajout du history est exactement : + +```text +M CHANGELOG.md +M README.md +M ROADMAP.md +M VERSION +A deltas/0.1.3/rel.1.md +M docs/000-README.md +M docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md +``` + +La RC a déjà reconfirmé le profil Android gelé, les frontières Tauri/Games/KSP, le contrat du prompt `010` et l'absence d'artefacts Android supplémentaires. Comme `rel.1` ne modifie aucun artefact technique, la promotion stable rejoue les tests PGR, les audits documentaires et l'hygiène des templates sans simuler une toolchain Android absente du dépôt. + +## Revue opérateur complémentaire + +Confirmer que : + +- `0.1.3` est bien présenté comme stable partout où la RC était auparavant candidate ; +- aucun changement fonctionnel Android n'est entré dans `rel.1` ; +- `0.1.4` reste le réexamen Tauri, sans création anticipée du skeleton ; +- `0.1.5` et `0.1.6` restent respectivement les adoptions Games et KSP ; +- le tag et le rapport post-tag ne sont pas anticipés dans le dépôt pré-tag. diff --git a/docs/000-README.md b/docs/000-README.md index bc8a76e..240d1f1 100644 --- a/docs/000-README.md +++ b/docs/000-README.md @@ -1,5 +1,5 @@ - + # Documentation PGR @@ -22,7 +22,7 @@ Les templates techniques copiables sous `templates/` restent séparés des instr ## Points d'entrée de 0.1.3 -- [`plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md`](plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md) — plan actif de la réévaluation Android ; `beta.1` est `PASS` et `rc.1` gèle le scope avant promotion stable. +- [`plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md`](plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md) — plan historique de la stable `0.1.3`, de l'audit Games à la stabilisation du profil Android générique et au handoff Tauri `0.1.4`. - [`rules/610-ANDROID.md`](rules/610-ANDROID.md) — owner Android révisé : contrats SDK/identité/signing, natif/ABI, Lint, niveaux de tests, packaging/distribution et 16 KB conditionnel, sans absorber les choix propres à Games. - [`rules/520-JAVA.md`](rules/520-JAVA.md) et [`rules/522-GRADLE.md`](rules/522-GRADLE.md) — owners composés uniquement lorsqu'un projet Android contient réellement du Java ou utilise Gradle. - [`rules/600-PLATFORMS.md`](rules/600-PLATFORMS.md) et [`rules/400-VALIDATION.md`](rules/400-VALIDATION.md) — contrats généraux de plateforme et de preuve auxquels la spécialisation Android doit rester conforme. diff --git a/docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md b/docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md index ca123d4..cab6d57 100644 --- a/docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md +++ b/docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md @@ -1,5 +1,5 @@ - + # Plan 0.1.3 — réévaluation pratique Android @@ -563,17 +563,19 @@ La gate beta confirme `48/48` tests Python, les trois audits Markdown, la récon ### rc.1 — release candidate -Statut opérateur : **à valider**. +Statut opérateur : **PASS**. -Geler le scope Android, préparer le changelog candidat et `prompts/010-V0_1_4_START_PROMPT.md` sans commencer Tauri. Rejouer les validations PGR de release et vérifier les frontières `0.1.4` / `0.1.5`. +La gate RC a confirmé les quatre histories antérieurs `PASS`, le profil Android gelé en révision `5`, le changelog candidat, le prompt `010`, les `48/48` tests, les trois audits Markdown et l'hygiène texte/templates. Aucun owner Android/Java/Gradle/Tauri, template, skeleton, validation, étude technique ou script n'a été modifié pendant la RC. -Aucune nouvelle fonctionnalité normative Android ne doit apparaître en RC. Le profil `610-ANDROID.md` reste en révision `5`; la RC ne fait qu'établir la présentation candidate, le handoff vers `0.1.4` et les preuves de cohérence de release. +Le prompt `010-V0_1_4_START_PROMPT.md` conserve la frontière de release : le réexamen Tauri démarre en `0.1.4` seulement depuis une stable `v0.1.3` réellement taggée et son rapport post-tag `PASS`; l'adoption Games reste `0.1.5` et l'adoption KSP `0.1.6`. ### rel.1 — promotion stable -Promouvoir mécaniquement `0.1.3` après RC `PASS` : version stable, roadmap, changelog, README/index et plan historique. Aucun nouveau changement fonctionnel Android ne doit entrer dans la clôture. +Première clôture stable de `0.1.3`. La promotion est strictement mécanique : `VERSION = 0.1.3`, `ROADMAP.md` marque `0.1.3` terminée, le `CHANGELOG` perd son marqueur `candidate`, README/index décrivent la réévaluation Android comme stable et le présent plan devient historique. Aucun owner Android/Java/Gradle/Tauri, template, skeleton, validation, étude technique ou script n'est modifié. -La preuve post-tag reste séparée et doit être produite depuis l'archive du tag `v0.1.3` réellement publiée avant de démarrer `0.1.4`. +Le résultat opérateur de cette tranche appartient à `history/0.1.3/rel.1.md`, créé seulement après exécution de la gate. Si `rel.1` échoue, son history est conservé et un `rel.1.fix.N` corrige uniquement la fermeture ; la première tranche qui établit réellement la stable est incluse dans le commit `0.1.3` avant le tag `v0.1.3`. + +La vérification post-tag reste séparée : `pgr-0.1.3-publish.001-report.md` ne peut être produit qu'à partir de l'archive du tag réellement publiée et des preuves Git observées. Le prompt `010` ne devient le point de départ effectif de `0.1.4` qu'après cette preuve post-tag `PASS`. ## Stratégie de validation @@ -604,6 +606,8 @@ Un REPLAN ne sert pas à ajouter des artefacts pour remplir la release ; il corr La roadmap possède déjà un horizon suffisant jusqu'à `0.1.7`. Aucune nouvelle release n'est réservée par `0.1.3-alpha.1`. +Le présent document devient le plan historique de la stable `0.1.3`. La publication du tag et sa vérification post-tag restent séparées de cette clôture pré-tag. + La prochaine release après publication vérifiée de `0.1.3` reste : ```text diff --git a/history/0.1.3/rel.1.md b/history/0.1.3/rel.1.md new file mode 100644 index 0000000..9aef03d --- /dev/null +++ b/history/0.1.3/rel.1.md @@ -0,0 +1,149 @@ + + + +# History 0.1.3-rel.1 — promotion stable pré-tag + +## Statut + +PASS + +La gate opérateur de `0.1.3-rel.1` exécutée le `2026-09-28` a réussi. Elle confirme la promotion mécanique de la release candidate vers la stable `0.1.3`, la cohérence des histories antérieurs, la présentation stable du profil Android, les tests PGR, les audits documentaires et l'hygiène texte/templates avant création du tag. + +## Baseline opérateur + +La tranche `0.1.3-rc.1` a été clôturée avec son history `PASS`, puis committée et poussée avant application de `rel.1` : + +```text +commit a9fba6c +message 0.1.3-rc.1 +push origin/master PASS +``` + +Après application du delta `rel.1`, les contrôles initiaux ont confirmé : + +```text +VERSION 0.1.3 +history/0.1.3/rc.1.md présent dans HEAD et le workspace +deltas/0.1.3/rel.1.md présent +prompts/010-V0_1_4_START_PROMPT.md présent +history/0.1.3/rel.1.md absent pendant la gate +README.md version 25 +ROADMAP.md version 15 +CHANGELOG.md version 17 +docs/000-README.md version 40 +docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md version 6 +``` + +Le history `rc.1` a été retrouvé avec statut `PASS`. + +La présentation stable est établie : + +```text +ROADMAP.md 0.1.3 marqué terminé +CHANGELOG.md entrée `## 0.1.3` sans suffixe `(candidate)` +README.md profil Android réévalué contre Games présenté comme stable +docs index plan 009 classé historique +``` + +## Gate stable pré-tag + +Le contrôle structurel a affiché : + +```text +0.1.3 rel.1 stable gate audit: clean (5 prior histories, rel.1 pending, stable Android presentation and post-tag Tauri handoff coherent) +``` + +Il a vérifié les cinq histories antérieurs avec statut `PASS` : + +```text +alpha.1 PASS +alpha.2 PASS +alpha.3 PASS +beta.1 PASS +rc.1 PASS +``` + +Avant application du présent history, `rel.1.md` est la seule tranche `0.1.3` possédant un delta sans history. + +La gate a également confirmé : + +- `0.1.3` terminé dans la roadmap ; +- `0.1.4` à `0.1.7` engagés sans réservation de `0.1.8` ; +- le `CHANGELOG` stable sans suffixe `(candidate)` et sans détails de tranches ; +- le plan `009` classé historique ; +- le profil Android `610-ANDROID.md` gelé en révision `5` ; +- l'absence de généralisation de `targetSdk 36`, `minSdk 21`, NDK r28, quatre ABI, Gradle 9.7.1, AGP 9.4.0 ou JDK 25 ; +- la composition Android avec les owners génériques existants sans création d'owner JNI/Rust/SDL, de skeleton Android ni de contrat de validation redondant ; +- les contrats Android stabilisés pour SDK, identité applicative, natif/ABI, Android Lint, niveaux de tests, APK/AAB et contraintes 16 KB conditionnelles ; +- `0.1.4` réservé au réexamen Tauri, sans création anticipée du skeleton ; +- `0.1.5` et `0.1.6` réservés respectivement aux adoptions Games et KSP ; +- le prompt `010` préparé pour démarrer `0.1.4` uniquement depuis le tag réel `v0.1.3` et un rapport post-tag `publish.001` `PASS` ; +- la convention de clôture `rel.N`, puis commit stable `X.Y.Z` avant création du tag. + +## Validation Android + +Les décisions Android issues du corpus Games ont été réconciliées avant la RC et `rel.1` n'a modifié aucun owner technique. + +La promotion stable n'a donc pas simulé de toolchain Android, Gradle, AGP, JDK ou NDK absente du dépôt PGR. Elle a rejoué les gates réellement possédées par PGR afin de vérifier que la promotion documentaire et les métadonnées de release n'ont invalidé aucune propriété du référentiel. + +Les choix Games qui restent locaux n'ont pas été promus en minima PGR universels et aucun artefact Android supplémentaire n'a été créé pendant la clôture. + +## Tests et audits PGR + +La suite Python globale a exécuté `48` tests, tous réussis : + +```text +Ran 48 tests in 0.735s + +OK +``` + +Les audits documentaires sont propres : + +```text +Markdown header audit: clean (263 file(s)) +Markdown table audit: clean (11 table(s), 263 file(s)) +Markdown link audit: clean (337 local link(s), 263 file(s)) +``` + +L'hygiène texte/templates a également affiché : + +```text +0.1.3 rel.1 text/template hygiene: clean +``` + +Les templates TOML Rust/Cargo et JSON Web ont été parsés avec succès ; aucun retour chariot, whitespace final ni fichier texte sans newline finale n'a été détecté dans le corpus contrôlé. + +## Contrôles Git + +`git diff --check` et `git diff --cached --check` n'ont produit aucun diagnostic. + +Le statut indexé transmis avant ajout du présent history est exactement : + +```text +M CHANGELOG.md +M README.md +M ROADMAP.md +M VERSION +A deltas/0.1.3/rel.1.md +M docs/000-README.md +M docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md +``` + +Le scope correspond exactement à la promotion stable annoncée. Aucun owner Android/Java/Gradle/Tauri, template, skeleton, validation, étude technique ou script d'audit n'a été modifié pendant `rel.1`. + +## Décision + +`0.1.3-rel.1` est `PASS`. Aucun fix ni REPLAN n'est requis. + +Conformément à la convention stable PGR, le présent history doit être inclus dans le commit final nommé exactement : + +```text +0.1.3 +``` + +Le commit stable doit être poussé sur `origin/master` avant création du tag annoté `v0.1.3`. + +Le rapport `pgr-0.1.3-publish.001-report.md` ne pourra être produit qu'après réception des preuves post-publication réelles : identité du commit stable, propreté du workspace, objet et cible déréférencée du tag local, références distantes du tag et archive ZIP téléchargée depuis le tag Gitea. + +Le prompt `010-V0_1_4_START_PROMPT.md` ne devient la reprise effective de `0.1.4` qu'après un rapport post-tag `PASS`.