Add 500km link cap, block-height-based claim expiry, and link count in score
- MAX_LINK_DISTANCE_KM (default 500): flat cap on link length. Real Ingress scales this off portal/resonator level (up to ~655km); Regress has no leveling system to scale off of, so this is a single ceiling. - PORTAL_TIMEOUT_BLOCKS (default 2100): claims stamp the current Bitcoin block height (claimed_at_block, new migration) and expire back to neutral after this many blocks — the game's clock is block height, not wall-clock. Current height comes from mempool.space (BlockHeightService, 60s cache), same trust model as the BTC Map dependency. A background sweep actively reverts timed-out claims (tearing down their links, same as a normal recapture); claim/link routes also check inline so correctness doesn't depend on sweep timing between runs. - Pre-existing claims (already live in production) get backfilled with the real current block height once at startup rather than a guessed historical value — dry-run verified against an actual copy of the live production database before deploying. - Score now reports link count per team alongside places/fields/area (backend already computed this; only the frontend display was missing). 22 new tests (53 total): pure expiry-logic unit tests plus full claim/link/sweep integration tests using a network-free fake block-height provider (BlockHeightProvider interface + FakeBlockHeight test double).
This commit is contained in:
@@ -182,11 +182,13 @@ watch(linkSourceId, redraw);
|
||||
<span class="font-display text-lg font-black tracking-widest text-cyan-neon text-glow-cyan">REGRESS</span>
|
||||
<span class="flex items-center gap-1 font-bold text-orange-neon text-glow-orange">
|
||||
▲ {{ orangeScore?.claimedPlaces ?? 0 }} <span class="text-orange-neon/60">nodes</span> ·
|
||||
{{ orangeScore?.links ?? 0 }} <span class="text-orange-neon/60">links</span> ·
|
||||
{{ orangeScore?.fields ?? 0 }} <span class="text-orange-neon/60">fields</span> ·
|
||||
{{ (orangeScore?.areaKm2 ?? 0).toFixed(2) }} km²
|
||||
</span>
|
||||
<span class="flex items-center gap-1 font-bold text-green-neon text-glow-green">
|
||||
▲ {{ greenScore?.claimedPlaces ?? 0 }} <span class="text-green-neon/60">nodes</span> ·
|
||||
{{ greenScore?.links ?? 0 }} <span class="text-green-neon/60">links</span> ·
|
||||
{{ greenScore?.fields ?? 0 }} <span class="text-green-neon/60">fields</span> ·
|
||||
{{ (greenScore?.areaKm2 ?? 0).toFixed(2) }} km²
|
||||
</span>
|
||||
|
||||
Reference in New Issue
Block a user