Harden the trail list --mine merge and match the plain list's JSON

main

Commit

Stefan Haubold2d ago
  • --mine --json items now have the plain trail list --json item shape (camelCase api.ProjectTrail, with the project inline), plus phase and lastActivityAt, instead of the cells' snake_case items.
  • Each region's items are read in its own callback: an unreadable item (bad or missing last_activity_at, wrong types) is left out and its region reported partial, and an item without an id is skipped, instead of failing the whole list.
  • Duplicates keep the newest copy (latest activity, then metadata update), and the page is ordered by activity with ties by id, as the web sidebar does.
  • A 401/403 from any region fails the command, since every region gets the same credentials.
  • Partial entries name the region with status, code and request ID only; an error body (possibly an HTML error page) goes to the debug log.
  • Partial warnings go to stderr with --json too.
  • The default-cluster-per-jurisdiction choice is shared with the cell fan-out through defaultClusterByJurisdiction.
  • api-routing.md states where the CLI differs from the sidebar: it lists the regions that answered instead of failing on any outage.

Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com Entire-Checkpoint: 01M6GXKWEWBGCMEHVKEYFGW8BH