Files
pgr/deltas/0.1.5/alpha.2.md
2026-10-01 09:53:53 +02:00

11 KiB

Delta 0.1.5-alpha.2 — sémantique normative et conséquences de gate/adoption

Objet

Stabiliser la force normative de MUST / SHOULD / MAY après le cadrage alpha.1 et la récupération de preuve alpha.1.fix.1, puis corriger uniquement les renforcements accidentels démontrés par l'inventaire.

La tranche ne convertit pas mécaniquement les 242 occurrences de SHOULD / SHOULD NOT. Elle fixe le contrat transversal, aligne adoption et validation, puis corrige les quelques owners/skeletons/templates où une recommandation était implicitement transformée en obligation de justification ou en OVERRIDE.

Précondition

Le history history/0.1.5/alpha.1.fix.1.md doit être présent avec statut PASS avant application de ce delta.

La séquence d'ouverture reste conservée telle qu'observée :

alpha.1          PARTIAL
alpha.1.fix.1    PASS

Le PARTIAL n'est pas réécrit : le fix a seulement acquis les preuves manquantes et autorise maintenant la progression vers la sémantique normative.

Contrat normatif stabilisé

RULES.md devient l'owner primaire de la distinction :

MUST / MUST NOT       obligation ou interdiction normative
SHOULD / SHOULD NOT   forte recommandation non obligatoire
MAY                   possibilité neutre

Un écart à un SHOULD / SHOULD NOT PGR :

  • ne constitue pas à lui seul une non-conformité ;
  • ne fait pas échouer à lui seul une gate ;
  • n'exige pas automatiquement un OVERRIDE ;
  • MAY être documenté lorsque la raison apporte une valeur durable de maintenance, architecture ou reprise.

Une contradiction avec un MUST / MUST NOT réellement applicable reste distincte et continue d'utiliser l'exception ou l'override autorisé par le scope concerné.

Alignement adoption et validation

docs/rules/230-ADOPTION.md passe en révision 2 : la classification ADOPT / KEEP-LOCAL / OVERRIDE / DEFER ne renforce plus implicitement un SHOULD. Un simple choix différent d'une recommandation ne devient pas un OVERRIDE obligatoire.

docs/rules/400-VALIDATION.md passe en révision 2 : une gate doit distinguer obligation et recommandation. Un SHOULD non suivi peut produire une observation, un diagnostic ou un point de revue, mais pas un FAIL par sa seule force PGR. Un projet peut rendre localement un choix obligatoire uniquement en matérialisant explicitement ce contrat local.

Réconciliation ciblée des effets SHOULD

Les owners et artefacts suivants sont corrigés parce que alpha.1 a démontré un renforcement concret :

  • docs/rules/500-LANGUAGES.md révision 2 : un override est requis pour une contradiction réelle avec un MUST / MUST NOT, pas pour un simple écart à un SHOULD ;
  • docs/rules/530-TYPESCRIPT.md révision 4 : choisir JavaScript malgré la recommandation TypeScript ne crée ni non-conformité, ni override, ni justification obligatoire ;
  • docs/rules/540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md révision 4 : la politique de lockfile reste une recommandation lorsqu'elle est marquée SHOULD, et la référence vivante Games est corrigée de 0.1.5 vers 0.1.6 ;
  • docs/rules/700-FRAMEWORKS.md révision 3 : la composition conserve la force normative propre des règles héritées au lieu de traiter toute divergence comme override ;
  • docs/skeletons/003-WEB_FRONTEND.md révision 2 : un choix JavaScript n'impose plus de justification automatique ;
  • docs/templates/008-WEB_TYPESCRIPT_PACKAGE.md révision 3 : une politique de lockfile différente n'exige plus automatiquement OVERRIDE + justification.

Les MUST réellement applicables de ces documents restent inchangés dans leur intention.

