10 KiB
10 KiB
Règles des dépendances KSP
Portée
Les règles DEP-* définissent quelles dépendances externes et internes peuvent traverser les frontières KSP et quelles couches en sont propriétaires.
Elles complètent les règles Rust générales et le graphe de docs/architecture/005-DEPENDENCY_GRAPH.md.
Firewall des exécutables
- DEP-EXEC-001 — Les applications, demos, workers et jobs KSP ne dépendent directement d'aucune crate externe relative à Solana ou à un protocole Solana. Ils consomment exclusivement les composants KSP propriétaires de ces contrats.
- DEP-EXEC-002 — Un exécutable peut dépendre directement de bibliothèques générales non-Solana nécessaires à son interface ou à son runtime, à condition qu'elles ne portent pas une opération métier/protocolaire appartenant à KSP.
- DEP-EXEC-003 — Si un exécutable a besoin d'un type, d'une fonction ou d'un contrat Solana, le composant KSP propriétaire doit l'exposer ou fournir le wrapper/contrat approprié.
Direction des dépendances internes
- DEP-KSP-001 — Une crate
ksp-<domain>-apine dépend jamais de l'implémentation officielleksp-<domain>-lib. - DEP-KSP-002 — Une bibliothèque basse de transformation/sémantique ne dépend pas d'un worker, job, application ou orchestrateur qui la consomme.
- DEP-KSP-003 — Les conversions entre modèles de transport, processing et persistence sont réalisées par les composants de composition appropriés plutôt que par des dépendances croisées entre domaines.
- DEP-KSP-004 — Aucun
ksp-data-apiglobal n'est introduit uniquement pour éviter des conversions explicites entre modèles appartenant à des responsabilités différentes. - DEP-KSP-005 — Une dépendance autorisée par le graphe n'est ajoutée au manifeste que lorsqu'un usage réel la justifie.
Codecs wire et cohérence des versions
- DEP-WIRE-001 — Pour les surfaces wire officielles KSP, les dépendances directes vers
borsh,wincodeou codecs équivalents appartiennent normalement àksp-interface-lib. - DEP-WIRE-002 —
ksp-program-libne redécode pas directement une surface possédée parksp-interface-libavec sa propre dépendance codec. - DEP-WIRE-003 — Une crate d'interface externe est retenue seulement si sa source/API et son graphe de dépendances sont suffisamment compatibles avec le stack KSP actuel.
- DEP-WIRE-004 — Une crate protocolaire externe qui impose une génération ancienne/incompatible d'une dépendance fondamentale peut être remplacée par une réimplémentation KSP bornée aux contrats wire nécessaires.
- DEP-WIRE-005 — Les doublons de générations de dépendances fondamentales sont audités et les doublons évitables doivent être éliminés ; un doublon inévitable requiert une justification.
- DEP-WIRE-006 — KSP cherche des versions récentes compatibles et ne fixe pas arbitrairement une ancienne version uniquement pour conserver une crate protocolaire remplaçable.
- DEP-WIRE-007 — Une extension Program externe peut posséder temporairement son propre wire lorsqu'aucune interface officielle KSP correspondante n'existe encore.
Logging
- DEP-LOG-001 —
ksp-logging-libest le propriétaire KSP direct detracing,tracing-appender,tracing-subscriberet de l'initialisation/configuration logging. - DEP-LOG-002 —
ksp-logging-libpeut dépendre deksp-core-libpour le contrat communError/Result. - DEP-LOG-003 —
ksp-core-libne dépend pas deksp-logging-libdans l'architecture actuelle. - DEP-LOG-004 — Les crates KSP comportant du runtime peuvent dépendre directement de
ksp-logging-libet ne dépendent normalement pas directement detracing. - DEP-LOG-005 — Les crates
*-apipurement déclaratives n'ajoutent pas une dépendance logging sans comportement réel à instrumenter. - DEP-LOG-006 — Une application/framework peut exceptionnellement intégrer directement un plugin/dépendance tracing imposé par son framework, notamment Tauri, sans créer une seconde politique de logging parallèle à
ksp-logging-lib.
Program / Execution
- DEP-PROGRAM-001 —
ksp-program-apipeut dépendre deksp-core-libetksp-interface-lib. - DEP-PROGRAM-002 —
ksp-program-libdépend deksp-program-apiet peut dépendre deksp-interface-lib/ksp-core-lib. - DEP-PROGRAM-003 —
ksp-program-apietksp-program-libne dépendent pas du wallet, du transport, du store ou des materializers. - DEP-PROGRAM-004 — Une implémentation externe
ksp-program-<name>-libpeut dépendre directement deksp-program-apisans dépendre deksp-program-lib. - DEP-EXECUTION-001 —
ksp-execution-policy-apidépend du contrat public Program et de Core, pas deksp-program-lib, wallet, transport, store ou UI. - DEP-EXECUTION-002 —
ksp-execution-libdépend deksp-program-api,ksp-execution-policy-api,ksp-wallet-lib,ksp-onchain-transport-lib,ksp-logging-libet Core ; il ne dépend pas deksp-program-lib. - DEP-EXECUTION-003 — Une implémentation de policy reste située dans une crate de scénario/domaine/produit appropriée et ne devient pas une responsabilité de
ksp-program-lib. - DEP-EXECUTION-004 — Une exécution réelle reçoit explicitement une policy ; aucun fallback permissif implicite n'est prévu.
- DEP-EXECUTION-005 — La policy décide/refuse/contraint mais ne réalise pas la simulation, la signature, le transport réseau ou l'interaction UI.
- DEP-EXECUTION-006 — Wallet/signers et provider/transport sont fournis/sélectionnés par la composition supérieure ;
ksp-execution-libles orchestre sans définir leur policy de sélection. - DEP-EXECUTION-007 — Le retry réseau d'un appel identique appartient au transport ; un retry modifiant le lifecycle d'exécution appartient à
ksp-execution-lib. - DEP-EXECUTION-008 —
ksp-execution-libne dépend ni deksp-store-apini deksp-store-lib; la persistence d'un résultat appartient à une composition supérieure.
Materializer / Store
- DEP-MAT-001 —
ksp-materializer-apipeut dépendre deksp-program-apilorsque les contrats de matérialisation consomment des sorties canoniques de processing. - DEP-MAT-002 —
ksp-materializer-apietksp-materializer-libne dépendent pas deksp-store-apiouksp-store-lib. - DEP-STORE-001 —
ksp-store-apine dépend pas de Program, Materializer ou Transport. - DEP-STORE-002 —
ksp-store-libdépend deksp-store-apiet contient l'implémentation PostgreSQL de référence ; il ne dépend pas des implémentations Program/Materializer/Transport. - DEP-STORE-003 — Les workers/jobs spécialisés sont propriétaires des conversions entre modèles runtime et DTO persistants.
Transport
- DEP-TRANSPORT-001 —
ksp-onchain-transport-libne dépend pas deksp-store-apiouksp-store-lib. - DEP-TRANSPORT-002 — Les providers on-chain normalisent leurs réponses dans des modèles KSP homogènes par catégorie de données avant exposition aux consommateurs.
- DEP-TRANSPORT-003 — Les modèles de transport ne réalisent pas de décodage métier/protocolaire et doivent rester facilement convertibles en DTO raw persistants.
- DEP-TRANSPORT-004 — Aucun
ksp-onchain-transport-apiouksp-offchain-transport-apiglobal n'est créé dans l'architecture actuelle.
Worker / Job lifecycle
- DEP-WORKER-001 —
ksp-worker-control-libdépend deksp-worker-apiet ne dépend pas deksp-job-api. - DEP-JOB-001 —
ksp-job-apine dépend ni deksp-worker-apini deksp-worker-control-lib. - DEP-JOB-002 — Un orchestrateur futur peut consommer séparément les APIs/contrôles workers et jobs sans introduire un lifecycle parent commun.
Propriété des dépendances Solana
- DEP-SOL-001 — Une dépendance externe relative à Solana doit avoir un composant KSP propriétaire précis.
- DEP-SOL-002 — Les bibliothèques KSP de haut niveau qui n'ont pas besoin d'un contrat externe bas niveau ne dépendent pas directement de ce contrat.
- DEP-SOL-003 — Les primitives Solana/Anza suffisamment fondamentales et stables peuvent être utilisées dans les bibliothèques KSP de bas niveau qui en sont propriétaires.
- DEP-SOL-004 — La liste initialement acceptée de primitives fondamentales comprend
solana-pubkey,solana-keypair,solana-signer,solana-hashetsolana-nonce. - DEP-SOL-005 — L'ajout d'une autre crate Solana/Anza est décidé à partir d'un besoin concret et de sa stabilité/API.
- DEP-SOL-006 — Une bibliothèque KSP peut exposer ou réexporter une primitive externe fondamentale lorsque cette primitive fait intentionnellement partie du contrat KSP.
Crates de protocoles et interfaces wire
- DEP-PROTO-001 — Les crates d'interface/protocole externes telles que
mpl-token-metadataouspl-elgamal-registry-interfacesont interdites par défaut comme dépendances runtime KSP. - DEP-PROTO-002 — KSP préfère posséder ses représentations compatibles nécessaires : Program IDs, discriminants, layouts, enums, structures wire, règles de PDA, sérialisation/désérialisation et autres contrats effectivement requis.
- DEP-PROTO-003 — Une réimplémentation KSP vise le contrat nécessaire et ne consiste pas à copier mécaniquement l'architecture ou l'intégralité d'une crate externe.
- DEP-PROTO-004 — La méthode de vérification de compatibilité wire et l'usage éventuel de dépendances externes uniquement en tests de conformité doivent être définis avant la première implémentation concernée.
- DEP-PROTO-005 — Une dépendance protocolaire externe exceptionnellement nécessaire doit être explicitement justifiée et confinée au composant propriétaire le plus bas possible.
Versions
- DEP-VER-001 — KSP privilégie les versions récentes compatibles des dépendances.
- DEP-VER-002 — Une version volontairement ancienne, bornée ou incompatible avec la politique générale est documentée avec la raison, le propriétaire et la condition permettant de lever la contrainte.
- DEP-VER-003 — Les lockfiles ne servent pas à figer silencieusement une version de dépendance ; les contraintes nécessaires appartiennent aux manifests et à la documentation.