0.1.2-alpha.3
This commit is contained in:
365
deltas/0.1.2/alpha.3.md
Normal file
365
deltas/0.1.2/alpha.3.md
Normal file
@@ -0,0 +1,365 @@
|
||||
<!-- file: deltas/0.1.2/alpha.3.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta 0.1.2-alpha.3 — REPLAN et scission Java / Maven / Gradle
|
||||
|
||||
## Baseline et version
|
||||
|
||||
Baseline attendue : commit opérateur de `0.1.2-alpha.2.fix.1`, réalisé après application de `history/0.1.2/alpha.2.fix.1.md` avec statut `PASS`. Le fix de récupération doit donc être publié avant application de la présente tranche.
|
||||
|
||||
Le hash de ce commit n'est pas anticipé. L'ancien stash `pgr-0.1.2-alpha.3-before-alpha.2-recovery` est uniquement une sauvegarde de l'application effectuée sur le HEAD contaminé ; il ne constitue pas une source autoritaire et doit être abandonné après publication du fix.
|
||||
|
||||
Version avant application :
|
||||
|
||||
```text
|
||||
0.1.2-alpha.2.fix.1
|
||||
```
|
||||
|
||||
Version après application :
|
||||
|
||||
```text
|
||||
0.1.2-alpha.3
|
||||
```
|
||||
|
||||
## Motif du REPLAN
|
||||
|
||||
La gate de `alpha.2` valide le contenu normatif ajouté à l'ancien profil combiné. La réconciliation préparatoire de `beta.1` révèle toutefois une ambiguïté d'ownership prévue comme déclencheur de REPLAN dans le plan actif.
|
||||
|
||||
`500-LANGUAGES.md` autorise un langage et son build tool dans un même profil lorsque leur séparation serait artificielle, mais indique qu'ils SHOULD être séparés lorsque plusieurs build tools interchangeables possèdent chacun des règles propres significatives.
|
||||
|
||||
Après `alpha.2`, Maven et Gradle possèdent chacun des contrats substantiels et indépendants : ownership du build, Wrapper, validation et outputs ; Gradle possède en plus sa politique de version système, DSL, propriétés et version catalog. Un profil unique `Java / Maven / Gradle` rend donc l'applicabilité ambiguë : un projet Java n'utilise pas nécessairement les deux build tools, et Gradle n'implique pas nécessairement Java.
|
||||
|
||||
La scission devient une correction d'ownership, pas une préférence de taxonomie.
|
||||
|
||||
## Scope
|
||||
|
||||
REPLACE :
|
||||
|
||||
```text
|
||||
VERSION
|
||||
RULES.md
|
||||
ROADMAP.md
|
||||
docs/000-README.md
|
||||
docs/architecture/003-RULE_PROFILE_MODEL.md
|
||||
docs/plans/008-V0_1_2_JAVA_GRADLE_REEVALUATION_PLAN.md
|
||||
docs/rules/000-README.md
|
||||
docs/rules/520-JAVA_MAVEN_GRADLE.md
|
||||
docs/rules/610-ANDROID.md
|
||||
```
|
||||
|
||||
ADD :
|
||||
|
||||
```text
|
||||
docs/rules/520-JAVA.md
|
||||
docs/rules/521-MAVEN.md
|
||||
docs/rules/522-GRADLE.md
|
||||
deltas/0.1.2/alpha.3.md
|
||||
```
|
||||
|
||||
DELETE : aucun.
|
||||
|
||||
L'ancien chemin `docs/rules/520-JAVA_MAVEN_GRADLE.md` devient un bridge `SUPERSEDED` non normatif. Il est conservé uniquement parce que des prompts, plans, deltas, histories et études historiques le référencent encore ; ces snapshots ne doivent pas être réécrits a posteriori et les audits de liens doivent rester propres.
|
||||
|
||||
Aucun `history/0.1.2/alpha.3.md` n'est anticipé.
|
||||
|
||||
## Owners après scission
|
||||
|
||||
Le découpage courant devient :
|
||||
|
||||
```text
|
||||
520 Java
|
||||
521 Maven
|
||||
522 Gradle
|
||||
```
|
||||
|
||||
### `520-JAVA.md`
|
||||
|
||||
Possède uniquement les règles Java :
|
||||
|
||||
- politique JDK et compatibilité source/bytecode/runtime ;
|
||||
- structure `src/main/java` / `src/test/java` ;
|
||||
- packages, modules, imports et visibilité ;
|
||||
- interfaces/API, annotations, nullabilité et exceptions ;
|
||||
- tests Java ;
|
||||
- composition explicite avec Maven ou Gradle selon le build réellement utilisé.
|
||||
|
||||
Il ne possède plus les règles de Wrapper, reactor, Gradle DSL ou outputs des build tools.
|
||||
|
||||
### `521-MAVEN.md`
|
||||
|
||||
Possède les responsabilités Maven :
|
||||
|
||||
- POM parent/root et héritage multi-module ;
|
||||
- `dependencyManagement` / `pluginManagement` ;
|
||||
- miroir technique de `VERSION` lorsque Maven l'exige ;
|
||||
- Maven système versus Wrapper sans cérémonie ;
|
||||
- validation ciblée puis reactor/`verify` selon le scope ;
|
||||
- `target/`, état local et futurs audits réellement justifiés.
|
||||
|
||||
Games n'exerce toujours aucun projet Maven : la scission ne prétend donc pas avoir validé une nouvelle convention Maven par corpus ; elle isole seulement les règles déjà existantes et cohérentes.
|
||||
|
||||
### `522-GRADLE.md`
|
||||
|
||||
Possède les responsabilités Gradle validées et clarifiées en `alpha.2` :
|
||||
|
||||
- ownership `settings` / root / module / propriétés partagées ;
|
||||
- contrainte Gradle système effectivement vérifiée ou Wrapper lorsque pertinent ;
|
||||
- neutralité Groovy/Kotlin DSL ;
|
||||
- version catalog optionnel ;
|
||||
- validation ciblée et `clean` non systématique ;
|
||||
- `.gradle/`, `build/`, état local et futurs audits réellement justifiés.
|
||||
|
||||
Le niveau Java reste possédé par `520-JAVA.md` lorsqu'un build Gradle construit du Java.
|
||||
|
||||
## Bridge historique
|
||||
|
||||
`520-JAVA_MAVEN_GRADLE.md` passe en révision `4` et ne contient plus de règles courantes. Il indique explicitement :
|
||||
|
||||
```text
|
||||
SUPERSEDED
|
||||
520-JAVA.md owner Java courant
|
||||
521-MAVEN.md spécialisation Maven courante
|
||||
522-GRADLE.md spécialisation Gradle courante
|
||||
```
|
||||
|
||||
Il n'est plus référencé par `RULES.md`, les index de règles ou les compositions courantes. Sa seule responsabilité est la compatibilité documentaire des références historiques.
|
||||
|
||||
## Frontière Android
|
||||
|
||||
`610-ANDROID.md` change uniquement pour refléter la nouvelle composition :
|
||||
|
||||
```text
|
||||
Android + Gradle -> 600 + 610 + 522
|
||||
Android + Java -> + 520 lorsque Java est réellement présent
|
||||
```
|
||||
|
||||
Une application Android n'applique pas `520` uniquement parce qu'elle utilise Android ou Gradle.
|
||||
|
||||
Aucune règle AGP, `compileSdk`, `targetSdk`, `minSdk`, NDK, ABI/JNI, manifests/resources, packaging/signing, device/AVD, 16 KB ou SDL3 n'est réévaluée dans cette tranche. Ce scope reste réservé à `0.1.3`.
|
||||
|
||||
## Décision d'artefacts
|
||||
|
||||
La scission n'autorise aucun artefact technique supplémentaire.
|
||||
|
||||
Restent non justifiés :
|
||||
|
||||
```text
|
||||
skeleton Java/Gradle générique
|
||||
template Maven ou Gradle générique
|
||||
audit Python Java/Maven/Gradle
|
||||
nouveau contrat de validation spécialisé
|
||||
artefact Maven issu de Games
|
||||
```
|
||||
|
||||
Les trois profils sont des owners normatifs nécessaires à l'applicabilité ; ils ne constituent pas une duplication fonctionnelle du build tool officiel.
|
||||
|
||||
## Validation opérateur
|
||||
|
||||
Après application du history `PASS`, commit/push de `alpha.2.fix.1`, abandon de l'ancien stash de sécurité, puis application du présent delta régénéré :
|
||||
|
||||
```bash
|
||||
test "$(cat VERSION)" = '0.1.2-alpha.3'
|
||||
git cat-file -e HEAD:history/0.1.2/alpha.2.fix.1.md
|
||||
test -f history/0.1.2/alpha.2.md
|
||||
test -f history/0.1.2/alpha.2.fix.1.md
|
||||
test -f deltas/0.1.2/alpha.3.md
|
||||
test ! -e history/0.1.2/alpha.3.md
|
||||
|
||||
grep -A2 '^## Statut$' history/0.1.2/alpha.2.md | grep -Fx 'PASS'
|
||||
grep -A2 '^## Statut$' history/0.1.2/alpha.2.fix.1.md | grep -Fx 'PASS'
|
||||
|
||||
test ! -e Cargo.toml
|
||||
test ! -e crates/knowledge-domain-lib/src/content_family.rs
|
||||
test ! -e deltas/0.0.1/alpha.3.fix.2.md
|
||||
test ! -e history/0.0.1/alpha.3.fix.1.md
|
||||
|
||||
grep -Fx '<!-- version: 4 -->' docs/rules/520-JAVA_MAVEN_GRADLE.md
|
||||
grep -Fx '`SUPERSEDED` depuis `0.1.2-alpha.3`.' docs/rules/520-JAVA_MAVEN_GRADLE.md
|
||||
grep -Fx '<!-- version: 4 -->' docs/rules/520-JAVA.md
|
||||
grep -Fx '<!-- version: 1 -->' docs/rules/521-MAVEN.md
|
||||
grep -Fx '<!-- version: 1 -->' docs/rules/522-GRADLE.md
|
||||
grep -Fx '<!-- version: 3 -->' docs/rules/610-ANDROID.md
|
||||
grep -Fx '<!-- version: 7 -->' docs/architecture/003-RULE_PROFILE_MODEL.md
|
||||
grep -Fx '<!-- version: 3 -->' docs/plans/008-V0_1_2_JAVA_GRADLE_REEVALUATION_PLAN.md
|
||||
grep -Fx '<!-- version: 14 -->' RULES.md
|
||||
grep -Fx '<!-- version: 16 -->' docs/rules/000-README.md
|
||||
grep -Fx '<!-- version: 33 -->' docs/000-README.md
|
||||
grep -Fx '<!-- version: 13 -->' ROADMAP.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.2/alpha.2.md').read_text(encoding='utf-8')
|
||||
assert re.search(r'## Statut\s+PASS\s', history)
|
||||
recovery = Path('history/0.1.2/alpha.2.fix.1.md').read_text(encoding='utf-8')
|
||||
assert re.search(r'## Statut\s+PASS\s', recovery)
|
||||
|
||||
family = Path('docs/rules/500-LANGUAGES.md').read_text(encoding='utf-8')
|
||||
for phrase in (
|
||||
'Un langage et son build tool MAY partager un profil',
|
||||
'Ils SHOULD être séparés lorsque plusieurs build tools interchangeables possèdent chacun des règles propres significatives.',
|
||||
'Une spécialisation de build tool ne devient pas une règle du langage entier.',
|
||||
):
|
||||
assert phrase in family, phrase
|
||||
|
||||
legacy = Path('docs/rules/520-JAVA_MAVEN_GRADLE.md').read_text(encoding='utf-8')
|
||||
for phrase in (
|
||||
'`SUPERSEDED` depuis `0.1.2-alpha.3`.',
|
||||
'Il ne constitue plus un profil sélectionnable',
|
||||
'520-JAVA.md',
|
||||
'521-MAVEN.md',
|
||||
'522-GRADLE.md',
|
||||
):
|
||||
assert phrase in legacy, phrase
|
||||
|
||||
java = Path('docs/rules/520-JAVA.md').read_text(encoding='utf-8')
|
||||
for phrase in (
|
||||
'# Profil Java',
|
||||
'JDK utilisé pour construire',
|
||||
'niveau Java du code source',
|
||||
'niveau de bytecode/runtime minimal supporté',
|
||||
'Un projet Java construit avec Maven compose normalement',
|
||||
'Un projet Java construit avec Gradle compose normalement',
|
||||
):
|
||||
assert phrase in java, phrase
|
||||
assert '## Maven' not in java
|
||||
assert '## Gradle' not in java
|
||||
|
||||
maven = Path('docs/rules/521-MAVEN.md').read_text(encoding='utf-8')
|
||||
for phrase in (
|
||||
'# Profil Maven',
|
||||
'POM parent/root',
|
||||
'PGR MUST NOT ajouter un Maven Wrapper uniquement par cérémonie.',
|
||||
'./mvnw -pl <module> -am test',
|
||||
'target/',
|
||||
):
|
||||
assert phrase in maven, phrase
|
||||
|
||||
gradle = Path('docs/rules/522-GRADLE.md').read_text(encoding='utf-8')
|
||||
for phrase in (
|
||||
'# Profil Gradle',
|
||||
'composition du build et inclusion des projets',
|
||||
'effectivement vérifiée',
|
||||
'Groovy DSL et Kotlin DSL sont tous deux reconnus.',
|
||||
'gradle clean',
|
||||
):
|
||||
assert phrase in gradle, phrase
|
||||
|
||||
for forbidden in (
|
||||
'compileSdk',
|
||||
'targetSdk',
|
||||
'minSdk',
|
||||
'NDK',
|
||||
'ABI/JNI',
|
||||
'APK/AAB',
|
||||
'device/AVD',
|
||||
'SDL3',
|
||||
):
|
||||
assert forbidden not in maven, forbidden
|
||||
assert forbidden not in gradle, forbidden
|
||||
|
||||
android = Path('docs/rules/610-ANDROID.md').read_text(encoding='utf-8')
|
||||
assert '520-JAVA.md' in android
|
||||
assert '522-GRADLE.md' in android
|
||||
assert '520-JAVA_MAVEN_GRADLE.md' not in android
|
||||
|
||||
architecture = Path('docs/architecture/003-RULE_PROFILE_MODEL.md').read_text(encoding='utf-8')
|
||||
for phrase in (
|
||||
'## Scission Java / Maven / Gradle en `0.1.2`',
|
||||
'520 — Java',
|
||||
'521 — Maven',
|
||||
'522 — Gradle',
|
||||
'GENERAL + 500 + 520 + 522 + 600 + 610',
|
||||
'bridge `SUPERSEDED` non normatif',
|
||||
):
|
||||
assert phrase in architecture, phrase
|
||||
|
||||
for current in (
|
||||
'RULES.md',
|
||||
'docs/000-README.md',
|
||||
'docs/rules/000-README.md',
|
||||
'docs/rules/610-ANDROID.md',
|
||||
):
|
||||
assert '520-JAVA_MAVEN_GRADLE.md' not in Path(current).read_text(encoding='utf-8'), current
|
||||
|
||||
plan = Path('docs/plans/008-V0_1_2_JAVA_GRADLE_REEVALUATION_PLAN.md').read_text(encoding='utf-8')
|
||||
for phrase in (
|
||||
'## Décision après `alpha.2` et REPLAN',
|
||||
'`alpha.2.fix.1` restaure l\'état PGR attendu',
|
||||
'alpha.3 scission des owners Java / Maven / Gradle',
|
||||
'520-JAVA.md',
|
||||
'521-MAVEN.md',
|
||||
'522-GRADLE.md',
|
||||
'bridge documentaire non normatif',
|
||||
'aucun template, skeleton, audit Java/Gradle ou nouvel artefact Maven n\'est justifié',
|
||||
):
|
||||
assert phrase in plan, phrase
|
||||
|
||||
for foreign in (
|
||||
'Cargo.toml',
|
||||
'crates/knowledge-domain-lib/src/content_family.rs',
|
||||
'deltas/0.0.1/alpha.3.fix.2.md',
|
||||
'history/0.0.1/alpha.3.fix.1.md',
|
||||
):
|
||||
assert not Path(foreign).exists(), foreign
|
||||
|
||||
print('0.1.2 alpha.3 owner split audit: clean (recovery baseline confirmed, Java/Maven/Gradle applicability separated, historical bridge preserved, Android boundary preserved)')
|
||||
PYGATE
|
||||
|
||||
git diff --check
|
||||
|
||||
git add -A
|
||||
|
||||
git diff --cached --check
|
||||
git status --short
|
||||
```
|
||||
|
||||
Le scope indexé attendu avant ajout du history est exactement :
|
||||
|
||||
```text
|
||||
M ROADMAP.md
|
||||
M RULES.md
|
||||
M VERSION
|
||||
A deltas/0.1.2/alpha.3.md
|
||||
M docs/000-README.md
|
||||
M docs/architecture/003-RULE_PROFILE_MODEL.md
|
||||
M docs/plans/008-V0_1_2_JAVA_GRADLE_REEVALUATION_PLAN.md
|
||||
M docs/rules/000-README.md
|
||||
M docs/rules/520-JAVA_MAVEN_GRADLE.md
|
||||
A docs/rules/520-JAVA.md
|
||||
A docs/rules/521-MAVEN.md
|
||||
A docs/rules/522-GRADLE.md
|
||||
M docs/rules/610-ANDROID.md
|
||||
```
|
||||
|
||||
La revue qualitative doit confirmer que :
|
||||
|
||||
- la scission suit une différence réelle d'applicabilité, pas une préférence de taille de fichier ;
|
||||
- l'ancien fichier est uniquement un bridge `SUPERSEDED` et n'apparaît plus dans les index ou compositions courantes ;
|
||||
- aucune règle Java n'est perdue et aucune règle Maven/Gradle n'est remontée dans `520-JAVA.md` ;
|
||||
- Maven et Gradle ne s'appliquent que lorsqu'ils sont réellement utilisés ;
|
||||
- la preuve Games reste principalement une preuve Gradle/Java et ne devient pas une preuve Maven fictive ;
|
||||
- aucun minimum JDK, Java ou Gradle propre à Games n'est généralisé ;
|
||||
- Android ne devient pas une condition d'applicabilité de `522-GRADLE.md` et `610` conserve ses responsabilités ;
|
||||
- les documents historiques ne sont pas réécrits pour masquer l'ancien owner combiné ;
|
||||
- aucun template, skeleton, audit ou contrat de validation supplémentaire n'est créé.
|
||||
|
||||
## Transition
|
||||
|
||||
### PASS
|
||||
|
||||
Produire `history/0.1.2/alpha.3.md`, puis préparer `0.1.2-beta.1` pour la réconciliation intégrée des trois owners, la décision finale d'artefacts et les mises à jour documentaires durables nécessaires avant RC.
|
||||
|
||||
### FAIL
|
||||
|
||||
Consigner le diagnostic réel dans `history/0.1.2/alpha.3.md`, puis produire `alpha.3.fix.N` ou effectuer un nouveau REPLAN si la scission révèle une responsabilité qui ne peut pas être possédée proprement par `520`, `521` ou `522`.
|
||||
Reference in New Issue
Block a user