Files
pgr/deltas/0.1.3/alpha.1.md
2026-09-28 10:28:40 +02:00

248 lines
11 KiB
Markdown

<!-- file: deltas/0.1.3/alpha.1.md -->
<!-- version: 1 -->
# Delta 0.1.3-alpha.1 — audit de stable et cadrage Android
## Baseline et sources
Baseline PGR autoritaire : archive source téléchargée depuis le tag Gitea `v0.1.2`, accompagnée du rapport externe `pgr-0.1.2-publish.001-report.md` avec statut `PASS`.
SHA-256 vérifiés sur les fichiers réellement fournis :
```text
pgr-v0.1.2(1).zip 0ef8facab0c6f92ca427f5f13d38d6c4a4c1cc16174a20ecdab48991bd88d0e6
pgr-0.1.2-publish.001-report.md 0f6b4e2a685a957fa647a7db009320ada0fc67948737d8344cc3773bcaeb6a9c
games-v0.3.6(2).zip ad6e44a1332eb7d6069cf1189d9433f0fbb8fac19c5aac9f4641ac45c1c556e8
```
Les archives locales PGR et Games comportent respectivement `(1)` et `(2)` dans leur nom, mais leurs empreintes correspondent exactement aux baselines canoniques `pgr-v0.1.2.zip` et `games-v0.3.6.zip` attendues par le rapport/prompt.
Version avant application :
```text
0.1.2
```
Version après application :
```text
0.1.3-alpha.1
```
## Objet
Exécuter `prompts/009-V0_1_3_START_PROMPT.md` : vérifier intégralement la stable `v0.1.2` et son rapport post-tag, auditer le corpus Games autoritaire sur Android et ses preuves historiques, relire `610-ANDROID.md`, `520-JAVA.md`, `522-GRADLE.md`, `600-PLATFORMS.md`, la validation générale et la revue d'horizon, puis créer le plan `0.1.3` avant toute normalisation Android importante.
`alpha.1` reste un gate de cadrage. Aucune règle Android, règle Java/Gradle, validation spécialisée, template, skeleton ou audit nouveau n'est encore créé ou modifié.
## Résultat de l'audit d'intake
La stable PGR et son rapport post-tag concordent : SHA-256 attendu, CRC propre, racine unique `pgr/`, `316` entrées, `276` fichiers, `40` répertoires, aucun symlink, absence normale de `.git` et `VERSION=0.1.2`.
Le rapport `publish.001` est `PASS` et confirme le commit stable `585b508578aae337f6940110d4ca47c694a052d5`, l'objet tag annoté `cea2c7a06cde844ffa7411f73bb22685a3214414` et la déréférence de `v0.1.2` vers le commit stable.
La suite PGR donne `48/48` tests `PASS`. Les audits Markdown sont propres : `250` fichiers pour les headers, `10` tables sur `250` fichiers et `307` liens locaux sur `250` fichiers. Les templates TOML Rust/Cargo et JSON Web contrôlés sont parsables.
Les `90` couples delta/history de `0.0.1` à `0.1.2` sont complets. Les sept histories `0.1.2` sont tous `PASS`, y compris `alpha.2.fix.1` qui conserve la récupération historique de contamination inter-projet.
Le corpus Games fourni possède exactement le SHA canonique attendu, `652` entrées, `502` fichiers, `150` répertoires et aucun symlink. Ses audits statiques principaux sont propres : règles Rust, exports, workspace, tableaux Markdown et layout de distribution.
Le sous-projet Android natif exerce un build Gradle multi-module sous `Android/` avec `common`, `game-reflex-poc` et `game-snake-poc`, quatre sources Java, manifests/resources, namespaces/application IDs, configuration locale ignorée et scripts Gradle communs.
La baseline Games utilise AGP `9.4.0`, Gradle système `>= 9.6.0`, JDK de build compatible `>= 17`, niveau Java source/target `17`, `compileSdk 36`, `targetSdk 36`, `minSdk 21`, NDK `28.2.13676358` et SDL3 `3.4.16`. Ces valeurs restent des décisions et preuves Games, pas des minima PGR.
Les histories Games démontrent le passage d'une preuve initiale Wrapper/JDK 17 vers un Gradle système avec minimum exécutable et JDK courant, puis des builds réels avec Temurin `25.0.4.1 LTS` + Gradle `9.7.1` tout en conservant Java `17` comme niveau source/target.
Le pipeline natif Games exerce `cargo ndk`, JNI, SDL3 et quatre ABI (`arm64-v8a`, `armeabi-v7a`, `x86_64`, `x86`). Les histories prouvent APK Debug, AAB Release, contenu natif packagé, smokes AVD x86_64 et appareil ARM64 réel, runtime API 21 ainsi qu'une preuve `PAGE_SIZE=16384` sur Android 15/API 35 x86_64.
Ces responsabilités spécialisées ne sont pas copiées dans PGR. Le plan classe les décisions avec `ADOPT / KEEP-LOCAL / OVERRIDE / DEFER`, conserve Tauri en `DEFER` jusqu'à `0.1.4`, l'adoption Games jusqu'à `0.1.5` et prévoit une vérification des exigences Android officielles courantes avant toute normalisation de contraintes évolutives telles que 16 KB.
## Scope
REPLACE :
```text
VERSION
README.md
docs/000-README.md
```
ADD :
```text
docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md
deltas/0.1.3/alpha.1.md
```
DELETE : aucun.
`RULES.md`, `ROADMAP.md`, `CHANGELOG.md`, `docs/rules/610-ANDROID.md`, `docs/rules/520-JAVA.md`, `docs/rules/522-GRADLE.md`, `docs/rules/600-PLATFORMS.md`, les autres règles, templates, skeletons, validations, scripts, studies, prompts et histories existants restent inchangés dans `alpha.1`.
Aucun `history/0.1.3/alpha.1.md` n'est anticipé avant la gate opérateur.
## Validation opérateur
Après application sur la stable `0.1.2`, depuis la racine du dépôt :
```bash
test "$(cat VERSION)" = '0.1.3-alpha.1'
test -f docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md
test -f deltas/0.1.3/alpha.1.md
test ! -e history/0.1.3/alpha.1.md
grep -Fx '<!-- version: 23 -->' README.md
grep -Fx '<!-- version: 37 -->' docs/000-README.md
grep -F '009-V0_1_3_ANDROID_REEVALUATION_PLAN.md' README.md docs/000-README.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 - <<'PY'
from pathlib import Path
import re
expected = {
'0.0.1': 12,
'0.0.2': 12,
'0.0.3': 10,
'0.0.4': 9,
'0.0.5': 19,
'0.1.0': 10,
'0.1.1': 11,
'0.1.2': 7,
}
for release, count in expected.items():
deltas = {path.name for path in Path('deltas', release).glob('*.md')}
histories = {path.name for path in Path('history', release).glob('*.md')}
assert len(deltas) == count, (release, len(deltas))
assert deltas == histories, (release, sorted(deltas ^ histories))
statuses = {}
for path in Path('history/0.1.2').glob('*.md'):
text = path.read_text(encoding='utf-8')
match = re.search(r'## Statut\s+(?:`?)(PASS|FAIL|PARTIAL|BLOCKED)', text)
assert match is not None, path
statuses[path.name] = match.group(1)
assert len(statuses) == 7, statuses
assert set(statuses.values()) == {'PASS'}, statuses
assert statuses['alpha.2.fix.1.md'] == 'PASS'
assert statuses['rel.1.md'] == 'PASS'
roadmap = Path('ROADMAP.md').read_text(encoding='utf-8')
assert '- `(x) 0.1.2`' in roadmap
for release in range(3, 8):
assert f'- `( ) 0.1.{release}`' in roadmap, release
assert '0.1.8' not in roadmap
assert 'skeleton Tauri jusqu\'au réexamen 0.1.4' in roadmap
prompt = Path('prompts/009-V0_1_3_START_PROMPT.md').read_text(encoding='utf-8')
for phrase in (
'Version cible : `0.1.3`',
'Première tranche attendue : `0.1.3-alpha.1`',
'ad6e44a1332eb7d6069cf1189d9433f0fbb8fac19c5aac9f4641ac45c1c556e8',
'ADOPT / KEEP-LOCAL / OVERRIDE / DEFER',
'structure `Android/`',
'compileSdk`, `targetSdk` et `minSdk',
'alignement mémoire/16 KB',
'skeleton Tauri, réservé à `0.1.4`',
"démarrer l'adoption Games `0.1.5`",
):
assert phrase in prompt, phrase
android = Path('docs/rules/610-ANDROID.md').read_text(encoding='utf-8')
assert android.startswith('<!-- file: docs/rules/610-ANDROID.md -->\n<!-- version: 3 -->')
for phrase in (
'Android n\'implique pas à lui seul l\'applicabilité du profil Java.',
'Matrice AGP / Gradle / JDK',
'`compileSdk`, `targetSdk` et `minSdk`',
'ABI et code natif',
'Niveaux de tests Android',
'APK, AAB et artefacts de distribution',
):
assert phrase in android, phrase
assert Path('docs/rules/520-JAVA.md').read_text(encoding='utf-8').startswith(
'<!-- file: docs/rules/520-JAVA.md -->\n<!-- version: 4 -->'
)
assert Path('docs/rules/522-GRADLE.md').read_text(encoding='utf-8').startswith(
'<!-- file: docs/rules/522-GRADLE.md -->\n<!-- version: 1 -->'
)
assert Path('docs/rules/600-PLATFORMS.md').read_text(encoding='utf-8').startswith(
'<!-- file: docs/rules/600-PLATFORMS.md -->\n<!-- version: 1 -->'
)
plan = Path('docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md').read_text(encoding='utf-8')
for phrase in (
'Classification initiale des décisions Games',
'`ADOPT`',
'`KEEP-LOCAL`',
'`OVERRIDE`',
'`DEFER`',
'alpha.2 — structure, composition et contrats Android de base',
'alpha.3 — natif, packaging, distribution et validation',
'beta.1 — réconciliation et décision d\'artefacts',
'AGP `9.4.0`',
'Gradle système `>= 9.6.0`',
'NDK `r28c`',
'PAGE_SIZE=16384',
'documentation Android officielle courante',
'0.1.4 — domaine Tauri',
'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/alpha.1.md').exists()
print('0.1.3 alpha.1 structural audit: clean (90 prior pairs, Games Android classified, Tauri/adoption boundaries preserved)')
PY
git diff --check
git add VERSION README.md docs/000-README.md \
docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md \
deltas/0.1.3/alpha.1.md
git diff --cached --check
git status --short
```
Le scope indexé attendu avant ajout du history est :
```text
M README.md
M VERSION
A deltas/0.1.3/alpha.1.md
M docs/000-README.md
A docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md
```
La revue opérateur doit également confirmer que :
- `alpha.1` n'a pas modifié `610-ANDROID.md` avant validation du cadrage ;
- les versions exactes Games (AGP/Gradle/JDK/SDK/NDK/SDL3) restent des preuves ou choix locaux, pas des contraintes PGR universelles ;
- `Android/` reste une convention de séparation multi-plateforme et n'est pas imposé artificiellement à un dépôt Android-only ;
- Java reste un owner composé seulement lorsqu'il existe réellement du code Java ;
- les quatre ABI, JNI, `cargo ndk`, SDL3, Activities et assets Games restent des responsabilités produit/framework/spécialisation ;
- aucune exigence 16 KB n'est normalisée sans vérification des sources Android officielles courantes ;
- aucun nouveau template, audit, skeleton ou contrat de validation Android n'est créé par symétrie ;
- Games reste un corpus externe non modifié et son adoption reste réservée à `0.1.5` ;
- le skeleton Tauri reste `DEFER` jusqu'à `0.1.4` ;
- aucun nouveau numéro au-delà de `0.1.7` n'est réservé.
## Transition
### PASS
Produire `history/0.1.3/alpha.1.md` à partir des résultats réellement observés. Dans la même réponse, si aucune décision nouvelle n'est ouverte, préparer séparément le delta `0.1.3-alpha.2` consacré à la structure, la composition et aux contrats Android de base définis par le plan, sans absorber encore les détails natifs/packaging de `alpha.3`.
Après remise du history, fournir automatiquement le bloc opérateur exact pour appliquer le history, committer/pusher `0.1.3-alpha.1`, puis seulement appliquer le delta suivant conformément à `docs/templates/006-OPERATOR_COMMAND_HANDOFF.md`.
### FAIL
Consigner le résultat réel dans le history, puis ouvrir `0.1.3-alpha.1.fix.1` ou un REPLAN selon la cause. Aucun changement prévu pour `alpha.2` ne doit être absorbé silencieusement dans le fix.