@ttt-productions/ttt-core 0.19.0 → 0.19.2

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 (128) hide show
  1. package/dist/doc-schemas/chat-sync.d.ts +2 -2
  2. package/dist/doc-schemas/index.d.ts +19 -0
  3. package/dist/doc-schemas/index.d.ts.map +1 -1
  4. package/dist/doc-schemas/index.js +21 -0
  5. package/dist/doc-schemas/index.js.map +1 -1
  6. package/dist/doc-schemas/media-activation-jobs.d.ts +6 -6
  7. package/dist/doc-schemas/media-assets.d.ts +168 -14
  8. package/dist/doc-schemas/media-assets.d.ts.map +1 -1
  9. package/dist/doc-schemas/media-assets.js +60 -0
  10. package/dist/doc-schemas/media-assets.js.map +1 -1
  11. package/dist/doc-schemas/moderation.d.ts +6 -6
  12. package/dist/doc-schemas/ncii/allegations.d.ts +84 -0
  13. package/dist/doc-schemas/ncii/allegations.d.ts.map +1 -0
  14. package/dist/doc-schemas/ncii/allegations.js +45 -0
  15. package/dist/doc-schemas/ncii/allegations.js.map +1 -0
  16. package/dist/doc-schemas/ncii/appeals.d.ts +121 -0
  17. package/dist/doc-schemas/ncii/appeals.d.ts.map +1 -0
  18. package/dist/doc-schemas/ncii/appeals.js +132 -0
  19. package/dist/doc-schemas/ncii/appeals.js.map +1 -0
  20. package/dist/doc-schemas/ncii/cases.d.ts +158 -0
  21. package/dist/doc-schemas/ncii/cases.d.ts.map +1 -0
  22. package/dist/doc-schemas/ncii/cases.js +132 -0
  23. package/dist/doc-schemas/ncii/cases.js.map +1 -0
  24. package/dist/doc-schemas/ncii/config.d.ts +131 -0
  25. package/dist/doc-schemas/ncii/config.d.ts.map +1 -0
  26. package/dist/doc-schemas/ncii/config.js +227 -0
  27. package/dist/doc-schemas/ncii/config.js.map +1 -0
  28. package/dist/doc-schemas/ncii/holds.d.ts +84 -0
  29. package/dist/doc-schemas/ncii/holds.d.ts.map +1 -0
  30. package/dist/doc-schemas/ncii/holds.js +63 -0
  31. package/dist/doc-schemas/ncii/holds.js.map +1 -0
  32. package/dist/doc-schemas/ncii/notices.d.ts +109 -0
  33. package/dist/doc-schemas/ncii/notices.d.ts.map +1 -0
  34. package/dist/doc-schemas/ncii/notices.js +114 -0
  35. package/dist/doc-schemas/ncii/notices.js.map +1 -0
  36. package/dist/doc-schemas/ncii/removal.d.ts +222 -0
  37. package/dist/doc-schemas/ncii/removal.d.ts.map +1 -0
  38. package/dist/doc-schemas/ncii/removal.js +130 -0
  39. package/dist/doc-schemas/ncii/removal.js.map +1 -0
  40. package/dist/doc-schemas/ncii/requests.d.ts +372 -0
  41. package/dist/doc-schemas/ncii/requests.d.ts.map +1 -0
  42. package/dist/doc-schemas/ncii/requests.js +287 -0
  43. package/dist/doc-schemas/ncii/requests.js.map +1 -0
  44. package/dist/doc-schemas/ncii/scan.d.ts +59 -0
  45. package/dist/doc-schemas/ncii/scan.d.ts.map +1 -0
  46. package/dist/doc-schemas/ncii/scan.js +105 -0
  47. package/dist/doc-schemas/ncii/scan.js.map +1 -0
  48. package/dist/doc-schemas/notification-ledger.d.ts +1 -1
  49. package/dist/doc-schemas/payments.d.ts +2 -2
  50. package/dist/doc-schemas/registry.d.ts +1929 -96
  51. package/dist/doc-schemas/registry.d.ts.map +1 -1
  52. package/dist/doc-schemas/registry.js +86 -0
  53. package/dist/doc-schemas/registry.js.map +1 -1
  54. package/dist/doc-schemas/report-docs.d.ts +3 -3
  55. package/dist/doc-schemas/safety/age.d.ts +178 -0
  56. package/dist/doc-schemas/safety/age.d.ts.map +1 -0
  57. package/dist/doc-schemas/safety/age.js +222 -0
  58. package/dist/doc-schemas/safety/age.js.map +1 -0
  59. package/dist/doc-schemas/safety/case-aliases.d.ts +97 -0
  60. package/dist/doc-schemas/safety/case-aliases.d.ts.map +1 -0
  61. package/dist/doc-schemas/safety/case-aliases.js +110 -0
  62. package/dist/doc-schemas/safety/case-aliases.js.map +1 -0
  63. package/dist/doc-schemas/safety/case.d.ts +542 -0
  64. package/dist/doc-schemas/safety/case.d.ts.map +1 -0
  65. package/dist/doc-schemas/safety/case.js +339 -0
  66. package/dist/doc-schemas/safety/case.js.map +1 -0
  67. package/dist/doc-schemas/safety/evidence.d.ts +346 -0
  68. package/dist/doc-schemas/safety/evidence.d.ts.map +1 -0
  69. package/dist/doc-schemas/safety/evidence.js +273 -0
  70. package/dist/doc-schemas/safety/evidence.js.map +1 -0
  71. package/dist/doc-schemas/safety/foundation.d.ts +425 -0
  72. package/dist/doc-schemas/safety/foundation.d.ts.map +1 -0
  73. package/dist/doc-schemas/safety/foundation.js +349 -0
  74. package/dist/doc-schemas/safety/foundation.js.map +1 -0
  75. package/dist/doc-schemas/safety/holds.d.ts +152 -0
  76. package/dist/doc-schemas/safety/holds.d.ts.map +1 -0
  77. package/dist/doc-schemas/safety/holds.js +142 -0
  78. package/dist/doc-schemas/safety/holds.js.map +1 -0
  79. package/dist/doc-schemas/safety/monitors.d.ts +77 -0
  80. package/dist/doc-schemas/safety/monitors.d.ts.map +1 -0
  81. package/dist/doc-schemas/safety/monitors.js +87 -0
  82. package/dist/doc-schemas/safety/monitors.js.map +1 -0
  83. package/dist/doc-schemas/safety/provenance.d.ts +70 -0
  84. package/dist/doc-schemas/safety/provenance.d.ts.map +1 -0
  85. package/dist/doc-schemas/safety/provenance.js +76 -0
  86. package/dist/doc-schemas/safety/provenance.js.map +1 -0
  87. package/dist/doc-schemas/safety/report.d.ts +256 -0
  88. package/dist/doc-schemas/safety/report.d.ts.map +1 -0
  89. package/dist/doc-schemas/safety/report.js +116 -0
  90. package/dist/doc-schemas/safety/report.js.map +1 -0
  91. package/dist/doc-schemas/safety/sagas.d.ts +154 -0
  92. package/dist/doc-schemas/safety/sagas.d.ts.map +1 -0
  93. package/dist/doc-schemas/safety/sagas.js +162 -0
  94. package/dist/doc-schemas/safety/sagas.js.map +1 -0
  95. package/dist/doc-schemas/social.d.ts +3 -3
  96. package/dist/doc-schemas/user.d.ts +15 -0
  97. package/dist/doc-schemas/user.d.ts.map +1 -1
  98. package/dist/doc-schemas/user.js +9 -0
  99. package/dist/doc-schemas/user.js.map +1 -1
  100. package/dist/doc-schemas/work-project.d.ts +1 -1
  101. package/dist/media/atoms.d.ts +2 -2
  102. package/dist/media/domain-events-admin.d.ts +1 -1
  103. package/dist/media/domain-events.d.ts +1 -1
  104. package/dist/media/file-origin.d.ts +1 -1
  105. package/dist/media/index.d.ts +1 -0
  106. package/dist/media/index.d.ts.map +1 -1
  107. package/dist/media/index.js +1 -0
  108. package/dist/media/index.js.map +1 -1
  109. package/dist/media/pending-media.d.ts +25 -25
  110. package/dist/media/photodna-coverage.d.ts +46 -0
  111. package/dist/media/photodna-coverage.d.ts.map +1 -0
  112. package/dist/media/photodna-coverage.js +74 -0
  113. package/dist/media/photodna-coverage.js.map +1 -0
  114. package/dist/media/start-upload.d.ts +1 -1
  115. package/dist/media/target-info.d.ts +1 -1
  116. package/dist/paths/collections.d.ts +58 -0
  117. package/dist/paths/collections.d.ts.map +1 -1
  118. package/dist/paths/collections.js +77 -0
  119. package/dist/paths/collections.js.map +1 -1
  120. package/dist/paths/path-builders.d.ts +57 -0
  121. package/dist/paths/path-builders.d.ts.map +1 -1
  122. package/dist/paths/path-builders.js +75 -0
  123. package/dist/paths/path-builders.js.map +1 -1
  124. package/dist/schemas/social.d.ts +2 -2
  125. package/dist/types/audit.d.ts +1 -1
  126. package/dist/types/audit.d.ts.map +1 -1
  127. package/dist/upload-variables/square-streetz-post-variables.d.ts +1 -1
  128. package/package.json +1 -1
