20 KiB
20 KiB
CHANGELOG — ks-store
0.5.3-pre.005
- supprime l’ancien chemin complet
apply_store_schema/initialize_store_schema, devenu mort après l’introduction de l’auto-initialisation additive, et fait utiliser aux tests PostgreSQL le même chemin additif que la production afin de conservercargo checketcargo clippysans warnings ; - corrige l’exécution SQLx 0.9 des statements DDL additifs dynamiques en marquant explicitement le SQL généré par
ks-storeavecsqlx::AssertSqlSafe, sans modifier la logique d’auto-initialisation additive ; - aligne l’ouverture PostgreSQL sur un contrat de compatibilité additive : une ressource gérée existante mais incompatible (colonne, clé primaire/étrangère ou index) provoque une erreur, tandis qu’une ressource simplement absente est classée comme dérive additive ;
- fait de
auto_initialize_schemaun mécanisme d’extension non destructive :falserefuse toute ressource gérée manquante,truepeut créer une table absente, ajouter une colonne absente et recréer les clés/index absents avant validation complète ; aucune colonne existante n’est supprimée, renommée ou modifiée automatiquement ; - étend
schema_compatibility_verifyau contrat courant de 16 tables, 248 colonnes, 25 clés PK/FK et 79 index physiques, avec comparaison de la table cible, des colonnes de clé, des actions FK, de l’unicité, de la méthode B-tree, des expressions/ordres et des prédicats d’index ; - remplace le blocage global des objets historiques
kb_sol_*par une validation de compatibilité limitée aux ressources réellement possédées parks-store; les tables étrangères ou historiques peuvent désormais coexister sans être interprétées ; - dérive le contrat de 248 colonnes gérées sur 16 tables directement des ressources
CREATE TABLEembarquées et vérifie le type PostgreSQL, la nullabilité, la précision/échelleNUMERICet la présence des défauts nécessaires aux écritures courantes ; - accepte les colonnes additives compatibles mais refuse une colonne additive
NOT NULLsans défaut sur une table gérée, car lesINSERTcourants pourraient l'omettre ; - ajoute le diagnostic
schema_compatibility_verifyet un test PostgreSQL opt-in dansks-store; les consommateurs desktop/pipeline restent sans logique d'introspection PostgreSQL ; - remplace les listes Replay Candidates à limite embarquée par des pages
PageRequestcursorisées et comptées viaCountedPageSlice<T>; - ajoute un comptage rafraîchi à chaque chargement transaction/program/entity afin que le desktop recalcule le nombre total de blocs sans
OFFSET; - conserve
MAX_PAGE_SIZE = 500comme borne repository générique ; la politique de bloc desktop fixe à 500 appartient àkb-app-demo-desktopet ne crée aucun contrat UI spécifique dansks-store; - ajoute une pagination comptée générique de
k_sol_mat_outputsavec curseur(slot, id)et groupes bornés de contraintes structurelles JSON, utilisés à l’identique par leCOUNTet la page afin que les totaux reflètent exactement les filtres visibles sans introduire de connaissance SPL/protocole dans le Store ; - ajoute des curseurs stables spécifiques aux ordres transaction
(slot, signature), programme(transaction_count, program_id)et entité(transaction_count, entity_value); - refuse un curseur transaction réutilisé avec une direction d’ordre différente et maintient les requêtes Replay Candidates sans
OFFSET.
0.5.3-pre.004
Fix pre.004-delta-fix-003
- corrige deux canaris de source auto-référentiels : leurs assertions négatives analysaient aussi le bloc
#[cfg(test)]qui contenait lui-même la chaîne interdite ; - limite désormais les vérifications de source à la partie production précédant
#[cfg(test)]dansaccount_state_queries.rsetinvalidation_queries.rs; - ne modifie aucune requête PostgreSQL ni aucun comportement runtime.
Fix pre.004-delta-fix-002
- ajoute les annotations explicites
std::string::Stringsurorigin_textetstatus_textdans le mapper PostgreSQL des observations de compte ; - corrige les deux erreurs
E0282d'inférence génériqueread_row<T>()apparues après la suppression de l'opérateur?, sans modifier le contrat ni le comportement du mapper.
Fix pre.004-delta-fix-001
- remplace les 53 utilisations accidentelles de l'opérateur
?introduites dans les nouveaux mappers PostgreSQL account-state/Core replay par une propagation explicitematchconforme aux règles du workspace ; - ne modifie ni les contrats publics, ni le SQL, ni les règles de replay/pagination/invalidation de
pre.004.
Repositories et replay
- rend le replay N2 -> N3 symétrique pour les instructions top-level et CPI via une union logique
CoreInstructionScope::{TopLevel, Inner}sans fusionner les deux tables physiques ; - remplace la pagination
OFFSETdu contrat Core par un curseur stable(slot, signature, scope_rank, instruction_path)et borne les lectures interactives à 500 lignes ; - borne séparément les batches Core extraction, decode et account-state à 1 000 entrées afin qu’aucune API publique ne conserve les anciennes limites massives ;
- rend opérationnel le flux générique N1
account observation-> N2account stateavec sélection version-aware, idempotence par processing ledger, force replay et conservation du domaineu64pour lamports/rent epoch.
Invalidation et lifecycle
- invalide les descendants N3 decode/coverage/materialization d’une signature dans la même transaction lorsqu’un graphe Core est remplacé ;
- invalide les sorties de matérialisation d’un decode remplacé pour l’identité exacte decoder name/version/input et utilise des préfixes de ledger littéraux au lieu de
LIKE; - recalcule le lifecycle top-level/CPI depuis les descendants réellement courants et empêche une matérialisation d’une ancienne version de decoder de rendre la nouvelle version artificiellement
materialized.
Index, bornes et observabilité
- ajoute quatre index non uniques dédiés à l’ordre de replay CPI et aux recherches de descendants coverage/materialization ; le corpus passe à 240 ressources SQL, 63 index explicites et 79 index attendus avec les PK ;
- ajoute les canaris de conversion
u64/BIGINTet les limites de batch ; - instrumente les opérations PostgreSQL réécrites sous
target: crate::TRACING_TARGET,backend="postgres",domain="ks-store.pg"avecaction, durée, lignes et résultat, sans SQL brut ni valeur bindée.
0.5.3-pre.003
Fix pre.003-delta-fix-005
- remplace le passage des statements SQLx en
TRACEparConnectOptions::disable_statement_logging, afin queks-storene dépende pas directement de la crateloguniquement pourLevelFilter; - conserve l'ouverture PostgreSQL via
PgConnectOptions+connect_withet la journalisation fonctionnelle propre àks-storesoustarget: crate::TRACING_TARGET; - adapte le canari de connexion pour vérifier explicitement la désactivation du statement logging SQLx.
Fix pre.003-delta-fix-004
- configure
PgConnectOptionspour émettre les statements SQLx ordinaires au niveauTRACEavant l'ouverture du pool viaconnect_with, tout en conservant le target tierssqlx::query; - préserve les événements fonctionnels PostgreSQL
ks-storesoustarget: crate::TRACING_TARGETavecbackend,domainetaction; - ajoute un canari positif vérifiant le chemin
PgConnectOptions+TRACE+connect_with.
Fix pre.003-delta-fix-003
- corrige la branche
incomplete_signaturesde la sélection N2 -> N3 : leSELECTcontextualisé projette désormaisstack_heightcomme l'exigeCoreInstructionRow; - extrait cette requête rare dans
INCOMPLETE_DECODE_INPUTS_SQLet ajoute un test contractuel vérifiant toutes les colonnes attendues par le mapper Core, afin d'éviter une nouvelle dérive requête/DTO.
Baseline N1-N3 PostgreSQL
- corrige le premier delta
pre.003: fermeture de l'impl PostgresStore, appels des helpers privés de tests viasuper::et retrait des validateurs de noms de tables du runtime/re-export crate-root ; ces validateurs restent des canaris privés#[cfg(test)]. - reconstruit directement le schéma actif sous
k_sol_*avec un baseline candidat au gel de 16 tables : les 13 tables historiques conservées plusk_sol_obs_account_observations,k_sol_core_account_statesetk_sol_core_return_datarévélées par le canari future-decoder ; - ajoute
block_timeaux ancres raw/Core transaction,stack_heightaux contrats top-level/CPI et un lifecycle de processing symétrique pour les CPI ; la reconstruction de Core préserve le parent CPI immédiat lorsque la pile est disponible ; - renomme le journal N3 en
k_sol_mat_outputset aligne l'API publique surMaterializedOutputFilter,MaterializedOutputQueryRowetlist_materialized_outputs; - réserve sur
k_sol_decode_eventsune provenance nullable de schéma externe (kind/id/version/hash) afin qu'un futur décodeur IDL puisse tracer son schéma sans remodeler N1/N2/N3.
Ressources et initialisation
- corrige
pre.003-delta-fix-002l'ordre transactionnel des contraintes : les clés primaires référencées sont désormais appliquées avant les clés étrangères ; ajoute un canari couvrant les neuf dépendances FK du baseline afin d'empêcher un nouvel ordre invalide et le rollback complet observé sur base vide ; - remplace les migrations historiques
0001à0004et les deux scripts de maintenance monolithiques par 236 ressources PostgreSQL atomiques sousmigrations/postgres/: tables, contraintes, index,TRUNCATEetDROP, une instruction SQL par fichier embarquée parinclude_str!; - centralise l'initialisation dans un seul orchestrateur PostgreSQL transactionnel avec advisory lock ; les initialiseurs raw/Core/decode partiels sont supprimés, y compris dans les tests ;
- refuse explicitement la présence d'objets historiques
kb_sol_*au lieu de mélanger les deux namespaces ; - remplace la lecture
_sqlx_migrationscomme preuve du schéma courant par la vérification du contrat réellement observé ; - étend le résumé backend-agnostique aux catégories physiques
tableetindex, avec 75 index attendus sans exposer leurs noms.
Readiness et contrats
- conserve explicitement la
returnDataen N2 et enrichit le replay Core v3 avecblock_time,stack_height, parent CPI, contexte top-level et return data ; - introduit les DTO N1/N2 génériques d'observation/état de compte nécessaires au futur décodage de layouts inconnus, sans ajouter de structure Anchor/IDL spécifique ; leur ingestion/replay fonctionnel est raccordé dans la tranche repositories/replay ;
- ajoute un canari workspace imposant
crate::Typepour les types publics deks-storeutilisés dans leur crate propriétaire ; - ne crée aucune table DEX/trading ni projection metadata N4 et ne déclare pas encore le gel formel : le snapshot final reste prévu après les validations techniques.
0.5.3-pre.002-delta-fix-003
- corrige deux appels de helpers strictement privés PostgreSQL qui avaient été qualifiés à tort via
crate::; ils restent locaux à leur module et ne sont pas réexportés au crate-root ; - ne modifie aucun contrat public ni schéma SQL.
0.5.3-pre.002-delta-fix-002
- remplace les visibilités
pub(in crate::postgres)par la convention workspace : privé oupub(crate)+ réexport crate-root et consommation viacrate::Item; - ajoute le canari Rust interdisant
pub(in ...)/pub(super)et corrige les reexports#[cfg(test)]deks-pipeline-demo-scenarios; - supprime les appels obsolètes à
Store::initialize_store_schema(): l’initialisation reste possédée parStore::open()via la configuration backend ; - renomme structurellement les modules, fenêtres, commandes, HTML/TypeScript et DTO
demo_sql_*endemo_store_*, sans attendre la refonte fonctionnelle finale depre.005; - réconcilie le tracing PostgreSQL avec la règle d’un target unique :
target: crate::TRACING_TARGET,backend="postgres",domain="ks-store.pg",action=...; - supprime les helpers/constantes transitoires morts signalés par
cargo check/Clippy et l’attente Clippy devenue inutile.
0.5.3-pre.002-delta-fix-001
- corrige les helpers PostgreSQL de validation de noms de tables rendus inaccessibles par la nouvelle frontière privée et aligne leurs appels/tests sur la façade interne
crate::postgres::*; - supprime les réexports PostgreSQL internes devenus inutiles qui produisaient des warnings et conserve le target générique
ks-storeen l'utilisant réellement à l'ouverture de la façadeStore; - aligne les nouveaux types publics/crate-publics introduits par
pre.002sur la règle de qualificationcrate::Itemdans leur crate propriétaire.
0.5.3-pre.002
Façade et configuration
- introduit
StoreetStoreOpenOptionscomme frontière publique backend-agnostique et confinePostgresStore,PostgresStoreOptions,PgPool, les constantes physiques et les requêtes SQL à l'implémentation privée ; - remplace les sections runtime PostgreSQL/SQLite imposées par un code
backendet un objetbackend_optionsopaque jusqu'à son interprétation parks-store, sans créer de dépendanceks-store -> ks-config; - retire les quatre anciens traits/DTO historiques sans implémentation réelle et renomme les contrats publics de replay/diagnostic sans préfixe PostgreSQL ;
- conserve
Storedans l'état applicatif desktop via une initialisation unique et réutilisable par les commandes/scénarios.
Diagnostics et sécurité
- ajoute les résumés génériques de configuration, backend, initialisation et vérification par modèle, sans exposition des noms physiques de tables/index ni des options backend brutes ;
- masque le descripteur PostgreSQL et sanitise l'erreur de connexion afin qu'aucun DSN/password ne traverse les diagnostics normaux ;
- introduit le domaine structuré PostgreSQL
ks-store.pgsous l’uniquetarget: crate::TRACING_TARGET, ainsi qu'un canari workspace empêchant les types PostgreSQL/SQLx de sortir deks-store; - adapte les consommateurs Rust et les payloads desktop aux ressources/diagnostics génériques ; le renommage structurel
demo_sql_* -> demo_store_*est finalisé pardelta-fix-002, tandis que la refonte fonctionnelle finale reste à la tranche consommateurs.
Portée
- ne modifie aucune table ni migration SQL de production : le namespace
k_sol_*,block_time, la symétrie top-level/CPI et les ressources SQL atomiques restent réservés àpre.003.
0.5.3-pre.001
Audit / plan
- inventorie les 13 tables actives de
0.5.2, leurs migrations, DTO, repositories, requêtes et consommateurs ; - conserve les 13 tables existantes comme baseline avec instructions top-level et CPI physiquement séparées, mais rendues symétriques pour lifecycle/replay et accessibles via une lecture logique commune ; le nombre final N1/N2/N3 peut augmenter si le canari future-decoder révèle un manque Solana générique avant gel ;
- classe
block_timecomme correction pré-gel deraw_transactionsetcore_transactions, sans duplication dans chaque projection fille ; - conserve impérativement le journal générique N3 de matérialisation sous la cible
k_sol_mat_outputset réserve les projections spécialisées au niveau N4 ; - formalise le gel fort N1 raw/N2 Core/N3 materialization après
0.5.3, la souplesse contrôlée des projections N4 et les replays N1 -> N2, N2 -> N3 et N3 -> N4 ; - retient pour les metadata deux projections N4 futures : asset/token metadata commune Metaplex + Token-2022 et program metadata distincte pour SPM ;
- normalise le vocabulaire d'instruction vers
top-level, conserve les CPI séparées et exigestack_height/parent CPI immédiat lorsque reconstructible ; - ajoute un canari de gel future-decoder/Anchor-readiness : N1/N2/N3 doivent conserver les données Solana génériques nécessaires aux instructions/CPI, événements/logs,
returnData, états/observations de comptes et provenance de schéma, sans ajouter de contratanchor_*; les 13 tables existantes restent une baseline et non un quota final si un manque générique est découvert avant gel ; - formalise la reconstruction
kb_sol_* -> k_sol_*, l'arborescencemigrations/postgres/, une instruction SQL par fichier exécutée viainclude_str!, l'audit des index/paginations/BIGINT et les règles de replay/invalidation ; - définit la façade de stockage backend-agnostique, l'encapsulation de PostgreSQL, la stratégie de configuration backend opaque jusqu'à
ks-store, le résumé runtime/init sans secrets, la future réutilisation d'unStorepersistant dansAppState, le renommage structureldemo_sql_* -> demo_store_*, la refonte backend-agnostique dedemo_config/splash et le domaine de tracing PostgreSQLks-store.pgsous l’unique targetks-store; - ajoute
docs/plans/V0_5_3_KS_STORE_NORMALIZATION_PLAN.md; - ne crée aucune table DEX/trading ni projection metadata N4 dans
0.5.3; - considère
pre.007comme premier candidat de clôture et autorise explicitement son décalage si des manques apparaissent ; - ne modifie aucune table, migration SQL, requête ou API Rust de production dans cette prerelease de plan.
0.5.1-pre.004
- migre la variable des tests PostgreSQL optionnels vers
KS_SECRET_POSTGRES_TEST_URL; - renomme le helper SQL de rollback réservé aux tests de
kb_test_reject_decode_ledgerversks_test_reject_decode_ledger; - ne modifie aucune migration, table, requête SQL ou identité persistée.
0.5.1-pre.003
- aligne le contrat de test de persistance/replay sur l'identité de décodeur
ks-lib-decoder.*; - documente qu'une base contenant encore des identités
kb-lib.*doit être reconstruite ou migrée explicitement avant reprise durable du replay ; - ne modifie ni les migrations SQL
0001à0004, ni les tableskb_sol_*, dont le renommage reste réservé à0.5.3.
0.5.1-pre.002
- renomme
kb-storeenks-storeetkb_storeenks_store; - aligne le target racine et les consommateurs, tout en conservant volontairement les tables
kb_sol_*et les migrations SQL inchangées jusqu'à0.5.3.
0.5.0-pre.003
Documentation
- documente l’audit préparatoire
0.5.3sans modifier le schéma ni les migrations0001à0004; - formalise dans le TODO la caractérisation du schéma
0.4.8, la séparation deblock_timeon-chain des temps d’acquisition/persistance, l’enveloppe de faits/provenance et la décision future sur les projections normalisées parallèles au journal générique de matérialisation.
0.4.6
- alignement de la crate sur la version fonctionnelle bot3
0.4.6; - clôture des tâches de migration applicables et report explicite des évolutions ultérieures dans le TODO.
0.1.0-pre.074
- clôture de la tâche documentaire préalable à
0.4.6après publication du guide PostgreSQL et stockage ;
0.1.0-pre.073
- ajout du guide transversal
docs/guides/POSTGRES_STORAGE.md;
0.1.0-pre.072
- reclassement du TODO selon les blocants avant
0.4.6, les travaux0.4.7, les versions ultérieures et les dépendances conditionnelles.
0.1.0-pre.070
- enrichissement de
USAGE.mdavec plusieurs exemples couvrant les familles d’API publiques significatives.
0.1.0-pre.069
Documentation
- création de
TODO.md,USAGE.mdet du changelog détaillé ; - réécriture du README autour des contrats consolidés et de
PostgresStore; - suppression de la section
Non publié, incompatible avec le rôle chronologique du changelog ; - retrait des constats sans action du TODO et des travaux futurs du changelog ;
- réécriture de
TODO.mdsous forme de tâches uniquement ; - correction des exemples de
USAGE.mdafin de ne pas utiliser l’opérateur?.
0.1.0
Migré
- consolidation de
ks_store_core,ks_store_pget des contrats associés dansks-store; - migration des tables raw, observations, Core, ledger, événements décodés, couverture et matérialisations ;
- migration des migrations SQL, diagnostics et requêtes de replay.
Modifié
- adoption de Rust 2024 et des règles Khadhroony ;
- maintien des modules internes privés derrière une façade publique contrôlée ;
- erreurs structurées via
ks_core::Erroret transactions async viasqlx.
Validation
- tests des DTO, pagination, filtres, schéma, migrations, diagnostics et atomicité ;
- tests PostgreSQL réels optionnels pilotés par environnement.