Add per-paper summary verification and cap safeguards
- Per-paper summary batches are fact-checked against abstracts (verify -> revise once on major issues -> re-verify), controlled by SEBRIEF_VERIFY_ENABLED - The paper cap never drops papers already published in this week's digest (--force re-runs could otherwise erase them from every digest) - SEBRIEF_MAX_PAPERS default 40 -> 60 (observed weekly volume ~47) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -77,9 +77,31 @@ def test_build_payload_caps_papers_and_notes_rollover(env):
|
||||
env["settings"] = env["settings"].model_copy(update={"max_papers": 3})
|
||||
payload = build_payload(WEEK, env["settings"], env["store"])
|
||||
assert len(payload.papers) == 3
|
||||
assert [p.doi for p in payload.papers] == ["10.1/p0", "10.1/p1", "10.1/p2"]
|
||||
assert any("이월" in g for g in payload.data_gaps)
|
||||
|
||||
|
||||
def test_cap_never_drops_papers_already_in_this_weeks_digest(env):
|
||||
# --force re-run: p3/p4 were published in this week's digest; the cap must drop rollover
|
||||
# candidates (p0..p2) instead, even though they sort first.
|
||||
env["store"].pending = [make_paper(f"10.1/p{i}") for i in range(5)]
|
||||
env["store"].published_dois = {"10.1/p3", "10.1/p4"}
|
||||
env["settings"] = env["settings"].model_copy(update={"max_papers": 3})
|
||||
payload = build_payload(WEEK, env["settings"], env["store"])
|
||||
dois = [p.doi for p in payload.papers]
|
||||
assert "10.1/p3" in dois and "10.1/p4" in dois
|
||||
assert len(dois) == 3 and dois == ["10.1/p0", "10.1/p3", "10.1/p4"]
|
||||
|
||||
|
||||
def test_cap_keeps_all_published_even_beyond_max(env):
|
||||
env["store"].pending = [make_paper(f"10.1/p{i}") for i in range(4)]
|
||||
env["store"].published_dois = {f"10.1/p{i}" for i in range(4)}
|
||||
env["settings"] = env["settings"].model_copy(update={"max_papers": 2})
|
||||
payload = build_payload(WEEK, env["settings"], env["store"])
|
||||
assert len(payload.papers) == 4 # a published paper is never dropped
|
||||
assert not any("이월" in g for g in payload.data_gaps)
|
||||
|
||||
|
||||
# -------------------------------------------------------------------------------- run_digest
|
||||
def test_run_digest_happy_path_saves_marks_and_delivers(env):
|
||||
result = run_digest(WEEK, env["settings"])
|
||||
|
||||
Reference in New Issue
Block a user