Skip to content

Commit 2cea801

Browse files
yyodsclaude
andcommitted
[green] derive fixed V4 SLOs by source ancestry
Turn the ADR-0037/ADR-0038 performance RED green without weakening it. Bench (tests/firmware_tests/hil/_pble_bench.py): - DERIVATION advances to the frozen replacement identifiers fixed-profile-product-slo-esp3000-pico7000-v4 and fixed-product-slo-64k-under-10s-6600-v3; the retired v0.5.1 schema-2 identity is frozen as V051_DERIVATION so historical policies keep validating unchanged. - derive_thresholds now yields the fixed product SLOs: reset-to-service 3000 ms on the four ESP profiles, 7000 ms on rpi-pico2-w, and the uniform 6600 B/s PUT/GET floors (ceil_100(65536/10 s)); static and heap arithmetic is untouched. derive_thresholds and evaluate_thresholds accept an optional profile_id that must agree with the build resource kind; the OI runner passes --profile through both. Release tool (firmware/scripts/release_bundle.py): - QUALIFICATION_DERIVATION_V4 joins the registry; V1-V3 stay frozen. The ADR-0038 identities V060_SUPERSEDED_SOURCE_BOUNDARY (5620f2f) and V060_ABANDONED_CANDIDATE_SOURCE (719b211) are exported. - _qualification_derivation_for_source selects by the bound source commit's git ancestry: a strict descendant of the boundary is the replacement era (V4); the boundary and its ancestors keep the historical version-routed derivation; unknown, unrelated, diverged, or unprovable ancestry fails closed via git merge-base. - _derived_qualification_thresholds accepts the selected derivation and profile_id; the V4 branch applies the fixed SLOs, never baseline extrema. Version routing without a bound checkout is unchanged for every pre-0.6.0 era; a v0.6.0 policy without checkout context admits both era shapes and is narrowed to the exact era wherever the source checkout is known (_load_qualification_policy, assemble, HIL binding against the committed policy). - assemble_oi1_baseline and _validate_qualification_policy/-baseline thread the ancestry-selected era end to end. Policy (firmware/qualification/oi1-gates.json): - Mechanically regenerated from the immutable retained a8be631 baseline (sha256 8a7dbf32..., byte-identical) using the tool's own _qualification_derivation_for_source + _derived_qualification_thresholds + _canonical_json_bytes: exactly 11 numeric fields change (Pico reset 3000 -> 7000, all ten PUT/GET floors -> 6600) plus the two derivation identifiers. New identity: 5,015 bytes, sha256 b9b19ddc217598835185429d6d1f1da60bb3a504a447e32dcdeae15bf18bd0c5. Full checkout revalidation (_load_qualification_policy) passes. Witnessed green: test_oi1_profile_bench (78 OK), test_oi1_rp2_profile_bench (15 OK), test_release_v060_contract (12 OK), the C3 policy pin in test_target_runtime_contract, plus historical/bench/release/lifecycle/ finalization/lineage/no-leak/SPDX/sha-drift collateral all green. The amended C3 NVS receipt RED (step 5) remains red for exactly its missing-receipt reasons. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CAVghCmvKjF4BZFBUjAMwc Signed-off-by: Viwat Vchirawongkwin <viwat.v@chula.ac.th>
1 parent 51e9124 commit 2cea801

4 files changed

Lines changed: 289 additions & 53 deletions

File tree

