From 5f19786ce9fdae1cc4f6335f464c6ad370d690ff Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Sat, 19 Sep 2026 05:08:05 +0200 Subject: [PATCH] 0.3.15-pre.016 --- Cargo.toml | 4 +- deltas/0.3.15/pre.016.md | 137 ++++++++++++++++++ ...0_3_15_RAW_TRANSACTION_INGEST_DESK_PLAN.md | 18 ++- ...032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md | 58 +++++++- 4 files changed, 208 insertions(+), 9 deletions(-) create mode 100644 deltas/0.3.15/pre.016.md diff --git a/Cargo.toml b/Cargo.toml index 1f7b021..07e3570 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ # file: Cargo.toml -# version: 633 +# version: 634 [workspace] resolver = "3" members = ["crates/ksp-app-backfill-desk", "crates/ksp-app-config-desk", "crates/ksp-app-raw-transaction-ingest-desk", "crates/ksp-app-solprices-desk", "crates/ksp-app-store-desk", "crates/ksp-app-wallet-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-interface-lib", "crates/ksp-job-api", "crates/ksp-job-backfill-lib", "crates/ksp-logging-lib", "crates/ksp-offchain-transport-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-program-api", "crates/ksp-raw-transaction-lib", "crates/ksp-store-api", "crates/ksp-store-lib", "crates/ksp-store-postgres-lib", "crates/ksp-wallet-lib", "crates/ksp-worker-api", "crates/ksp-worker-raw-transaction-ingest-lib"] [workspace.package] -version = "0.3.15-pre.15.fix.1" +version = "0.3.15-pre.16" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" diff --git a/deltas/0.3.15/pre.016.md b/deltas/0.3.15/pre.016.md new file mode 100644 index 0000000..c93a2af --- /dev/null +++ b/deltas/0.3.15/pre.016.md @@ -0,0 +1,137 @@ + + + +# Delta v0.3.15-pre.016 — gate technique/live final + +## Base + +```text +ksp-general-0.3.15-pre.015-fix.001.zip +SHA-256: f5048fdf4b77c418b359ba363aafa1e0d2a1ec65d5d111bc85776d5067afb012 +``` + +Le gate opérateur de la base est vert : audits Rust/Markdown, `cargo check --workspace`, Clippy strict, suites ciblées et workspace sans échec. Les canaris récents confirment `396/396` unitaires Transport, `49/49` release completeness Transport, `161/161` unitaires Worker et `50/50` unitaires Raw Transaction Ingest Desk. + +Le live Mainnet de la base ferme également `pre.015` : Yellowstone et HTTP Block Polling restent actifs ensemble environ 19 minutes, sans `grpc_backpressure_overflow`, sans `Yellowstone subscribe update queue overflowed` et sans terminal `Faulted`; les deux Stop ciblés finissent `Stopped/Healthy`. + +## Objet + +Ouvrir exclusivement le gate technique/live final de `0.3.15` conformément à `VER-LIFECYCLE-007`. Aucun nouveau comportement métier, runtime, test fonctionnel, frontend, Config, schema, migration ou dépendance n'est introduit. + +Cette tranche ne modifie aucun : + +```text +crates/**/src/** +crates/**/tests/** +crates/**/unit_tests/** +frontend/** +config/** +manifest de crate +README / USAGE durable +CHANGELOG.md +ROADMAP.md +prompt suivant +``` + +## Version + +```text +workspace.package.version : 0.3.15-pre.16 +root Cargo header counter : 634 +``` + +Aucune autre propriété Cargo n'est modifiée. + +## Gate technique final attendu + +```bash +cargo fmt --all +cargo fmt --all -- --check + +python3 scripts/audit_rust_workspace_rules.py +python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.3.15 + +cargo check --workspace +cargo clippy --workspace --all-targets --all-features -- -D warnings + +cargo test -p ksp-store-postgres-lib --all-targets --all-features +cargo test -p ksp-onchain-transport-lib --all-targets --all-features +cargo test -p ksp-worker-raw-transaction-ingest-lib --all-targets --all-features +cargo test -p ksp-app-raw-transaction-ingest-desk --all-targets --all-features +cargo test --workspace --all-targets --all-features + +cargo tree -p ksp-onchain-transport-lib --edges normal +cargo tree -p ksp-onchain-transport-lib -e features +cargo tree -p ksp-worker-raw-transaction-ingest-lib --edges normal +cargo tree -p ksp-worker-raw-transaction-ingest-lib -e features +cargo tree -p ksp-app-raw-transaction-ingest-desk --edges normal +cargo tree -p ksp-app-raw-transaction-ingest-desk -e features +cargo tree --duplicates + +(cd crates/ksp-app-raw-transaction-ingest-desk && cargo tauri build) +``` + +Les graphes sont rejoués même si cette tranche ne modifie aucune dépendance : Transport doit rester provider-neutral, le Worker doit rester dépendant des façades existantes sans backend physique, et la Desk doit composer Config/Transport/Store/Worker sans edge PostgreSQL direct. + +## Gate live + +Aucun nouveau live n'est requis par `pre.016` elle-même tant que son inventaire reste strictement mécanique/documentaire : `pre.015-fix.001`, base immédiate et runtime-identique, possède déjà la preuve live longue requise. + +La preuve héritée est : + +```text +Yellowstone Mainnet + HTTP Block Polling : ~19 minutes en parallèle +Faulted : 0 +grpc_backpressure_overflow : 0 +Yellowstone subscribe update queue overflowed : 0 +Yellowstone Stop : Stopped / Healthy +HTTP Block Polling Stop : Stopped / Healthy +``` + +Si le gate technique impose une modification runtime, cette preuve n'est plus suffisante : le changement doit suivre le lifecycle approprié et le live final doit être rejoué. + +## Fichiers ajoutés + +```text +deltas/0.3.15/pre.016.md +``` + +## Fichiers modifiés + +```text +Cargo.toml +docs/plans/036-V0_3_15_RAW_TRANSACTION_INGEST_DESK_PLAN.md +docs/validation/032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md +``` + +## Fichiers supprimés + +Aucun. + +## Validations exécutées dans l'environnement de génération + +```text +python3 scripts/audit_rust_workspace_rules.py +python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.3.15 +contrôle statique du scope gate-only +contrôle de version/header +contrôle différentiel exact +reconstruction overlay de l'archive +intégrité ZIP +``` + +Cargo/rustc/rustfmt ne sont pas disponibles dans l'environnement de génération ; aucun résultat du gate `pre.016` n'est déclaré PASS avant rejeu opérateur. + +## Questions ouvertes + +Aucune question de design. Tout échec appartenant au gate ouvre `pre.016-fix.NNN`. Une anomalie d'un couloir antérieur suit `VER-LIFECYCLE-010`. + +## Suite + +Après gate entièrement vert : + +```text +0.3.15-pre.017 — réconciliation documentaire finale +0.3.15-pre.018 — préparation publication minimale + prompt 0.3.16 +0.3.15-rel.001 — publication stable mécanique +``` diff --git a/docs/plans/036-V0_3_15_RAW_TRANSACTION_INGEST_DESK_PLAN.md b/docs/plans/036-V0_3_15_RAW_TRANSACTION_INGEST_DESK_PLAN.md index acce94a..c592ed4 100644 --- a/docs/plans/036-V0_3_15_RAW_TRANSACTION_INGEST_DESK_PLAN.md +++ b/docs/plans/036-V0_3_15_RAW_TRANSACTION_INGEST_DESK_PLAN.md @@ -1,5 +1,5 @@ - + # Plan v0.3.15 — Raw Transaction Ingest Desk @@ -869,19 +869,25 @@ Budget cible : une tranche de convergence/completeness cross-layer, sans modific ### `pre.015` — Yellowstone sustained gRPC backpressure -**État : en cours.** Le live prolongé de `pre.014-fix.001` a reproduit `Yellowstone subscribe update queue overflowed` à `22:09:54`, alors que le Stop opérateur n'est demandé qu'à `22:12:03`. `pre.013` a donc amélioré le débit sans fermer le défaut durable : lorsque les `256` slots pending Worker sont pleins, le Worker suspend `next_update()` ; la queue Transport bornée de `256` updates finit ensuite par se remplir et son ancien `try_send` transforme cette pression locale en faute terminale `grpc_backpressure_overflow`. +**État : implémenté et validé après `pre.015-fix.001`.** Le live prolongé de `pre.014-fix.001` avait reproduit `Yellowstone subscribe update queue overflowed` à `22:09:54`, alors que le Stop opérateur n'était demandé qu'à `22:12:03`. `pre.013` avait donc amélioré le débit sans fermer le défaut durable : lorsque les `256` slots pending Worker étaient pleins, le Worker suspendait `next_update()` ; la queue Transport bornée de `256` updates finissait ensuite par se remplir et son ancien `try_send` transformait cette pression locale en faute terminale `grpc_backpressure_overflow`. La correction conserve toutes les bornes et n'augmente aucune queue. L'acteur Yellowstone Transport remplace uniquement l'envoi non bloquant de l'update décodée par un `send().await` sélectionné avec le signal de shutdown prioritaire. Une queue pleine suspend ainsi le polling du stream Tonic et propage la backpressure au flux gRPC/HTTP/2 ; lorsque le consumer libère une place, la livraison reprend. Aucun update n'est dropé et aucune allocation non bornée n'est introduite. `grpc_backpressure_overflow` reste un code public valide pour les queues de mutations de requête synchrones/fail-fast et les bornes de message ; seule la saturation de la queue d'updates reçues cesse d'être un terminal local. -Le gate live doit dépasser la durée de reproduction précédente : Yellowstone Mainnet seul puis Yellowstone + HTTP Block Polling doivent chacun rester actifs au moins 10 minutes, sans WARN `Yellowstone subscribe update queue overflowed`, sans `grpc_backpressure_overflow` et avec Stop ciblé terminant `Stopped`. Une vraie rupture distante reste traitée par le reconnect/replay borné existant. +Le gate de `pre.015` a ensuite découvert une seconde anomalie appartenant au même contrat : après un Stop local explicite, PublicNode pouvait renvoyer un `Status::Unknown` pendant le half-close et remplacer à tort la terminaison coopérative par `source_failed`. `pre.015-fix.001` limite la correction à `finish_client_half_close()` : un status reçu après fermeture locale engagée produit `Closed`, tandis qu'un status reçu pendant une session active reste soumis au reconnect puis à `grpc_status` si la reprise échoue. -Budget cible : une tranche corrective Transport/acquisition, sans croissance d'API publique. +Le rejeu opérateur de `pre.015-fix.001` ferme le couloir : audits propres, Cargo/Clippy/tests sans échec, canaris Transport `396/396` et Worker `161/161`; Yellowstone Mainnet et HTTP Block Polling tournent ensemble environ 19 minutes sans `grpc_backpressure_overflow` ni état `Faulted`, puis terminent tous deux `Stopped/Healthy`. + +Budget consommé : correction Transport/acquisition sans croissance d'API publique. ### `pre.016` — gate technique/live final -Exécuter le workspace complet, Clippy strict, suites ciblées, graphes/duplicates, smokes réellement accessibles et build frontend/Tauri final. Aucun nouveau scope métier. +**État : ouvert.** Aucun nouveau comportement métier ou runtime n'est introduit. La preuve live de `pre.015-fix.001` est la baseline autoritaire puisque `pre.016` ne modifie ni source, ni test fonctionnel, ni Config, ni manifest de crate, ni frontend. -Budget cible : une tranche technique. +Le gate final rejoue : format, audits, `cargo check`, Clippy strict, suites ciblées Store/Transport/Worker/Desk, workspace all-targets/all-features, graphes Cargo des trois composants critiques, duplicates et `cargo tauri build` de la Desk. Les smokes live déjà fournis restent valides tant qu'aucun fichier runtime n'est modifié dans cette tranche. + +Tout défaut découvert ici ouvre `pre.016-fix.NNN`. Toute anomalie appartenant à un couloir antérieur ouvre une nouvelle prerelease dédiée conformément à `VER-LIFECYCLE-010`, puis les couloirs de clôture sont rejoués. + +Budget cible : une tranche technique de clôture uniquement. ### `pre.017` — réconciliation documentaire finale diff --git a/docs/validation/032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md b/docs/validation/032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md index 79fd556..953205a 100644 --- a/docs/validation/032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md +++ b/docs/validation/032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md @@ -1,5 +1,5 @@ - + # Validation v0.3.15 — Raw Transaction Ingest Desk @@ -1072,3 +1072,59 @@ release_v0_3_15_pre_015_fix_001_local_close_status_is_closed_without_weakening_a Gate live attendu : Yellowstone Mainnet doit rester `Running/Healthy` pendant le run, puis un Stop ciblé doit terminer `Stopped` même si PublicNode répond `Unknown` après le half-close. Une occurrence de `grpc_status` avant la demande de Stop reste un échec réel et ne doit pas être reclassée. +### `pre.016` — ouverture du gate technique/live final + +Le retour opérateur de `pre.015-fix.001` ferme la responsabilité backpressure/shutdown de `pre.015`. Après un `cargo clean`, les audits Rust/Markdown sont propres, `cargo check --workspace` et Clippy strict passent, et aucune suite testée ne rapporte d'échec. Les canaris récents passent notamment : + +```text +ksp-onchain-transport-lib unitaires : 396 passed / 0 failed +ksp-onchain-transport-lib release completeness : 49 passed / 0 failed +ksp-worker-raw-transaction-ingest-lib unitaires : 161 passed / 0 failed +ksp-app-raw-transaction-ingest-desk unitaires : 50 passed / 0 failed +``` + +La preuve live finale de la base `pre.015-fix.001` est également cohérente : + +```text +21:52:59 Yellowstone Mainnet installé +21:53:02 HTTP Block Polling Mainnet installé +22:11:52 Stop Yellowstone demandé +22:11:57 Yellowstone -> Stopped / Healthy / fault none +22:11:59 Stop HTTP Block Polling demandé +22:12:02 HTTP Block Polling -> Stopped / Healthy / fault none +``` + +Sur ce run d'environ 19 minutes en parallèle : + +```text +worker_state=Faulted : aucune occurrence +grpc_backpressure_overflow : aucune occurrence +Yellowstone subscribe update queue overflowed : aucune occurrence +content_conflict terminal : aucune occurrence +``` + +`pre.016` ne modifie aucun runtime. Le gate technique final attendu est donc : + +```text +cargo fmt --all +cargo fmt --all -- --check +python3 scripts/audit_rust_workspace_rules.py +python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.3.15 +cargo check --workspace +cargo clippy --workspace --all-targets --all-features -- -D warnings +cargo test -p ksp-store-postgres-lib --all-targets --all-features +cargo test -p ksp-onchain-transport-lib --all-targets --all-features +cargo test -p ksp-worker-raw-transaction-ingest-lib --all-targets --all-features +cargo test -p ksp-app-raw-transaction-ingest-desk --all-targets --all-features +cargo test --workspace --all-targets --all-features +cargo tree -p ksp-onchain-transport-lib --edges normal +cargo tree -p ksp-onchain-transport-lib -e features +cargo tree -p ksp-worker-raw-transaction-ingest-lib --edges normal +cargo tree -p ksp-worker-raw-transaction-ingest-lib -e features +cargo tree -p ksp-app-raw-transaction-ingest-desk --edges normal +cargo tree -p ksp-app-raw-transaction-ingest-desk -e features +cargo tree --duplicates +(cd crates/ksp-app-raw-transaction-ingest-desk && cargo tauri build) +``` + +Aucun nouveau live n'est requis par cette archive tant que ce scope reste strictement mécanique/documentaire : la base immédiatement précédente possède déjà le run long requis et `pre.016` ne change aucun fichier consommé par le runtime. Une modification runtime découverte nécessaire pendant le gate invaliderait cette non-claim et devrait être portée par un fix ou une nouvelle prerelease conforme au lifecycle.