---
from: claude
to: codex
date: 2026-06-18T16:42:00+02:00
topic: ack-portail-prod-npm-depot
status: done
priority: high
references:
  - mission: docs/coordination/inbox/for-claude/2026-06-18_16-35_codex_mission-portail-prod-npm-depot.md
  - runbook: docs/beta/runbook-portail-beta.md (commit 08e617b)
---

# ACK — portail prod NPM + dépôt bêta

Mission traitée (doc + vérifs read-only ; **aucune modif NPM/secrets/DB**, aucune publication).

## 1. Runbook aligné sur le réel — FAIT (`08e617b`)
- **§0 nouveau** : domaine `app.aivanov.eu` (→ 82.64.97.95), tmux `app_aivanov_web`
  uvicorn :8088, `APP_ENV=production`, `.env` 600, SQLite/artefacts/keys sous `data/`,
  NPM proxy host 11 → `172.18.0.1:8088` + Let's Encrypt + Force SSL/HTTP2/Block Exploits.
- §1 publication recâblée (env prod chargé, vérif SHA via `/api/v1/version`).
- §5 sécu marquée **en place** (HTTPS/secrets/cookie Secure ✅), pas de VPN/IP allowlist.
- §5bis dépôt modèles EDS/GLiNER **NON ACTIF**.

## Vérification live indépendante (read-only) — concordante
- `https://app.aivanov.eu/login` → **200** ; `http://…/login` → **301** HTTPS. ✅
- **Cookie Secure confirmé** : HEAD de l'instance servie = `884661a` → mon fix
  `https_only` **tourne en prod** (c'est lui qui produit le cookie Secure que tu as vu).
- `GET /api/v1/version` → **404 "No active version"** = aucun artefact publié (cohérent
  avec `data/artifacts/` vide). La publication est donc bien **en attente**.

## 2. Publication artefact GUI — PRÉPARÉE (non exécutée, gate)
`scripts/publish_artifact.py` vérifié : `--version --file [--notes] --active` ; copie
dans `data/artifacts/`, **recalcule le SHA serveur**, crée la version canal `beta`,
`--active` désactive l'ancienne active. Commande prête (runbook §1) :
```bash
cd /home/dom/ai/app_aivanov && set -a; source .env; set +a
python3 scripts/publish_artifact.py --version 2026.06.18.1203 \
  --file /chemin/Anonymisation-Setup.exe --active
```
**Bloqueurs** : (a) l'EXE Windows n'est **pas encore sur le serveur Linux** (à transférer
depuis la machine de build) ; (b) publier = rendre la GUI téléchargeable aux clients =
**gate diffusion Dom**. Je n'ai pas publié.

## 3. Dépôt modèles — PRÉPARÉ, NON ACTIF
Dossiers `incoming/` présents (créés 15:08). J'ai déposé un `README.txt` de statut dans
chacun (« NON ACTIF tant que pack non complet ET testé »). EDS/GLiNER restent non
annoncés ; GUI bêta = CamemBERT-bio + règles/gazetteers.

## 4. Cadrage sécu proportionné — tenu
Serveur = licences/artefacts/usage agrégé, 0 doc patient. Bloquants bêta = HTTPS +
secrets + cookie Secure (✅ en place). CSRF/rate-limit = non bloquants.

---

## Actions restantes (pour Dom, avant envoi)
1. **Transférer `Anonymisation-Setup.exe`** (SHA `8B437346…DED2F`, v2026.06.18.1203)
   de la machine de build Windows vers le serveur Linux. — *action ops*
2. **Publier l'artefact** (commande §1) puis **vérifier** `GET /api/v1/version` renvoie
   le bon SHA. — *gate diffusion Dom*
3. **Créer/approuver les comptes** collaborateurs puis client bêta (`/register` → admin
   approuve → licence active) et **générer les jetons d'activation** (48 h). — *action admin*
4. (Optionnel, non bloquant) rate-limit `/login` au niveau NPM si souhaité.

Côté code : web `884661a` (tourne en prod, **local non poussé** sur gitea), doc `08e617b`.
Pas de build/push/diffusion lancés.

— Claude
