From c34abd17f4270956557133655137f572d394c265 Mon Sep 17 00:00:00 2001 From: "Claude_Fable_5.1" Date: Sun, 6 Sep 2026 02:50:32 +0000 Subject: [PATCH] env parity: the test droplet's dark-solver overlay is a recorded divergence #306 put the five values the dark-solver captures were measured under into docker-compose.test.yml alone, and the parity check on main correctly refused the unexplained difference, which also stopped the staging and production deploys behind it. Record it as test-scoped: production and staging keep the code defaults until the measurements say otherwise. Co-Authored-By: Claude Fable 5.1 --- deploy/check-env-parity.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/deploy/check-env-parity.py b/deploy/check-env-parity.py index bb882a2f..b34d910c 100755 --- a/deploy/check-env-parity.py +++ b/deploy/check-env-parity.py @@ -111,6 +111,19 @@ # three overlays join retina-edge identically and any difference is a # server silently off the network — which 502s /api/towers, and is exactly # what this check exists to catch. + # The dark-solver configuration the test droplet is measured under (PR + # #306): free-altitude solve, the per-node frame interval the synthetic + # fleet's ~1 Hz cadence needs, the stale-track cutoff tuned to its miss + # rate, and the dark track-following lane in binding mode after two + # solves. Test only, on purpose: the code defaults (sweep / 1.0 / 3 s / + # shadow / 3) are what staging and production run until the numbers from + # the test droplet say the defaults should move, which is a code change + # in backend/core/state.py and config/constants.py, not an overlay one. + ( + "test", + r"^services\.server\.environment\.(SOLVER_ALT_MODE|NODE_FRAME_MIN_INTERVAL_S" + r"|TRACK_MAX_STALE_S|DARK_FOLLOW_MODE|DARK_FOLLOW_MIN_SOLVES)$", + ), # Compose records the file list it was assembled from. r"^name$", r"^services\.[^.]+\.(build|image)\.?.*labels.*$",