test: export adaptive calibration probe knobs

This commit is contained in:
Brad Stein 2026-05-02 16:14:09 -03:00
parent 3b6c049a73
commit 37ea941750
7 changed files with 34 additions and 6 deletions

View File

@ -448,3 +448,17 @@ confirmation segments do not mutate it, and adaptive runs fail unless confirmati
- [x] Update manual probe contract tests for calibrate-then-confirm behavior.
- [x] Run shell syntax checks, focused contract tests, and package checks.
- [x] Push clean semver `0.17.21` for installed client/server testing.
## 0.17.22 Adaptive Calibration Export Fix Checklist
Context: the 0.17.21 run proved the calibrate-then-confirm shape worked, but no calibration
was actually applied. The calibration decision printed usable provisional recommendations, then
reported `provisional_calibration_enabled=false` and left the active offset unchanged. Root cause:
the Bash defaults were shell variables, while the embedded Python decision helper reads environment
variables via `os.environ`.
- [x] Treat the 0.17.21 run as confirmation that the probe shape works but calibration was disabled by script plumbing.
- [x] Export adaptive/provisional/raw-failure/confirmation knobs after defaulting them.
- [x] Add contract coverage so provisional calibration defaults cannot silently stop reaching the Python decision helper.
- [x] Run shell syntax checks, focused contract tests, and package checks.
- [x] Push clean semver `0.17.22` for installed client/server testing.

6
Cargo.lock generated
View File

@ -1652,7 +1652,7 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
[[package]]
name = "lesavka_client"
version = "0.17.21"
version = "0.17.22"
dependencies = [
"anyhow",
"async-stream",
@ -1686,7 +1686,7 @@ dependencies = [
[[package]]
name = "lesavka_common"
version = "0.17.21"
version = "0.17.22"
dependencies = [
"anyhow",
"base64",
@ -1698,7 +1698,7 @@ dependencies = [
[[package]]
name = "lesavka_server"
version = "0.17.21"
version = "0.17.22"
dependencies = [
"anyhow",
"base64",

View File

@ -4,7 +4,7 @@ path = "src/main.rs"
[package]
name = "lesavka_client"
version = "0.17.21"
version = "0.17.22"
edition = "2024"
[dependencies]

View File

@ -1,6 +1,6 @@
[package]
name = "lesavka_common"
version = "0.17.21"
version = "0.17.22"
edition = "2024"
build = "build.rs"

View File

@ -79,6 +79,18 @@ if ! [[ "${LESAVKA_SYNC_CONFIRMATION_SEGMENTS}" =~ ^[0-9]+$ ]]; then
exit 2
fi
LESAVKA_SYNC_TOTAL_SEGMENTS=$((LESAVKA_SYNC_CALIBRATION_SEGMENTS + LESAVKA_SYNC_CONFIRMATION_SEGMENTS))
export LESAVKA_SYNC_ADAPTIVE_CALIBRATION
export LESAVKA_SYNC_PROVISIONAL_CALIBRATION
export LESAVKA_SYNC_PROVISIONAL_MIN_PAIRS
export LESAVKA_SYNC_PROVISIONAL_MAX_P95_MS
export LESAVKA_SYNC_PROVISIONAL_MAX_DRIFT_MS
export LESAVKA_SYNC_PROVISIONAL_GAIN
export LESAVKA_SYNC_PROVISIONAL_MAX_STEP_US
export LESAVKA_SYNC_RAW_FAILURE_CALIBRATION
export LESAVKA_SYNC_RAW_FAILURE_MAX_ABS_DELTA_MS
export LESAVKA_SYNC_CONFIRM_AFTER_CALIBRATION
export LESAVKA_SYNC_CONFIRMATION_SEGMENTS
export LESAVKA_SYNC_REQUIRE_CONFIRMATION_PASS
cleanup() {
set +e

View File

@ -10,7 +10,7 @@ bench = false
[package]
name = "lesavka_server"
version = "0.17.21"
version = "0.17.22"
edition = "2024"
autobins = false

View File

@ -140,6 +140,8 @@ fn mirrored_sync_script_uses_real_client_capture_path() {
"LESAVKA_SYNC_REQUIRE_CONFIRMATION_PASS=${LESAVKA_SYNC_REQUIRE_CONFIRMATION_PASS:-${LESAVKA_SYNC_CONFIRM_AFTER_CALIBRATION}}",
"LESAVKA_SYNC_CONFIRMATION_SEGMENTS must be a non-negative integer",
"LESAVKA_SYNC_TOTAL_SEGMENTS=$((LESAVKA_SYNC_CALIBRATION_SEGMENTS + LESAVKA_SYNC_CONFIRMATION_SEGMENTS))",
"export LESAVKA_SYNC_PROVISIONAL_CALIBRATION",
"export LESAVKA_SYNC_RAW_FAILURE_CALIBRATION",
"LESAVKA_SYNC_ADAPTIVE_CALIBRATION",
"LESAVKA_SYNC_CALIBRATION_SEGMENTS=4",
"browser_consumer_reuse_session=${reuse_browser_session}",