v0.1.0-pre.061
This commit is contained in:
19
.env.example
19
.env.example
@@ -1,10 +1,20 @@
|
|||||||
# file: .env.example
|
# file: .env.example
|
||||||
# Copy to .env at the workspace root. Never commit the real file.
|
# Copy this file to .env at the workspace root and replace every local value.
|
||||||
|
# Never commit the real .env file.
|
||||||
|
|
||||||
# Helius HTTP and WebSocket endpoint interpolation used by config/example.config.json.
|
# Shared Helius credential used by the configured HTTP and WebSocket endpoints.
|
||||||
HELIUS_API_KEY=replace-with-your-helius-api-key
|
HELIUS_API_KEY=replace-with-your-helius-api-key
|
||||||
|
|
||||||
# Optional configuration override.
|
# PostgreSQL database used by the mainnet_research and mainnet profiles.
|
||||||
|
KB_POSTGRES_MAINNET_URL=postgres://solana:solana@localhost:5432/khadhroony_mainnet
|
||||||
|
|
||||||
|
# PostgreSQL database dedicated to the local_devnet profile and Devnet validation.
|
||||||
|
KB_POSTGRES_DEVNET_URL=postgres://solana:solana@localhost:5432/khadhroony_devnet
|
||||||
|
|
||||||
|
# PostgreSQL database reserved for automated integration tests.
|
||||||
|
KB_POSTGRES_TEST_URL=postgres://solana:solana@localhost:5432/khadhroony_test
|
||||||
|
|
||||||
|
# Optional configuration-file override.
|
||||||
# KB_CONFIG_PATH=config/example.config.json
|
# KB_CONFIG_PATH=config/example.config.json
|
||||||
|
|
||||||
# Optional Token-2022 Devnet validation fixtures.
|
# Optional Token-2022 Devnet validation fixtures.
|
||||||
@@ -19,5 +29,6 @@ TOKEN_2022_FREEZE_AUTHORITY=
|
|||||||
TOKEN_2022_DECIMALS=9
|
TOKEN_2022_DECIMALS=9
|
||||||
TOKEN_2022_TRANSFER_AMOUNT_RAW=1
|
TOKEN_2022_TRANSFER_AMOUNT_RAW=1
|
||||||
|
|
||||||
# Optional explicit environment file selection. Relative paths use the workspace root.
|
# Optional explicit environment-file selection. Relative paths use the workspace root.
|
||||||
|
# Define this variable in the process environment when the selected file is not .env.
|
||||||
# KB_ENV_FILE=.env.local
|
# KB_ENV_FILE=.env.local
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -40,7 +40,6 @@ var/
|
|||||||
# env
|
# env
|
||||||
.env
|
.env
|
||||||
.env.*
|
.env.*
|
||||||
!.env.dev
|
|
||||||
!.env.example
|
!.env.example
|
||||||
|
|
||||||
config.json
|
config.json
|
||||||
|
|||||||
@@ -1,394 +1,389 @@
|
|||||||
<!-- file: KHADHROONY_BOT3_MIGRATION_CLOSURE_TODO.md -->
|
<!-- file: KHADHROONY_BOT3_MIGRATION_CLOSURE_TODO.md -->
|
||||||
<!-- version: 9 -->
|
<!-- version: 19 -->
|
||||||
|
|
||||||
# Checklist détaillée de clôture de la migration `khadhroony-bot3`
|
# Clôture de la migration `khadhroony-bot3`
|
||||||
|
|
||||||
## Base et principe de validation
|
Ce fichier est temporaire. Il doit disparaître lorsque la migration est close, que la documentation active décrit uniquement `khadhroony-bot3`, et que la version du workspace est alignée sur `0.4.7`.
|
||||||
|
|
||||||
- Base de travail : `khadhroony-bot3_v0.1.0-pre.055-full.zip`.
|
## Principes de clôture
|
||||||
- Références fonctionnelles : Bot2 `v0.4.6` puis Bot2 `v0.4.7-pre.035-tofix07`.
|
|
||||||
- Prompt actif : `prompts/KHADHROONY_BOT3_MIGRATION_CONTINUATION_PROMPT_REORDERED.md`.
|
|
||||||
- Une case n’est cochée qu’après preuve explicite : audit, compilation, test, requête SQL, contrôle runtime ou comparaison documentée.
|
|
||||||
- L’ordre est obligatoire : règles, contrôles rapides, retour au niveau `0.4.6`, Metaplex `0.4.7`, Clippy/Tauri, documentation, versionnement.
|
|
||||||
|
|
||||||
## 0. Revalidation des règles et des archives
|
- Une case n’est cochée qu’après preuve par recherche, compilation, test, audit, requête SQL ou validation runtime.
|
||||||
|
- Les noms, modules et documents actifs doivent décrire Bot3 comme le produit courant, sans récit permanent de migration depuis Bot2.
|
||||||
|
- Les protocoles applicatifs Pump.fun, Raydium, Meteora, Jupiter, autres AMM et launchpads restent hors périmètre tant que Solana Core, SPL, Metaplex Token Metadata et Anchor ne sont pas clôturés.
|
||||||
|
- Les rappels d’amélioration non bloquants doivent être déplacés vers `docs/IDEA_REMINDERS.md`, pas conservés dans cette checklist.
|
||||||
|
- La documentation finale décrit l’état courant. Elle ne doit pas accumuler un journal de changements par version dans les README.
|
||||||
|
|
||||||
- [x] Inventorier l’archive Bot3 `pre.055`.
|
## État validé de `0.1.0-pre.061`
|
||||||
- [x] Inventorier l’archive Bot2 `0.4.6` issue de Git.
|
|
||||||
- [x] Inventorier l’archive Bot2 `0.4.7-pre.035-tofix07`.
|
|
||||||
- [x] Vérifier la présence de l’IDL Metaplex local dans Bot3.
|
|
||||||
- [x] Constater que Bot3 utilisait encore `RULES.md` et `RUST_RULES.md`.
|
|
||||||
- [x] Créer `RULES_GENERAL.md`.
|
|
||||||
- [x] Créer `RULES_RUST.md`.
|
|
||||||
- [x] Créer `RULES_SPECIFIC_KHADHROONY.md`.
|
|
||||||
- [x] Transformer `RULES.md` en index normatif.
|
|
||||||
- [x] Corriger `docs/DELTA_WORKFLOW.md` pour Bot3, `-delta`, `delta-fix-XXX`, exclusion de `Cargo.lock` et absence de SHA256.
|
|
||||||
- [x] Adapter le script d’audit aux nouveaux fichiers de règles.
|
|
||||||
- [x] Relire intégralement les quatre fichiers de règles après application du delta.
|
|
||||||
- [ ] Comparer ligne par ligne les règles Bot2 encore applicables avec les règles Bot3.
|
|
||||||
- [ ] Documenter chaque règle Bot2 écartée et sa justification.
|
|
||||||
- [ ] Vérifier l’absence de contradiction sur les imports, réexports, façades, Tauri, TS-RS, logging, versionnement et archives.
|
|
||||||
- [x] Exécuter `cargo fmt --all`.
|
|
||||||
- [x] Exécuter `python3 scripts/audit_rust_workspace_rules.py`.
|
|
||||||
|
|
||||||
## 0.1 Classification des matrices de contrat
|
- [x] Suite ciblée complète : toutes les crates principales réussissent leurs tests.
|
||||||
|
- [x] `kb-app-demo-desktop` : 116 tests réussis.
|
||||||
|
- [x] `kb-config` : 45 tests réussis.
|
||||||
|
- [x] `kb-core` : 2 tests réussis.
|
||||||
|
- [x] `kb-lib` : 625 tests réussis.
|
||||||
|
- [x] `kb-onchain-transport` : 113 tests réussis.
|
||||||
|
- [x] `kb-pipeline` : 89 tests réussis.
|
||||||
|
- [x] `kb-pipeline-demo-scenarios` : 35 tests réussis.
|
||||||
|
- [x] `kb-store` : 84 tests réussis.
|
||||||
|
- [x] `cargo check --workspace` réussi.
|
||||||
|
- [x] Audit général Rust propre.
|
||||||
|
- [x] Audit des exports Rust propre.
|
||||||
|
- [x] Audit spécifique Khadhroony propre.
|
||||||
|
- [x] `cargo clippy --all-targets` propre.
|
||||||
|
- [x] Démarrage Tauri, splash, PostgreSQL et fenêtres principales validés.
|
||||||
|
- [x] Extraction Core complète de 4 574 transactions raw : 4 574 extraites, 0 échec.
|
||||||
|
- [x] Replay complet de 11 880 instructions exécuté.
|
||||||
|
- [x] Les 6 faux échecs Metaplex ont été corrigés et rejoués avec succès.
|
||||||
|
- [x] Les 76 tentatives Loader malformées de transactions échouées sont désormais décodées comme observations non engagées.
|
||||||
|
- [x] Les 4 tags Loader v4 inconnus restent correctement classés `Unsupported`.
|
||||||
|
- [x] Aucune erreur de matérialisation observée pendant la campagne propre.
|
||||||
|
- [x] Les trois erreurs supplémentaires du replay ont été identifiées comme timeouts transitoires du pool PostgreSQL, distincts des échecs fonctionnels de décodage.
|
||||||
|
- [x] Revalider les suites après les correctifs `pre.061-delta-fix-004` et `pre.061-delta-fix-005` : 116 tests desktop, 625 tests `kb-lib`, suites consolidées et replay propre.
|
||||||
|
|
||||||
- [x] Inventorier les fichiers JSON machine auparavant placés sous `docs/`.
|
# 1. Nettoyage structurel et nomenclature
|
||||||
- [x] Créer `test-fixtures/contract-matrices/` pour les matrices de contrat partagées.
|
|
||||||
- [x] Déplacer les dix matrices JSON hors de `docs/`.
|
|
||||||
- [x] Mettre à jour les dix-sept fichiers Rust contenant les `include_str!` concernés.
|
|
||||||
- [x] Conserver le déplacement et les mises à jour de chemins dans une même livraison atomique.
|
|
||||||
- [x] Lister chaque ancien fichier avec une commande `rm --` dans `delta.md`.
|
|
||||||
- [x] Exécuter les tests des crates consommatrices dans le workspace réel (`kb-lib`, `kb-onchain-transport`, `kb-pipeline-demo-scenarios`).
|
|
||||||
- [x] Vérifier qu’aucune référence résiduelle ne pointe vers les anciens chemins `docs/*.json`.
|
|
||||||
|
|
||||||
## 1. Contrôles rapides avant code fonctionnel
|
## 1.1 Règles
|
||||||
|
|
||||||
### 1.1 TS-RS
|
- [x] Reprendre dans les règles Bot3 toutes les règles Bot2 encore applicables.
|
||||||
|
- [x] Remplacer les anciens fichiers de règles par `RULES_GENERAL.md`, `RULES_RUST.md`, `RULES_SPECIFIC_KHADHROONY.md` et un index `RULES.md`.
|
||||||
|
- [x] Adapter le workflow des deltas à Bot3.
|
||||||
|
- [ ] Effectuer une dernière lecture croisée des règles portant sur imports, réexports, façades, Tauri, TS-RS, logging, versionnement et archives.
|
||||||
|
- [ ] Supprimer de cette checklist toute demande de justification historique sans valeur normative.
|
||||||
|
|
||||||
- [x] Rechercher `export_to` uniquement dans les fichiers `.rs` de `kb-config`, `kb-lib` et `kb-app-demo-desktop`.
|
## 1.2 Anciennes crates, imports et chemins
|
||||||
- [x] Vérifier les sorties `kb_config`.
|
|
||||||
- [x] Vérifier les sorties `kb_lib` dans `kb-lib/frontend/ts/bindings/kb_lib`.
|
|
||||||
- [x] Vérifier les sorties `kb_app_demo_desktop`.
|
|
||||||
- [ ] Supprimer les chemins historiques `kb_executor_*`.
|
|
||||||
- [ ] Supprimer les chemins historiques `kb_decoder_*`.
|
|
||||||
- [ ] Supprimer les chemins historiques `kb_materializer_*`.
|
|
||||||
- [ ] Supprimer les chemins historiques `kb_model`.
|
|
||||||
- [ ] Supprimer les chemins historiques `kb_store_pg` et `kb_store_core`.
|
|
||||||
- [x] Régénérer les bindings via les tests TS-RS exécutés pendant les tests complets des crates.
|
|
||||||
- [x] Vérifier que les fichiers générés correspondent aux chemins déclarés pour `kb_config`, `kb_lib` et `kb_app_demo_desktop`.
|
|
||||||
|
|
||||||
### 1.2 Anciens chemins et nomenclature
|
- [x] Confirmer l’absence d’import, réexport ou dépendance active vers les anciennes crates `kb_executor_*`.
|
||||||
|
- [x] Confirmer l’absence d’import, réexport ou dépendance active vers les anciennes crates `kb_decoder_*`.
|
||||||
|
- [x] Confirmer l’absence d’import, réexport ou dépendance active vers les anciennes crates `kb_materializer_*`.
|
||||||
|
- [x] Confirmer l’absence d’import, réexport ou dépendance active vers l’ancienne crate `kb_model`.
|
||||||
|
- [x] Confirmer l’absence de dépendance ou de crate `kb_store_pg`.
|
||||||
|
- [x] Confirmer l’absence de dépendance ou de crate `kb_store_core`.
|
||||||
|
- [x] Confirmer qu’aucune ancienne crate supprimée n’a été recréée sous un autre chemin.
|
||||||
|
- [x] Auditer `kb-app-demo-desktop/**/*.rs` pour les anciens chemins structurels actifs.
|
||||||
|
- [x] Vérifier les bindings TS-RS générés : aucun ancien chemin de crate actif n’est exporté.
|
||||||
|
- [x] Classer les anciennes chaînes runtime et les remplacer par les identités consolidées `kb-lib.decoder.*`, `kb-lib.executor.*` et `kb-lib.materializer.*`.
|
||||||
|
- [ ] Réécrire lors de la refonte documentaire finale les commentaires et documents qui racontent encore la consolidation depuis les anciennes crates.
|
||||||
|
|
||||||
- [ ] Auditer `kb-app-demo-desktop/**/*.rs` pour les anciens noms Bot2.
|
Contrôles exécutés : aucune correspondance structurelle `ancienne_crate::`, aucune dépendance Cargo correspondante et aucun répertoire de crate supprimée.
|
||||||
- [ ] Auditer tout le workspace pour `token_2022` interne.
|
|
||||||
- [ ] Justifier séparément chaque contrat externe `TOKEN_2022_*` conservé.
|
|
||||||
- [ ] Vérifier que `kb-lib` et `kb-store` sont les seules façades consolidées concernées.
|
|
||||||
- [ ] Vérifier qu’aucune ancienne crate n’a été recréée.
|
|
||||||
|
|
||||||
### 1.3 Frontend et menu
|
## 1.3 Convention Token-2022
|
||||||
|
|
||||||
- [x] Auditer les occurrences `Copier` et `Effacer` dans tous les HTML et TypeScript.
|
Convention arrêtée :
|
||||||
- [ ] Garantir une seule paire de contrôles par sortie.
|
|
||||||
- [x] Vérifier et corriger l’ordre du menu : Configuration, Transport et collecte, Pipeline, SQL, Exécution.
|
|
||||||
- [ ] Vérifier les séparateurs.
|
|
||||||
- [ ] Supprimer les entrées mortes.
|
|
||||||
- [x] Identifier les modules SPL backend comme composants de la fenêtre consolidée `demo_execution_spl`, et non comme fenêtres autonomes oubliées.
|
|
||||||
|
|
||||||
## 2. Corrections UI rapides
|
- symboles, modules, fichiers, fonctions et variables internes : `token_2022` / `TOKEN_2022` ;
|
||||||
|
- types et variantes Rust en PascalCase : `Token2022` ;
|
||||||
|
- valeurs JSON/TS explicitement concernées : `token_2022` avec attributs Serde et TS-RS ;
|
||||||
|
- codes persistés : `spl_token_2022` ;
|
||||||
|
- noms officiels externes : conserver leur orthographe publiée ;
|
||||||
|
- exceptions contractuelles Metaplex conservées : `token2022EmbeddedMetadata` et `token2022_embedded_metadata`.
|
||||||
|
|
||||||
### 2.1 HTTP JSON-RPC
|
- [x] Inventorier les occurrences actives `token2022`, `TOKEN2022`, `token_2022`, `TOKEN_2022`.
|
||||||
|
- [x] Classer les occurrences entre symboles internes, contrats externes, valeurs persistées, API, tests, IDL et documentation historique.
|
||||||
|
- [x] Renommer les symboles et modules internes vers `token_2022` / `TOKEN_2022`.
|
||||||
|
- [x] Conserver `Token2022` pour les types et variantes Rust.
|
||||||
|
- [x] Aligner Serde et TS-RS sur `token_2022` lorsque cette valeur appartient au contrat applicatif.
|
||||||
|
- [x] Renommer les identités persistées et runtime vers `spl_token_2022` et `kb-lib.*.token_2022`.
|
||||||
|
- [x] Purger les données dérivées puis reconstruire Core, Decode et Materialize depuis les 4 574 raws.
|
||||||
|
- [x] Valider 55 instructions Token-2022 décodées, 0 échec fonctionnel.
|
||||||
|
- [x] Vérifier les matrices actives ; corriger la dernière commande historique dans `SPL_TOKEN_2022_MATRIX.json`.
|
||||||
|
- [x] Découpler les assertions structurelles des matrices des compteurs globaux et volatils de `cargo test`.
|
||||||
|
- [ ] Réauditer progressivement chaque matrice active lors de la reprise de sa surface ; les preuves opérateur restent informatives et les invariants doivent être dérivés des lignes de matrice et des registres compilés.
|
||||||
|
- [ ] Refaire l’audit Python de nomenclature lors de la stabilisation finale des helpers de migration.
|
||||||
|
|
||||||
- [x] Remplacer le viewer JSON du résultat par un `textarea readonly`.
|
# 2. Frontend et application desktop
|
||||||
- [x] Fixer la hauteur.
|
|
||||||
- [x] Activer le scroll interne.
|
|
||||||
- [x] Garantir exactement un bouton Copier pour la sortie principale.
|
|
||||||
- [x] Garantir exactement un bouton Effacer pour la sortie principale.
|
|
||||||
- [x] Vider le buffer TypeScript lors de l’effacement.
|
|
||||||
- [ ] Tester JSON, scalaire, texte, erreur et résultat vide.
|
|
||||||
- [x] Restaurer le gabarit desktop à deux colonnes : requête à gauche, endpoints et résultat à droite.
|
|
||||||
|
|
||||||
### 2.2 WebSocket
|
## 2.1 Menu, contrôles et HTML
|
||||||
|
|
||||||
- [x] Afficher les messages dans un composant texte/log.
|
- [x] Ordre principal du menu corrigé : Configuration, Transport et collecte, Pipeline, SQL, Exécution.
|
||||||
- [x] Fixer la hauteur et le scroll interne.
|
- [ ] Vérifier une dernière fois les séparateurs du menu.
|
||||||
- [x] Garantir une seule paire Copier/Effacer pour la sortie Messages.
|
- [ ] Supprimer les entrées de menu, boutons, onglets et liens sans backend accessible.
|
||||||
- [x] Borner le débit et la taille des notifications envoyées à l’UI pour éviter les freezes.
|
- [ ] Vérifier qu’une sortie ne possède qu’une seule paire de contrôles Copier/Effacer.
|
||||||
- [x] Conserver le payload complet sous forme JSON compacte dans les logs de debug avant formatage et troncage UI.
|
- [x] Vérifier toutes les balises HTML après les derniers remaniements ; les quatre conteneurs finaux manquants ont été refermés et le parseur HTML local ne signale plus de déséquilibre.
|
||||||
- [x] Conserver les messages pendant la session active.
|
- [ ] Vérifier que chaque option HTML correspond à une commande Tauri et à un scénario backend réellement accessible.
|
||||||
- [x] Restaurer l’affichage après fermeture/réouverture de la fenêtre.
|
|
||||||
- [x] Restaurer le gabarit desktop à deux colonnes : souscription à gauche, statut/endpoints/messages à droite.
|
|
||||||
- [x] Appliquer `base64` par défaut aux souscriptions `accountSubscribe` et `programSubscribe` lorsque l’encodage est absent, sans écraser un encodage explicite.
|
|
||||||
- [ ] Décider après test runtime si Statut et Endpoints WebSocket restent textuels ou deviennent des viewers JSON structurés ; supprimer alors tout bouton Copier redondant fourni par le viewer.
|
|
||||||
|
|
||||||
### 2.3 Backfill et autocomplétion
|
## 2.2 Viewers et journaux
|
||||||
|
|
||||||
- [x] Garder Program ID librement éditable.
|
- [x] HTTP utilise un composant texte borné pour le résultat brut.
|
||||||
- [x] Ajouter un autocomplétion non bloquant depuis le registre public `kb-program-ids`.
|
- [x] WebSocket utilise un composant texte/log borné et persistant pendant la session.
|
||||||
- [ ] Ajouter le même autocomplétion Program ID au filtre « programme déjà indexé » d’Extraction core.
|
- [x] Extraction Core place paramètres, journaux et résultats dans une structure cohérente.
|
||||||
- [ ] Ajouter ultérieurement les autocomplétions Token et Pool lorsque leurs tables de référence existeront.
|
- [x] Réserver les viewers JSON au JSON structuré nécessitant exploration ou formatage ; HTTP endpoints/résultat et WebSocket statut/endpoints utilisent désormais `@andypf/json-viewer`.
|
||||||
|
- [x] Utiliser des textareas pour texte brut, logs et diagnostics concaténés ; les messages WebSocket restent textuels avec Copier/Effacer.
|
||||||
|
- [ ] Vérifier ce contrat dans Decode replay, Exécution Solana Core et Exécution SPL.
|
||||||
|
- [x] Convertir Statut et Endpoints WebSocket en viewers JSON structurés après contrôle runtime.
|
||||||
|
|
||||||
### 2.4 Journaux généraux et viewers
|
## 2.3 Fenêtres SQL
|
||||||
|
|
||||||
- [x] Vérifier Backfill HTTP en runtime.
|
- [x] Replay Candidates accepte temporairement jusqu’à 100 000 résultats.
|
||||||
- [x] Vérifier Extraction core en runtime après correction du gabarit pleine largeur.
|
- [x] Les CSV sont écrits dans `<workspace>/data/exports_csv`.
|
||||||
- [ ] Vérifier Exécution Solana Core.
|
- [x] Export `replay_transactions.csv` validé.
|
||||||
- [ ] Vérifier Exécution SPL.
|
- [ ] Mettre les autres fenêtres SQL sur une seule colonne pleine largeur lorsque ce n’est pas déjà le cas.
|
||||||
- [x] Vérifier Decode replay en runtime et conserver les échecs Loader/Metaplex comme anomalies fonctionnelles à corriger.
|
- [x] Rendre le journal des annotations responsive avec DataTables, pagination, recherche et scroll horizontal borné au wrapper.
|
||||||
- [x] Vérifier HTTP en runtime.
|
|
||||||
- [x] Vérifier WebSocket en runtime.
|
|
||||||
- [x] Placer les paramètres d’Extraction core dans les accordéons.
|
|
||||||
- [x] Placer les journaux et résultats globaux d’Extraction core sous les accordéons.
|
|
||||||
- [ ] Réserver le viewer JSON au JSON structuré.
|
|
||||||
- [ ] Utiliser des textareas pour texte brut, logs et diagnostics concaténés.
|
|
||||||
- [x] Fixer la hauteur du viewer JSON d’Extraction core.
|
|
||||||
- [ ] Étendre la vérification des journaux/viewers aux fenêtres Exécution Solana Core, Exécution SPL et Decode replay.
|
|
||||||
|
|
||||||
### 2.5 Fenêtres SQL
|
|
||||||
|
|
||||||
- [x] Relever temporairement le plafond de résultats de 5 000 à 100 000 pour les campagnes de migration.
|
|
||||||
- [ ] Ajouter ultérieurement une pagination SQL/IPC serveur avant les volumes massifs.
|
|
||||||
- [x] Écrire les CSV dans `<workspace>/data/exports_csv`, indépendamment du répertoire courant Tauri.
|
|
||||||
- [ ] Corriger la valeur de repli TypeScript `maximumReplayCandidateLimit = 5_000` vers `100_000`.
|
|
||||||
- [x] Valider qu’un export produit `data/exports_csv/replay_transactions.csv`.
|
|
||||||
|
|
||||||
- [ ] Mettre toutes les fenêtres SQL, sauf Replay Candidates, sur une seule colonne pleine largeur.
|
|
||||||
- [ ] Mettre les tables sur toute la largeur.
|
|
||||||
- [ ] Limiter le scroll horizontal au wrapper de table.
|
- [ ] Limiter le scroll horizontal au wrapper de table.
|
||||||
- [ ] Vérifier toutes les balises HTML.
|
|
||||||
- [ ] Vérifier boutons, onglets et liens.
|
|
||||||
|
|
||||||
## 3. Configuration et environnement
|
## 2.4 Rappels non bloquants
|
||||||
|
|
||||||
|
- [x] Déplacer les autocomplétions futures, la pagination SQL/IPC et la résolution configurable du chemin `kb-store` vers `docs/IDEA_REMINDERS.md`.
|
||||||
|
|
||||||
|
# 3. Configuration, environnement et secrets
|
||||||
|
|
||||||
|
Préparation engagée avant la campagne Devnet `0.1.0-pre.062`; la validation runtime complète reste à effectuer pendant cette campagne.
|
||||||
|
|
||||||
|
- [x] Conserver `HELIUS_API_KEY` comme variable Helius canonique déjà utilisée par la configuration.
|
||||||
|
- [x] Séparer les bases runtime avec `KB_POSTGRES_MAINNET_URL` et `KB_POSTGRES_DEVNET_URL`.
|
||||||
|
- [x] Conserver `KB_POSTGRES_TEST_URL` comme contrat existant des tests d’intégration PostgreSQL.
|
||||||
|
- [x] Faire de `.env.example` l’unique modèle dotenv versionné et ignorer tous les `.env*` réels.
|
||||||
|
- [x] Faire pointer `local_devnet` vers la variable Devnet et les deux profils Mainnet vers la variable Mainnet.
|
||||||
|
|
||||||
- [ ] Confirmer que seul `kb-config` charge `.env`.
|
- [ ] Confirmer que seul `kb-config` charge `.env`.
|
||||||
- [ ] Confirmer la priorité environnement du processus.
|
- [ ] Confirmer l’ordre de priorité des variables du processus, de `KB_ENV_FILE`, du `.env` racine et des valeurs de configuration.
|
||||||
- [ ] Confirmer `KB_ENV_FILE`.
|
- [ ] Confirmer le comportement de `${VAR}`.
|
||||||
- [ ] Confirmer le `.env` racine par défaut.
|
- [ ] Confirmer le comportement de `${VAR:-fallback}`.
|
||||||
- [ ] Confirmer `${VAR}`.
|
- [ ] Confirmer que l’absence de secrets pour les services optionnels reste non fatale.
|
||||||
- [ ] Confirmer `${VAR:-fallback}`.
|
- [ ] Vérifier que les diagnostics et logs ne révèlent aucun secret.
|
||||||
- [ ] Confirmer l’absence non fatale pour les services optionnels.
|
- [ ] Confirmer que `kb-pipeline-demo-scenarios` ne dépend pas directement de `dotenvy`.
|
||||||
- [ ] Vérifier que les diagnostics ne révèlent aucun secret.
|
- [ ] Valider réellement la résolution de `HELIUS_API_KEY` depuis `.env`.
|
||||||
- [ ] Vérifier que `kb-pipeline-demo-scenarios` ne dépend pas directement de `dotenvy`.
|
|
||||||
- [ ] Valider réellement `HELIUS_API_KEY` depuis `.env`.
|
|
||||||
- [ ] Garder la résolution de chemin de base `kb-store` dans le backlog documenté.
|
|
||||||
|
|
||||||
## 4. Logging
|
# 4. Logging
|
||||||
|
|
||||||
- [ ] Maintenir la console active pour `local_devnet`.
|
- [x] Console runtime observée sur le profil `mainnet_research`.
|
||||||
- [ ] Maintenir la console active pour `mainnet_research`.
|
- [ ] Confirmer la console active pour `local_devnet`.
|
||||||
- [ ] Maintenir la console active pour `mainnet`.
|
- [ ] Confirmer la console active pour `mainnet`.
|
||||||
- [ ] Supprimer les routes Bot2 obsolètes.
|
- [ ] Vérifier l’absence de routes Bot2 réellement obsolètes.
|
||||||
- [ ] Vérifier les cibles `kb-lib.decoder.*`.
|
- [ ] Vérifier les targets `kb-lib.decoder.*`.
|
||||||
- [ ] Vérifier les cibles `kb-lib.executor.*`.
|
- [ ] Vérifier les targets `kb-lib.executor.*`.
|
||||||
- [ ] Vérifier les cibles `kb-lib.materializer.*`.
|
- [ ] Vérifier les targets `kb-lib.materializer.*`.
|
||||||
- [ ] Vérifier `kb-store`, `kb-config`, `kb-logging`, `kb-onchain-transport`, `kb-pipeline`, `kb-wallet` et `kb-app-demo-desktop`.
|
- [ ] Vérifier qu’aucun ancien répertoire de logs correspondant à une crate supprimée n’est recréé.
|
||||||
- [ ] Vérifier qu’aucun ancien répertoire de logs de crate supprimée n’est recréé.
|
|
||||||
|
|
||||||
## 5. Options SPL et Token-2022
|
# 5. Tauri et séparation des responsabilités
|
||||||
|
|
||||||
- [ ] Comparer chaque option de `demo_execution_spl.html` aux scénarios réellement supportés.
|
- [x] Les principales commandes Tauri ont été déplacées vers leurs modules fonctionnels.
|
||||||
- [ ] Comparer les options aux branches de `tauri.rs`.
|
- [ ] Auditer `tauri.rs` et vérifier qu’il ne conserve que l’enregistrement et des wrappers minces.
|
||||||
|
- [ ] Déplacer toute logique Decode replay, Backfill, SQL replay ou Exécution encore substantielle hors de `tauri.rs`.
|
||||||
|
- [ ] Vérifier les wrappers restants après ce dernier déplacement.
|
||||||
|
- [ ] Garantir que les tests unitaires résident dans les modules fonctionnels, pas dans les wrappers Tauri.
|
||||||
|
- [x] Fermeture explicite et Clippy propres sur l’état `pre.061`.
|
||||||
|
- [ ] Revalider timeout HTTP et arrêt global de l’application lors de la campagne finale runtime.
|
||||||
|
|
||||||
|
# 6. PostgreSQL et reconstruction
|
||||||
|
|
||||||
|
- [x] Tables raw et dérivées classées.
|
||||||
|
- [x] Script `reset_derived_store_keep_raw.sql` corrigé avec `TRUNCATE ... RESTART IDENTITY`.
|
||||||
|
- [x] `kb_sol_raw_transactions` conservée.
|
||||||
|
- [x] `kb_sol_obs_transaction_observations` classée comme acquisition à conserver lors des futurs resets.
|
||||||
|
- [x] La perte des anciennes observations de la base de démonstration actuelle est acceptée ; aucune restauration n’est requise.
|
||||||
|
- [x] Extraction Core complète des 4 574 raws validée.
|
||||||
|
- [x] Replay complet des décodeurs enregistrés validé.
|
||||||
|
- [x] Matérialisation sans erreur de ledger validée.
|
||||||
|
- [x] Compteurs et anomalies du replay analysés.
|
||||||
|
- [ ] Créer `kb-store/maintenance/README.md`.
|
||||||
|
- [ ] Documenter précisément les tables conservées, les tables dérivées et l’ordre de reconstruction.
|
||||||
|
- [ ] Documenter le contrôle des index et contraintes après recréation du schéma.
|
||||||
|
- [ ] Documenter la future transition vers une nouvelle base alimentée en temps réel par worker, complétée par backfills ciblés ou automatisés.
|
||||||
|
|
||||||
|
# 7. Parité fonctionnelle avant Metaplex Executor
|
||||||
|
|
||||||
|
L’objectif n’est pas de produire un rapport historique Bot2 permanent. Il faut confirmer que le périmètre requis est présent et utilisable dans Bot3.
|
||||||
|
|
||||||
|
## 7.1 Décodage et matérialisation
|
||||||
|
|
||||||
|
- [x] Solana Core : replay réel validé sur la base de démonstration.
|
||||||
|
- [x] SPL Memo : replay réel validé.
|
||||||
|
- [x] SPL Token classique : replay réel validé.
|
||||||
|
- [x] SPL ATA : replay réel validé.
|
||||||
|
- [x] SPL Token-2022 : replay réel validé.
|
||||||
|
- [ ] ElGamal Registry : obtenir une fixture ou campagne réelle de décodage d’instruction et d’état.
|
||||||
|
- [x] Extraction Core : campagne complète validée.
|
||||||
|
- [x] Replay : campagne complète validée.
|
||||||
|
- [x] Matérialisation : aucune erreur de matérialiseur observée.
|
||||||
|
- [x] PostgreSQL : reconstruction et persistance validées.
|
||||||
|
- [x] Identifier les 3 erreurs de campagne résiduelles comme timeouts transitoires du pool PostgreSQL, sans échec final de décodeur persisté.
|
||||||
|
- [x] Séparer dans le résumé `failedInputs` des erreurs d’orchestration ou de stockage via `processingErrorInputs`.
|
||||||
|
- [ ] Dimensionner le pool et ajouter un retry borné pour les timeouts transitoires avant la campagne finale.
|
||||||
|
|
||||||
|
## 7.2 Transport et infrastructure
|
||||||
|
|
||||||
|
- [x] Backfill HTTP validé en runtime.
|
||||||
|
- [x] HTTP JSON-RPC validé en runtime.
|
||||||
|
- [x] WebSocket validé en runtime.
|
||||||
|
- [x] Logging validé sur `mainnet_research`.
|
||||||
|
- [x] Configuration principale chargée et utilisée en runtime.
|
||||||
|
- [ ] Valider les profils `local_devnet` et `mainnet` lors de la campagne finale.
|
||||||
|
|
||||||
|
### 7.2.1 Stabilisation frontend avant `0.1.0-pre.062`
|
||||||
|
|
||||||
|
- [x] Corriger les quatre conteneurs HTML finaux signalés par RustRover.
|
||||||
|
- [x] Remplacer les favicons absentes par `imgs/logo.png`.
|
||||||
|
- [x] Valider visuellement les fenêtres Config, HTTP, WebSocket, Backfill, Core extraction, Decode replay et SQL.
|
||||||
|
- [x] Séparer les JSON viewers des sorties textuelles et conserver Copier/Effacer sur les sorties sans viewer selon leur volatilité.
|
||||||
|
- [x] Rendre le journal des annotations responsive et paginé avec DataTables.
|
||||||
|
- [x] Étendre DataTables aux tableaux de diagnostic SQL.
|
||||||
|
- [x] Corriger les avertissements frontend connus : API Rollup `names`, exception locale, initialiseur redondant et sélecteur de custom element.
|
||||||
|
- [ ] Revalider le frontend en runtime après application du dernier correctif.
|
||||||
|
|
||||||
|
# 7.3 Exécution
|
||||||
|
|
||||||
|
- [ ] Vérifier Exécution Solana Core via la fenêtre desktop et les scénarios Devnet.
|
||||||
|
- [ ] Vérifier Exécution SPL via la fenêtre desktop et les scénarios Devnet.
|
||||||
|
- [ ] Comparer les options de `demo_execution_spl.html` aux scénarios réellement supportés.
|
||||||
- [ ] Supprimer les options mortes.
|
- [ ] Supprimer les options mortes.
|
||||||
- [ ] Remplacer les valeurs internes `token_2022` par `token2022`.
|
- [ ] Raccorder ou documenter `execute_devnet_spl_token_lifecycle` s’il reste non exposé par l’application.
|
||||||
- [ ] Inventorier chaque variable `TOKEN_2022_*`.
|
- [ ] Vérifier simulation, envoi, progression, résumé et diagnostics.
|
||||||
- [ ] Marquer les variables conservées pour compatibilité externe.
|
- [ ] Vérifier replay post-exécution et matérialisation pour chaque famille supportée.
|
||||||
- [ ] Marquer les variables limitées aux scénarios de démonstration.
|
|
||||||
- [ ] Documenter les futurs remplacements par configuration ou structure typée.
|
|
||||||
|
|
||||||
## 5.1 Wrappers Tauri
|
# 8. Guide Devnet des exécuteurs
|
||||||
|
|
||||||
- [x] Déplacer la logique complète de `splash_frontend_ready` dans `splash.rs` et conserver un wrapper privé mince dans `tauri.rs`.
|
Créer une documentation dédiée, distincte des README généraux :
|
||||||
- [x] Inventorier toutes les fonctions `#[tauri::command]` de `tauri.rs` et mesurer les blocs de 20 lignes ou plus.
|
|
||||||
- [x] Déplacer options, exécution et annulation d’Extraction core dans `demo_core_extraction.rs`.
|
|
||||||
- [x] Mutualiser les ouvertures de fenêtres via un helper privé strictement Tauri dans `tauri.rs`.
|
|
||||||
- [ ] Déplacer progressivement la logique Decode replay, Backfill, SQL replay et Exécution hors de `tauri.rs`.
|
|
||||||
- [x] Vérifier les wrappers Extraction core et Splash.
|
|
||||||
- [ ] Vérifier les autres wrappers Tauri après leur migration progressive.
|
|
||||||
- [ ] Ajouter ou conserver les tests unitaires dans les modules fonctionnels, pas dans les wrappers.
|
|
||||||
|
|
||||||
## 5.2 Câblage des scénarios Devnet
|
- [x] Créer la première version de `docs/DEVNET_EXECUTION_GUIDE.md` avant les tests ; la compléter et la corriger pendant les campagnes Devnet.
|
||||||
|
- [ ] Documenter la création en ligne de commande d’un wallet de démonstration.
|
||||||
|
- [ ] Documenter la récupération de la pubkey.
|
||||||
|
- [x] Imposer l’utilisation d’un faucet Web pour financer le wallet Devnet ; ne pas dépendre de `solana airdrop`, non fonctionnel dans l’environnement de validation.
|
||||||
|
- [ ] Documenter les champs à saisir dans l’interface desktop.
|
||||||
|
- [ ] Documenter chaque scénario Solana Core étape par étape.
|
||||||
|
- [ ] Documenter chaque scénario SPL étape par étape.
|
||||||
|
- [ ] Documenter les préconditions, comptes, signers, frais estimés et résultats attendus.
|
||||||
|
- [ ] Documenter le replay et les projections à vérifier après chaque exécution.
|
||||||
|
- [ ] Ajouter ensuite les scénarios Metaplex Token Metadata.
|
||||||
|
|
||||||
- [x] Confirmer que `kb-app-demo-desktop` appelle `kb-pipeline-demo-scenarios` pour System transfer.
|
# 8.1 Convention et admission des IDL
|
||||||
- [x] Confirmer le câblage Memo.
|
|
||||||
- [x] Confirmer le câblage SPL Token classique.
|
|
||||||
- [x] Confirmer le câblage SPL ATA.
|
|
||||||
- [x] Confirmer le câblage SPL Token-2022.
|
|
||||||
- [x] Confirmer que ces workflows ne sont pas dupliqués dans `kb-pipeline`.
|
|
||||||
- [ ] Vérifier que chaque option HTML correspond à un scénario backend accessible.
|
|
||||||
- [ ] Vérifier simulation, envoi, progression, résumé et diagnostics en runtime Devnet.
|
|
||||||
- [ ] Vérifier le replay post-exécution et la matérialisation pour chaque famille.
|
|
||||||
- [ ] Raccorder ou documenter le workflow `execute_devnet_spl_token_lifecycle`, présent dans la crate mais non exposé par l’application desktop.
|
|
||||||
|
|
||||||
## 6. Cycle de vie WebSocket
|
- [x] Documenter la convention `<PROGRAM_ID>.<protocol_type>.<protocol_code>[.<version>].json` dans `idls/001.README.md`.
|
||||||
|
- [x] Renommer l’IDL active Metaplex Token Metadata avec le segment `metadata`.
|
||||||
|
- [x] Conserver le contenu JSON des IDL strictement inchangé.
|
||||||
|
- [x] Décider que la classification et le renommage des autres IDL seront effectués au moment où leur décodeur ou exécuteur devient actif.
|
||||||
|
- [ ] Maintenir progressivement un inventaire des sources, versions ou commits des IDL actives.
|
||||||
|
|
||||||
- [x] Vérifier qu’aucun pool WebSocket n’est créé au démarrage.
|
# 8.1 Ordre metadata après validation des exécuteurs existants
|
||||||
- [x] Vérifier la création paresseuse au premier accès.
|
|
||||||
- [x] Vérifier le stockage du pool dans `AppState`.
|
|
||||||
- [x] Vérifier la survie de la session après fermeture de `demo_ws`.
|
|
||||||
- [x] Vérifier la récupération de l’état à la réouverture.
|
|
||||||
- [ ] Vérifier la fermeture explicite.
|
|
||||||
- [ ] Vérifier le timeout.
|
|
||||||
- [ ] Vérifier l’arrêt global de l’application.
|
|
||||||
- [x] Vérifier que la fermeture de la fenêtre n’appelle jamais la déconnexion globale.
|
|
||||||
|
|
||||||
## 7. Initialisation PostgreSQL et splash
|
- [ ] Créer le pipeline metadata général et la fenêtre desktop spécialisée `demo_execution_metadata`.
|
||||||
|
- [ ] Traiter d’abord SPL Token Metadata incorporé à Token-2022.
|
||||||
|
- [ ] Traiter ensuite le programme Metaplex Token Metadata et son exécuteur.
|
||||||
|
- [ ] Décider ensuite de la création de `kb-offchain-transport` comme transport off-chain général : metadata HTTP(S)/IPFS/Arweave, prix et taux, APIs Jupiter et autres fournisseurs ; évaluer séparément les opérations off-chain mutables.
|
||||||
|
|
||||||
- [x] Charger l’environnement.
|
# 9. Metaplex Token Metadata — décodeur
|
||||||
- [x] Charger et valider la configuration.
|
|
||||||
- [x] Initialiser le logging.
|
|
||||||
- [x] Initialiser le pool HTTP.
|
|
||||||
- [x] Se connecter à PostgreSQL et confirmer la disponibilité du profil `mainnet_research`.
|
|
||||||
- [x] Appeler `initialize_postgres_schema_for_startup` après disponibilité du frontend splash.
|
|
||||||
- [x] Appeler `emit_sql_startup_table_report`.
|
|
||||||
- [x] Relier `emit_sql_startup_error`.
|
|
||||||
- [x] Relier `emit_sql_startup_splash`.
|
|
||||||
- [x] Ouvrir `main` seulement après le rapport PostgreSQL et le fade-out.
|
|
||||||
- [x] Fermer le splash après le statut final.
|
|
||||||
- [x] Ne pas initialiser WebSocket dans cette séquence.
|
|
||||||
- [x] Rendre les zones du splash scrollables sans afficher leurs barres de défilement.
|
|
||||||
- [x] Garder automatiquement le dernier log et le dernier message visibles.
|
|
||||||
- [x] Afficher connexion, schéma, nombre de tables, tables manquantes et statut final.
|
|
||||||
- [ ] Supprimer l’écrasement artificiel de `auto_initialize_schema` à `false` dans le chemin du splash et respecter la valeur du profil actif.
|
|
||||||
- [x] Valider visuellement les messages intermédiaires, l’ouverture de `main`, l’absence de scrollbar visible et l’auto-scroll ; conserver le fade CSS Tauri/Linux comme limitation visuelle non bloquante.
|
|
||||||
|
|
||||||
## 8. Purge contrôlée des données dérivées
|
- [x] IDL JSON local présent et renommé selon `<PROGRAM_ID>.<protocol_type>.<protocol_code>.json`.
|
||||||
|
- [x] Six erreurs réelles isolées : 5 `create_metadata_account_v3`, 1 `transfer`.
|
||||||
|
- [x] Cause des faux échecs identifiée : comparaison stricte incorrecte des privilèges globaux avec les metas CPI.
|
||||||
|
- [x] Validation corrigée pour exiger les privilèges nécessaires sans refuser les privilèges supplémentaires.
|
||||||
|
- [x] Replay ciblé : 6 décodées, 0 échec.
|
||||||
|
- [x] Loader : transactions échouées, payloads tronqués et variantes inconnues distingués.
|
||||||
|
- [ ] Comparer systématiquement runtime, IDL local, builders et interface officielle pour les variantes couvertes.
|
||||||
|
- [ ] Vérifier les comptes optionnels et variantes legacy.
|
||||||
|
- [ ] Ajouter des fixtures issues des six transactions réelles sans dépendre de la base runtime.
|
||||||
|
- [ ] Étendre le replay Metaplex à un corpus plus large que les six signatures de correction.
|
||||||
|
- [ ] Vérifier les comptes Metaplex et leurs rôles sur instructions externes et CPI.
|
||||||
|
- [ ] Fermer explicitement la matrice du décodeur Metaplex avant de commencer son exécuteur.
|
||||||
|
|
||||||
- [x] Inventorier les tables via les migrations `kb-store` 0001 à 0004.
|
# 10. Metaplex Token Metadata — exécuteur et Devnet
|
||||||
- [x] Classer `kb_sol_raw_transactions` et `kb_sol_obs_transaction_observations` comme acquisition raw ; classer core, ledger, decode, coverage et matérialisation comme dérivés reconstructibles.
|
|
||||||
- [x] Confirmer qu’aucune table actuellement définie par `kb-store` ne reste ambiguë pour cette reconstruction.
|
|
||||||
- [x] Confirmer que le schéma courant est initialisé par les listes SQL idempotentes de `kb-store` et non par une table `_sqlx_migrations` active.
|
|
||||||
- [ ] Corriger `kb-store/maintenance/reset_derived_store_keep_raw.sql` pour conserver explicitement les deux tables d’acquisition et utiliser une stratégie `TRUNCATE ... RESTART IDENTITY` pour les tables dérivées.
|
|
||||||
- [x] Conserver `kb_sol_raw_transactions` avec 4 574 transactions et remettre tous les `processing_state` à `received`.
|
|
||||||
- [ ] Restaurer ou accepter explicitement la perte des anciennes lignes de `kb_sol_obs_transaction_observations` supprimées pendant la reconstruction manuelle.
|
|
||||||
- [x] Recréer manuellement toutes les tables manquantes depuis les scripts SQL de `kb-store`.
|
|
||||||
- [x] Vérifier avant reprise que toutes les tables Core contiennent zéro ligne.
|
|
||||||
- [x] Vérifier avant reprise que `kb_sol_ops_processing_ledger` est vide.
|
|
||||||
- [x] Vérifier avant reprise que les 4 574 raws sont sélectionnables avec l’état `received`.
|
|
||||||
- [x] Purger les tables core, ledger, decode, coverage et matérialisation dérivées.
|
|
||||||
- [x] Encadrer la reconstruction manuelle par une démarche contrôlée sans toucher aux transactions raw.
|
|
||||||
- [x] Ajouter des vérifications avant reprise : compteurs raw, Core et ledger.
|
|
||||||
- [ ] Documenter précisément les tables conservées et la politique de reconstruction dans `kb-store/maintenance/README.md`.
|
|
||||||
- [ ] Relancer l’extraction core sur les 4 574 raws.
|
|
||||||
- [ ] Relancer tous les décodeurs.
|
|
||||||
- [ ] Relancer la matérialisation.
|
|
||||||
- [ ] Valider les compteurs et erreurs.
|
|
||||||
- [ ] Contrôler la reconstruction de chaque projection attendue.
|
|
||||||
|
|
||||||
### 8.1 Anomalies observées avant reconstruction
|
Étape fonctionnelle suivante.
|
||||||
|
|
||||||
- [ ] Auditer les instructions Loader immuables/v4 d’un octet qui échouent actuellement comme `*_tag_truncated`, notamment lorsque la transaction porte `UnsupportedProgramId`.
|
|
||||||
- [ ] Décider, signature réelle à l’appui, si ces formes doivent être `Unsupported`/`Ignored` plutôt que `Failed`.
|
|
||||||
- [ ] Auditer les flags signer/writable Metaplex réels avant d’assouplir les contrats de comptes.
|
|
||||||
- [ ] Comparer les signatures Metaplex en échec avec Bot2 `0.4.7-pre.035` et le contrat officiel.
|
|
||||||
|
|
||||||
## 9. Jalon fonctionnel Bot2 `0.4.6`
|
|
||||||
|
|
||||||
- [ ] Solana Core équivalent et validé.
|
|
||||||
- [ ] SPL Memo équivalent et validé.
|
|
||||||
- [ ] SPL Token classique équivalent et validé.
|
|
||||||
- [ ] SPL ATA équivalent et validé.
|
|
||||||
- [ ] SPL Token-2022 équivalent et validé.
|
|
||||||
- [ ] ElGamal Registry équivalent et validé.
|
|
||||||
- [ ] Backfill équivalent et validé.
|
|
||||||
- [ ] Extraction core équivalente et validée.
|
|
||||||
- [ ] Replay équivalent et validé.
|
|
||||||
- [ ] Matérialisation équivalente et validée.
|
|
||||||
- [ ] Exécution supportée équivalente et validée.
|
|
||||||
- [ ] Scénarios devnet historiques validés.
|
|
||||||
- [ ] HTTP et WebSocket validés.
|
|
||||||
- [ ] PostgreSQL validé.
|
|
||||||
- [ ] Logging validé.
|
|
||||||
- [ ] Configuration validée.
|
|
||||||
- [ ] Produire un rapport explicite de parité `0.4.6` avant toute clôture Metaplex.
|
|
||||||
|
|
||||||
## 10. Inventaire IDL
|
|
||||||
|
|
||||||
- [ ] Créer `docs/IDL_SOURCES.md`.
|
|
||||||
- [ ] Inventorier chaque IDL local.
|
|
||||||
- [ ] Indiquer protocole et program ID.
|
|
||||||
- [ ] Indiquer source officielle.
|
|
||||||
- [ ] Indiquer version ou commit lorsqu’ils sont connus.
|
|
||||||
- [ ] Indiquer chemin local, statut et usage.
|
|
||||||
- [ ] Documenter les notes de compatibilité.
|
|
||||||
- [ ] Ne pas inventer d’IDL absent.
|
|
||||||
- [ ] Référencer l’IDL Metaplex existant sans le retélécharger.
|
|
||||||
|
|
||||||
## 11. Metaplex Token Metadata — décodeur
|
|
||||||
|
|
||||||
- [ ] Extraire toutes les erreurs Metaplex réelles.
|
|
||||||
- [ ] Regrouper par instruction et type d’échec.
|
|
||||||
- [ ] Isoler `create_metadata_account_v3`.
|
|
||||||
- [ ] Isoler `transfer`.
|
|
||||||
- [ ] Comparer runtime, IDL local, builders et interface officielle.
|
|
||||||
- [ ] Corriger signer et writable flags.
|
|
||||||
- [ ] Gérer comptes optionnels et variantes legacy.
|
|
||||||
- [ ] Distinguer transactions échouées, payloads tronqués et variantes inconnues.
|
|
||||||
- [ ] Ajouter des fixtures issues de transactions réelles.
|
|
||||||
- [ ] Relancer le replay complet Metaplex.
|
|
||||||
- [ ] Obtenir zéro faux échec de metas.
|
|
||||||
|
|
||||||
## 12. Metaplex Token Metadata — exécuteur et devnet
|
|
||||||
|
|
||||||
|
- [ ] Définir les opérations exécutables et celles restant decode-only.
|
||||||
- [ ] Compléter les intents typés.
|
- [ ] Compléter les intents typés.
|
||||||
- [ ] Compléter les builders.
|
- [ ] Compléter les builders.
|
||||||
- [ ] Valider l’ordre des comptes.
|
- [ ] Comparer chaque builder aux builders officiels.
|
||||||
- [ ] Valider signers et writable flags.
|
- [ ] Valider l’ordre exact des comptes.
|
||||||
- [ ] Borner explicitement les variantes supportées.
|
- [ ] Valider signer et writable flags.
|
||||||
|
- [ ] Gérer les comptes optionnels et variantes supportées.
|
||||||
- [ ] Ajouter les politiques de sécurité.
|
- [ ] Ajouter les politiques de sécurité.
|
||||||
- [ ] Imposer simulation-first.
|
- [ ] Imposer simulation-first.
|
||||||
- [ ] Ajouter l’estimation des coûts.
|
- [ ] Interdire l’envoi mainnet par défaut.
|
||||||
- [ ] Ajouter la validation post-exécution.
|
- [ ] Ajouter limites de coût, estimation des frais et plafond de dépense.
|
||||||
- [ ] Ajouter les tests unitaires.
|
- [ ] Ajouter validation post-exécution.
|
||||||
- [ ] Comparer aux builders officiels.
|
- [ ] Ajouter tests unitaires et matrice de couverture.
|
||||||
- [ ] Compléter la matrice de couverture.
|
- [ ] Ajouter scénarios Devnet explicites dans `kb-pipeline-demo-scenarios`.
|
||||||
- [ ] Ajouter des scénarios devnet explicites.
|
- [ ] Exposer les scénarios supportés dans l’application desktop.
|
||||||
- [ ] Interdire l’exécution par défaut sur mainnet.
|
- [ ] Afficher plan, signers, simulation, envoi et résultat.
|
||||||
- [ ] Afficher plan, signers, simulation et résultat.
|
- [ ] Effectuer le replay post-exécution.
|
||||||
- [ ] Effectuer un replay post-exécution.
|
|
||||||
- [ ] Vérifier décodage et matérialisation.
|
- [ ] Vérifier décodage et matérialisation.
|
||||||
- [ ] Afficher les diagnostics.
|
- [ ] Afficher des diagnostics bornés.
|
||||||
|
|
||||||
## 13. Clippy et Tauri
|
# 11. Anchor
|
||||||
|
|
||||||
- [ ] Traiter Clippy seulement après le fonctionnel Metaplex.
|
À traiter après clôture complète de Metaplex Token Metadata et avant les protocoles applicatifs.
|
||||||
- [ ] Identifier précisément les expansions de macros Tauri concernées par `question_mark_used`.
|
|
||||||
- [ ] Éviter un `allow` global.
|
|
||||||
- [ ] Documenter toute exception locale et sa portée.
|
|
||||||
- [ ] Obtenir un Clippy propre ou un écart borné et reproductible.
|
|
||||||
|
|
||||||
## 14. Documentation finale et versionnement
|
- [ ] Définir la stratégie d’exploitation des IDL Anchor locaux.
|
||||||
|
- [ ] Définir les contrats génériques de discriminants, comptes et événements.
|
||||||
|
- [ ] Définir les limites entre décodage générique Anchor et décodeurs spécialisés par protocole.
|
||||||
|
- [ ] Ajouter tests et documentation avant intégration de Pump.fun, Raydium, Meteora, Jupiter ou autres protocoles Anchor.
|
||||||
|
|
||||||
- [ ] Rendre les README génériques et indépendants de la migration.
|
# 12. Documentation finale
|
||||||
- [ ] Retirer les numéros de version des README.
|
|
||||||
- [ ] Retirer le récit Bot2 vers Bot3 des README actifs.
|
|
||||||
- [ ] Créer `USAGES.md` pour chaque crate publique.
|
|
||||||
- [ ] Documenter API, types, traits, fonctions, builders, exemples, invariants, erreurs, limites et intégrations.
|
|
||||||
- [ ] Ajouter des roadmaps par crate uniquement lorsqu’elles apportent une valeur réelle.
|
|
||||||
- [ ] Conserver au plus une courte note historique.
|
|
||||||
- [ ] Ne passer à `0.4.7` qu’après parité `0.4.6`, Metaplex complet, replay validé et documentation terminée.
|
|
||||||
- [ ] Mettre à jour `CHANGELOG.md` uniquement lors de cette validation explicite.
|
|
||||||
|
|
||||||
## 15. Validation finale
|
Cette section ne commence qu’après validation des exécuteurs actuels et clôture fonctionnelle Metaplex.
|
||||||
|
|
||||||
|
## 12.1 README
|
||||||
|
|
||||||
|
- [ ] Réécrire le README racine pour décrire uniquement Bot3 et son architecture actuelle.
|
||||||
|
- [ ] Réécrire le README de chaque crate pour expliquer son rôle, ses responsabilités et ses limites.
|
||||||
|
- [ ] Ajouter des liens vers les documents spécialisés pertinents.
|
||||||
|
- [ ] Retirer le récit de migration Bot2 → Bot3 des documents actifs.
|
||||||
|
- [ ] Retirer les listes d’évolution par version des README.
|
||||||
|
- [ ] Lorsqu’une fonctionnalité évolue, modifier le paragraphe fonctionnel correspondant au lieu d’ajouter une entrée chronologique.
|
||||||
|
|
||||||
|
## 12.2 Usage des APIs et binaires
|
||||||
|
|
||||||
|
- [ ] Créer un `USAGE.md` dans chaque crate publique ou binaire pertinent.
|
||||||
|
- [ ] Lister les APIs publiques réellement destinées aux consommateurs.
|
||||||
|
- [ ] Fournir des exemples Rust compilables ou quasi compilables.
|
||||||
|
- [ ] Documenter les types, traits, fonctions, builders, erreurs, invariants et limites.
|
||||||
|
- [ ] Documenter les commandes et options des binaires.
|
||||||
|
- [ ] Documenter les workflows d’intégration entre crates.
|
||||||
|
- [ ] Éviter de recopier mécaniquement toute l’API interne.
|
||||||
|
|
||||||
|
## 12.3 Documentation issue de Bot2
|
||||||
|
|
||||||
|
- [ ] Inventorier les documents Bot2 encore fonctionnellement pertinents.
|
||||||
|
- [ ] Réécrire leur contenu pour l’architecture, les noms et les règles Bot3.
|
||||||
|
- [ ] Ne conserver aucune formulation laissant penser que Bot3 dépend conceptuellement de Bot2.
|
||||||
|
- [ ] Supprimer les documents de migration devenus inutiles, dont cette checklist.
|
||||||
|
|
||||||
|
## 12.4 IDL
|
||||||
|
|
||||||
|
L’ancien bloc `docs/IDL_SOURCES.md` n’est pas un prérequis autonome puisque les IDL sont déjà stockés localement.
|
||||||
|
|
||||||
|
- [ ] Ajouter dans la documentation technique existante un inventaire léger des IDL réellement présents sous `idls/`.
|
||||||
|
- [ ] Pour chaque IDL utilisé, indiquer protocole, Program ID, source, version/commit connu, chemin local et usage.
|
||||||
|
- [ ] Ne pas inventer de source ou de version absente.
|
||||||
|
|
||||||
|
# 13. Versionnement final
|
||||||
|
|
||||||
|
- [ ] Clôturer toutes les tâches fonctionnelles de cette checklist.
|
||||||
|
- [ ] Terminer la documentation finale.
|
||||||
|
- [ ] Vérifier qu’aucun document actif ne présente Bot2 comme dépendance historique nécessaire.
|
||||||
|
- [ ] Aligner les versions du workspace Bot3 sur `0.4.7`.
|
||||||
|
- [ ] Mettre à jour `CHANGELOG.md` avec l’état fonctionnel final, sans dupliquer les README.
|
||||||
|
- [ ] Produire l’archive finale selon `docs/DELTA_WORKFLOW.md`.
|
||||||
|
- [ ] Supprimer `KHADHROONY_BOT3_MIGRATION_CLOSURE_TODO.md` après validation explicite de la clôture.
|
||||||
|
|
||||||
|
# 14. Validation finale
|
||||||
|
|
||||||
- [ ] `cargo fmt --all`.
|
- [ ] `cargo fmt --all`.
|
||||||
- [ ] `cargo check -p kb-config`.
|
|
||||||
- [ ] `cargo test -p kb-config` (44/45 passaient ; contrat de route groupée `kb-pipeline` corrigé dans la prochaine prerelease).
|
|
||||||
- [ ] `cargo check -p kb-pipeline-demo-scenarios`.
|
|
||||||
- [ ] `cargo test -p kb-pipeline-demo-scenarios`.
|
|
||||||
- [ ] `cargo check -p kb-store`.
|
|
||||||
- [ ] `cargo test -p kb-store`.
|
|
||||||
- [ ] `cargo check -p kb-lib`.
|
|
||||||
- [ ] `cargo test -p kb-lib`.
|
|
||||||
- [x] `cargo check -p kb-app-demo-desktop`.
|
|
||||||
- [x] `cargo test -p kb-app-demo-desktop` : 115 tests réussis.
|
|
||||||
- [x] `cargo check --workspace`.
|
|
||||||
- [ ] `cargo test --workspace`.
|
- [ ] `cargo test --workspace`.
|
||||||
- [x] `python3 scripts/audit_rust_workspace_rules.py` après `pre.058-fix-002`.
|
- [ ] `cargo check --workspace`.
|
||||||
- [x] `cargo tauri dev -c kb-app-demo-desktop/tauri.conf.json` : démarrage, splash, PostgreSQL, fenêtres et export CSV validés.
|
- [ ] `cargo clippy --all-targets`.
|
||||||
- [ ] `cargo clippy --all-targets` en dernier.
|
- [ ] `python3 scripts/audit_rust_workspace_rules.py`.
|
||||||
|
- [ ] Vérifier les bindings TS-RS régénérés.
|
||||||
|
- [ ] Vérifier l’absence de secrets dans l’archive.
|
||||||
|
- [ ] Vérifier l’absence de `target`, `node_modules`, `dist`, logs, bases, `.env`, `Cargo.lock`, `package-lock.json` et bindings générés exclus par les règles de livraison.
|
||||||
|
- [ ] Valider toutes les fenêtres desktop.
|
||||||
|
- [ ] Valider HTTP, WebSocket, Backfill, Core extraction, Decode replay et SQL.
|
||||||
|
- [ ] Valider Exécution Solana Core et Exécution SPL sur Devnet.
|
||||||
|
- [ ] Valider Metaplex Executor et replay post-exécution sur Devnet.
|
||||||
|
- [ ] Valider configuration, logging et PostgreSQL sur les profils requis.
|
||||||
|
- [ ] Vérifier que les protocoles applicatifs différés sont documentés hors de cette checklist.
|
||||||
|
|
||||||
## 16. Critères de clôture
|
# 15. Critères de clôture
|
||||||
|
|
||||||
- [ ] Toutes les crates compilent.
|
- [ ] Aucun import ou chemin d’ancienne crate ne subsiste.
|
||||||
- [ ] Tous les tests workspace passent.
|
- [ ] Convention Token-2022 définitivement appliquée et, si nécessaire, données dérivées migrées ou rejouées.
|
||||||
- [ ] Audit Rust propre.
|
- [ ] Tauri ne contient plus de logique métier substantielle.
|
||||||
- [ ] Audit TS-RS propre.
|
- [ ] UI sans contrôle mort ou dupliqué.
|
||||||
- [ ] Aucun chemin Bot2 supprimé encore actif.
|
- [ ] Configuration et secrets validés.
|
||||||
- [ ] Toutes les fenêtres fonctionnent.
|
- [ ] Logging propre sur tous les profils requis.
|
||||||
- [ ] WebSocket persistant validé.
|
- [ ] Reconstruction PostgreSQL documentée et reproductible.
|
||||||
- [ ] `.env` et Helius validés.
|
- [ ] Solana Core, SPL, Metaplex Token Metadata et Anchor au niveau requis avant protocoles applicatifs.
|
||||||
- [ ] PostgreSQL et splash validés.
|
- [ ] Exécuteurs supportés validés sur Devnet.
|
||||||
- [ ] Données dérivées purgées et reconstruites.
|
- [ ] Documentation active entièrement réécrite pour Bot3.
|
||||||
- [ ] Niveau `0.4.6` restauré.
|
- [ ] `USAGE.md` disponibles pour les surfaces publiques et binaires.
|
||||||
- [ ] UI JSON/texte cohérente.
|
- [ ] Workspace aligné sur `0.4.7`.
|
||||||
- [ ] Aucun contrôle Copier/Effacer dupliqué.
|
- [ ] Cette checklist est supprimée.
|
||||||
- [ ] Journaux hors accordéon.
|
|
||||||
- [ ] Fenêtres SQL dimensionnées.
|
|
||||||
- [ ] Routes de logs obsolètes supprimées.
|
|
||||||
- [ ] Console active.
|
|
||||||
- [ ] Inventaire IDL terminé.
|
|
||||||
- [ ] Zéro faux échec Metaplex de metas.
|
|
||||||
- [ ] Exécuteur et démos Metaplex validés.
|
|
||||||
- [ ] Clippy/Tauri finalisés.
|
|
||||||
- [ ] Documentation et `USAGES.md` terminés.
|
|
||||||
- [ ] Passage à `0.4.7` justifié.
|
|
||||||
|
|||||||
55
ROADMAP.md
55
ROADMAP.md
@@ -1,8 +1,59 @@
|
|||||||
<!-- file: ROADMAP.md -->
|
<!-- file: ROADMAP.md -->
|
||||||
<!-- version: 17 -->
|
<!-- version: 19 -->
|
||||||
|
|
||||||
# ROADMAP — khadhroony-bot3
|
# ROADMAP — khadhroony-bot3
|
||||||
|
|
||||||
|
## Séquence fonctionnelle après clôture de la migration
|
||||||
|
|
||||||
|
Cette séquence reprend la logique du roadmap historique tout en l’adaptant aux frontières Bot3. Elle prévaut sur les formulations anciennes encore présentes plus bas.
|
||||||
|
|
||||||
|
### A. Clôture desktop et guide opérateur
|
||||||
|
|
||||||
|
- [ ] Terminer l’audit HTML, JSON viewers, textareas, tables responsives et contrôles Copier/Effacer.
|
||||||
|
- [ ] Créer le guide Devnet avant la campagne de tests, puis le corriger pendant chaque validation réelle.
|
||||||
|
- [ ] Valider les exécuteurs déjà disponibles : Solana Core, Memo v4, SPL Token classique, ATA, Token-2022 et registre ElGamal.
|
||||||
|
- [ ] Vérifier simulation, envoi, confirmation, replay post-exécution et matérialisation depuis les fenêtres desktop.
|
||||||
|
|
||||||
|
### B. Socle metadata général
|
||||||
|
|
||||||
|
- [ ] Créer un pipeline metadata générique commun aux metadata on-chain SPL et Metaplex.
|
||||||
|
- [ ] Définir les contrats de lecture d’état, préflight, exécution, validation post-exécution et replay.
|
||||||
|
- [ ] Ajouter une fenêtre desktop spécialisée `demo_execution_metadata` pour sélectionner la famille metadata, le scénario, les comptes et le mode simulation/envoi.
|
||||||
|
- [ ] Garder les adapters Tauri minces et placer les scénarios Devnet dans `kb-pipeline-demo-scenarios`.
|
||||||
|
|
||||||
|
### C. SPL Token Metadata incorporées à Token-2022
|
||||||
|
|
||||||
|
Cette étape précède le programme Metaplex Token Metadata, conformément à la progression SPL du roadmap historique.
|
||||||
|
|
||||||
|
- [ ] Fermer la couverture de `spl-token-metadata-interface` et des metadata TLV incorporées à Token-2022.
|
||||||
|
- [ ] Compléter l’exécuteur des opérations metadata incorporées supportées.
|
||||||
|
- [ ] Ajouter préflight, sécurité, simulation-first, validation post-exécution et matérialisation.
|
||||||
|
- [ ] Ajouter les scénarios Devnet dans la fenêtre `demo_execution_metadata`.
|
||||||
|
- [ ] Vérifier la coexistence sans confusion avec Metaplex Token Metadata.
|
||||||
|
|
||||||
|
### D. Programme Metaplex Token Metadata
|
||||||
|
|
||||||
|
- [ ] Fermer définitivement le décodeur et les matérialisateurs à partir de l’IDL locale, des interfaces officielles et de fixtures réelles.
|
||||||
|
- [ ] Implémenter les intents et builders exécutables, avec inventaire explicite des variantes decode-only.
|
||||||
|
- [ ] Raccorder l’exécuteur au pipeline metadata général.
|
||||||
|
- [ ] Ajouter les scénarios Devnet Metaplex dans `demo_execution_metadata`.
|
||||||
|
- [ ] Valider replay et matérialisation après chaque transaction.
|
||||||
|
|
||||||
|
### E. Transport off-chain général
|
||||||
|
|
||||||
|
- [ ] Décider après le socle metadata de la création de `kb-offchain-transport`.
|
||||||
|
- [ ] Définir cette crate comme une façade générale des lectures réseau non Solana RPC, et non comme une crate limitée aux metadata.
|
||||||
|
- [ ] Prévoir des modules séparés pour les URI de metadata HTTP(S)/IPFS/Arweave, les prix et taux de référence SOL/USD, SOL/EUR et SOL/CHF, les APIs Jupiter et les futurs fournisseurs off-chain.
|
||||||
|
- [ ] Définir des contrats communs de timeout, retry borné, cache, validation de taille/type, provenance, fraîcheur et diagnostics.
|
||||||
|
- [ ] Décider séparément si certaines actions off-chain mutables ou authentifiées sont admises ; ne pas mélanger lecture publique, exécution distante et exécution on-chain.
|
||||||
|
- [ ] Ne jamais intégrer les lectures off-chain dans les décodeurs déterministes ni dans le replay canonique on-chain.
|
||||||
|
|
||||||
|
### F. Reprise protocolaire
|
||||||
|
|
||||||
|
- [ ] Stabiliser ensuite le socle Anchor/IDL.
|
||||||
|
- [ ] Reprendre Pump.fun, puis Raydium, Meteora, Jupiter et les autres AMM/launchpads selon les priorités du roadmap historique.
|
||||||
|
|
||||||
|
|
||||||
## 0.1.0 — Consolidation du workspace
|
## 0.1.0 — Consolidation du workspace
|
||||||
|
|
||||||
- [x] Créer les dix crates initiales du workspace avec le nom canonique `kb-wallet`.
|
- [x] Créer les dix crates initiales du workspace avec le nom canonique `kb-wallet`.
|
||||||
@@ -25,7 +76,7 @@
|
|||||||
- [ ] Porter simulation, envoi et confirmation réseau complets.
|
- [ ] Porter simulation, envoi et confirmation réseau complets.
|
||||||
- [ ] Adapter `kb-pipeline` aux nouveaux chemins publics.
|
- [ ] Adapter `kb-pipeline` aux nouveaux chemins publics.
|
||||||
- [ ] Adapter `kb-app-demo` et rétablir les validations fonctionnelles.
|
- [ ] Adapter `kb-app-demo` et rétablir les validations fonctionnelles.
|
||||||
- [ ] Créer ultérieurement une crate off-chain dédiée au fetch borné HTTP/IPFS/Arweave des URI de metadata, séparée des décodeurs, matérialisateurs et du replay canonique on-chain.
|
- [ ] Créer ultérieurement une crate off-chain générale pour les lectures HTTP/IPFS/Arweave, prix, APIs de protocoles et autres sources non Solana RPC, séparée des décodeurs, matérialisateurs et du replay canonique on-chain.
|
||||||
- [ ] Réorganiser les chemins d’export TS‑RS de `kb-lib` dans une tranche dédiée, en conservant `../frontend/ts/bindings/` comme préfixe de base.
|
- [ ] Réorganiser les chemins d’export TS‑RS de `kb-lib` dans une tranche dédiée, en conservant `../frontend/ts/bindings/` comme préfixe de base.
|
||||||
- [ ] Auditer rétrospectivement la couverture historique des décodeurs et matérialisateurs.
|
- [ ] Auditer rétrospectivement la couverture historique des décodeurs et matérialisateurs.
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<!-- file: config/README.md -->
|
<!-- file: config/README.md -->
|
||||||
<!-- version: 14 -->
|
<!-- version: 15 -->
|
||||||
|
|
||||||
# Configuration locale
|
# Configuration locale
|
||||||
|
|
||||||
@@ -21,6 +21,20 @@ Ce dossier contient les exemples et le schéma de configuration JSON.
|
|||||||
- `example.config.json` : exemple complet avec profils `local_devnet`, `mainnet_research` et `mainnet`.
|
- `example.config.json` : exemple complet avec profils `local_devnet`, `mainnet_research` et `mainnet`.
|
||||||
- `schema.config.json` : JSON Schema de validation du fichier de configuration.
|
- `schema.config.json` : JSON Schema de validation du fichier de configuration.
|
||||||
|
|
||||||
|
## Variables d’environnement de l’exemple
|
||||||
|
|
||||||
|
`example.config.json` conserve la topologie des profils et référence les valeurs locales avec des placeholders :
|
||||||
|
|
||||||
|
```text
|
||||||
|
HELIUS_API_KEY
|
||||||
|
KB_POSTGRES_MAINNET_URL
|
||||||
|
KB_POSTGRES_DEVNET_URL
|
||||||
|
```
|
||||||
|
|
||||||
|
`KB_POSTGRES_TEST_URL` n’est pas utilisé par un profil runtime : il reste réservé aux tests d’intégration PostgreSQL. Le profil `local_devnet` utilise `KB_POSTGRES_DEVNET_URL`; les profils `mainnet_research` et `mainnet` utilisent `KB_POSTGRES_MAINNET_URL`. Les trois bases doivent être distinctes.
|
||||||
|
|
||||||
|
Le fichier réel `.env` reste local et ignoré par Git. `.env.example` est le seul modèle dotenv versionné.
|
||||||
|
|
||||||
## Phase `0.3.x`
|
## Phase `0.3.x`
|
||||||
|
|
||||||
`0.3.x` utilise les endpoints HTTP des profils de recherche existants pour :
|
`0.3.x` utilise les endpoints HTTP des profils de recherche existants pour :
|
||||||
|
|||||||
@@ -977,42 +977,42 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "file_kb-lib_decoder_spl_token2022_debug",
|
"name": "file_kb-lib_decoder_spl_token_2022_debug",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"sink": "file",
|
"sink": "file",
|
||||||
"level": "debug",
|
"level": "debug",
|
||||||
"path": "logs/devnet/kb-lib/decoder/spl/token2022/debug.log",
|
"path": "logs/devnet/kb-lib/decoder/spl/token_2022/debug.log",
|
||||||
"rotation": "daily",
|
"rotation": "daily",
|
||||||
"format": "human",
|
"format": "human",
|
||||||
"ansi": false,
|
"ansi": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
"kb-lib.decoder.spl.token2022"
|
"kb-lib.decoder.spl.token_2022"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "file_kb-lib_decoder_spl_token2022_info",
|
"name": "file_kb-lib_decoder_spl_token_2022_info",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"sink": "file",
|
"sink": "file",
|
||||||
"level": "info",
|
"level": "info",
|
||||||
"path": "logs/devnet/kb-lib/decoder/spl/token2022/info.log",
|
"path": "logs/devnet/kb-lib/decoder/spl/token_2022/info.log",
|
||||||
"rotation": "daily",
|
"rotation": "daily",
|
||||||
"format": "human",
|
"format": "human",
|
||||||
"ansi": false,
|
"ansi": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
"kb-lib.decoder.spl.token2022"
|
"kb-lib.decoder.spl.token_2022"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "file_kb-lib_decoder_spl_token2022_error",
|
"name": "file_kb-lib_decoder_spl_token_2022_error",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"sink": "file",
|
"sink": "file",
|
||||||
"level": "error",
|
"level": "error",
|
||||||
"path": "logs/devnet/kb-lib/decoder/spl/token2022/error.jsonl",
|
"path": "logs/devnet/kb-lib/decoder/spl/token_2022/error.jsonl",
|
||||||
"rotation": "daily",
|
"rotation": "daily",
|
||||||
"format": "json",
|
"format": "json",
|
||||||
"ansi": false,
|
"ansi": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
"kb-lib.decoder.spl.token2022"
|
"kb-lib.decoder.spl.token_2022"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1133,42 +1133,42 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "file_kb-lib_executor_spl_token2022_debug",
|
"name": "file_kb-lib_executor_spl_token_2022_debug",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"sink": "file",
|
"sink": "file",
|
||||||
"level": "debug",
|
"level": "debug",
|
||||||
"path": "logs/devnet/kb-lib/executor/spl/token2022/debug.log",
|
"path": "logs/devnet/kb-lib/executor/spl/token_2022/debug.log",
|
||||||
"rotation": "daily",
|
"rotation": "daily",
|
||||||
"format": "human",
|
"format": "human",
|
||||||
"ansi": false,
|
"ansi": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
"kb-lib.executor.spl.token2022"
|
"kb-lib.executor.spl.token_2022"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "file_kb-lib_executor_spl_token2022_info",
|
"name": "file_kb-lib_executor_spl_token_2022_info",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"sink": "file",
|
"sink": "file",
|
||||||
"level": "info",
|
"level": "info",
|
||||||
"path": "logs/devnet/kb-lib/executor/spl/token2022/info.log",
|
"path": "logs/devnet/kb-lib/executor/spl/token_2022/info.log",
|
||||||
"rotation": "daily",
|
"rotation": "daily",
|
||||||
"format": "human",
|
"format": "human",
|
||||||
"ansi": false,
|
"ansi": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
"kb-lib.executor.spl.token2022"
|
"kb-lib.executor.spl.token_2022"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "file_kb-lib_executor_spl_token2022_error",
|
"name": "file_kb-lib_executor_spl_token_2022_error",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"sink": "file",
|
"sink": "file",
|
||||||
"level": "error",
|
"level": "error",
|
||||||
"path": "logs/devnet/kb-lib/executor/spl/token2022/error.jsonl",
|
"path": "logs/devnet/kb-lib/executor/spl/token_2022/error.jsonl",
|
||||||
"rotation": "daily",
|
"rotation": "daily",
|
||||||
"format": "json",
|
"format": "json",
|
||||||
"ansi": false,
|
"ansi": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
"kb-lib.executor.spl.token2022"
|
"kb-lib.executor.spl.token_2022"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -1195,7 +1195,7 @@
|
|||||||
"enabled": true,
|
"enabled": true,
|
||||||
"backend": "postgres",
|
"backend": "postgres",
|
||||||
"postgres": {
|
"postgres": {
|
||||||
"url": "postgres://solana:solana@localhost:5432/solana",
|
"url": "${KB_POSTGRES_DEVNET_URL}",
|
||||||
"max_connections": 8,
|
"max_connections": 8,
|
||||||
"connect_timeout_ms": 5000,
|
"connect_timeout_ms": 5000,
|
||||||
"auto_initialize_schema": true
|
"auto_initialize_schema": true
|
||||||
@@ -2395,42 +2395,42 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "file_kb-lib_decoder_spl_token2022_debug",
|
"name": "file_kb-lib_decoder_spl_token_2022_debug",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"sink": "file",
|
"sink": "file",
|
||||||
"level": "debug",
|
"level": "debug",
|
||||||
"path": "logs/mainnet_research/kb-lib/decoder/spl/token2022/debug.log",
|
"path": "logs/mainnet_research/kb-lib/decoder/spl/token_2022/debug.log",
|
||||||
"rotation": "daily",
|
"rotation": "daily",
|
||||||
"format": "human",
|
"format": "human",
|
||||||
"ansi": false,
|
"ansi": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
"kb-lib.decoder.spl.token2022"
|
"kb-lib.decoder.spl.token_2022"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "file_kb-lib_decoder_spl_token2022_info",
|
"name": "file_kb-lib_decoder_spl_token_2022_info",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"sink": "file",
|
"sink": "file",
|
||||||
"level": "info",
|
"level": "info",
|
||||||
"path": "logs/mainnet_research/kb-lib/decoder/spl/token2022/info.log",
|
"path": "logs/mainnet_research/kb-lib/decoder/spl/token_2022/info.log",
|
||||||
"rotation": "daily",
|
"rotation": "daily",
|
||||||
"format": "human",
|
"format": "human",
|
||||||
"ansi": false,
|
"ansi": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
"kb-lib.decoder.spl.token2022"
|
"kb-lib.decoder.spl.token_2022"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "file_kb-lib_decoder_spl_token2022_error",
|
"name": "file_kb-lib_decoder_spl_token_2022_error",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"sink": "file",
|
"sink": "file",
|
||||||
"level": "error",
|
"level": "error",
|
||||||
"path": "logs/mainnet_research/kb-lib/decoder/spl/token2022/error.jsonl",
|
"path": "logs/mainnet_research/kb-lib/decoder/spl/token_2022/error.jsonl",
|
||||||
"rotation": "daily",
|
"rotation": "daily",
|
||||||
"format": "json",
|
"format": "json",
|
||||||
"ansi": false,
|
"ansi": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
"kb-lib.decoder.spl.token2022"
|
"kb-lib.decoder.spl.token_2022"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -2551,42 +2551,42 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "file_kb-lib_executor_spl_token2022_debug",
|
"name": "file_kb-lib_executor_spl_token_2022_debug",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"sink": "file",
|
"sink": "file",
|
||||||
"level": "debug",
|
"level": "debug",
|
||||||
"path": "logs/mainnet_research/kb-lib/executor/spl/token2022/debug.log",
|
"path": "logs/mainnet_research/kb-lib/executor/spl/token_2022/debug.log",
|
||||||
"rotation": "daily",
|
"rotation": "daily",
|
||||||
"format": "human",
|
"format": "human",
|
||||||
"ansi": false,
|
"ansi": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
"kb-lib.executor.spl.token2022"
|
"kb-lib.executor.spl.token_2022"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "file_kb-lib_executor_spl_token2022_info",
|
"name": "file_kb-lib_executor_spl_token_2022_info",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"sink": "file",
|
"sink": "file",
|
||||||
"level": "info",
|
"level": "info",
|
||||||
"path": "logs/mainnet_research/kb-lib/executor/spl/token2022/info.log",
|
"path": "logs/mainnet_research/kb-lib/executor/spl/token_2022/info.log",
|
||||||
"rotation": "daily",
|
"rotation": "daily",
|
||||||
"format": "human",
|
"format": "human",
|
||||||
"ansi": false,
|
"ansi": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
"kb-lib.executor.spl.token2022"
|
"kb-lib.executor.spl.token_2022"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "file_kb-lib_executor_spl_token2022_error",
|
"name": "file_kb-lib_executor_spl_token_2022_error",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"sink": "file",
|
"sink": "file",
|
||||||
"level": "error",
|
"level": "error",
|
||||||
"path": "logs/mainnet_research/kb-lib/executor/spl/token2022/error.jsonl",
|
"path": "logs/mainnet_research/kb-lib/executor/spl/token_2022/error.jsonl",
|
||||||
"rotation": "daily",
|
"rotation": "daily",
|
||||||
"format": "json",
|
"format": "json",
|
||||||
"ansi": false,
|
"ansi": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
"kb-lib.executor.spl.token2022"
|
"kb-lib.executor.spl.token_2022"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -2613,7 +2613,7 @@
|
|||||||
"enabled": true,
|
"enabled": true,
|
||||||
"backend": "postgres",
|
"backend": "postgres",
|
||||||
"postgres": {
|
"postgres": {
|
||||||
"url": "postgres://solana:solana@localhost:5432/solana",
|
"url": "${KB_POSTGRES_MAINNET_URL}",
|
||||||
"max_connections": 16,
|
"max_connections": 16,
|
||||||
"connect_timeout_ms": 5000,
|
"connect_timeout_ms": 5000,
|
||||||
"auto_initialize_schema": true
|
"auto_initialize_schema": true
|
||||||
@@ -4013,42 +4013,42 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "file_kb-lib_decoder_spl_token2022_debug",
|
"name": "file_kb-lib_decoder_spl_token_2022_debug",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"sink": "file",
|
"sink": "file",
|
||||||
"level": "debug",
|
"level": "debug",
|
||||||
"path": "logs/mainnet/kb-lib/decoder/spl/token2022/debug.log",
|
"path": "logs/mainnet/kb-lib/decoder/spl/token_2022/debug.log",
|
||||||
"rotation": "daily",
|
"rotation": "daily",
|
||||||
"format": "human",
|
"format": "human",
|
||||||
"ansi": false,
|
"ansi": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
"kb-lib.decoder.spl.token2022"
|
"kb-lib.decoder.spl.token_2022"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "file_kb-lib_decoder_spl_token2022_info",
|
"name": "file_kb-lib_decoder_spl_token_2022_info",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"sink": "file",
|
"sink": "file",
|
||||||
"level": "info",
|
"level": "info",
|
||||||
"path": "logs/mainnet/kb-lib/decoder/spl/token2022/info.log",
|
"path": "logs/mainnet/kb-lib/decoder/spl/token_2022/info.log",
|
||||||
"rotation": "daily",
|
"rotation": "daily",
|
||||||
"format": "human",
|
"format": "human",
|
||||||
"ansi": false,
|
"ansi": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
"kb-lib.decoder.spl.token2022"
|
"kb-lib.decoder.spl.token_2022"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "file_kb-lib_decoder_spl_token2022_error",
|
"name": "file_kb-lib_decoder_spl_token_2022_error",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"sink": "file",
|
"sink": "file",
|
||||||
"level": "error",
|
"level": "error",
|
||||||
"path": "logs/mainnet/kb-lib/decoder/spl/token2022/error.jsonl",
|
"path": "logs/mainnet/kb-lib/decoder/spl/token_2022/error.jsonl",
|
||||||
"rotation": "daily",
|
"rotation": "daily",
|
||||||
"format": "json",
|
"format": "json",
|
||||||
"ansi": false,
|
"ansi": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
"kb-lib.decoder.spl.token2022"
|
"kb-lib.decoder.spl.token_2022"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -4169,42 +4169,42 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "file_kb-lib_executor_spl_token2022_debug",
|
"name": "file_kb-lib_executor_spl_token_2022_debug",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"sink": "file",
|
"sink": "file",
|
||||||
"level": "debug",
|
"level": "debug",
|
||||||
"path": "logs/mainnet/kb-lib/executor/spl/token2022/debug.log",
|
"path": "logs/mainnet/kb-lib/executor/spl/token_2022/debug.log",
|
||||||
"rotation": "daily",
|
"rotation": "daily",
|
||||||
"format": "human",
|
"format": "human",
|
||||||
"ansi": false,
|
"ansi": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
"kb-lib.executor.spl.token2022"
|
"kb-lib.executor.spl.token_2022"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "file_kb-lib_executor_spl_token2022_info",
|
"name": "file_kb-lib_executor_spl_token_2022_info",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"sink": "file",
|
"sink": "file",
|
||||||
"level": "info",
|
"level": "info",
|
||||||
"path": "logs/mainnet/kb-lib/executor/spl/token2022/info.log",
|
"path": "logs/mainnet/kb-lib/executor/spl/token_2022/info.log",
|
||||||
"rotation": "daily",
|
"rotation": "daily",
|
||||||
"format": "human",
|
"format": "human",
|
||||||
"ansi": false,
|
"ansi": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
"kb-lib.executor.spl.token2022"
|
"kb-lib.executor.spl.token_2022"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "file_kb-lib_executor_spl_token2022_error",
|
"name": "file_kb-lib_executor_spl_token_2022_error",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"sink": "file",
|
"sink": "file",
|
||||||
"level": "error",
|
"level": "error",
|
||||||
"path": "logs/mainnet/kb-lib/executor/spl/token2022/error.jsonl",
|
"path": "logs/mainnet/kb-lib/executor/spl/token_2022/error.jsonl",
|
||||||
"rotation": "daily",
|
"rotation": "daily",
|
||||||
"format": "json",
|
"format": "json",
|
||||||
"ansi": false,
|
"ansi": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
"kb-lib.executor.spl.token2022"
|
"kb-lib.executor.spl.token_2022"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -4231,7 +4231,7 @@
|
|||||||
"enabled": true,
|
"enabled": true,
|
||||||
"backend": "postgres",
|
"backend": "postgres",
|
||||||
"postgres": {
|
"postgres": {
|
||||||
"url": "postgres://solana:solana@localhost:5432/solana",
|
"url": "${KB_POSTGRES_MAINNET_URL}",
|
||||||
"max_connections": 16,
|
"max_connections": 16,
|
||||||
"connect_timeout_ms": 5000,
|
"connect_timeout_ms": 5000,
|
||||||
"auto_initialize_schema": true
|
"auto_initialize_schema": true
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
"$id": "https://khadhroony.local/schema/config.schema.json",
|
"$id": "https://khadhroony.local/schema/config.schema.json",
|
||||||
"title": "Khadhroony Bot2 configuration",
|
"title": "Khadhroony Bot3 configuration",
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"additionalProperties": false,
|
"additionalProperties": false,
|
||||||
"required": [
|
"required": [
|
||||||
|
|||||||
110
docs/DEVNET_EXECUTION_GUIDE.md
Normal file
110
docs/DEVNET_EXECUTION_GUIDE.md
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
<!-- file: docs/DEVNET_EXECUTION_GUIDE.md -->
|
||||||
|
<!-- version: 3 -->
|
||||||
|
|
||||||
|
# Guide d’exécution Devnet
|
||||||
|
|
||||||
|
## 1. Objet
|
||||||
|
|
||||||
|
Ce guide est créé avant la campagne Devnet puis corrigé pendant les essais réels. Il décrit uniquement les scénarios exposés par `kb-app-demo-desktop` et `kb-pipeline-demo-scenarios`.
|
||||||
|
|
||||||
|
## 2. Préparation du profil
|
||||||
|
|
||||||
|
1. Copier `.env.example` vers `.env` et renseigner au minimum `KB_POSTGRES_DEVNET_URL`.
|
||||||
|
2. Vérifier que `KB_POSTGRES_DEVNET_URL`, `KB_POSTGRES_MAINNET_URL` et `KB_POSTGRES_TEST_URL` désignent trois bases distinctes.
|
||||||
|
3. Sélectionner le profil `local_devnet` ou le profil Devnet explicitement autorisé dans `example.config.json`.
|
||||||
|
4. Vérifier que l’envoi mainnet reste désactivé.
|
||||||
|
5. Vérifier les plafonds de frais, de dépense et les politiques `simulation-first`.
|
||||||
|
6. Démarrer l’application avec la configuration de développement attendue.
|
||||||
|
7. Contrôler dans la fenêtre Configuration que `local_devnet` utilise bien la base Devnet et non la base Mainnet.
|
||||||
|
|
||||||
|
## 3. Wallet de démonstration
|
||||||
|
|
||||||
|
Créer un wallet dédié avec les outils Solana installés localement, conserver le fichier hors du dépôt et vérifier ses permissions privées. Relever la pubkey sans copier la clé privée dans l’interface ou les logs.
|
||||||
|
|
||||||
|
Champs à consigner pendant les tests :
|
||||||
|
|
||||||
|
- alias du wallet ;
|
||||||
|
- pubkey ;
|
||||||
|
- cluster ;
|
||||||
|
- solde initial ;
|
||||||
|
- source de financement Devnet ;
|
||||||
|
- date du test.
|
||||||
|
|
||||||
|
## 4. Financement Devnet
|
||||||
|
|
||||||
|
Le financement doit être réalisé avec un faucet Web Devnet. La commande `solana airdrop` n’est pas considérée comme une procédure valide dans l’environnement de validation. Fournir uniquement la pubkey au faucet, ne jamais transmettre le fichier du wallet ni sa clé privée, puis vérifier le solde via la fenêtre HTTP ou une lecture RPC non mutable.
|
||||||
|
|
||||||
|
## 5. Ordre des tests existants
|
||||||
|
|
||||||
|
### 5.1 Solana Core
|
||||||
|
|
||||||
|
- génération d’un destinataire ;
|
||||||
|
- transfert System en simulation ;
|
||||||
|
- envoi après confirmation opérateur ;
|
||||||
|
- confirmation réseau ;
|
||||||
|
- extraction Core ciblée ;
|
||||||
|
- Decode replay ciblé ;
|
||||||
|
- vérification des projections.
|
||||||
|
|
||||||
|
### 5.2 SPL Memo v4
|
||||||
|
|
||||||
|
- saisir un texte borné ;
|
||||||
|
- vérifier le plan et les signers ;
|
||||||
|
- simuler ;
|
||||||
|
- envoyer ;
|
||||||
|
- confirmer ;
|
||||||
|
- vérifier l’annotation de transaction et l’idempotence du replay.
|
||||||
|
|
||||||
|
### 5.3 SPL Token classique
|
||||||
|
|
||||||
|
- préparer mint et comptes contrôlés ;
|
||||||
|
- exécuter les scénarios non destructifs avant le lifecycle complet ;
|
||||||
|
- documenter chaque signature et chaque solde brut avant/après ;
|
||||||
|
- vérifier replay et matérialisation.
|
||||||
|
|
||||||
|
### 5.4 ATA
|
||||||
|
|
||||||
|
- dériver l’ATA classique et Token-2022 ;
|
||||||
|
- simuler la création idempotente ;
|
||||||
|
- envoyer uniquement après contrôle du payer et du plafond de rent ;
|
||||||
|
- vérifier la projection lifecycle.
|
||||||
|
|
||||||
|
### 5.5 Token-2022 et registre ElGamal
|
||||||
|
|
||||||
|
- utiliser uniquement les scénarios explicitement disponibles dans l’interface ;
|
||||||
|
- conserver les preuves de préflight, comptes, extensions et signers ;
|
||||||
|
- distinguer registre ElGamal et programme Token-2022 ;
|
||||||
|
- vérifier les projections admin, token, fee, metadata et risk attendues.
|
||||||
|
|
||||||
|
## 6. Future fenêtre Metadata
|
||||||
|
|
||||||
|
La fenêtre `demo_execution_metadata` sera ajoutée avec le pipeline metadata général. L’ordre prévu est :
|
||||||
|
|
||||||
|
1. SPL Token Metadata incorporé à Token-2022 ;
|
||||||
|
2. programme Metaplex Token Metadata ;
|
||||||
|
3. éventuel enrichissement off-chain via `kb-offchain-transport`, sans couplage au replay canonique.
|
||||||
|
|
||||||
|
## 7. Preuves à conserver par scénario
|
||||||
|
|
||||||
|
- profil et cluster ;
|
||||||
|
- paramètres saisis ;
|
||||||
|
- plan exact ;
|
||||||
|
- signers requis ;
|
||||||
|
- estimation des frais ;
|
||||||
|
- résultat de simulation ;
|
||||||
|
- signature d’envoi ;
|
||||||
|
- confirmation ;
|
||||||
|
- résumé d’extraction/replay ;
|
||||||
|
- projections matérialisées ;
|
||||||
|
- diagnostics et écarts observés.
|
||||||
|
|
||||||
|
## 8. Critères de validation
|
||||||
|
|
||||||
|
Un scénario n’est validé que si :
|
||||||
|
|
||||||
|
- la simulation réussit ;
|
||||||
|
- l’envoi est explicitement confirmé ;
|
||||||
|
- la confirmation réseau correspond à la signature ;
|
||||||
|
- le replay post-exécution ne produit ni échec fonctionnel ni erreur de traitement ;
|
||||||
|
- les projections attendues sont présentes et idempotentes ;
|
||||||
|
- le guide est corrigé lorsque le comportement réel diffère des étapes écrites.
|
||||||
32
docs/IDEA_REMINDERS.md
Normal file
32
docs/IDEA_REMINDERS.md
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
<!-- file: docs/IDEA_REMINDERS.md -->
|
||||||
|
<!-- version: 2 -->
|
||||||
|
|
||||||
|
# Rappels d’idées
|
||||||
|
|
||||||
|
Ce document regroupe les améliorations utiles mais non bloquantes pour la clôture de la migration et pour la reprise du développement fonctionnel.
|
||||||
|
|
||||||
|
## Application desktop
|
||||||
|
|
||||||
|
- Ajouter une autocomplétion Token lorsque des tables de référence fiables existeront.
|
||||||
|
- Ajouter une autocomplétion Pool lorsque des tables de référence fiables existeront.
|
||||||
|
- Introduire une pagination SQL/IPC côté serveur avant l’exploitation de volumes massifs.
|
||||||
|
- Étudier une résolution configurable du chemin de base utilisé par `kb-store`.
|
||||||
|
|
||||||
|
## Pipeline et PostgreSQL
|
||||||
|
|
||||||
|
- Dimensionner dynamiquement la concurrence Decode replay en fonction du pool PostgreSQL disponible.
|
||||||
|
- Ajouter un retry borné et observable pour les erreurs transitoires de pool PostgreSQL.
|
||||||
|
- Conserver dans les résumés des compteurs distincts pour les échecs fonctionnels, les erreurs de traitement ou de stockage, les entrées récupérées après retry et les échecs finaux.
|
||||||
|
- Étudier une persistance dédiée des erreurs transitoires qui surviennent avant qu’une ligne de ledger puisse être écrite.
|
||||||
|
|
||||||
|
## Documentation et outils
|
||||||
|
|
||||||
|
- Refaire les scripts Python d’audit après stabilisation définitive de la structure, des targets et de la nomenclature.
|
||||||
|
- Maintenir un inventaire des IDL actives avec leur source, leur version ou commit, leur Program ID et les surfaces qui les utilisent.
|
||||||
|
|
||||||
|
## Transport off-chain des metadata
|
||||||
|
|
||||||
|
- Évaluer une crate `kb-offchain-transport` générale après le pipeline metadata : fetch HTTP(S)/IPFS/Arweave, prix SOL/USD-EUR-CHF, APIs Jupiter et autres fournisseurs non Solana RPC.
|
||||||
|
- Décider séparément si cette crate accepte uniquement des lectures ou aussi des opérations off-chain authentifiées/mutables, avec contrats de sécurité distincts.
|
||||||
|
- Borner tailles, types MIME, redirections, délais et schémas HTTP(S)/IPFS/Arweave.
|
||||||
|
- Ne pas coupler le fetch off-chain au décodage déterministe ni au replay canonique on-chain.
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
# Classification des fixtures de test
|
|
||||||
|
|
||||||
## Objet
|
|
||||||
|
|
||||||
Ce document inventorie les données structurées actuellement stockées sous `docs/` alors qu'elles sont consommées par le code ou les tests. Le répertoire `docs/` reste réservé à la documentation destinée à une lecture humaine.
|
|
||||||
|
|
||||||
## Destination retenue
|
|
||||||
|
|
||||||
Les matrices partagées doivent être déplacées sous :
|
|
||||||
|
|
||||||
```text
|
|
||||||
test-fixtures/contract-matrices/
|
|
||||||
```
|
|
||||||
|
|
||||||
Le déplacement sera effectué dans une tranche fonctionnelle atomique avec la mise à jour de tous les chemins `include_str!`, des références documentaires et des tests concernés.
|
|
||||||
|
|
||||||
## Inventaire
|
|
||||||
|
|
||||||
| Fichier actuel | Consommateurs Rust détectés | Classification cible |
|
|
||||||
|---|---:|---|
|
|
||||||
| `docs/METAPLEX_TOKEN_METADATA_MATRIX.json` | 2 | fixture contractuelle partagée |
|
|
||||||
| `docs/NATIVE_SOLANA_DECODER_MATRIX.json` | 1 | fixture contractuelle partagée |
|
|
||||||
| `docs/NATIVE_SOLANA_EXECUTION_MATRIX.json` | 1 | fixture contractuelle partagée |
|
|
||||||
| `docs/SOLANA_STANDARD_RPC_MATRIX.json` | 1 | fixture contractuelle partagée |
|
|
||||||
| `docs/SPL_ASSOCIATED_TOKEN_ACCOUNT_MATRIX.json` | 4 | fixture contractuelle partagée |
|
|
||||||
| `docs/SPL_ELGAMAL_REGISTRY_MATRIX.json` | 0 | usage à confirmer avant déplacement |
|
|
||||||
| `docs/SPL_MEMO_MATRIX.json` | 3 | fixture contractuelle partagée |
|
|
||||||
| `docs/SPL_TOKEN2022_MATRIX.json` | 2 | fixture contractuelle partagée |
|
|
||||||
| `docs/SPL_TOKEN2022_VALIDATION_MATRIX.json` | 1 | fixture contractuelle partagée |
|
|
||||||
| `docs/SPL_TOKEN_MATRIX.json` | 2 | fixture contractuelle partagée |
|
|
||||||
|
|
||||||
## Contraintes de migration
|
|
||||||
|
|
||||||
- Ne pas déplacer un fichier sans mettre à jour tous ses consommateurs dans le même delta.
|
|
||||||
- Ne pas laisser une copie durable sous `docs/`.
|
|
||||||
- Conserver les noms actuels sauf justification explicite.
|
|
||||||
- Ajouter les suppressions sous forme de commandes `rm -- ...` dans `delta.md`.
|
|
||||||
- Exécuter les tests de chaque crate consommatrice après le déplacement.
|
|
||||||
- Les helpers d'audit restent en lecture seule et signalent uniquement les emplacements suspects.
|
|
||||||
@@ -1,8 +1,62 @@
|
|||||||
<!-- file: idls/001.README.md -->
|
<!-- file: idls/001.README.md -->
|
||||||
<!-- version: 1 -->
|
<!-- version: 2 -->
|
||||||
|
|
||||||
# IDL locales
|
# IDL locales
|
||||||
|
|
||||||
Ce répertoire contient les IDL locales utilisées comme sources de connaissance pour les décodeurs.
|
Ce répertoire contient les IDL téléchargées depuis des sources officielles ou de référence et utilisées pour auditer les décodeurs, matérialiseurs et exécuteurs.
|
||||||
|
|
||||||
Les fichiers JSON ne doivent pas être modifiés pour ajouter des commentaires, car le format JSON standard ne les supporte pas.
|
## Règle d’admission
|
||||||
|
|
||||||
|
Une IDL devient une source locale active lorsqu’un décodeur ou un exécuteur correspondant est développé. À ce moment-là, il faut :
|
||||||
|
|
||||||
|
1. télécharger l’IDL utilisée ;
|
||||||
|
2. vérifier son Program ID et sa provenance ;
|
||||||
|
3. conserver son contenu JSON inchangé ;
|
||||||
|
4. la renommer selon la convention canonique ;
|
||||||
|
5. documenter sa version ou son commit lorsqu’ils sont connus ;
|
||||||
|
6. ajouter des tests comparant, selon le périmètre disponible, l’IDL, le runtime, les builders et l’interface officielle.
|
||||||
|
|
||||||
|
Les fichiers JSON ne doivent pas recevoir de commentaires ni être reformattés uniquement pour satisfaire la documentation.
|
||||||
|
|
||||||
|
## Convention de nommage
|
||||||
|
|
||||||
|
Forme principale :
|
||||||
|
|
||||||
|
```text
|
||||||
|
<PROGRAM_ID>.<protocol_type>.<protocol_code>.json
|
||||||
|
```
|
||||||
|
|
||||||
|
Exemple actif :
|
||||||
|
|
||||||
|
```text
|
||||||
|
metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s.metadata.metaplex_token_metadata.json
|
||||||
|
```
|
||||||
|
|
||||||
|
Lorsqu’il faut conserver plusieurs versions réellement distinctes d’une même IDL :
|
||||||
|
|
||||||
|
```text
|
||||||
|
<PROGRAM_ID>.<protocol_type>.<protocol_code>.<version>.json
|
||||||
|
```
|
||||||
|
|
||||||
|
Suffixes admis, par ordre de préférence :
|
||||||
|
|
||||||
|
```text
|
||||||
|
v<semver>
|
||||||
|
commit-<short_hash>
|
||||||
|
slot-<deployment_slot>
|
||||||
|
date-YYYY-MM-DD
|
||||||
|
```
|
||||||
|
|
||||||
|
La version ne doit jamais être inventée. Tant qu’une seule IDL est conservée pour un programme, le suffixe de version reste facultatif.
|
||||||
|
|
||||||
|
## Classification
|
||||||
|
|
||||||
|
- `protocol_type` représente la famille fonctionnelle stable, par exemple `metadata`, `launchpad`, `amm`, `clmm`, `lending`, `router`, `vault` ou `orderbook`.
|
||||||
|
- `protocol_code` représente le protocole ou la surface exacte, par exemple `metaplex_token_metadata`.
|
||||||
|
- La classification est validée lors de l’implémentation du décodeur ou de l’exécuteur ; les IDL de référence non encore utilisées ne doivent pas être renommées massivement sur une classification incertaine.
|
||||||
|
|
||||||
|
## Intégrité
|
||||||
|
|
||||||
|
Le renommage du fichier est autorisé. Le contenu de l’IDL doit rester identique à la source téléchargée.
|
||||||
|
|
||||||
|
Les graphies externes telles que `token2022`, les noms de types Anchor et les identifiants publiés dans l’IDL ne doivent pas être adaptés à la nomenclature interne du workspace.
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
# Metaplex Token Metadata IDL source
|
|
||||||
|
|
||||||
- Repository: `metaplex-foundation/mpl-token-metadata`
|
|
||||||
- Path: `idls/token_metadata.json`
|
|
||||||
- Branch used for this snapshot: `main`
|
|
||||||
- Program ID: `metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s`
|
|
||||||
- Git blob SHA observed during retrieval: `5df4a24f62c2743125be096cc174680790c92c18`
|
|
||||||
|
|
||||||
Refresh with:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
scripts/fetch_metaplex_token_metadata_idl.sh
|
|
||||||
```
|
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
<!-- file: kb-app-demo-desktop/frontend/demo_backfill.html -->
|
<!-- file: kb-app-demo-desktop/frontend/demo_backfill.html -->
|
||||||
<!-- version: 6 -->
|
<!-- version: 7 -->
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="fr">
|
<html lang="fr">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
||||||
<link rel="icon" href="imgs/favicon.png">
|
<link rel="icon" href="imgs/logo.png">
|
||||||
<link rel="stylesheet" href="sass/main.scss">
|
<link rel="stylesheet" href="sass/main.scss">
|
||||||
<title>Khadhroony Bot3 — Backfill HTTP</title>
|
<title>Khadhroony Bot3 — Backfill HTTP</title>
|
||||||
</head>
|
</head>
|
||||||
@@ -163,14 +163,14 @@
|
|||||||
<textarea class="form-control font-monospace app-log-output mb-4" id="backfillLogOutput" readonly="">Aucune campagne exécutée.</textarea>
|
<textarea class="form-control font-monospace app-log-output mb-4" id="backfillLogOutput" readonly="">Aucune campagne exécutée.</textarea>
|
||||||
<div class="d-flex justify-content-between align-items-center mb-2">
|
<div class="d-flex justify-content-between align-items-center mb-2">
|
||||||
<h2 class="h5 mb-0">Résumé JSON</h2>
|
<h2 class="h5 mb-0">Résumé JSON</h2>
|
||||||
<button class="btn btn-sm btn-outline-primary" id="copyBackfillSummaryButton" type="button">Copier</button>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="app-json-viewer" id="backfillSummaryOutput"></div>
|
<div class="app-json-viewer" id="backfillSummaryOutput">{"status":"idle","message":"Aucune campagne exécutée."}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<footer class="app-footer bg-dark text-light">
|
<footer class="app-footer bg-dark text-light">
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
<!-- file: kb-app-demo-desktop/frontend/demo_config.html -->
|
<!-- file: kb-app-demo-desktop/frontend/demo_config.html -->
|
||||||
<!-- version: 4 -->
|
<!-- version: 5 -->
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="fr">
|
<html lang="fr">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
||||||
<link rel="icon" href="imgs/favicon.png">
|
<link rel="icon" href="imgs/logo.png">
|
||||||
<link rel="stylesheet" href="sass/main.scss">
|
<link rel="stylesheet" href="sass/main.scss">
|
||||||
<title>Khadhroony Bot3 — Configuration</title>
|
<title>Khadhroony Bot3 — Configuration</title>
|
||||||
</head>
|
</head>
|
||||||
@@ -47,7 +47,7 @@
|
|||||||
<div class="card shadow-sm border-0 h-100">
|
<div class="card shadow-sm border-0 h-100">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h2 class="h5 card-title mb-3">Configuration active</h2>
|
<h2 class="h5 card-title mb-3">Configuration active</h2>
|
||||||
<div id="activeProfileJson" class="app-json-viewer" class="app-config-box app-json-viewer mb-0">Chargement...</div>
|
<div id="activeProfileJson" class="app-config-box app-json-viewer mb-0">Chargement...</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
<div class="card shadow-sm border-0 h-100">
|
<div class="card shadow-sm border-0 h-100">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h2 class="h5 card-title mb-3">Configuration complète</h2>
|
<h2 class="h5 card-title mb-3">Configuration complète</h2>
|
||||||
<div id="fullConfigJson" class="app-json-viewer" class="app-config-box app-json-viewer mb-0">Chargement...</div>
|
<div id="fullConfigJson" class="app-config-box app-json-viewer mb-0">Chargement...</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -65,7 +65,7 @@
|
|||||||
<div class="card shadow-sm border-0">
|
<div class="card shadow-sm border-0">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h2 class="h5 card-title mb-3">Schéma JSON embarqué</h2>
|
<h2 class="h5 card-title mb-3">Schéma JSON embarqué</h2>
|
||||||
<div id="schemaJson" class="app-json-viewer" class="app-config-box app-json-viewer mb-0">Chargement...</div>
|
<div id="schemaJson" class="app-config-box app-json-viewer mb-0">Chargement...</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
<!-- file: kb-app-demo-desktop/frontend/demo_core_extraction.html -->
|
<!-- file: kb-app-demo-desktop/frontend/demo_core_extraction.html -->
|
||||||
<!-- version: 8 -->
|
<!-- version: 10 -->
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="fr">
|
<html lang="fr">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
||||||
<link rel="icon" href="imgs/favicon.png">
|
<link rel="icon" href="imgs/logo.png">
|
||||||
<link rel="stylesheet" href="sass/main.scss">
|
<link rel="stylesheet" href="sass/main.scss">
|
||||||
<title>Khadhroony Bot3 — Extraction canonical vers core</title>
|
<title>Khadhroony Bot3 — Extraction canonical vers core</title>
|
||||||
</head>
|
</head>
|
||||||
@@ -122,7 +122,8 @@
|
|||||||
<div class="accordion-body">
|
<div class="accordion-body">
|
||||||
<p class="text-body-secondary">Sélectionne les transactions raw ayant déjà au moins une instruction core résolue pour ce programme. Ce mode sert aux replays après changement de version ou de hash.</p>
|
<p class="text-body-secondary">Sélectionne les transactions raw ayant déjà au moins une instruction core résolue pour ce programme. Ce mode sert aux replays après changement de version ou de hash.</p>
|
||||||
<label class="form-label" for="coreExtractionProgramIdInput">Program ID</label>
|
<label class="form-label" for="coreExtractionProgramIdInput">Program ID</label>
|
||||||
<input class="form-control font-monospace mb-3" id="coreExtractionProgramIdInput" />
|
<input class="form-control font-monospace mb-3" id="coreExtractionProgramIdInput" list="coreExtractionProgramIdOptions" />
|
||||||
|
<datalist id="coreExtractionProgramIdOptions"></datalist>
|
||||||
<button class="btn btn-primary core-extraction-start-button" data-core-extraction-mode="program_id" type="button">Extraire par programme</button>
|
<button class="btn btn-primary core-extraction-start-button" data-core-extraction-mode="program_id" type="button">Extraire par programme</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -141,7 +142,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-12 col-xl-5">
|
<div class="col-12 col-xl-5">
|
||||||
<h3 class="h6">Résumé JSON</h3>
|
<h3 class="h6">Résumé JSON</h3>
|
||||||
<textarea class="form-control font-monospace" data-json-viewer="true" id="coreExtractionSummaryOutput" readonly="" style="height: 28rem; overflow-y: auto;">Aucun résultat.</textarea>
|
<textarea class="form-control font-monospace" data-json-viewer="true" id="coreExtractionSummaryOutput" readonly="" style="height: 28rem; overflow-y: auto;">{"status":"idle","message":"Aucun résultat."}</textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
<!-- file: kb_app_demo/frontend/demo_decode_replay.html -->
|
<!-- file: kb_app_demo/frontend/demo_decode_replay.html -->
|
||||||
<!-- version: 6 -->
|
<!-- version: 7 -->
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="fr">
|
<html lang="fr">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
||||||
<link rel="icon" href="imgs/favicon.png">
|
<link rel="icon" href="imgs/logo.png">
|
||||||
<link rel="stylesheet" href="sass/main.scss">
|
<link rel="stylesheet" href="sass/main.scss">
|
||||||
<title>Khadhroony Bot3 — Décodage et matérialisation</title>
|
<title>Khadhroony Bot3 — Décodage et matérialisation</title>
|
||||||
</head>
|
</head>
|
||||||
@@ -117,9 +117,9 @@
|
|||||||
<h2 class="h5">Journal</h2>
|
<h2 class="h5">Journal</h2>
|
||||||
<textarea id="decodeReplayLogOutput" class="form-control font-monospace mb-3" rows="14" readonly>Aucune campagne exécutée.</textarea>
|
<textarea id="decodeReplayLogOutput" class="form-control font-monospace mb-3" rows="14" readonly>Aucune campagne exécutée.</textarea>
|
||||||
<h2 class="h5">Résumé</h2>
|
<h2 class="h5">Résumé</h2>
|
||||||
<textarea id="decodeReplaySummaryOutput" class="form-control font-monospace mb-3" rows="15" readonly data-json-viewer="true">Aucun résultat.</textarea>
|
<textarea id="decodeReplaySummaryOutput" class="form-control font-monospace mb-3" rows="15" readonly data-json-viewer="true">{"status":"idle","message":"Aucun résultat."}</textarea>
|
||||||
<h2 class="h5">Diagnostics</h2>
|
<h2 class="h5">Diagnostics</h2>
|
||||||
<textarea id="decodeReplayDiagnosticsOutput" class="form-control font-monospace" rows="18" readonly data-json-viewer="true">Diagnostics non chargés.</textarea>
|
<textarea id="decodeReplayDiagnosticsOutput" class="form-control font-monospace" rows="18" readonly data-json-viewer="true">{"status":"idle","message":"Diagnostics non chargés."}</textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -139,7 +139,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<p id="annotationJournalStatus" class="text-body-secondary mb-3">Annotations non chargées.</p>
|
<p id="annotationJournalStatus" class="text-body-secondary mb-3">Annotations non chargées.</p>
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-sm table-hover align-middle mb-0">
|
<table id="annotationJournalTable" class="table table-sm table-hover align-middle mb-0 w-100">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Slot</th>
|
<th>Slot</th>
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
<!-- file: kb-app-demo-desktop/frontend/demo_execution_solana_core.html -->
|
<!-- file: kb-app-demo-desktop/frontend/demo_execution_solana_core.html -->
|
||||||
<!-- version: 9 -->
|
<!-- version: 10 -->
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="fr">
|
<html lang="fr">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
||||||
<link rel="icon" href="imgs/favicon.png">
|
<link rel="icon" href="imgs/logo.png">
|
||||||
<link rel="stylesheet" href="sass/main.scss">
|
<link rel="stylesheet" href="sass/main.scss">
|
||||||
<title>Khadhroony Bot3 — Exécution Solana Core Devnet</title>
|
<title>Khadhroony Bot3 — Exécution Solana Core Devnet</title>
|
||||||
</head>
|
</head>
|
||||||
@@ -72,14 +72,14 @@
|
|||||||
<div class="col-12 col-xl-7">
|
<div class="col-12 col-xl-7">
|
||||||
<div class="card shadow-sm border-0">
|
<div class="card shadow-sm border-0">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h2 class="h5 mb-3">Résumé</h2><textarea class="form-control font-monospace" data-json-viewer="true" id="executionSummaryOutput" readonly="" rows="14">Aucun résultat.</textarea>
|
<h2 class="h5 mb-3">Résumé</h2><textarea class="form-control font-monospace" data-json-viewer="true" id="executionSummaryOutput" readonly="" rows="14">{"status":"idle","message":"Aucun résultat."}</textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card shadow-sm border-0 mt-4">
|
<div class="card shadow-sm border-0 mt-4">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h2 class="h5">Plan exact</h2><textarea class="form-control font-monospace" data-json-viewer="true" id="executionPlanOutput" readonly="" rows="12">Aucun plan.</textarea>
|
<h2 class="h5">Plan exact</h2><textarea class="form-control font-monospace" data-json-viewer="true" id="executionPlanOutput" readonly="" rows="12">{"status":"idle","message":"Aucun plan."}</textarea>
|
||||||
<h2 class="h5 mt-3">Simulation exacte</h2><textarea class="form-control font-monospace" data-json-viewer="true" id="executionSimulationOutput" readonly="" rows="12">Aucune simulation.</textarea>
|
<h2 class="h5 mt-3">Simulation exacte</h2><textarea class="form-control font-monospace" data-json-viewer="true" id="executionSimulationOutput" readonly="" rows="12">{"status":"idle","message":"Aucune simulation."}</textarea>
|
||||||
<h2 class="h5 mt-3">Confirmation et replay</h2><textarea class="form-control font-monospace" data-json-viewer="true" id="executionDiagnosticsOutput" readonly="" rows="12">Aucun diagnostic.</textarea>
|
<h2 class="h5 mt-3">Confirmation et replay</h2><textarea class="form-control font-monospace" data-json-viewer="true" id="executionDiagnosticsOutput" readonly="" rows="12">{"status":"idle","message":"Aucun diagnostic."}</textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -87,6 +87,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<footer class="app-footer bg-dark text-light">
|
<footer class="app-footer bg-dark text-light">
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
<!-- file: kb-app-demo-desktop/frontend/demo_execution_spl.html -->
|
<!-- file: kb-app-demo-desktop/frontend/demo_execution_spl.html -->
|
||||||
<!-- version: 11 -->
|
<!-- version: 14 -->
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="fr">
|
<html lang="fr">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
||||||
<link rel="icon" href="imgs/favicon.png">
|
<link rel="icon" href="imgs/logo.png">
|
||||||
<link rel="stylesheet" href="sass/main.scss">
|
<link rel="stylesheet" href="sass/main.scss">
|
||||||
<title>Khadhroony Bot3 — Exécution SPL Devnet</title>
|
<title>Khadhroony Bot3 — Exécution SPL Devnet</title>
|
||||||
</head>
|
</head>
|
||||||
@@ -101,7 +101,7 @@
|
|||||||
<div class="accordion-body">
|
<div class="accordion-body">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label class="form-label" for="memoMessageInput">Annotation UTF-8 exacte</label>
|
<label class="form-label" for="memoMessageInput">Annotation UTF-8 exacte</label>
|
||||||
<textarea class="form-control" id="memoMessageInput" maxlength="566" rows="5">khadhroony-bot2 Memo v4 validation</textarea>
|
<textarea class="form-control" id="memoMessageInput" maxlength="566" rows="5">khadhroony-bot3 Memo v4 validation</textarea>
|
||||||
<div class="form-text">566 octets UTF-8 maximum. La matérialisation `transaction_annotation` et le second replay d’idempotence sont obligatoires après envoi.</div>
|
<div class="form-text">566 octets UTF-8 maximum. La matérialisation `transaction_annotation` et le second replay d’idempotence sont obligatoires après envoi.</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-check form-switch mb-3">
|
<div class="form-check form-switch mb-3">
|
||||||
@@ -168,7 +168,7 @@
|
|||||||
<label class="form-label" for="ataTokenProgramSelect">Token Program cible</label>
|
<label class="form-label" for="ataTokenProgramSelect">Token Program cible</label>
|
||||||
<select class="form-select" id="ataTokenProgramSelect">
|
<select class="form-select" id="ataTokenProgramSelect">
|
||||||
<option value="classic">SPL Token classique</option>
|
<option value="classic">SPL Token classique</option>
|
||||||
<option value="token2022">Token-2022</option>
|
<option value="token_2022">Token-2022</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 col-md-6">
|
<div class="col-12 col-md-6">
|
||||||
@@ -205,31 +205,31 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="accordion-item">
|
<div class="accordion-item">
|
||||||
<h2 class="accordion-header" id="splToken2022DecoderHeading"><button aria-controls="splToken2022DecoderCollapse" aria-expanded="false" class="accordion-button collapsed" data-bs-target="#splToken2022DecoderCollapse" data-bs-toggle="collapse" type="button"><span class="d-flex flex-wrap align-items-center justify-content-between gap-2 w-100 me-2"><span>Exécution spl_token2022 — scénarios publics</span><span class="badge text-bg-success">Exécutable</span></span></button></h2>
|
<h2 class="accordion-header" id="splToken2022DecoderHeading"><button aria-controls="splToken2022DecoderCollapse" aria-expanded="false" class="accordion-button collapsed" data-bs-target="#splToken2022DecoderCollapse" data-bs-toggle="collapse" type="button"><span class="d-flex flex-wrap align-items-center justify-content-between gap-2 w-100 me-2"><span>Exécution spl_token_2022 — scénarios publics</span><span class="badge text-bg-success">Exécutable</span></span></button></h2>
|
||||||
<div aria-labelledby="splToken2022DecoderHeading" class="accordion-collapse collapse" data-bs-parent="#decoderExecutionAccordion" id="splToken2022DecoderCollapse">
|
<div aria-labelledby="splToken2022DecoderHeading" class="accordion-collapse collapse" data-bs-parent="#decoderExecutionAccordion" id="splToken2022DecoderCollapse">
|
||||||
<div class="accordion-body">
|
<div class="accordion-body">
|
||||||
<div class="alert alert-info">Chaque opération est simulée sur le message exact avant toute signature. Les scénarios sont indépendants et réutilisent la fixture chargée dans les deux terminaux.</div>
|
<div class="alert alert-info">Chaque opération est simulée sur le message exact avant toute signature. Les scénarios sont indépendants et réutilisent la fixture chargée dans les deux terminaux.</div>
|
||||||
<div class="d-grid mb-3"><button class="btn btn-outline-secondary" id="loadToken2022FixtureButton" type="button">Charger la fixture Token-2022</button></div>
|
<div class="d-grid mb-3"><button class="btn btn-outline-secondary" id="loadToken2022FixtureButton" type="button">Charger la fixture Token-2022</button></div>
|
||||||
<div class="form-text mb-3" id="token2022FixtureHelp">Aucune fixture chargée.</div>
|
<div class="form-text mb-3" id="token_2022FixtureHelp">Aucune fixture chargée.</div>
|
||||||
<div class="mb-3"><label class="form-label" for="token2022ScenarioSelect">Scénario</label><select class="form-select" id="token2022ScenarioSelect">
|
<div class="mb-3"><label class="form-label" for="token_2022ScenarioSelect">Scénario</label><select class="form-select" id="token_2022ScenarioSelect">
|
||||||
<option value="token2022_mint_to_checked">MintToChecked</option>
|
<option value="token_2022_mint_to_checked">MintToChecked</option>
|
||||||
<option value="token2022_transfer_checked">TransferChecked</option>
|
<option value="token_2022_transfer_checked">TransferChecked</option>
|
||||||
<option value="token2022_approve_checked">ApproveChecked</option>
|
<option value="token_2022_approve_checked">ApproveChecked</option>
|
||||||
<option value="token2022_revoke">Revoke</option>
|
<option value="token_2022_revoke">Revoke</option>
|
||||||
<option value="token2022_burn_checked">BurnChecked</option>
|
<option value="token_2022_burn_checked">BurnChecked</option>
|
||||||
<option value="token2022_freeze_account">FreezeAccount</option>
|
<option value="token_2022_freeze_account">FreezeAccount</option>
|
||||||
<option value="token2022_thaw_account">ThawAccount</option>
|
<option value="token_2022_thaw_account">ThawAccount</option>
|
||||||
<option value="token2022_close_destination">CloseAccount</option>
|
<option value="token_2022_close_destination">CloseAccount</option>
|
||||||
</select></div>
|
</select></div>
|
||||||
<div class="mb-3"><label class="form-label" for="token2022SourceInput">Compte source / compte cible</label><input class="form-control font-monospace" id="token2022SourceInput" type="text" /></div>
|
<div class="mb-3"><label class="form-label" for="token_2022SourceInput">Compte source / compte cible</label><input class="form-control font-monospace" id="token_2022SourceInput" type="text" /></div>
|
||||||
<div class="mb-3"><label class="form-label" for="token2022MintInput">Mint Token-2022</label><input class="form-control font-monospace" id="token2022MintInput" type="text" /></div>
|
<div class="mb-3"><label class="form-label" for="token_2022MintInput">Mint Token-2022</label><input class="form-control font-monospace" id="token_2022MintInput" type="text" /></div>
|
||||||
<div class="mb-3"><label class="form-label" for="token2022DestinationInput">Compte destination / destination lamports</label><input class="form-control font-monospace" id="token2022DestinationInput" type="text" /></div>
|
<div class="mb-3"><label class="form-label" for="token_2022DestinationInput">Compte destination / destination lamports</label><input class="form-control font-monospace" id="token_2022DestinationInput" type="text" /></div>
|
||||||
<div class="mb-3"><label class="form-label" for="token2022DelegateInput">Delegate</label><input class="form-control font-monospace" id="token2022DelegateInput" type="text" /></div>
|
<div class="mb-3"><label class="form-label" for="token_2022DelegateInput">Delegate</label><input class="form-control font-monospace" id="token_2022DelegateInput" type="text" /></div>
|
||||||
<div class="mb-3"><label class="form-label" for="token2022AuthorityInput">Autorité</label><input class="form-control font-monospace" id="token2022AuthorityInput" type="text" /></div>
|
<div class="mb-3"><label class="form-label" for="token_2022AuthorityInput">Autorité</label><input class="form-control font-monospace" id="token_2022AuthorityInput" type="text" /></div>
|
||||||
<div class="mb-3"><label class="form-label" for="token2022FreezeAuthorityInput">Freeze authority</label><input class="form-control font-monospace" id="token2022FreezeAuthorityInput" type="text" /></div>
|
<div class="mb-3"><label class="form-label" for="token_2022FreezeAuthorityInput">Freeze authority</label><input class="form-control font-monospace" id="token_2022FreezeAuthorityInput" type="text" /></div>
|
||||||
<div class="row g-3 mb-3">
|
<div class="row g-3 mb-3">
|
||||||
<div class="col-8"><label class="form-label" for="token2022AmountInput">Montant brut</label><input class="form-control" id="token2022AmountInput" type="text" value="1" /></div>
|
<div class="col-8"><label class="form-label" for="token_2022AmountInput">Montant brut</label><input class="form-control" id="token_2022AmountInput" type="text" value="1" /></div>
|
||||||
<div class="col-4"><label class="form-label" for="token2022DecimalsInput">Décimales</label><input class="form-control" id="token2022DecimalsInput" max="255" min="0" type="number" value="9" /></div>
|
<div class="col-4"><label class="form-label" for="token_2022DecimalsInput">Décimales</label><input class="form-control" id="token_2022DecimalsInput" max="255" min="0" type="number" value="9" /></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="d-grid gap-2 d-md-flex">
|
<div class="d-grid gap-2 d-md-flex">
|
||||||
<button class="btn btn-outline-primary flex-fill" id="simulateToken2022Button" type="button">Préflight et simuler</button>
|
<button class="btn btn-outline-primary flex-fill" id="simulateToken2022Button" type="button">Préflight et simuler</button>
|
||||||
@@ -269,7 +269,7 @@
|
|||||||
</h2>
|
</h2>
|
||||||
<div class="accordion-collapse collapse" data-bs-parent="#executionDetailsAccordion" id="executionPlanCollapse">
|
<div class="accordion-collapse collapse" data-bs-parent="#executionDetailsAccordion" id="executionPlanCollapse">
|
||||||
<div class="accordion-body">
|
<div class="accordion-body">
|
||||||
<textarea class="form-control font-monospace" data-json-viewer="true" id="executionPlanOutput" readonly="" rows="16">Aucun plan.</textarea>
|
<textarea class="form-control font-monospace" data-json-viewer="true" id="executionPlanOutput" readonly="" rows="16">{"status":"idle","message":"Aucun plan."}</textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -279,7 +279,7 @@
|
|||||||
</h2>
|
</h2>
|
||||||
<div class="accordion-collapse collapse" data-bs-parent="#executionDetailsAccordion" id="executionSimulationCollapse">
|
<div class="accordion-collapse collapse" data-bs-parent="#executionDetailsAccordion" id="executionSimulationCollapse">
|
||||||
<div class="accordion-body">
|
<div class="accordion-body">
|
||||||
<textarea class="form-control font-monospace" data-json-viewer="true" id="executionSimulationOutput" readonly="" rows="16">Aucune simulation.</textarea>
|
<textarea class="form-control font-monospace" data-json-viewer="true" id="executionSimulationOutput" readonly="" rows="16">{"status":"idle","message":"Aucune simulation."}</textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -289,7 +289,7 @@
|
|||||||
</h2>
|
</h2>
|
||||||
<div class="accordion-collapse collapse" data-bs-parent="#executionDetailsAccordion" id="executionDiagnosticsCollapse">
|
<div class="accordion-collapse collapse" data-bs-parent="#executionDetailsAccordion" id="executionDiagnosticsCollapse">
|
||||||
<div class="accordion-body">
|
<div class="accordion-body">
|
||||||
<textarea class="form-control font-monospace" data-json-viewer="true" id="executionDiagnosticsOutput" readonly="" rows="16">Aucun diagnostic.</textarea>
|
<textarea class="form-control font-monospace" data-json-viewer="true" id="executionDiagnosticsOutput" readonly="" rows="16">{"status":"idle","message":"Aucun diagnostic."}</textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -411,7 +411,7 @@
|
|||||||
<div class="card shadow-sm border-0 mt-4">
|
<div class="card shadow-sm border-0 mt-4">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h2 class="h5 mb-3">Résumé</h2>
|
<h2 class="h5 mb-3">Résumé</h2>
|
||||||
<textarea class="form-control font-monospace" data-json-viewer="true" id="executionSummaryOutput" readonly="" rows="14">Aucun résultat.</textarea>
|
<textarea class="form-control font-monospace" data-json-viewer="true" id="executionSummaryOutput" readonly="" rows="14">{"status":"idle","message":"Aucun résultat."}</textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card shadow-sm border-0 mt-4">
|
<div class="card shadow-sm border-0 mt-4">
|
||||||
@@ -427,6 +427,7 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<footer class="app-footer bg-dark text-light">
|
<footer class="app-footer bg-dark text-light">
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
<!-- file: kb-app-demo-desktop/frontend/demo_http.html -->
|
<!-- file: kb-app-demo-desktop/frontend/demo_http.html -->
|
||||||
<!-- version: 6 -->
|
<!-- version: 7 -->
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="fr">
|
<html lang="fr">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
||||||
<link rel="icon" href="imgs/favicon.png">
|
<link rel="icon" href="imgs/logo.png">
|
||||||
<link rel="stylesheet" href="sass/main.scss">
|
<link rel="stylesheet" href="sass/main.scss">
|
||||||
<title>Khadhroony Bot3 — HTTP JSON-RPC</title>
|
<title>Khadhroony Bot3 — HTTP JSON-RPC</title>
|
||||||
</head>
|
</head>
|
||||||
@@ -61,23 +61,17 @@
|
|||||||
<div class="col-12 col-xl-7">
|
<div class="col-12 col-xl-7">
|
||||||
<div class="card shadow-sm border-0 mb-4">
|
<div class="card shadow-sm border-0 mb-4">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="d-flex justify-content-between align-items-center mb-2">
|
<h2 class="h5 card-title">Endpoints HTTP</h2>
|
||||||
<h2 class="h5 card-title mb-0">Endpoints HTTP</h2>
|
<div id="httpPoolOutput" class="app-json-viewer">{"status":"loading","message":"Chargement des endpoints HTTP."}</div>
|
||||||
<button id="copyHttpPoolButton" class="btn btn-sm btn-outline-secondary">Copier</button>
|
|
||||||
</div>
|
|
||||||
<textarea id="httpPoolOutput" class="form-control font-monospace" rows="10" readonly>Chargement...</textarea>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card shadow-sm border-0">
|
<div class="card shadow-sm border-0">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="d-flex justify-content-between align-items-center mb-2">
|
<div class="d-flex justify-content-between align-items-center mb-2">
|
||||||
<h2 class="h5 card-title mb-0">Résultat</h2>
|
<h2 class="h5 card-title mb-0">Résultat</h2>
|
||||||
<div class="d-flex gap-2">
|
<button id="clearHttpResultButton" class="btn btn-sm btn-outline-secondary" type="button">Effacer</button>
|
||||||
<button id="copyHttpResultButton" class="btn btn-sm btn-outline-secondary" type="button">Copier</button>
|
|
||||||
<button id="clearHttpResultButton" class="btn btn-sm btn-outline-secondary" type="button">Effacer</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<textarea id="httpResultOutput" class="form-control font-monospace" style="height: 24rem; overflow-y: auto;" readonly>Aucune requête exécutée.</textarea>
|
<div id="httpResultOutput" class="app-json-viewer">{"status":"idle","message":"Aucune requête exécutée."}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
<!-- file: kb_app_demo/frontend/demo_sql_diag.html -->
|
<!-- file: kb_app_demo/frontend/demo_sql_diag.html -->
|
||||||
<!-- version: 3 -->
|
<!-- version: 4 -->
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="fr">
|
<html lang="fr">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
||||||
<link rel="icon" href="imgs/favicon.png">
|
<link rel="icon" href="imgs/logo.png">
|
||||||
<link rel="stylesheet" href="sass/main.scss">
|
<link rel="stylesheet" href="sass/main.scss">
|
||||||
<title>Khadhroony Bot3 — SQL diagnostics</title>
|
<title>Khadhroony Bot3 — SQL diagnostics</title>
|
||||||
</head>
|
</head>
|
||||||
@@ -64,7 +64,7 @@
|
|||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h2 class="h5 card-title mb-3">Tables raw/core connues</h2>
|
<h2 class="h5 card-title mb-3">Tables raw/core connues</h2>
|
||||||
<div class="table-responsive app-table-full-width">
|
<div class="table-responsive app-table-full-width">
|
||||||
<table class="table table-sm align-middle mb-0">
|
<table class="table table-sm align-middle mb-0" id="sqlDiagTable">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Table</th>
|
<th>Table</th>
|
||||||
@@ -88,7 +88,7 @@
|
|||||||
<div class="card shadow-sm border-0">
|
<div class="card shadow-sm border-0">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h2 class="h5 card-title mb-3">Payload JSON</h2>
|
<h2 class="h5 card-title mb-3">Payload JSON</h2>
|
||||||
<div id="sqlDiagJson" class="app-config-box app-json-viewer mb-0">Chargement...</div>
|
<div id="sqlDiagJson" class="app-config-box app-json-viewer mb-0">{"status":"loading","message":"Chargement des données SQL."}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
<!-- file: kb_app_demo/frontend/demo_sql_pg_core.html -->
|
<!-- file: kb_app_demo/frontend/demo_sql_pg_core.html -->
|
||||||
<!-- version: 4 -->
|
<!-- version: 5 -->
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="fr">
|
<html lang="fr">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
||||||
<link rel="icon" href="imgs/favicon.png">
|
<link rel="icon" href="imgs/logo.png">
|
||||||
<link rel="stylesheet" href="sass/main.scss">
|
<link rel="stylesheet" href="sass/main.scss">
|
||||||
<title>Khadhroony Bot3 — PostgreSQL core store</title>
|
<title>Khadhroony Bot3 — PostgreSQL core store</title>
|
||||||
</head>
|
</head>
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h2 class="h5 card-title mb-3">Tables core</h2>
|
<h2 class="h5 card-title mb-3">Tables core</h2>
|
||||||
<div class="table-responsive app-table-full-width">
|
<div class="table-responsive app-table-full-width">
|
||||||
<table class="table table-sm align-middle mb-0">
|
<table class="table table-sm align-middle mb-0" id="sqlCoreTable">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Table</th>
|
<th>Table</th>
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
<div class="card shadow-sm border-0">
|
<div class="card shadow-sm border-0">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h2 class="h5 card-title mb-3">Payload JSON</h2>
|
<h2 class="h5 card-title mb-3">Payload JSON</h2>
|
||||||
<div id="sqlCoreJson" class="app-config-box app-json-viewer mb-0">Chargement...</div>
|
<div id="sqlCoreJson" class="app-config-box app-json-viewer mb-0">{"status":"loading","message":"Chargement des données SQL."}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
<!-- file: kb_app_demo/frontend/demo_sql_pg_raw.html -->
|
<!-- file: kb_app_demo/frontend/demo_sql_pg_raw.html -->
|
||||||
<!-- version: 5 -->
|
<!-- version: 6 -->
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="fr">
|
<html lang="fr">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
||||||
<link rel="icon" href="imgs/favicon.png">
|
<link rel="icon" href="imgs/logo.png">
|
||||||
<link rel="stylesheet" href="sass/main.scss">
|
<link rel="stylesheet" href="sass/main.scss">
|
||||||
<title>Khadhroony Bot3 — PostgreSQL canonical acquisition</title>
|
<title>Khadhroony Bot3 — PostgreSQL canonical acquisition</title>
|
||||||
</head>
|
</head>
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h2 class="h5 card-title mb-3">Transactions canoniques et observations</h2>
|
<h2 class="h5 card-title mb-3">Transactions canoniques et observations</h2>
|
||||||
<div class="table-responsive app-table-full-width">
|
<div class="table-responsive app-table-full-width">
|
||||||
<table class="table table-sm align-middle mb-0">
|
<table class="table table-sm align-middle mb-0" id="sqlRawTable">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Table</th>
|
<th>Table</th>
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
<div class="card shadow-sm border-0">
|
<div class="card shadow-sm border-0">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h2 class="h5 card-title mb-3">Payload JSON</h2>
|
<h2 class="h5 card-title mb-3">Payload JSON</h2>
|
||||||
<div id="sqlRawJson" class="app-config-box app-json-viewer mb-0">Chargement...</div>
|
<div id="sqlRawJson" class="app-config-box app-json-viewer mb-0">{"status":"loading","message":"Chargement des données SQL."}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
<!-- file: kb_app_demo/frontend/demo_sql_replay_candidates.html -->
|
<!-- file: kb_app_demo/frontend/demo_sql_replay_candidates.html -->
|
||||||
<!-- version: 8 -->
|
<!-- version: 9 -->
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="fr">
|
<html lang="fr">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
||||||
<link rel="icon" href="imgs/favicon.png">
|
<link rel="icon" href="imgs/logo.png">
|
||||||
<link rel="stylesheet" href="sass/main.scss">
|
<link rel="stylesheet" href="sass/main.scss">
|
||||||
<title>Khadhroony Bot3 — Candidats de replay SQL</title>
|
<title>Khadhroony Bot3 — Candidats de replay SQL</title>
|
||||||
</head>
|
</head>
|
||||||
@@ -431,6 +431,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<footer class="app-footer bg-dark text-light">
|
<footer class="app-footer bg-dark text-light">
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user