@ttt-productions/ttt-core 0.78.26 → 0.79.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/dist/capabilities/capability-registry.d.ts +2 -2
  2. package/dist/capabilities/capability-registry.d.ts.map +1 -1
  3. package/dist/capabilities/capability-registry.js +5 -5
  4. package/dist/capabilities/capability-registry.js.map +1 -1
  5. package/dist/capabilities/messaging-surfaces.d.ts.map +1 -1
  6. package/dist/capabilities/messaging-surfaces.js +7 -3
  7. package/dist/capabilities/messaging-surfaces.js.map +1 -1
  8. package/dist/constants/app-mode.d.ts +9 -0
  9. package/dist/constants/app-mode.d.ts.map +1 -1
  10. package/dist/constants/app-mode.js +17 -0
  11. package/dist/constants/app-mode.js.map +1 -1
  12. package/dist/constants/business-content.d.ts +0 -2
  13. package/dist/constants/business-content.d.ts.map +1 -1
  14. package/dist/constants/business-content.js +0 -2
  15. package/dist/constants/business-content.js.map +1 -1
  16. package/dist/constants/conversation-files.d.ts +7 -0
  17. package/dist/constants/conversation-files.d.ts.map +1 -0
  18. package/dist/constants/conversation-files.js +14 -0
  19. package/dist/constants/conversation-files.js.map +1 -0
  20. package/dist/constants/index.d.ts +1 -0
  21. package/dist/constants/index.d.ts.map +1 -1
  22. package/dist/constants/index.js +1 -0
  23. package/dist/constants/index.js.map +1 -1
  24. package/dist/doc-schemas/chat-sync.d.ts +0 -4
  25. package/dist/doc-schemas/chat-sync.d.ts.map +1 -1
  26. package/dist/doc-schemas/chat-sync.js +2 -9
  27. package/dist/doc-schemas/chat-sync.js.map +1 -1
  28. package/dist/doc-schemas/commissions.d.ts +2 -2
  29. package/dist/doc-schemas/media-activation-jobs.d.ts +3 -8
  30. package/dist/doc-schemas/media-activation-jobs.d.ts.map +1 -1
  31. package/dist/doc-schemas/media-assets.d.ts +22 -34
  32. package/dist/doc-schemas/media-assets.d.ts.map +1 -1
  33. package/dist/doc-schemas/media-assets.js +24 -21
  34. package/dist/doc-schemas/media-assets.js.map +1 -1
  35. package/dist/doc-schemas/messaging.d.ts +41 -19
  36. package/dist/doc-schemas/messaging.d.ts.map +1 -1
  37. package/dist/doc-schemas/messaging.js +64 -4
  38. package/dist/doc-schemas/messaging.js.map +1 -1
  39. package/dist/doc-schemas/moderation.d.ts +1 -1
  40. package/dist/doc-schemas/ncii/allegations.d.ts +21 -9
  41. package/dist/doc-schemas/ncii/allegations.d.ts.map +1 -1
  42. package/dist/doc-schemas/ncii/cases.d.ts +10 -4
  43. package/dist/doc-schemas/ncii/cases.d.ts.map +1 -1
  44. package/dist/doc-schemas/ncii/holds.d.ts +10 -4
  45. package/dist/doc-schemas/ncii/holds.d.ts.map +1 -1
  46. package/dist/doc-schemas/ncii/removal.d.ts +13 -7
  47. package/dist/doc-schemas/ncii/removal.d.ts.map +1 -1
  48. package/dist/doc-schemas/ncii/requests.d.ts +11 -5
  49. package/dist/doc-schemas/ncii/requests.d.ts.map +1 -1
  50. package/dist/doc-schemas/registry.d.ts +148 -119
  51. package/dist/doc-schemas/registry.d.ts.map +1 -1
  52. package/dist/doc-schemas/registry.js +5 -1
  53. package/dist/doc-schemas/registry.js.map +1 -1
  54. package/dist/doc-schemas/safety/case.d.ts +10 -4
  55. package/dist/doc-schemas/safety/case.d.ts.map +1 -1
  56. package/dist/doc-schemas/safety/case.js +4 -3
  57. package/dist/doc-schemas/safety/case.js.map +1 -1
  58. package/dist/doc-schemas/safety/evidence.d.ts +2 -3
  59. package/dist/doc-schemas/safety/evidence.d.ts.map +1 -1
  60. package/dist/doc-schemas/safety/foundation.d.ts +15 -8
  61. package/dist/doc-schemas/safety/foundation.d.ts.map +1 -1
  62. package/dist/doc-schemas/safety/foundation.js +32 -6
  63. package/dist/doc-schemas/safety/foundation.js.map +1 -1
  64. package/dist/doc-schemas/safety/holds.d.ts +1 -1
  65. package/dist/doc-schemas/safety/report.d.ts +25 -10
  66. package/dist/doc-schemas/safety/report.d.ts.map +1 -1
  67. package/dist/doc-schemas/safety/report.js +2 -1
  68. package/dist/doc-schemas/safety/report.js.map +1 -1
  69. package/dist/ids/chat-ids.d.ts +1 -2
  70. package/dist/ids/chat-ids.d.ts.map +1 -1
  71. package/dist/ids/chat-ids.js +1 -4
  72. package/dist/ids/chat-ids.js.map +1 -1
  73. package/dist/media/conversation-file-ref.d.ts +13 -0
  74. package/dist/media/conversation-file-ref.d.ts.map +1 -0
  75. package/dist/media/conversation-file-ref.js +37 -0
  76. package/dist/media/conversation-file-ref.js.map +1 -0
  77. package/dist/media/domain-events-admin.d.ts +1 -1
  78. package/dist/media/domain-events-social.d.ts +0 -7
  79. package/dist/media/domain-events-social.d.ts.map +1 -1
  80. package/dist/media/domain-events-social.js +2 -13
  81. package/dist/media/domain-events-social.js.map +1 -1
  82. package/dist/media/domain-events.d.ts +1 -7
  83. package/dist/media/domain-events.d.ts.map +1 -1
  84. package/dist/media/domain-events.js +1 -2
  85. package/dist/media/domain-events.js.map +1 -1
  86. package/dist/media/edge-serving-contract.d.ts +6 -11
  87. package/dist/media/edge-serving-contract.d.ts.map +1 -1
  88. package/dist/media/edge-serving-contract.js.map +1 -1
  89. package/dist/media/file-origin.d.ts +1 -1
  90. package/dist/media/file-origin.d.ts.map +1 -1
  91. package/dist/media/file-origin.js +6 -1
  92. package/dist/media/file-origin.js.map +1 -1
  93. package/dist/media/index.d.ts +1 -0
  94. package/dist/media/index.d.ts.map +1 -1
  95. package/dist/media/index.js +1 -0
  96. package/dist/media/index.js.map +1 -1
  97. package/dist/media/pending-media.d.ts +25 -79
  98. package/dist/media/pending-media.d.ts.map +1 -1
  99. package/dist/media/photodna-coverage.js +1 -1
  100. package/dist/media/photodna-coverage.js.map +1 -1
  101. package/dist/media/start-upload.d.ts +1 -1
  102. package/dist/media/target-info.d.ts +6 -26
  103. package/dist/media/target-info.d.ts.map +1 -1
  104. package/dist/media/target-info.js +9 -35
  105. package/dist/media/target-info.js.map +1 -1
  106. package/dist/media/ttt-media-specs.d.ts.map +1 -1
  107. package/dist/media/ttt-media-specs.js +8 -5
  108. package/dist/media/ttt-media-specs.js.map +1 -1
  109. package/dist/media/upload-tray-display.js +1 -1
  110. package/dist/media/upload-tray-display.js.map +1 -1
  111. package/dist/paths/collection-refs.d.ts +2 -0
  112. package/dist/paths/collection-refs.d.ts.map +1 -1
  113. package/dist/paths/collection-refs.js +4 -0
  114. package/dist/paths/collection-refs.js.map +1 -1
  115. package/dist/paths/collections.d.ts +1 -0
  116. package/dist/paths/collections.d.ts.map +1 -1
  117. package/dist/paths/collections.js +7 -0
  118. package/dist/paths/collections.js.map +1 -1
  119. package/dist/paths/path-builders.d.ts +2 -0
  120. package/dist/paths/path-builders.d.ts.map +1 -1
  121. package/dist/paths/path-builders.js +5 -0
  122. package/dist/paths/path-builders.js.map +1 -1
  123. package/dist/report/report-config-values.d.ts +3 -1
  124. package/dist/report/report-config-values.d.ts.map +1 -1
  125. package/dist/report/report-config-values.js +5 -1
  126. package/dist/report/report-config-values.js.map +1 -1
  127. package/dist/safety/ncii-intake-derivations.d.ts.map +1 -1
  128. package/dist/safety/ncii-intake-derivations.js +17 -5
  129. package/dist/safety/ncii-intake-derivations.js.map +1 -1
  130. package/dist/schemas/admin.d.ts +3 -0
  131. package/dist/schemas/admin.d.ts.map +1 -1
  132. package/dist/schemas/admin.js +5 -0
  133. package/dist/schemas/admin.js.map +1 -1
  134. package/dist/schemas/chat.js +3 -3
  135. package/dist/schemas/chat.js.map +1 -1
  136. package/dist/schemas/commissions.d.ts +1 -1
  137. package/dist/schemas/media.d.ts +0 -4
  138. package/dist/schemas/media.d.ts.map +1 -1
  139. package/dist/schemas/media.js +5 -10
  140. package/dist/schemas/media.js.map +1 -1
  141. package/dist/schemas/ncii.d.ts +3 -0
  142. package/dist/schemas/ncii.d.ts.map +1 -1
  143. package/dist/schemas/notification.d.ts +1 -0
  144. package/dist/schemas/notification.d.ts.map +1 -1
  145. package/dist/types/audit.d.ts +1 -1
  146. package/dist/types/audit.d.ts.map +1 -1
  147. package/dist/types/audit.js.map +1 -1
  148. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"collections.js","sourceRoot":"","sources":["../../src/paths/collections.ts"],"names":[],"mappings":"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","sourcesContent":["// Firestore collection name constants — canonical source of truth\n// Changes to these values require database migration.\n\nimport type { WorkProjectType } from '../types/content.js';\n\n/**\n * TOP-LEVEL COLLECTIONS\n */\nexport const COLLECTIONS = {\n // Core entities\n USER_PROFILES: 'userProfiles',\n PUBLIC_USERS: 'publicUsers',\n ALL_WORK_PROJECTS: 'allWorkProjects',\n PUBLIC_WORK_PROJECTS: 'publicWorkProjects',\n WORK_REALMS: 'workRealms',\n\n // Content & Social\n SQUARE_STREETZ_FEED: 'squareStreetzFeed',\n THRESHOLD_ITEMS: 'thresholdItems',\n HALL_ITEMS: 'hallItems',\n HALL_CONTENT_CHANGE_REQUESTS: 'hallContentChangeRequests',\n COMMISSION_LISTINGS: 'commissionListings',\n AUDITION_BOARD: 'auditionBoard',\n FOLLOW_EDGES: 'followEdges',\n FOLLOW_COUNTERS: 'followCounters',\n\n // System & Utility\n RESERVED_DISPLAY_NAMES: 'reservedDisplayNames',\n RESERVED_REALM_NAMES: 'reservedRealmNames',\n ACCOUNT_DELETION_REQUESTS: 'accountDeletionRequests',\n CONTENT_REPORTS: 'contentReports',\n PENDING_MEDIA: 'pendingMedia',\n PENDING_MEDIA_ARCHIVE: 'pendingMediaArchive',\n MEDIA_ASSETS: 'mediaAssets',\n MEDIA_ACTIVATION_JOBS: 'mediaActivationJobs',\n PENDING_ADMIN_DISPATCHES: 'pendingAdminDispatches',\n ACTIVE_REPORT_GROUPS: 'activeReportGroups',\n CONTENT_VIOLATIONS: 'contentViolations',\n ADMIN_TASKS: 'adminTasks',\n SHORT_LINKS: 'shortLinks',\n GUILD_INVITE_CONVERSATIONS: 'guildInviteConversations',\n STAKE_SHARE_AUDIT_EVENTS: 'stakeShareAuditEvents',\n MODERATION_CASCADE_MANIFESTS: 'moderationCascadeManifests',\n\n // Notification system\n ACTIVE_USER_NOTIFICATIONS: 'activeUserNotifications',\n ACTIVE_ADMIN_NOTIFICATIONS: 'activeAdminNotifications',\n ADMIN_NOTIFICATION_HISTORY: 'adminNotificationHistory',\n PENDING_NOTIFICATIONS: 'pendingNotifications',\n\n // Notification redesign — delivery ledger + unified fanout engine (Admin-SDK-only).\n NOTIFICATION_DELIVERIES: 'notificationDeliveries',\n NOTIFICATION_FANOUT_JOBS: 'notificationFanoutJobs',\n\n // Chat realtime sync / projection / command collections (Admin-SDK-only).\n CHAT_CHANNEL_AUTH_PROJECTIONS: 'chatChannelAuthProjections',\n CHAT_SCOPE_DEGRADED: 'chatScopeDegraded',\n CHAT_SYNC_EVENTS: 'chatSyncEvents',\n CHAT_SYNC_FANOUT_JOBS: 'chatSyncFanoutJobs',\n CHAT_MESSAGE_OUTBOX: 'chatMessageOutbox',\n CHAT_ADMIN_ACTION_COMMANDS: 'chatAdminActionCommands',\n CHAT_HISTORY_ANONYMIZATION_JOBS: 'chatHistoryAnonymizationJobs',\n\n // Square Streetz announcement outbox (Admin-SDK-only): durable jobs enqueued in the\n // announcing domain's transaction and drained by the outbox trigger worker. Job ids\n // are deterministic so a replayed transaction collides instead of duplicating —\n // ALWAYS derive them via buildSquareAnnouncementJobId (doc-schemas/square-announcement-jobs.ts).\n SQUARE_ANNOUNCEMENT_JOBS: 'squareAnnouncementJobs',\n\n // Feedback & Metadata\n FEEDBACK_SUBMISSIONS: 'feedbackSubmissions',\n FEEDBACK_ALIASES: 'feedbackAliases',\n FEEDBACK_DENYLIST: 'feedbackDenylist',\n CRAFT_SKILLS_BY_TAG: 'craftSkillsByTag',\n SYSTEM_DATA: '_systemData',\n APP_CONFIG: '_config',\n // Server-only singleton bucket (BACKEND-108 — least-privileged reader). Docs whose ONLY\n // readers are Cloud Functions (Admin SDK) live here, never in the public `_config`\n // bucket. Firestore rules deny all client reads/writes on `_serverData`.\n // Docs: agePolicy, nciiPolicy, privilegedReviewerSecurity.\n SERVER_DATA: '_serverData',\n\n // Payments & pledge ledger\n PLEDGE_PAYMENTS: 'pledgePayments',\n PLEDGE_PAYMENT_PROVIDER_REFS: 'pledgePaymentProviderRefs',\n PROCESSED_STRIPE_EVENTS: 'processedStripeEvents',\n PLEDGE_PAYMENT_LEDGER_EVENTS: 'pledgePaymentLedgerEvents',\n PAYMENT_WEBHOOK_QUARANTINE: 'paymentWebhookQuarantine',\n // Running-totals singleton (pledgePaymentTotals/current) — auth-readable, server-only writes.\n PLEDGE_PAYMENT_TOTALS: 'pledgePaymentTotals',\n // User-initiated pledge refund requests (post-launch handler; keyed by requestId). No Stripe ids\n // here — those stay on pledgePaymentProviderRefs. Server-only writes.\n PLEDGE_REFUND_REQUESTS: 'pledgeRefundRequests',\n\n // Trust & Safety — child-safety case spine (§A1b, §A2)\n CHILD_SAFETY_CASE_LIST: 'childSafetyCaseList',\n CHILD_SAFETY_CASES: 'childSafetyCases',\n CHILD_SAFETY_OWNING_ALIASES: 'childSafetyOwningAliases',\n\n // Trust & Safety — time-sensitive admin-tray \"case needs work\" pins (admin-readable\n // projection; the 5th notification-tray tab reads it, the Safety Case Console owns detail).\n ACTIVE_SAFETY_CASE_ALERTS: 'activeSafetyCaseAlerts',\n\n // Trust & Safety — holds + resource commands (§A3)\n SAFETY_HOLD_REFS: 'safetyHoldRefs',\n SAFETY_HOLD_RESOURCES: 'safetyHoldResources',\n SAFETY_RESOURCE_COMMANDS: 'safetyResourceCommands',\n\n // Trust & Safety — evidence + provenance (§A4, §A6)\n SAFETY_EVIDENCE_MANIFESTS: 'safetyEvidenceManifests',\n SAFETY_EVIDENCE_JOBS: 'safetyEvidenceJobs',\n EVENT_PROVENANCE: 'eventProvenance',\n\n // Trust & Safety — sagas + closure (§A5)\n QUARANTINE_SAGA_JOBS: 'quarantineSagaJobs',\n NCMEC_SUBMISSION_JOBS: 'ncmecSubmissionJobs',\n ACCOUNT_ACTION_COMMANDS: 'accountActionCommands',\n\n // Trust & Safety — SLA monitors + heartbeat (§A8)\n SAFETY_SLA_MONITORS: 'safetySlaMonitors',\n SAFETY_MONITOR_HEARTBEAT: 'safetyMonitorHeartbeat',\n\n // Trust & Safety — age attestation nonces (§A7)\n AGE_ATTESTATION_NONCES: 'ageAttestationNonces',\n\n // Trust & Safety — per-operator privileged-reviewer security (§A11 [M-6] / [H-17]). BACKEND-ONLY,\n // keyed by uid (mirrors the operatorStepUp per-operator pattern). Distinct from the global\n // _serverData/privilegedReviewerSecurity POLICY singleton: these hold each operator's enrolled\n // WebAuthn passkeys + reauth grant window, and each operator's granted reviewer capabilities.\n PRIVILEGED_REVIEWER_PASSKEY_PROFILES: 'privilegedReviewerPasskeyProfiles',\n PRIVILEGED_REVIEWER_CAPABILITY_GRANTS: 'privilegedReviewerCapabilityGrants',\n\n // Trust & Safety — NCII / TAKE IT DOWN (§A11)\n NCII_ALLEGATIONS: 'nciiAllegations',\n TAKE_IT_DOWN_REQUESTS: 'takeItDownRequests',\n NCII_CASES: 'nciiCases',\n NCII_TEMPORARY_HOLDS: 'nciiTemporaryHolds',\n NCII_REMOVAL_JOBS: 'nciiRemovalJobs',\n // [H-01] durable operator-visible inventory of NCII-evidence objects RETAINED but never recorded\n // as evidence (orphan / oversized / spoof / unknown-reference). Never auto-deleted.\n NCII_RETAINED_EVIDENCE_INVENTORY: 'nciiRetainedEvidenceInventory',\n // [H-01] app-only dead-letter sink for NCII retained-evidence inventory rows that could not be\n // written to the primary nciiRetainedEvidenceInventory collection (e.g. write failure during\n // the onNciiEvidenceUploaded trigger). Never auto-deleted; operator-visible for manual triage.\n NCII_INVENTORY_DEAD_LETTER: 'nciiInventoryDeadLetter',\n\n // Backend-only retry queue for post-commit auth-effect reconciliation: when an account-status\n // change committed to Firestore but the follow-on Auth effect (custom-claim / disable) failed,\n // a queue entry keyed by uid drives a retry loop toward the target status. Admin-SDK-only.\n STATUS_RECONCILE_QUEUE: 'statusReconcileQueue',\n} as const;\n\n/**\n * USER PROFILE SUBCOLLECTIONS\n * Nested under userProfiles/{userId}/\n */\nexport const USER_SUBCOLLECTIONS = {\n PROFILE_CRAFT_SKILLS: 'profileCraftSkills',\n PRIVATE_DATA: 'privateData',\n USER_METADATA: 'userMetadata',\n USER_LIKES: 'userLikes',\n CHECKED_OUT_ITEMS: 'checkedOutItems',\n MENTION_HISTORY: 'mentionHistory',\n AUDITION_VOTES: 'auditionVotes',\n} as const;\n\n/**\n * WORKPROJECT SUBCOLLECTIONS\n * Nested under allWorkProjects/{workProjectId}/\n */\nexport const WORK_PROJECT_SUBCOLLECTIONS = {\n WORK_PROJECT_TALES: 'workProjectTales',\n WORK_PROJECT_TUNES: 'workProjectTunes',\n WORK_PROJECT_TELEVISION: 'workProjectTelevision',\n GUILDMATE_USERS: 'guildmateUsers',\n PUBLIC_GUILDMATE_USERS: 'publicGuildmateUsers',\n WORK_FILE_FOLDERS: 'workFileFolders',\n GUILD_CHAT_CHANNELS: 'guildChatChannels',\n} as const;\n\n/**\n * HALL ITEM SUBCOLLECTIONS\n * Nested under hallItems/{hallItemId}/ — the PUBLISHED sub-item projections\n * (chapters/tracks/episodes copied out of the Work at publish time by\n * runPublishApprovedHallLibraryItem). The segment is the lowercased\n * WorkProjectType; use HALL_ITEM_SUBCOLLECTION_BY_WORK_TYPE to derive it —\n * never `workProjectType.toLowerCase()`.\n */\nexport const HALL_ITEM_SUBCOLLECTIONS = {\n TALES: 'tales',\n TUNES: 'tunes',\n TELEVISION: 'television',\n} as const;\n\nexport type HallItemSubcollection =\n (typeof HALL_ITEM_SUBCOLLECTIONS)[keyof typeof HALL_ITEM_SUBCOLLECTIONS];\n\n/** WorkProjectType → published hall sub-item subcollection segment. */\nexport const HALL_ITEM_SUBCOLLECTION_BY_WORK_TYPE: Record<WorkProjectType, HallItemSubcollection> = {\n Tales: HALL_ITEM_SUBCOLLECTIONS.TALES,\n Tunes: HALL_ITEM_SUBCOLLECTIONS.TUNES,\n Television: HALL_ITEM_SUBCOLLECTIONS.TELEVISION,\n};\n\n/**\n * DEEPLY NESTED SUBCOLLECTIONS\n * Third level and beyond\n */\nexport const NESTED_SUBCOLLECTIONS = {\n // Content subcollections\n TALE_CHAPTERS: 'taleChapters',\n TUNE_TRACKS: 'tuneTracks',\n TELEVISION_EPISODES: 'televisionEpisodes',\n\n // Work-project file folders (S7): files nested under each folder.\n WORK_FILES: 'workFiles',\n\n // Communication — guild channel + invite messages are REALTIME-ONLY (chat Worker\n // Durable Object, never Firestore); only admin-support conversationMessages persist here.\n CONVERSATION_MESSAGES: 'conversationMessages',\n\n // SquareStreetz & Social\n SOCIAL_POSTS: 'socialPosts',\n ACTIVE_POSTS: 'activePosts',\n TRENDING_POSTS: 'trendingPosts',\n\n // Commissions & Auditions\n COMMISSION_PROPOSALS: 'commissionProposals',\n AUDITION_ENTRIES: 'auditionEntries',\n\n // User history\n LIKE_HISTORY: 'likeHistory',\n SQUARE_STREETZ_LIKES: 'squareStreetzLikes',\n\n // Craft Skills & Feedback\n TAGGED_CRAFT_SKILLS: 'taggedCraftSkills',\n USER_SUGGESTIONS: 'userSuggestions',\n\n // Moderation\n CHANGED_DOCS: 'changedDocs',\n\n // Trust & Safety — report spine (§A1): the public, reporter-identity-free projection\n // is a deterministic child of the protected report root\n // (contentReports/{reportId}/publicProjection/{reportId}).\n REPORT_PUBLIC_PROJECTION: 'publicProjection',\n // Restricted reporter/requester PII subcollection ('private'), shared by the report\n // spine (contentReports/{reportId}/private/{snapshot,narrative}) and TAKE IT DOWN\n // (takeItDownRequests/{requestId}/private/requester). Admin-read-only / server-only.\n PRIVATE: 'private',\n\n // Chat degraded-scope causes (chatScopeDegraded/{scopeKey}/causes/{causeId}).\n CHAT_SCOPE_DEGRADED_CAUSES: 'causes',\n // Anonymization affected-chunk set (chatHistoryAnonymizationJobs/{jobId}/affectedChunks/{chunkOrdinal}).\n CHAT_ANONYMIZATION_AFFECTED_CHUNKS: 'affectedChunks',\n\n // Trust & Safety — child-safety case append-only detail (NEVER arrays).\n CHILD_SAFETY_SOURCE_SIGNALS: 'sourceSignals',\n CHILD_SAFETY_DECISIONS: 'decisions',\n CHILD_SAFETY_DECISION_VIEWS: 'views',\n CHILD_SAFETY_CASE_ACCOUNTS: 'accounts',\n CHILD_SAFETY_CASE_ACCOUNT_HISTORY: 'history',\n CHILD_SAFETY_NCMEC_SUBMISSIONS: 'ncmecSubmissions',\n CHILD_SAFETY_NCMEC_SUBMISSION_FILES: 'files',\n CHILD_SAFETY_LEGAL_PROCESS: 'legalProcess',\n\n // Trust & Safety — resource-command subcollections (§A3).\n SAFETY_RESOURCE_COMMAND_AUTHORIZED_REQUESTS: 'authorizedRequests',\n SAFETY_RESOURCE_COMMAND_BYPASS_REFS: 'bypassRefs',\n\n // Trust & Safety — evidence-job subcollections (§A4).\n SAFETY_EVIDENCE_JOB_ITEMS: 'items',\n SAFETY_EVIDENCE_JOB_DISPOSITION: 'disposition',\n\n // Trust & Safety — quarantine-saga subcollection (§A5).\n QUARANTINE_SAGA_RELATED_ASSETS: 'relatedAssets',\n\n // Trust & Safety — TAKE IT DOWN request subcollections (§A11). The 'private'\n // subcollection uses the shared generic `PRIVATE` constant above.\n TAKE_IT_DOWN_SUBMISSIONS: 'submissions',\n TAKE_IT_DOWN_VALIDITY_DECISIONS: 'validityDecisions',\n TAKE_IT_DOWN_ACTIONS: 'actions',\n TAKE_IT_DOWN_EVIDENCE: 'evidence',\n\n // Trust & Safety — NCII case subcollections (§A11).\n NCII_CASE_ALLEGATION_LINKS: 'allegationLinks',\n NCII_CASE_REQUEST_LINKS: 'requestLinks',\n NCII_CASE_REMOVAL_ACTIONS: 'removalActions',\n NCII_CASE_BLOCKED_HASHES: 'blockedHashes',\n // Append-only NCII case closure/reopen events (nciiCases/{caseId}/closureEvents/{eventId}).\n NCII_CASE_CLOSURE_EVENTS: 'closureEvents',\n\n // Trust & Safety — NCII removal-job targets (§A11).\n NCII_REMOVAL_TARGETS: 'targets',\n} as const;\n\n/**\n * SPECIAL DOCUMENT PATHS\n * Static document IDs for singleton documents\n */\nexport const SPECIAL_DOCS = {\n ADMIN_LIST: 'adminList',\n APP_CONFIG: 'app',\n // Charter→full app-mode marker doc (_systemData/appMode) that recordAppModeFlip writes.\n APP_MODE: 'appMode',\n FUTURE_PLANS: 'futurePlans',\n NOTIFICATION_SETTINGS: 'notificationSettings',\n // Hall viewing-state doc id under userProfiles/{uid}/privateData/ (hall-viewing-experience\n // Area 2, ruled 2026-07-04). Mirrors the NOTIFICATION_SETTINGS fixed-id privateData pattern.\n HALL_LIBRARY_PREFERENCES: 'hallLibraryPreferences',\n PROFANITY_LIST: 'profanityList',\n RESERVED_USERNAMES: 'reservedUsernames',\n BLOCKED_FRANCHISE_NAMES: 'blockedFranchiseNames',\n RULES_AND_AGREEMENTS: 'rulesAndAgreements',\n // Editable content-page singletons under _config (content-pages Firestore\n // migration, DJ ruling 2026-07-06): the ONLY source for /terms, /privacy, and\n // the /take-it-down page copy — no hardcoded fallbacks anywhere.\n TERMS_PAGE: 'termsOfService',\n PRIVACY_PAGE: 'privacyPolicy',\n TAKE_IT_DOWN_PAGE_COPY: 'takeItDownPageCopy',\n // Also the doc id of the pledge running-totals singleton (pledgePaymentTotals/summary).\n SUMMARY: 'summary',\n\n // Trust & Safety — singleton global SLA-monitor heartbeat (safetyMonitorHeartbeat/global).\n SAFETY_MONITOR_HEARTBEAT_GLOBAL: 'global',\n\n // Trust & Safety — _serverData (server-only) singletons (§A7, §A11). Moved out of the\n // public _config bucket: their only readers are Cloud Functions (BACKEND-108).\n AGE_POLICY: 'agePolicy',\n NCII_POLICY: 'nciiPolicy',\n PRIVILEGED_REVIEWER_SECURITY: 'privilegedReviewerSecurity',\n\n // Trust & Safety — fixed-id TAKE IT DOWN request subdocs (§A11).\n TAKE_IT_DOWN_REQUESTER: 'requester', // takeItDownRequests/{requestId}/private/requester\n\n // Trust & Safety — fixed-id report-spine private subdocs (§A1).\n REPORT_SNAPSHOT: 'snapshot', // contentReports/{reportId}/private/snapshot\n REPORT_NARRATIVE: 'narrative', // contentReports/{reportId}/private/narrative\n} as const;\n"]}
