v0.3.7-pre.016

This commit is contained in:
2026-09-03 06:26:49 +02:00
parent a266a4d7b6
commit d8f7c9bd8b
15 changed files with 423 additions and 47 deletions

View File

@@ -0,0 +1,145 @@
<!-- file: crates/ksp-app-backfill-desk/USAGE.md -->
<!-- version: 1 -->
# Utilisation de `ksp-app-backfill-desk`
## 1. Lancement
Depuis la racine du workspace :
```bash
(cd crates/ksp-app-backfill-desk && cargo tauri dev)
```
Le runtime charge le composite Backfill Desk via `ksp-config-lib`, construit le pool HTTP, ouvre Store puis vérifie que les deux surfaces utilisent le même réseau avant d'autoriser une campagne.
## 2. Choix du profil et readiness
Le composite `cfg.composite.ksp-app-backfill-desk` utilise Mainnet par défaut. Devnet et Testnet restent disponibles via la sélection Config du profil composite.
Avant Start, l'écran indique séparément :
```text
Transport ready
Store ready
Network coherent
Composition ready
```
Une composition non ready doit être corrigée côté Config/runtime ; le frontend ne peut pas fournir une URL RPC, une URI Store ou un secret pour contourner ces contrôles.
## 3. Adresse et autocomplete Program IDs
Le champ adresse accepte toute Pubkey Solana valide. Le `datalist` propose en complément les Program IDs du registre canonique `ksp-core-lib` avec leurs metadata publiques.
Choisir une proposition remplit simplement le champ ; une adresse absente du dataset reste autorisée. Le dataset n'est pas une allow-list.
## 4. Scopes
Les scopes disponibles sont :
```text
latest_address
before_address
after_address
explicit_signatures
```
`latest_address` recherche l'historique récent d'une adresse. `before_address` et `after_address` ajoutent une signature d'ancrage selon la sémantique Backfill. `explicit_signatures` traite une liste explicite de signatures et n'accepte pas `min_context_slot`.
Les signatures et adresses sont revalidées côté Rust ; leur présence dans le formulaire ne les rend pas persistantes dans le frontend.
## 5. Engagement, route HTTP et bornes
Les engagements disponibles sont `finalized` et `confirmed`.
Le sélecteur HTTP expose uniquement des rôles logiques que le backend a vérifiés compatibles avec les deux méthodes nécessaires au Backfill. Le rôle pool permet au Transport de choisir/rerouter entre endpoints selon ses propres règles ; les rôles ciblés permettent de sélectionner une route logique spécifique sans exposer l'URL physique.
Les bornes de campagne comprennent notamment :
```text
page size
max pages
max candidates
hydration concurrency
min context slot
```
Les limites maximales proviennent de `ksp-job-backfill-lib` et sont revalidées lors de la conversion vers `BackfillRequest`.
## 6. Valider puis démarrer
**Valider la requête** projette un résumé sûr de la campagne sans démarrer le job.
**Démarrer** crée ensuite un JobId backend et installe le handle de contrôle avant le spawn asynchrone. Un second Start est refusé tant qu'un run est actif, y compris pendant `cancelling`.
## 7. Monitoring latest-value
La carte de monitoring est alimentée par les snapshots latest-value du runtime. Le backend émet `ksp-backfill-status`; **Resynchroniser** appelle également `backfill_status` afin de récupérer explicitement le dernier état complet.
Les informations utiles incluent :
- lifecycle et phase ;
- scope et discovery boundary ;
- candidats selected/admitted/finished ;
- entités et observations inserted/existing ;
- purged/missing/conflicts/holes/cancelled candidates ;
- maximum in flight ;
- contiguous completed ;
- présence d'un checkpoint ;
- domain/code stable d'échec éventuel.
Le monitoring ne doit pas être interprété depuis les logs texte.
## 8. Annuler
**Annuler** envoie le JobId actuellement affiché. Cette cible protège un nouveau run contre une requête Cancel retardée destinée au run précédent.
Le premier Cancel pré-terminal demande une annulation coopérative. Une répétition est idempotente. Le lifecycle peut passer par `cancelling`; les opérations déjà admises vers la persistence ne sont pas présentées comme brutalement interrompues.
## 9. Reprendre
**Reprendre** est disponible uniquement lorsqu'un snapshot terminal retenu contient un checkpoint. La commande n'accepte aucun checkpoint ou payload de campagne depuis le frontend.
Le backend :
1. exige qu'aucun run ne soit actif ;
2. récupère la requête terminale Rust-only ;
3. revalide le réseau Store et le rôle HTTP courant ;
4. génère un nouveau JobId ;
5. demande à `ksp-job-backfill-lib` de réémettre le checkpoint pour ce JobId ;
6. relance le même runtime/monitoring.
La reprise est limitée à la session courante. Fermer l'application supprime ce checkpoint applicatif en mémoire.
## 10. Fermeture de l'application
La fermeture de la fenêtre principale bloque d'abord tout nouveau Start, tente une annulation coopérative du run actif puis ferme Store avant l'exit.
Le shutdown applicatif n'est pas un mécanisme de checkpoint durable ou de reprise après crash.
## 11. Données qui ne traversent pas le frontend
Backfill Desk ne projette jamais :
```text
URI Store
URL RPC
credentials/secrets
payload RAW
checkpoint/cursor concret
handles Store/Transport/Job
contexte d'erreur arbitraire
```
Les actions utilisateur et transitions sont instrumentées via Logging KSP sans journaliser adresse, signature ou payload métier.
## 12. Runtime packagé
Le build Tauri embarque les documents Config/schemas enregistrés. `ksp-config-lib` prépare ensuite la racine KSP user-writable et conserve les Config utilisateur existantes ; `.env` n'est jamais embarqué.
Le build production est :
```bash
(cd crates/ksp-app-backfill-desk && cargo tauri build)
```