@@ -0,0 +1,114 @@
1
+ // Trust & Safety — durable uploader-notice delivery state machine (Appendix A
2
+ // §A11 [H-10]).
3
+ //
4
+ // `nciiCases/{caseId}/uploaderNotices/{noticeId}` — the uploader notice is a
5
+ // first-class durable delivery record like every other NCII workflow object (NOT
6
+ // just two bare enums). NOTE: this notices cluster OWNS the
7
+ // `nciiCases/{caseId}/uploaderNotices/{noticeId}` subcollection schema even though
8
+ // the `nciiCases` root doc itself is owned by the requests cluster.
9
+ //
10
+ // Deterministic `noticeId = sha256('ncii-uploader-notice-v1:' + caseId + ':' +
11
+ // recipientUid + ':' + removalGeneration)`. The client-supplied ≥128-bit
12
+ // `idempotencyKey` together with the deterministic noticeId guarantees one record
13
+ // per retry.
14
+ //
15
+ // TRANSITIONS [H-10]:
16
+ // pending → sent | delayed | suppressed | notApplicable
17
+ // delayed → sent (when `delayedUntil` elapses and no suppression applies)
18
+ // delayed → suppressed
19
+ // A failed delivery re-drives through `command` (retry/dead-letter), never silently
20
+ // drops. Each terminal/transition writes the matching NciiActionType
21
+ // (`uploaderNoticeSent` / `uploaderNoticeDelayed` / `uploaderNoticeSuppressed` /
22
+ // `uploaderNoticeNotApplicable`) to the request `actions` log.
23
+ //
24
+ // Every shape here is transcribed verbatim from docs/code_changes_needed/
25
+ // trust-and-safety/IMPLEMENTATION_PLAN.md Appendix A §A11 [H-10] — no invented
26
+ // values, no placeholders.
27
+ //
28
+ // SHARED enums come from ../safety/foundation.js (the single source for every
29
+ // cross-cluster enum); they are NEVER redefined here. This cluster IMPORTS
30
+ // UploaderNoticeStatusSchema + UploaderNoticeReasonSchema.
31
+ //
32
+ // Collection note: this cluster owns a NEW subcollection of the requests-cluster
33
+ // `nciiCases` root (+ an append-only per-attempt ledger); wiring collections.ts /
34
+ // path-builders.ts / registry.ts is deferred to the app leg (the orchestrator
35
+ // binds the schemas + path builders there); the deterministic doc-id shape is
36
+ // documented on each schema below.
37
+ import { z } from 'zod';
38
+ import { UploaderNoticeStatusSchema, UploaderNoticeReasonSchema, } from '../safety/foundation.js';
39
+ // ===========================================================================
40
+ // §A11 [H-10] — delivery channel + embedded shapes
41
+ // ===========================================================================
42
+ /** Notice delivery channel. */
43
+ export const NciiUploaderNoticeChannelSchema = z.enum(['inApp', 'email']);
44
+ /** Who the notice is for, snapshotted at decision time (NEVER re-resolved). */
45
+ export const NciiUploaderNoticeRecipientSnapshotSchema = z.object({
46
+ uid: z.string().min(1),
47
+ deliveryAddressRef: z.string().min(1),
48
+ capturedAt: z.number(),
49
+ }).strict();
50
+ /** Durable retry/dead-letter delivery command on the notice. */
51
+ export const NciiUploaderNoticeCommandV1Schema = z.object({
52
+ commandId: z.string().min(1),
53
+ attemptCount: z.number(),
54
+ nextAttemptAt: z.number().optional(),
55
+ leaseOwner: z.string().min(1).optional(),
56
+ leaseExpiresAt: z.number().optional(),
57
+ lastErrorCode: z.string().optional(),
58
+ }).strict();
59
+ // ===========================================================================
60
+ // §A11 [H-10] — nciiCases/{caseId}/uploaderNotices/{noticeId}
61
+ // ===========================================================================
62
+ /** `nciiCases/{caseId}/uploaderNotices/{noticeId}` — durable uploader-notice
63
+ * delivery record (OWNED by the notices cluster). Doc id `noticeId` is
64
+ * deterministic:
65
+ * `sha256('ncii-uploader-notice-v1:' + caseId + ':' + recipientUid + ':' + removalGeneration)`. */
66
+ export const NciiUploaderNoticeV1Schema = z.object({
67
+ schemaVersion: z.literal(1),
68
+ noticeId: z.string().min(1),
69
+ caseId: z.string().min(1),
70
+ requestIds: z.array(z.string().min(1)).max(16),
71
+ removalGeneration: z.number(),
72
+ // who, snapshotted at decision time (never re-resolved)
73
+ recipientSnapshot: NciiUploaderNoticeRecipientSnapshotSchema,
74
+ channel: NciiUploaderNoticeChannelSchema,
75
+ // the notice template + version actually used
76
+ templateId: z.string().min(1),
77
+ templateVersion: z.number(),
78
+ // 'pending'|'sent'|'delayed'|'suppressed'|'notApplicable'
79
+ status: UploaderNoticeStatusSchema,
80
+ // present ONLY when status='suppressed' (+ restricted rationale via rationaleRef + reviewer identity)
81
+ suppressionReason: UploaderNoticeReasonSchema.optional(),
82
+ // suppression/delay rationale (restricted) + reviewer identity
83
+ rationaleRef: z.string().min(1).optional(),
84
+ decidedByUid: z.string().min(1).optional(),
85
+ // when status='delayed' — the scheduled re-evaluation time (delayed → sent transition)
86
+ delayedUntil: z.number().optional(),
87
+ // ≥128-bit; with the deterministic noticeId guarantees one record per retry
88
+ idempotencyKey: z.string().min(1),
89
+ // durable retry/dead-letter delivery command
90
+ command: NciiUploaderNoticeCommandV1Schema,
91
+ // proof of delivery (provider receipt / read marker), when available
92
+ verifiedDeliveredAt: z.number().optional(),
93
+ createdAt: z.number(),
94
+ updatedAt: z.number(),
95
+ }).strict();
96
+ // ===========================================================================
97
+ // §A11 [H-10] — nciiCases/{caseId}/uploaderNotices/{noticeId}/attempts/{attemptId}
98
+ // IMMUTABLE append-only per-attempt ledger.
99
+ // ===========================================================================
100
+ /** Per-attempt delivery result. */
101
+ export const NciiUploaderNoticeAttemptResultSchema = z.enum(['queued', 'sent', 'failed', 'deferred']);
102
+ /** `nciiCases/{caseId}/uploaderNotices/{noticeId}/attempts/{attemptId}` —
103
+ * IMMUTABLE append-only per-attempt ledger. Doc id `attemptId` is a
104
+ * deterministic/assigned id (z.string().min(1)). */
105
+ export const NciiUploaderNoticeAttemptV1Schema = z.object({
106
+ schemaVersion: z.literal(1),
107
+ attemptId: z.string().min(1),
108
+ at: z.number(),
109
+ channel: NciiUploaderNoticeChannelSchema,
110
+ result: NciiUploaderNoticeAttemptResultSchema,
111
+ providerRef: z.string().min(1).optional(),
112
+ errorCode: z.string().optional(),
113
+ }).strict();
114
+ //# sourceMappingURL=notices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notices.js","sourceRoot":"","sources":["../../../src/doc-schemas/ncii/notices.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,222 @@
1
+ import { z } from 'zod';
2
+ /** The removal saga phase progression. `denyServing` precedes
3
+ * `removeOrTombstone`; `verifyRemoval` precedes `complete`. */
4
+ export declare const NciiRemovalPhaseSchema: z.ZodEnum<{
5
+ complete: "complete";
6
+ resolveTargets: "resolveTargets";
7
+ discoverKnownCopies: "discoverKnownCopies";
8
+ denyServing: "denyServing";
9
+ removeOrTombstone: "removeOrTombstone";
10
+ writeHashBlocks: "writeHashBlocks";
11
+ verifyRemoval: "verifyRemoval";
12
+ }>;
13
+ export type NciiRemovalPhase = z.infer<typeof NciiRemovalPhaseSchema>;
14
+ /** Top-level durable run status of the removal job. */
15
+ export declare const NciiRemovalStatusSchema: z.ZodEnum<{
16
+ pending: "pending";
17
+ completed: "completed";
18
+ retryableFailure: "retryableFailure";
19
+ deadLetter: "deadLetter";
20
+ running: "running";
21
+ }>;
22
+ export type NciiRemovalStatus = z.infer<typeof NciiRemovalStatusSchema>;
23
+ /** Typed resumable discovery cursor. `phase` mirrors the job phase enum;
24
+ * `lastSurface` is the cross-cluster NciiTargetSurface. */
25
+ export declare const NciiDiscoveryCursorV1Schema: z.ZodObject<{
26
+ phase: z.ZodEnum<{
27
+ complete: "complete";
28
+ resolveTargets: "resolveTargets";
29
+ discoverKnownCopies: "discoverKnownCopies";
30
+ denyServing: "denyServing";
31
+ removeOrTombstone: "removeOrTombstone";
32
+ writeHashBlocks: "writeHashBlocks";
33
+ verifyRemoval: "verifyRemoval";
34
+ }>;
35
+ lastSurface: z.ZodEnum<{
36
+ chatAttachment: "chatAttachment";
37
+ original: "original";
38
+ hallCopy: "hallCopy";
39
+ profileMedia: "profileMedia";
40
+ variant: "variant";
41
+ cacheServing: "cacheServing";
42
+ exactHashMatch: "exactHashMatch";
43
+ }>;
44
+ lastCursorToken: z.ZodOptional<z.ZodString>;
45
+ }, z.core.$strict>;
46
+ export type NciiDiscoveryCursorV1 = z.infer<typeof NciiDiscoveryCursorV1Schema>;
47
+ /** `nciiRemovalJobs/{jobId}` — REQUEST-scoped durable removal saga. Doc id
48
+ * `jobId` is deterministic:
49
+ * `sha256('ncii-removal-v1:' + requestId + ':' + caseId + ':' + generation)`
50
+ * (racing workers create the same job). */
51
+ export declare const NciiRemovalJobV1Schema: z.ZodObject<{
52
+ schemaVersion: z.ZodLiteral<1>;
53
+ jobId: z.ZodString;
54
+ caseId: z.ZodString;
55
+ requestId: z.ZodString;
56
+ generation: z.ZodNumber;
57
+ phase: z.ZodEnum<{
58
+ complete: "complete";
59
+ resolveTargets: "resolveTargets";
60
+ discoverKnownCopies: "discoverKnownCopies";
61
+ denyServing: "denyServing";
62
+ removeOrTombstone: "removeOrTombstone";
63
+ writeHashBlocks: "writeHashBlocks";
64
+ verifyRemoval: "verifyRemoval";
65
+ }>;
66
+ status: z.ZodEnum<{
67
+ pending: "pending";
68
+ completed: "completed";
69
+ retryableFailure: "retryableFailure";
70
+ deadLetter: "deadLetter";
71
+ running: "running";
72
+ }>;
73
+ cursor: z.ZodOptional<z.ZodObject<{
74
+ phase: z.ZodEnum<{
75
+ complete: "complete";
76
+ resolveTargets: "resolveTargets";
77
+ discoverKnownCopies: "discoverKnownCopies";
78
+ denyServing: "denyServing";
79
+ removeOrTombstone: "removeOrTombstone";
80
+ writeHashBlocks: "writeHashBlocks";
81
+ verifyRemoval: "verifyRemoval";
82
+ }>;
83
+ lastSurface: z.ZodEnum<{
84
+ chatAttachment: "chatAttachment";
85
+ original: "original";
86
+ hallCopy: "hallCopy";
87
+ profileMedia: "profileMedia";
88
+ variant: "variant";
89
+ cacheServing: "cacheServing";
90
+ exactHashMatch: "exactHashMatch";
91
+ }>;
92
+ lastCursorToken: z.ZodOptional<z.ZodString>;
93
+ }, z.core.$strict>>;
94
+ leaseOwner: z.ZodOptional<z.ZodString>;
95
+ leaseExpiresAt: z.ZodOptional<z.ZodNumber>;
96
+ attemptCount: z.ZodNumber;
97
+ nextAttemptAt: z.ZodOptional<z.ZodNumber>;
98
+ lastErrorCode: z.ZodOptional<z.ZodString>;
99
+ createdAt: z.ZodNumber;
100
+ updatedAt: z.ZodNumber;
101
+ completedAt: z.ZodOptional<z.ZodNumber>;
102
+ deadLetterAt: z.ZodOptional<z.ZodNumber>;
103
+ }, z.core.$strict>;
104
+ export type NciiRemovalJobV1 = z.infer<typeof NciiRemovalJobV1Schema>;
105
+ /** Serving-deny sub-state. */
106
+ export declare const NciiTargetServingDenyStateSchema: z.ZodEnum<{
107
+ pending: "pending";
108
+ failed: "failed";
109
+ denied: "denied";
110
+ }>;
111
+ export type NciiTargetServingDenyState = z.infer<typeof NciiTargetServingDenyStateSchema>;
112
+ /** Removal sub-state. */
113
+ export declare const NciiTargetRemovalStateSchema: z.ZodEnum<{
114
+ pending: "pending";
115
+ failed: "failed";
116
+ removed: "removed";
117
+ tombstoned: "tombstoned";
118
+ }>;
119
+ export type NciiTargetRemovalState = z.infer<typeof NciiTargetRemovalStateSchema>;
120
+ /** Verification sub-state. */
121
+ export declare const NciiTargetVerificationStateSchema: z.ZodEnum<{
122
+ pending: "pending";
123
+ verifiedGone: "verifiedGone";
124
+ leftover: "leftover";
125
+ }>;
126
+ export type NciiTargetVerificationState = z.infer<typeof NciiTargetVerificationStateSchema>;
127
+ /** `nciiRemovalJobs/{jobId}/targets/{targetKeyHash}` — per-target removal row.
128
+ * Doc id `targetKeyHash` is the deterministic id from the canonical locator.
129
+ * Per-target transitions: `servingDeny (pending→denied | failed)`;
130
+ * `removal (pending→removed | tombstoned | failed)`;
131
+ * `verification (pending→verifiedGone | leftover)`. */
132
+ export declare const NciiRemovalTargetV1Schema: z.ZodObject<{
133
+ targetKeyHash: z.ZodString;
134
+ locator: z.ZodDiscriminatedUnion<[z.ZodObject<{
135
+ kind: z.ZodLiteral<"mediaAsset">;
136
+ mediaAssetId: z.ZodString;
137
+ }, z.core.$strict>, z.ZodObject<{
138
+ kind: z.ZodLiteral<"hallItem">;
139
+ hallItemId: z.ZodString;
140
+ subItemId: z.ZodOptional<z.ZodString>;
141
+ }, z.core.$strict>, z.ZodObject<{
142
+ kind: z.ZodLiteral<"squarePost">;
143
+ postId: z.ZodString;
144
+ }, z.core.$strict>, z.ZodObject<{
145
+ kind: z.ZodLiteral<"profileImage">;
146
+ profileUid: z.ZodString;
147
+ }, z.core.$strict>, z.ZodObject<{
148
+ kind: z.ZodLiteral<"username">;
149
+ profileUid: z.ZodString;
150
+ }, z.core.$strict>, z.ZodObject<{
151
+ kind: z.ZodLiteral<"craftSkill">;
152
+ profileUid: z.ZodString;
153
+ craftSkillId: z.ZodString;
154
+ }, z.core.$strict>, z.ZodObject<{
155
+ kind: z.ZodLiteral<"commissionListing">;
156
+ commissionListingId: z.ZodString;
157
+ }, z.core.$strict>, z.ZodObject<{
158
+ kind: z.ZodLiteral<"audition">;
159
+ auditionId: z.ZodString;
160
+ }, z.core.$strict>, z.ZodObject<{
161
+ kind: z.ZodLiteral<"auditionEntry">;
162
+ auditionId: z.ZodString;
163
+ auditionEntryId: z.ZodString;
164
+ }, z.core.$strict>, z.ZodObject<{
165
+ kind: z.ZodLiteral<"guildInviteMessage">;
166
+ channelId: z.ZodString;
167
+ messageId: z.ZodString;
168
+ }, z.core.$strict>, z.ZodObject<{
169
+ kind: z.ZodLiteral<"chatAttachment">;
170
+ channelId: z.ZodString;
171
+ messageId: z.ZodString;
172
+ attachmentId: z.ZodString;
173
+ }, z.core.$strict>, z.ZodObject<{
174
+ kind: z.ZodLiteral<"url">;
175
+ url: z.ZodString;
176
+ }, z.core.$strict>, z.ZodObject<{
177
+ kind: z.ZodLiteral<"additionalText">;
178
+ textRef: z.ZodString;
179
+ }, z.core.$strict>], "kind">;
180
+ surface: z.ZodEnum<{
181
+ chatAttachment: "chatAttachment";
182
+ original: "original";
183
+ hallCopy: "hallCopy";
184
+ profileMedia: "profileMedia";
185
+ variant: "variant";
186
+ cacheServing: "cacheServing";
187
+ exactHashMatch: "exactHashMatch";
188
+ }>;
189
+ expectedGeneration: z.ZodOptional<z.ZodNumber>;
190
+ servingDenyState: z.ZodEnum<{
191
+ pending: "pending";
192
+ failed: "failed";
193
+ denied: "denied";
194
+ }>;
195
+ removalState: z.ZodEnum<{
196
+ pending: "pending";
197
+ failed: "failed";
198
+ removed: "removed";
199
+ tombstoned: "tombstoned";
200
+ }>;
201
+ verificationState: z.ZodEnum<{
202
+ pending: "pending";
203
+ verifiedGone: "verifiedGone";
204
+ leftover: "leftover";
205
+ }>;
206
+ outcome: z.ZodEnum<{
207
+ pending: "pending";
208
+ unableToComplete: "unableToComplete";
209
+ removed: "removed";
210
+ tombstoned: "tombstoned";
211
+ verifiedGone: "verifiedGone";
212
+ leftoverRetrying: "leftoverRetrying";
213
+ terminalException: "terminalException";
214
+ }>;
215
+ attemptCount: z.ZodNumber;
216
+ leaseOwner: z.ZodOptional<z.ZodString>;
217
+ leaseExpiresAt: z.ZodOptional<z.ZodNumber>;
218
+ lastErrorCode: z.ZodOptional<z.ZodString>;
219
+ updatedAt: z.ZodNumber;
220
+ }, z.core.$strict>;
221
+ export type NciiRemovalTargetV1 = z.infer<typeof NciiRemovalTargetV1Schema>;
222
+ //# sourceMappingURL=removal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"removal.d.ts","sourceRoot":"","sources":["../../../src/doc-schemas/ncii/removal.ts"],"names":[],"mappings":"AAiCA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB;+DAC+D;AAC/D,eAAO,MAAM,sBAAsB;;;;;;;;EAQjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,uDAAuD;AACvD,eAAO,MAAM,uBAAuB;;;;;;EAMlC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAOxE;2DAC2D;AAC3D,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;kBAI7B,CAAC;AACZ,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAQhF;;;2CAG2C;AAC3C,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAoBxB,CAAC;AACZ,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAQtE,8BAA8B;AAC9B,eAAO,MAAM,gCAAgC;;;;EAA0C,CAAC;AACxF,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAC;AAE1F,yBAAyB;AACzB,eAAO,MAAM,4BAA4B;;;;;EAAyD,CAAC;AACnG,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,8BAA8B;AAC9B,eAAO,MAAM,iCAAiC;;;;EAAkD,CAAC;AACjG,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAE5F;;;;uDAIuD;AACvD,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAe3B,CAAC;AACZ,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC"}
@@ -0,0 +1,130 @@
1
+ // Trust & Safety — NCII per-request removal deadline + durable removal saga
2
+ // (Appendix A §A11 [H4]).
3
+ //
4
+ // The removal job is REQUEST-scoped, not case-scoped: the deadline monitor lives
5
+ // at `safetySlaMonitors/{requestId}__nciiRemovalDeadline` and a monitor can never
6
+ // be resolved by finishing a DIFFERENT linked request. The case-level
7
+ // `nciiRemovalDeadlineAt` MAY mirror the minimum active deadline but is NOT the
8
+ // source of truth.
9
+ //
10
+ // COMPLETION PREDICATE [H4]: completion is derived ONLY from verified target rows
11
+ // + approved legal outcomes — a request is `completed` ONLY when the reported
12
+ // target AND every known identical copy reaches `verificationState='verifiedGone'`
13
+ // OR carries an approved `NciiTerminalException`. A partial technical failure is
14
+ // the HONEST outcome `unableToComplete` (technical) or
15
+ // `completedWithApprovedException` (counsel-approved) — NEVER ordinary `completed`.
16
+ // A worker crash resumes idempotently (replay is idempotent by `targetKeyHash` +
17
+ // the job's deterministic `jobId`); a `leftover`/`failed` target re-drives from
18
+ // its last unverified sub-state.
19
+ //
20
+ // Every shape here is transcribed verbatim from docs/code_changes_needed/
21
+ // trust-and-safety/IMPLEMENTATION_PLAN.md Appendix A §A11 [H4] — no invented
22
+ // values, no placeholders.
23
+ //
24
+ // SHARED enums + the locator come from ../safety/foundation.js (the single source
25
+ // for every cross-cluster enum); they are NEVER redefined here. This cluster
26
+ // IMPORTS NciiTargetSurfaceSchema, NciiTargetOutcomeSchema, and TargetLocatorV1Schema.
27
+ //
28
+ // Collection note: this cluster introduces NEW Firestore collections (+ one child
29
+ // subcollection under `nciiRemovalJobs`); wiring collections.ts / path-builders.ts
30
+ // / registry.ts is deferred to the app leg (the orchestrator binds the schemas +
31
+ // path builders there); the deterministic doc-id shapes are documented on each
32
+ // schema below.
33
+ import { z } from 'zod';
34
+ import { NciiTargetSurfaceSchema, NciiTargetOutcomeSchema, TargetLocatorV1Schema, } from '../safety/foundation.js';
35
+ // ===========================================================================
36
+ // §A11 [H4] — phase / status vocabularies for the removal saga
37
+ // ===========================================================================
38
+ /** The removal saga phase progression. `denyServing` precedes
39
+ * `removeOrTombstone`; `verifyRemoval` precedes `complete`. */
40
+ export const NciiRemovalPhaseSchema = z.enum([
41
+ 'resolveTargets',
42
+ 'discoverKnownCopies',
43
+ 'denyServing',
44
+ 'removeOrTombstone',
45
+ 'writeHashBlocks',
46
+ 'verifyRemoval',
47
+ 'complete',
48
+ ]);
49
+ /** Top-level durable run status of the removal job. */
50
+ export const NciiRemovalStatusSchema = z.enum([
51
+ 'pending',
52
+ 'running',
53
+ 'retryableFailure',
54
+ 'deadLetter',
55
+ 'completed',
56
+ ]);
57
+ // ===========================================================================
58
+ // §A11 [H4] — NciiDiscoveryCursorV1 (typed resumable discovery cursor — never an
59
+ // untyped blob). Embedded on NciiRemovalJobV1.cursor.
60
+ // ===========================================================================
61
+ /** Typed resumable discovery cursor. `phase` mirrors the job phase enum;
62
+ * `lastSurface` is the cross-cluster NciiTargetSurface. */
63
+ export const NciiDiscoveryCursorV1Schema = z.object({
64
+ phase: NciiRemovalPhaseSchema,
65
+ lastSurface: NciiTargetSurfaceSchema,
66
+ lastCursorToken: z.string().min(1).optional(),
67
+ }).strict();
68
+ // ===========================================================================
69
+ // §A11 [H4] — nciiRemovalJobs/{jobId}
70
+ // Deterministic `jobId = sha256('ncii-removal-v1:' + requestId + ':' + caseId +
71
+ // ':' + generation)` (racing workers create the SAME job — idempotent).
72
+ // ===========================================================================
73
+ /** `nciiRemovalJobs/{jobId}` — REQUEST-scoped durable removal saga. Doc id
74
+ * `jobId` is deterministic:
75
+ * `sha256('ncii-removal-v1:' + requestId + ':' + caseId + ':' + generation)`
76
+ * (racing workers create the same job). */
77
+ export const NciiRemovalJobV1Schema = z.object({
78
+ schemaVersion: z.literal(1),
79
+ // = sha256('ncii-removal-v1:' + requestId + ':' + caseId + ':' + generation)
80
+ jobId: z.string().min(1),
81
+ caseId: z.string().min(1),
82
+ requestId: z.string().min(1),
83
+ generation: z.number(),
84
+ phase: NciiRemovalPhaseSchema,
85
+ status: NciiRemovalStatusSchema,
86
+ // typed resumable discovery cursor — never an untyped blob
87
+ cursor: NciiDiscoveryCursorV1Schema.optional(),
88
+ leaseOwner: z.string().min(1).optional(),
89
+ leaseExpiresAt: z.number().optional(),
90
+ attemptCount: z.number(),
91
+ nextAttemptAt: z.number().optional(),
92
+ lastErrorCode: z.string().optional(),
93
+ createdAt: z.number(),
94
+ updatedAt: z.number(),
95
+ completedAt: z.number().optional(),
96
+ deadLetterAt: z.number().optional(),
97
+ }).strict();
98
+ // ===========================================================================
99
+ // §A11 [H4] — nciiRemovalJobs/{jobId}/targets/{targetKeyHash}
100
+ // Per-target child row. `targetKeyHash` is the deterministic id derived from the
101
+ // canonical locator. Per-target transitions are independent sub-state machines.
102
+ // ===========================================================================
103
+ /** Serving-deny sub-state. */
104
+ export const NciiTargetServingDenyStateSchema = z.enum(['pending', 'denied', 'failed']);
105
+ /** Removal sub-state. */
106
+ export const NciiTargetRemovalStateSchema = z.enum(['pending', 'removed', 'tombstoned', 'failed']);
107
+ /** Verification sub-state. */
108
+ export const NciiTargetVerificationStateSchema = z.enum(['pending', 'verifiedGone', 'leftover']);
109
+ /** `nciiRemovalJobs/{jobId}/targets/{targetKeyHash}` — per-target removal row.
110
+ * Doc id `targetKeyHash` is the deterministic id from the canonical locator.
111
+ * Per-target transitions: `servingDeny (pending→denied | failed)`;
112
+ * `removal (pending→removed | tombstoned | failed)`;
113
+ * `verification (pending→verifiedGone | leftover)`. */
114
+ export const NciiRemovalTargetV1Schema = z.object({
115
+ // deterministic id from the canonical locator
116
+ targetKeyHash: z.string().min(1),
117
+ locator: TargetLocatorV1Schema,
118
+ surface: NciiTargetSurfaceSchema,
119
+ expectedGeneration: z.number().optional(),
120
+ servingDenyState: NciiTargetServingDenyStateSchema,
121
+ removalState: NciiTargetRemovalStateSchema,
122
+ verificationState: NciiTargetVerificationStateSchema,
123
+ outcome: NciiTargetOutcomeSchema,
124
+ attemptCount: z.number(),
125
+ leaseOwner: z.string().min(1).optional(),
126
+ leaseExpiresAt: z.number().optional(),
127
+ lastErrorCode: z.string().optional(),
128
+ updatedAt: z.number(),
129
+ }).strict();
130
+ //# sourceMappingURL=removal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"removal.js","sourceRoot":"","sources":["../../../src/doc-schemas/ncii/removal.ts"],"names":[],"mappings":"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"}