From 913d9e60a614fcef2da3e95bf6eb9b97f5c15f0e Mon Sep 17 00:00:00 2001 From: SkateSpots Date: Fri, 2 Oct 2026 13:30:29 +0700 Subject: [PATCH] docs: ownership model + ControllerBadge note --- AGENTS.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index ccb6108..c6a18d5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -128,6 +128,13 @@ session with **no other memory of this project**. So: an organiser's **EVENT · HOST** (never a self-made "issued" pass); a ticket's QR carries **`?h=`** so `/verify` checks the holder's **RSVP** (kind 31925) and shows Ticket holder + RSVP status. + **Ownership model + badges (2026-10-02):** owner = the event's **author key** + (spot 30818 / shop 30017 / event 31923 / crew 35006); crew **delegated admins** + = `admin`-marker `p` tags (`useCrewRole(crew).isElevated`); platform moderators + = hardcoded `ADMIN_PUBKEYS`. `ControllerBadge` (`components/ControllerBadge.tsx`) + surfaces the viewer's role — spot=Owner, shop=**Verified owner** (NIP-05 domain + match), crew=Owner/Admin, event=Organiser — on detail pages **and** on the card + studio's type chips (`role.*` i18n). - **Marketplace**: `GearSwapPage` (grid) + `MarketplaceItemCard` and a listing detail page at **`/listing/:pubkey/:identifier`**. Trade/escrow actions live in the shared **`ListingTradeActions`** (used by BOTH the card and the detail page