Cohérence documentaire

  • README.md présente 0.1.5-alpha.2 comme la tranche active sans déclarer la stable 0.1.4 remplacée ;
  • docs/000-README.md marque les owners de sémantique comme réconciliés en alpha.2 ;
  • docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md passe en révision 2, conserve les constats alpha.1 comme observations historiques et enregistre la récupération alpha.1.fix.1 ainsi que la mise en œuvre alpha.2.

ROADMAP.md et CHANGELOG.md restent inchangés. Les histories 0.1.4, les adoptions Games/KSP et les futurs audits Rust/Clippy restent hors scope.

Gate opérateur

Appliquer le delta après commit/push de alpha.1.fix.1, puis exécuter depuis la racine du dépôt :

cat VERSION

test -f history/0.1.5/alpha.1.md
test -f history/0.1.5/alpha.1.fix.1.md
test -f deltas/0.1.5/alpha.2.md
test ! -e history/0.1.5/alpha.2.md

grep -Fx '0.1.5-alpha.2' VERSION
grep -A2 '^## Statut$' history/0.1.5/alpha.1.md | grep -Fx 'PARTIAL'
grep -A2 '^## Statut$' history/0.1.5/alpha.1.fix.1.md | grep -Fx 'PASS'

grep -Fx '<!-- version: 15 -->' RULES.md
grep -F 'forte recommandation non obligatoire' RULES.md
grep -F "n'exige pas automatiquement un \`OVERRIDE\`" RULES.md
grep -F "ne fait pas échouer à lui seul une gate" RULES.md

grep -Fx '<!-- version: 2 -->' docs/rules/230-ADOPTION.md
grep -F "ne crée pas à lui seul un \`OVERRIDE\` obligatoire" docs/rules/230-ADOPTION.md
grep -F 'MUST NOT exiger un override uniquement parce que la recommandation' docs/rules/230-ADOPTION.md

grep -Fx '<!-- version: 2 -->' docs/rules/400-VALIDATION.md
grep -F 'MUST NOT faire passer une tranche en `FAIL`' docs/rules/400-VALIDATION.md
grep -F "la gate évalue alors ce contrat local, pas le \`SHOULD\` PGR d'origine" docs/rules/400-VALIDATION.md

grep -Fx '<!-- version: 2 -->' docs/rules/500-LANGUAGES.md
grep -F "Un choix différent d'un \`SHOULD / SHOULD NOT\` général ne nécessite pas, à lui seul, un override" docs/rules/500-LANGUAGES.md

grep -Fx '<!-- version: 4 -->' docs/rules/530-TYPESCRIPT.md
grep -F "n'exige pas automatiquement un \`OVERRIDE\` et ne crée pas une obligation de justification" docs/rules/530-TYPESCRIPT.md
! grep -F 'sauf incompatibilité documentée' docs/rules/530-TYPESCRIPT.md

grep -Fx '<!-- version: 4 -->' docs/rules/540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md
grep -F "Lors de l'adoption \`0.1.6\`" docs/rules/540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md
! grep -F "Lors de l'adoption \`0.1.5\`" docs/rules/540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md
grep -F "ne requiert pas à lui seul un \`OVERRIDE\`" docs/rules/540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md

grep -Fx '<!-- version: 3 -->' docs/rules/700-FRAMEWORKS.md
grep -F "MAY choisir différemment d'un \`SHOULD / SHOULD NOT\`" docs/rules/700-FRAMEWORKS.md

grep -Fx '<!-- version: 2 -->' docs/skeletons/003-WEB_FRONTEND.md
grep -F "sans transformer un choix JavaScript en obligation de justification ou en \`OVERRIDE\`" docs/skeletons/003-WEB_FRONTEND.md

grep -Fx '<!-- version: 3 -->' docs/templates/008-WEB_TYPESCRIPT_PACKAGE.md
grep -F "n'exige pas à lui seul un \`OVERRIDE\` ni une justification" docs/templates/008-WEB_TYPESCRIPT_PACKAGE.md

grep -Fx '<!-- version: 2 -->' docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md
grep -F 'un écart à cette recommandation ne crée ni non-conformité, ni `FAIL` de gate, ni `OVERRIDE` automatique' docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md

