Files
iios/.claude/memory/project_recent_features.md
maaz519 5abee1b5b7 docs: add repo-local project memory under .claude/memory/
Versioned, per-topic project memory (index + entries): IIOS overview, the generic-safety
rule, run/test + the replay.spec flake workaround, recent features (Supabase auth,
reactions/pins/saves, mentions, media, notifications), the chat-web consumer, and workflow
conventions. CLAUDE.md points to it as the accumulating-notes companion to the canonical rules.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 19:55:38 +05:30

1.9 KiB
Raw Permalink Blame History

name, description, metadata
name description metadata
project_recent_features The "real-providers" era — Supabase auth, reactions/pins/saves, mentions→inbox, media, notifications
type
project

Beyond P0P8 (kernel → messaging → inbox → support → adapters → routing → AI → calendar/meetings), recent work (mostly driven by the chat app, the start of P9 "real providers"):

  • Real Supabase authSessionVerifier verifies real OIDC tokens against issuer JWKS (ES256, no secret), a multi-issuer registry routed by the iss claim → per-issuer appId scope (AUTH_ISSUERS JSON, or SUPABASE_URL single-issuer shorthand). userId = email. Legacy HS256 app-token path (APP_SECRETS) stays for dev/tests.
  • Reactions / pins / saves — one generic IiosInteractionAnnotation primitive (opaque annotationType+value); socket annotate event → annotation broadcast; GET /v1/threads/my-annotations?type=save.
  • @mentions → Inboxsend(... mentions[]) (opaque userId list) → InboxProjector fans out a MENTION inbox item to mentioned participants; reading resolves it.
  • MediaStoragePort (dev = local disk MEDIA_DIR; prod swap to S3/Supabase), presigned upload/download (signed HS256 tokens, OPA-gated size/type, tenant-fenced), attachment on MessageDto; parts use generic MEDIA_REF/VOICE_REF/FILE_REF.
  • Notifications — presence-gated Web Push: NotificationProjector runs 3 gates (policy=DM/mention/reply-to-you · presence=focus_thread signal · per-thread muted) → swappable NotificationPort (Web Push/VAPID); dead sub (410) pruned. Presence is in-memory (single-instance) → Redis for multi-replica.
  • senderId (stable externalId) on MessageDto for reliable "is this mine?".

~205 tests. Keep docs/IIOS_API_AND_SDK_GUIDE.md current when adding endpoints. Related: reference_chat_web_consumer, feedback_generic_safety.