fix(B27): gate warn notify on real Telegram delivery (V66a) + scan config.env bind

VOTE ULANG SEGERA never reached community channel though dashboard badge showed:
- scan service lacked NFS config.env bind -> empty TELEGRAM_* -> send_text silent no-op
- _notify_warn still record_notify'd -> fake dedup rows blocked future sends

send_text/notify_warn now return delivery bool; record_notify only on True.
scan service mounts config.env:/app/.env:ro.
This commit is contained in:
proitlab committed 2026-09-02 12:39:24 +07:00
1 parent 8ad7df00f0
commit c262b4677c
6 files changed
+48 -20

No files matched your search

+25 -4
View File
@@ -312,7 +312,7 @@ def main():
sent = []
_orig_warn = telegram.notify_warn
telegram.notify_warn = lambda v: sent.append(v)
telegram.notify_warn = lambda v: sent.append(v) or True
try:
gv._notify_warn(warn_now)
check('V66 _notify_warn dipanggil', len(sent) == 1)
@@ -333,14 +333,14 @@ def main():
# V66: _notify_warn — skip bila sudah diberi tahu pada urgensi ≥ saat ini
sent.clear()
telegram.notify_warn = lambda v: sent.append(v)
telegram.notify_warn = lambda v: sent.append(v) or True
try:
gv._notify_warn(warn_now) # wrn1 sudah urgensi 2, wrn2 sudah urgensi 3
check('V66 _notify_warn skip redundancy', len(sent) == 0)
finally:
telegram.notify_warn = _orig_warn
# V66: _notify_warn — escalation trigger (wrn1 dari 2→3)
telegram.notify_warn = lambda v: sent.append(v) or True
sent.clear()
# Hapus lacak utk wrn1 supaya bisa test escalation dratch
conn = sqlite3.connect(db.DB_PATH)
@@ -356,7 +356,7 @@ def main():
{'owner': 'wrn2', 'weight': '2.0', 'staked': 3000.0,
'last_vote': wrn2_vote},
], warn_now.isoformat(timespec='seconds'))
telegram.notify_warn = lambda v: sent.append(v)
telegram.notify_warn = lambda v: sent.append(v) or True
try:
gv._notify_warn(warn_now)
check('V66 escalation trigger (2→3)', len(sent) == 1)
@@ -367,6 +367,27 @@ def main():
finally:
telegram.notify_warn = _orig_warn
# V66: _notify_warn — ⊥ catat bila kirim gagal senyap (send_text no-op/Gagal)
# Regresi: token kosong → telegram no-op → record_notify TETAP dicatat dulu
# (dedup palsu memblokir kirim saat scan berikutnya). Kini hanya dicatat
# bila notify_warn berhasil (return True).
sent.clear()
conn = sqlite3.connect(db.DB_PATH)
conn.execute('DELETE FROM voter_notify') # bersihkan semua lacak
conn.commit()
conn.close()
fail_warn = lambda v: sent.append(v) and False # gagal/no-op
telegram.notify_warn = fail_warn
try:
gv._notify_warn(warn_now)
check('V66 kirim gagal → dipanggil', len(sent) == 1)
check('V66 kirim gagal → voter_notify ⊖ dicatat',
db.get_notify_urgency('wrn1') is None)
check('V66 kirim gagal → voter_notify wrn2 ⊖ dicatat',
db.get_notify_urgency('wrn2') is None)
finally:
telegram.notify_warn = _orig_warn
print('\nSEMUA UJI PASS')