# État du projet — 20 août 2026

Point de reprise. Ce fichier remplace le contexte d'une session close.

## Ce qu'est Comptoir

Conseiller conversationnel pour site catalogue : remplace le moteur à filtres par
une discussion, et rend au commercial **un projet qualifié** au lieu d'une demande
par référence. Développé comme **produit revendable**, avec Flandre Opale Habitat
comme pilote — FOH n'est pas le client de la feature, c'est le terrain d'essai.

Spécification complète, chiffres et arbitrages :
https://claude.ai/code/artifact/c7face29-b471-4b34-9b7c-6859de47b8ad

## Où vit le code

    /Users/rd/dev/comptoir      le produit (ce dépôt) — AUCUN COMMIT à ce jour
    /Users/rd/dev/foh           le site pilote

Reliés par un dépôt Composer de type `path` (symlink) : éditer le package se voit
immédiatement dans FOH, sans `composer update`.

Côté FOH, trois fichiers seulement — c'est tout ce que coûtera un client suivant :

| Fichier | Rôle |
|---|---|
| `app/Comptoir/SourceAnnonces.php` | l'adaptateur catalogue |
| `app/Comptoir/ComparateurContacts.php` | la référence « avant » pour le rapport |
| `config/comptoir.php` | le métier : attributs, persona, profil, plafonds |

Plus une ligne `@include('comptoir::cta')` dans `resources/views/annonce/index.blade.php`.

## Ce qui fonctionne

- **Le moteur tourne contre l'API réelle** (SDK `anthropic-ai/sdk` **^0.42** — la
  contrainte `^0.7` bloquait sur une version sans `MessageAccumulator`).
- Flux SSE, appels d'outils, validation des identifiants, sélection, profil,
  demande, back-office, compteur d'usage, rapport, purge.
- **28 tests** : `vendor/bin/phpunit` (sans base ni clé).
- Mode démonstration : rejoue un échange préenregistré, sans dépense.

## État actuel du poste

- `COMPTOIR_SIMULATION=true` dans le `.env` de FOH → aucune dépense.
- `COMPTOIR_DESTINATAIRES` **vide** → la demande s'enregistre, aucun mail ne part.
- Base locale `foh` = dump de production du 19 août 2026 (132 annonces, 19 342 demandes).
- Serveur : `php -S 127.0.0.1:8000 server.php`. **Utiliser 127.0.0.1, jamais
  localhost** — Docker occupe le même port en IPv6 et répond des 404.

    http://127.0.0.1:8000/conseiller          le conseiller
    http://127.0.0.1:8000/logement            le CTA dans le site
    http://127.0.0.1:8000/admin/conseiller    les demandes reçues

## Chiffres mesurés, pas estimés

| | |
|---|---|
| Catalogue FOH | 84 annonces en ligne |
| Préfixe mis en cache | **35 589 tokens** (compté par l'API, pas approximé) |
| Conversation de 8 messages | **≈ 0,37 $** — 16 appels, un outil coûtant un aller-retour de plus |
| 200 conversations / mois | ≈ 73 $ |
| Premier mot | 3,5 s à effort `low` (7,2 s à `medium`) |

Ne jamais estimer les tokens par « caractères ÷ 3,6 » : sous-estime de 62 % en
français accentué. Utiliser `messages->countTokens`.

## Réglages issus des essais réels

- `effort` → `low` : deux fois moins d'attente, questions aussi pertinentes.
- `texte_max` → **1 400** et non 700 : à 700, 12 des 17 fiches portant une date
  limite d'offre ou des modalités de visite perdaient cette information.
- Quatre consignes au prompt : une phrase avant chaque outil, retenir dès le
  premier signe d'intérêt, ne jamais décrire une démarche absente du catalogue,
  trois à cinq lignes par réponse. **Verrouillées par un test.**

## Design retenu

Police **Archivo** seule, titre centré, logo FOH 60 px en haut à gauche, fond
neutre froid `#F6F7F9`. Pas d'avatar, pas de bulles côté conseiller — du texte
courant, seul le visiteur a une pastille.

⚠️ Archivo est chargé depuis Google Fonts : **à héberger localement avant la
production**, un appel à `fonts.gstatic.com` transmet l'IP de chaque visiteur.

## Ce qui reste

1. **Le SSE derrière nginx** — testé en CLI et via `php -S`, jamais en production.
2. `COMPTOIR_DESTINATAIRES` à renseigner.
3. **Le nom** « Comptoir » est un nom de travail, déjà dans le namespace.
4. `composer audit` : 32 avis de sécurité sur 10 paquets, préexistants.
5. Rien n'est commité, ni ici ni dans FOH. `composer.json.avant-comptoir` traîne
   dans le dépôt FOH (ma sauvegarde, à retirer).
6. Le serveur PHP intégré est mono-processus : une conversation en cours bloque
   les autres requêtes. `PHP_CLI_SERVER_WORKERS=4` si besoin.

## Vérifier en trois commandes

    cd /Users/rd/dev/comptoir
    vendor/bin/phpunit      # 28 tests, ni base ni clé
    php tests/apercu.php    # taille et coût réels du prompt
    php tests/boucle.php    # boucle d'outils complète, hors ligne
    php tests/cle.php       # la clé API répond-elle ?
