v0.3.8-pre.005-fix.002
This commit is contained in:
@@ -1,12 +1,12 @@
|
|||||||
# file: Cargo.toml
|
# file: Cargo.toml
|
||||||
# version: 453
|
# version: 454
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
resolver = "3"
|
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-store-api", "crates/ksp-store-lib", "crates/ksp-store-postgres-lib", "crates/ksp-wallet-lib"]
|
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-store-api", "crates/ksp-store-lib", "crates/ksp-store-postgres-lib", "crates/ksp-wallet-lib"]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "0.3.8-pre.5.fix.1"
|
version = "0.3.8-pre.5.fix.2"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// file: crates/ksp-store-postgres-lib/tests/dependency_boundary.rs
|
// file: crates/ksp-store-postgres-lib/tests/dependency_boundary.rs
|
||||||
// version: 27
|
// version: 28
|
||||||
|
|
||||||
#![warn(missing_docs)]
|
#![warn(missing_docs)]
|
||||||
#![deny(unreachable_pub)]
|
#![deny(unreachable_pub)]
|
||||||
@@ -180,7 +180,7 @@ fn pre_005_raw_account_acquisition_is_atomic_idempotent_and_keeps_trait_impls_ou
|
|||||||
assert!(raw.contains(required), "missing private RAW account acquisition contract: {required}");
|
assert!(raw.contains(required), "missing private RAW account acquisition contract: {required}");
|
||||||
}
|
}
|
||||||
assert!(runtime.contains("pub async fn persist_raw_account_acquisition"));
|
assert!(runtime.contains("pub async fn persist_raw_account_acquisition"));
|
||||||
for forbidden in ["UPDATE ", "DELETE FROM", "ON CONFLICT DO UPDATE", " OFFSET "] {
|
for forbidden in ["UPDATE ", "DELETE FROM", "ON CONFLICT DO UPDATE"] {
|
||||||
assert!(!raw.contains(forbidden), "pre.005 account module contains later/destructive scope: {forbidden}");
|
assert!(!raw.contains(forbidden), "pre.005 account module contains later/destructive scope: {forbidden}");
|
||||||
}
|
}
|
||||||
for implementation in [
|
for implementation in [
|
||||||
@@ -215,7 +215,7 @@ fn pre_006_raw_account_additional_observation_is_reference_guarded_cancellation_
|
|||||||
assert!(raw.contains(required), "missing pre.006 additional-observation contract: {required}");
|
assert!(raw.contains(required), "missing pre.006 additional-observation contract: {required}");
|
||||||
}
|
}
|
||||||
assert!(runtime.contains("pub async fn record_raw_account_observation"));
|
assert!(runtime.contains("pub async fn record_raw_account_observation"));
|
||||||
for forbidden in ["UPDATE ", "DELETE FROM", "ON CONFLICT DO UPDATE", " OFFSET "] {
|
for forbidden in ["UPDATE ", "DELETE FROM", "ON CONFLICT DO UPDATE"] {
|
||||||
assert!(!raw.contains(forbidden), "pre.006 account module contains later/destructive scope: {forbidden}");
|
assert!(!raw.contains(forbidden), "pre.006 account module contains later/destructive scope: {forbidden}");
|
||||||
}
|
}
|
||||||
for implementation in [
|
for implementation in [
|
||||||
|
|||||||
38
deltas/0.3.8/pre.005-fix.002.md
Normal file
38
deltas/0.3.8/pre.005-fix.002.md
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
<!-- file: deltas/0.3.8/pre.005-fix.002.md -->
|
||||||
|
<!-- version: 1 -->
|
||||||
|
|
||||||
|
# Delta `0.3.8-pre.005-fix.002` — rescope des canaris Account `OFFSET`
|
||||||
|
|
||||||
|
## Base requise
|
||||||
|
|
||||||
|
Base directe attendue : `0.3.8-pre.005-fix.001`.
|
||||||
|
|
||||||
|
## Objet
|
||||||
|
|
||||||
|
Corriger exclusivement deux canaris historiques de dépendance PostgreSQL Account devenus trop larges après l'introduction du chemin d'inspection random-access de `pre.005`.
|
||||||
|
|
||||||
|
## Modifications
|
||||||
|
|
||||||
|
- `Cargo.toml` : version workspace `0.3.8-pre.5.fix.2` ;
|
||||||
|
- `crates/ksp-store-postgres-lib/tests/dependency_boundary.rs` : retrait de l'interdiction globale `OFFSET` des scopes historiques acquisition/additional-observation ;
|
||||||
|
- `docs/validation/025-V0_3_8_STORE_DESK.md` : consignation du gate opérateur, du live proof PostgreSQL 17 et de la justification du rescope.
|
||||||
|
|
||||||
|
Les canaris dédiés pagination/hardening continuent d'exiger que les quatre statements Account cursor/keyset restent sans `OFFSET` et que les deux seules occurrences autorisées appartiennent aux statements d'inspection.
|
||||||
|
|
||||||
|
## Hors scope
|
||||||
|
|
||||||
|
Aucun changement de SQL, runtime PostgreSQL, Store API, façade Store, migration, capability, modèle, UI Desk ou protocole DataTables.
|
||||||
|
|
||||||
|
## Validation attendue
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cargo fmt --all
|
||||||
|
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
|
||||||
|
cargo test -p ksp-store-postgres-lib
|
||||||
|
cargo test -p ksp-store-lib
|
||||||
|
cargo check -p ksp-store-lib --no-default-features
|
||||||
|
cargo test -p ksp-store-api
|
||||||
|
```
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
<!-- file: docs/validation/025-V0_3_8_STORE_DESK.md -->
|
<!-- file: docs/validation/025-V0_3_8_STORE_DESK.md -->
|
||||||
<!-- version: 9 -->
|
<!-- version: 10 -->
|
||||||
|
|
||||||
# Validation v0.3.8 — Store Desk V1 RAW
|
# Validation v0.3.8 — Store Desk V1 RAW
|
||||||
|
|
||||||
@@ -417,3 +417,28 @@ KSP Store RawAccountState live proof: server major 17
|
|||||||
test pre_009_real_postgres_raw_account_vertical_slice_is_atomic_concurrent_and_recoverable ... ok
|
test pre_009_real_postgres_raw_account_vertical_slice_is_atomic_concurrent_and_recoverable ... ok
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## 23. Gate opérateur `pre.005-fix.001` et ouverture de `pre.005-fix.002`
|
||||||
|
|
||||||
|
Le rejeu opérateur sur `0.3.8-pre.5.fix.1` confirme que la restauration de la fixture Account inspection est correcte : `cargo fmt --all`, `cargo check --workspace`, `cargo clippy --workspace --all-targets`, les 69 tests unitaires PostgreSQL, `ksp-store-lib`, le mode `--no-default-features` et `ksp-store-api` compilent ou passent jusqu'au test d'intégration `dependency_boundary`.
|
||||||
|
|
||||||
|
Deux canaris historiques Account restent cependant trop larges :
|
||||||
|
|
||||||
|
```text
|
||||||
|
pre_005_raw_account_acquisition_is_atomic_idempotent_and_keeps_trait_impls_out_of_sql_module: FAIL
|
||||||
|
pre_006_raw_account_additional_observation_is_reference_guarded_cancellation_safe_and_keeps_destructive_scope_closed: FAIL
|
||||||
|
reason: raw_account.rs contient désormais OFFSET dans les deux statements d'inspection random-access
|
||||||
|
```
|
||||||
|
|
||||||
|
Ces canaris interdisaient `OFFSET` sur tout `raw_account.rs`, alors que depuis `pre.005` le fichier contient légitimement deux statements `INSPECT_ACCOUNT_STATES_*` avec `LIMIT/OFFSET`. Cette interdiction globale est obsolète. `pre.005-fix.002` retire uniquement `OFFSET` de leurs listes de scope interdit ; les garanties de pagination restent couvertes par :
|
||||||
|
|
||||||
|
- `pre_007_raw_account_pagination_is_keyset_cursor_bound_and_policy_free`, qui exige que les quatre statements `LIST_ACCOUNT_STATES_*` et le cursor restent sans `OFFSET` ;
|
||||||
|
- `v0_3_8_pre_005_raw_account_keyset_sql_remains_offset_free_while_inspection_is_random_access`, qui exige exactement deux occurrences d'`OFFSET`, uniquement dans les deux statements d'inspection.
|
||||||
|
|
||||||
|
Les interdictions destructives `UPDATE`, `DELETE FROM` et `ON CONFLICT DO UPDATE` restent inchangées dans les deux canaris historiques. Aucun SQL, runtime, contrat public, migration, capability ou comportement Store n'est modifié.
|
||||||
|
|
||||||
|
Le live proof Account est de nouveau vert sur PostgreSQL 17 :
|
||||||
|
|
||||||
|
```text
|
||||||
|
KSP Store RawAccountState live proof: server major 17
|
||||||
|
test pre_009_real_postgres_raw_account_vertical_slice_is_atomic_concurrent_and_recoverable ... ok
|
||||||
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user