Metadata-Version: 2.4
Name: riftbound-core
Version: 0.1.1
Summary: Noyau métier pur et typé du projet Riftbound : cartes, decks, formats et validation statique de deck.
Project-URL: Homepage, https://github.com/baobabgit/riftbound-core
Project-URL: Documentation, https://github.com/baobabgit/riftbound-core/blob/main/src/riftbound_core/docs/deck_validation.md
Project-URL: Repository, https://github.com/baobabgit/riftbound-core
Project-URL: Changelog, https://github.com/baobabgit/riftbound-core/blob/main/CHANGELOG.md
Project-URL: Issues, https://github.com/baobabgit/riftbound-core/issues
Author: Michel ANDRIANAIVO
License-Expression: MIT
License-File: LICENSE
Keywords: deck,domain-model,riftbound,tcg,validation
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Typing :: Typed
Requires-Python: >=3.11
Provides-Extra: dev
Requires-Dist: bandit<2,>=1.7; extra == 'dev'
Requires-Dist: black<26,>=24; extra == 'dev'
Requires-Dist: coverage[toml]<8,>=7; extra == 'dev'
Requires-Dist: flake8-pyproject<2,>=1.2; extra == 'dev'
Requires-Dist: flake8<8,>=7; extra == 'dev'
Requires-Dist: mypy<2,>=1.10; extra == 'dev'
Requires-Dist: pylint<5,>=3; extra == 'dev'
Requires-Dist: pytest-asyncio<1,>=0.23; extra == 'dev'
Requires-Dist: pytest<9,>=7; extra == 'dev'
Description-Content-Type: text/markdown

# riftbound-core

Noyau métier pur et typé pour le jeu de cartes **Riftbound** : modèles de cartes
et de decks, formats, règles de construction statiques, sérialisation et analyse
simple — sans réseau, sans base de données et sans dépendance runtime externe.

**Statut :** release `0.1.1` (beta) — périmètre V1 livré (validation statique,
sérialisation, primitives descriptives de jeu).

## Installation

Python `>=3.11` requis.

```bash
python -m pip install riftbound-core
```

Pour contribuer au dépôt :

```bash
git clone https://github.com/baobabgit/riftbound-core.git
cd riftbound-core
python -m pip install -e ".[dev]"
```

## Périmètre

**Inclus dans ce package :**

- modèles `Card`, `Deck`, formats et banlist ;
- validation statique de deck (`DeckValidator`, codes d'erreur stables) ;
- sérialisation JSON et decklist texte (`riftbound-decklist/1`) ;
- analyse simple (courbe de coût, distributions) ;
- factories de test (`riftbound_core.testing`).

**Hors périmètre** (packages futurs de l'écosystème) :

- moteur de règles complet et résolution d'effets ;
- API HTTP, persistance, interface graphique ;
- IA de deckbuilding et simulation de parties.

## Démarrage rapide

L'API racine expose uniquement `__version__`. Les symboles métier s'importent
depuis leurs sous-modules.

```python
import riftbound_core
from riftbound_core.cards.domain import Domain
from riftbound_core.testing.deck_factory import DeckFactory
from riftbound_core.validation.deck_validator import DeckValidator

print(riftbound_core.__version__)
print(Domain.FURY.french_label)  # Fureur

deck = DeckFactory.duel_legal()
result = DeckValidator().validate(deck)
if not result.is_valid:
    for issue in result.issues:
        print(issue.code, issue.message)
```

Exemples supplémentaires (cartes, formats, sérialisation) : voir la
[documentation développeur](#documentation).

## Documentation

Guides embarqués après installation PyPI :

```python
from riftbound_core.docs import DECK_VALIDATION_DOC, read_doc

print(read_doc(DECK_VALIDATION_DOC))
```

| Ressource | Emplacement |
|-----------|-------------|
| Validation de deck | [`src/riftbound_core/docs/deck_validation.md`](src/riftbound_core/docs/deck_validation.md) |
| Correspondance règles / codes | [`src/riftbound_core/docs/rules_mapping.md`](src/riftbound_core/docs/rules_mapping.md) |
| Changelog | [`CHANGELOG.md`](CHANGELOG.md) |
| Cahier des charges V1 | [`docs/riftbound-core/`](docs/riftbound-core/) |

Sur PyPI, les mêmes guides sont disponibles via `riftbound_core.docs` (voir ci-dessus).
Les sources complètes du dépôt (backlogs, runs IA) restent sur GitHub.

## Principes

- **Pur** : aucun I/O réseau, aucune persistance, aucune IA embarquée.
- **Typé** : `mypy` strict, marqueur PEP 561 `py.typed`.
- **Testé** : couverture ≥ 90 %, CI sur chaque PR et release.
- **Déterministe** : résultats stables pour un même entrée métier.

## Contrôles qualité (développement)

```bash
pytest
coverage run -m pytest
coverage report
black --check src tests scripts/ia_workflow
flake8 src tests scripts/ia_workflow
pylint src/riftbound_core scripts/ia_workflow
mypy src/riftbound_core scripts/ia_workflow
python -m bandit -r src/riftbound_core scripts/ia_workflow
```

## Publication PyPI

La release est automatisée par [`.github/workflows/release.yml`](.github/workflows/release.yml)
(Trusted Publishing OIDC, attestations Sigstore, GitHub Release).

Procédure maintainer :

1. Mettre à jour `__version__` dans `src/riftbound_core/__init__.py` et `CHANGELOG.md`.
2. Committer sur `main`.
3. Créer et pousser un tag SemVer : `git tag vX.Y.Z && git push origin vX.Y.Z`.
4. Vérifier le workflow **Release** (qualité → tests → build → PyPI → GitHub Release).

Prérequis PyPI (une fois) : pending publisher ou trusted publisher sur le projet
`riftbound-core`, workflow `release.yml`, environnement GitHub `pypi`.

## Licence

MIT — voir [`LICENSE`](LICENSE).
