Metadata-Version: 2.4
Name: baobab-ai-dev-core
Version: 0.2.0
Summary: Noyau métier Python pur de l'écosystème baobab-ai-development : entités, objets de valeur, enums, exceptions, politiques et contrats partagés.
Author-email: Michel ANDRIANAIVO <patrick.andri@gmail.com>
License-Expression: MIT
Project-URL: Homepage, https://github.com/baobabgit/baobab-ai-dev-core
Project-URL: Repository, https://github.com/baobabgit/baobab-ai-dev-core.git
Keywords: baobab,domain,core,workflow,ai-development
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Requires-Python: >=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

# baobab-ai-dev-core

Noyau métier Python pur de l'écosystème **baobab-ai-development**.

Ce module centralise le vocabulaire et les règles métier partagés par les modules
d'infrastructure : `database`, `documents`, `git`, `quality`, `providers`, `workflow`,
`API`, `CLI` et `workers`. Il ne réalise aucune I/O (réseau, disque, base de données) :
il modélise le domaine, valide les invariants et publie des contrats (`Protocol`) que
les adaptateurs externes implémentent.

## Rôle du module

`baobab-ai-dev-core` fournit :

- **Entités** — `Project`, `UseCase`, `UserStory`, `Feature`, `Backlog`, `WorkflowRun`,
  `WorkflowStep`, `WorkflowEvent`, `Job`, `AiProvider`, `Blocker`, `Artifact`, `QualityCheck`,
  `PullRequest`
- **Objets de valeur** — identifiants, codes métier (`UC-XXX`, `US-XXX`, `FEAT-XXX`, `BL-XXX`),
  noms de branches, titres, versions sémantiques
- **Enums** — statuts, types, sévérités et décisions stables du domaine
- **Exceptions** — hiérarchie `BaobabAiDevCoreError` avec messages exploitables
- **Politiques** — règles pures sans I/O (transitions, hiérarchie, branches, merge,
  quality gate, fallback provider)
- **Contrats `Protocol`** — repositories (dont `WorkflowEventRepositoryProtocol`), clients Git,
  PR, qualité, providers IA, horloge injectable, payload workflow

Le workflow documentaire **US → FEAT → BL** et la hiérarchie Git **`main` → `us/*` →
`feat/*` → `bl/*`** sont modélisés et validables dans ce noyau.

## Non-objectifs

Ce package **n'implémente pas** :

- API HTTP (FastAPI, etc.)
- Persistance SQL (SQLAlchemy, Alembic)
- Appels Git ou GitHub réels
- Exécution de providers IA (Cursor, Claude, GPT, Codex, etc.)
- Runners qualité réels, parsing Markdown, file de jobs persistée, CLI

Ces responsabilités appartiennent aux modules consommateurs qui implémentent les
`Protocol` du domaine.

## Prérequis

- Python **>= 3.12**
- Dépendances runtime : **aucune** (bibliothèque standard uniquement)

## Installation locale (développement)

Depuis la racine du dépôt :

```bash
python -m pip install -e .
```

Vérifier que le package est importable :

```bash
python -c "import baobab_ai_dev_core; print(baobab_ai_dev_core.__version__)"
```

## Premiers imports

### API publique stabilisée

Les consommateurs doivent importer depuis le package racine. Seuls les symboles listés
dans `__all__` constituent le contrat public stable :

```python
import baobab_ai_dev_core

print(baobab_ai_dev_core.__version__)  # "0.2.0"
print(baobab_ai_dev_core.__all__)        # ["__version__"]
```

```python
from baobab_ai_dev_core import __version__

assert __version__ == "0.2.0"
```

Tout symbole absent de `__all__` est considéré **interne** et peut évoluer sans
préavis. Les ré-exportations publiques des briques domaine seront étendues au fur et à
mesure de leur stabilisation.

### Accès aux briques domaine (usage interne écosystème)

En attendant l'élargissement de `__all__`, les modules de l'écosystème importent les
sous-packages du domaine avec des **imports absolus** :

```python
from baobab_ai_dev_core.domain.entities.workflow_event import WorkflowEvent
from baobab_ai_dev_core.domain.enums.workflow_event_type import WorkflowEventType
from baobab_ai_dev_core.domain.protocols import WorkflowEventRepositoryProtocol
```

Exemples détaillés : [`docs/examples/`](docs/examples/) (dont `workflow_event.md`).

Ne pas importer depuis des chemins relatifs ; ne pas dépendre de symboles non exportés
via `__all__` pour une API tierce.

## Arborescence du domaine

```text
src/baobab_ai_dev_core/domain/
  entities/       # entités avec identité et transitions explicites
  value_objects/  # objets immuables validés à la création
  enums/          # vocabulaires stables
  exceptions/     # erreurs métier
  policies/       # règles pures sans I/O
  protocols/      # contrats pour l'infrastructure
```

Les tests unitaires miroirs vivent sous `tests/baobab_ai_dev_core/domain/`.

## Commandes qualité

```bash
python -m pytest
python -m ruff check .
python -m mypy src
```

## Versionnement

Deux numérotations coexistent dans ce dépôt :

| Axe | Usage | Exemples |
| --- | ----- | -------- |
| **Produit** | Jalons specs et rapports de validation (`docs/specs/vX.Y.Z/`, `docs/reports/`) | `v1.0.0`, `v1.1.0` |
| **Semver PyPI** | `pyproject.toml`, `__version__`, publication et tags de référence consommateur | `0.1.0`, `0.2.0` |

État actuel : **semver `0.2.0`** = jalon produit **v1.1.0** (WorkflowEvent, UseCase). Le noyau reste **alpha** : seul `__version__` est dans `__all__` ; le domaine (`baobab_ai_dev_core.domain.*`) peut évoluer sans préavis jusqu'au passage semver `1.0.0`.

Détails et correspondance historique : [CHANGELOG.md](CHANGELOG.md).

## Historique des versions

Voir [CHANGELOG.md](CHANGELOG.md). Rapports de validation : [`docs/reports/`](docs/reports/).

## Licence

MIT — voir [LICENSE](LICENSE).
