v0.1.0-pre.075

This commit is contained in:
2026-08-01 11:28:43 +02:00
parent 621bf3d2c4
commit f4331cf48a
11 changed files with 484 additions and 413 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/README.md -->
<!-- version: 8 -->
<!-- version: 9 -->
# Documentation active de Khadhroony Bot3
@@ -39,6 +39,7 @@ Modèles documentaires non génératifs :
## 4. Audits et décisions actifs
- [`audits/V0_4_6_ALIGNMENT_AUDIT.md`](audits/V0_4_6_ALIGNMENT_AUDIT.md) ;
- [`audits/PRE_0_4_6_STATIC_CODE_AUDIT.md`](audits/PRE_0_4_6_STATIC_CODE_AUDIT.md) ;
- [`decisions/DOCUMENT_ARCHIVE_SELECTION_POLICY.md`](decisions/DOCUMENT_ARCHIVE_SELECTION_POLICY.md) ;
- [`decisions/WINCODE_COMPATIBILITY_POLICY.md`](decisions/WINCODE_COMPATIBILITY_POLICY.md).

View File

@@ -0,0 +1,57 @@
<!-- file: docs/audits/PRE_0_4_6_STATIC_CODE_AUDIT.md -->
<!-- version: 1 -->
# Audit statique préalable à `0.4.6`
## Résumé
Laudit statique a été exécuté sur larchive complète `v0.1.0-pre.074-fix001`.
## Résultats propres
- seul `kb-config` dépend directement de `dotenvy` ;
- 50 commandes littérales appelées par le frontend ont été détectées ;
- les 50 sont présentes dans `tauri::generate_handler!` ;
- les huit commandes enregistrées non appelées directement depuis TypeScript correspondent aux ouvertures de fenêtres déclenchées depuis le menu Rust ;
- `AppState` possède la session WebSocket persistante ;
- la destruction de `demo_ws` ne contient pas de déconnexion statique ;
- la destruction de la fenêtre principale appelle la déconnexion globale ;
- aucune ancienne crate consolidée nest redevenue une dépendance Cargo active ;
- les onze crates possèdent les quatre documents obligatoires.
## Écart démontré : `tauri.rs` reste trop substantiel
`kb-app-demo-desktop/src/tauri.rs` contient encore environ 1 900 lignes et appelle directement :
- `kb_pipeline::execute_decode_replay` ;
- `kb_pipeline::execute_http_backfill` ;
- `kb_store::PostgresStore::connect` et des repositories ;
- les scénarios Devnet Solana Core, Memo, SPL Token, ATA et Token-2022 ;
- la construction de listes de matérialisateurs et de filtres de diagnostics.
Le fichier nest donc pas encore uniquement une couche mince de wrappers `#[tauri::command]`.
### Décision
Avant `0.4.6`, déplacer lorchestration vers les modules fonctionnels déjà présents :
- `demo_backfill.rs` ;
- `demo_core_extraction.rs` ;
- `demo_decode_replay.rs` ;
- `demo_execution_solana_core.rs` ;
- `demo_execution_spl.rs` et ses sous-modules ;
- modules SQL concernés.
`tauri.rs` doit conserver lassemblage Tauri, les wrappers de commandes, louverture des fenêtres et les adaptations minimales derreur ou détat.
## Vérifications runtime encore nécessaires
Laudit statique ne prouve pas :
- la persistance réelle de la socket après fermeture de la fenêtre ;
- la restauration visuelle du statut à la réouverture ;
- les timeouts réseau ;
- le comportement des profils et routes de logging ;
- la campagne PostgreSQL et Devnet complète.
Ces points doivent être validés avec les scénarios dédiés et leurs logs.

View File

@@ -0,0 +1,99 @@
<!-- file: docs/guides/DEVNET_0_4_6_OPERATOR_GUIDE.md -->
<!-- version: 1 -->
# Guide opérateur Devnet pour lalignement `0.4.6`
## 1. Objectif
Ce guide regroupe les opérations minimales à valider avant le passage officiel de bot3 à `0.4.6`.
## 2. Préparer le profil
- sélectionner un profil Devnet valide ;
- vérifier le RPC HTTP, le WebSocket et PostgreSQL ;
- vérifier que `auto_initialize_schema` correspond à lintention de la campagne ;
- utiliser un wallet de démonstration persistant et financé par faucet Web.
La clé privée ne doit jamais être copiée dans les logs ou linterface.
## 3. Vérifier PostgreSQL
Depuis les fenêtres SQL :
1. charger le diagnostic général ;
2. vérifier les tables raw ;
3. vérifier les tables Core ;
4. vérifier les tables decode/materialization ;
5. noter la version de migration et les anomalies dindex ou contraintes.
## 4. Campagne raw → Core → Decode → Materialize
1. Exécuter un backfill borné sur un Program ID ou une adresse connue.
2. Vérifier linsertion raw et les observations.
3. Exécuter Core extraction sur les nouvelles lignes.
4. Exécuter Decode replay avec les décodeurs adaptés.
5. Activer la matérialisation.
6. Vérifier les diagnostics et projections.
7. Rejouer la même sélection.
8. Confirmer lidempotence et labsence de duplications.
## 5. Exécution Solana Core
Pour System Transfer :
- vérifier le wallet et la balance ;
- générer ou saisir un destinataire ;
- utiliser un montant minimal ;
- exécuter dabord la simulation ;
- confirmer explicitement lenvoi ;
- vérifier la signature finalisée ;
- effectuer backfill, Core extraction et replay ;
- vérifier les observations et projections attendues.
## 6. Exécution SPL
Valider séparément :
- Memo v4 ;
- ATA classique ;
- ATA Token-2022 ;
- SPL Token classique `TransferChecked` ;
- opérations Token-2022 documentées comme supportées.
Pour chaque scénario :
1. vérifier les préconditions et comptes ;
2. vérifier les signers ;
3. simuler ;
4. confirmer lenvoi ;
5. vérifier la confirmation réseau ;
6. effectuer le backfill ;
7. effectuer Core extraction ;
8. effectuer Decode replay et matérialisation ;
9. rejouer pour lidempotence ;
10. vérifier létat final via CLI ou RPC lorsque pertinent.
## 7. WebSocket
Exécuter intégralement [`WEBSOCKET_LIFECYCLE_VALIDATION_SCENARIO.md`](../validation/WEBSOCKET_LIFECYCLE_VALIDATION_SCENARIO.md).
## 8. Résultats à consigner
Pour chaque campagne, conserver :
- profil et cluster ;
- opération ;
- comptes publics concernés ;
- signature ;
- résultat simulation ;
- résultat envoi et confirmation ;
- nombres raw/Core/decode/materialize ;
- diagnostics ;
- résultat du second replay ;
- commande CLI ou RPC de vérification finale.
## 9. Hors périmètre
Metaplex Token Metadata complet nest pas un critère de `0.4.6`. Il sera planifié et terminé dans `0.4.7`.
Le registre ElGamal reste conditionnel tant que son déploiement réseau et les preuves nécessaires ne sont pas confirmés.

