Commit Graph

13 Commits

Author SHA1 Message Date
02b7c72e70 feat(guild): <@id> mention mechanism
- parse <@user-id> outside backtick spans
- general: message with an at-list wakes only the at'd users (else all)
- report/triage/custom: mentions change nothing
- discuss/work: mention by current speaker pushes a sub-rotation frame
  (atList = mentions - sender, intersected with channel members); single
  linear pass (real/no-reply/force-proceed), then pop back to the saved
  parent pointer (resumes at the pusher); nested frames supported

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 15:27:35 +01:00
182cfb3c41 feat(guild): GET /channels/:id/members
List explicit channel members (userIds) for the split members sidebar.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 15:00:24 +01:00
6b993522cf feat(guild): wake_mapping, per-recipient wakeup, discuss/work turn engine, channel join/leave
- wake_mapping table; triage onDuty (auto-added member) / custom listeners
- per-recipient wakeup metadata on message.created (one message-id; added
  only at push). Rules: author=false; triage/custom=wake_mapping only;
  general=all; report=none
- discuss/work rotation: channel_turn_state (order/currentSpeaker/round
  events/cross-round no-reply streak); null activation, queue-jump,
  /no-reply pass, all-/no-reply pause, end-of-round shuffle (trailing
  no-reply run to tail, head shuffled, first != last normal speaker)
- slash-command registry (/no-reply, /force-proceed); registered commands
  intercepted and never delivered; guild-authored /ack persisted
- POST /channels/:id/join|leave; leave cleans channel_members, wake_mapping
  and turn-state order

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 14:51:09 +01:00
605d3ac092 feat(guild): required channel x_type enum
Channel.x_type enum(general|work|report|discuss|triage|custom); required
and validated on channel creation (400 if missing/invalid).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 09:35:36 +01:00
774dff11ba feat(guild): channel membership + public visibility
- new channel_members table; creator always added, plus selected members
- Channel.isPublic (default false): public channels visible to all guild
  members; non-public only to explicit members
- GET /channels filters to channels visible to the requesting user

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 09:09:41 +01:00
nav
78d2179e8c fix(guild): validate channel create payload and return 400 2026-05-14 16:49:56 +00:00
nav
9ad6ccaa3d feat(guild): enable CORS and add members listing API 2026-05-14 16:46:30 +00:00
nav
fdb661f32b refactor(guild): prefix environment variables with FABRIC_BACKEND_GUILD 2026-05-13 12:58:32 +00:00
nav
392534a6ac feat(guild): fail fast when center auth env is missing 2026-05-13 08:52:16 +00:00
nav
db85e69ef3 refactor(guild): remove center shared secret dependency 2026-05-13 08:36:17 +00:00
nav
62dd441194 chore(guild): require CENTER_API_KEY when introspecting center 2026-05-13 08:17:50 +00:00
root
b27cb0c2e1 feat(guild): validate bearer tokens via center introspection 2026-05-13 07:59:57 +00:00
nav
d9c5175233 feat: bootstrap from Fabric monorepo 2026-05-13 07:06:03 +00:00