BT_EXPIRE: tester builds stop working 14 days after build (compile gate)
Distributed test zips go stale and stray. BT_EXPIRE (CMake option,
DEFAULT ON so a zip can never accidentally ship without it) makes the
exe refuse to start BT_EXPIRE_DAYS (default 14) after its build day:
boot logs the remaining window, an expired build logs + shows a
"test build expired -- ask the operator for the current build" box and
exits. btversion.h now stamps BT_BUILD_UNIX (UTC-midnight-rounded so
the only-on-change header churns once per day, not every build) +
BT_BUILD_DATE. Dev is unaffected: every build re-stamps the day.
-DBT_EXPIRE=OFF builds a non-expiring exe; mkdist reads the cache and
marks such a zip "-noexpire" + prints a warning, and the tester README
expiry note is {EXPIRE}-marker-gated like the steam lines. Second
compile-gate exception after BT_STEAM (convention updated in
glass-cockpit.md). Quality gate, not DRM -- a clock rollback defeats it.
Verified live: default build logs "test build window: 14 day(s) left";
a -DBT_EXPIRE_DAYS=0 build logs TEST BUILD EXPIRED and parks on the
explanation box (window title checked) without starting the game;
restored to 14 and rebuilt clean.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
753540de96
commit
eb618fe9e6
@@ -49,9 +49,16 @@ version skew (a stale steam exe shipped 2 days behind), tripled build time, and
|
||||
glass + scripted click → ConfigureMappables end-to-end; exe runs WITHOUT steam_api.dll
|
||||
present; glass zero-arg → menu; 2-node loopback MP (145 ticks each); `BT_STEAM_NET=1`
|
||||
without Steam → "staying on Winsock" + game runs.
|
||||
- **Convention:** every `BT_*` name is a RUNTIME env gate (`BTEnvOn`) — with the single
|
||||
exception of `BT_STEAM`, the license compile gate above. Do not add another compile gate
|
||||
without updating this file.
|
||||
- **Convention:** every `BT_*` name is a RUNTIME env gate (`BTEnvOn`) — with TWO exceptions,
|
||||
both compile gates: `BT_STEAM` (the license gate above) and **`BT_EXPIRE` (2026-07-22, the
|
||||
tester-build expiry tripwire)** — default ON, the exe refuses to start `BT_EXPIRE_DAYS`
|
||||
(default 14) after its build DAY (`btversion.h BT_BUILD_UNIX`, UTC-midnight-rounded so the
|
||||
only-on-change header churns once per day, not per build). Boot logs `[boot] test build
|
||||
window: N day(s) left`; expired = log + MessageBox + exit. Disable: `-DBT_EXPIRE=OFF`
|
||||
(mkdist marks such a zip `-noexpire` + warns; README expiry note is `{EXPIRE}`-marker-gated).
|
||||
Quality gate, not DRM — a clock rollback defeats it. Verified both paths live
|
||||
(`-DBT_EXPIRE_DAYS=0` force-expire run). Do not add another compile gate without updating
|
||||
this file.
|
||||
- No weak-linkage/optional symbols — `/FORCE` turns unresolved externals into runtime AVs
|
||||
([[reconstruction-gotchas]]); everything links always, so this class of trap no longer varies
|
||||
by build flavor.
|
||||
|
||||
Reference in New Issue
Block a user