Files
Module-uo/routes.manifest.json
wtclaude dda0e32dd3
Some checks failed
PR Checks / client-build (pull_request) Successful in 16s
PR Checks / frozen-manifest (pull_request) Failing after 33s
PR Checks / server-tests (pull_request) Successful in 8m46s
feat(guilds): a guild detail page, and the slot core puts the feed in
The module's half of the org lead's correction: Teams is the contract, guilds
are the presentation, and the presentation is this module's.

Adds `/uo/guilds/:id` — the detail view the board never had — with the roster
from this module's OWN board, which is the same data it answers core's Team
provider from. Reading core's projection of our own answer back would be a round
trip through a staler copy of it.

The page declares `uo.guild.detail` and core fills it with the Team activity
feed. That is the one part of this page core cannot hand over: only core can
resolve whether the viewer is inside the Team, and the public/members split on
that feed is a security boundary. The guild is named in OUR terms — core maps
its own Team from the module id and the external id — so this module never holds
core's row id or slug.

`TeamOverviewStrip` is deleted with the core Team page it filled.
`team.member.row` is not declared here either: the useful thing to put in a
roster row is a link to the character behind it, and nothing core could supply
identifies one.

`GET /public/shard/guilds/:id` backs the page, gated and projected through the
same `guilds` feature as the board — so an operator who raises that audience
raises this too, and the locked acct/webId fields never survive below admin. A
roster is where those appear in bulk, which makes this the endpoint where
getting the projection wrong would matter most.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-17 20:58:30 -05:00

371 lines
8.0 KiB
JSON

{
"$comment": "Generated inventory of the URLs module-uo serves - the module half of the freeze core keeps in server/routes.manifest.json. DERIVED as the difference between a core without this module and the same core with it, both at the pinned ref in ci/core-ref.json. Regenerate with the frozen-manifest workflow; see server/scripts/frozenManifest.js.",
"routes": [
{
"method": "DELETE",
"path": "/api/v1/admin/uo-link/towncrier/:id",
"tier": "public"
},
{
"method": "DELETE",
"path": "/api/v1/admin/users/:id/shard/link/:account",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/admin/shard/accounts",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/admin/shard/atlas",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/admin/shard/audit",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/admin/shard/char/:serial",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/admin/shard/clilocs",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/admin/shard/houses",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/admin/shard/pages",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/admin/shard/roster/:account",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/admin/shard/sales",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/admin/shard/vendors/:account",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/admin/shard/visibility",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/admin/uo-link/config",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/admin/uo-link/signup-mode",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/admin/uo-link/stream",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/admin/users/:id/shard/accounts",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/admin/users/:id/shard/houses",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/admin/users/:id/shard/online",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/admin/users/:id/shard/sales",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/admin/users/:id/shard/standing",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/player/shard/accounts",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/player/shard/char/:serial",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/player/shard/houses",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/player/shard/roster/:account",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/player/shard/sales",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/player/shard/vendors/:account",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/atlas/champions",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/atlas/creatures",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/atlas/creatures/:slug",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/atlas/landmarks",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/atlas/meta",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/atlas/regions",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/shard/champs",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/shard/economy",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/shard/features",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/shard/feed",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/shard/governors",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/shard/governors/:city/history",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/shard/guilds",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/shard/guilds/:id",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/shard/houses",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/shard/idoc",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/shard/market",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/shard/market/meta",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/shard/market/vendors/:serial",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/shard/online",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/shard/points",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/shard/points/:system",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/shard/presence",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/shard/ruleset",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/shard/status",
"tier": "public"
},
{
"method": "GET",
"path": "/api/v1/public/shard/stream",
"tier": "public"
},
{
"method": "POST",
"path": "/api/v1/admin/shard/account",
"tier": "public"
},
{
"method": "POST",
"path": "/api/v1/admin/shard/atlas/approve",
"tier": "public"
},
{
"method": "POST",
"path": "/api/v1/admin/shard/atlas/import",
"tier": "public"
},
{
"method": "POST",
"path": "/api/v1/admin/shard/atlas/reject",
"tier": "public"
},
{
"method": "POST",
"path": "/api/v1/admin/shard/ban",
"tier": "public"
},
{
"method": "POST",
"path": "/api/v1/admin/shard/broadcast",
"tier": "public"
},
{
"method": "POST",
"path": "/api/v1/admin/shard/clilocs/import",
"tier": "public"
},
{
"method": "POST",
"path": "/api/v1/admin/shard/kick",
"tier": "public"
},
{
"method": "POST",
"path": "/api/v1/admin/shard/link",
"tier": "public"
},
{
"method": "POST",
"path": "/api/v1/admin/shard/pages/:id/close",
"tier": "public"
},
{
"method": "POST",
"path": "/api/v1/admin/shard/pages/:id/respond",
"tier": "public"
},
{
"method": "POST",
"path": "/api/v1/admin/shard/unban",
"tier": "public"
},
{
"method": "POST",
"path": "/api/v1/admin/uo-link/towncrier",
"tier": "public"
},
{
"method": "POST",
"path": "/api/v1/player/shard/account",
"tier": "public"
},
{
"method": "POST",
"path": "/api/v1/player/shard/link",
"tier": "public"
},
{
"method": "PUT",
"path": "/api/v1/admin/shard/atlas/path",
"tier": "public"
},
{
"method": "PUT",
"path": "/api/v1/admin/shard/clilocs/path",
"tier": "public"
},
{
"method": "PUT",
"path": "/api/v1/admin/shard/visibility",
"tier": "public"
},
{
"method": "PUT",
"path": "/api/v1/admin/uo-link/config",
"tier": "public"
},
{
"method": "PUT",
"path": "/api/v1/admin/uo-link/signup-mode",
"tier": "public"
}
]
}