docs: Phase 63 role emoji manage UI (v0.8.28)
EMOJI_ROLE_ACCESS.md, roadmap Phase 63, parity P63-1, IPC and automated testing entries. Next: discovery sync extensions. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
@@ -52,6 +52,7 @@ Pearcord validates itself without manual QA.
|
||||
| `npm run test:emoji` | Guild emoji gossip + `:name:` map (`EMOJI_SMOKE_OK`) |
|
||||
| `npm run test:emoji-packs` | Emoji pack registry + `emojisByPack` (`EMOJI_PACKS_SMOKE_OK`) |
|
||||
| `npm run test:emoji-slots` | Boost-tier emoji slot limits (`EMOJI_SLOTS_SMOKE_OK`) |
|
||||
| `npm run test:emoji-roles` | Role-restricted emoji access (`EMOJI_ROLES_SMOKE_OK`) |
|
||||
| `npm run test:sticker-message` | Sticker-only send + gossip + view (`STICKER_MESSAGE_SMOKE_OK`) |
|
||||
| `npm run test:sticker-combo` | Sticker + caption combo + `messageLayout` (`STICKER_COMBO_SMOKE_OK`) |
|
||||
| `npm run test:peer-profile-banner` | Peer banner meta gossip + preview (`PEER_PROFILE_BANNER_SMOKE_OK`) |
|
||||
|
||||
@@ -19,6 +19,8 @@ On guild create, these are registered and gossipped (uncategorized **Default** i
|
||||
|
||||
## Custom emoji
|
||||
|
||||
**v0.8.28:** Role-restricted emoji (`allowedRoles` on custom emoji, server settings UI, `set-guild-emoji-roles` IPC). See [EMOJI_ROLE_ACCESS.md](./EMOJI_ROLE_ACCESS.md).
|
||||
|
||||
Mods with `manageGuild` can add emoji:
|
||||
|
||||
### Unicode
|
||||
@@ -85,6 +87,7 @@ View: `guildEmojis`, `guildEmojiPacks`, `emojisByPack`, `emojiMap`, `reactionGly
|
||||
| type | fields |
|
||||
|------|--------|
|
||||
| `upsert-guild-emoji` | `name`, `glyph?`, `packName?`, `image?` |
|
||||
| `set-guild-emoji-roles` | `name`, `allowedRoles` (array; empty = everyone) |
|
||||
| `upsert-emoji-pack` | `name`, `displayName?`, `emojiNames?`, … |
|
||||
| `remove-emoji-pack` | `name` |
|
||||
| `request-emoji-image` | `name` or `attachmentId` |
|
||||
@@ -95,6 +98,8 @@ View: `guildEmojis`, `guildEmojiPacks`, `emojisByPack`, `emojiMap`, `reactionGly
|
||||
cd apps/pearcord
|
||||
npm run test:emoji
|
||||
npm run test:emoji-packs # EMOJI_PACKS_SMOKE_OK
|
||||
npm run test:emoji-slots
|
||||
npm run test:emoji-roles # EMOJI_ROLES_SMOKE_OK
|
||||
npm run test:emoji-image
|
||||
npm run test:boot
|
||||
```
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
# Guild emoji role access (v0.8.28)
|
||||
|
||||
Custom emoji can be restricted to specific **member roles** (P2P-enforced locally, gossiped with `EMOJI_UPSERT`).
|
||||
|
||||
## Model
|
||||
|
||||
| `allowedRoles` | Who can use in picker / `:name:` map |
|
||||
|----------------|--------------------------------------|
|
||||
| `[]` (default) | Everyone (member, moderator, owner) |
|
||||
| `['moderator']` | Moderators and owner only |
|
||||
| `['member','moderator']` | Those roles + owner |
|
||||
|
||||
Owner always sees and can use every emoji. Builtins are never restricted.
|
||||
|
||||
## API
|
||||
|
||||
| Method | Description |
|
||||
|--------|-------------|
|
||||
| `setGuildEmojiAllowedRoles({ name, allowedRoles })` | Requires `MANAGE_GUILD` |
|
||||
| `emojiRegistry.setAllowedRoles` | Persists on emoji row |
|
||||
|
||||
## View fields
|
||||
|
||||
- `guildEmojis` — full list (server settings)
|
||||
- `usableGuildEmojis` — filtered for current member role
|
||||
- `emojisByPack` / `emojiMap` — built from usable set
|
||||
|
||||
## IPC
|
||||
|
||||
| type | fields |
|
||||
|------|--------|
|
||||
| `set-guild-emoji-roles` | `name`, `allowedRoles` (array) |
|
||||
|
||||
## UI
|
||||
|
||||
**Server settings → Role access** — per-emoji checkboxes (Everyone / member / moderator / owner) + Save.
|
||||
|
||||
## Tests
|
||||
|
||||
```bash
|
||||
cd apps/pearcord && npm run test:emoji-roles
|
||||
```
|
||||
|
||||
Marker: `EMOJI_ROLES_SMOKE_OK`
|
||||
|
||||
See [EMOJI.md](./EMOJI.md).
|
||||
@@ -40,6 +40,7 @@ JSON lines over `pear-pipe` between `ui/app.js` and `apps/pearcord/index.js`.
|
||||
| `unblock-contact` | `peerUserId` | Unblock user + `CONTACT_UNBLOCK` gossip |
|
||||
| `request-attachment-preview` | `attachmentId` | Load image bytes for inline preview |
|
||||
| `upsert-guild-emoji` | `name`, `glyph?`, `description?`, `image?` | Unicode or image emoji (requires `manageGuild`) |
|
||||
| `set-guild-emoji-roles` | `name`, `allowedRoles` | Restrict emoji to roles; empty = everyone |
|
||||
| `request-emoji-image` | `name` or `attachmentId` | Sidecar → `emoji-image` with base64 bytes |
|
||||
| `update-search` | `query`, `scope?` | `channel` \| `guild` search state |
|
||||
| `open-dm` | `peerUserId`, `peerDisplayName?` | Open 1:1 DM channel + mesh |
|
||||
|
||||
+1
-1
@@ -50,7 +50,7 @@
|
||||
| `pearcord-stage` | `modules/pearcord-stage` | Stage speaker roles + gossip |
|
||||
| `pearcord-automod` | `modules/pearcord-automod` | Local automod rules + config gossip |
|
||||
| `pearcord-device-sync` | `modules/pearcord-device-sync` | Multi-device identity pairing |
|
||||
| `pearcord-emoji` | `modules/pearcord-emoji` | Guild emoji registry + emoji packs + gossip |
|
||||
| `pearcord-emoji` | `modules/pearcord-emoji` | Guild emoji, packs, role access (`role-access.js`) |
|
||||
| `pearcord-sync` | `modules/pearcord-sync` | Planned — Autobase bridge |
|
||||
| `pearcord-platform` | `modules/pearcord-platform` | App-facing facade |
|
||||
|
||||
|
||||
+2
-1
@@ -142,8 +142,9 @@ Phases **0–2** and **4** are largely complete; **3** (live audio) and **5** (n
|
||||
| P60-1 | Pear attach preview mesh path + `fetchSource` (v0.8.25) | [x] |
|
||||
| P61-1 | GUILD_SYNC history on join (v0.8.26) | [x] |
|
||||
| P62-1 | Contacts mesh polish — live P2P friends (v0.8.27) | [x] |
|
||||
| P63-1 | Role-restricted emoji manage UI (v0.8.28) | [x] |
|
||||
|
||||
**Next tranches:** Role emoji manage UI · discovery sync extensions.
|
||||
**Next tranches:** Discovery sync extensions · parity roadmap refresh.
|
||||
|
||||
When Phase 5 checklist is `[x]`, copy open items here into tracked rows in `PLATFORM_ROADMAP.md`.
|
||||
|
||||
|
||||
+15
-1
@@ -249,6 +249,19 @@ When completing work, change `[ ]` → `[x]` and add a one-line note under **Cha
|
||||
|
||||
---
|
||||
|
||||
### Phase 63 — Role emoji manage UI (v0.8.28)
|
||||
|
||||
| ID | Item | Status |
|
||||
|----|------|--------|
|
||||
| P63-1 | `allowedRoles` on custom emoji + `role-access.js` helpers | [x] |
|
||||
| P63-2 | `setGuildEmojiAllowedRoles` + usable emoji view filtering | [x] |
|
||||
| P63-3 | Server settings role access panel + IPC | [x] |
|
||||
| P63-4 | smoke-emoji-roles + EMOJI_ROLE_ACCESS.md | [x] |
|
||||
|
||||
**Next:** Discovery sync extensions · parity roadmap refresh.
|
||||
|
||||
---
|
||||
|
||||
### Phase 62 — Contacts mesh polish (v0.8.27)
|
||||
|
||||
| ID | Item | Status |
|
||||
@@ -258,7 +271,7 @@ When completing work, change `[ ]` → `[x]` and add a one-line note under **Cha
|
||||
| P62-3 | `stats.meshLive` + UI Live P2P tag + pending-out cancel | [x] |
|
||||
| P62-4 | smoke-contacts-mesh-live + CONTACTS_MESH_LIVE.md | [x] |
|
||||
|
||||
**Next:** Role emoji manage UI · discovery sync extensions.
|
||||
**Next:** ~~Role emoji manage UI~~ (Phase 63) · discovery sync extensions.
|
||||
|
||||
---
|
||||
|
||||
@@ -768,6 +781,7 @@ When completing work, change `[ ]` → `[x]` and add a one-line note under **Cha
|
||||
|
||||
### Changelog
|
||||
|
||||
- **2026-05-22** — v0.8.28: role emoji manage UI (`allowedRoles`, server settings panel, `test:emoji-roles`, EMOJI_ROLE_ACCESS.md).
|
||||
- **2026-05-22** — v0.8.27: contacts mesh polish (mux-wire v3, friend topic subscriptions, live presence smoke, UI Live P2P tag, CONTACTS_MESH_LIVE.md).
|
||||
- **2026-05-22** — v0.8.26: GUILD_SYNC history on join (`gossipGuildSync`, peer/member triggers, `test:guild-sync`, GUILD_SYNC.md).
|
||||
- **2026-05-22** — v0.8.25: Pear attach preview mesh path (`readAttachmentBytesWithSource`, preview `fetchSource`, UI P2P mesh tag, `test:attachment-preview-mesh`, ATTACHMENT_PREVIEW_MESH.md).
|
||||
|
||||
Reference in New Issue
Block a user