Real, out-of-scope for PR #11 (#12–#20) — recording with a re-entry gate.
Defect
src/routes/peers.rs:465 fetch_manifest_over_mcp issues a single tools/list (and the manifest path more broadly a single un-cursored resources/list) and takes result.tools verbatim, never following nextCursor. A peer whose manifest paginates has its tools silently truncated at the allowlist/manifest step.
Contract v1 §8.1 requires IONe to follow nextCursor. The panel paths already do this via src/services/peer_panels.rs:31 (paginated_list with a page cap) — the manifest/allowlist path does not.
Fix direction
Route fetch_manifest_over_mcp (and any peer resources/list/tools/list that reads a full set) through the existing cursor-following helper (peer_panels::paginated_list or equivalent), honoring the same MAX_PAGINATION_PAGES cap and truncation warning. Add a test with a two-page fixture peer asserting all pages are collected.
Real, out-of-scope for PR #11 (#12–#20) — recording with a re-entry gate.
Defect
src/routes/peers.rs:465
fetch_manifest_over_mcpissues a singletools/list(and the manifest path more broadly a single un-cursoredresources/list) and takesresult.toolsverbatim, never followingnextCursor. A peer whose manifest paginates has its tools silently truncated at the allowlist/manifest step.Contract v1 §8.1 requires IONe to follow
nextCursor. The panel paths already do this via src/services/peer_panels.rs:31 (paginated_listwith a page cap) — the manifest/allowlist path does not.Fix direction
Route
fetch_manifest_over_mcp(and any peerresources/list/tools/listthat reads a full set) through the existing cursor-following helper (peer_panels::paginated_listor equivalent), honoring the sameMAX_PAGINATION_PAGEScap and truncation warning. Add a test with a two-page fixture peer asserting all pages are collected.