Files
pad/internal/mcp
xarmian f0cbcb5df4 fix(mcp): route backlinks/history/report over HTTP transport + catalog↔route parity test (BUG-2304) (#1126)
* fix(mcp): route backlinks/history/report over HTTP transport + catalog↔route parity test (BUG-2304)

Three catalog actions were advertised on the remote /mcp transport but
had no route: pad_item.backlinks, pad_item.history, pad_project.report
all answered 'not yet implemented over HTTP transport' on Pad Cloud.
All three have working REST endpoints — the gap was mappers, and the
absence of any catalog↔routeTable parity check is how they shipped
silently.

- item backlinks + project report: plain routeSpecs (their CLI JSON is
  the endpoint response verbatim, so a GET reproduces the stdio shape).
- item history: hand-written dispatchItemHistory, because the versions
  endpoint returns full content bodies while the CLI projects to the
  token-light itemVersionSummary; full=true opts back in, matching the
  stdio --full path.
- The special-case dispatch switch is now an introspectable
  specialRoutes() map, and a new parity test drives EVERY catalog
  action through its real ActionFn, captures the dispatched cmdPath,
  and fails on any action missing from routeTable ∪ specialRoutes ∪
  itemLinkSpecs — or any action the fixture can no longer exercise.

No ToolSurfaceVersion bump: no tool names, action enums, or parameter
shapes changed — advertised actions now work as documented. Also folds
in CLAUDE.md catalog-version drift (still said v0.19; 0.20 shipped in
BUG-2302/2305).

* fixup: cache specialRoutes map (sync.Once); kind-aware item_not_found on history 404 (codex round 1)

* fixup: single request path for history — full=true keeps the kind-aware 404 envelope (codex round 2)

* fixup: version.go no-bump changelog note, instructions full:true note, parity-test scope comment (codex round 3)
2026-08-16 19:18:16 -04:00
..