fix(review): quick FT path enforces 3-state exclusivity + twin propagation; changelog + twin caveat
set_false_trigger now clears reviewed_real when flagging false_trigger=True
(mirrors update_event_review's exclusivity), and the quick
PATCH /db/events/{id}/false_trigger endpoint now calls
propagate_review_to_twins after the flag write, matching the sidecar PATCH
path's try/except-with-log.warning pattern. Previously the quick path could
leave both flags set and never touched twins.
Also corrects the v0.25.0 CHANGELOG bullet (exclusivity was not actually
enforced on the quick path until this commit) and adds a caveat comment on
find_twins about rare clamped/saturated-PVS false-positive twin matches.
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
from sfm.database import SeismoDb
|
||||
from minimateplus.models import Event
|
||||
|
||||
|
||||
def _ins(db, eid_key="01110000", serial="BE1"):
|
||||
ev = Event(index=0); ev._waveform_key = bytes.fromhex(eid_key)
|
||||
db.insert_events([ev], serial=serial)
|
||||
return db.query_events(serial=serial)[0]["id"]
|
||||
|
||||
|
||||
def test_set_false_trigger_clears_reviewed_real(tmp_path):
|
||||
db = SeismoDb(tmp_path / "s.db"); eid = _ins(db)
|
||||
db.update_event_review(eid, {"reviewed_real": True})
|
||||
assert db.get_event(eid)["reviewed_real"] == 1
|
||||
|
||||
db.set_false_trigger(eid, True)
|
||||
row = db.get_event(eid)
|
||||
assert row["false_trigger"] == 1 and row["reviewed_real"] == 0
|
||||
|
||||
|
||||
def test_clearing_false_trigger_leaves_reviewed_real_untouched(tmp_path):
|
||||
db = SeismoDb(tmp_path / "s.db"); eid = _ins(db)
|
||||
db.update_event_review(eid, {"false_trigger": True})
|
||||
db.set_false_trigger(eid, False)
|
||||
row = db.get_event(eid)
|
||||
assert row["false_trigger"] == 0
|
||||
# reviewed_real was never set true, so it stays 0 either way; the point
|
||||
# is set_false_trigger(False) does not touch the column at all.
|
||||
assert row["reviewed_real"] == 0
|
||||
Reference in New Issue
Block a user