maturity pemilih baru diukur dari first_seen_at (V52/B15): last_vote terkuantisasi pekan (stake2vote) membuat voter baru Senin–Kamis tampak matang → lolos wait 3-hari ; BARU = first_seen baru/NULL, VALID = first_seen matang ; dashboard + distribusi konsisten ; image web+dist rebuild + push

This commit is contained in:
proitlab committed 2026-08-08 00:46:11 +07:00
1 parent 9b040a8c71
commit d6a15a07ae
6 files changed
+106 -89

No files matched your search

+12 -4
View File
@@ -55,19 +55,25 @@ def make_voters_db(path, rows):
'VALUES (?, ?, ?, ?, ?)',
rows,
)
# V42: distribusi LEFT JOIN voter_first_seen — tabel harus ada.
# V42/V52: distribusi LEFT JOIN voter_first_seen — tabel harus ada.
# Default: semua pemilih uji MATANG (first_seen 60 hari lalu) agar masuk
# band VALID; kasus BARU/REVOTE ditimpa lewat make_first_seen (V52).
conn.execute('CREATE TABLE IF NOT EXISTS voter_first_seen ('
'owner TEXT PRIMARY KEY, first_seen_at TEXT NOT NULL)')
mature = (datetime.now() - timedelta(days=60)).isoformat(timespec='seconds')
conn.executemany('INSERT OR IGNORE INTO voter_first_seen '
'(owner, first_seen_at) VALUES (?, ?)',
[(r[0], mature) for r in rows])
conn.commit()
conn.close()
def make_first_seen(path, rows):
"""V42: isi tabel voter_first_seen (owner, first_seen_at)."""
"""V52: timpa first_seen utk pemilih tertentu (mis. BARU/REVOTE)."""
conn = sqlite3.connect(path)
conn.execute('CREATE TABLE IF NOT EXISTS voter_first_seen ('
'owner TEXT PRIMARY KEY, first_seen_at TEXT NOT NULL)')
conn.executemany('INSERT OR IGNORE INTO voter_first_seen '
conn.executemany('INSERT OR REPLACE INTO voter_first_seen '
'(owner, first_seen_at) VALUES (?, ?)', rows)
conn.commit()
conn.close()
@@ -287,7 +293,9 @@ def main():
('rev7', '1.0', 1200.0, fresh, _iso(1)), # REVOTE — pemilih lama revote
('old9', '1.0', 1200.0, fresh, _iso(40)), # basi — lewat 28 hari
])
# V42: first_seen — new1 baru (umur 1 hr), rev7 lama (first_seen 60 hr lalu).
# V52: first_seen — new1 baru (umur 1 hr → BARU, ⊥ matang), rev7 lama
# (first_seen 60 hr lalu → matang, VALID langsung). mid5/old9 pakai
# default matang dari make_voters_db.
make_first_seen(db.DB_PATH, [('new1', _iso(1)), ('rev7', _iso(60))])
db.query = _orig_query
dist.fetch_balance = lambda: Decimal('300.0000')