Files
pgr/deltas/0.1.5/rc.1.md
2026-10-01 10:47:14 +02:00

9.7 KiB
Raw Permalink Blame History

Delta 0.1.5-rc.1 — freeze, revue d’horizon et handoff Games

Objet

Geler les trois contrats transversaux réconciliés par beta.1, préparer la présentation candidate de 0.1.5, effectuer la revue d’horizon limitée prévue par le plan et préparer le handoff vers 0.1.6 uniquement puisque l’adoption Games reste la prochaine dépendance réelle.

La RC n’ajoute aucun nouveau contrat normatif et ne commence aucune adoption.

Préconditions

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

La séquence réelle doit rester :

alpha.1          PARTIAL
alpha.1.fix.1    PASS
alpha.2          PASS
alpha.3          PASS
alpha.4          PASS
beta.1           PASS

Les owners stabilisés pendant alpha.2 à alpha.4 sont gelés sauf défaut démontré. Aucun défaut nouveau n’est introduit par la préparation RC.

Revue d’horizon

docs/studies/005-V0_1_5_HORIZON_REVIEW.md confirme qu’aucun nouveau prérequis transversal ne doit précéder l’adoption réelle de sasedev-games.

La trajectoire reste :

0.1.6   adoption sasedev-games
0.1.7   adoption khadhroony-solana-project
0.1.8   audits Rust/Clippy read-only
0.1.9   NOT RESERVED

La revue impose pour 0.1.6 une stable PGR v0.1.5 réellement publiée/vérifiée et une archive Games récente explicitement autoritaire. Elle ne fige volontairement aucun numéro Games.

Handoff 0.1.6

prompts/012-V0_1_6_START_PROMPT.md prépare 0.1.6-alpha.1 comme tranche d’intake et de cartographie avant migration.

Le prompt exige une classification ADOPT / KEEP-LOCAL / OVERRIDE / DEFER / N/A, conserve la sémantique non obligatoire de SHOULD / SHOULD NOT, préserve les décisions locales Games et rappelle que la baseline Games devient l’autorité du projet après adoption.

Il interdit de généraliser automatiquement un ancien POC ou artefact historique sans applicabilité démontrée par le corpus Games fourni.

Modifications

  • VERSION passe à 0.1.5-rc.1 ;
  • README.md passe en révision 33 et présente la candidate/freeze ;
  • CHANGELOG.md passe en révision 20 et reçoit l’entrée 0.1.5 (candidate) sans chronologie de tranches ;
  • ROADMAP.md passe en révision 18 et enregistre la confirmation de trajectoire issue de la revue 0.1.5-rc.1 ;
  • docs/000-README.md passe en révision 52 et indexe la revue d’horizon et le handoff 012 ;
  • docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md passe en révision 6, enregistre beta.1 PASS et le freeze RC ;
  • docs/studies/000-README.md passe en révision 6 ;
  • docs/studies/005-V0_1_5_HORIZON_REVIEW.md est créé ;
  • prompts/012-V0_1_6_START_PROMPT.md est créé ;
  • aucun owner normatif, skeleton, template ou contrat de validation stabilisé par les alphas n’est modifié.

Gate opérateur

Après commit/push de beta.1 avec son history PASS, appliquer ce delta puis exécuter :

cat VERSION

test -f history/0.1.5/beta.1.md
test -f deltas/0.1.5/rc.1.md
test -f docs/studies/005-V0_1_5_HORIZON_REVIEW.md
test -f prompts/012-V0_1_6_START_PROMPT.md
test ! -e history/0.1.5/rc.1.md

grep -Fx '0.1.5-rc.1' 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 -A2 '^## Statut$' history/0.1.5/alpha.2.md | grep -Fx 'PASS'
grep -A2 '^## Statut$' history/0.1.5/alpha.3.md | grep -Fx 'PASS'
grep -A2 '^## Statut$' history/0.1.5/alpha.4.md | grep -Fx 'PASS'
grep -A2 '^## Statut$' history/0.1.5/beta.1.md | grep -Fx 'PASS'

grep -Fx '<!-- version: 33 -->' README.md
grep -F 'candidate `0.1.5-rc.1`' README.md
grep -F '`0.1.6` reste la prochaine release' README.md

grep -Fx '<!-- version: 20 -->' CHANGELOG.md
grep -Fx '## 0.1.5 (candidate)' CHANGELOG.md
grep -F 'forte recommandation non obligatoire' CHANGELOG.md
grep -F 'baseline locale et ses owners deviennent l’autorité' CHANGELOG.md
grep -F 'SaseDev Knowledge' CHANGELOG.md
grep -F 'adoption réelle de `sasedev-games` reste la cible `0.1.6`' CHANGELOG.md

python3 -B -c "from pathlib import Path; s=Path('CHANGELOG.md').read_text(encoding='utf-8').split('## 0.1.5 (candidate)',1)[1].split('## 0.1.4',1)[0]; assert all(x not in s for x in ('alpha.1','alpha.2','alpha.3','alpha.4','beta.1','rc.1','rel.1')); print('0.1.5 candidate changelog: clean')"

grep -Fx '<!-- version: 18 -->' ROADMAP.md
grep -F -- '- `( ) 0.1.5`' ROADMAP.md
grep -F -- '- `( ) 0.1.6`' ROADMAP.md
grep -F -- '- `( ) 0.1.7`' ROADMAP.md
grep -F -- '- `( ) 0.1.8`' ROADMAP.md
grep -F 'La revue limitée `0.1.5-rc.1` confirme' ROADMAP.md
! grep -F -- '- `( ) 0.1.9`' ROADMAP.md

