20 KiB
Validation v0.3.7 — Backfill Desk
1. Gate pre.001
- Archive KSP v0.3.6 testée intégralement avant travail.
- Archive kbot3 testée intégralement et extraite dans un arbre séparé.
- Aucune entrée ZIP absolue, traversal, séparateur inversé ou lien symbolique détecté.
workspace.package.version = 0.3.6confirmé sur la base.deltas/0.3.6/rel.001.mdconfirmé.ksp-job-api,ksp-job-backfill-libet les trois Desks existants confirmés.- Règles générales, Rust, dépendances, documentation, file contracts, version workflow et prompt structure relus.
- Architectures Layers/Dependencies/Components/Jobs/Apps relues.
- README/USAGE/plan/validation/delta v0.3.6 relus.
- Surfaces publiques Job/Backfill auditées depuis le code stable.
- Config composite/Transport/Store audités.
- Gabarits Config Desk, Wallet Desk et SOL Prices Desk audités.
- Ports 1436/1437 confirmés libres dans les gabarits existants ; 1434/1435 appartiennent à SOL Prices.
- kbot3 audité uniquement comme référence fonctionnelle/UX.
- Matrice REPRENDRE/REDESSINER/REPORTER/REJETER produite.
- Screen map, DTO/command map, Config/composition map et dependency map produits.
- Threat model produit.
- Single-run lifecycle, rôle HTTP, validation réseau et reprise in-session tranchés.
- Gate Tauri/live tranché sans dépendance payante obligatoire.
- Forecast scindé afin d'éviter une tranche Transport+Store manifestement trop large.
- Aucun scaffold Tauri, code Rust/TS/HTML ou composite runtime ajouté en pre.001.
2. Preuve des archives
| Source | SHA-256 | Résultat | Usage |
|---|---|---|---|
khadhroony-solana-project-v0.3.6.zip |
90eceb9fd28d87e580e3881cdd3eda935784532caac07d0ba3fb845be664c845 |
1 594 entrées, ZIP propre | source exclusive de code |
khadhroony-bot3_v0.5.3-pre.005-fix010-thelatest1(2).zip |
ee47643b9f8b582ee8db97b2381ec107e45aef8c009fee44757531514615d318 |
2 501 entrées, ZIP propre | référence fonctionnelle isolée |
Texte collé(20260901-220002).txt |
f70930be652d2532e2403f01227af9870fd31ec0603e64ddadca4a44d910d8cc |
journal opérateur | preuve externe baseline v0.3.6 |
Le journal opérateur fourni rapporte cargo clean, cargo fmt, audits Rust/Markdown, cargo check --workspace, Clippy, suites ciblées de toutes les crates, arbres Job/Backfill et cargo tree --duplicates sur v0.3.6. Cette preuve est conservée comme externe ; elle n'est pas assimilée à une exécution locale de pre.001.
3. Baseline locale
python3 scripts/audit_rust_workspace_rules.py: propre, zéro candidat d'export.python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas: 295 tables / 652 fichiers propres avant modification.cargo fmt --all: non exécuté localement, exécutablecargoabsent.cargo check --workspace: non exécuté localement, exécutablecargoabsent.cargo clippy --workspace --all-targets: non exécuté localement, exécutablecargoabsent.
4. Surface KSP acquise à préserver
BackfillRequestreste l'autorité des bornes et de la cohérence des scopes.- Latest/Before/After/Explicit restent les seuls scopes V1.
BackfillJobRuntimereste single-run.BackfillJobHandlereste la primitive de contrôle.BackfillSnapshotSourcelatest-value reste la primitive d'observation.BackfillCheckpointreste opaque et Rust-only.- Transport reste propriétaire retry/reroute/rate-limit/provider/endpoint.
- Store reste propriétaire backend/persistence/idempotence.
- Config reste propriétaire documents/env/secrets/composites.
5. Décisions de composition
- Composite dédié
config/composite.ksp-app-backfill-desk.jsonprévu. - Profils
devnet,mainnet,testnetprévus avec couples Transport/Store de même réseau. - Default prévu :
devnet. - Aucun
std.job_backfill.jsonen V1. - Les rôles sont dérivés de Transport et validés pour
getSignaturesForAddress+getTransaction. - Aucun rôle
history_backfilln'est hardcodé ; la base standard actuelle exposedefault. - Une incohérence réseau est rejetée avant Start.
- Le Desk ouvre Store via
ksp-store-lib, jamais via backend direct.
6. Contrat IPC prévu
- DTO applicatifs spécifiques au Desk ; aucune contrainte serde/TS-RS ajoutée aux crates Job.
- Options DTO : réseau sûr, rôles, commitments, scopes, bornes, readiness.
- Request DTO : inputs campagne uniquement.
- Status DTO : lifecycle/phase/boundary/compteurs/checkpoint-present/contiguous/failure code.
- Cancel/Resume responses sûres.
- Aucun checkpoint opaque, Store, Transport, channel Tokio, URL, secret ou RAW payload ne traverse IPC.
- Monitoring prévu via latest-value + événement Tauri, avec commande status de resynchronisation.
7. Threat model
- URI Store et secrets Config restent backend-only.
- Endpoint URLs/provider credentials restent backend-only.
- Signatures et adresse ne sont pas loggées côté frontend.
- RAW transaction data n'est pas projetée.
- Bornes et signatures sont revalidées côté Rust.
- Double Start est rejeté atomiquement.
- Cancel/terminal race est résolue par lifecycle réel et handle installé avant spawn.
- Checkpoint frontend forgé impossible : aucun checkpoint n'est sérialisé.
- Capabilities Tauri prévues minimales : core + tracing seulement tant qu'aucun autre besoin n'est démontré.
8. Gates futures
- Package Rust lib + bin conforme.
- Ports Vite/HMR 1436/1437 stricts.
- Splash/main + tracing conformes.
- Composite Backfill Desk packagé et valide.
- Transport readiness et role inventory sûrs.
- Store readiness et cohérence réseau.
- Quatre scopes + commitments + bornes mappés.
- Single active run + Start.
- Snapshot latest-value bridge.
- Cancel + races terminales.
- Checkpoint/frontier projection + Resume in-session.
- Frontend/security/composition tests verts.
cargo test --workspacefinal vert.(cd crates/ksp-app-backfill-desk && cargo tauri build)final vert.- Smoke live opt-in exécuté si environnement sûr disponible, sinon explicitement non requis.
- Réconciliation README/USAGE/plan/validation dans sa tranche dédiée.
- Prompt 0.3.8 + CHANGELOG + ROADMAP uniquement dans la lane de publication.
9. pre.002 — scaffold desktop
Le scaffold ksp-app-backfill-desk matérialise le gabarit Desk avant toute ouverture Transport/Store/Backfill : lib+bin, verrou single-instance, Config/Logging standard transitoire, splash commun, bridge Logging frontend, shell Backfill / Diagnostics, ports 1436/1437 et capabilities core:default + tracing:default.
Contraintes de gabarit vérifiées statiquement : mêmes assets splash/logo/DOS Amazigh que les trois Desk existantes, corps des cinq fichiers SASS partagés identique à SOL Prices Desk, splash HTML/SCSS identique hors identité Backfill et métadonnées de fichier, shell commun header + sidebar + content + footer, dépendances frontend minimales @fltsci/tauri-plugin-tracing, Font Awesome, Tauri API, Bootstrap, ResizeObserver polyfill et SimpleBar, plus les mêmes devDependencies que les trois Desk. Les clics, tabs, transitions de vue, refresh diagnostic et IPC sont instrumentés sans payload Backfill, adresse, signature, endpoint ou secret.
Gate statique local
- audit Rust workspace propre, zéro candidat d'export ;
- audit Markdown propre : 270 tableaux / 149 fichiers ;
- 4 manifests JSON et 2 manifests TOML parsés ;
- 6 dépendances frontend minimales aux versions du gabarit ;
devDependenciesstrictement identiques dans Config Desk, Wallet Desk, SOL Prices Desk et Backfill Desk ;- 5 assets binaires strictement identiques dans les quatre Desk ;
- 5 fichiers SASS partagés identiques à SOL Prices Desk hors header de propriété ;
- splash commun et shell sidebar contrôlés ;
- capabilities
core:default + tracing:defaultseulement ; - aucune dépendance Transport/Store/Backfill ouverte en
pre.002; - audit frontend interaction/security propre ;
- audit syntaxique TypeScript propre sur 5 fichiers ;
- diff
pre.001 -> pre.002borné à 46 ajouts, 3 modifications et aucune suppression ; cargo fmt/check/clippy/test: non exécutés,cargo/rustfmtabsents du sandbox ;- typecheck npm complet / build Tauri : non exécutés dans le sandbox.
Le contrôle TypeScript local est syntaxique avec le compilateur global disponible ; il ne remplace pas le typecheck complet avec dépendances npm et bindings TS-RS générés. Toute correction révélée par le gate opérateur reste dans la lane pre.002-fix.NNN.
10. pre.003 — composite Config et packaging
Le composite cfg.composite.ksp-app-backfill-desk est enregistré dans ksp-config-lib avec devnet par défaut. Il sélectionne supertrace + devnet_public + devnet, tandis que mainnet et testnet conservent des couples Transport/Store cohérents. Le bootstrap Backfill Desk valide les trois composants requis mais ne résout encore que Logging : aucun HttpTransportPool, Store::open, BackfillRequest ou BackfillJobRuntime n'est ouvert dans cette tranche.
Le niveau de développement est volontairement verbeux pour cette application : devnet utilise supertrace, et le fallback Logging propre à Backfill Desk utilise LogFilterLevel::Trace. Les autres applications Desk ne changent pas de profil Logging.
La découverte du contrat réel de prepare_packaged_runtime() a réconcilié le plan : la fonction traverse tout ConfigFileRegistry::defaults(). Le registre compte désormais 14 descriptors, de sorte que Config Desk, Wallet Desk, SOL Prices Desk et Backfill Desk embarquent toutes les 14 resources Config/schema. Les documents Wallet/offchain présents dans le bundle Backfill ne sont pas consommés par son runtime et n'élargissent ni ses capabilities ni ses dépendances Rust.
Gate pre.002 opérateur acquis
- audits Rust et Markdown propres ;
cargo check --workspacepropre ;cargo clippy --workspace --all-targetspropre ;cargo test -p ksp-app-backfill-desk: 12 unitaires + 5 desktop contract + 4 desktop security + 1 public API, aucun échec.
Gate statique local pre.003
- composite Backfill Desk ajouté au source Config et aux fixtures Config ;
- registre Config porté à 14 descriptors avec exports publics associés ;
- profils
devnet/mainnet/testnetet références Logging/Transport/Store couplés conformément au plan ; - les quatre
tauri.conf.jsonDesk embarquent le registre Config complet de 14 resources ; - release packaging Backfill Desk appelle
prepare_packaged_runtime()avant l'initialisation applicative ; - bootstrap Backfill valide Logging/Transport/Store puis ne résout que Logging ;
- niveau de développement Backfill Desk verrouillé à
supertracevia Config ettraceen fallback ; - aucune dépendance
ksp-job-backfill-lib,ksp-onchain-transport-lib,ksp-store-libou backend Store ajoutée au manifeste Backfill Desk ; - audit Rust workspace propre, zéro candidat d'export ;
- audit Markdown propre : 270 tableaux / 150 fichiers ;
- parsing JSON/TOML, validation JSON Schema et audit structurel Config/package propres ;
- gate opérateur
pre.003exécuté le 2026-09-02 : FIX REQUIRED ;cargo check --workspacepasse, mais l'audit Rust, Clippy, Config Desk et un canari Backfill Desk isolent quatre défauts locaux détaillés ci-dessous.
11. Correctif pre.003-fix.001
Le gate opérateur de pre.003 a isolé quatre défauts qui appartiennent tous au couloir Config/composition de pre.003 :
RUST-FMT-104danssrc/errors.rs:ERROR_CODE_CONFIG_COMPOSITE_INVALIDprécédait les constantesERROR_CODE_APP_STATE_*; le bloc est remis dans l'ordre alphabétique sans changer aucune valeur ;- Clippy
implicit_returndanstests/desktop_contract.rs: la closure qui litbundle.resourcesutilise désormais unreturnexplicite, conformément aux lints workspace ; - la fixture
composite.ksp-app-backfill-desk.jsonreprenait les profils de production (supertrace,devnet_public,mainnet_public,publicnode_testnet) alors que les fixtures réduites Logging/Transport n'exposent quelocal_devetsecret_testpour ces besoins ; comme les fixtures Wallet/SOL Prices existantes, la fixture Backfill utilise donc les profils disponibles du corpus de test, sans modifier le composite de production ; tests/desktop_security.rsattendait littéralementksp-config-lib.workspace = true, alors que les Desk KSP déclarent leurs dépendances internes par chemin local ; le canari vérifie désormais la forme réelleksp-config-lib = { path = "../ksp-config-lib" }et conserve les interdictions des couches Transport/Store/Backfill.
Le correctif ne modifie ni le profil supertrace de production, ni les 14 resources packagées, ni le bootstrap runtime, ni les capabilities Tauri, ni les dépendances fonctionnelles de Backfill Desk.
La version Cargo devient 0.3.7-pre.3.fix.1 conformément à VER-ID-007 et VER-ID-010, car le correctif touche des fichiers Rust compilés.
Gate opérateur ayant déclenché le fix
cargo fmt --all exécuté
python3 scripts/audit_rust_workspace_rules.py FAIL — 1 x RUST-FMT-104
python3 scripts/audit_markdown_tables.py ... deltas/0.3.7 PASS
cargo check --workspace PASS
cargo clippy --workspace --all-targets FAIL — implicit_return dans desktop_contract.rs
cargo test -p ksp-config-lib PASS — 128 tests unitaires + suites associées
cargo test -p ksp-app-config-desk FAIL — fixture Backfill / profil supertrace absent
cargo test -p ksp-app-wallet-desk PASS
cargo test -p ksp-app-solprices-desk PASS
cargo test -p ksp-app-backfill-desk FAIL — canari Cargo.toml obsolète
Gate du fix
- audits statiques Rust/Markdown rejoués dans l'environnement d'assemblage ;
- replay opérateur du 2026-09-02 : audits Rust/Markdown propres,
cargo check --workspacepropre, Clippy propre ; cargo test -p ksp-config-lib: 128 tests unitaires + suites ownership/public API, aucun échec ;cargo test -p ksp-app-config-desk: 63 tests unitaires + desktop/security/public API, aucun échec ;cargo test -p ksp-app-wallet-desketcargo test -p ksp-app-solprices-desk: suites ciblées propres ;cargo test -p ksp-app-backfill-desk: 13 unitaires + 2 composition + 7 desktop contract + 5 desktop security + 1 public API, aucun échec ;- arbres
cargo treeBackfill Desk exécutés sans anomalie rapportée.
12. pre.004 — Transport readiness
Backfill Desk dépend désormais directement de ksp-onchain-transport-lib au niveau backend uniquement. initialize_transport() résout le profil Transport déjà sélectionné par le composite, construit HttpTransportPool, dérive les clusters HTTP activés et déduplique les rôles logiques à partir des snapshots sûrs. Chaque rôle candidat doit réussir select_for_method() pour getSignaturesForAddress et getTransaction avant d'être exposé comme compatible.
Le sous-contrat BackfillDeskOptionsDto expose uniquement : réseaux configurés, rôles compatibles, readiness Transport et diagnostic applicatif sûr. Il ne contient ni provider, URL, endpoint physique, token, checkpoint, payload RAW ou objet Transport. La commande Tauri backfill_options est centralisée dans tauri.rs. Les scopes, commitments et bornes restent hors de cette tranche et seront ajoutés en pre.006.
Une seule network distincte et au moins un rôle compatible sont requis pour transport_ready = true. Une erreur Config/Transport n'empêche pas le shell de démarrer : elle produit une options projection non-ready avec CommandErrorDto, tandis que le pool n'est pas conservé. La cohérence avec le réseau Store reste explicitement réservée à pre.005.
Gate statique local pre.004
- dépendance
ksp-onchain-transport-libajoutée à Backfill Desk ; - aucune dépendance
ksp-store-lib,ksp-store-api,ksp-store-postgres-libouksp-job-backfill-libajoutée ; HttpTransportPoolconstruit uniquement danstransport_runtime.rs, pas dans le bootstrap Config/Logging ;- inventaire des clusters dérivé sans URL/provider ;
- rôles candidats dédupliqués et vérifiés sur les deux RPC requis ;
- le profil standard
devnet_publicpossède un unique clusterdevnetet le rôle wildcarddefault; - capabilities Tauri inchangées :
core:default + tracing:default; - tracing de développement Backfill inchangé : Config
supertrace, fallbacktrace; - audit Rust workspace local propre, zéro candidat d'export ;
cargo fmt/check/clippy/testdepre.004à rejouer par l'opérateur ;cargo/rustfmtrestent absents du sandbox.
13. pre.005 — Store readiness et cohérence réseau
Gate opérateur pre.004 acquis
- audits Rust/Markdown propres ;
cargo check --workspacepropre ;cargo clippy --workspace --all-targetspropre ;cargo test -p ksp-app-backfill-desk: 17 unitaires + 3 composition + 8 desktop contract + 5 desktop security + 1 public API, aucun échec ;- arbres
cargo treeBackfill Desk exécutés sans anomalie rapportée ; cargo tauri devdémarre le shell sur le profil Loggingsupertraceet le profil Transportdevnet_public;- le runtime réel rapporte un seul réseau, un rôle compatible et
transport_ready = true; - les changements de tabs sont visibles dans le tracing frontend
DEBUG.
Gate statique local pre.005
- dépendance directe
ksp-store-libajoutée à Backfill Desk ; - aucune dépendance directe
ksp-store-api,ksp-store-postgres-lib,ksp-job-backfill-lib,reqwestoutokio-postgresajoutée ; - le réseau Store est dérivé des settings Config résolus et comparé au réseau Transport unique avant
Store::open; - une incohérence ou l'absence de réseau Transport cohérent empêche l'ouverture Store ;
Store::health()est exécuté une fois après ouverture et sa projection reste backend-neutre ;BackfillDeskOptionsDtoexpose seulement réseau Store,network_coherent,store_ready,composition_readyet diagnostics sûrs en plus du sous-contrat Transport ;- aucune URI PostgreSQL, URL Transport, identité provider, credential ou objet Store n'est projeté vers l'IPC ;
- le
Storeest détenu côté Rust derrière une fermeture one-shot etStore::close(); - la fermeture de la fenêtre principale est interceptée pour exécuter le close Store borné avant la sortie applicative ;
- capabilities Tauri inchangées :
core:default + tracing:default; - tracing de développement Backfill inchangé : Config
supertrace, fallbacktrace; - aucun
BackfillRequest,BackfillJobRuntime, Start/Cancel/Resume n'est ouvert ; - audit Rust workspace local propre, zéro candidat d'export ;
cargo fmt/check/clippy/testdepre.005à rejouer par l'opérateur ;cargo/rustfmtrestent absents du sandbox.