mirror of
https://github.com/siop-spelev/siop2.git
synced 2026-08-08 12:41:54 +00:00
- Contrat (76 opérations) : Document expose inCorpus/indexedAt/chunkCount,
PATCH /documents/{id}/corpus (ASSETS.edit), POST /assistant/reindex
(bilan chiffré) ; ci-contract vérifie désormais aussi le client mobile.
- Web : page /assistant (chat sourcé — extraits exacts cités, Ouvrir vers
PDF authentifié ou fiche OT, avertissement permanent ; refus honnête
chiffré avec action utile) ; Bibliothèque = corpus (bandeau 09-08,
statut d'indexation par document, interrupteur d'exclusion PDF,
Réindexer tout) ; fiche OT : « Décrire pour suggérer » (Appliquer =
geste humain, liseré « suggéré » retiré au choix manuel).
- Mobile : chips de suggestion dans la clôture (un appui = un champ
pré-rempli, « réseau requis » hors-ligne — la file R4 n'en dépend pas).
- apps/ai : seuils AI_SEUIL_* configurables par env (CI + calibrage).
- CI e2e : service siop2-ai (embeddeur déterministe, seuils calibrés sur
mesures : match 0,66 vs bruit 0,11) + parcours R5 Playwright (PDF généré
xref valide → réindexation → réponse sourcée → refus → suggestion).
- Vérifié : 16/16 Playwright, 78 tests API, 23 pytest, 17 jest-expo ;
chaîne réelle au vrai modèle ONNX (web 7/7, mobile Expo web 6/6).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
51 lines
1.7 KiB
TypeScript
51 lines
1.7 KiB
TypeScript
import { defineConfig, devices } from '@playwright/test';
|
|
|
|
/**
|
|
* Parcours e2e (R0.12) — démarre l'API construite (dist) et Vite, puis joue
|
|
* le parcours démo. Localement : PW_CHANNEL=chrome évite le téléchargement
|
|
* de Chromium (utilise le Chrome installé) ; en CI, Chromium Playwright.
|
|
* Prérequis : PostgreSQL/Redis joignables, `pnpm --filter @siop/api build`.
|
|
*/
|
|
const API_ENV = {
|
|
NODE_ENV: 'test',
|
|
PORT: '3000',
|
|
DEMO_MODE: 'true',
|
|
JWT_SECRET: process.env.JWT_SECRET ?? 'e2e-secret-0123456789abcdef',
|
|
DATABASE_URL:
|
|
process.env.DATABASE_URL ?? 'postgresql://siop:siop@localhost:5432/siop',
|
|
REDIS_URL: process.env.REDIS_URL ?? 'redis://localhost:6379',
|
|
// R5 : le service IA écoute sur 8000 (CI : embeddeur déterministe,
|
|
// seuils abaissés — voir ci.yml ; localement : lancez apps/ai avant).
|
|
AI_SERVICE_URL: process.env.AI_SERVICE_URL ?? 'http://localhost:8000',
|
|
AI_SERVICE_TOKEN: process.env.AI_SERVICE_TOKEN ?? 'dev-only-ai-token',
|
|
};
|
|
|
|
export default defineConfig({
|
|
testDir: './e2e',
|
|
globalSetup: './e2e/global-setup.ts',
|
|
timeout: 30_000,
|
|
forbidOnly: !!process.env.CI,
|
|
retries: process.env.CI ? 1 : 0,
|
|
use: {
|
|
baseURL: 'http://localhost:5173',
|
|
trace: 'retain-on-failure',
|
|
...(process.env.PW_CHANNEL ? { channel: process.env.PW_CHANNEL } : {}),
|
|
},
|
|
projects: [{ name: 'chromium', use: { ...devices['Desktop Chrome'] } }],
|
|
webServer: [
|
|
{
|
|
command: 'node ../api/dist/main.js',
|
|
url: 'http://localhost:3000/health',
|
|
env: API_ENV,
|
|
reuseExistingServer: !process.env.CI,
|
|
timeout: 30_000,
|
|
},
|
|
{
|
|
command: 'pnpm dev',
|
|
url: 'http://localhost:5173',
|
|
reuseExistingServer: !process.env.CI,
|
|
timeout: 60_000,
|
|
},
|
|
],
|
|
});
|