Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
version: 2
updates:
# Couple pip-compile : requirements.in et verrou genere requirements.txt.
- package-ecosystem: pip
directory: /service
schedule:
Expand Down
7 changes: 4 additions & 3 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,11 @@ jobs:
with:
python-version: "3.12"
cache: pip
cache-dependency-path: service/requirements.lock
cache-dependency-path: service/requirements.txt
# Les deux fichiers doivent etre compatibles : une mise a jour sans nouveau verrou echoue.
- run: python -m pip install -r requirements.lock -r requirements.txt
- run: python -m pip install -r requirements.txt -r requirements.in
- run: python -m pip check
- run: python -m pip install pip-audit==2.10.1
- run: python -m pip_audit -r requirements.lock --no-deps --disable-pip
- run: python -m pip_audit -r requirements.txt --no-deps --disable-pip
- run: python -m pytest tests/ -q
- run: python -m evals.run --dry-run
6 changes: 3 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ CPython 3.12.10). Elle ne fait pas partie de `dotnet test` et se lance a part :

```bash
cd service
python -m venv .venv && ./.venv/Scripts/python.exe -m pip install -r requirements.lock
python -m venv .venv && ./.venv/Scripts/python.exe -m pip install -r requirements.txt
./.venv/Scripts/python.exe -m pytest tests/ -q # 89 tests
./.venv/Scripts/python.exe -m evals.run --dry-run # le harnais d'evaluation, sans reseau
```
Expand Down Expand Up @@ -598,8 +598,8 @@ au joueur garde le mot qu'il a employé.
sans barres encadrantes, que GitHub aurait rendu en paragraphe. Le rapport s'écrit désormais
**avant** d'être affiché : un passage réel coûte des appels facturés et ne doit pas se perdre sur
un caractère que le terminal ignore ;
* **les versions testées sont figées dans `service/requirements.lock`**, utilisé pour les
installations, Docker et la CI. `requirements.txt` déclare les dépendances directes ; les mises
* **les versions testées sont figées dans `service/requirements.txt`**, utilisé pour les
installations, Docker et la CI. `requirements.in` déclare les dépendances directes ; les mises
à jour du verrou doivent passer les tests et l'audit de vulnérabilités avant publication ;
* `service/evals/results.md` — le tableau des modèles, des deux ablations et du **taux de faux
acceptés** — demande une clé OpenRouter et des appels facturés. Le `--dry-run` valide **le harnais,
Expand Down
2 changes: 1 addition & 1 deletion README.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ The language service is optional and ships its own suite (Python 3.12):

```bash
cd service
python -m venv .venv && ./.venv/Scripts/python.exe -m pip install -r requirements.lock
python -m venv .venv && ./.venv/Scripts/python.exe -m pip install -r requirements.txt
./.venv/Scripts/python.exe -m pytest tests/ -q # 89 tests, offline
./.venv/Scripts/python.exe -m evals.run --dry-run # the evaluation harness, offline
```
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ Le service de langage est optionnel, avec sa propre suite (Python 3.12) :

```bash
cd service
python -m venv .venv && ./.venv/Scripts/python.exe -m pip install -r requirements.lock
python -m venv .venv && ./.venv/Scripts/python.exe -m pip install -r requirements.txt
./.venv/Scripts/python.exe -m pytest tests/ -q # 89 tests, sans réseau
./.venv/Scripts/python.exe -m evals.run --dry-run # le harnais d'évaluation, sans réseau
```
Expand Down
7 changes: 4 additions & 3 deletions docs/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -2070,9 +2070,10 @@ dans la mission. Rejouer ne reinterroge aucun modele.
Windows etant en cp1252 et le rapport contenant des fleches, qui detruisait un passage entierement
reussi ; et une ligne de tableau sans barres encadrantes, que GitHub rend en paragraphe. Le rapport
s'ecrit desormais avant d'etre affiche.
* Les versions installees depassent les planchers de `requirements.txt` — `langgraph 1.2.11` et
`langchain-core 1.6.3` contre `>=0.2.40` et `>=0.3.15`. Tout fonctionne, mais les bornes ne
decrivent plus ce qui a ete eprouve : c'est le defaut d'une borne basse seule, et il reste ouvert.
* Les anciennes bornes basses ne decrivaient plus les versions eprouvees. Ce defaut est corrige :
`service/requirements.in` declare les dependances directes et pip-compile produit
`service/requirements.txt`, installe par Docker et la CI. Dependabot reconnait ce couple et
peut actualiser le verrou ; la CI refuse un plancher incompatible avec les versions figees.
* `service/evals/results.md` — le tableau des modeles, des deux ablations et du **taux de faux
acceptes** — n'existe pas encore : il demande une cle OpenRouter et des appels factures. Le
`--dry-run` eprouve **le harnais, pas les modeles** ; son « 0 % de faux acceptes » vient d'un
Expand Down
27 changes: 20 additions & 7 deletions docs/securite.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ sans jeton, `/instruction` répond 503 ; un jeton absent ou erroné répond 401.
| Intégrité | Les empreintes SHA-256 servent au cache et à la traçabilité. Elles ne prouvent pas l'origine d'un fichier. Le dépôt ne fournit pas de signature cryptographique des configurations ou des binaires. |
| Fournisseur | Adresse limitée à HTTPS sur `openrouter.ai`, réglages numériques validés au démarrage. L'environnement du poste reste une entrée de confiance. |
| Conteneur | Utilisateur sans privilèges ; système de fichiers en lecture seule, capacités supprimées et ressources bornées dans Compose. |
| Dépendances | Versions testées dans `service/requirements.lock`, audit des vulnérabilités Python en CI, mises à jour proposées par Dependabot et actions CI épinglées par commit. Ce verrouillage ne constitue pas une signature des paquets. |
| Dépendances | Versions testées dans `service/requirements.txt`, audit des vulnérabilités Python en CI, mises à jour proposées par Dependabot et actions CI épinglées par commit. Ce verrouillage ne constitue pas une signature des paquets. |