grep -Fx '<!-- version: 52 -->' docs/000-README.md
grep -F 'studies/005-V0_1_5_HORIZON_REVIEW.md' docs/000-README.md
grep -F 'prompts/012-V0_1_6_START_PROMPT.md' docs/000-README.md

grep -Fx '<!-- version: 6 -->' docs/studies/000-README.md
grep -F '005-V0_1_5_HORIZON_REVIEW.md' docs/studies/000-README.md

grep -Fx '<!-- version: 1 -->' docs/studies/005-V0_1_5_HORIZON_REVIEW.md
grep -F 'conserver `0.1.6` comme prochaine release' docs/studies/005-V0_1_5_HORIZON_REVIEW.md
grep -F 'aucun numéro de version Games n’est figé' docs/studies/005-V0_1_5_HORIZON_REVIEW.md
grep -F 'ADOPT / KEEP-LOCAL / OVERRIDE / DEFER / N/A' docs/studies/005-V0_1_5_HORIZON_REVIEW.md
grep -F 'Aucun `0.1.9` n’est réservé' docs/studies/005-V0_1_5_HORIZON_REVIEW.md

grep -Fx '<!-- version: 1 -->' prompts/012-V0_1_6_START_PROMPT.md
grep -F 'tag Gitea `v0.1.5`' prompts/012-V0_1_6_START_PROMPT.md
grep -F 'pgr-0.1.5-publish.001-report.md' prompts/012-V0_1_6_START_PROMPT.md
grep -F 'archive récente et explicitement autoritaire de `sasedev-games`' prompts/012-V0_1_6_START_PROMPT.md
grep -F '0.1.6-alpha.1' prompts/012-V0_1_6_START_PROMPT.md
grep -F 'ADOPT / KEEP-LOCAL / OVERRIDE / DEFER / N/A' prompts/012-V0_1_6_START_PROMPT.md
grep -F 'ne doivent pas rechercher automatiquement « la dernière version de PGR »' prompts/012-V0_1_6_START_PROMPT.md
grep -F 'réservée à `0.1.7`' prompts/012-V0_1_6_START_PROMPT.md
grep -F 'réservés à `0.1.8`' prompts/012-V0_1_6_START_PROMPT.md

grep -Fx '<!-- version: 6 -->' docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md
grep -F 'La gate opérateur de `beta.1` du `2026-10-01` est `PASS`' docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md
grep -F 'Freeze et revue d’horizon préparés en `rc.1`' docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md
grep -F '0.1.9   NOT RESERVED' docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md
grep -F '012-V0_1_6_START_PROMPT.md' docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md

grep -Fx '<!-- version: 16 -->' RULES.md
grep -Fx '<!-- version: 9 -->' docs/rules/210-WORKFLOW.md
grep -Fx '<!-- version: 3 -->' docs/rules/230-ADOPTION.md
grep -Fx '<!-- version: 5 -->' docs/rules/300-DOCUMENTATION.md
grep -Fx '<!-- version: 2 -->' docs/rules/400-VALIDATION.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','alpha.3.md','alpha.4.md','beta.1.md','rc.1.md'}; assert {p.name for p in Path('history/0.1.5').glob('*.md')} == {'alpha.1.md','alpha.1.fix.1.md','alpha.2.md','alpha.3.md','alpha.4.md','beta.1.md'}; print('0.1.5 rc.1 history boundary: clean (109 closed prior pairs, current rc.1 pending)')"

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

git diff --exit-code -- RULES.md \
    docs/objectives/001-PROJECT_OBJECTIVES.md \
    docs/architecture/002-GOVERNANCE_ARCHITECTURE.md \
    docs/rules/210-WORKFLOW.md docs/rules/220-SKELETONS.md \
    docs/rules/230-ADOPTION.md docs/rules/300-DOCUMENTATION.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/001-PROJECT_GOVERNANCE_FOUNDATION.md \
    docs/skeletons/003-WEB_FRONTEND.md \
    docs/templates/003-NEW_SESSION_PROMPT.md \
    docs/templates/007-EXISTING_PROJECT_ADOPTION.md \
    docs/templates/008-WEB_TYPESCRIPT_PACKAGE.md

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 CHANGELOG.md ROADMAP.md \
    deltas/0.1.5/rc.1.md \
    docs/000-README.md \
    docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md \
    docs/studies/000-README.md \
    docs/studies/005-V0_1_5_HORIZON_REVIEW.md \
    prompts/012-V0_1_6_START_PROMPT.md

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

Scope Git attendu

M  CHANGELOG.md
M  README.md
M  ROADMAP.md
M  VERSION
A  deltas/0.1.5/rc.1.md
M  docs/000-README.md
M  docs/plans/011-V0_1_5_NORMATIVE_AUTONOMY_PLAN.md
M  docs/studies/000-README.md
A  docs/studies/005-V0_1_5_HORIZON_REVIEW.md
A  prompts/012-V0_1_6_START_PROMPT.md

Transition

Si la gate est PASS, produire history/0.1.5/rc.1.md, committer/pousser 0.1.5-rc.1, puis préparer rel.1 comme promotion mécanique vers la stable 0.1.5, sans rouvrir les contrats acquis ni commencer 0.1.6.