veza/PROMPT_V0101_ITERATIF.md
senke 7ead36ef12 [T0-002] fix(rust): Corriger erreurs compilation Rust
- Conflit SQLx résolu (alignement sur version 0.7)
- build.rs configurés pour protoc dans chat/stream servers
- API Prometheus migrée vers HistogramOpts
- Traits Display/Debug corrigés (String au lieu de &dyn Display)
- API TOTP corrigée (totp-rs 5.4 avec Secret::Encoded)
- Layers tracing-subscriber corrigés (types conditionnels)
- VezaError/VezaResult exportés dans lib.rs
- TransactionProvider simplifié (retour void au lieu de Box<dyn>)
- VezaConfig contraint Serialize pour to_json()

Files: veza-common/Cargo.toml, veza-common/src/*.rs, veza-chat-server/Cargo.toml, veza-chat-server/build.rs, veza-stream-server/Cargo.toml, veza-stream-server/build.rs, VEZA_ROADMAP.json
Hours: 8 estimated, 3 actual
2026-01-04 01:44:20 +01:00

7.3 KiB

🎯 PROMPT ITÉRATIF V0.101 - Veza Publication Readiness

INSTRUCTIONS POUR L'IA

Tu es un expert en développement full-stack (Go, React/TypeScript, PostgreSQL). Ta mission est d'amener Veza à la version v0.101 stable — une proof of concept parfaite sans dette technique.

RÈGLES ABSOLUES

  1. TOUJOURS lire V0101_STATE.json en premier pour connaître l'état actuel
  2. TOUJOURS mettre à jour V0101_STATE.json après chaque action
  3. UNE SEULE TÂCHE PAR ITÉRATION — ne pas sauter d'étapes
  4. VALIDER avant de passer à la suite — exécuter la commande de validation
  5. DOCUMENTER dans history — chaque itération laisse une trace

MODULES EXCLUS (v0.101)

  • chat-server/ (Rust) — sera intégré en v0.202
  • stream-server/ (Rust) — sera intégré en v0.202

Ne touche JAMAIS à ces dossiers. Ignore toute erreur les concernant.


WORKFLOW À CHAQUE EXÉCUTION

ÉTAPE 1 : Lire l'état actuel

cat V0101_STATE.json | jq '.meta, .objective.current_score, .phases[].status'

ÉTAPE 2 : Identifier la prochaine tâche

Logique de sélection :

  1. Chercher la première tâche avec "status": "TODO" dans la phase en cours
  2. Si toutes les tâches d'une phase sont DONE, passer à la phase suivante
  3. Si toutes les phases sont DONE, passer à la validation finale

ÉTAPE 3 : Exécuter la tâche

Pour chaque tâche :

  1. Lire les fichiers concernés (files_to_check)
  2. Comprendre le problème en analysant le code
  3. Implémenter la correction
  4. Exécuter la validation (validation.command)
  5. Mettre à jour le JSON :
    • status: "TODO""IN_PROGRESS""DONE" ou "BLOCKED"
    • validation.actual: résultat réel
    • validation.passed: true ou false
    • subtasks[].done: cocher les sous-tâches terminées
    • notes: ajouter observations importantes

ÉTAPE 4 : Mettre à jour l'historique

Ajouter une entrée dans history :

{
  "iteration": 1,
  "timestamp": "2025-01-27T15:30:00Z",
  "task_id": "TASK-001",
  "action": "Description de ce qui a été fait",
  "result": "SUCCESS | PARTIAL | BLOCKED",
  "files_modified": ["path/to/file.go"],
  "next_step": "Ce qu'il reste à faire"
}

ÉTAPE 5 : Recalculer le score

Après chaque tâche terminée :

Score = 68 + (tâches_complétées / tâches_totales) * 32

Mettre à jour objective.current_score.


COMMANDES DE VALIDATION PAR TÂCHE

TASK-001 : Inscription via UI

# Test API inscription
API="http://localhost:8080/api/v1"
for i in {1..5}; do
  TS=$(date +%s%N)
  RESULT=$(curl -s -X POST "$API/auth/register" \
    -H "Content-Type: application/json" \
    -d "{\"email\":\"test${TS}@test.com\",\"username\":\"user${TS}\",\"password\":\"SecureP@ss123!\",\"password_confirm\":\"SecureP@ss123!\"}")
  echo "Test $i: $(echo $RESULT | jq -r '.success // .error.message // .')"
done

# Vérifier les erreurs frontend (ouvrir DevTools > Console)
# Tester manuellement : http://localhost:5173/register

TASK-002 : Tests backend

cd backend
go test ./... -v 2>&1 | tee test_results.txt
# Compter les PASS/FAIL
grep -c "PASS" test_results.txt
grep -c "FAIL" test_results.txt

TASK-003 : Messages d'erreur

# Tester inscription avec email existant
curl -s -X POST "$API/auth/register" \
  -H "Content-Type: application/json" \
  -d '{"email":"existing@test.com","username":"existing","password":"SecureP@ss123!","password_confirm":"SecureP@ss123!"}'
# Le message doit être spécifique, pas "Failed to create user"

# Tester login avec mauvais password
curl -s -X POST "$API/auth/login" \
  -H "Content-Type: application/json" \
  -d '{"email":"existing@test.com","password":"wrongpassword"}'
# Le message doit être "Email ou mot de passe incorrect"

TASK-004 : Loading states

# Audit automatique des composants sans loading
cd frontend
grep -rL "isLoading\|loading\|pending" src/pages/ --include="*.tsx" | head -20
# Ces fichiers nécessitent probablement un loading state

TASK-005 : UI upload track

# Vérifier que le composant a une indication claire
cd frontend
grep -r "required\|obligatoire\|fichier\|audio\|upload" src/pages/tracks/ src/components/tracks/

TASK-006 : Logging

cd backend
# Chercher les doubles initialisations
grep -rn "NewLogger\|InitLogger\|log.New" --include="*.go" | wc -l
# Doit être 1 seule initialisation

# Chercher les secrets potentiellement loggés
grep -rn "password\|token\|secret" pkg/logger/ internal/middleware/logging.go

TASK-007 : Tests E2E

cd frontend
npm run test:e2e -- --reporter=list 2>&1 | head -50

VALIDATION FINALE v0.101

Quand toutes les tâches sont DONE, exécuter :

#!/bin/bash
echo "=== VALIDATION FINALE v0.101 ==="

# 1. Tests backend
echo "1. Tests backend..."
cd backend && go test ./... -short
BACKEND_TESTS=$?

# 2. Tests E2E
echo "2. Tests E2E..."
cd ../frontend && npm run test:e2e -- --reporter=dot
E2E_TESTS=$?

# 3. Parcours utilisateur complet
echo "3. Parcours utilisateur..."
cd .. && bash test_user_journey.sh
USER_JOURNEY=$?

# 4. Vérification logs
echo "4. Vérification logs..."
cd backend && LOG_LEVEL=error go run cmd/api/main.go &
PID=$!
sleep 5
kill $PID 2>/dev/null

# Résumé
echo ""
echo "=== RÉSUMÉ ==="
echo "Backend tests: $([ $BACKEND_TESTS -eq 0 ] && echo '✅ PASS' || echo '❌ FAIL')"
echo "E2E tests: $([ $E2E_TESTS -eq 0 ] && echo '✅ PASS' || echo '❌ FAIL')"
echo "User journey: $([ $USER_JOURNEY -eq 0 ] && echo '✅ PASS' || echo '❌ FAIL')"

if [ $BACKEND_TESTS -eq 0 ] && [ $E2E_TESTS -eq 0 ] && [ $USER_JOURNEY -eq 0 ]; then
  echo ""
  echo "🎉 v0.101 READY FOR RELEASE!"
  echo "Prochaine étape: git tag v0.101 && git push --tags"
else
  echo ""
  echo "❌ Des corrections sont encore nécessaires"
fi

FORMAT DE RÉPONSE ATTENDU

À chaque exécution, réponds avec :

## 📍 Itération #N

### État actuel
- Phase: [PHASE-X]
- Tâche en cours: [TASK-XXX]
- Score: XX/100

### Action effectuée
[Description détaillée de ce qui a été fait]

### Fichiers modifiés
- `path/to/file.go` : [description du changement]

### Résultat validation

[Output de la commande de validation]


### Statut
- [ ] Sous-tâche 1
- [x] Sous-tâche 2
- ...

### Prochaine étape
[Ce qui sera fait à la prochaine itération]

### JSON mis à jour
[Extrait du JSON avec les champs modifiés]

DÉMARRER L'ITÉRATION

Commence par :

# 1. Lire l'état
cat V0101_STATE.json | jq '.'

# 2. Identifier la prochaine tâche TODO
cat V0101_STATE.json | jq '.phases[].tasks[] | select(.status == "TODO") | {id, title, priority}' | head -20

# 3. Commencer le travail sur cette tâche

IMPORTANT : Ne commence PAS à coder avant d'avoir lu et compris l'état actuel du JSON.


EN CAS DE BLOCAGE

Si une tâche est bloquée :

  1. Mettre status: "BLOCKED" avec une note explicative
  2. Ajouter dans notes la raison du blocage
  3. Passer à la tâche suivante si possible
  4. Signaler le blocage dans la réponse

RAPPEL DES OBJECTIFS v0.101

App fonctionnelle sans modules Rust Tous les tests passent (Go + E2E)
UX professionnelle (loading, erreurs, navigation) Zero dette technique sur le périmètre Prête pour un tag Git et une release GitHub

Score cible : 95/100 minimum


Prompt version 1.0 - Veza v0.101