0.1.0-0-pre.4-fix.1

This commit is contained in:
2026-09-16 01:08:49 +02:00
parent dc22011997
commit e1899a4098
10 changed files with 171 additions and 10 deletions

View File

@@ -1,5 +1,5 @@
# file: Cargo.toml
# version: 5
# version: 6
[workspace]
resolver = "3"
@@ -15,7 +15,7 @@ members = [
]
[workspace.package]
version = "0.1.0-0-pre.4"
version = "0.1.0-0-pre.4.fix.1"
edition = "2024"
license = "MIT"
repository = "https://git.sasedev.com/Sasedev/games"

View File

@@ -1,5 +1,7 @@
// file: crates/common/game-logging-lib/tests/test_support.rs
// version: 1
// version: 2
//! Integration coverage for the reusable test tracing support.
#[test]
fn scoped_test_tracing_returns_test_result() {

View File

@@ -0,0 +1,80 @@
<!-- file: deltas/0.1.0/0-pre.4.fix.1.md -->
<!-- version: 1 -->
# Delta 0.1.0-0-pre.4.fix.1
## Base
Base déclarée : `0.1.0-0-pre.4`, non validée intégralement.
## Validation du delta précédent
L'utilisateur a exécuté les gates demandées pour `0.1.0-0-pre.4` le 2026-09-16.
Résultats propres avant Clippy :
- `cargo fmt --all` ;
- `cargo fmt --all -- --check` ;
- audit Rust/workspace ;
- audit Markdown : `1 table(s), 33 file(s)` ;
- `cargo check --workspace`.
La gate suivante a échoué :
```bash
cargo clippy --workspace --all-targets --all-features -- -D warnings
```
Cause : le target d'intégration `crates/common/game-logging-lib/tests/test_support.rs` n'avait pas de documentation de crate alors que `missing_docs` est élevé en erreur par `-D warnings`.
Les tests ciblés ont néanmoins ensuite été exécutés et sont propres pour `game-logging-lib`, `engine-v1-common`, `engine-v1-platform-api`, `game-reflex-poc` et `game-snake-poc`. Les deux runners Desktop ont également produit les résultats fonctionnels attendus avec leurs événements `tracing`.
`0.1.0-0-pre.4` n'est donc pas considéré validé ; ce fix reste obligatoire avant `0-pre.5`.
## Correctif
- ajout d'une documentation de crate `//!` au target d'intégration `game-logging-lib/tests/test_support.rs` ;
- passage du workspace à `0.1.0-0-pre.4.fix.1` ;
- aucune modification fonctionnelle du tracing ou des jeux.
## Politique d'historique documentaire
Ce fix introduit `history/<X.Y.Z>/<label>.md` pour conserver les jalons transitoires validés sous forme immuable.
La première entrée créée est `history/0.1.0/0-pre.3.md`, car `0-pre.3` est le dernier jalon dont la validation est déjà connue définitivement.
À partir des versions suivant la structuration initiale `0.1.0` :
- les `pre.*` et leurs fixes ne modifient normalement pas `CHANGELOG.md` ;
- `CHANGELOG.md` privilégie `rc` et releases stables ;
- `alpha` et `beta` n'y apparaissent que lorsqu'ils constituent des jalons externes significatifs ;
- `ROADMAP.md` n'est modifié que lorsqu'un changement réel de plan le justifie ;
- les détails transitoires validés résident sous `history/` ;
- les détails de livraison et commandes de validation résident sous `deltas/`.
## Validation à exécuter par l'utilisateur
Le fix modifie un fichier Rust ; commencer par le formatage mutatif :
```bash
cargo fmt --all
cargo fmt --all -- --check
python3 scripts/audit_rust_workspace_rules.py
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates Android deltas history
cargo check --workspace
cargo clippy --workspace --all-targets --all-features -- -D warnings
```
Le seul comportement de test modifié appartient à `game-logging-lib` :
```bash
cargo test -p game-logging-lib --all-targets --all-features
```
La suite workspace complète et les smokes Desktop ne sont pas requis pour ce fix : ils ont été exécutés sur `0-pre.4`, et le correctif n'altère aucun comportement runtime.
## Règle de transition
Si ces validations sont propres, `0.1.0-0-pre.4.fix.1` est accepté et le travail passe automatiquement à `0.1.0-0-pre.5`.
Si une gate échoue, rester sur `0-pre.4` et produire `0.1.0-0-pre.4.fix.2`.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/000-README.md -->
<!-- version: 4 -->
<!-- version: 5 -->
# Documentation games.sasedev
@@ -49,3 +49,7 @@ Voir [`../RULES.md`](../RULES.md), notamment [`rules/RULES_COMMANDS.md`](rules/R
- [`testing/001-TEST_ARCHITECTURE.md`](testing/001-TEST_ARCHITECTURE.md) — séparation `unit_tests/` / `tests/`, tests ciblés et tracing de test.
- [`development/003-TRACING_AND_DIAGNOSTICS.md`](development/003-TRACING_AND_DIAGNOSTICS.md) — socle `tracing`, subscriber et appender communs.
## Historique validé
- [`../history/README.md`](../history/README.md) — convention et navigation de l'historique transitoire immuable des jalons validés.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/rules/RULES_COMMANDS.md -->
<!-- version: 3 -->
<!-- version: 4 -->
# Règles d'exécution des commandes
@@ -15,6 +15,7 @@
- **CMD-GEN-008** — Chaque fichier delta indique les commandes de validation que l'utilisateur doit exécuter et le statut connu de la validation du delta précédent.
- **CMD-GEN-009** — Lorsque l'utilisateur fournit une gate complète propre, le delta est considéré validé et le travail peut passer automatiquement au delta planifié suivant sauf instruction contraire.
- **CMD-GEN-010** — Si une gate échoue, la progression vers le delta suivant est suspendue ; le correctif est livré sous le suffixe `.fix.N` du delta courant, sauf décision explicite contraire.
- **CMD-GEN-011** — Les commandes d'audit Markdown couvrent également `history/` dès que cette arborescence existe.
## Rust et Cargo

View File

@@ -8,8 +8,14 @@
- **DOC-003** — Les documents normatifs résident sous `docs/rules/`.
- **DOC-004** — Les documents d'architecture résident sous `docs/architecture/`.
- **DOC-005** — Les documents de validation résident sous `docs/validation/`.
- **DOC-005A** — Les objectifs, classifications de jeux, évolutions moteur, monétisation, services et workflows résident dans leurs sous-répertoires thématiques de `docs/` et sont indexés par `docs/000-README.md`.
- **DOC-006** — Les documents internes sont en français ; code, symboles et extraits techniques conservent leur langue naturelle.
- **DOC-007** — Les tableaux Markdown suivent le format contrôlé par `scripts/audit_markdown_tables.py`.
- **DOC-008** — Deux lignes blanches consécutives sont interdites hors blocs de code.
- **DOC-009** — Un delta décrit les changements de sa version et ne devient pas un substitut au `CHANGELOG.md` ou aux règles durables.
- **DOC-009** — Un fichier sous `deltas/<X.Y.Z>/` décrit exactement la tranche livrée, son état de base et ses commandes de validation ; il est immuable après livraison.
- **DOC-010** — L'historique transitoire validé réside sous `history/<X.Y.Z>/` avec un fichier immuable par jalon accepté.
- **DOC-011** — Une entrée `history/` n'est créée qu'après validation du jalon qu'elle décrit ; le résultat d'une validation future n'est jamais pré-écrit.
- **DOC-012** — Le delta suivant, ou le fix suivant lorsqu'il existe, crée l'entrée `history/` du dernier jalon définitivement validé si elle n'existe pas encore.
- **DOC-013** — `CHANGELOG.md` reste une synthèse destinée aux jalons significatifs et ne reproduit pas l'historique détaillé des `pre.*` et de leurs fixes.
- **DOC-014** — Après la structuration initiale de `0.1.0`, les `pre.*` et `.fix.*` ne modifient normalement pas `CHANGELOG.md`. Les entrées `alpha` et `beta` peuvent y apparaître uniquement lorsqu'elles correspondent à un jalon externe significatif ; `rc` et releases stables y sont les jalons privilégiés.
- **DOC-015** — `ROADMAP.md` n'est pas modifié mécaniquement à chaque delta ; il change uniquement lorsque le périmètre, l'ordre, les objectifs ou les jalons planifiés évoluent réellement.
- **DOC-016** — `history/` et `deltas/` ont des rôles distincts : `deltas/` décrit une livraison candidate et sa validation attendue ; `history/` enregistre le résultat accepté et durable.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/001-VALIDATION_GATES.md -->
<!-- version: 4 -->
<!-- version: 5 -->
# Gates de validation
@@ -24,7 +24,7 @@ Les audits et gates de compilation restent ensuite :
```bash
python3 scripts/audit_rust_workspace_rules.py
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates Android deltas
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates Android deltas history
cargo check --workspace
cargo clippy --workspace --all-targets --all-features -- -D warnings
```

30
history/0.1.0/0-pre.3.md Normal file
View File

@@ -0,0 +1,30 @@
<!-- file: history/0.1.0/0-pre.3.md -->
<!-- version: 1 -->
# Historique 0.1.0-0-pre.3
## Statut
Validé par l'utilisateur le 2026-09-16.
## Gates validées
- `cargo fmt --all` ;
- `cargo fmt --all -- --check` ;
- audits Python du workspace et des tableaux Markdown ;
- `cargo check --workspace` ;
- `cargo clippy --workspace --all-targets --all-features -- -D warnings` ;
- `cargo test --workspace --all-targets --all-features` ;
- smoke `game-reflex-poc-desktop` ;
- smoke `game-snake-poc-desktop`.
## Résultats fonctionnels observés
```text
Reflex POC desktop runner: score=3 frames=3
Snake POC desktop runner: length=4 frames=3
```
## Portée durable
Ce jalon a introduit le contrat de boucle moteur indépendant de SDL3, les actions d'entrée abstraites, les capacités de monétisation par plateforme et la distinction entre runner Desktop natif et éventuelle distribution Tauri.

22
history/README.md Normal file
View File

@@ -0,0 +1,22 @@
<!-- file: history/README.md -->
<!-- version: 1 -->
# Historique transitoire validé
Cette arborescence conserve l'historique durable des jalons transitoires effectivement validés sans transformer `CHANGELOG.md` en journal de développement détaillé.
## Organisation
```text
history/
└── X.Y.Z/
├── 0-pre.N.md
├── 0-pre.N.fix.M.md
├── 1-alpha.N.md
├── 2-beta.N.md
└── 3-rc.N.md
```
Un fichier n'est créé qu'après validation du jalon qu'il décrit et devient ensuite immuable.
Le fichier delta correspondant décrit la livraison candidate et les commandes attendues ; le fichier `history/` décrit le résultat validé.

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env python3
# file: scripts/audit_project_workspace_rules.py
# version: 3
# version: 4
"""Audit mechanically verifiable games.sasedev workspace boundaries."""
@@ -63,6 +63,22 @@ def main() -> int:
for test_dir in sorted((root / "crates").rglob("src/**/tests")):
if test_dir.is_dir():
errors.append(f"RUST-TEST-003: integration tests directory forbidden under src/: {test_dir.relative_to(root).as_posix()}")
history_root = root / "history"
if history_root.exists():
for history_path in sorted(history_root.rglob("*.md")):
relative_history = history_path.relative_to(history_root)
if relative_history.as_posix() == "README.md":
continue
if len(relative_history.parts) != 2:
errors.append(f"DOC-010: history file must use history/<X.Y.Z>/<label>.md: {history_path.relative_to(root).as_posix()}")
continue
base_version, filename = relative_history.parts
if re.fullmatch(r"(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)", base_version) is None:
errors.append(f"DOC-010: invalid history base version directory: {history_path.relative_to(root).as_posix()}")
label = filename[:-3]
candidate = f"{base_version}-{label}"
if SEMVER.fullmatch(candidate) is None:
errors.append(f"DOC-010: invalid history milestone filename: {history_path.relative_to(root).as_posix()}")
forbidden_assets = [path for path in (root / "crates").rglob("assets") if path.is_dir()]
for path in forbidden_assets:
errors.append(f"GAME-ASSET-001: assets directory forbidden inside crates: {path.relative_to(root).as_posix()}")