‎firmware/qualification/oi1-gates.json‎

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
"derivation": {
77
"application_headroom": "factory-minus-application-v1",
88
"application_image": "exact-byte-identical-two-root-v1",
9-
"boot_ceiling": "fixed-product-slo-3000-v3",
10-
"goodput_floor": "floor-95pct-min-100-v2",
9+
"boot_ceiling": "fixed-profile-product-slo-esp3000-pico7000-v4",
10+
"goodput_floor": "fixed-product-slo-64k-under-10s-6600-v3",
1111
"heap_floor": "floor-min-1024-v1"
1212
},
1313
"profile_order": [
@@ -26,11 +26,11 @@
2626
"application_headroom_min_bytes": 315360,
2727
"application_image_max_bytes": 1716256,
2828
"gc_free_min_bytes": 108544,
29-
"get_verified_goodput_min_bytes_per_second": 12500,
29+
"get_verified_goodput_min_bytes_per_second": 6600,
3030
"idf_internal_free_min_bytes": 81920,
3131
"idf_internal_largest_block_min_bytes": 55296,
3232
"idf_internal_minimum_free_min_bytes": 81920,
33-
"put_committed_goodput_min_bytes_per_second": 6500,
33+
"put_committed_goodput_min_bytes_per_second": 6600,
3434
"reset_to_service_advertisement_max_ms": 3000
3535
},
3636
"transport": {
@@ -48,11 +48,11 @@
4848
"application_headroom_min_bytes": 384064,
4949
"application_image_max_bytes": 1713088,
5050
"gc_free_min_bytes": 8317952,
51-
"get_verified_goodput_min_bytes_per_second": 19700,
51+
"get_verified_goodput_min_bytes_per_second": 6600,
5252
"idf_internal_free_min_bytes": 177152,
5353
"idf_internal_largest_block_min_bytes": 102400,
5454
"idf_internal_minimum_free_min_bytes": 177152,
55-
"put_committed_goodput_min_bytes_per_second": 13000,
55+
"put_committed_goodput_min_bytes_per_second": 6600,
5656
"reset_to_service_advertisement_max_ms": 3000
5757
},
5858
"transport": {
@@ -70,11 +70,11 @@
7070
"application_headroom_min_bytes": 377024,
7171
"application_image_max_bytes": 1720128,
7272
"gc_free_min_bytes": 8316928,
73-
"get_verified_goodput_min_bytes_per_second": 24300,
73+
"get_verified_goodput_min_bytes_per_second": 6600,
7474
"idf_internal_free_min_bytes": 177152,
7575
"idf_internal_largest_block_min_bytes": 102400,
7676
"idf_internal_minimum_free_min_bytes": 177152,
77-
"put_committed_goodput_min_bytes_per_second": 12900,
77+
"put_committed_goodput_min_bytes_per_second": 6600,
7878
"reset_to_service_advertisement_max_ms": 3000
7979
},
8080
"transport": {
@@ -92,11 +92,11 @@
9292
"application_headroom_min_bytes": 352880,
9393
"application_image_max_bytes": 1678736,
9494
"gc_free_min_bytes": 117760,
95-
"get_verified_goodput_min_bytes_per_second": 27200,
95+
"get_verified_goodput_min_bytes_per_second": 6600,
9696
"idf_internal_free_min_bytes": 66560,
9797
"idf_internal_largest_block_min_bytes": 57344,
9898
"idf_internal_minimum_free_min_bytes": 63488,
99-
"put_committed_goodput_min_bytes_per_second": 15300,
99+
"put_committed_goodput_min_bytes_per_second": 6600,
100100
"reset_to_service_advertisement_max_ms": 3000
101101
},
102102
"transport": {
@@ -114,9 +114,9 @@
114114
"firmware_bin_max_bytes": 848216,
115115
"firmware_image_headroom_min_bytes": 724648,
116116
"gc_free_min_bytes": 433152,
117-
"get_verified_goodput_min_bytes_per_second": 6800,
118-
"put_committed_goodput_min_bytes_per_second": 12200,
119-
"reset_to_service_advertisement_max_ms": 3000
117+
"get_verified_goodput_min_bytes_per_second": 6600,
118+
"put_committed_goodput_min_bytes_per_second": 6600,
119+
"reset_to_service_advertisement_max_ms": 7000
120120
},
121121
"transport": {
122122
"link_facts_kind": "btstack-observed-v1",

0 commit comments

Comments
 (0)