0.1.0-0-pre.4-fix.1
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
# file: Cargo.toml
|
# file: Cargo.toml
|
||||||
# version: 5
|
# version: 6
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
resolver = "3"
|
resolver = "3"
|
||||||
@@ -15,7 +15,7 @@ members = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "0.1.0-0-pre.4"
|
version = "0.1.0-0-pre.4.fix.1"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
repository = "https://git.sasedev.com/Sasedev/games"
|
repository = "https://git.sasedev.com/Sasedev/games"
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
// file: crates/common/game-logging-lib/tests/test_support.rs
|
// file: crates/common/game-logging-lib/tests/test_support.rs
|
||||||
// version: 1
|
// version: 2
|
||||||
|
|
||||||
|
//! Integration coverage for the reusable test tracing support.
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn scoped_test_tracing_returns_test_result() {
|
fn scoped_test_tracing_returns_test_result() {
|
||||||
|
|||||||
80
deltas/0.1.0/0-pre.4.fix.1.md
Normal file
80
deltas/0.1.0/0-pre.4.fix.1.md
Normal 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`.
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
<!-- file: docs/000-README.md -->
|
<!-- file: docs/000-README.md -->
|
||||||
<!-- version: 4 -->
|
<!-- version: 5 -->
|
||||||
|
|
||||||
# Documentation games.sasedev
|
# 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.
|
- [`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.
|
- [`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.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<!-- file: docs/rules/RULES_COMMANDS.md -->
|
<!-- file: docs/rules/RULES_COMMANDS.md -->
|
||||||
<!-- version: 3 -->
|
<!-- version: 4 -->
|
||||||
|
|
||||||
# Règles d'exécution des commandes
|
# 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-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-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-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
|
## Rust et Cargo
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,14 @@
|
|||||||
- **DOC-003** — Les documents normatifs résident sous `docs/rules/`.
|
- **DOC-003** — Les documents normatifs résident sous `docs/rules/`.
|
||||||
- **DOC-004** — Les documents d'architecture résident sous `docs/architecture/`.
|
- **DOC-004** — Les documents d'architecture résident sous `docs/architecture/`.
|
||||||
- **DOC-005** — Les documents de validation résident sous `docs/validation/`.
|
- **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-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-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-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.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<!-- file: docs/validation/001-VALIDATION_GATES.md -->
|
<!-- file: docs/validation/001-VALIDATION_GATES.md -->
|
||||||
<!-- version: 4 -->
|
<!-- version: 5 -->
|
||||||
|
|
||||||
# Gates de validation
|
# Gates de validation
|
||||||
|
|
||||||
@@ -24,7 +24,7 @@ Les audits et gates de compilation restent ensuite :
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
python3 scripts/audit_rust_workspace_rules.py
|
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 check --workspace
|
||||||
cargo clippy --workspace --all-targets --all-features -- -D warnings
|
cargo clippy --workspace --all-targets --all-features -- -D warnings
|
||||||
```
|
```
|
||||||
|
|||||||
30
history/0.1.0/0-pre.3.md
Normal file
30
history/0.1.0/0-pre.3.md
Normal 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
22
history/README.md
Normal 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é.
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# file: scripts/audit_project_workspace_rules.py
|
# file: scripts/audit_project_workspace_rules.py
|
||||||
# version: 3
|
# version: 4
|
||||||
|
|
||||||
"""Audit mechanically verifiable games.sasedev workspace boundaries."""
|
"""Audit mechanically verifiable games.sasedev workspace boundaries."""
|
||||||
|
|
||||||
@@ -63,6 +63,22 @@ def main() -> int:
|
|||||||
for test_dir in sorted((root / "crates").rglob("src/**/tests")):
|
for test_dir in sorted((root / "crates").rglob("src/**/tests")):
|
||||||
if test_dir.is_dir():
|
if test_dir.is_dir():
|
||||||
errors.append(f"RUST-TEST-003: integration tests directory forbidden under src/: {test_dir.relative_to(root).as_posix()}")
|
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()]
|
forbidden_assets = [path for path in (root / "crates").rglob("assets") if path.is_dir()]
|
||||||
for path in forbidden_assets:
|
for path in forbidden_assets:
|
||||||
errors.append(f"GAME-ASSET-001: assets directory forbidden inside crates: {path.relative_to(root).as_posix()}")
|
errors.append(f"GAME-ASSET-001: assets directory forbidden inside crates: {path.relative_to(root).as_posix()}")
|
||||||
|
|||||||
Reference in New Issue
Block a user