grep -F -- '- `( ) 0.1.6`' ROADMAP.md
grep -F -- '- `( ) 0.1.7`' ROADMAP.md
grep -F -- '- `( ) 0.1.8`' ROADMAP.md
! grep -F -- '- `( ) 0.1.9`' ROADMAP.md

python3 -B -c "from pathlib import Path; 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,'0.1.3':6,'0.1.4':7}; assert all({p.name for p in Path('deltas',r).glob('*.md')} == {p.name for p in Path('history',r).glob('*.md')} and len(list(Path('deltas',r).glob('*.md'))) == n for r,n in expected.items()); assert {p.name for p in Path('deltas/0.1.5').glob('*.md')} == {'alpha.1.md','alpha.1.fix.1.md','alpha.2.md'}; assert {p.name for p in Path('history/0.1.5').glob('*.md')} == {'alpha.1.md','alpha.1.fix.1.md'}; print('0.1.5 alpha.2 history boundary: clean (105 closed prior pairs, current alpha.2 pending)')"

git diff --exit-code -- history/0.1.4

python3 -B -m unittest discover -s tests -v

python3 -B scripts/audit_text_hygiene.py \
    README.md RULES.md ROADMAP.md CHANGELOG.md VERSION \
    docs deltas history prompts scripts tests templates .gitignore .settings

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

git diff --check
git status --short

git add VERSION README.md RULES.md docs/000-README.md \
    docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md \
    docs/rules/230-ADOPTION.md docs/rules/400-VALIDATION.md \
    docs/rules/500-LANGUAGES.md docs/rules/530-TYPESCRIPT.md \
    docs/rules/540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md docs/rules/700-FRAMEWORKS.md \
    docs/skeletons/003-WEB_FRONTEND.md docs/templates/008-WEB_TYPESCRIPT_PACKAGE.md \
    deltas/0.1.5/alpha.2.md

git diff --cached --check
git status --short

Le scope indexé attendu avant ajout du history est exactement :

M  README.md
M  RULES.md
M  VERSION
A  deltas/0.1.5/alpha.2.md
M  docs/000-README.md
M  docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md
M  docs/rules/230-ADOPTION.md
M  docs/rules/400-VALIDATION.md
M  docs/rules/500-LANGUAGES.md
M  docs/rules/530-TYPESCRIPT.md
M  docs/rules/540-JAVASCRIPT_PACKAGE_ECOSYSTEM.md
M  docs/rules/700-FRAMEWORKS.md
M  docs/skeletons/003-WEB_FRONTEND.md
M  docs/templates/008-WEB_TYPESCRIPT_PACKAGE.md

Revue opérateur attendue

La revue doit confirmer que la tranche clarifie la force de SHOULD sans affaiblir les obligations existantes ; qu'aucun SHOULD n'est transformé en MUST par une gate, un mapping d'adoption, un skeleton ou un template ; et que les corrections Web ciblées restent des conséquences de la sémantique générale plutôt qu'une réouverture de la fondation Web.

Elle doit également confirmer que l'autonomie post-adoption n'est pas encore implémentée par alpha.2, que la frontière PGR / Knowledge n'est pas encore modifiée, et que les scopes 0.1.6 à 0.1.8 restent réservés.

Transition

PASS

Produire history/0.1.5/alpha.2.md à partir des résultats réellement observés. Dans la même réponse, fournir les commandes commit/push de 0.1.5-alpha.2, puis préparer séparément 0.1.5-alpha.3 consacré à l'autonomie locale et au réalignement PGR volontaire.

FAIL / PARTIAL / BLOCKED

Enregistrer le résultat réel dans history/0.1.5/alpha.2.md puis ouvrir alpha.2.fix.N ou un REPLAN selon la cause. Aucun changement réservé à l'autonomie alpha.3 ou à la frontière Knowledge alpha.4 ne doit être absorbé silencieusement dans la correction.