v0.3.14-pre.013
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
# file: Cargo.toml
|
||||
# version: 587
|
||||
# version: 588
|
||||
|
||||
[workspace]
|
||||
resolver = "3"
|
||||
members = ["crates/ksp-app-backfill-desk", "crates/ksp-app-config-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.14-pre.12"
|
||||
version = "0.3.14-pre.13"
|
||||
edition = "2024"
|
||||
license = "MIT"
|
||||
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// file: crates/ksp-worker-raw-transaction-ingest-lib/tests/cross_layer_completeness.rs
|
||||
// version: 2
|
||||
// version: 3
|
||||
|
||||
//! Cross-layer completeness and security canaries through `0.3.13-pre.012`.
|
||||
//! Cross-layer completeness and security canaries through `0.3.14-pre.013`.
|
||||
|
||||
fn dependency_names(manifest: &str) -> std::vec::Vec<&str> {
|
||||
let mut section = "";
|
||||
@@ -363,3 +363,127 @@ fn v0_3_13_pre_012_security_redaction_matrix_covers_all_live_sources_and_lower_l
|
||||
assert!(postgres.contains("pre_009_backend_error_bridge_cannot_retain_external_error_or_secret_text"));
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn v0_3_14_pre_013_gap_repair_closure_keeps_one_transport_worker_common_raw_store_pipeline() {
|
||||
let transport_transactions = include_str!("../../ksp-onchain-transport-lib/src/rpc_transactions.rs");
|
||||
let transport_blocks = include_str!("../../ksp-onchain-transport-lib/src/rpc_blocks.rs");
|
||||
let worker_root = include_str!("../src/lib.rs");
|
||||
let worker_resources = include_str!("../src/runtime_resources.rs");
|
||||
let worker_runtime = include_str!("../src/runtime.rs");
|
||||
let worker_persistence = include_str!("../src/persistence.rs");
|
||||
let common_raw_root = include_str!("../../ksp-raw-transaction-lib/src/lib.rs");
|
||||
let store_api_root = include_str!("../../ksp-store-api/src/lib.rs");
|
||||
let store = include_str!("../../ksp-store-lib/src/store.rs");
|
||||
assert!(transport_transactions.contains("pub async fn get_transaction_observed("));
|
||||
assert!(transport_blocks.contains("pub async fn get_block_observed("));
|
||||
for required in [
|
||||
"RawTransactionIngestContinuityContracts",
|
||||
"RawTransactionIngestGlobalHydrationRegistry",
|
||||
"RawTransactionAdmission",
|
||||
"persist_raw_transaction_ingest_converged_acquisition",
|
||||
] {
|
||||
assert!(
|
||||
worker_root.contains(required) || worker_resources.contains(required) || worker_runtime.contains(required),
|
||||
"pre.013 Worker single-pipeline proof missing: {required}"
|
||||
);
|
||||
}
|
||||
assert!(worker_persistence.contains("ksp_store_lib::RawTransactionWrite::persist_raw_transaction_acquisition"));
|
||||
assert!(common_raw_root.contains("pub use self::acquisition::RawTransactionAcquisition;"));
|
||||
assert!(common_raw_root.contains("pub use self::wire::RawSolanaMessageVersion;"));
|
||||
assert!(store_api_root.contains("pub use self::model::raw_transaction::RawTransaction;"));
|
||||
assert!(store_api_root.contains("pub use self::model::raw_transaction::RawTransactionObservation;"));
|
||||
assert!(store.contains("persist_raw_transaction_acquisition"));
|
||||
assert!(store.contains("record_raw_transaction_observation"));
|
||||
for forbidden in [
|
||||
"ksp_store_postgres_lib::",
|
||||
"ksp_config_lib::",
|
||||
"ksp_job_backfill_lib::",
|
||||
"reqwest::",
|
||||
"tokio_tungstenite::connect_async",
|
||||
"yellowstone_grpc_proto::",
|
||||
] {
|
||||
assert!(
|
||||
!worker_runtime.contains(forbidden) && !worker_resources.contains(forbidden) && !worker_persistence.contains(forbidden),
|
||||
"pre.013 Worker bypassed the single facade pipeline: {forbidden}"
|
||||
);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn v0_3_14_pre_013_security_redaction_covers_gap_repair_and_terminal_paths() {
|
||||
let transport_subscribe = include_str!("../../ksp-onchain-transport-lib/unit_tests/grpc_subscribe.rs");
|
||||
let transport_unary = include_str!("../../ksp-onchain-transport-lib/unit_tests/grpc_unary.rs");
|
||||
let worker_hardening = include_str!("hardening.rs");
|
||||
let worker_root = include_str!("../src/lib.rs");
|
||||
let common_raw = include_str!("../../ksp-raw-transaction-lib/unit_tests/canonical.rs");
|
||||
let store_api = include_str!("../../ksp-store-api/tests/security_hardening.rs");
|
||||
let store = include_str!("../../ksp-store-lib/tests/hardening_completeness.rs");
|
||||
let postgres = include_str!("../../ksp-store-postgres-lib/tests/hardening_completeness.rs");
|
||||
assert!(transport_subscribe.contains("yellowstone_subscribe_debug_omits_filter_names_and_future_payloads"));
|
||||
assert!(transport_unary.contains("yellowstone_remote_status_does_not_copy_message_details_or_metadata"));
|
||||
for required in [
|
||||
"v0_3_14_pre_009_health_policy_is_present_future_coverage_gated_and_source_neutral",
|
||||
"v0_3_14_pre_010_repair_fairness_shares_existing_bounds_without_second_pipeline",
|
||||
"v0_3_14_pre_011_gap_observability_is_bounded_checked_and_redacted",
|
||||
"v0_3_14_pre_012_shutdown_races_are_bounded_across_source_and_worker_drains",
|
||||
] {
|
||||
assert!(worker_hardening.contains(required), "pre.013 Worker security closure proof missing: {required}");
|
||||
}
|
||||
for forbidden in ["source_key", "provider_gap", "endpoint_gap", "signature_gap", "payload_gap"] {
|
||||
assert!(!worker_root.contains(forbidden), "pre.013 public Worker root leaked sensitive gap material: {forbidden}");
|
||||
}
|
||||
assert!(common_raw.contains("pre_002_material_and_wire_debug_do_not_render_transaction_or_meta_material"));
|
||||
assert!(store_api.contains("pre_007_raw_debug_surfaces_do_not_render_payload_hash_signature_or_account_bytes"));
|
||||
assert!(store.contains("pre_009_secret_canary_never_crosses_settings_or_pre_io_error_debug"));
|
||||
assert!(postgres.contains("pre_009_backend_error_bridge_cannot_retain_external_error_or_secret_text"));
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn v0_3_14_pre_013_legacy_v0_v1_remains_proven_after_gap_repair_hardening() {
|
||||
let transport = include_str!("../../ksp-onchain-transport-lib/unit_tests/grpc_subscribe.rs");
|
||||
let worker = include_str!("../unit_tests/runtime_resources.rs");
|
||||
let common_raw = include_str!("../../ksp-raw-transaction-lib/unit_tests/wire.rs");
|
||||
let store_api = include_str!("../../ksp-store-api/tests/public_api.rs");
|
||||
for required in [
|
||||
"yellowstone_transaction_update_decodes_current_storage_wire_including_v1_config_and_meta",
|
||||
"yellowstone_block_update_reuses_transaction_account_entry_dtos_and_preserves_server_counts",
|
||||
] {
|
||||
assert!(transport.contains(required), "pre.013 Transport Legacy/V0/V1 proof missing: {required}");
|
||||
}
|
||||
for required in [
|
||||
"v0_3_13_pre_004_legacy_v0_v1_block_materials_are_direct_common_raw_with_exact_version_and_index",
|
||||
"v0_3_13_pre_006_http_block_polling_qualifies_legacy_v0_v1_and_rejects_ambiguous_or_future_versions",
|
||||
"v0_3_14_pre_008_proven_full_ledger_epoch_survives_filtered_peer_loss_without_worker_respawn",
|
||||
"v0_3_14_pre_012_source_fault_preserves_first_fault_and_aborts_non_cooperative_sibling",
|
||||
] {
|
||||
assert!(worker.contains(required), "pre.013 Worker Legacy/V0/V1 or continuity proof missing: {required}");
|
||||
}
|
||||
for required in [
|
||||
"pre_006_legacy_v0_and_v1_wire_goldens_are_exact",
|
||||
"RawSolanaMessageVersion::Legacy",
|
||||
"RawSolanaMessageVersion::V0",
|
||||
"RawSolanaMessageVersion::V1",
|
||||
] {
|
||||
assert!(common_raw.contains(required), "pre.013 Common RAW version proof missing: {required}");
|
||||
}
|
||||
assert!(store_api.contains("public_pre_003_raw_transaction_and_observation_are_constructible_from_crate_root"));
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn v0_3_14_pre_013_worker_and_backfill_remain_independent_producers() {
|
||||
let worker = dependency_names(include_str!("../Cargo.toml"));
|
||||
let backfill = dependency_names(include_str!("../../ksp-job-backfill-lib/Cargo.toml"));
|
||||
assert!(!worker.contains(&"ksp-job-api"));
|
||||
assert!(!worker.contains(&"ksp-job-backfill-lib"));
|
||||
assert!(!backfill.contains(&"ksp-worker-api"));
|
||||
assert!(!backfill.contains(&"ksp-worker-raw-transaction-ingest-lib"));
|
||||
for shared in ["ksp-onchain-transport-lib", "ksp-raw-transaction-lib", "ksp-store-lib"] {
|
||||
assert!(worker.contains(&shared), "Worker common RAW producer edge missing: {shared}");
|
||||
assert!(backfill.contains(&shared), "Backfill common RAW producer edge missing: {shared}");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-worker-raw-transaction-ingest-lib/tests/dependency_boundary.rs
|
||||
// version: 30
|
||||
// version: 31
|
||||
|
||||
//! Dependency firewall canaries for the RAW transaction ingest Worker foundation.
|
||||
|
||||
@@ -758,3 +758,36 @@ fn v0_3_14_pre_012_shutdown_hardening_stays_worker_local_and_facade_only() {
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn v0_3_14_pre_013_cross_layer_closure_keeps_dependency_and_producer_boundaries_exact() {
|
||||
let manifest = include_str!("../Cargo.toml");
|
||||
let dependencies = dependency_section(manifest);
|
||||
let names = manifest_dependency_names(dependencies);
|
||||
assert_eq!(
|
||||
names,
|
||||
vec![
|
||||
"ksp-core-lib",
|
||||
"ksp-logging-lib",
|
||||
"ksp-onchain-transport-lib",
|
||||
"ksp-raw-transaction-lib",
|
||||
"ksp-store-lib",
|
||||
"ksp-worker-api",
|
||||
"sha2",
|
||||
"tokio",
|
||||
],
|
||||
);
|
||||
let cross_layer = include_str!("cross_layer_completeness.rs");
|
||||
for required in [
|
||||
"v0_3_14_pre_013_gap_repair_closure_keeps_one_transport_worker_common_raw_store_pipeline",
|
||||
"v0_3_14_pre_013_security_redaction_covers_gap_repair_and_terminal_paths",
|
||||
"v0_3_14_pre_013_legacy_v0_v1_remains_proven_after_gap_repair_hardening",
|
||||
"v0_3_14_pre_013_worker_and_backfill_remain_independent_producers",
|
||||
] {
|
||||
assert!(cross_layer.contains(required), "pre.013 cross-layer closure proof missing: {required}");
|
||||
}
|
||||
for forbidden in ["ksp-config-lib", "ksp-job-api", "ksp-job-backfill-lib", "ksp-store-api", "ksp-store-postgres-lib"] {
|
||||
assert!(!names.contains(&forbidden), "pre.013 Worker dependency boundary expanded: {forbidden}");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-worker-raw-transaction-ingest-lib/tests/hardening.rs
|
||||
// version: 36
|
||||
// version: 37
|
||||
|
||||
//! External public, security, redaction and release-boundary hardening canaries through `v0.3.14-pre.011`.
|
||||
|
||||
@@ -1352,3 +1352,25 @@ fn v0_3_14_pre_012_shutdown_races_are_bounded_across_source_and_worker_drains()
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn v0_3_14_pre_013_cross_layer_completeness_security_closure_is_exact_and_redacted() {
|
||||
let cross_layer = include_str!("cross_layer_completeness.rs");
|
||||
let dependency_boundary = include_str!("dependency_boundary.rs");
|
||||
let public_api = include_str!("public_api.rs");
|
||||
for required in [
|
||||
"v0_3_14_pre_013_gap_repair_closure_keeps_one_transport_worker_common_raw_store_pipeline",
|
||||
"v0_3_14_pre_013_security_redaction_covers_gap_repair_and_terminal_paths",
|
||||
"v0_3_14_pre_013_legacy_v0_v1_remains_proven_after_gap_repair_hardening",
|
||||
"v0_3_14_pre_013_worker_and_backfill_remain_independent_producers",
|
||||
] {
|
||||
assert!(cross_layer.contains(required), "pre.013 cross-layer hardening proof missing: {required}");
|
||||
}
|
||||
assert!(dependency_boundary.contains("v0_3_14_pre_013_cross_layer_closure_keeps_dependency_and_producer_boundaries_exact"));
|
||||
assert!(public_api.contains("v0_3_14_pre_013_completeness_closure_adds_no_public_surface"));
|
||||
let root = include_str!("../src/lib.rs");
|
||||
for forbidden in ["source_key", "provider_gap", "endpoint_gap", "signature_gap", "payload_gap", "pub mod "] {
|
||||
assert!(!root.contains(forbidden), "pre.013 public Worker root leaked forbidden material: {forbidden}");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-worker-raw-transaction-ingest-lib/tests/public_api.rs
|
||||
// version: 23
|
||||
// version: 24
|
||||
|
||||
//! External public-surface proofs for the RAW transaction ingest Worker foundation.
|
||||
|
||||
@@ -479,3 +479,36 @@ fn v0_3_14_pre_011_gap_observability_is_public_bounded_and_source_neutral() {
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn v0_3_14_pre_013_completeness_closure_adds_no_public_surface() {
|
||||
let root = include_str!("../src/lib.rs");
|
||||
let public_exports = root.lines().filter(|line| line.trim().starts_with("pub use ")).count();
|
||||
assert_eq!(public_exports, 43);
|
||||
for required in [
|
||||
"RawTransactionIngestGapId",
|
||||
"RawTransactionIngestGapReason",
|
||||
"RawTransactionIngestGapSnapshot",
|
||||
"RawTransactionIngestGapState",
|
||||
"RawTransactionIngestRepairMethod",
|
||||
"RawTransactionIngestSnapshot",
|
||||
"RawTransactionIngestWorker",
|
||||
] {
|
||||
assert!(root.contains(required), "pre.013 expected stable public Worker surface missing: {required}");
|
||||
}
|
||||
for forbidden in [
|
||||
"RawTransactionIngestContinuityContracts",
|
||||
"RawTransactionIngestGlobalHydrationRegistry",
|
||||
"RawTransactionIngestSourceInventory",
|
||||
"RawTransactionIngestTrafficClass",
|
||||
"RawTransactionIngestFairTurnGate",
|
||||
"RawTransactionIngestSourceLossDecision",
|
||||
] {
|
||||
assert!(
|
||||
!root.lines().any(|line| line.trim().starts_with("pub use ") && line.contains(forbidden)),
|
||||
"pre.013 private type leaked publicly: {forbidden}"
|
||||
);
|
||||
}
|
||||
assert!(!root.contains("pub mod "));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// file: crates/ksp-worker-raw-transaction-ingest-lib/tests/release_completeness.rs
|
||||
// version: 31
|
||||
// version: 32
|
||||
|
||||
//! Release-completeness canaries through the `v0.3.14-pre.011` gap observability tranche.
|
||||
//! Release-completeness canaries through the `v0.3.14-pre.013` cross-layer closure tranche.
|
||||
|
||||
#[test]
|
||||
fn pre_010_production_module_inventory_is_exact() -> std::io::Result<()> {
|
||||
@@ -441,3 +441,25 @@ fn v0_3_14_pre_012_shutdown_race_canaries_cover_bounded_source_and_worker_drains
|
||||
assert!(!root.contains("SourceDrain"));
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn v0_3_14_pre_013_cross_layer_closure_canaries_are_complete_without_behavior_or_surface_growth() {
|
||||
let cross_layer = include_str!("cross_layer_completeness.rs");
|
||||
let dependency_boundary = include_str!("dependency_boundary.rs");
|
||||
let hardening = include_str!("hardening.rs");
|
||||
let public_api = include_str!("public_api.rs");
|
||||
for required in [
|
||||
"v0_3_14_pre_013_gap_repair_closure_keeps_one_transport_worker_common_raw_store_pipeline",
|
||||
"v0_3_14_pre_013_security_redaction_covers_gap_repair_and_terminal_paths",
|
||||
"v0_3_14_pre_013_legacy_v0_v1_remains_proven_after_gap_repair_hardening",
|
||||
"v0_3_14_pre_013_worker_and_backfill_remain_independent_producers",
|
||||
] {
|
||||
assert!(cross_layer.contains(required), "required pre.013 cross-layer canary missing: {required}");
|
||||
}
|
||||
assert!(dependency_boundary.contains("v0_3_14_pre_013_cross_layer_closure_keeps_dependency_and_producer_boundaries_exact"));
|
||||
assert!(hardening.contains("v0_3_14_pre_013_cross_layer_completeness_security_closure_is_exact_and_redacted"));
|
||||
assert!(public_api.contains("v0_3_14_pre_013_completeness_closure_adds_no_public_surface"));
|
||||
assert!(include_str!("../src/lib.rs").contains("RawTransactionIngestGapSnapshot"));
|
||||
assert!(include_str!("../src/lib.rs").contains("RawTransactionIngestWorker"));
|
||||
return;
|
||||
}
|
||||
|
||||
294
deltas/0.3.14/pre.013.md
Normal file
294
deltas/0.3.14/pre.013.md
Normal file
@@ -0,0 +1,294 @@
|
||||
<!-- file: deltas/0.3.14/pre.013.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta `0.3.14-pre.013` — completeness/security cross-layer
|
||||
|
||||
## Base requise
|
||||
|
||||
```text
|
||||
0.3.14-pre.012
|
||||
workspace.package.version = 0.3.14-pre.12
|
||||
deltas/0.3.14/pre.012.md présent
|
||||
```
|
||||
|
||||
## Gate de la base
|
||||
|
||||
Le gate opérateur de `0.3.14-pre.012` est validé avant ouverture de cette tranche :
|
||||
|
||||
```text
|
||||
cargo fmt --all : PASS
|
||||
cargo fmt --all -- --check : PASS
|
||||
audit Rust workspace rules : PASS
|
||||
audit Markdown tables : PASS
|
||||
cargo check --workspace : PASS
|
||||
cargo clippy --workspace --all-targets --all-features -- -D warnings : PASS
|
||||
cargo test -p ksp-worker-raw-transaction-ingest-lib --all-targets --all-features : PASS
|
||||
```
|
||||
|
||||
Le gate Worker comprend notamment :
|
||||
|
||||
```text
|
||||
152 unit tests : PASS
|
||||
cross_layer_completeness : 8 PASS
|
||||
dependency_boundary : 20 PASS
|
||||
hardening : 37 PASS
|
||||
public_api : 21 PASS
|
||||
release_completeness : 14 PASS
|
||||
```
|
||||
|
||||
## Objectif
|
||||
|
||||
Implémenter strictement la tranche `pre.013` du plan `035` sans nouveau comportement :
|
||||
|
||||
```text
|
||||
fermer les canaris Worker / Transport / Common RAW / Store
|
||||
prouver que le pipeline d'acquisition/persistence reste unique
|
||||
prouver la redaction des chemins gap/repair/terminal
|
||||
prouver la non-régression Legacy / V0 / V1 après le hardening 0.3.14
|
||||
prouver la séparation bidirectionnelle Worker / Job Backfill
|
||||
figer le graphe de dépendances Worker
|
||||
figer l'absence de croissance de surface publique
|
||||
```
|
||||
|
||||
Aucun fichier de production n'est modifié dans cette tranche.
|
||||
|
||||
## Pipeline cross-layer unique
|
||||
|
||||
Le nouveau canari :
|
||||
|
||||
```text
|
||||
v0_3_14_pre_013_gap_repair_closure_keeps_one_transport_worker_common_raw_store_pipeline
|
||||
```
|
||||
|
||||
vérifie simultanément :
|
||||
|
||||
```text
|
||||
getTransaction observed reste Transport-owned
|
||||
getBlock observed reste Transport-owned
|
||||
ContinuityContracts restent privés au Worker
|
||||
le registre global d'hydration reste unique
|
||||
l'admission centrale reste unique
|
||||
la convergence persistence reste unique
|
||||
Common RAW reste la représentation canonique commune
|
||||
Store API porte RawTransaction + RawTransactionObservation
|
||||
Store facade reste l'unique passage vers persistence/observation
|
||||
```
|
||||
|
||||
Il rejette en plus les bypass directs Worker vers :
|
||||
|
||||
```text
|
||||
backend Postgres
|
||||
Config
|
||||
Job Backfill
|
||||
reqwest
|
||||
tokio-tungstenite bas niveau
|
||||
yellowstone-grpc-proto
|
||||
```
|
||||
|
||||
## Redaction cross-layer
|
||||
|
||||
Le canari :
|
||||
|
||||
```text
|
||||
v0_3_14_pre_013_security_redaction_covers_gap_repair_and_terminal_paths
|
||||
```
|
||||
|
||||
ferme ensemble :
|
||||
|
||||
```text
|
||||
redaction Transport Yellowstone
|
||||
redaction des erreurs unary distantes
|
||||
health source-neutral pre.009
|
||||
fairness privée pre.010
|
||||
observabilité gap source-neutral pre.011
|
||||
shutdown terminal borné pre.012
|
||||
Common RAW Debug redacted
|
||||
Store API Debug redacted
|
||||
Store facade secret canary
|
||||
backend error bridge sans texte externe/secret
|
||||
```
|
||||
|
||||
Le crate root Worker reste exempt de :
|
||||
|
||||
```text
|
||||
source_key
|
||||
provider_gap
|
||||
endpoint_gap
|
||||
signature_gap
|
||||
payload_gap
|
||||
```
|
||||
|
||||
## Legacy / V0 / V1
|
||||
|
||||
Le canari :
|
||||
|
||||
```text
|
||||
v0_3_14_pre_013_legacy_v0_v1_remains_proven_after_gap_repair_hardening
|
||||
```
|
||||
|
||||
réunit les preuves suivantes :
|
||||
|
||||
```text
|
||||
Transport Yellowstone décode les formes courantes dont V1
|
||||
Standard Block et HTTP Block Polling Worker préservent Legacy/V0/V1
|
||||
la réconciliation pre.008 ne réécrit pas la représentation RAW
|
||||
le shutdown pre.012 ne modifie pas la qualification du matériau
|
||||
Common RAW garde ses goldens Legacy/V0/V1
|
||||
Store API reste constructible depuis les types RAW communs
|
||||
```
|
||||
|
||||
Aucune nouvelle logique de version de transaction n'est introduite.
|
||||
|
||||
## Séparation Worker / Job Backfill
|
||||
|
||||
Le canari :
|
||||
|
||||
```text
|
||||
v0_3_14_pre_013_worker_and_backfill_remain_independent_producers
|
||||
```
|
||||
|
||||
prouve depuis les manifests :
|
||||
|
||||
```text
|
||||
Worker -X-> ksp-job-api
|
||||
Worker -X-> ksp-job-backfill-lib
|
||||
Job Backfill -X-> ksp-worker-api
|
||||
Job Backfill -X-> ksp-worker-raw-transaction-ingest-lib
|
||||
```
|
||||
|
||||
Les deux producteurs peuvent continuer à partager uniquement les façades communes nécessaires :
|
||||
|
||||
```text
|
||||
ksp-onchain-transport-lib
|
||||
ksp-raw-transaction-lib
|
||||
ksp-store-lib
|
||||
```
|
||||
|
||||
Aucun checkpoint, scheduler ou orchestration commun n'est ajouté.
|
||||
|
||||
## Dépendances et API publique
|
||||
|
||||
`dependency_boundary` conserve l'inventaire exact Worker :
|
||||
|
||||
```text
|
||||
ksp-core-lib
|
||||
ksp-logging-lib
|
||||
ksp-onchain-transport-lib
|
||||
ksp-raw-transaction-lib
|
||||
ksp-store-lib
|
||||
ksp-worker-api
|
||||
sha2
|
||||
tokio
|
||||
```
|
||||
|
||||
`public_api` fixe à nouveau :
|
||||
|
||||
```text
|
||||
43 pub use publics
|
||||
aucun pub mod
|
||||
aucun ContinuityContracts public
|
||||
aucun GlobalHydrationRegistry public
|
||||
aucun SourceInventory public
|
||||
aucun TrafficClass/FairTurnGate public
|
||||
aucun SourceLossDecision public
|
||||
```
|
||||
|
||||
La surface publique de `pre.011` reste donc la dernière croissance intentionnelle de `0.3.14` avant le gate technique.
|
||||
|
||||
## Canaris ajoutés
|
||||
|
||||
```text
|
||||
cross_layer_completeness
|
||||
v0_3_14_pre_013_gap_repair_closure_keeps_one_transport_worker_common_raw_store_pipeline
|
||||
v0_3_14_pre_013_security_redaction_covers_gap_repair_and_terminal_paths
|
||||
v0_3_14_pre_013_legacy_v0_v1_remains_proven_after_gap_repair_hardening
|
||||
v0_3_14_pre_013_worker_and_backfill_remain_independent_producers
|
||||
|
||||
dependency_boundary
|
||||
v0_3_14_pre_013_cross_layer_closure_keeps_dependency_and_producer_boundaries_exact
|
||||
|
||||
hardening
|
||||
v0_3_14_pre_013_cross_layer_completeness_security_closure_is_exact_and_redacted
|
||||
|
||||
public_api
|
||||
v0_3_14_pre_013_completeness_closure_adds_no_public_surface
|
||||
|
||||
release_completeness
|
||||
v0_3_14_pre_013_cross_layer_closure_canaries_are_complete_without_behavior_or_surface_growth
|
||||
```
|
||||
|
||||
## Invariants préservés
|
||||
|
||||
```text
|
||||
aucun code production modifié
|
||||
aucune nouvelle dépendance
|
||||
aucune nouvelle feature
|
||||
aucun changement Config
|
||||
aucun changement Transport runtime
|
||||
aucun changement Common RAW runtime
|
||||
aucun changement Store runtime
|
||||
aucune nouvelle API Worker
|
||||
aucun Worker -> Job Backfill
|
||||
aucun Job Backfill -> Worker
|
||||
aucun second pipeline
|
||||
aucun nouveau provider
|
||||
aucun EARLY/shred
|
||||
```
|
||||
|
||||
## Fichiers ajoutés
|
||||
|
||||
```text
|
||||
deltas/0.3.14/pre.013.md
|
||||
```
|
||||
|
||||
## Fichiers modifiés
|
||||
|
||||
```text
|
||||
Cargo.toml
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/tests/cross_layer_completeness.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/tests/dependency_boundary.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/tests/hardening.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/tests/public_api.rs
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/tests/release_completeness.rs
|
||||
```
|
||||
|
||||
## Fichiers supprimés
|
||||
|
||||
```text
|
||||
aucun
|
||||
```
|
||||
|
||||
## Version Cargo
|
||||
|
||||
Conformément au workflow prerelease non-fix :
|
||||
|
||||
```text
|
||||
header Cargo.toml : 587 -> 588
|
||||
workspace.package.version : 0.3.14-pre.12 -> 0.3.14-pre.13
|
||||
```
|
||||
|
||||
## Gate local d'assemblage
|
||||
|
||||
Exécuté dans le sandbox après modification :
|
||||
|
||||
```text
|
||||
General Rust rule audit : clean
|
||||
Rust export completeness audit : 0 candidate(s)
|
||||
KSP workspace Rust rule audit : clean
|
||||
Markdown table audit : clean
|
||||
cargo / rustc / rustfmt : NON DISPONIBLES dans le sandbox
|
||||
```
|
||||
|
||||
Aucune commande Cargo n'est déclarée PASS localement.
|
||||
|
||||
## Gate opérateur après application
|
||||
|
||||
```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
|
||||
cargo check --workspace
|
||||
cargo clippy --workspace --all-targets --all-features -- -D warnings
|
||||
cargo test -p ksp-worker-raw-transaction-ingest-lib --all-targets --all-features
|
||||
```
|
||||
Reference in New Issue
Block a user