T13: klamp last_vote heuristik ke waktu scan (⊥ di masa depan)

Unstake tanpa revote membuat rasio bobot/stake membesar → estimasi
last_vote melewati now. normalize() kini mengklamp ke now; voters.db
dikembalikan (27 baris, MAX(last_vote) ≤ MAX(scanned_at)). Oracle lolos.
This commit is contained in:
proitlab committed 2026-08-05 10:21:45 +07:00
1 parent 41990af9af
commit eb4f941b37
4 files changed
+17 -3

No files matched your search

+4 -1
View File
@@ -118,7 +118,8 @@ def normalize(row, now=None):
"""V4/V5/V6/V13: saring ke baris yang relevan, bidang dinormalisasi.
V13: pemilih dengan last_vote tak diketahui atau basi dibuang di sini —
hanya pemilih segar yang berakhir di DB.
hanya pemilih segar yang berakhir di DB. Estimasi last_vote yang melewati
`now` (unstake tanpa revote → rasio bobot/stake membesar) diklamp ke `now`.
"""
if now is None:
now = datetime.now(timezone.utc).replace(tzinfo=None)
@@ -131,6 +132,8 @@ def normalize(row, now=None):
if staked_vex < MIN_STAKED_VEX:
return None
last_vote = derive_last_vote(row.get('last_vote_weight', ''), staked_vex)
if last_vote is not None and last_vote > now.isoformat(timespec='seconds'):
last_vote = now.isoformat(timespec='seconds') # V13: heuristik ⊥ boleh di masa depan
if last_vote is None or _is_stale(last_vote, now): # V13: basi ⊥ disimpan
return None
return {