v0.1.0-pre.075
This commit is contained in:
@@ -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).
|
||||
|
||||
|
||||
57
docs/audits/PRE_0_4_6_STATIC_CODE_AUDIT.md
Normal file
57
docs/audits/PRE_0_4_6_STATIC_CODE_AUDIT.md
Normal 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é
|
||||
|
||||
L’audit statique a été exécuté sur l’archive 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 n’est 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 n’est donc pas encore uniquement une couche mince de wrappers `#[tauri::command]`.
|
||||
|
||||
### Décision
|
||||
|
||||
Avant `0.4.6`, déplacer l’orchestration 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 l’assemblage Tauri, les wrappers de commandes, l’ouverture des fenêtres et les adaptations minimales d’erreur ou d’état.
|
||||
|
||||
## Vérifications runtime encore nécessaires
|
||||
|
||||
L’audit 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.
|
||||
99
docs/guides/DEVNET_0_4_6_OPERATOR_GUIDE.md
Normal file
99
docs/guides/DEVNET_0_4_6_OPERATOR_GUIDE.md
Normal file
@@ -0,0 +1,99 @@
|
||||
<!-- file: docs/guides/DEVNET_0_4_6_OPERATOR_GUIDE.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Guide opérateur Devnet pour l’alignement `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 à l’intention 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 l’interface.
|
||||
|
||||
## 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 d’index 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 l’insertion 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 l’idempotence et l’absence 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 d’abord la simulation ;
|
||||
- confirmer explicitement l’envoi ;
|
||||
- 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 l’envoi ;
|
||||
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 l’idempotence ;
|
||||
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 n’est 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.
|
||||
116
docs/validation/WEBSOCKET_LIFECYCLE_VALIDATION_SCENARIO.md
Normal file
116
docs/validation/WEBSOCKET_LIFECYCLE_VALIDATION_SCENARIO.md
Normal file
@@ -0,0 +1,116 @@
|
||||
<!-- file: docs/validation/WEBSOCKET_LIFECYCLE_VALIDATION_SCENARIO.md -->
|
||||
<!-- version: 2 -->
|
||||
|
||||
# Validation du cycle de vie WebSocket desktop
|
||||
|
||||
## Objectif
|
||||
|
||||
Prouver qu’une session WebSocket appartient à l’application 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 qu’un 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 l’identifiant 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 l’application
|
||||
|
||||
1. Souscrire de nouveau.
|
||||
2. Fermer la fenêtre `demo_ws`.
|
||||
3. Fermer ensuite la fenêtre principale de l’application.
|
||||
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 l’interface 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.
|
||||
Reference in New Issue
Block a user