La validation syntaxique et le typage ne prouvent pas que la traduction respecte l'intention.
Une injection peut produire une contrainte formellement valide mais indésirable : le vocabulaire
Expand Down Expand Up @@ -100,12 +100,25 @@ d'attribuer les anciens taux à cette version. Les passages futurs écrivent aus
et versions des dépendances. Ce manifeste exclut les clés et jetons ; il sert à comparer les prises,
sans promettre une réponse identique du fournisseur.

Pour mettre à jour les dépendances : installer les versions choisies dans un environnement dédié,
régénérer `requirements.lock` avec `python -m pip freeze`, puis vérifier les deux fichiers ensemble
avec `python -m pip install -r requirements.lock -r requirements.txt` et `python -m pip check`.
Exécuter les tests et `python -m pip_audit -r requirements.lock --no-deps --disable-pip`.
La CI installe les deux fichiers ensemble : relever une version minimale sans synchroniser le
verrou fait échouer la résolution, avant les tests. Vérifier le diff avant publication.
Les dépendances suivent le [format pip-tools](https://pip-tools.pypa.io/en/stable/) :
`service/requirements.in` contient les dépendances directes et `service/requirements.txt` le verrou
généré avec son en-tête et ses références aux dépendances sources. Dependabot reconnaît ce couple
et peut régénérer le verrou dans ses PR. L'ancien nom `requirements.lock` ne permettait pas cette
association : Dependabot ne mettait à jour que les planchers.

Pour mettre à jour les dépendances, installer `pip-tools==7.6.2` dans un environnement d'outillage
Python 3.12, modifier `requirements.in`, puis exécuter depuis `service/` :

```bash
python -m piptools compile --strip-extras --no-emit-index-url --no-emit-trusted-host --output-file=requirements.txt requirements.in
```

Le verrou existant conserve les versions encore compatibles. Pour actualiser une dépendance sans
relever son plancher, ajouter `--upgrade-package nom_du_paquet`. Vérifier le diff, installer dans un
environnement propre avec `python -m pip install -r requirements.txt -r requirements.in`, exécuter
`python -m pip check`, les tests et `python -m pip_audit -r requirements.txt --no-deps --disable-pip`.
La CI installe les deux fichiers ensemble : relever un plancher sans synchroniser le verrou fait
échouer la résolution avant les tests. Docker installe le même verrou, sans l'outillage pip-tools.

Sur GitHub, les alertes et mises à jour de sécurité Dependabot, la détection de secrets et leur
blocage au push sont activés. Ces réglages du dépôt sont indépendants des fichiers versionnés :
Expand Down
4 changes: 2 additions & 2 deletions service/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ FROM python:3.12-slim
WORKDIR /service

# Les dependances d'abord, et seules : une couche qui ne se reconstruit pas a chaque edition du code.
COPY requirements.lock .
RUN pip install --no-cache-dir -r requirements.lock
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY app/ app/
COPY evals/ evals/
Expand Down
9 changes: 5 additions & 4 deletions service/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Python 3.12 — éprouvé sur **CPython 3.12.10**.
cd service
python -m venv .venv
. .venv/bin/activate # Windows : .venv\Scripts\activate
pip install -r requirements.lock
pip install -r requirements.txt
```

La clé d'API se met dans l'environnement, **jamais dans un fichier** :
Expand Down Expand Up @@ -334,8 +334,9 @@ voudra « juste renvoyer le domaine compilé pour déboguer ».
## Ce qui reste

* `evals/results.md` — demande une clé OpenRouter et des appels facturés ;
* les versions testées sont figées dans `requirements.lock` ; maintenir ce fichier avec les mises
à jour proposées. La CI installe ensemble le verrou et `requirements.txt` : toute incompatibilité
fait échouer l'installation avant les tests et l'audit des vulnérabilités ;
* les dépendances directes sont dans `requirements.in` ; `requirements.txt` est le verrou généré
par pip-compile, que Dependabot sait mettre à jour. La CI installe les deux fichiers ensemble :
toute incompatibilité fait échouer l'installation avant les tests et l'audit des vulnérabilités.
Procédure de mise à jour : [`docs/securite.md`](../docs/securite.md) ;
* le portillon 3 (Fast Downward) reste **hors ligne** et indépendant de ce service : voir
[`tools/pddl/README.md`](../tools/pddl/README.md).
19 changes: 19 additions & 0 deletions service/requirements.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Service d'instructions tactiques (livrable 15).
#
# Rien ici n'est une dependance du jeu : Hordinary tourne sans ce service, et la suite de tests .NET
# passe avec lui arrete. Ce fichier declare les dependances directes ; pip-compile genere
# requirements.txt, qui fige les versions testees pour les installations, Docker et la CI.

fastapi>=0.162.0
uvicorn[standard]>=0.54.0
pydantic>=2.14.1

langgraph>=1.2.18
langchain-core>=1.7.0
langchain-openai>=1.7.3
certifi>=2026.10.23
langgraph-sdk>=0.4.10

# Tests et evaluation. httpx sert au client de test de FastAPI, pas au service lui-meme.
pytest>=9.1.1
httpx>=0.28.1
56 changes: 0 additions & 56 deletions service/requirements.lock

This file was deleted.

Loading