What happened
kb.list_pages (MCP), kb.list_pages (JSONL), and vouch pages all pass store.list_pages() through filter_pages with no PageStatus.ARCHIVED filter. Archived pages remain in the agent-facing live listing. MCP/CLI payloads also omit status, so an archived page is indistinguishable from a live one.
This is the same live-set leak class as wiki/neighbors/compile/session-split (#695–#713), on the listing surface those fixes did not cover.
Expected
Listing surfaces exclude archived pages by default (live set only), matching digest/search/wiki/neighbors.
Repro
from vouch.models import Page, PageStatus
from vouch.page_filters import filter_pages
store.put_page(Page(id="dead", title="Dead", body="x", status=PageStatus.ARCHIVED))
store.put_page(Page(id="live", title="Live", body="y", status=PageStatus.ACTIVE))
ids = [p.id for p in filter_pages(store.list_pages())]
# today: includes "dead"
What happened
kb.list_pages(MCP),kb.list_pages(JSONL), andvouch pagesall passstore.list_pages()throughfilter_pageswith noPageStatus.ARCHIVEDfilter. Archived pages remain in the agent-facing live listing. MCP/CLI payloads also omitstatus, so an archived page is indistinguishable from a live one.This is the same live-set leak class as wiki/neighbors/compile/session-split (#695–#713), on the listing surface those fixes did not cover.
Expected
Listing surfaces exclude archived pages by default (live set only), matching digest/search/wiki/neighbors.
Repro