0.3.15-pre.016
This commit is contained in:
@@ -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"
|
||||
|
||||
137
deltas/0.3.15/pre.016.md
Normal file
137
deltas/0.3.15/pre.016.md
Normal file
@@ -0,0 +1,137 @@
|
||||
<!-- file: deltas/0.3.15/pre.016.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# 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
|
||||
```
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/036-V0_3_15_RAW_TRANSACTION_INGEST_DESK_PLAN.md -->
|
||||
<!-- version: 24 -->
|
||||
<!-- version: 25 -->
|
||||
|
||||
# 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
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/validation/032-V0_3_15_RAW_TRANSACTION_INGEST_DESK.md -->
|
||||
<!-- version: 33 -->
|
||||
<!-- version: 34 -->
|
||||
|
||||
# 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.
|
||||
|
||||
Reference in New Issue
Block a user