1
+ {"version":3,"file":"collections.js","sourceRoot":"","sources":["../../src/paths/collections.ts"],"names":[],"mappings":"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","sourcesContent":["// Firestore collection name constants — canonical source of truth\n// Changes to these values require database migration.\n\nimport type { WorkProjectType } from '../types/content.js';\n\n/**\n * TOP-LEVEL COLLECTIONS\n */\nexport const COLLECTIONS = {\n // Core entities\n USER_PROFILES: 'userProfiles',\n PUBLIC_USERS: 'publicUsers',\n ALL_WORK_PROJECTS: 'allWorkProjects',\n PUBLIC_WORK_PROJECTS: 'publicWorkProjects',\n WORK_REALMS: 'workRealms',\n\n // Content & Social\n SQUARE_STREETZ_FEED: 'squareStreetzFeed',\n THRESHOLD_ITEMS: 'thresholdItems',\n HALL_ITEMS: 'hallItems',\n HALL_CONTENT_CHANGE_REQUESTS: 'hallContentChangeRequests',\n COMMISSION_LISTINGS: 'commissionListings',\n AUDITION_BOARD: 'auditionBoard',\n FOLLOW_EDGES: 'followEdges',\n FOLLOW_COUNTERS: 'followCounters',\n\n // System & Utility\n RESERVED_DISPLAY_NAMES: 'reservedDisplayNames',\n RESERVED_REALM_NAMES: 'reservedRealmNames',\n ACCOUNT_DELETION_REQUESTS: 'accountDeletionRequests',\n CONTENT_REPORTS: 'contentReports',\n PENDING_MEDIA: 'pendingMedia',\n PENDING_MEDIA_ARCHIVE: 'pendingMediaArchive',\n MEDIA_ASSETS: 'mediaAssets',\n MEDIA_ACTIVATION_JOBS: 'mediaActivationJobs',\n PENDING_ADMIN_DISPATCHES: 'pendingAdminDispatches',\n ACTIVE_REPORT_GROUPS: 'activeReportGroups',\n CONTENT_VIOLATIONS: 'contentViolations',\n ADMIN_TASKS: 'adminTasks',\n SHORT_LINKS: 'shortLinks',\n GUILD_INVITE_CONVERSATIONS: 'guildInviteConversations',\n STAKE_SHARE_AUDIT_EVENTS: 'stakeShareAuditEvents',\n MODERATION_CASCADE_MANIFESTS: 'moderationCascadeManifests',\n\n // Notification system\n ACTIVE_USER_NOTIFICATIONS: 'activeUserNotifications',\n ACTIVE_ADMIN_NOTIFICATIONS: 'activeAdminNotifications',\n ADMIN_NOTIFICATION_HISTORY: 'adminNotificationHistory',\n PENDING_NOTIFICATIONS: 'pendingNotifications',\n\n // Notification redesign — delivery ledger + unified fanout engine (Admin-SDK-only).\n NOTIFICATION_DELIVERIES: 'notificationDeliveries',\n NOTIFICATION_FANOUT_JOBS: 'notificationFanoutJobs',\n\n // Chat realtime sync / projection / command collections (Admin-SDK-only).\n CHAT_CHANNEL_AUTH_PROJECTIONS: 'chatChannelAuthProjections',\n CHAT_SCOPE_DEGRADED: 'chatScopeDegraded',\n CHAT_SYNC_EVENTS: 'chatSyncEvents',\n CHAT_SYNC_FANOUT_JOBS: 'chatSyncFanoutJobs',\n CHAT_MESSAGE_OUTBOX: 'chatMessageOutbox',\n CHAT_ADMIN_ACTION_COMMANDS: 'chatAdminActionCommands',\n CHAT_HISTORY_ANONYMIZATION_JOBS: 'chatHistoryAnonymizationJobs',\n\n // Square Streetz announcement outbox (Admin-SDK-only): durable jobs enqueued in the\n // announcing domain's transaction and drained by the outbox trigger worker. Job ids\n // are deterministic so a replayed transaction collides instead of duplicating —\n // ALWAYS derive them via buildSquareAnnouncementJobId (doc-schemas/square-announcement-jobs.ts).\n SQUARE_ANNOUNCEMENT_JOBS: 'squareAnnouncementJobs',\n\n // Feedback & Metadata\n FEEDBACK_SUBMISSIONS: 'feedbackSubmissions',\n FEEDBACK_ALIASES: 'feedbackAliases',\n FEEDBACK_DENYLIST: 'feedbackDenylist',\n CRAFT_SKILLS_BY_TAG: 'craftSkillsByTag',\n SYSTEM_DATA: '_systemData',\n APP_CONFIG: '_config',\n // Server-only singleton bucket (BACKEND-108 — least-privileged reader). Docs whose ONLY\n // readers are Cloud Functions (Admin SDK) live here, never in the public `_config`\n // bucket. Firestore rules deny all client reads/writes on `_serverData`.\n // Docs: agePolicy, nciiPolicy, privilegedReviewerSecurity.\n SERVER_DATA: '_serverData',\n\n // Payments & pledge ledger\n PLEDGE_PAYMENTS: 'pledgePayments',\n PLEDGE_PAYMENT_PROVIDER_REFS: 'pledgePaymentProviderRefs',\n PROCESSED_STRIPE_EVENTS: 'processedStripeEvents',\n PLEDGE_PAYMENT_LEDGER_EVENTS: 'pledgePaymentLedgerEvents',\n PAYMENT_WEBHOOK_QUARANTINE: 'paymentWebhookQuarantine',\n // Running-totals singleton (pledgePaymentTotals/current) — auth-readable, server-only writes.\n PLEDGE_PAYMENT_TOTALS: 'pledgePaymentTotals',\n // User-initiated pledge refund requests (post-launch handler; keyed by requestId). No Stripe ids\n // here — those stay on pledgePaymentProviderRefs. Server-only writes.\n PLEDGE_REFUND_REQUESTS: 'pledgeRefundRequests',\n\n // Trust & Safety — child-safety case spine (§A1b, §A2)\n CHILD_SAFETY_CASE_LIST: 'childSafetyCaseList',\n CHILD_SAFETY_CASES: 'childSafetyCases',\n CHILD_SAFETY_OWNING_ALIASES: 'childSafetyOwningAliases',\n\n // Trust & Safety — time-sensitive admin-tray \"case needs work\" pins (admin-readable\n // projection; the 5th notification-tray tab reads it, the Safety Case Console owns detail).\n ACTIVE_SAFETY_CASE_ALERTS: 'activeSafetyCaseAlerts',\n\n // Trust & Safety — holds + resource commands (§A3)\n SAFETY_HOLD_REFS: 'safetyHoldRefs',\n SAFETY_HOLD_RESOURCES: 'safetyHoldResources',\n SAFETY_RESOURCE_COMMANDS: 'safetyResourceCommands',\n\n // Trust & Safety — evidence + provenance (§A4, §A6)\n SAFETY_EVIDENCE_MANIFESTS: 'safetyEvidenceManifests',\n SAFETY_EVIDENCE_JOBS: 'safetyEvidenceJobs',\n EVENT_PROVENANCE: 'eventProvenance',\n\n // Trust & Safety — sagas + closure (§A5)\n QUARANTINE_SAGA_JOBS: 'quarantineSagaJobs',\n NCMEC_SUBMISSION_JOBS: 'ncmecSubmissionJobs',\n ACCOUNT_ACTION_COMMANDS: 'accountActionCommands',\n\n // Trust & Safety — SLA monitors + heartbeat (§A8)\n SAFETY_SLA_MONITORS: 'safetySlaMonitors',\n SAFETY_MONITOR_HEARTBEAT: 'safetyMonitorHeartbeat',\n\n // Trust & Safety — age attestation nonces (§A7)\n AGE_ATTESTATION_NONCES: 'ageAttestationNonces',\n\n // Trust & Safety — per-operator privileged-reviewer security (§A11 [M-6] / [H-17]). BACKEND-ONLY,\n // keyed by uid (mirrors the operatorStepUp per-operator pattern). Distinct from the global\n // _serverData/privilegedReviewerSecurity POLICY singleton: these hold each operator's enrolled\n // WebAuthn passkeys + reauth grant window, and each operator's granted reviewer capabilities.\n PRIVILEGED_REVIEWER_PASSKEY_PROFILES: 'privilegedReviewerPasskeyProfiles',\n PRIVILEGED_REVIEWER_CAPABILITY_GRANTS: 'privilegedReviewerCapabilityGrants',\n\n // Trust & Safety — NCII / TAKE IT DOWN (§A11)\n NCII_ALLEGATIONS: 'nciiAllegations',\n TAKE_IT_DOWN_REQUESTS: 'takeItDownRequests',\n NCII_CASES: 'nciiCases',\n NCII_TEMPORARY_HOLDS: 'nciiTemporaryHolds',\n NCII_REMOVAL_JOBS: 'nciiRemovalJobs',\n // [H-01] durable operator-visible inventory of NCII-evidence objects RETAINED but never recorded\n // as evidence (orphan / oversized / spoof / unknown-reference). Never auto-deleted.\n NCII_RETAINED_EVIDENCE_INVENTORY: 'nciiRetainedEvidenceInventory',\n // [H-01] app-only dead-letter sink for NCII retained-evidence inventory rows that could not be\n // written to the primary nciiRetainedEvidenceInventory collection (e.g. write failure during\n // the onNciiEvidenceUploaded trigger). Never auto-deleted; operator-visible for manual triage.\n NCII_INVENTORY_DEAD_LETTER: 'nciiInventoryDeadLetter',\n\n // Backend-only retry queue for post-commit auth-effect reconciliation: when an account-status\n // change committed to Firestore but the follow-on Auth effect (custom-claim / disable) failed,\n // a queue entry keyed by uid drives a retry loop toward the target status. Admin-SDK-only.\n STATUS_RECONCILE_QUEUE: 'statusReconcileQueue',\n} as const;\n\n/**\n * USER PROFILE SUBCOLLECTIONS\n * Nested under userProfiles/{userId}/\n */\nexport const USER_SUBCOLLECTIONS = {\n PROFILE_CRAFT_SKILLS: 'profileCraftSkills',\n PRIVATE_DATA: 'privateData',\n USER_METADATA: 'userMetadata',\n USER_LIKES: 'userLikes',\n CHECKED_OUT_ITEMS: 'checkedOutItems',\n MENTION_HISTORY: 'mentionHistory',\n AUDITION_VOTES: 'auditionVotes',\n} as const;\n\n/**\n * WORKPROJECT SUBCOLLECTIONS\n * Nested under allWorkProjects/{workProjectId}/\n */\nexport const WORK_PROJECT_SUBCOLLECTIONS = {\n WORK_PROJECT_TALES: 'workProjectTales',\n WORK_PROJECT_TUNES: 'workProjectTunes',\n WORK_PROJECT_TELEVISION: 'workProjectTelevision',\n GUILDMATE_USERS: 'guildmateUsers',\n PUBLIC_GUILDMATE_USERS: 'publicGuildmateUsers',\n WORK_FILE_FOLDERS: 'workFileFolders',\n GUILD_CHAT_CHANNELS: 'guildChatChannels',\n} as const;\n\n/**\n * HALL ITEM SUBCOLLECTIONS\n * Nested under hallItems/{hallItemId}/ — the PUBLISHED sub-item projections\n * (chapters/tracks/episodes copied out of the Work at publish time by\n * runPublishApprovedHallLibraryItem). The segment is the lowercased\n * WorkProjectType; use HALL_ITEM_SUBCOLLECTION_BY_WORK_TYPE to derive it —\n * never `workProjectType.toLowerCase()`.\n */\nexport const HALL_ITEM_SUBCOLLECTIONS = {\n TALES: 'tales',\n TUNES: 'tunes',\n TELEVISION: 'television',\n} as const;\n\nexport type HallItemSubcollection =\n (typeof HALL_ITEM_SUBCOLLECTIONS)[keyof typeof HALL_ITEM_SUBCOLLECTIONS];\n\n/** WorkProjectType → published hall sub-item subcollection segment. */\nexport const HALL_ITEM_SUBCOLLECTION_BY_WORK_TYPE: Record<WorkProjectType, HallItemSubcollection> = {\n Tales: HALL_ITEM_SUBCOLLECTIONS.TALES,\n Tunes: HALL_ITEM_SUBCOLLECTIONS.TUNES,\n Television: HALL_ITEM_SUBCOLLECTIONS.TELEVISION,\n};\n\n/**\n * DEEPLY NESTED SUBCOLLECTIONS\n * Third level and beyond\n */\nexport const NESTED_SUBCOLLECTIONS = {\n // Content subcollections\n TALE_CHAPTERS: 'taleChapters',\n TUNE_TRACKS: 'tuneTracks',\n TELEVISION_EPISODES: 'televisionEpisodes',\n\n // Work-project file folders (S7): files nested under each folder.\n WORK_FILES: 'workFiles',\n\n // Communication — guild channel + invite messages are REALTIME-ONLY (chat Worker\n // Durable Object, never Firestore); only admin-support conversationMessages persist here.\n CONVERSATION_MESSAGES: 'conversationMessages',\n\n // Conversation Files — the flat per-conversation file list. Nested under the\n // conversation's NATURAL Firestore parent, so the same subcollection segment serves\n // both supported scopes:\n // guildInviteConversations/{guildInviteId}/conversationFiles/{conversationFileId}\n // pendingAdminDispatches/{adminDispatchId}/conversationFiles/{conversationFileId}\n // Guild chat channels deliberately have NO conversationFiles subcollection.\n CONVERSATION_FILES: 'conversationFiles',\n\n // SquareStreetz & Social\n SOCIAL_POSTS: 'socialPosts',\n ACTIVE_POSTS: 'activePosts',\n TRENDING_POSTS: 'trendingPosts',\n\n // Commissions & Auditions\n COMMISSION_PROPOSALS: 'commissionProposals',\n AUDITION_ENTRIES: 'auditionEntries',\n\n // User history\n LIKE_HISTORY: 'likeHistory',\n SQUARE_STREETZ_LIKES: 'squareStreetzLikes',\n\n // Craft Skills & Feedback\n TAGGED_CRAFT_SKILLS: 'taggedCraftSkills',\n USER_SUGGESTIONS: 'userSuggestions',\n\n // Moderation\n CHANGED_DOCS: 'changedDocs',\n\n // Trust & Safety — report spine (§A1): the public, reporter-identity-free projection\n // is a deterministic child of the protected report root\n // (contentReports/{reportId}/publicProjection/{reportId}).\n REPORT_PUBLIC_PROJECTION: 'publicProjection',\n // Restricted reporter/requester PII subcollection ('private'), shared by the report\n // spine (contentReports/{reportId}/private/{snapshot,narrative}) and TAKE IT DOWN\n // (takeItDownRequests/{requestId}/private/requester). Admin-read-only / server-only.\n PRIVATE: 'private',\n\n // Chat degraded-scope causes (chatScopeDegraded/{scopeKey}/causes/{causeId}).\n CHAT_SCOPE_DEGRADED_CAUSES: 'causes',\n // Anonymization affected-chunk set (chatHistoryAnonymizationJobs/{jobId}/affectedChunks/{chunkOrdinal}).\n CHAT_ANONYMIZATION_AFFECTED_CHUNKS: 'affectedChunks',\n\n // Trust & Safety — child-safety case append-only detail (NEVER arrays).\n CHILD_SAFETY_SOURCE_SIGNALS: 'sourceSignals',\n CHILD_SAFETY_DECISIONS: 'decisions',\n CHILD_SAFETY_DECISION_VIEWS: 'views',\n CHILD_SAFETY_CASE_ACCOUNTS: 'accounts',\n CHILD_SAFETY_CASE_ACCOUNT_HISTORY: 'history',\n CHILD_SAFETY_NCMEC_SUBMISSIONS: 'ncmecSubmissions',\n CHILD_SAFETY_NCMEC_SUBMISSION_FILES: 'files',\n CHILD_SAFETY_LEGAL_PROCESS: 'legalProcess',\n\n // Trust & Safety — resource-command subcollections (§A3).\n SAFETY_RESOURCE_COMMAND_AUTHORIZED_REQUESTS: 'authorizedRequests',\n SAFETY_RESOURCE_COMMAND_BYPASS_REFS: 'bypassRefs',\n\n // Trust & Safety — evidence-job subcollections (§A4).\n SAFETY_EVIDENCE_JOB_ITEMS: 'items',\n SAFETY_EVIDENCE_JOB_DISPOSITION: 'disposition',\n\n // Trust & Safety — quarantine-saga subcollection (§A5).\n QUARANTINE_SAGA_RELATED_ASSETS: 'relatedAssets',\n\n // Trust & Safety — TAKE IT DOWN request subcollections (§A11). The 'private'\n // subcollection uses the shared generic `PRIVATE` constant above.\n TAKE_IT_DOWN_SUBMISSIONS: 'submissions',\n TAKE_IT_DOWN_VALIDITY_DECISIONS: 'validityDecisions',\n TAKE_IT_DOWN_ACTIONS: 'actions',\n TAKE_IT_DOWN_EVIDENCE: 'evidence',\n\n // Trust & Safety — NCII case subcollections (§A11).\n NCII_CASE_ALLEGATION_LINKS: 'allegationLinks',\n NCII_CASE_REQUEST_LINKS: 'requestLinks',\n NCII_CASE_REMOVAL_ACTIONS: 'removalActions',\n NCII_CASE_BLOCKED_HASHES: 'blockedHashes',\n // Append-only NCII case closure/reopen events (nciiCases/{caseId}/closureEvents/{eventId}).\n NCII_CASE_CLOSURE_EVENTS: 'closureEvents',\n\n // Trust & Safety — NCII removal-job targets (§A11).\n NCII_REMOVAL_TARGETS: 'targets',\n} as const;\n\n/**\n * SPECIAL DOCUMENT PATHS\n * Static document IDs for singleton documents\n */\nexport const SPECIAL_DOCS = {\n ADMIN_LIST: 'adminList',\n APP_CONFIG: 'app',\n // Charter→full app-mode marker doc (_systemData/appMode) that recordAppModeFlip writes.\n APP_MODE: 'appMode',\n FUTURE_PLANS: 'futurePlans',\n NOTIFICATION_SETTINGS: 'notificationSettings',\n // Hall viewing-state doc id under userProfiles/{uid}/privateData/ (hall-viewing-experience\n // Area 2, ruled 2026-07-04). Mirrors the NOTIFICATION_SETTINGS fixed-id privateData pattern.\n HALL_LIBRARY_PREFERENCES: 'hallLibraryPreferences',\n PROFANITY_LIST: 'profanityList',\n RESERVED_USERNAMES: 'reservedUsernames',\n BLOCKED_FRANCHISE_NAMES: 'blockedFranchiseNames',\n RULES_AND_AGREEMENTS: 'rulesAndAgreements',\n // Editable content-page singletons under _config (content-pages Firestore\n // migration, DJ ruling 2026-07-06): the ONLY source for /terms, /privacy, and\n // the /take-it-down page copy — no hardcoded fallbacks anywhere.\n TERMS_PAGE: 'termsOfService',\n PRIVACY_PAGE: 'privacyPolicy',\n TAKE_IT_DOWN_PAGE_COPY: 'takeItDownPageCopy',\n // Also the doc id of the pledge running-totals singleton (pledgePaymentTotals/summary).\n SUMMARY: 'summary',\n\n // Trust & Safety — singleton global SLA-monitor heartbeat (safetyMonitorHeartbeat/global).\n SAFETY_MONITOR_HEARTBEAT_GLOBAL: 'global',\n\n // Trust & Safety — _serverData (server-only) singletons (§A7, §A11). Moved out of the\n // public _config bucket: their only readers are Cloud Functions (BACKEND-108).\n AGE_POLICY: 'agePolicy',\n NCII_POLICY: 'nciiPolicy',\n PRIVILEGED_REVIEWER_SECURITY: 'privilegedReviewerSecurity',\n\n // Trust & Safety — fixed-id TAKE IT DOWN request subdocs (§A11).\n TAKE_IT_DOWN_REQUESTER: 'requester', // takeItDownRequests/{requestId}/private/requester\n\n // Trust & Safety — fixed-id report-spine private subdocs (§A1).\n REPORT_SNAPSHOT: 'snapshot', // contentReports/{reportId}/private/snapshot\n REPORT_NARRATIVE: 'narrative', // contentReports/{reportId}/private/narrative\n} as const;\n"]}
@@ -45,6 +45,8 @@ export declare const PATH_BUILDERS: {
45
45
  readonly adminDispatch: (adminDispatchId: string) => [string, string];
46
46
  readonly adminConversationMessage: (adminDispatchId: string, adminDispatchMessageId: string) => [string, string, string, string];
47
47
  readonly guildInvite: (guildInviteId: string) => [string, string];
48
+ readonly guildInviteConversationFile: (guildInviteId: string, conversationFileId: string) => [string, string, string, string];
49
+ readonly adminDispatchConversationFile: (adminDispatchId: string, conversationFileId: string) => [string, string, string, string];
48
50
  readonly contentReport: (reportId: string) => [string, string];
49
51
  readonly reportPrivateSnapshot: (reportId: string) => [string, string, string, string];
50
52
  readonly reportPrivateNarrative: (reportId: string) => [string, string, string, string];
@@ -1 +1 @@
1
- {"version":3,"file":"path-builders.d.ts","sourceRoot":"","sources":["../../src/paths/path-builders.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"path-builders.d.ts","sourceRoot":"","sources":["../../src/paths/path-builders.ts"],"names":[],"mappings":"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"}
@@ -76,6 +76,11 @@ export const PATH_BUILDERS = {
76
76
  adminDispatch: (adminDispatchId) => [COLLECTIONS.PENDING_ADMIN_DISPATCHES, adminDispatchId],
77
77
  adminConversationMessage: (adminDispatchId, adminDispatchMessageId) => [COLLECTIONS.PENDING_ADMIN_DISPATCHES, adminDispatchId, NESTED_SUBCOLLECTIONS.CONVERSATION_MESSAGES, adminDispatchMessageId],
78
78
  guildInvite: (guildInviteId) => [COLLECTIONS.GUILD_INVITE_CONVERSATIONS, guildInviteId],
79
+ // ===== CONVERSATION FILES (the two supported ConversationFileRef scopes) =====
80
+ // Application and backend code must NOT assemble these paths independently.
81
+ // `conversationFileId` is deterministic — it IS the pendingMedia id.
82
+ guildInviteConversationFile: (guildInviteId, conversationFileId) => [COLLECTIONS.GUILD_INVITE_CONVERSATIONS, guildInviteId, NESTED_SUBCOLLECTIONS.CONVERSATION_FILES, conversationFileId],
83
+ adminDispatchConversationFile: (adminDispatchId, conversationFileId) => [COLLECTIONS.PENDING_ADMIN_DISPATCHES, adminDispatchId, NESTED_SUBCOLLECTIONS.CONVERSATION_FILES, conversationFileId],
79
84
  contentReport: (reportId) => [COLLECTIONS.CONTENT_REPORTS, reportId],
80
85
  // Fixed-id restricted report-PII subdocs (contentReports/{reportId}/private/{snapshot,narrative}).
81
86
  reportPrivateSnapshot: (reportId) => [COLLECTIONS.CONTENT_REPORTS, reportId, NESTED_SUBCOLLECTIONS.PRIVATE, SPECIAL_DOCS.REPORT_SNAPSHOT],
@@ -1 +1 @@
1
- {"version":3,"file":"path-builders.js","sourceRoot":"","sources":["../../src/paths/path-builders.ts"],"names":[],"mappings":"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","sourcesContent":["// Document path builders — returns tuples of path segments.\n//\n// Frontend (Web SDK): doc(db, ...PATH_BUILDERS.userProfile(userId))\n// Backend (Admin SDK): db.doc(toPath(PATH_BUILDERS.userProfile(userId)))\n\nimport {\n COLLECTIONS,\n USER_SUBCOLLECTIONS,\n WORK_PROJECT_SUBCOLLECTIONS,\n NESTED_SUBCOLLECTIONS,\n SPECIAL_DOCS,\n type HallItemSubcollection,\n} from './collections.js';\nimport type { FollowableTargetType } from '../schemas/social.js';\n\nexport const PATH_BUILDERS = {\n // ===== USER PATHS =====\n userProfile: (userId: string): [string, string] =>\n [COLLECTIONS.USER_PROFILES, userId],\n\n // Backend-mirrored public identity projection (publicUsers/{uid}).\n publicUser: (uid: string): [string, string] =>\n [COLLECTIONS.PUBLIC_USERS, uid],\n\n // Per-user account-deletion / erasure request, keyed by uid.\n accountDeletionRequest: (uid: string): [string, string] =>\n [COLLECTIONS.ACCOUNT_DELETION_REQUESTS, uid],\n\n userMentionHistoryEntry: (userId: string, entryId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.MENTION_HISTORY, entryId],\n\n userCraftSkill: (userId: string, craftSkillId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.PROFILE_CRAFT_SKILLS, craftSkillId],\n\n userPrivateData: (userId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.PRIVATE_DATA, userId],\n\n userMetadata: (userId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.USER_METADATA, SPECIAL_DOCS.NOTIFICATION_SETTINGS],\n\n // Per-user Hall viewing-state doc (hall-viewing-experience Area 2, ruled 2026-07-04):\n // userProfiles/{uid}/privateData/hallLibraryPreferences. Fixed-id privateData subdoc,\n // same shape as userMetadata above.\n hallLibraryPreferences: (userId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.PRIVATE_DATA, SPECIAL_DOCS.HALL_LIBRARY_PREFERENCES],\n\n // Generic follow edge: top-level `followEdges/{followerUid__targetType__targetId}`.\n // Deterministic ID = O(1) follow-status check + dedupe; a composite index on\n // (targetType, targetId) makes the same collection the reverse follower index.\n followEdge: (followerUid: string, targetType: FollowableTargetType, targetId: string): [string, string] =>\n [COLLECTIONS.FOLLOW_EDGES, `${followerUid}__${targetType}__${targetId}`],\n\n // Denormalized follower-count doc for a followable target: `followCounters/{targetType__targetId}`.\n // Backend-maintained (incremented in the follow/unfollow transaction); never written by clients.\n followCounter: (targetType: FollowableTargetType, targetId: string): [string, string] =>\n [COLLECTIONS.FOLLOW_COUNTERS, `${targetType}__${targetId}`],\n\n userLike: (userId: string, postId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.USER_LIKES, NESTED_SUBCOLLECTIONS.LIKE_HISTORY, NESTED_SUBCOLLECTIONS.SQUARE_STREETZ_LIKES, postId],\n\n userAuditionVote: (userId: string, auditionId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.AUDITION_VOTES, auditionId],\n\n // ===== WORK PATHS =====\n workProject: (workProjectId: string): [string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId],\n\n publicWorkProject: (workProjectId: string): [string, string] =>\n [COLLECTIONS.PUBLIC_WORK_PROJECTS, workProjectId],\n\n workProjectTale: (workProjectId: string, taleId: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TALES, taleId],\n\n taleChapter: (workProjectId: string, taleId: string, chapterId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TALES, taleId, NESTED_SUBCOLLECTIONS.TALE_CHAPTERS, chapterId],\n\n // Collection of chapters under a tale (parent of taleChapter).\n taleChapters: (workProjectId: string, taleId: string): [string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TALES, taleId, NESTED_SUBCOLLECTIONS.TALE_CHAPTERS],\n\n workProjectTune: (workProjectId: string, tuneId: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TUNES, tuneId],\n\n tuneTrack: (workProjectId: string, tuneId: string, trackId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TUNES, tuneId, NESTED_SUBCOLLECTIONS.TUNE_TRACKS, trackId],\n\n workProjectTelevision: (workProjectId: string, televisionId: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TELEVISION, televisionId],\n\n televisionEpisode: (workProjectId: string, televisionId: string, episodeId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TELEVISION, televisionId, NESTED_SUBCOLLECTIONS.TELEVISION_EPISODES, episodeId],\n\n // Collection of episodes under a television item (parent of televisionEpisode).\n televisionEpisodes: (workProjectId: string, televisionId: string): [string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TELEVISION, televisionId, NESTED_SUBCOLLECTIONS.TELEVISION_EPISODES],\n\n workProjectGuildmateUser: (workProjectId: string, uid: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.GUILDMATE_USERS, uid],\n\n workProjectPublicGuildmateUser: (workProjectId: string, uid: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.PUBLIC_GUILDMATE_USERS, uid],\n\n workFileFolder: (workProjectId: string, workFileFolderId: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_FILE_FOLDERS, workFileFolderId],\n\n workFile: (workProjectId: string, workFileFolderId: string, workFileId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_FILE_FOLDERS, workFileFolderId, NESTED_SUBCOLLECTIONS.WORK_FILES, workFileId],\n\n stakeShareAuditEvent: (eventId: string): [string, string] =>\n [COLLECTIONS.STAKE_SHARE_AUDIT_EVENTS, eventId],\n\n guildChatChannel: (workProjectId: string, guildChatChannelId: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.GUILD_CHAT_CHANNELS, guildChatChannelId],\n\n // ===== SQUARE PATHS =====\n activePost: (postId: string): [string, string, string, string] =>\n [COLLECTIONS.SQUARE_STREETZ_FEED, NESTED_SUBCOLLECTIONS.ACTIVE_POSTS, NESTED_SUBCOLLECTIONS.SOCIAL_POSTS, postId],\n\n trendingPosts: (): [string, string] =>\n [COLLECTIONS.SQUARE_STREETZ_FEED, NESTED_SUBCOLLECTIONS.TRENDING_POSTS],\n\n // Server-only durable Square announcement outbox job. jobId is DETERMINISTIC —\n // ALWAYS derive it via buildSquareAnnouncementJobId (doc-schemas/square-announcement-jobs.ts).\n squareAnnouncementJob: (jobId: string): [string, string] =>\n [COLLECTIONS.SQUARE_ANNOUNCEMENT_JOBS, jobId],\n\n // ===== HALL PATHS =====\n thresholdItem: (thresholdItemId: string): [string, string] =>\n [COLLECTIONS.THRESHOLD_ITEMS, thresholdItemId],\n\n hallItem: (hallItemId: string): [string, string] =>\n [COLLECTIONS.HALL_ITEMS, hallItemId],\n\n // Published hall sub-item projection (chapter/track/episode). The subcollection\n // segment is constrained to the canonical HALL_ITEM_SUBCOLLECTIONS values — derive\n // it from HALL_ITEM_SUBCOLLECTION_BY_WORK_TYPE, never `workProjectType.toLowerCase()`.\n hallItemType: (hallItemId: string, subcollection: HallItemSubcollection, itemId: string): [string, string, string, string] =>\n [COLLECTIONS.HALL_ITEMS, hallItemId, subcollection, itemId],\n\n // Collection of published hall sub-items for one type (parent of hallItemType). The\n // subcollection segment is the canonical HallItemSubcollection — derive it from\n // HALL_ITEM_SUBCOLLECTION_BY_WORK_TYPE, never `workProjectType.toLowerCase()`.\n hallItemSubItems: (hallItemId: string, subcollection: HallItemSubcollection): [string, string, string] =>\n [COLLECTIONS.HALL_ITEMS, hallItemId, subcollection],\n\n hallContentChangeRequest: (changeRequestId: string): [string, string] =>\n [COLLECTIONS.HALL_CONTENT_CHANGE_REQUESTS, changeRequestId],\n\n // ===== COMMISSION PATHS =====\n commissionListing: (commissionListingId: string): [string, string] =>\n [COLLECTIONS.COMMISSION_LISTINGS, commissionListingId],\n\n commissionProposal: (commissionListingId: string, commissionProposalId: string): [string, string, string, string] =>\n [COLLECTIONS.COMMISSION_LISTINGS, commissionListingId, NESTED_SUBCOLLECTIONS.COMMISSION_PROPOSALS, commissionProposalId],\n\n // ===== AUDITION PATHS =====\n audition: (auditionId: string): [string, string] =>\n [COLLECTIONS.AUDITION_BOARD, auditionId],\n\n auditionEntry: (auditionId: string, auditionEntryId: string): [string, string, string, string] =>\n [COLLECTIONS.AUDITION_BOARD, auditionId, NESTED_SUBCOLLECTIONS.AUDITION_ENTRIES, auditionEntryId],\n\n // ===== REALM PATHS =====\n workRealm: (workRealmId: string): [string, string] =>\n [COLLECTIONS.WORK_REALMS, workRealmId],\n\n // ===== ADMIN & SYSTEM PATHS =====\n adminDispatch: (adminDispatchId: string): [string, string] =>\n [COLLECTIONS.PENDING_ADMIN_DISPATCHES, adminDispatchId],\n\n adminConversationMessage: (adminDispatchId: string, adminDispatchMessageId: string): [string, string, string, string] =>\n [COLLECTIONS.PENDING_ADMIN_DISPATCHES, adminDispatchId, NESTED_SUBCOLLECTIONS.CONVERSATION_MESSAGES, adminDispatchMessageId],\n\n guildInvite: (guildInviteId: string): [string, string] =>\n [COLLECTIONS.GUILD_INVITE_CONVERSATIONS, guildInviteId],\n\n contentReport: (reportId: string): [string, string] =>\n [COLLECTIONS.CONTENT_REPORTS, reportId],\n\n // Fixed-id restricted report-PII subdocs (contentReports/{reportId}/private/{snapshot,narrative}).\n reportPrivateSnapshot: (reportId: string): [string, string, string, string] =>\n [COLLECTIONS.CONTENT_REPORTS, reportId, NESTED_SUBCOLLECTIONS.PRIVATE, SPECIAL_DOCS.REPORT_SNAPSHOT],\n\n reportPrivateNarrative: (reportId: string): [string, string, string, string] =>\n [COLLECTIONS.CONTENT_REPORTS, reportId, NESTED_SUBCOLLECTIONS.PRIVATE, SPECIAL_DOCS.REPORT_NARRATIVE],\n\n activeReportGroup: (groupKey: string): [string, string] =>\n [COLLECTIONS.ACTIVE_REPORT_GROUPS, groupKey],\n\n // Time-sensitive admin-tray \"case needs work\" pin (activeSafetyCaseAlerts/{caseId}).\n safetyCaseAlert: (caseId: string): [string, string] =>\n [COLLECTIONS.ACTIVE_SAFETY_CASE_ALERTS, caseId],\n\n contentViolation: (violationId: string): [string, string] =>\n [COLLECTIONS.CONTENT_VIOLATIONS, violationId],\n\n adminTask: (taskId: string): [string, string] =>\n [COLLECTIONS.ADMIN_TASKS, taskId],\n\n adminTaskForItem: (taskType: string, itemId: string): [string, string] =>\n [COLLECTIONS.ADMIN_TASKS, `${taskType}-${itemId}`],\n\n moderationCascadeManifest: (cascadeId: string): [string, string] =>\n [COLLECTIONS.MODERATION_CASCADE_MANIFESTS, cascadeId],\n\n moderationCascadeChangedDoc: (cascadeId: string, changedDocId: string): [string, string, string, string] =>\n [COLLECTIONS.MODERATION_CASCADE_MANIFESTS, cascadeId, NESTED_SUBCOLLECTIONS.CHANGED_DOCS, changedDocId],\n\n // ===== UTILITY PATHS =====\n reservedDisplayName: (displayNameUppercase: string): [string, string] =>\n [COLLECTIONS.RESERVED_DISPLAY_NAMES, displayNameUppercase],\n\n reservedRealmName: (workingTitleUppercase: string): [string, string] =>\n [COLLECTIONS.RESERVED_REALM_NAMES, workingTitleUppercase],\n\n shortLink: (shortId: string): [string, string] =>\n [COLLECTIONS.SHORT_LINKS, shortId],\n\n pendingMedia: (docId: string): [string, string] =>\n [COLLECTIONS.PENDING_MEDIA, docId],\n\n pendingMediaArchive: (docId: string): [string, string] =>\n [COLLECTIONS.PENDING_MEDIA_ARCHIVE, docId],\n\n mediaAsset: (mediaAssetId: string): [string, string] =>\n [COLLECTIONS.MEDIA_ASSETS, mediaAssetId],\n\n // Server-only durable activation job (prepare → activate → publish + recovery).\n mediaActivationJob: (jobId: string): [string, string] =>\n [COLLECTIONS.MEDIA_ACTIVATION_JOBS, jobId],\n\n // ===== NOTIFICATION REDESIGN (ledger + fanout engine) PATHS =====\n notificationDelivery: (deliveryId: string): [string, string] =>\n [COLLECTIONS.NOTIFICATION_DELIVERIES, deliveryId],\n\n notificationFanoutJob: (jobId: string): [string, string] =>\n [COLLECTIONS.NOTIFICATION_FANOUT_JOBS, jobId],\n\n // ===== CHAT REALTIME SYNC / PROJECTION / COMMAND PATHS =====\n chatChannelAuthProjection: (authPairKey: string): [string, string] =>\n [COLLECTIONS.CHAT_CHANNEL_AUTH_PROJECTIONS, authPairKey],\n\n chatScopeDegraded: (scopeKey: string): [string, string] =>\n [COLLECTIONS.CHAT_SCOPE_DEGRADED, scopeKey],\n\n chatScopeDegradedCause: (scopeKey: string, causeId: string): [string, string, string, string] =>\n [COLLECTIONS.CHAT_SCOPE_DEGRADED, scopeKey, NESTED_SUBCOLLECTIONS.CHAT_SCOPE_DEGRADED_CAUSES, causeId],\n\n chatSyncEvent: (eventId: string): [string, string] =>\n [COLLECTIONS.CHAT_SYNC_EVENTS, eventId],\n\n chatSyncFanoutJob: (jobId: string): [string, string] =>\n [COLLECTIONS.CHAT_SYNC_FANOUT_JOBS, jobId],\n\n chatMessageOutboxCommand: (commandId: string): [string, string] =>\n [COLLECTIONS.CHAT_MESSAGE_OUTBOX, commandId],\n\n chatAdminActionCommand: (requestId: string): [string, string] =>\n [COLLECTIONS.CHAT_ADMIN_ACTION_COMMANDS, requestId],\n\n chatHistoryAnonymizationJob: (jobId: string): [string, string] =>\n [COLLECTIONS.CHAT_HISTORY_ANONYMIZATION_JOBS, jobId],\n\n chatHistoryAnonymizationAffectedChunk: (jobId: string, chunkOrdinal: string): [string, string, string, string] =>\n [COLLECTIONS.CHAT_HISTORY_ANONYMIZATION_JOBS, jobId, NESTED_SUBCOLLECTIONS.CHAT_ANONYMIZATION_AFFECTED_CHUNKS, chunkOrdinal],\n\n // ===== PAYMENT & PLEDGE PATHS =====\n // Public-safe canonical money record. Stripe IDs live on pledgePaymentProviderRef (server-only).\n pledgePayment: (pledgePaymentId: string): [string, string] =>\n [COLLECTIONS.PLEDGE_PAYMENTS, pledgePaymentId],\n\n // Server-only Stripe references (session/PI/charge/dispute IDs). One doc per pledge — singular.\n pledgePaymentProviderRef: (pledgePaymentId: string): [string, string] =>\n [COLLECTIONS.PLEDGE_PAYMENT_PROVIDER_REFS, pledgePaymentId],\n\n // Running-totals singleton — incremented in the Stripe webhook's pledge-record transaction;\n // read (ONE doc) by the public raised-total surfaces instead of a collection-wide aggregation.\n pledgePaymentTotals: (): [string, string] =>\n [COLLECTIONS.PLEDGE_PAYMENT_TOTALS, SPECIAL_DOCS.SUMMARY],\n\n // Idempotency sentinel, keyed by the Stripe event.id.\n processedStripeEvent: (stripeEventId: string): [string, string] =>\n [COLLECTIONS.PROCESSED_STRIPE_EVENTS, stripeEventId],\n\n // Independent integrity record from the ledger verification trigger.\n pledgePaymentLedgerEvent: (ledgerId: string): [string, string] =>\n [COLLECTIONS.PLEDGE_PAYMENT_LEDGER_EVENTS, ledgerId],\n\n // Unrecoverable paid-event repair queue, keyed by the Stripe event.id.\n paymentWebhookQuarantine: (stripeEventId: string): [string, string] =>\n [COLLECTIONS.PAYMENT_WEBHOOK_QUARANTINE, stripeEventId],\n\n // User-initiated pledge refund request (post-launch), keyed by requestId. No Stripe ids on this\n // doc — those live on pledgePaymentProviderRefs.\n pledgeRefundRequest: (requestId: string): [string, string] =>\n [COLLECTIONS.PLEDGE_REFUND_REQUESTS, requestId],\n\n // ===== FEEDBACK & CRAFT PATHS =====\n feedbackSubmission: (feedbackType: string): [string, string] =>\n [COLLECTIONS.FEEDBACK_SUBMISSIONS, feedbackType],\n\n userSuggestion: (feedbackType: string, suggestionId: string): [string, string, string, string] =>\n [COLLECTIONS.FEEDBACK_SUBMISSIONS, feedbackType, NESTED_SUBCOLLECTIONS.USER_SUGGESTIONS, suggestionId],\n\n feedbackAlias: (aliasId: string): [string, string] =>\n [COLLECTIONS.FEEDBACK_ALIASES, aliasId],\n\n feedbackDenylist: (deniedWord: string): [string, string] =>\n [COLLECTIONS.FEEDBACK_DENYLIST, deniedWord],\n\n taggedCraftSkill: (tag: string, compositeId: string): [string, string, string, string] =>\n [COLLECTIONS.CRAFT_SKILLS_BY_TAG, tag, NESTED_SUBCOLLECTIONS.TAGGED_CRAFT_SKILLS, compositeId],\n\n // ===== SYSTEM DATA PATHS =====\n adminList: (): [string, string] =>\n [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.ADMIN_LIST],\n\n futurePlans: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.FUTURE_PLANS],\n\n profanityList: (): [string, string] =>\n [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.PROFANITY_LIST],\n\n reservedUsernames: (): [string, string] =>\n [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.RESERVED_USERNAMES],\n\n blockedFranchiseNames: (): [string, string] =>\n [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.BLOCKED_FRANCHISE_NAMES],\n\n rulesAndAgreements: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.RULES_AND_AGREEMENTS],\n\n termsPage: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.TERMS_PAGE],\n\n privacyPage: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.PRIVACY_PAGE],\n\n takeItDownPageCopy: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.TAKE_IT_DOWN_PAGE_COPY],\n\n appConfig: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.APP_CONFIG],\n\n appModeMarker: (): [string, string] =>\n [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.APP_MODE],\n\n // Backend-only post-commit auth-effect reconcile queue entry, keyed by the affected uid.\n statusReconcileQueueEntry: (uid: string): [string, string] =>\n [COLLECTIONS.STATUS_RECONCILE_QUEUE, uid],\n\n // ===== TRUST & SAFETY — child-safety case spine (§A1b, §A2) =====\n childSafetyCaseListEntry: (caseId: string): [string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASE_LIST, caseId],\n\n childSafetyCase: (caseId: string): [string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId],\n\n childSafetySourceSignal: (caseId: string, signalId: string): [string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_SOURCE_SIGNALS, signalId],\n\n // Collection of source-signal rows for a case (parent of childSafetySourceSignal).\n childSafetySourceSignals: (caseId: string): [string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_SOURCE_SIGNALS],\n\n childSafetyDecision: (caseId: string, decisionId: string): [string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_DECISIONS, decisionId],\n\n // Collection of decision rows for a case (parent of childSafetyDecision).\n childSafetyDecisions: (caseId: string): [string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_DECISIONS],\n\n childSafetyDecisionView: (caseId: string, decisionId: string, viewId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_DECISIONS, decisionId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_DECISION_VIEWS, viewId],\n\n childSafetyCaseAccount: (caseId: string, uid: string): [string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_CASE_ACCOUNTS, uid],\n\n // Collection of per-account rows for a case (parent of childSafetyCaseAccount).\n childSafetyCaseAccounts: (caseId: string): [string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_CASE_ACCOUNTS],\n\n childSafetyCaseAccountHistory: (caseId: string, uid: string, historyId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_CASE_ACCOUNTS, uid, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_CASE_ACCOUNT_HISTORY, historyId],\n\n childSafetyNcmecSubmission: (caseId: string, submissionId: string): [string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_NCMEC_SUBMISSIONS, submissionId],\n\n childSafetyNcmecSubmissionFile: (caseId: string, submissionId: string, fileId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_NCMEC_SUBMISSIONS, submissionId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_NCMEC_SUBMISSION_FILES, fileId],\n\n childSafetyLegalProcessEvent: (caseId: string, eventId: string): [string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_LEGAL_PROCESS, eventId],\n\n childSafetyOwningAlias: (aliasId: string): [string, string] =>\n [COLLECTIONS.CHILD_SAFETY_OWNING_ALIASES, aliasId],\n\n // ===== TRUST & SAFETY — holds + resource commands (§A3) =====\n // Composite doc id caseId__resourceKeyHash — a single {holdRefId} segment.\n safetyHoldRef: (holdRefId: string): [string, string] =>\n [COLLECTIONS.SAFETY_HOLD_REFS, holdRefId],\n\n safetyHoldResource: (resourceKeyHash: string): [string, string] =>\n [COLLECTIONS.SAFETY_HOLD_RESOURCES, resourceKeyHash],\n\n // Composite doc id resourceKeyHash__commandId — a single {commandDocId} segment.\n safetyResourceCommand: (commandDocId: string): [string, string] =>\n [COLLECTIONS.SAFETY_RESOURCE_COMMANDS, commandDocId],\n\n safetyResourceCommandAuthorizedRequest: (commandDocId: string, requestId: string): [string, string, string, string] =>\n [COLLECTIONS.SAFETY_RESOURCE_COMMANDS, commandDocId, NESTED_SUBCOLLECTIONS.SAFETY_RESOURCE_COMMAND_AUTHORIZED_REQUESTS, requestId],\n\n safetyResourceCommandBypassRef: (commandDocId: string, refId: string): [string, string, string, string] =>\n [COLLECTIONS.SAFETY_RESOURCE_COMMANDS, commandDocId, NESTED_SUBCOLLECTIONS.SAFETY_RESOURCE_COMMAND_BYPASS_REFS, refId],\n\n // ===== TRUST & SAFETY — evidence + provenance (§A4, §A6) =====\n safetyEvidenceManifest: (manifestId: string): [string, string] =>\n [COLLECTIONS.SAFETY_EVIDENCE_MANIFESTS, manifestId],\n\n safetyEvidenceJob: (jobId: string): [string, string] =>\n [COLLECTIONS.SAFETY_EVIDENCE_JOBS, jobId],\n\n safetyEvidenceJobItem: (jobId: string, itemId: string): [string, string, string, string] =>\n [COLLECTIONS.SAFETY_EVIDENCE_JOBS, jobId, NESTED_SUBCOLLECTIONS.SAFETY_EVIDENCE_JOB_ITEMS, itemId],\n\n safetyEvidenceJobDisposition: (jobId: string, locationId: string): [string, string, string, string] =>\n [COLLECTIONS.SAFETY_EVIDENCE_JOBS, jobId, NESTED_SUBCOLLECTIONS.SAFETY_EVIDENCE_JOB_DISPOSITION, locationId],\n\n eventProvenance: (eventId: string): [string, string] =>\n [COLLECTIONS.EVENT_PROVENANCE, eventId],\n\n // ===== TRUST & SAFETY — sagas + closure (§A5) =====\n quarantineSagaJob: (caseId: string): [string, string] =>\n [COLLECTIONS.QUARANTINE_SAGA_JOBS, caseId],\n\n quarantineSagaRelatedAsset: (caseId: string, assetId: string): [string, string, string, string] =>\n [COLLECTIONS.QUARANTINE_SAGA_JOBS, caseId, NESTED_SUBCOLLECTIONS.QUARANTINE_SAGA_RELATED_ASSETS, assetId],\n\n // Composite doc id caseId__submissionId — a single {ncmecJobId} segment.\n ncmecSubmissionJob: (ncmecJobId: string): [string, string] =>\n [COLLECTIONS.NCMEC_SUBMISSION_JOBS, ncmecJobId],\n\n // Composite doc id caseId__uid — a single {accountActionCommandId} segment.\n accountActionCommand: (accountActionCommandId: string): [string, string] =>\n [COLLECTIONS.ACCOUNT_ACTION_COMMANDS, accountActionCommandId],\n\n // ===== TRUST & SAFETY — SLA monitors + heartbeat (§A8) =====\n // Composite doc id {caseId|requestId}__{monitorKind} — a single {monitorId} segment.\n safetySlaMonitor: (monitorId: string): [string, string] =>\n [COLLECTIONS.SAFETY_SLA_MONITORS, monitorId],\n\n // Singleton: safetyMonitorHeartbeat/global.\n safetyMonitorHeartbeat: (): [string, string] =>\n [COLLECTIONS.SAFETY_MONITOR_HEARTBEAT, SPECIAL_DOCS.SAFETY_MONITOR_HEARTBEAT_GLOBAL],\n\n // ===== TRUST & SAFETY — age attestation nonces (§A7) =====\n ageAttestationNonce: (nonceHash: string): [string, string] =>\n [COLLECTIONS.AGE_ATTESTATION_NONCES, nonceHash],\n\n // ===== TRUST & SAFETY — per-operator privileged-reviewer security (§A11 [M-6] / [H-17]) =====\n // Backend-only per-operator docs keyed by uid (mirrors operatorStepUp/{uid}).\n privilegedReviewerPasskeyProfile: (uid: string): [string, string] =>\n [COLLECTIONS.PRIVILEGED_REVIEWER_PASSKEY_PROFILES, uid],\n\n privilegedReviewerCapabilityGrant: (uid: string): [string, string] =>\n [COLLECTIONS.PRIVILEGED_REVIEWER_CAPABILITY_GRANTS, uid],\n\n // ===== TRUST & SAFETY — NCII / TAKE IT DOWN (§A11) =====\n nciiAllegation: (allegationId: string): [string, string] =>\n [COLLECTIONS.NCII_ALLEGATIONS, allegationId],\n\n takeItDownRequest: (requestId: string): [string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId],\n\n // Fixed-id requester PII subdoc (takeItDownRequests/{requestId}/private/requester).\n takeItDownRequesterPrivate: (requestId: string): [string, string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.PRIVATE, SPECIAL_DOCS.TAKE_IT_DOWN_REQUESTER],\n\n takeItDownSubmission: (requestId: string, submissionId: string): [string, string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_SUBMISSIONS, submissionId],\n\n // Collection of submissions under a request (parent of takeItDownSubmission).\n takeItDownSubmissions: (requestId: string): [string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_SUBMISSIONS],\n\n takeItDownValidityDecision: (requestId: string, decisionId: string): [string, string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_VALIDITY_DECISIONS, decisionId],\n\n takeItDownRequestAction: (requestId: string, actionId: string): [string, string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_ACTIONS, actionId],\n\n takeItDownEvidence: (requestId: string, evidenceId: string): [string, string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_EVIDENCE, evidenceId],\n\n // [H-01] a retained-but-unrecorded NCII-evidence inventory row (top-level; id is deterministic on\n // bucket+key+generation so a re-fire is idempotent).\n nciiRetainedEvidenceInventory: (inventoryId: string): [string, string] =>\n [COLLECTIONS.NCII_RETAINED_EVIDENCE_INVENTORY, inventoryId],\n\n // [H-01] dead-letter entry for an inventory row that could not be written to the primary\n // nciiRetainedEvidenceInventory collection (id mirrors the primary row id for traceability).\n nciiInventoryDeadLetter: (inventoryId: string): [string, string] =>\n [COLLECTIONS.NCII_INVENTORY_DEAD_LETTER, inventoryId],\n\n nciiCase: (caseId: string): [string, string] =>\n [COLLECTIONS.NCII_CASES, caseId],\n\n nciiCaseAllegationLink: (caseId: string, allegationId: string): [string, string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_ALLEGATION_LINKS, allegationId],\n\n // Collection of allegation links for a case (parent of nciiCaseAllegationLink).\n nciiCaseAllegationLinks: (caseId: string): [string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_ALLEGATION_LINKS],\n\n nciiCaseRequestLink: (caseId: string, requestId: string): [string, string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_REQUEST_LINKS, requestId],\n\n // Collection of request links for a case (parent of nciiCaseRequestLink).\n nciiCaseRequestLinks: (caseId: string): [string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_REQUEST_LINKS],\n\n // Append-only NCII case closure/reopen events.\n nciiCaseClosureEvent: (caseId: string, eventId: string): [string, string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_CLOSURE_EVENTS, eventId],\n\n // Collection of closure/reopen events for a case (parent of nciiCaseClosureEvent).\n nciiCaseClosureEvents: (caseId: string): [string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_CLOSURE_EVENTS],\n\n nciiCaseRemovalAction: (caseId: string, actionId: string): [string, string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_REMOVAL_ACTIONS, actionId],\n\n nciiBlockedHash: (caseId: string, hashId: string): [string, string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_BLOCKED_HASHES, hashId],\n\n nciiTemporaryHold: (holdId: string): [string, string] =>\n [COLLECTIONS.NCII_TEMPORARY_HOLDS, holdId],\n\n nciiRemovalJob: (jobId: string): [string, string] =>\n [COLLECTIONS.NCII_REMOVAL_JOBS, jobId],\n\n nciiRemovalTarget: (jobId: string, targetKeyHash: string): [string, string, string, string] =>\n [COLLECTIONS.NCII_REMOVAL_JOBS, jobId, NESTED_SUBCOLLECTIONS.NCII_REMOVAL_TARGETS, targetKeyHash],\n\n // ===== TRUST & SAFETY — _serverData (server-only) singletons (§A7, §A11) =====\n // Moved from _config (public) to _serverData (BACKEND-108 — Cloud-Functions-only readers).\n agePolicyConfig: (): [string, string] =>\n [COLLECTIONS.SERVER_DATA, SPECIAL_DOCS.AGE_POLICY],\n\n nciiPolicyConfig: (): [string, string] =>\n [COLLECTIONS.SERVER_DATA, SPECIAL_DOCS.NCII_POLICY],\n\n privilegedReviewerSecurityConfig: (): [string, string] =>\n [COLLECTIONS.SERVER_DATA, SPECIAL_DOCS.PRIVILEGED_REVIEWER_SECURITY],\n} as const;\n"]}
1
+ {"version":3,"file":"path-builders.js","sourceRoot":"","sources":["../../src/paths/path-builders.ts"],"names":[],"mappings":"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","sourcesContent":["// Document path builders — returns tuples of path segments.\n//\n// Frontend (Web SDK): doc(db, ...PATH_BUILDERS.userProfile(userId))\n// Backend (Admin SDK): db.doc(toPath(PATH_BUILDERS.userProfile(userId)))\n\nimport {\n COLLECTIONS,\n USER_SUBCOLLECTIONS,\n WORK_PROJECT_SUBCOLLECTIONS,\n NESTED_SUBCOLLECTIONS,\n SPECIAL_DOCS,\n type HallItemSubcollection,\n} from './collections.js';\nimport type { FollowableTargetType } from '../schemas/social.js';\n\nexport const PATH_BUILDERS = {\n // ===== USER PATHS =====\n userProfile: (userId: string): [string, string] =>\n [COLLECTIONS.USER_PROFILES, userId],\n\n // Backend-mirrored public identity projection (publicUsers/{uid}).\n publicUser: (uid: string): [string, string] =>\n [COLLECTIONS.PUBLIC_USERS, uid],\n\n // Per-user account-deletion / erasure request, keyed by uid.\n accountDeletionRequest: (uid: string): [string, string] =>\n [COLLECTIONS.ACCOUNT_DELETION_REQUESTS, uid],\n\n userMentionHistoryEntry: (userId: string, entryId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.MENTION_HISTORY, entryId],\n\n userCraftSkill: (userId: string, craftSkillId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.PROFILE_CRAFT_SKILLS, craftSkillId],\n\n userPrivateData: (userId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.PRIVATE_DATA, userId],\n\n userMetadata: (userId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.USER_METADATA, SPECIAL_DOCS.NOTIFICATION_SETTINGS],\n\n // Per-user Hall viewing-state doc (hall-viewing-experience Area 2, ruled 2026-07-04):\n // userProfiles/{uid}/privateData/hallLibraryPreferences. Fixed-id privateData subdoc,\n // same shape as userMetadata above.\n hallLibraryPreferences: (userId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.PRIVATE_DATA, SPECIAL_DOCS.HALL_LIBRARY_PREFERENCES],\n\n // Generic follow edge: top-level `followEdges/{followerUid__targetType__targetId}`.\n // Deterministic ID = O(1) follow-status check + dedupe; a composite index on\n // (targetType, targetId) makes the same collection the reverse follower index.\n followEdge: (followerUid: string, targetType: FollowableTargetType, targetId: string): [string, string] =>\n [COLLECTIONS.FOLLOW_EDGES, `${followerUid}__${targetType}__${targetId}`],\n\n // Denormalized follower-count doc for a followable target: `followCounters/{targetType__targetId}`.\n // Backend-maintained (incremented in the follow/unfollow transaction); never written by clients.\n followCounter: (targetType: FollowableTargetType, targetId: string): [string, string] =>\n [COLLECTIONS.FOLLOW_COUNTERS, `${targetType}__${targetId}`],\n\n userLike: (userId: string, postId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.USER_LIKES, NESTED_SUBCOLLECTIONS.LIKE_HISTORY, NESTED_SUBCOLLECTIONS.SQUARE_STREETZ_LIKES, postId],\n\n userAuditionVote: (userId: string, auditionId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.AUDITION_VOTES, auditionId],\n\n // ===== WORK PATHS =====\n workProject: (workProjectId: string): [string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId],\n\n publicWorkProject: (workProjectId: string): [string, string] =>\n [COLLECTIONS.PUBLIC_WORK_PROJECTS, workProjectId],\n\n workProjectTale: (workProjectId: string, taleId: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TALES, taleId],\n\n taleChapter: (workProjectId: string, taleId: string, chapterId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TALES, taleId, NESTED_SUBCOLLECTIONS.TALE_CHAPTERS, chapterId],\n\n // Collection of chapters under a tale (parent of taleChapter).\n taleChapters: (workProjectId: string, taleId: string): [string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TALES, taleId, NESTED_SUBCOLLECTIONS.TALE_CHAPTERS],\n\n workProjectTune: (workProjectId: string, tuneId: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TUNES, tuneId],\n\n tuneTrack: (workProjectId: string, tuneId: string, trackId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TUNES, tuneId, NESTED_SUBCOLLECTIONS.TUNE_TRACKS, trackId],\n\n workProjectTelevision: (workProjectId: string, televisionId: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TELEVISION, televisionId],\n\n televisionEpisode: (workProjectId: string, televisionId: string, episodeId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TELEVISION, televisionId, NESTED_SUBCOLLECTIONS.TELEVISION_EPISODES, episodeId],\n\n // Collection of episodes under a television item (parent of televisionEpisode).\n televisionEpisodes: (workProjectId: string, televisionId: string): [string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TELEVISION, televisionId, NESTED_SUBCOLLECTIONS.TELEVISION_EPISODES],\n\n workProjectGuildmateUser: (workProjectId: string, uid: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.GUILDMATE_USERS, uid],\n\n workProjectPublicGuildmateUser: (workProjectId: string, uid: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.PUBLIC_GUILDMATE_USERS, uid],\n\n workFileFolder: (workProjectId: string, workFileFolderId: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_FILE_FOLDERS, workFileFolderId],\n\n workFile: (workProjectId: string, workFileFolderId: string, workFileId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_FILE_FOLDERS, workFileFolderId, NESTED_SUBCOLLECTIONS.WORK_FILES, workFileId],\n\n stakeShareAuditEvent: (eventId: string): [string, string] =>\n [COLLECTIONS.STAKE_SHARE_AUDIT_EVENTS, eventId],\n\n guildChatChannel: (workProjectId: string, guildChatChannelId: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.GUILD_CHAT_CHANNELS, guildChatChannelId],\n\n // ===== SQUARE PATHS =====\n activePost: (postId: string): [string, string, string, string] =>\n [COLLECTIONS.SQUARE_STREETZ_FEED, NESTED_SUBCOLLECTIONS.ACTIVE_POSTS, NESTED_SUBCOLLECTIONS.SOCIAL_POSTS, postId],\n\n trendingPosts: (): [string, string] =>\n [COLLECTIONS.SQUARE_STREETZ_FEED, NESTED_SUBCOLLECTIONS.TRENDING_POSTS],\n\n // Server-only durable Square announcement outbox job. jobId is DETERMINISTIC —\n // ALWAYS derive it via buildSquareAnnouncementJobId (doc-schemas/square-announcement-jobs.ts).\n squareAnnouncementJob: (jobId: string): [string, string] =>\n [COLLECTIONS.SQUARE_ANNOUNCEMENT_JOBS, jobId],\n\n // ===== HALL PATHS =====\n thresholdItem: (thresholdItemId: string): [string, string] =>\n [COLLECTIONS.THRESHOLD_ITEMS, thresholdItemId],\n\n hallItem: (hallItemId: string): [string, string] =>\n [COLLECTIONS.HALL_ITEMS, hallItemId],\n\n // Published hall sub-item projection (chapter/track/episode). The subcollection\n // segment is constrained to the canonical HALL_ITEM_SUBCOLLECTIONS values — derive\n // it from HALL_ITEM_SUBCOLLECTION_BY_WORK_TYPE, never `workProjectType.toLowerCase()`.\n hallItemType: (hallItemId: string, subcollection: HallItemSubcollection, itemId: string): [string, string, string, string] =>\n [COLLECTIONS.HALL_ITEMS, hallItemId, subcollection, itemId],\n\n // Collection of published hall sub-items for one type (parent of hallItemType). The\n // subcollection segment is the canonical HallItemSubcollection — derive it from\n // HALL_ITEM_SUBCOLLECTION_BY_WORK_TYPE, never `workProjectType.toLowerCase()`.\n hallItemSubItems: (hallItemId: string, subcollection: HallItemSubcollection): [string, string, string] =>\n [COLLECTIONS.HALL_ITEMS, hallItemId, subcollection],\n\n hallContentChangeRequest: (changeRequestId: string): [string, string] =>\n [COLLECTIONS.HALL_CONTENT_CHANGE_REQUESTS, changeRequestId],\n\n // ===== COMMISSION PATHS =====\n commissionListing: (commissionListingId: string): [string, string] =>\n [COLLECTIONS.COMMISSION_LISTINGS, commissionListingId],\n\n commissionProposal: (commissionListingId: string, commissionProposalId: string): [string, string, string, string] =>\n [COLLECTIONS.COMMISSION_LISTINGS, commissionListingId, NESTED_SUBCOLLECTIONS.COMMISSION_PROPOSALS, commissionProposalId],\n\n // ===== AUDITION PATHS =====\n audition: (auditionId: string): [string, string] =>\n [COLLECTIONS.AUDITION_BOARD, auditionId],\n\n auditionEntry: (auditionId: string, auditionEntryId: string): [string, string, string, string] =>\n [COLLECTIONS.AUDITION_BOARD, auditionId, NESTED_SUBCOLLECTIONS.AUDITION_ENTRIES, auditionEntryId],\n\n // ===== REALM PATHS =====\n workRealm: (workRealmId: string): [string, string] =>\n [COLLECTIONS.WORK_REALMS, workRealmId],\n\n // ===== ADMIN & SYSTEM PATHS =====\n adminDispatch: (adminDispatchId: string): [string, string] =>\n [COLLECTIONS.PENDING_ADMIN_DISPATCHES, adminDispatchId],\n\n adminConversationMessage: (adminDispatchId: string, adminDispatchMessageId: string): [string, string, string, string] =>\n [COLLECTIONS.PENDING_ADMIN_DISPATCHES, adminDispatchId, NESTED_SUBCOLLECTIONS.CONVERSATION_MESSAGES, adminDispatchMessageId],\n\n guildInvite: (guildInviteId: string): [string, string] =>\n [COLLECTIONS.GUILD_INVITE_CONVERSATIONS, guildInviteId],\n\n // ===== CONVERSATION FILES (the two supported ConversationFileRef scopes) =====\n // Application and backend code must NOT assemble these paths independently.\n // `conversationFileId` is deterministic — it IS the pendingMedia id.\n guildInviteConversationFile: (guildInviteId: string, conversationFileId: string): [string, string, string, string] =>\n [COLLECTIONS.GUILD_INVITE_CONVERSATIONS, guildInviteId, NESTED_SUBCOLLECTIONS.CONVERSATION_FILES, conversationFileId],\n\n adminDispatchConversationFile: (adminDispatchId: string, conversationFileId: string): [string, string, string, string] =>\n [COLLECTIONS.PENDING_ADMIN_DISPATCHES, adminDispatchId, NESTED_SUBCOLLECTIONS.CONVERSATION_FILES, conversationFileId],\n\n contentReport: (reportId: string): [string, string] =>\n [COLLECTIONS.CONTENT_REPORTS, reportId],\n\n // Fixed-id restricted report-PII subdocs (contentReports/{reportId}/private/{snapshot,narrative}).\n reportPrivateSnapshot: (reportId: string): [string, string, string, string] =>\n [COLLECTIONS.CONTENT_REPORTS, reportId, NESTED_SUBCOLLECTIONS.PRIVATE, SPECIAL_DOCS.REPORT_SNAPSHOT],\n\n reportPrivateNarrative: (reportId: string): [string, string, string, string] =>\n [COLLECTIONS.CONTENT_REPORTS, reportId, NESTED_SUBCOLLECTIONS.PRIVATE, SPECIAL_DOCS.REPORT_NARRATIVE],\n\n activeReportGroup: (groupKey: string): [string, string] =>\n [COLLECTIONS.ACTIVE_REPORT_GROUPS, groupKey],\n\n // Time-sensitive admin-tray \"case needs work\" pin (activeSafetyCaseAlerts/{caseId}).\n safetyCaseAlert: (caseId: string): [string, string] =>\n [COLLECTIONS.ACTIVE_SAFETY_CASE_ALERTS, caseId],\n\n contentViolation: (violationId: string): [string, string] =>\n [COLLECTIONS.CONTENT_VIOLATIONS, violationId],\n\n adminTask: (taskId: string): [string, string] =>\n [COLLECTIONS.ADMIN_TASKS, taskId],\n\n adminTaskForItem: (taskType: string, itemId: string): [string, string] =>\n [COLLECTIONS.ADMIN_TASKS, `${taskType}-${itemId}`],\n\n moderationCascadeManifest: (cascadeId: string): [string, string] =>\n [COLLECTIONS.MODERATION_CASCADE_MANIFESTS, cascadeId],\n\n moderationCascadeChangedDoc: (cascadeId: string, changedDocId: string): [string, string, string, string] =>\n [COLLECTIONS.MODERATION_CASCADE_MANIFESTS, cascadeId, NESTED_SUBCOLLECTIONS.CHANGED_DOCS, changedDocId],\n\n // ===== UTILITY PATHS =====\n reservedDisplayName: (displayNameUppercase: string): [string, string] =>\n [COLLECTIONS.RESERVED_DISPLAY_NAMES, displayNameUppercase],\n\n reservedRealmName: (workingTitleUppercase: string): [string, string] =>\n [COLLECTIONS.RESERVED_REALM_NAMES, workingTitleUppercase],\n\n shortLink: (shortId: string): [string, string] =>\n [COLLECTIONS.SHORT_LINKS, shortId],\n\n pendingMedia: (docId: string): [string, string] =>\n [COLLECTIONS.PENDING_MEDIA, docId],\n\n pendingMediaArchive: (docId: string): [string, string] =>\n [COLLECTIONS.PENDING_MEDIA_ARCHIVE, docId],\n\n mediaAsset: (mediaAssetId: string): [string, string] =>\n [COLLECTIONS.MEDIA_ASSETS, mediaAssetId],\n\n // Server-only durable activation job (prepare → activate → publish + recovery).\n mediaActivationJob: (jobId: string): [string, string] =>\n [COLLECTIONS.MEDIA_ACTIVATION_JOBS, jobId],\n\n // ===== NOTIFICATION REDESIGN (ledger + fanout engine) PATHS =====\n notificationDelivery: (deliveryId: string): [string, string] =>\n [COLLECTIONS.NOTIFICATION_DELIVERIES, deliveryId],\n\n notificationFanoutJob: (jobId: string): [string, string] =>\n [COLLECTIONS.NOTIFICATION_FANOUT_JOBS, jobId],\n\n // ===== CHAT REALTIME SYNC / PROJECTION / COMMAND PATHS =====\n chatChannelAuthProjection: (authPairKey: string): [string, string] =>\n [COLLECTIONS.CHAT_CHANNEL_AUTH_PROJECTIONS, authPairKey],\n\n chatScopeDegraded: (scopeKey: string): [string, string] =>\n [COLLECTIONS.CHAT_SCOPE_DEGRADED, scopeKey],\n\n chatScopeDegradedCause: (scopeKey: string, causeId: string): [string, string, string, string] =>\n [COLLECTIONS.CHAT_SCOPE_DEGRADED, scopeKey, NESTED_SUBCOLLECTIONS.CHAT_SCOPE_DEGRADED_CAUSES, causeId],\n\n chatSyncEvent: (eventId: string): [string, string] =>\n [COLLECTIONS.CHAT_SYNC_EVENTS, eventId],\n\n chatSyncFanoutJob: (jobId: string): [string, string] =>\n [COLLECTIONS.CHAT_SYNC_FANOUT_JOBS, jobId],\n\n chatMessageOutboxCommand: (commandId: string): [string, string] =>\n [COLLECTIONS.CHAT_MESSAGE_OUTBOX, commandId],\n\n chatAdminActionCommand: (requestId: string): [string, string] =>\n [COLLECTIONS.CHAT_ADMIN_ACTION_COMMANDS, requestId],\n\n chatHistoryAnonymizationJob: (jobId: string): [string, string] =>\n [COLLECTIONS.CHAT_HISTORY_ANONYMIZATION_JOBS, jobId],\n\n chatHistoryAnonymizationAffectedChunk: (jobId: string, chunkOrdinal: string): [string, string, string, string] =>\n [COLLECTIONS.CHAT_HISTORY_ANONYMIZATION_JOBS, jobId, NESTED_SUBCOLLECTIONS.CHAT_ANONYMIZATION_AFFECTED_CHUNKS, chunkOrdinal],\n\n // ===== PAYMENT & PLEDGE PATHS =====\n // Public-safe canonical money record. Stripe IDs live on pledgePaymentProviderRef (server-only).\n pledgePayment: (pledgePaymentId: string): [string, string] =>\n [COLLECTIONS.PLEDGE_PAYMENTS, pledgePaymentId],\n\n // Server-only Stripe references (session/PI/charge/dispute IDs). One doc per pledge — singular.\n pledgePaymentProviderRef: (pledgePaymentId: string): [string, string] =>\n [COLLECTIONS.PLEDGE_PAYMENT_PROVIDER_REFS, pledgePaymentId],\n\n // Running-totals singleton — incremented in the Stripe webhook's pledge-record transaction;\n // read (ONE doc) by the public raised-total surfaces instead of a collection-wide aggregation.\n pledgePaymentTotals: (): [string, string] =>\n [COLLECTIONS.PLEDGE_PAYMENT_TOTALS, SPECIAL_DOCS.SUMMARY],\n\n // Idempotency sentinel, keyed by the Stripe event.id.\n processedStripeEvent: (stripeEventId: string): [string, string] =>\n [COLLECTIONS.PROCESSED_STRIPE_EVENTS, stripeEventId],\n\n // Independent integrity record from the ledger verification trigger.\n pledgePaymentLedgerEvent: (ledgerId: string): [string, string] =>\n [COLLECTIONS.PLEDGE_PAYMENT_LEDGER_EVENTS, ledgerId],\n\n // Unrecoverable paid-event repair queue, keyed by the Stripe event.id.\n paymentWebhookQuarantine: (stripeEventId: string): [string, string] =>\n [COLLECTIONS.PAYMENT_WEBHOOK_QUARANTINE, stripeEventId],\n\n // User-initiated pledge refund request (post-launch), keyed by requestId. No Stripe ids on this\n // doc — those live on pledgePaymentProviderRefs.\n pledgeRefundRequest: (requestId: string): [string, string] =>\n [COLLECTIONS.PLEDGE_REFUND_REQUESTS, requestId],\n\n // ===== FEEDBACK & CRAFT PATHS =====\n feedbackSubmission: (feedbackType: string): [string, string] =>\n [COLLECTIONS.FEEDBACK_SUBMISSIONS, feedbackType],\n\n userSuggestion: (feedbackType: string, suggestionId: string): [string, string, string, string] =>\n [COLLECTIONS.FEEDBACK_SUBMISSIONS, feedbackType, NESTED_SUBCOLLECTIONS.USER_SUGGESTIONS, suggestionId],\n\n feedbackAlias: (aliasId: string): [string, string] =>\n [COLLECTIONS.FEEDBACK_ALIASES, aliasId],\n\n feedbackDenylist: (deniedWord: string): [string, string] =>\n [COLLECTIONS.FEEDBACK_DENYLIST, deniedWord],\n\n taggedCraftSkill: (tag: string, compositeId: string): [string, string, string, string] =>\n [COLLECTIONS.CRAFT_SKILLS_BY_TAG, tag, NESTED_SUBCOLLECTIONS.TAGGED_CRAFT_SKILLS, compositeId],\n\n // ===== SYSTEM DATA PATHS =====\n adminList: (): [string, string] =>\n [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.ADMIN_LIST],\n\n futurePlans: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.FUTURE_PLANS],\n\n profanityList: (): [string, string] =>\n [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.PROFANITY_LIST],\n\n reservedUsernames: (): [string, string] =>\n [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.RESERVED_USERNAMES],\n\n blockedFranchiseNames: (): [string, string] =>\n [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.BLOCKED_FRANCHISE_NAMES],\n\n rulesAndAgreements: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.RULES_AND_AGREEMENTS],\n\n termsPage: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.TERMS_PAGE],\n\n privacyPage: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.PRIVACY_PAGE],\n\n takeItDownPageCopy: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.TAKE_IT_DOWN_PAGE_COPY],\n\n appConfig: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.APP_CONFIG],\n\n appModeMarker: (): [string, string] =>\n [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.APP_MODE],\n\n // Backend-only post-commit auth-effect reconcile queue entry, keyed by the affected uid.\n statusReconcileQueueEntry: (uid: string): [string, string] =>\n [COLLECTIONS.STATUS_RECONCILE_QUEUE, uid],\n\n // ===== TRUST & SAFETY — child-safety case spine (§A1b, §A2) =====\n childSafetyCaseListEntry: (caseId: string): [string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASE_LIST, caseId],\n\n childSafetyCase: (caseId: string): [string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId],\n\n childSafetySourceSignal: (caseId: string, signalId: string): [string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_SOURCE_SIGNALS, signalId],\n\n // Collection of source-signal rows for a case (parent of childSafetySourceSignal).\n childSafetySourceSignals: (caseId: string): [string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_SOURCE_SIGNALS],\n\n childSafetyDecision: (caseId: string, decisionId: string): [string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_DECISIONS, decisionId],\n\n // Collection of decision rows for a case (parent of childSafetyDecision).\n childSafetyDecisions: (caseId: string): [string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_DECISIONS],\n\n childSafetyDecisionView: (caseId: string, decisionId: string, viewId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_DECISIONS, decisionId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_DECISION_VIEWS, viewId],\n\n childSafetyCaseAccount: (caseId: string, uid: string): [string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_CASE_ACCOUNTS, uid],\n\n // Collection of per-account rows for a case (parent of childSafetyCaseAccount).\n childSafetyCaseAccounts: (caseId: string): [string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_CASE_ACCOUNTS],\n\n childSafetyCaseAccountHistory: (caseId: string, uid: string, historyId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_CASE_ACCOUNTS, uid, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_CASE_ACCOUNT_HISTORY, historyId],\n\n childSafetyNcmecSubmission: (caseId: string, submissionId: string): [string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_NCMEC_SUBMISSIONS, submissionId],\n\n childSafetyNcmecSubmissionFile: (caseId: string, submissionId: string, fileId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_NCMEC_SUBMISSIONS, submissionId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_NCMEC_SUBMISSION_FILES, fileId],\n\n childSafetyLegalProcessEvent: (caseId: string, eventId: string): [string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_LEGAL_PROCESS, eventId],\n\n childSafetyOwningAlias: (aliasId: string): [string, string] =>\n [COLLECTIONS.CHILD_SAFETY_OWNING_ALIASES, aliasId],\n\n // ===== TRUST & SAFETY — holds + resource commands (§A3) =====\n // Composite doc id caseId__resourceKeyHash — a single {holdRefId} segment.\n safetyHoldRef: (holdRefId: string): [string, string] =>\n [COLLECTIONS.SAFETY_HOLD_REFS, holdRefId],\n\n safetyHoldResource: (resourceKeyHash: string): [string, string] =>\n [COLLECTIONS.SAFETY_HOLD_RESOURCES, resourceKeyHash],\n\n // Composite doc id resourceKeyHash__commandId — a single {commandDocId} segment.\n safetyResourceCommand: (commandDocId: string): [string, string] =>\n [COLLECTIONS.SAFETY_RESOURCE_COMMANDS, commandDocId],\n\n safetyResourceCommandAuthorizedRequest: (commandDocId: string, requestId: string): [string, string, string, string] =>\n [COLLECTIONS.SAFETY_RESOURCE_COMMANDS, commandDocId, NESTED_SUBCOLLECTIONS.SAFETY_RESOURCE_COMMAND_AUTHORIZED_REQUESTS, requestId],\n\n safetyResourceCommandBypassRef: (commandDocId: string, refId: string): [string, string, string, string] =>\n [COLLECTIONS.SAFETY_RESOURCE_COMMANDS, commandDocId, NESTED_SUBCOLLECTIONS.SAFETY_RESOURCE_COMMAND_BYPASS_REFS, refId],\n\n // ===== TRUST & SAFETY — evidence + provenance (§A4, §A6) =====\n safetyEvidenceManifest: (manifestId: string): [string, string] =>\n [COLLECTIONS.SAFETY_EVIDENCE_MANIFESTS, manifestId],\n\n safetyEvidenceJob: (jobId: string): [string, string] =>\n [COLLECTIONS.SAFETY_EVIDENCE_JOBS, jobId],\n\n safetyEvidenceJobItem: (jobId: string, itemId: string): [string, string, string, string] =>\n [COLLECTIONS.SAFETY_EVIDENCE_JOBS, jobId, NESTED_SUBCOLLECTIONS.SAFETY_EVIDENCE_JOB_ITEMS, itemId],\n\n safetyEvidenceJobDisposition: (jobId: string, locationId: string): [string, string, string, string] =>\n [COLLECTIONS.SAFETY_EVIDENCE_JOBS, jobId, NESTED_SUBCOLLECTIONS.SAFETY_EVIDENCE_JOB_DISPOSITION, locationId],\n\n eventProvenance: (eventId: string): [string, string] =>\n [COLLECTIONS.EVENT_PROVENANCE, eventId],\n\n // ===== TRUST & SAFETY — sagas + closure (§A5) =====\n quarantineSagaJob: (caseId: string): [string, string] =>\n [COLLECTIONS.QUARANTINE_SAGA_JOBS, caseId],\n\n quarantineSagaRelatedAsset: (caseId: string, assetId: string): [string, string, string, string] =>\n [COLLECTIONS.QUARANTINE_SAGA_JOBS, caseId, NESTED_SUBCOLLECTIONS.QUARANTINE_SAGA_RELATED_ASSETS, assetId],\n\n // Composite doc id caseId__submissionId — a single {ncmecJobId} segment.\n ncmecSubmissionJob: (ncmecJobId: string): [string, string] =>\n [COLLECTIONS.NCMEC_SUBMISSION_JOBS, ncmecJobId],\n\n // Composite doc id caseId__uid — a single {accountActionCommandId} segment.\n accountActionCommand: (accountActionCommandId: string): [string, string] =>\n [COLLECTIONS.ACCOUNT_ACTION_COMMANDS, accountActionCommandId],\n\n // ===== TRUST & SAFETY — SLA monitors + heartbeat (§A8) =====\n // Composite doc id {caseId|requestId}__{monitorKind} — a single {monitorId} segment.\n safetySlaMonitor: (monitorId: string): [string, string] =>\n [COLLECTIONS.SAFETY_SLA_MONITORS, monitorId],\n\n // Singleton: safetyMonitorHeartbeat/global.\n safetyMonitorHeartbeat: (): [string, string] =>\n [COLLECTIONS.SAFETY_MONITOR_HEARTBEAT, SPECIAL_DOCS.SAFETY_MONITOR_HEARTBEAT_GLOBAL],\n\n // ===== TRUST & SAFETY — age attestation nonces (§A7) =====\n ageAttestationNonce: (nonceHash: string): [string, string] =>\n [COLLECTIONS.AGE_ATTESTATION_NONCES, nonceHash],\n\n // ===== TRUST & SAFETY — per-operator privileged-reviewer security (§A11 [M-6] / [H-17]) =====\n // Backend-only per-operator docs keyed by uid (mirrors operatorStepUp/{uid}).\n privilegedReviewerPasskeyProfile: (uid: string): [string, string] =>\n [COLLECTIONS.PRIVILEGED_REVIEWER_PASSKEY_PROFILES, uid],\n\n privilegedReviewerCapabilityGrant: (uid: string): [string, string] =>\n [COLLECTIONS.PRIVILEGED_REVIEWER_CAPABILITY_GRANTS, uid],\n\n // ===== TRUST & SAFETY — NCII / TAKE IT DOWN (§A11) =====\n nciiAllegation: (allegationId: string): [string, string] =>\n [COLLECTIONS.NCII_ALLEGATIONS, allegationId],\n\n takeItDownRequest: (requestId: string): [string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId],\n\n // Fixed-id requester PII subdoc (takeItDownRequests/{requestId}/private/requester).\n takeItDownRequesterPrivate: (requestId: string): [string, string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.PRIVATE, SPECIAL_DOCS.TAKE_IT_DOWN_REQUESTER],\n\n takeItDownSubmission: (requestId: string, submissionId: string): [string, string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_SUBMISSIONS, submissionId],\n\n // Collection of submissions under a request (parent of takeItDownSubmission).\n takeItDownSubmissions: (requestId: string): [string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_SUBMISSIONS],\n\n takeItDownValidityDecision: (requestId: string, decisionId: string): [string, string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_VALIDITY_DECISIONS, decisionId],\n\n takeItDownRequestAction: (requestId: string, actionId: string): [string, string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_ACTIONS, actionId],\n\n takeItDownEvidence: (requestId: string, evidenceId: string): [string, string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_EVIDENCE, evidenceId],\n\n // [H-01] a retained-but-unrecorded NCII-evidence inventory row (top-level; id is deterministic on\n // bucket+key+generation so a re-fire is idempotent).\n nciiRetainedEvidenceInventory: (inventoryId: string): [string, string] =>\n [COLLECTIONS.NCII_RETAINED_EVIDENCE_INVENTORY, inventoryId],\n\n // [H-01] dead-letter entry for an inventory row that could not be written to the primary\n // nciiRetainedEvidenceInventory collection (id mirrors the primary row id for traceability).\n nciiInventoryDeadLetter: (inventoryId: string): [string, string] =>\n [COLLECTIONS.NCII_INVENTORY_DEAD_LETTER, inventoryId],\n\n nciiCase: (caseId: string): [string, string] =>\n [COLLECTIONS.NCII_CASES, caseId],\n\n nciiCaseAllegationLink: (caseId: string, allegationId: string): [string, string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_ALLEGATION_LINKS, allegationId],\n\n // Collection of allegation links for a case (parent of nciiCaseAllegationLink).\n nciiCaseAllegationLinks: (caseId: string): [string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_ALLEGATION_LINKS],\n\n nciiCaseRequestLink: (caseId: string, requestId: string): [string, string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_REQUEST_LINKS, requestId],\n\n // Collection of request links for a case (parent of nciiCaseRequestLink).\n nciiCaseRequestLinks: (caseId: string): [string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_REQUEST_LINKS],\n\n // Append-only NCII case closure/reopen events.\n nciiCaseClosureEvent: (caseId: string, eventId: string): [string, string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_CLOSURE_EVENTS, eventId],\n\n // Collection of closure/reopen events for a case (parent of nciiCaseClosureEvent).\n nciiCaseClosureEvents: (caseId: string): [string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_CLOSURE_EVENTS],\n\n nciiCaseRemovalAction: (caseId: string, actionId: string): [string, string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_REMOVAL_ACTIONS, actionId],\n\n nciiBlockedHash: (caseId: string, hashId: string): [string, string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_BLOCKED_HASHES, hashId],\n\n nciiTemporaryHold: (holdId: string): [string, string] =>\n [COLLECTIONS.NCII_TEMPORARY_HOLDS, holdId],\n\n nciiRemovalJob: (jobId: string): [string, string] =>\n [COLLECTIONS.NCII_REMOVAL_JOBS, jobId],\n\n nciiRemovalTarget: (jobId: string, targetKeyHash: string): [string, string, string, string] =>\n [COLLECTIONS.NCII_REMOVAL_JOBS, jobId, NESTED_SUBCOLLECTIONS.NCII_REMOVAL_TARGETS, targetKeyHash],\n\n // ===== TRUST & SAFETY — _serverData (server-only) singletons (§A7, §A11) =====\n // Moved from _config (public) to _serverData (BACKEND-108 — Cloud-Functions-only readers).\n agePolicyConfig: (): [string, string] =>\n [COLLECTIONS.SERVER_DATA, SPECIAL_DOCS.AGE_POLICY],\n\n nciiPolicyConfig: (): [string, string] =>\n [COLLECTIONS.SERVER_DATA, SPECIAL_DOCS.NCII_POLICY],\n\n privilegedReviewerSecurityConfig: (): [string, string] =>\n [COLLECTIONS.SERVER_DATA, SPECIAL_DOCS.PRIVILEGED_REVIEWER_SECURITY],\n} as const;\n"]}
@@ -8,7 +8,9 @@ export declare const REPORTABLE_ITEM_LABELS: Record<ReportableItemType, string>;
8
8
  export declare const REPORT_REASON_SCORES: Record<ReportReason, number>;
9
9
  /** Multiplier for each canonical reportable item type. High-reach public surfaces
10
10
  * carry a higher multiplier; chat-message surfaces (admin-visible or low-reach) sit
11
- * below 1. */
11
+ * below 1. `conversation-file` mirrors `work-asset` (1.0) — the other shared-FILE
12
+ * surface — rather than the 0.8 chat-message weight: the report is about stored
13
+ * media, not a line of conversation text. */
12
14
  export declare const REPORT_ITEM_TYPE_MULTIPLIERS: Record<ReportableItemType, number>;
13
15
  /** Priority bonuses/fallbacks shared by client + server priority scoring. */
14
16
  export declare const REPORT_PRIORITY_BONUSES: {
@@ -1 +1 @@
1
- {"version":3,"file":"report-config-values.d.ts","sourceRoot":"","sources":["../../src/report/report-config-values.ts"],"names":[],"mappings":"AAYA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACxB,MAAM,qCAAqC,CAAC;AAE7C,qFAAqF;AACrF,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAiBrE,CAAC;AAEF;;;iDAGiD;AACjD,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAa7D,CAAC;AAEF;;cAEc;AACd,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAiB3E,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC;AAEX;;;kEAGkE;AAClE,eAAO,MAAM,uBAAuB,EAAE,SAAS,YAAY,EAC4B,CAAC;AAExF;;qBAEqB;AACrB,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CA8ExE,CAAC"}
1
+ {"version":3,"file":"report-config-values.d.ts","sourceRoot":"","sources":["../../src/report/report-config-values.ts"],"names":[],"mappings":"AAYA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACxB,MAAM,qCAAqC,CAAC;AAE7C,qFAAqF;AACrF,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAkBrE,CAAC;AAEF;;;iDAGiD;AACjD,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAa7D,CAAC;AAEF;;;;6CAI6C;AAC7C,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAkB3E,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC;AAEX;;;kEAGkE;AAClE,eAAO,MAAM,uBAAuB,EAAE,SAAS,YAAY,EAC4B,CAAC;AAExF;;qBAEqB;AACrB,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CA8ExE,CAAC"}
@@ -21,6 +21,7 @@ export const REPORTABLE_ITEM_LABELS = {
21
21
  'guild-invite-message': 'Guild Invite Message',
22
22
  'guild-chat-message': 'Guild Chat Message',
23
23
  'admin-work-message': 'Work Correspondence Message',
24
+ 'conversation-file': 'Conversation File',
24
25
  'hall-library-item': 'Hall Item',
25
26
  'hall-library-sub-item': 'Hall Sub-Item',
26
27
  'audition': 'Audition',
@@ -49,7 +50,9 @@ export const REPORT_REASON_SCORES = {
49
50
  };
50
51
  /** Multiplier for each canonical reportable item type. High-reach public surfaces
51
52
  * carry a higher multiplier; chat-message surfaces (admin-visible or low-reach) sit
52
- * below 1. */
53
+ * below 1. `conversation-file` mirrors `work-asset` (1.0) — the other shared-FILE
54
+ * surface — rather than the 0.8 chat-message weight: the report is about stored
55
+ * media, not a line of conversation text. */
53
56
  export const REPORT_ITEM_TYPE_MULTIPLIERS = {
54
57
  'square-streetz-post': 1.5,
55
58
  'hall-library-item': 1.3,
@@ -64,6 +67,7 @@ export const REPORT_ITEM_TYPE_MULTIPLIERS = {
64
67
  'craft-skill': 1.0,
65
68
  'profile-picture': 1.0,
66
69
  'work-asset': 1.0,
70
+ 'conversation-file': 1.0,
67
71
  'guild-chat-message': 0.8,
68
72
  'guild-invite-message': 0.8,
69
73
  'admin-work-message': 0.8,
@@ -1 +1 @@
1
- {"version":3,"file":"report-config-values.js","sourceRoot":"","sources":["../../src/report/report-config-values.ts"],"names":[],"mappings":"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","sourcesContent":["// ============================================================================\n// REPORT-SYSTEM CONFIG VALUES — the ONE home for every TTT report-system value\n// (labels, priority scores, multipliers, queue definitions, bonuses, comment\n// cap). Consolidated here 2026-07-13 from the former lockstep pair in ttt-prod\n// `src/lib/report-config.ts` (client ReportCoreConfig) and\n// `functions/src/shared/report-core-config.ts` (ServerReportCoreConfig); both\n// trees now ASSEMBLE their config objects from these values (assembly is\n// wiring; the values are truth), and the cross-tree lockstep test is deleted.\n// Every map is Record-complete over its canonical enum, so adding an enum\n// member fails the BUILD here until its entries exist.\n// ============================================================================\n\nimport {\n ReportReasonSchema,\n type ReportReason,\n type ReportableItemType,\n} from '../doc-schemas/safety/foundation.js';\n\n/** Human display name for every reportable surface (report dialog + admin views). */\nexport const REPORTABLE_ITEM_LABELS: Record<ReportableItemType, string> = {\n 'username': 'Username',\n 'craft-skill': 'Craft Skill',\n 'commission-listing': 'Commission Listing',\n 'commission-proposal': 'Commission Proposal',\n 'square-streetz-post': 'Square Post',\n 'profile-picture': 'Profile Picture',\n 'guild-invite-message': 'Guild Invite Message',\n 'guild-chat-message': 'Guild Chat Message',\n 'admin-work-message': 'Work Correspondence Message',\n 'hall-library-item': 'Hall Item',\n 'hall-library-sub-item': 'Hall Sub-Item',\n 'audition': 'Audition',\n 'audition-entry': 'Audition Entry',\n 'work-project': 'Work Project',\n 'work-asset': 'Work File',\n 'work-realm': 'Work Realm',\n};\n\n/** Score for each canonical report reason. Higher = higher priority in the admin\n * queue. Protected reasons (Child Safety Concern, NCII) fork to protected cases and\n * never reach the ordinary queue, but are kept here so the defaultReasonScore\n * fallback is never silently applied to them. */\nexport const REPORT_REASON_SCORES: Record<ReportReason, number> = {\n 'Child Safety Concern': 1000,\n 'Nonconsensual Intimate Image (NCII)': 900,\n 'Self-Harm': 800,\n 'Violence or Threats': 500,\n 'Sexual Content': 400,\n 'Hate Speech': 400,\n 'Harassment': 300,\n 'Impersonation': 200,\n 'Intellectual Property': 150,\n 'Spam': 100,\n 'Not related to on-site entertainment': 75,\n 'Other': 50,\n};\n\n/** Multiplier for each canonical reportable item type. High-reach public surfaces\n * carry a higher multiplier; chat-message surfaces (admin-visible or low-reach) sit\n * below 1. */\nexport const REPORT_ITEM_TYPE_MULTIPLIERS: Record<ReportableItemType, number> = {\n 'square-streetz-post': 1.5,\n 'hall-library-item': 1.3,\n 'hall-library-sub-item': 1.3,\n 'audition': 1.2,\n 'audition-entry': 1.2,\n 'commission-listing': 1.1,\n 'work-project': 1.1,\n 'work-realm': 1.1,\n 'commission-proposal': 1.0,\n 'username': 1.0,\n 'craft-skill': 1.0,\n 'profile-picture': 1.0,\n 'work-asset': 1.0,\n 'guild-chat-message': 0.8,\n 'guild-invite-message': 0.8,\n 'admin-work-message': 0.8,\n};\n\n/** Priority bonuses/fallbacks shared by client + server priority scoring. */\nexport const REPORT_PRIORITY_BONUSES = {\n additionalReportBonus: 50,\n defaultReasonScore: 50,\n defaultItemTypeMultiplier: 1.0,\n} as const;\n\n/** The reasons offered in the report picker. Derived from the canonical enum:\n * everything EXCEPT 'Nonconsensual Intimate Image (NCII)', which for a logged-in\n * user is an app-owned AdditionalReportAction routing to the take-it-down form —\n * a true 48h statutory request, not an ordinary report (§1.1). */\nexport const ORDINARY_REPORT_REASONS: readonly ReportReason[] =\n ReportReasonSchema.options.filter((r) => r !== 'Nonconsensual Intimate Image (NCII)');\n\n/** One admin task-queue definition (display copy + checkout/work-later windows).\n * The client config consumes all four fields; the server config consumes the\n * minute windows. */\nexport interface ReportTaskQueueDefinition {\n displayName: string;\n description: string;\n defaultCheckoutMinutes: number;\n workLaterMinutes: number;\n maxWorkLaterMinutes: number;\n}\n\nexport const REPORT_TASK_QUEUES: Record<string, ReportTaskQueueDefinition> = {\n userReport: {\n displayName: 'User Reports',\n description: 'Content reports from users',\n defaultCheckoutMinutes: 60,\n workLaterMinutes: 1440,\n maxWorkLaterMinutes: 2880,\n },\n 'content-appeal': {\n displayName: 'Content Appeals',\n description: 'Appeals from users whose content was flagged',\n defaultCheckoutMinutes: 120,\n workLaterMinutes: 1440,\n maxWorkLaterMinutes: 2880,\n },\n thresholdLibraryReview: {\n displayName: 'Library Reviews',\n description: 'New library submissions pending review',\n defaultCheckoutMinutes: 90,\n workLaterMinutes: 1440,\n maxWorkLaterMinutes: 2880,\n },\n // Published change request (member \"Update details\" proposal) — same review\n // queue + checkout window as threshold publishes.\n hallContentChangeRequest: {\n displayName: 'Published Change Requests',\n description: 'Member-proposed text changes to published library items',\n defaultCheckoutMinutes: 90,\n workLaterMinutes: 1440,\n maxWorkLaterMinutes: 2880,\n },\n adminDispatch: {\n displayName: 'Admin Dispatches',\n description: 'Admin messages and support tickets',\n defaultCheckoutMinutes: 60,\n workLaterMinutes: 1440,\n maxWorkLaterMinutes: 2880,\n },\n // Ops-anomaly / integrity lanes (money + stake-share signals). Their tasks are\n // created by Firestore-trigger / webhook integrity checks, not user flows, and are\n // worked through the ONE generic ops-anomaly work card. Present so per-type\n // checkout accepts them, checkoutNextImportantTask leases the intended window,\n // and \"My Checked-Out Tasks\" resolves a display name (never \"Unknown Task\").\n stakeShareAnomaly: {\n displayName: 'Stake Share Anomalies',\n description: 'Unexpected work-project stake-share changes flagged by the integrity trigger',\n defaultCheckoutMinutes: 60,\n workLaterMinutes: 1440,\n maxWorkLaterMinutes: 2880,\n },\n pledgeLedgerAnomaly: {\n displayName: 'Pledge Ledger Anomalies',\n description: 'Out-of-band or illegal pledge-ledger changes flagged by the integrity trigger',\n defaultCheckoutMinutes: 60,\n workLaterMinutes: 1440,\n maxWorkLaterMinutes: 2880,\n },\n pledgePaymentRepairNeeded: {\n displayName: 'Pledge Payment Repairs',\n description: 'Paid Stripe events that could not be recorded automatically and were quarantined',\n defaultCheckoutMinutes: 60,\n workLaterMinutes: 1440,\n maxWorkLaterMinutes: 2880,\n },\n pledgeDisputeOpened: {\n displayName: 'Pledge Disputes',\n description: 'Chargeback disputes opened against a pledge, surfaced by the refund/dispute webhook',\n defaultCheckoutMinutes: 60,\n workLaterMinutes: 1440,\n maxWorkLaterMinutes: 2880,\n },\n pledgeRefundRequested: {\n displayName: 'Pledge Refund Requests',\n description: 'User-initiated pledge refund requests awaiting admin approve/deny',\n defaultCheckoutMinutes: 60,\n workLaterMinutes: 1440,\n maxWorkLaterMinutes: 2880,\n },\n};\n// (The comment cap MAX_REPORT_COMMENT_LENGTH lives with the other business\n// constants — import it from the constants barrel.)\n"]}
1
+ {"version":3,"file":"report-config-values.js","sourceRoot":"","sources":["../../src/report/report-config-values.ts"],"names":[],"mappings":"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","sourcesContent":["// ============================================================================\n// REPORT-SYSTEM CONFIG VALUES — the ONE home for every TTT report-system value\n// (labels, priority scores, multipliers, queue definitions, bonuses, comment\n// cap). Consolidated here 2026-07-13 from the former lockstep pair in ttt-prod\n// `src/lib/report-config.ts` (client ReportCoreConfig) and\n// `functions/src/shared/report-core-config.ts` (ServerReportCoreConfig); both\n// trees now ASSEMBLE their config objects from these values (assembly is\n// wiring; the values are truth), and the cross-tree lockstep test is deleted.\n// Every map is Record-complete over its canonical enum, so adding an enum\n// member fails the BUILD here until its entries exist.\n// ============================================================================\n\nimport {\n ReportReasonSchema,\n type ReportReason,\n type ReportableItemType,\n} from '../doc-schemas/safety/foundation.js';\n\n/** Human display name for every reportable surface (report dialog + admin views). */\nexport const REPORTABLE_ITEM_LABELS: Record<ReportableItemType, string> = {\n 'username': 'Username',\n 'craft-skill': 'Craft Skill',\n 'commission-listing': 'Commission Listing',\n 'commission-proposal': 'Commission Proposal',\n 'square-streetz-post': 'Square Post',\n 'profile-picture': 'Profile Picture',\n 'guild-invite-message': 'Guild Invite Message',\n 'guild-chat-message': 'Guild Chat Message',\n 'admin-work-message': 'Work Correspondence Message',\n 'conversation-file': 'Conversation File',\n 'hall-library-item': 'Hall Item',\n 'hall-library-sub-item': 'Hall Sub-Item',\n 'audition': 'Audition',\n 'audition-entry': 'Audition Entry',\n 'work-project': 'Work Project',\n 'work-asset': 'Work File',\n 'work-realm': 'Work Realm',\n};\n\n/** Score for each canonical report reason. Higher = higher priority in the admin\n * queue. Protected reasons (Child Safety Concern, NCII) fork to protected cases and\n * never reach the ordinary queue, but are kept here so the defaultReasonScore\n * fallback is never silently applied to them. */\nexport const REPORT_REASON_SCORES: Record<ReportReason, number> = {\n 'Child Safety Concern': 1000,\n 'Nonconsensual Intimate Image (NCII)': 900,\n 'Self-Harm': 800,\n 'Violence or Threats': 500,\n 'Sexual Content': 400,\n 'Hate Speech': 400,\n 'Harassment': 300,\n 'Impersonation': 200,\n 'Intellectual Property': 150,\n 'Spam': 100,\n 'Not related to on-site entertainment': 75,\n 'Other': 50,\n};\n\n/** Multiplier for each canonical reportable item type. High-reach public surfaces\n * carry a higher multiplier; chat-message surfaces (admin-visible or low-reach) sit\n * below 1. `conversation-file` mirrors `work-asset` (1.0) — the other shared-FILE\n * surface — rather than the 0.8 chat-message weight: the report is about stored\n * media, not a line of conversation text. */\nexport const REPORT_ITEM_TYPE_MULTIPLIERS: Record<ReportableItemType, number> = {\n 'square-streetz-post': 1.5,\n 'hall-library-item': 1.3,\n 'hall-library-sub-item': 1.3,\n 'audition': 1.2,\n 'audition-entry': 1.2,\n 'commission-listing': 1.1,\n 'work-project': 1.1,\n 'work-realm': 1.1,\n 'commission-proposal': 1.0,\n 'username': 1.0,\n 'craft-skill': 1.0,\n 'profile-picture': 1.0,\n 'work-asset': 1.0,\n 'conversation-file': 1.0,\n 'guild-chat-message': 0.8,\n 'guild-invite-message': 0.8,\n 'admin-work-message': 0.8,\n};\n\n/** Priority bonuses/fallbacks shared by client + server priority scoring. */\nexport const REPORT_PRIORITY_BONUSES = {\n additionalReportBonus: 50,\n defaultReasonScore: 50,\n defaultItemTypeMultiplier: 1.0,\n} as const;\n\n/** The reasons offered in the report picker. Derived from the canonical enum:\n * everything EXCEPT 'Nonconsensual Intimate Image (NCII)', which for a logged-in\n * user is an app-owned AdditionalReportAction routing to the take-it-down form —\n * a true 48h statutory request, not an ordinary report (§1.1). */\nexport const ORDINARY_REPORT_REASONS: readonly ReportReason[] =\n ReportReasonSchema.options.filter((r) => r !== 'Nonconsensual Intimate Image (NCII)');\n\n/** One admin task-queue definition (display copy + checkout/work-later windows).\n * The client config consumes all four fields; the server config consumes the\n * minute windows. */\nexport interface ReportTaskQueueDefinition {\n displayName: string;\n description: string;\n defaultCheckoutMinutes: number;\n workLaterMinutes: number;\n maxWorkLaterMinutes: number;\n}\n\nexport const REPORT_TASK_QUEUES: Record<string, ReportTaskQueueDefinition> = {\n userReport: {\n displayName: 'User Reports',\n description: 'Content reports from users',\n defaultCheckoutMinutes: 60,\n workLaterMinutes: 1440,\n maxWorkLaterMinutes: 2880,\n },\n 'content-appeal': {\n displayName: 'Content Appeals',\n description: 'Appeals from users whose content was flagged',\n defaultCheckoutMinutes: 120,\n workLaterMinutes: 1440,\n maxWorkLaterMinutes: 2880,\n },\n thresholdLibraryReview: {\n displayName: 'Library Reviews',\n description: 'New library submissions pending review',\n defaultCheckoutMinutes: 90,\n workLaterMinutes: 1440,\n maxWorkLaterMinutes: 2880,\n },\n // Published change request (member \"Update details\" proposal) — same review\n // queue + checkout window as threshold publishes.\n hallContentChangeRequest: {\n displayName: 'Published Change Requests',\n description: 'Member-proposed text changes to published library items',\n defaultCheckoutMinutes: 90,\n workLaterMinutes: 1440,\n maxWorkLaterMinutes: 2880,\n },\n adminDispatch: {\n displayName: 'Admin Dispatches',\n description: 'Admin messages and support tickets',\n defaultCheckoutMinutes: 60,\n workLaterMinutes: 1440,\n maxWorkLaterMinutes: 2880,\n },\n // Ops-anomaly / integrity lanes (money + stake-share signals). Their tasks are\n // created by Firestore-trigger / webhook integrity checks, not user flows, and are\n // worked through the ONE generic ops-anomaly work card. Present so per-type\n // checkout accepts them, checkoutNextImportantTask leases the intended window,\n // and \"My Checked-Out Tasks\" resolves a display name (never \"Unknown Task\").\n stakeShareAnomaly: {\n displayName: 'Stake Share Anomalies',\n description: 'Unexpected work-project stake-share changes flagged by the integrity trigger',\n defaultCheckoutMinutes: 60,\n workLaterMinutes: 1440,\n maxWorkLaterMinutes: 2880,\n },\n pledgeLedgerAnomaly: {\n displayName: 'Pledge Ledger Anomalies',\n description: 'Out-of-band or illegal pledge-ledger changes flagged by the integrity trigger',\n defaultCheckoutMinutes: 60,\n workLaterMinutes: 1440,\n maxWorkLaterMinutes: 2880,\n },\n pledgePaymentRepairNeeded: {\n displayName: 'Pledge Payment Repairs',\n description: 'Paid Stripe events that could not be recorded automatically and were quarantined',\n defaultCheckoutMinutes: 60,\n workLaterMinutes: 1440,\n maxWorkLaterMinutes: 2880,\n },\n pledgeDisputeOpened: {\n displayName: 'Pledge Disputes',\n description: 'Chargeback disputes opened against a pledge, surfaced by the refund/dispute webhook',\n defaultCheckoutMinutes: 60,\n workLaterMinutes: 1440,\n maxWorkLaterMinutes: 2880,\n },\n pledgeRefundRequested: {\n displayName: 'Pledge Refund Requests',\n description: 'User-initiated pledge refund requests awaiting admin approve/deny',\n defaultCheckoutMinutes: 60,\n workLaterMinutes: 1440,\n maxWorkLaterMinutes: 2880,\n },\n};\n// (The comment cap MAX_REPORT_COMMENT_LENGTH lives with the other business\n// constants — import it from the constants barrel.)\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ncii-intake-derivations.d.ts","sourceRoot":"","sources":["../../src/safety/ncii-intake-derivations.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EACV,mBAAmB,EACnB,uBAAuB,EACvB,eAAe,EACf,sBAAsB,EACvB,MAAM,yBAAyB,CAAC;AAEjC;;;;;GAKG;AACH,eAAO,MAAM,SAAS,wBAAkB,CAAC;AAczC;;8EAE8E;AAC9E,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CA4CpE;AAED;0EAC0E;AAC1E,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUxD;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAExF;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhE;AAMD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,aAAa,EAAE,uBAAuB,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACpD,GAAG,MAAM,CAKT;AAMD,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAyChE;AAED;oFACoF;AACpF,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,eAAe,EACxB,iBAAiB,EAAE,OAAO,GACzB,sBAAsB,CAMxB;AAmBD,gFAAgF;AAChF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAEpE"}
1
+ {"version":3,"file":"ncii-intake-derivations.d.ts","sourceRoot":"","sources":["../../src/safety/ncii-intake-derivations.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EACV,mBAAmB,EACnB,uBAAuB,EACvB,eAAe,EACf,sBAAsB,EACvB,MAAM,yBAAyB,CAAC;AAEjC;;;;;GAKG;AACH,eAAO,MAAM,SAAS,wBAAkB,CAAC;AAczC;;8EAE8E;AAC9E,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAwDpE;AAED;0EAC0E;AAC1E,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUxD;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAExF;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhE;AAMD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,aAAa,EAAE,uBAAuB,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACpD,GAAG,MAAM,CAKT;AAMD,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAyChE;AAED;oFACoF;AACpF,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,eAAe,EACxB,iBAAiB,EAAE,OAAO,GACzB,sBAAsB,CAMxB;AAmBD,gFAAgF;AAChF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAEpE"}
@@ -75,8 +75,20 @@ export function normalizedTargetKey(locator) {
75
75
  return [k, locator.auditionId, locator.auditionEntryId].join(SEP);
76
76
  case 'guildInviteMessage':
77
77
  return [k, locator.channelId, locator.messageId].join(SEP);
78
- case 'chatAttachment':
79
- return [k, locator.channelId, locator.messageId, locator.attachmentId].join(SEP);
78
+ case 'conversationFile':
79
+ // The conversation scope + the deterministic file id are the file's identity;
80
+ // `mediaAssetId` is included because it is 1:1 with that id (the publication
81
+ // adapter mints both together), so two submissions about the same file still
82
+ // normalize identically.
83
+ return [
84
+ k,
85
+ locator.conversation.kind,
86
+ locator.conversation.kind === 'guildInvite'
87
+ ? locator.conversation.guildInviteId
88
+ : locator.conversation.adminDispatchId,
89
+ locator.conversationFileId,
90
+ locator.mediaAssetId,
91
+ ].join(SEP);
80
92
  case 'guildChatMessage':
81
93
  return [k, locator.channelId, locator.messageId].join(SEP);
82
94
  case 'adminWorkMessage':
@@ -170,8 +182,8 @@ export function surfaceLabelFor(locator) {
170
182
  return 'Audition entry';
171
183
  case 'guildInviteMessage':
172
184
  return 'Guild invite message';
173
- case 'chatAttachment':
174
- return 'Chat attachment';
185
+ case 'conversationFile':
186
+ return 'Conversation file';
175
187
  case 'guildChatMessage':
176
188
  return 'Guild chat message';
177
189
  case 'adminWorkMessage':
@@ -213,7 +225,7 @@ const TTT_HOSTED_KINDS = new Set([
213
225
  'audition',
214
226
  'auditionEntry',
215
227
  'guildInviteMessage',
216
- 'chatAttachment',
228
+ 'conversationFile',
217
229
  ]);
218
230
  /** True when the locator points at a TTT-hosted surface (server-resolvable). */
219
231
  export function isTttHostedLocator(locator) {