test: add monotonic window-size invariant (38/38)
Smaller window = less IDF contamination = more echo credit. Fixed previous inconclusive test: old fixture had only 2 agents, so IDF couldn't differentiate. New fixture uses 6 agents + silence gap.
This commit is contained in:
parent
6bc77868da
commit
efca5119dc
|
|
@ -891,3 +891,34 @@ def test_windowed_idf_prevents_semantic_hysteresis():
|
|||
# (windowed delta should be closer to zero than global delta)
|
||||
assert mean_windowed_delta >= mean_global_delta, \
|
||||
f"Windowed IDF should reduce suppression: windowed Δ={mean_windowed_delta:.3f} vs global Δ={mean_global_delta:.3f}"
|
||||
|
||||
|
||||
def test_windowed_idf_monotonic_with_window_size():
|
||||
"""Wider window = more contamination = less echo credit. Strictly monotonic."""
|
||||
messages = []
|
||||
# originator introduces alpha
|
||||
messages.append({"from_id": "originator", "to_id": "_all",
|
||||
"timestamp": 0.0, "concepts": ["alpha"]})
|
||||
# 4 agents echo alpha heavily in phase 1 (t=50-850)
|
||||
for i in range(20):
|
||||
for j, agent in enumerate(["flood1", "flood2", "flood3", "flood4"]):
|
||||
messages.append({
|
||||
"from_id": agent, "to_id": "_all",
|
||||
"timestamp": float(50 + i * 40 + j * 10),
|
||||
"concepts": ["alpha"]
|
||||
})
|
||||
# Phase 2 (t=2000): fresh agent echoes alpha after long silence
|
||||
messages.append({"from_id": "fresh", "to_id": "_all",
|
||||
"timestamp": 2000.0, "concepts": ["alpha"]})
|
||||
|
||||
global_score = score_echo(messages, snapshot_idf=True)["originator"]
|
||||
|
||||
windows = [100, 300, 500, 1000, 2000]
|
||||
prev = float("inf")
|
||||
for w in windows:
|
||||
s = score_echo(messages, snapshot_idf=True, idf_window_seconds=w)["originator"]
|
||||
assert s >= global_score - 0.001, \
|
||||
f"w={w}: windowed {s:.4f} < global {global_score:.4f}"
|
||||
assert s <= prev + 0.001, \
|
||||
f"w={w}: score {s:.4f} increased from previous {prev:.4f} (should decrease)"
|
||||
prev = s
|
||||
|
|
|
|||
Loading…
Reference in New Issue