5.3 KiB
Delta 0.0.3-pre.004
Base requise
v0.0.3-pre.003.
Objectif
Détailler la frontière Wire/Program sans ouvrir encore la totalité de l'orchestration Execution/Policy.
La tranche formalise :
ksp-interface-libet la propriété des codecs wire ;- la politique de sélection/réimplémentation des crates d'interface externes ;
ksp-program-apiouvert/extensible ;- les familles de decoders ;
ProgramExecutionPreparer;- le lifecycle machine-readable des opérations anciennes/abandonnées ;
- le registry officiel + externe ;
- l'organisation future de
ksp-program-lib; - le workflow d'une extension Program développée indépendamment.
Version Cargo
workspace.package.version passe de :
0.0.3-pre.3
à :
0.0.3-pre.4
Le header de Cargo.toml passe de version 9 à 10.
Fichiers ajoutés
docs/architecture/006-WIRE_AND_PROGRAM.mddeltas/0.0.3/pre.004.md
Fichiers modifiés
Cargo.tomldocs/architecture/000-README.mddocs/architecture/003-COMPONENT_CONTRACTS.mddocs/architecture/004-COMPONENT_INVENTORY.mddocs/architecture/005-DEPENDENCY_GRAPH.mddocs/rules/RULES_DEPENDENCIES.mddocs/rules/RULES_KSP.mddocs/IDEAS.mddocs/plans/001-V0_0_3_PLAN.mdprompts/001-V0_1_X_START_PROMPT.md
Fichiers supprimés
Aucun.
Décisions principales
Codecs wire
ksp-interface-lib est le propriétaire normal des dépendances wire telles que borsh, wincode et équivalents pour les interfaces officielles KSP.
ksp-program-lib ne redécode pas directement une surface officielle avec une autre génération de codec.
Sélection des interfaces externes
Une interface externe est retenue selon :
- caractère officiel/normatif ;
- stabilité/utilité de l'API ;
- compatibilité avec le stack actuel ;
- absence de dette de générations anciennes évitable.
Une crate protocolaire qui impose une ancienne génération incompatible d'un codec fondamental peut être remplacée par une réimplémentation KSP bornée aux contrats wire nécessaires.
Le workspace devra auditer les doublons de dépendances fondamentales (cargo tree -d, cargo tree -i ...) lorsque les dépendances fonctionnelles seront introduites.
Program API ouverte
Aucun enum central fermé de Program IDs n'est prévu.
Le résultat décodé doit pouvoir être auto-identifié, extensible et persistable.
Any ne peut pas constituer à lui seul le contrat de résultat.
Decoders
Les capacités sont séparables, avec notamment :
ProgramInstructionDecoder
ProgramAccountDecoder
et ajout de surfaces Event/ReturnData seulement lorsqu'un besoin réel le justifie.
Préparation d'exécution
Le terme ProgramExecutor est remplacé conceptuellement par :
ProgramExecutionPreparer
Il prépare l'opération protocolaire mais ne signe, simule, envoie ou confirme pas la transaction.
Lifecycle / deprecated
Le statut d'une opération est machine-readable.
Une opération simplement ancienne n'est pas automatiquement deprecated.
Une opération réellement abandonnée peut rester techniquement préparée avec warning et être ensuite autorisée/refusée par la policy supérieure.
#[deprecated] n'est pas obligatoire.
Le decoder continue de décoder les surfaces historiques distinguables.
Registry et extensions
Le registry doit composer implémentations officielles, externes et expérimentales.
Une extension s'appelle conceptuellement :
ksp-program-<name>-lib
et implémente ksp-program-api.
Elle peut exister/tester indépendamment de ksp-program-lib.
Si son interface wire n'est pas encore officiellement intégrée à KSP, elle peut temporairement posséder ses propres définitions compatibles.
Lors de l'intégration officielle, le wire migre vers ksp-interface-lib et l'implémentation Program vers ksp-program-lib sans modifier le contrat commun uniquement pour ce nouveau Program ID.
Organisation de ksp-program-lib
Principe retenu :
domain -> program/protocol -> capability
avec une direction de travail de type :
<domain>/<program>/dec/*
<domain>/<program>/exec_prep/*
Les noms exacts de répertoires restent à valider avec la première implémentation.
Plan ajusté
La tranche Execution/Policy est déplacée vers pre.005.
Les tranches suivantes sont décalées :
pre.005— Execution/Policy ;pre.006— Data/Store/Acquisition ;pre.007— Apps/Workers/Jobs/Scenarios ;pre.008— plan des premières releases fonctionnelles ;pre.009— clôture fondatrice.
Questions reportées
- représentation exacte du payload décodé ouvert/persistable ;
- descripteurs/registry exacts ;
- conflits entre plusieurs implémentations d'un même Program ID ;
- formes Rust exactes des traits ;
- noms définitifs
dec/exec_prep.
Ces points seront fixés avec les premières implémentations lorsqu'un cas réel permet de tester la qualité du contrat.
Validations
- headers
file:/version:vérifiés ; Cargo.tomlparsé et version0.0.3-pre.4vérifiée ;- liens vers
006-WIRE_AND_PROGRAM.mdvérifiés ; - plan
pre.005àpre.009vérifié ; - aucune commande Cargo de build/test exécutée : ce delta reste documentaire et n'ajoute aucun code Rust fonctionnel.