View File

@@ -0,0 +1,116 @@
<!-- file: docs/validation/WEBSOCKET_LIFECYCLE_VALIDATION_SCENARIO.md -->
<!-- version: 2 -->
# Validation du cycle de vie WebSocket desktop
## Objectif
Prouver quune session WebSocket appartient à lapplication et non à la fenêtre `demo_ws`.
## Préparation
1. Configurer un endpoint WebSocket Devnet dans le profil utilisé.
2. Activer une route de logs contenant au minimum `kb-app-demo-desktop` et `kb-onchain-transport` au niveau `debug`.
3. Lancer :
```bash
cargo tauri dev -c kb-app-demo-desktop/tauri.conf.json 2>&1 | tee /tmp/kbot3-pre075-ws.log
```
4. Ouvrir la fenêtre **WebSocket standard**.
5. Rafraîchir les endpoints et vérifier quun rôle compatible est disponible.
## Souscription principale recommandée
Utiliser `logsSubscribe`, car elle permet de filtrer les transactions mentionnant un Program ID.
| Champ | Valeur |
|-------------|----------------------------------------------------------------|
| Rôle | rôle WebSocket standard Devnet disponible |
| Méthode | `logsSubscribe` |
| Target | vide |
| Filter JSON | `{"mentions":["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"]}` |
| Config JSON | `{"commitment":"confirmed"}` |
Le Program ID choisi est SPL Token classique. Il peut être remplacé par Token-2022 :
```text
TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
```
## Scénario A — fermeture et réouverture de la fenêtre
1. Cliquer **Souscrire**.
2. Noter lidentifiant de subscription et vérifier :
- statut connecté ;
- `subscriptionCount = 1` ;
- méthode `logsSubscribe`.
3. Attendre au moins une notification ou, à défaut, conserver la réponse de subscription.
4. Fermer uniquement la fenêtre `demo_ws` avec le bouton de la fenêtre.
5. Ne pas cliquer sur **Unsubscribe** ni **Déconnecter socket**.
6. Attendre 15 à 30 secondes.
7. Rouvrir **WebSocket standard** depuis le menu principal.
8. Vérifier immédiatement :
- statut connecté ;
- même endpoint ;
- subscription toujours présente ;
- même identifiant distant ou identifiant remappé explicitement après reconnexion ;
- nouveaux messages reçus si le réseau en produit.
### Critère de réussite
La fenêtre restaurée affiche létat réel de la session persistante. Aucun événement `Disconnected` ne doit être provoqué par la fermeture de `demo_ws`.
## Scénario B — unsubscribe explicite
1. Sélectionner la subscription active.
2. Cliquer **Unsubscribe sélectionnée**.
3. Vérifier :
- `subscriptionCount = 0` ;
- socket encore connectée ;
- message de désinscription ;
- absence de nouvelles notifications pour cette subscription.
## Scénario C — nouvelle subscription puis déconnexion explicite
1. Souscrire de nouveau avec le même filtre.
2. Vérifier `subscriptionCount = 1`.
3. Cliquer **Déconnecter socket**.
4. Vérifier :
- statut déconnecté ;
- aucune subscription active ;
- événement ou diagnostic de déconnexion dans les logs.
## Scénario D — arrêt global de lapplication
1. Souscrire de nouveau.
2. Fermer la fenêtre `demo_ws`.
3. Fermer ensuite la fenêtre principale de lapplication.
4. Vérifier dans `/tmp/kbot3-pre075-ws.log` que la déconnexion globale est exécutée.
5. Vérifier que le processus Tauri se termine sans rester en arrière-plan.
## Scénario optionnel — `programSubscribe`
Pour observer les changements de comptes appartenant à Token-2022 :
| Champ | Valeur |
|-------------|--------------------------------------------------|
| Méthode | `programSubscribe` |
| Target | `TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb` |
| Filter JSON | vide |
| Config JSON | `{"commitment":"confirmed","encoding":"base64"}` |
Cette souscription peut être très active. Les limites de débit et de taille de linterface doivent rester fonctionnelles.
## Preuves à archiver
Fournir une archive contenant :
- `/tmp/kbot3-pre075-ws.log` ;
- copie du statut avant fermeture ;
- copie du statut après réouverture ;
- identifiants de subscription ;
- résultat unsubscribe ;
- résultat disconnect ;
- heure approximative de chaque étape ;
- anomalie éventuelle et reproduction minimale.