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

11 KiB

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 :

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 :

0.1.2

Version après application :

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 :

VERSION
README.md
docs/000-README.md

ADD :

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 :

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 :

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.