This commit is contained in:
2026-07-23 16:37:12 +02:00
parent 99c345f2f2
commit 0da75c1311
2159 changed files with 230833 additions and 0 deletions

91
docs/POSTGRES_STORE.md Normal file
View File

@@ -0,0 +1,91 @@
<!-- file: docs/POSTGRES_STORE.md -->
<!-- version: 10 -->
# Store PostgreSQL canonique
## Baseline active
PostgreSQL reste le backend principal. Le store utilise le schéma courant du profil, généralement `public`, et ne qualifie pas les tables par un schéma applicatif explicite.
La baseline active contient :
```text
kb_sol_raw_transactions
kb_sol_obs_transaction_observations
kb_sol_core_transactions
kb_sol_core_account_keys
kb_sol_core_instructions
kb_sol_core_inner_instructions
kb_sol_core_logs
kb_sol_core_balance_changes
kb_sol_ops_processing_ledger
kb_sol_decode_events
kb_sol_decode_coverage_declarations
kb_sol_decode_coverage_observations
kb_sol_mat_events
```
## Initialisation
Le projet utilise encore des DDL idempotents gérés par `kb_store_pg`. `_sqlx_migrations` nest pas requis pour démarrer lapplication.
Les fichiers SQL actifs sont conservés comme représentation lisible de la baseline :
```text
0001_canonical_transaction_store.sql
0002_core_store.sql
0003_processing_ledger.sql
0004_decode_materialization_store.sql
```
Au démarrage Tauri, `initialize_store_schema()` applique une seule fois, dans lordre, les DDL raw, core puis decode/mat. Les connexions ouvertes ensuite par les commandes de démo désactivent `auto_initialize_schema` et ne relancent plus les migrations. Les méthodes spécialisées restent disponibles pour les tests et outils qui demandent explicitement linitialisation dun sous-ensemble dépendant.
## Extraction canonique vers core
`CoreExtractionStore` sélectionne les lignes raw, vérifie le ledger puis persiste un `CoreExtractionBundle` dans une transaction PostgreSQL unique.
Le mode normal skippe la combinaison déjà réussie :
```text
processor version + signature + canonical hash
```
Le replay forcé remplace uniquement le graphe de la signature ciblée. Les autres signatures ne sont pas modifiées.
## Tests PostgreSQL
Les tests qui utilisent `KB_POSTGRES_TEST_URL` doivent être lancés sur une base dédiée ou suivis dun nettoyage explicite.
Depuis `0.4.1-pre.021`, les tests optionnels qui partagent une base PostgreSQL réelle acquièrent un verrou process-local test-only. Ce verrou évite les interblocages intermittents entre campagnes de tests parallèles sans changer le code runtime ni le schéma SQL.
Les tests optionnels couvrent notamment le rollback atomique core/decode, la persistance réelle du ledger et la sémantique exacte des déclarations de couverture. `optional_postgres_core_extraction_rolls_back_partial_graph_from_env` :
1. insère une ligne raw isolée ;
2. tente de persister un bundle contenant deux account keys avec le même index ;
3. attend une violation de lindex unique après le début de la transaction ;
4. vérifie quaucune transaction core, account key ou entrée ledger na été conservée et que le raw reste `received` ;
5. rejoue un bundle corrigé ;
6. vérifie le passage à `core_extracted` et le ledger `succeeded` ;
7. nettoie ses lignes de test.
Commande de clôture :
```bash
KB_POSTGRES_TEST_URL='postgres://solana:solana@localhost:5432/solana_test' \
cargo test -p kb_store_pg -- --nocapture
```
Les contrôles réels déjà effectués sur la base principale ont confirmé :
- 70 transactions raw et core ;
- 70 entrées ledger `succeeded` ;
- 84 tentatives après un force replay de 14 signatures ;
- aucune duplication ni ligne fille orpheline ;
- cardinalité core inchangée après remplacement forcé.
## Couverture et skip decode
`persist_decode_coverage_declarations()` synchronise le snapshot déclaré dun processor/version et retourne des compteurs exacts : insertion réelle, modification/suppression du snapshot ou déclaration inchangée.
Le test PostgreSQL `optional_postgres_same_version_and_hash_is_current_from_env` persiste un résultat `unsupported` puis vérifie que le même stage, processor, version, input key et input hash est reconnu comme courant par le ledger.