fix(digest): drop archived followups from the due list - #636
Merged
plind-junior merged 1 commit intoJul 30, 2026
Merged
Conversation
the stale-claims loop skips retired claims, but the followup query immediately below it passed store.list_pages() to filter_pages with no status predicate — and filter_pages only knows about kind, equals, before and after. so archiving a followup page did nothing to the digest: it kept appearing as due, forever, on the surface a reviewer actually reads. same shape as the retracted-claim gaps fixed in vouchdev#581 and vouchdev#624, and the archived-page gap in context packs: the lifecycle control is honoured on one read surface and ignored on the next. filters ARCHIVED out before the kind/due-date predicates rather than teaching filter_pages about status — the digest is the caller that wants live pages only, and page_filters stays a pure metadata matcher.
Member
|
Thanks for addressing the issue. LGTM! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
archiving a followup page does nothing to
vouch digest— it keeps appearing in the due list forever.the asymmetry
the two queries sit adjacent in
digest.build. the claim one filters lifecycle status:the page one doesn't:
and it can't have —
filter_pagesonly understandskind,equals,before,after. there is no status predicate anywhere inpage_filters.py, so nothing in this path has ever excluded an archived page.reproducing
two followup pages, same past due date, both
followup_status: open, oneACTIVEand oneARCHIVED:_CLOSED_FOLLOWUP_STATUSEScatches a followup that was marked done, but archiving the page is the other way to retire one, and that path was unguarded.why it matters here specifically
the digest is the reviewer-facing briefing —
vouch digest,kb.digest, and the SessionStart surface. an archived followup showing as overdue is worse than a stale search hit: it's an action item the reviewer is being asked to do something about, and the only way to make it go away was to editfollowup_status, not to archive.same shape as the retracted-claim gaps fixed in #581 and #624, and the archived-page gap in context packs — the lifecycle control is honoured on one read surface and ignored on the next.
the change
archived pages are filtered out before the kind/due-date predicates. i deliberately did not teach
filter_pagesabout status: the digest is the caller that wants live pages only, andpage_filtersis a pure frontmatter matcher used byvouch pagesand the CLI listing, where "show me archived followups" is a legitimate query. pushing status into the shared filter would change those callers too.tests
test_build_excludes_archived_followups— fails on the previous code withverification