@giveitsmaller/contracts 0.7.0 → 0.9.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 (354) hide show
  1. package/asyncapi/events.yaml +548 -139
  2. package/availability/availability.json +59 -22
  3. package/dist/asyncapi/LongFormJobMessage.d.ts +11 -0
  4. package/dist/asyncapi/LongFormJobMessage.js +1 -0
  5. package/dist/asyncapi/LongFormOperationType.d.ts +5 -0
  6. package/dist/asyncapi/LongFormOperationType.js +6 -0
  7. package/dist/asyncapi/LongFormProcessingClass.d.ts +4 -0
  8. package/dist/asyncapi/LongFormProcessingClass.js +5 -0
  9. package/dist/asyncapi/SourceEntry.d.ts +2 -0
  10. package/dist/asyncapi/index.d.ts +3 -0
  11. package/dist/asyncapi/index.js +2 -0
  12. package/dist/openapi/models/AudioWatermarkDecodeRequest.d.ts +2 -2
  13. package/dist/openapi/models/AudioWatermarkDecodeRequest.js +2 -2
  14. package/dist/openapi/models/AudioWatermarkDecodeResponse.d.ts +2 -2
  15. package/dist/openapi/models/AudioWatermarkDecodeResponse.js +2 -2
  16. package/dist/openapi/models/AuthErrorResponse.d.ts +9 -6
  17. package/dist/openapi/models/AuthErrorResponse.js +2 -2
  18. package/dist/openapi/models/AuthErrorType.d.ts +2 -2
  19. package/dist/openapi/models/AuthErrorType.js +2 -2
  20. package/dist/openapi/models/AvailabilityValue.d.ts +2 -2
  21. package/dist/openapi/models/AvailabilityValue.js +2 -2
  22. package/dist/openapi/models/BalanceExhaustedResponse.d.ts +2 -2
  23. package/dist/openapi/models/BalanceExhaustedResponse.js +2 -2
  24. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.d.ts +2 -2
  25. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.js +2 -2
  26. package/dist/openapi/models/CallbackEventType.d.ts +2 -2
  27. package/dist/openapi/models/CallbackEventType.js +2 -2
  28. package/dist/openapi/models/ConnectionSource.d.ts +2 -2
  29. package/dist/openapi/models/ConnectionSource.js +2 -2
  30. package/dist/openapi/models/ContactRequest.d.ts +2 -2
  31. package/dist/openapi/models/ContactRequest.js +2 -2
  32. package/dist/openapi/models/ContactSubject.d.ts +2 -2
  33. package/dist/openapi/models/ContactSubject.js +2 -2
  34. package/dist/openapi/models/ContactValidationErrorResponse.d.ts +2 -2
  35. package/dist/openapi/models/ContactValidationErrorResponse.js +2 -2
  36. package/dist/openapi/models/CreateExternalImport403Response.d.ts +2 -2
  37. package/dist/openapi/models/CreateExternalImport403Response.js +2 -2
  38. package/dist/openapi/models/CreateExternalImport422Response.d.ts +7 -3
  39. package/dist/openapi/models/CreateExternalImport422Response.js +18 -22
  40. package/dist/openapi/models/CreateWorkflow422Response.d.ts +11 -3
  41. package/dist/openapi/models/CreateWorkflow422Response.js +28 -36
  42. package/dist/openapi/models/CreditTransaction.d.ts +2 -2
  43. package/dist/openapi/models/CreditTransaction.js +2 -2
  44. package/dist/openapi/models/CreditTransactionSourceBucket.d.ts +2 -2
  45. package/dist/openapi/models/CreditTransactionSourceBucket.js +2 -2
  46. package/dist/openapi/models/CreditsBalanceResponse.d.ts +2 -2
  47. package/dist/openapi/models/CreditsBalanceResponse.js +2 -2
  48. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.d.ts +2 -2
  49. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.js +2 -2
  50. package/dist/openapi/models/CreditsUsageResponse.d.ts +2 -2
  51. package/dist/openapi/models/CreditsUsageResponse.js +2 -2
  52. package/dist/openapi/models/CreditsUsageSuccessEnvelope.d.ts +2 -2
  53. package/dist/openapi/models/CreditsUsageSuccessEnvelope.js +2 -2
  54. package/dist/openapi/models/Delivery.d.ts +16 -3
  55. package/dist/openapi/models/Delivery.js +2 -2
  56. package/dist/openapi/models/DeliveryOutputRef.d.ts +2 -2
  57. package/dist/openapi/models/DeliveryOutputRef.js +2 -2
  58. package/dist/openapi/models/DeliveryPlan.d.ts +2 -2
  59. package/dist/openapi/models/DeliveryPlan.js +2 -2
  60. package/dist/openapi/models/DeliveryPlanOutput.d.ts +2 -2
  61. package/dist/openapi/models/DeliveryPlanOutput.js +2 -2
  62. package/dist/openapi/models/DeliveryPlanReason.d.ts +2 -2
  63. package/dist/openapi/models/DeliveryPlanReason.js +2 -2
  64. package/dist/openapi/models/DeliverySelection.d.ts +2 -2
  65. package/dist/openapi/models/DeliverySelection.js +2 -2
  66. package/dist/openapi/models/EndpointProjection.d.ts +2 -2
  67. package/dist/openapi/models/EndpointProjection.js +2 -2
  68. package/dist/openapi/models/ErrorEnvelope.d.ts +9 -6
  69. package/dist/openapi/models/ErrorEnvelope.js +2 -2
  70. package/dist/openapi/models/EstimateQuality.d.ts +2 -2
  71. package/dist/openapi/models/EstimateQuality.js +2 -2
  72. package/dist/openapi/models/EstimateRange.d.ts +2 -2
  73. package/dist/openapi/models/EstimateRange.js +2 -2
  74. package/dist/openapi/models/ExternalDestination.d.ts +2 -2
  75. package/dist/openapi/models/ExternalDestination.js +2 -2
  76. package/dist/openapi/models/ExternalImportCreatedResponse.d.ts +2 -2
  77. package/dist/openapi/models/ExternalImportCreatedResponse.js +2 -2
  78. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.d.ts +2 -2
  79. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.js +2 -2
  80. package/dist/openapi/models/ExternalImportRequest.d.ts +2 -2
  81. package/dist/openapi/models/ExternalImportRequest.js +2 -2
  82. package/dist/openapi/models/ExternalImportToken.d.ts +2 -2
  83. package/dist/openapi/models/ExternalImportToken.js +2 -2
  84. package/dist/openapi/models/ExternalSource.d.ts +2 -2
  85. package/dist/openapi/models/ExternalSource.js +2 -2
  86. package/dist/openapi/models/FeatureNotAvailableResponse.d.ts +15 -13
  87. package/dist/openapi/models/FeatureNotAvailableResponse.js +2 -2
  88. package/dist/openapi/models/FeatureTierRestrictedResponse.d.ts +9 -6
  89. package/dist/openapi/models/FeatureTierRestrictedResponse.js +2 -2
  90. package/dist/openapi/models/FeatureViolation.d.ts +2 -2
  91. package/dist/openapi/models/FeatureViolation.js +2 -2
  92. package/dist/openapi/models/JobDefinition.d.ts +9 -6
  93. package/dist/openapi/models/JobDefinition.js +2 -2
  94. package/dist/openapi/models/JobDownload.d.ts +2 -2
  95. package/dist/openapi/models/JobDownload.js +2 -2
  96. package/dist/openapi/models/JobInputV2.d.ts +2 -2
  97. package/dist/openapi/models/JobInputV2.js +2 -2
  98. package/dist/openapi/models/JobOutputSource.d.ts +2 -2
  99. package/dist/openapi/models/JobOutputSource.js +2 -2
  100. package/dist/openapi/models/JobResponse.d.ts +24 -2
  101. package/dist/openapi/models/JobResponse.js +5 -2
  102. package/dist/openapi/models/JobStatus.d.ts +2 -2
  103. package/dist/openapi/models/JobStatus.js +2 -2
  104. package/dist/openapi/models/JobType.d.ts +2 -2
  105. package/dist/openapi/models/JobType.js +2 -2
  106. package/dist/openapi/models/LivenessResponse.d.ts +2 -2
  107. package/dist/openapi/models/LivenessResponse.js +2 -2
  108. package/dist/openapi/models/LoginUser200Response.d.ts +2 -2
  109. package/dist/openapi/models/LoginUser200Response.js +2 -2
  110. package/dist/openapi/models/LoginUser200ResponseData.d.ts +2 -2
  111. package/dist/openapi/models/LoginUser200ResponseData.js +2 -2
  112. package/dist/openapi/models/LoginUser200ResponseDataUser.d.ts +2 -2
  113. package/dist/openapi/models/LoginUser200ResponseDataUser.js +2 -2
  114. package/dist/openapi/models/LoginUserRequest.d.ts +2 -2
  115. package/dist/openapi/models/LoginUserRequest.js +2 -2
  116. package/dist/openapi/models/LogoutUser200Response.d.ts +2 -2
  117. package/dist/openapi/models/LogoutUser200Response.js +2 -2
  118. package/dist/openapi/models/MetadataResponse.d.ts +2 -2
  119. package/dist/openapi/models/MetadataResponse.js +2 -2
  120. package/dist/openapi/models/MetadataResponseDimensions.d.ts +2 -2
  121. package/dist/openapi/models/MetadataResponseDimensions.js +2 -2
  122. package/dist/openapi/models/MetadataResponseExif.d.ts +2 -2
  123. package/dist/openapi/models/MetadataResponseExif.js +2 -2
  124. package/dist/openapi/models/MetadataResponseExifGps.d.ts +2 -2
  125. package/dist/openapi/models/MetadataResponseExifGps.js +2 -2
  126. package/dist/openapi/models/MetadataSuccessEnvelope.d.ts +2 -2
  127. package/dist/openapi/models/MetadataSuccessEnvelope.js +2 -2
  128. package/dist/openapi/models/MimeGroupSchema.d.ts +2 -2
  129. package/dist/openapi/models/MimeGroupSchema.js +2 -2
  130. package/dist/openapi/models/MultipartCompleteRequest.d.ts +2 -2
  131. package/dist/openapi/models/MultipartCompleteRequest.js +2 -2
  132. package/dist/openapi/models/MultipartCompleteRequestPartsInner.d.ts +2 -2
  133. package/dist/openapi/models/MultipartCompleteRequestPartsInner.js +2 -2
  134. package/dist/openapi/models/MultipartCompleteResponse.d.ts +2 -2
  135. package/dist/openapi/models/MultipartCompleteResponse.js +2 -2
  136. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.d.ts +2 -2
  137. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.js +2 -2
  138. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.d.ts +2 -2
  139. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.js +2 -2
  140. package/dist/openapi/models/MultipartInitiateResponse.d.ts +2 -2
  141. package/dist/openapi/models/MultipartInitiateResponse.js +2 -2
  142. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.d.ts +2 -2
  143. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.js +2 -2
  144. package/dist/openapi/models/MultipartKeepaliveResponse.d.ts +2 -2
  145. package/dist/openapi/models/MultipartKeepaliveResponse.js +2 -2
  146. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.d.ts +2 -2
  147. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.js +2 -2
  148. package/dist/openapi/models/MultipartPartListing.d.ts +2 -2
  149. package/dist/openapi/models/MultipartPartListing.js +2 -2
  150. package/dist/openapi/models/MultipartPresignRequest.d.ts +2 -2
  151. package/dist/openapi/models/MultipartPresignRequest.js +2 -2
  152. package/dist/openapi/models/MultipartPresignResponse.d.ts +2 -2
  153. package/dist/openapi/models/MultipartPresignResponse.js +2 -2
  154. package/dist/openapi/models/MultipartPresignSuccessEnvelope.d.ts +2 -2
  155. package/dist/openapi/models/MultipartPresignSuccessEnvelope.js +2 -2
  156. package/dist/openapi/models/MultipartStatusResponse.d.ts +2 -2
  157. package/dist/openapi/models/MultipartStatusResponse.js +2 -2
  158. package/dist/openapi/models/MultipartStatusSuccessEnvelope.d.ts +2 -2
  159. package/dist/openapi/models/MultipartStatusSuccessEnvelope.js +2 -2
  160. package/dist/openapi/models/OperationDefinition.d.ts +2 -2
  161. package/dist/openapi/models/OperationDefinition.js +2 -2
  162. package/dist/openapi/models/OperationDownload.d.ts +2 -2
  163. package/dist/openapi/models/OperationDownload.js +2 -2
  164. package/dist/openapi/models/OperationInputModel.d.ts +2 -2
  165. package/dist/openapi/models/OperationInputModel.js +2 -2
  166. package/dist/openapi/models/OperationResponse.d.ts +2 -2
  167. package/dist/openapi/models/OperationResponse.js +2 -2
  168. package/dist/openapi/models/OperationResult.d.ts +2 -2
  169. package/dist/openapi/models/OperationResult.js +2 -2
  170. package/dist/openapi/models/OperationResultMetrics.d.ts +21 -2
  171. package/dist/openapi/models/OperationResultMetrics.js +7 -2
  172. package/dist/openapi/models/OperationSchemaDefinition.d.ts +2 -2
  173. package/dist/openapi/models/OperationSchemaDefinition.js +2 -2
  174. package/dist/openapi/models/OperationStatus.d.ts +2 -2
  175. package/dist/openapi/models/OperationStatus.js +2 -2
  176. package/dist/openapi/models/OperationType.d.ts +15 -13
  177. package/dist/openapi/models/OperationType.js +15 -13
  178. package/dist/openapi/models/OperationsSchemaResponse.d.ts +9 -2
  179. package/dist/openapi/models/OperationsSchemaResponse.js +5 -2
  180. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.d.ts +55 -0
  181. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.js +42 -0
  182. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.d.ts +40 -0
  183. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.js +45 -0
  184. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.d.ts +45 -0
  185. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.js +43 -0
  186. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.d.ts +33 -0
  187. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.js +42 -0
  188. package/dist/openapi/models/OptionSchema.d.ts +22 -2
  189. package/dist/openapi/models/OptionSchema.js +4 -2
  190. package/dist/openapi/models/PerRoleCardinalityEntry.d.ts +2 -2
  191. package/dist/openapi/models/PerRoleCardinalityEntry.js +2 -2
  192. package/dist/openapi/models/PerValueAvailabilityEntry.d.ts +2 -2
  193. package/dist/openapi/models/PerValueAvailabilityEntry.js +2 -2
  194. package/dist/openapi/models/PresignedUrlPart.d.ts +2 -2
  195. package/dist/openapi/models/PresignedUrlPart.js +2 -2
  196. package/dist/openapi/models/ProbePendingResponse.d.ts +16 -12
  197. package/dist/openapi/models/ProbePendingResponse.js +2 -2
  198. package/dist/openapi/models/ProcessingClass.d.ts +2 -2
  199. package/dist/openapi/models/ProcessingClass.js +2 -2
  200. package/dist/openapi/models/ProcessingClassBandViolation.d.ts +2 -2
  201. package/dist/openapi/models/ProcessingClassBandViolation.js +2 -2
  202. package/dist/openapi/models/ProcessingClassExceedsBandResponse.d.ts +15 -10
  203. package/dist/openapi/models/ProcessingClassExceedsBandResponse.js +2 -2
  204. package/dist/openapi/models/ProcessingClassHint.d.ts +2 -2
  205. package/dist/openapi/models/ProcessingClassHint.js +2 -2
  206. package/dist/openapi/models/ProcessingClassReason.d.ts +2 -2
  207. package/dist/openapi/models/ProcessingClassReason.js +2 -2
  208. package/dist/openapi/models/ProcessingClassRejectReason.d.ts +2 -2
  209. package/dist/openapi/models/ProcessingClassRejectReason.js +2 -2
  210. package/dist/openapi/models/ProcessingPlan.d.ts +2 -2
  211. package/dist/openapi/models/ProcessingPlan.js +2 -2
  212. package/dist/openapi/models/ProcessingPlanJob.d.ts +2 -2
  213. package/dist/openapi/models/ProcessingPlanJob.js +2 -2
  214. package/dist/openapi/models/ReEncodeDecision.d.ts +38 -0
  215. package/dist/openapi/models/ReEncodeDecision.js +56 -0
  216. package/dist/openapi/models/ReadinessResponse.d.ts +2 -2
  217. package/dist/openapi/models/ReadinessResponse.js +2 -2
  218. package/dist/openapi/models/ResponseEnvelope.d.ts +2 -2
  219. package/dist/openapi/models/ResponseEnvelope.js +2 -2
  220. package/dist/openapi/models/RetryResponse.d.ts +2 -2
  221. package/dist/openapi/models/RetryResponse.js +2 -2
  222. package/dist/openapi/models/RetrySuccessEnvelope.d.ts +2 -2
  223. package/dist/openapi/models/RetrySuccessEnvelope.js +2 -2
  224. package/dist/openapi/models/SseCompletionBase.d.ts +2 -2
  225. package/dist/openapi/models/SseCompletionBase.js +2 -2
  226. package/dist/openapi/models/SseEventType.d.ts +2 -2
  227. package/dist/openapi/models/SseEventType.js +2 -2
  228. package/dist/openapi/models/SseJobCompletedData.d.ts +2 -2
  229. package/dist/openapi/models/SseJobCompletedData.js +2 -2
  230. package/dist/openapi/models/SseJobFailedData.d.ts +2 -2
  231. package/dist/openapi/models/SseJobFailedData.js +2 -2
  232. package/dist/openapi/models/SseMultiOutputCompletion.d.ts +2 -2
  233. package/dist/openapi/models/SseMultiOutputCompletion.js +2 -2
  234. package/dist/openapi/models/SseMultiOutputCompletionMetrics.d.ts +2 -2
  235. package/dist/openapi/models/SseMultiOutputCompletionMetrics.js +2 -2
  236. package/dist/openapi/models/SseMultiOutputCompletionWithKind.d.ts +2 -2
  237. package/dist/openapi/models/SseMultiOutputCompletionWithKind.js +2 -2
  238. package/dist/openapi/models/SseMultiOutputResultEntry.d.ts +2 -2
  239. package/dist/openapi/models/SseMultiOutputResultEntry.js +2 -2
  240. package/dist/openapi/models/SseOperationCompletedData.d.ts +2 -2
  241. package/dist/openapi/models/SseOperationCompletedData.js +2 -2
  242. package/dist/openapi/models/SseOperationCompletionResult.d.ts +2 -2
  243. package/dist/openapi/models/SseOperationCompletionResult.js +2 -2
  244. package/dist/openapi/models/SseOperationFailedData.d.ts +2 -2
  245. package/dist/openapi/models/SseOperationFailedData.js +2 -2
  246. package/dist/openapi/models/SseOperationProgressData.d.ts +4 -3
  247. package/dist/openapi/models/SseOperationProgressData.js +2 -2
  248. package/dist/openapi/models/SseSingleOutputCompletion.d.ts +2 -2
  249. package/dist/openapi/models/SseSingleOutputCompletion.js +2 -2
  250. package/dist/openapi/models/SseWorkflowTerminalData.d.ts +2 -2
  251. package/dist/openapi/models/SseWorkflowTerminalData.js +2 -2
  252. package/dist/openapi/models/TierRestrictionKind.d.ts +2 -2
  253. package/dist/openapi/models/TierRestrictionKind.js +2 -2
  254. package/dist/openapi/models/TierRestrictionResponse.d.ts +9 -6
  255. package/dist/openapi/models/TierRestrictionResponse.js +2 -2
  256. package/dist/openapi/models/UploadConstraintsApplied.d.ts +2 -2
  257. package/dist/openapi/models/UploadConstraintsApplied.js +2 -2
  258. package/dist/openapi/models/UploadDurationExceedsTierResponse.d.ts +9 -6
  259. package/dist/openapi/models/UploadDurationExceedsTierResponse.js +2 -2
  260. package/dist/openapi/models/UploadFile403Response.d.ts +2 -2
  261. package/dist/openapi/models/UploadFile403Response.js +2 -2
  262. package/dist/openapi/models/UploadFile422Response.d.ts +2 -2
  263. package/dist/openapi/models/UploadFile422Response.js +2 -2
  264. package/dist/openapi/models/UploadProbeMediaMetadata.d.ts +16 -5
  265. package/dist/openapi/models/UploadProbeMediaMetadata.js +2 -2
  266. package/dist/openapi/models/UploadProbeProcessingClass.d.ts +2 -2
  267. package/dist/openapi/models/UploadProbeProcessingClass.js +2 -2
  268. package/dist/openapi/models/UploadProbeResponse.d.ts +2 -2
  269. package/dist/openapi/models/UploadProbeResponse.js +2 -2
  270. package/dist/openapi/models/UploadProbeStatus.d.ts +2 -2
  271. package/dist/openapi/models/UploadProbeStatus.js +2 -2
  272. package/dist/openapi/models/UploadProbeSuccessEnvelope.d.ts +2 -2
  273. package/dist/openapi/models/UploadProbeSuccessEnvelope.js +2 -2
  274. package/dist/openapi/models/UploadResponse.d.ts +2 -2
  275. package/dist/openapi/models/UploadResponse.js +2 -2
  276. package/dist/openapi/models/UploadSizeExceedsTierResponse.d.ts +9 -6
  277. package/dist/openapi/models/UploadSizeExceedsTierResponse.js +2 -2
  278. package/dist/openapi/models/UploadSource.d.ts +2 -2
  279. package/dist/openapi/models/UploadSource.js +2 -2
  280. package/dist/openapi/models/UploadSuccessEnvelope.d.ts +2 -2
  281. package/dist/openapi/models/UploadSuccessEnvelope.js +2 -2
  282. package/dist/openapi/models/UploadThresholds.d.ts +2 -2
  283. package/dist/openapi/models/UploadThresholds.js +2 -2
  284. package/dist/openapi/models/UserTier.d.ts +2 -2
  285. package/dist/openapi/models/UserTier.js +2 -2
  286. package/dist/openapi/models/ValidationErrorEnvelope.d.ts +33 -3
  287. package/dist/openapi/models/ValidationErrorEnvelope.js +12 -2
  288. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.d.ts +2 -2
  289. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.js +2 -2
  290. package/dist/openapi/models/WarningType.d.ts +2 -2
  291. package/dist/openapi/models/WarningType.js +2 -2
  292. package/dist/openapi/models/WebhookOperationContext.d.ts +2 -2
  293. package/dist/openapi/models/WebhookOperationContext.js +2 -2
  294. package/dist/openapi/models/WebhookPayload.d.ts +2 -2
  295. package/dist/openapi/models/WebhookPayload.js +2 -2
  296. package/dist/openapi/models/WorkflowCancelBillingEffect.d.ts +2 -2
  297. package/dist/openapi/models/WorkflowCancelBillingEffect.js +2 -2
  298. package/dist/openapi/models/WorkflowCancelResponse.d.ts +2 -2
  299. package/dist/openapi/models/WorkflowCancelResponse.js +2 -2
  300. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.d.ts +2 -2
  301. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.js +2 -2
  302. package/dist/openapi/models/WorkflowCreateRequest.d.ts +2 -2
  303. package/dist/openapi/models/WorkflowCreateRequest.js +2 -2
  304. package/dist/openapi/models/WorkflowCreateResponse.d.ts +2 -2
  305. package/dist/openapi/models/WorkflowCreateResponse.js +2 -2
  306. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.d.ts +2 -2
  307. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.js +2 -2
  308. package/dist/openapi/models/WorkflowDownloadResponse.d.ts +2 -2
  309. package/dist/openapi/models/WorkflowDownloadResponse.js +2 -2
  310. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.d.ts +2 -2
  311. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.js +2 -2
  312. package/dist/openapi/models/WorkflowEdge.d.ts +2 -2
  313. package/dist/openapi/models/WorkflowEdge.js +2 -2
  314. package/dist/openapi/models/WorkflowExpiredResponse.d.ts +9 -6
  315. package/dist/openapi/models/WorkflowExpiredResponse.js +2 -2
  316. package/dist/openapi/models/WorkflowPauseRequiredAction.d.ts +2 -2
  317. package/dist/openapi/models/WorkflowPauseRequiredAction.js +2 -2
  318. package/dist/openapi/models/WorkflowPausedDetail.d.ts +2 -2
  319. package/dist/openapi/models/WorkflowPausedDetail.js +2 -2
  320. package/dist/openapi/models/WorkflowPausedDetailLinks.d.ts +2 -2
  321. package/dist/openapi/models/WorkflowPausedDetailLinks.js +2 -2
  322. package/dist/openapi/models/WorkflowProcessing.d.ts +2 -2
  323. package/dist/openapi/models/WorkflowProcessing.js +2 -2
  324. package/dist/openapi/models/WorkflowResumeResponse.d.ts +2 -2
  325. package/dist/openapi/models/WorkflowResumeResponse.js +2 -2
  326. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.d.ts +2 -2
  327. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.js +2 -2
  328. package/dist/openapi/models/WorkflowSource.d.ts +2 -2
  329. package/dist/openapi/models/WorkflowSource.js +2 -2
  330. package/dist/openapi/models/WorkflowStatus.d.ts +2 -2
  331. package/dist/openapi/models/WorkflowStatus.js +2 -2
  332. package/dist/openapi/models/WorkflowStatusResponse.d.ts +2 -2
  333. package/dist/openapi/models/WorkflowStatusResponse.js +2 -2
  334. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.d.ts +2 -2
  335. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.js +2 -2
  336. package/dist/openapi/models/WorkflowWarning.d.ts +2 -2
  337. package/dist/openapi/models/WorkflowWarning.js +2 -2
  338. package/dist/openapi/models/WorkflowWarningSeverity.d.ts +2 -2
  339. package/dist/openapi/models/WorkflowWarningSeverity.js +2 -2
  340. package/dist/openapi/models/index.d.ts +5 -0
  341. package/dist/openapi/models/index.js +5 -0
  342. package/dist/openapi/runtime.d.ts +2 -2
  343. package/dist/openapi/runtime.js +2 -2
  344. package/dist/operations/audio_to_video.metadata.js +1 -1
  345. package/dist/operations/merge.metadata.js +0 -3
  346. package/dist/operations/split.metadata.js +5 -1
  347. package/dist/operations/video_watermark.metadata.js +2 -2
  348. package/openapi/api.yaml +415 -98
  349. package/operations/schemas/audio_to_video.yaml +6 -4
  350. package/operations/schemas/custom_luma.yaml +3 -4
  351. package/operations/schemas/merge.yaml +20 -16
  352. package/operations/schemas/split.yaml +11 -4
  353. package/operations/schemas/video_watermark.yaml +13 -5
  354. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  asyncapi: 3.0.0
2
2
  info:
3
3
  title: GISL Compression Events
4
- version: 3.2.0
4
+ version: 3.9.0
5
5
  description: |
6
6
  Asynchronous event contracts for the GISL (Give It Smaller) compression service.
7
7
 
@@ -21,16 +21,20 @@ info:
21
21
  video_watermark, video_text_watermark, split). Filter attribute:
22
22
  `operation_type`. Subscriptions: one queue per operation type,
23
23
  plus four thumbnail sub-type queues during the migration window.
24
- `custom_luma`, `audio_overlay`, `audio_watermark`,
25
- `audio_to_video`, `video_watermark`, `video_text_watermark`, and
26
- `split` are `availability: planned` (per
27
- [I29](https://trello.com/c/EPUE5Vs1) +
24
+ `custom_luma`, `audio_overlay`, `audio_watermark`, and
25
+ `video_text_watermark` are `availability: planned`
26
+ (per [I29](https://trello.com/c/EPUE5Vs1) +
28
27
  [I19](https://trello.com/c/Xr3Z4GBF) +
29
28
  [I20](https://trello.com/c/omiCq7Vn) +
30
- [`SlluxMBN`](https://trello.com/c/SlluxMBN) +
31
- [`4NrRPCgh`](https://trello.com/c/4NrRPCgh) +
32
- [`vKI0CFDu`](https://trello.com/c/vKI0CFDu)) their queues are
33
- declared but receive no traffic until Lambda ships.
29
+ [`4NrRPCgh`](https://trello.com/c/4NrRPCgh)) — their queues are
30
+ declared but receive no traffic until Lambda ships. `split` is
31
+ `availability: beta` for its `audio` mime_group (worker live on
32
+ staging [`vKI0CFDu`](https://trello.com/c/vKI0CFDu)); its
33
+ `image_gif`, `document_pdf`, and `video` mime_groups stay
34
+ `availability: planned`.
35
+ `audio_to_video` and `video_watermark` are `availability: beta`
36
+ (Wave A activation [`c3uthIP4`](https://trello.com/c/c3uthIP4) —
37
+ backends live; the API accepts + publishes, traffic flows).
34
38
  `audio_watermark` additionally requires `enterprise` tier.
35
39
 
36
40
  **Publisher branching rule** (implemented in `compression_api`'s
@@ -54,11 +58,13 @@ info:
54
58
  **Thumbnail migration window.** The terraform topology has both the
55
59
  legacy `ops-thumbnail` queue and four new sub-type queues
56
60
  (`ops-thumbnail-{image,video,document,office}`) live simultaneously.
57
- The API publisher currently emits the legacy `operation_type=thumbnail`
58
- only; adoption of the four sub-type values (`thumbnail_image`,
59
- `thumbnail_video`, `thumbnail_document`, `thumbnail_office`) is a
60
- follow-up API PR. Both routing targets are documented in this contract
61
- because both are valid during the migration.
61
+ The API publisher emits the four sub-type values (`thumbnail_image`,
62
+ `thumbnail_video`, `thumbnail_document`, `thumbnail_office`) on the
63
+ SNS `operation_type` attribute, resolved from each operation's
64
+ effective input MIME; the legacy `operation_type=thumbnail` attribute
65
+ is retained as a valid routing target during the migration window but
66
+ is no longer emitted. Both routing targets are documented in this
67
+ contract because both remain valid during the migration.
62
68
 
63
69
  **Notifications (Lambda -> API).** Lambda functions publish progress
64
70
  and result notifications to the FIFO SNS topic
@@ -191,19 +197,23 @@ channels:
191
197
  [I19](https://trello.com/c/Xr3Z4GBF) — same `feature_not_
192
198
  available` 422 gating)
193
199
  - `operation_type = audio_to_video` -> `ops-audio-to-video` queue
194
- (gated by `availability: planned` until Lambda ships per
195
- [`SlluxMBN`](https://trello.com/c/SlluxMBN) — same
196
- `feature_not_available` 422 gating)
200
+ (`availability: beta` Wave A activated per
201
+ [`SlluxMBN`](https://trello.com/c/SlluxMBN) +
202
+ [`c3uthIP4`](https://trello.com/c/c3uthIP4); backend live, traffic
203
+ flows)
197
204
  - `operation_type = video_watermark` -> `ops-video-watermark`
198
- queue (gated by `availability: planned` until Lambda ships per
199
- [`4NrRPCgh`](https://trello.com/c/4NrRPCgh) — same gating)
205
+ queue (`availability: beta` Wave A activated per
206
+ [`4NrRPCgh`](https://trello.com/c/4NrRPCgh) +
207
+ [`c3uthIP4`](https://trello.com/c/c3uthIP4); backend live)
200
208
  - `operation_type = video_text_watermark` ->
201
209
  `ops-video-text-watermark` queue (gated by
202
210
  `availability: planned` until Lambda ships per
203
211
  [`4NrRPCgh`](https://trello.com/c/4NrRPCgh) — same gating)
204
- - `operation_type = split` -> `ops-split` queue (gated by
205
- `availability: planned` until Lambda ships per
206
- [`vKI0CFDu`](https://trello.com/c/vKI0CFDu) same gating;
212
+ - `operation_type = split` -> `ops-split` queue (the `audio`
213
+ mime_group is `availability: beta` audio split traffic
214
+ reaches this queue; `image_gif` / `document_pdf` / `video`
215
+ stay `availability: planned` until their Lambdas ship per
216
+ [`vKI0CFDu`](https://trello.com/c/vKI0CFDu);
207
217
  long-form video splits route via `processing_class` to the
208
218
  `split-video-fargate` worker, same OperationType, different
209
219
  worker)
@@ -223,9 +233,11 @@ channels:
223
233
 
224
234
  **Thumbnail migration window.** The legacy `ops-thumbnail` queue and
225
235
  the four sub-type queues are all live simultaneously. The API
226
- publisher currently emits `operation_type=thumbnail` (legacy);
227
- adoption of the four sub-type values is a follow-up API PR. Both
228
- paths are valid routing targets today.
236
+ publisher emits the four sub-type values on the SNS `operation_type`
237
+ attribute (resolved from effective input MIME); the legacy
238
+ `operation_type=thumbnail` attribute is retained as a valid routing
239
+ target but is no longer emitted. Both paths are valid routing
240
+ targets today.
229
241
  parameters:
230
242
  env:
231
243
  description: Environment (local, stg, prod)
@@ -245,6 +257,12 @@ channels:
245
257
  SQS queue for image compression jobs.
246
258
  Subscribed to the `job-requests` SNS topic with filter
247
259
  `job_type = image`. Handles `compress` only for image inputs.
260
+ bindings:
261
+ sqs:
262
+ queue:
263
+ name: gisl-{env}-{region}-jobs-image
264
+ fifoQueue: false
265
+ bindingVersion: '0.2.0'
248
266
  parameters:
249
267
  env:
250
268
  description: Environment (local, stg, prod)
@@ -260,6 +278,12 @@ channels:
260
278
  SQS queue for video compression jobs.
261
279
  Subscribed to the `job-requests` SNS topic with filter
262
280
  `job_type = video`. Handles `compress` only for video inputs.
281
+ bindings:
282
+ sqs:
283
+ queue:
284
+ name: gisl-{env}-{region}-jobs-video
285
+ fifoQueue: false
286
+ bindingVersion: '0.2.0'
263
287
  parameters:
264
288
  env:
265
289
  description: Environment (local, stg, prod)
@@ -275,6 +299,12 @@ channels:
275
299
  SQS queue for audio compression jobs.
276
300
  Subscribed to the `job-requests` SNS topic with filter
277
301
  `job_type = audio`. Handles `compress` only for audio inputs.
302
+ bindings:
303
+ sqs:
304
+ queue:
305
+ name: gisl-{env}-{region}-jobs-audio
306
+ fifoQueue: false
307
+ bindingVersion: '0.2.0'
278
308
  parameters:
279
309
  env:
280
310
  description: Environment (local, stg, prod)
@@ -290,6 +320,12 @@ channels:
290
320
  SQS queue for document compression jobs.
291
321
  Subscribed to the `job-requests` SNS topic with filter
292
322
  `job_type = document`. Handles `compress` only for document inputs.
323
+ bindings:
324
+ sqs:
325
+ queue:
326
+ name: gisl-{env}-{region}-jobs-document
327
+ fifoQueue: false
328
+ bindingVersion: '0.2.0'
293
329
  parameters:
294
330
  env:
295
331
  description: Environment (local, stg, prod)
@@ -350,12 +386,14 @@ channels:
350
386
  Subscribed to the `operations` SNS topic with filter
351
387
  `operation_type = thumbnail`.
352
388
 
353
- **Migration window**: This is the legacy routing target and is
354
- currently the only one the API publisher emits for (via
355
- `operation_type=thumbnail`). It handles thumbnail requests for all
356
- media types. Retirement is planned after the API publisher adopts
357
- the four sub-type values (`thumbnail_image`, `thumbnail_video`,
358
- `thumbnail_document`, `thumbnail_office`) in a follow-up API PR.
389
+ **Migration window**: This is the legacy routing target. It is
390
+ retained as a valid routing target (via `operation_type=thumbnail`)
391
+ and handles thumbnail requests for all media types, but the API
392
+ publisher no longer emits it the publisher now emits the four
393
+ sub-type values (`thumbnail_image`, `thumbnail_video`,
394
+ `thumbnail_document`, `thumbnail_office`), resolved from each
395
+ operation's effective input MIME. Retirement of this legacy queue
396
+ follows once no traffic remains.
359
397
  parameters:
360
398
  env:
361
399
  description: Environment (local, stg, prod)
@@ -373,9 +411,10 @@ channels:
373
411
  `operation_type = thumbnail_image`. Backed by the Rust image
374
412
  thumbnail Lambda (`operation-thumbnail-image`).
375
413
 
376
- Not yet receiving traffic — the API publisher currently emits
377
- `operation_type=thumbnail` (legacy) and will flip to
378
- `thumbnail_image` after a follow-up API PR adds input-MIME dispatch.
414
+ Receives traffic for image inputs — the API publisher emits
415
+ `operation_type=thumbnail_image` on the SNS attribute (resolved from
416
+ the operation's effective input MIME); the payload `operation_type`
417
+ field stays `thumbnail`.
379
418
  parameters:
380
419
  env:
381
420
  description: Environment (local, stg, prod)
@@ -393,9 +432,10 @@ channels:
393
432
  `operation_type = thumbnail_video`. Backed by the FFmpeg video
394
433
  thumbnail Lambda (`operation-thumbnail-video`).
395
434
 
396
- Not yet receiving traffic — the API publisher currently emits
397
- `operation_type=thumbnail` (legacy) and will flip to
398
- `thumbnail_video` after a follow-up API PR adds input-MIME dispatch.
435
+ Receives traffic for video inputs — the API publisher emits
436
+ `operation_type=thumbnail_video` on the SNS attribute (resolved from
437
+ the operation's effective input MIME); the payload `operation_type`
438
+ field stays `thumbnail`.
399
439
  parameters:
400
440
  env:
401
441
  description: Environment (local, stg, prod)
@@ -413,10 +453,10 @@ channels:
413
453
  `operation_type = thumbnail_document`. Backed by the Ghostscript
414
454
  document thumbnail Lambda (`operation-thumbnail-document`).
415
455
 
416
- Not yet receiving traffic — the API publisher currently emits
417
- `operation_type=thumbnail` (legacy) and will flip to
418
- `thumbnail_document` after a follow-up API PR adds input-MIME
419
- dispatch.
456
+ Receives traffic for PDF/EPUB inputs — the API publisher emits
457
+ `operation_type=thumbnail_document` on the SNS attribute (resolved
458
+ from the operation's effective input MIME); the payload
459
+ `operation_type` field stays `thumbnail`.
420
460
  parameters:
421
461
  env:
422
462
  description: Environment (local, stg, prod)
@@ -435,10 +475,10 @@ channels:
435
475
  `operation_type = thumbnail_office`. Backed by the LibreOffice
436
476
  thumbnail Lambda (`operation-thumbnail-office`).
437
477
 
438
- Not yet receiving traffic — the API publisher currently emits
439
- `operation_type=thumbnail` (legacy) and will flip to
440
- `thumbnail_office` after a follow-up API PR adds input-MIME
441
- dispatch.
478
+ Receives traffic for office-document inputs — the API publisher
479
+ emits `operation_type=thumbnail_office` on the SNS attribute
480
+ (resolved from the operation's effective input MIME); the payload
481
+ `operation_type` field stays `thumbnail`.
442
482
  parameters:
443
483
  env:
444
484
  description: Environment (local, stg, prod)
@@ -614,11 +654,11 @@ channels:
614
654
  `role: overlay` image OPTIONAL — see `per_role_cardinality`
615
655
  on the operation schema).
616
656
 
617
- `availability: planned` per the operation schema; the API
618
- rejects workflow-create with `feature_not_available` (422)
619
- until the Lambda ships, so traffic does not reach this queue
620
- today. Backed by the `operation-audio-to-video` Lambda
621
- (cross-repo follow-up — lambdas pre-launch epic Wave A).
657
+ `availability: beta` per the operation schema (Wave A activated,
658
+ [`c3uthIP4`](https://trello.com/c/c3uthIP4)): the API accepts +
659
+ publishes, so traffic flows to this queue (MUST NOT 422). Backed
660
+ by the `operation-audio-to-video` Lambda (live; lambdas pre-launch
661
+ epic Wave A).
622
662
 
623
663
  Per ADR-0004 + ADR-0015
624
664
  ([`SlluxMBN`](https://trello.com/c/SlluxMBN)).
@@ -642,10 +682,12 @@ channels:
642
682
  (no operation-specific conditional needed in
643
683
  OperationRequestAttributes).
644
684
 
645
- `availability: planned` per the operation schema; the API
646
- rejects workflow-create with `feature_not_available` (422)
647
- until the Lambda ships, so traffic does not reach this queue
648
- today. Backed by the `operation-split` Lambda (cross-repo
685
+ `availability: beta` for the `audio` mime_group (worker live on
686
+ staging audio split traffic reaches this queue); the
687
+ `image_gif`, `document_pdf`, and `video` mime_groups stay
688
+ `availability: planned`, and the API rejects their
689
+ workflow-create with `feature_not_available` (422) until those
690
+ Lambdas ship. Backed by the `operation-split` Lambda (cross-repo
649
691
  follow-up — lambdas pre-launch epic Wave A, ticket
650
692
  [DbpJpVtm-sibling-L1](https://trello.com/c/vKI0CFDu)
651
693
  [`vKI0CFDu`](https://trello.com/c/vKI0CFDu)).
@@ -678,11 +720,12 @@ channels:
678
720
  (Path B with `role: base` video + `role: overlay` image,
679
721
  exactly one of each per `per_role_cardinality`).
680
722
 
681
- `availability: planned` per the operation schema; the API
682
- rejects workflow-create with `feature_not_available` (422)
683
- until the Lambda ships, so traffic does not reach this queue
684
- today. Backed by the `operation-video-watermark` Lambda (cross-
685
- repo follow-up lambdas pre-launch epic Wave A, ticket
723
+ `availability: beta` per the operation schema (Wave A activated,
724
+ [`c3uthIP4`](https://trello.com/c/c3uthIP4)): the API accepts +
725
+ publishes, so traffic flows to this queue (MUST NOT 422). The
726
+ `short_form` processing class is beta; `long_form` stays planned
727
+ (no live Fargate worker). Backed by the `operation-video-watermark`
728
+ Lambda (live; lambdas pre-launch epic Wave A, ticket
686
729
  [DbpJpVtm](https://trello.com/c/DbpJpVtm)).
687
730
 
688
731
  Distinct from `image_watermark` (pure-Rust image-only) — see
@@ -900,9 +943,9 @@ channels:
900
943
  description: |
901
944
  DLQ for failed audio_to_video operations (per ticket
902
945
  [`SlluxMBN`](https://trello.com/c/SlluxMBN) / ADR-0015).
903
- Messages land here after 5 failed processing attempts. No
904
- traffic reaches this queue while audio_to_video is
905
- `availability: planned`.
946
+ Messages land here after 5 failed processing attempts.
947
+ audio_to_video is `availability: beta` (Wave A activated) so
948
+ this queue now receives real failures.
906
949
  parameters:
907
950
  env:
908
951
  description: Environment (local, stg, prod)
@@ -914,9 +957,9 @@ channels:
914
957
  description: |
915
958
  DLQ for failed video_watermark operations (per ticket
916
959
  [`4NrRPCgh`](https://trello.com/c/4NrRPCgh) / ADR-0013).
917
- Messages land here after 5 failed processing attempts. No
918
- traffic reaches this queue while video_watermark is
919
- `availability: planned`.
960
+ Messages land here after 5 failed processing attempts.
961
+ video_watermark is `availability: beta` (Wave A activated) so
962
+ this queue now receives real failures.
920
963
  parameters:
921
964
  env:
922
965
  description: Environment (local, stg, prod)
@@ -942,9 +985,10 @@ channels:
942
985
  description: |
943
986
  DLQ for failed split operations (per ticket
944
987
  [`vKI0CFDu`](https://trello.com/c/vKI0CFDu) / ADR-0014).
945
- Messages land here after 5 failed processing attempts. No
946
- traffic reaches this queue while split is `availability:
947
- planned`.
988
+ Messages land here after 5 failed processing attempts. Live for
989
+ the `split` `audio` mime_group (now `availability: beta`); the
990
+ `image_gif`, `document_pdf`, and `video` groups stay
991
+ `availability: planned` and carry no traffic yet.
948
992
  parameters:
949
993
  env:
950
994
  description: Environment (local, stg, prod)
@@ -1112,6 +1156,79 @@ channels:
1112
1156
  region:
1113
1157
  description: AWS region abbreviation (euw1, use1, etc.)
1114
1158
 
1159
+ # ============================================
1160
+ # LONG-FORM CLAIM-CHECK QUEUES (direct-to-SQS, Fargate-processed)
1161
+ # ============================================
1162
+ # Distinct delivery mechanism from the SNS-fanout jobs/ops families:
1163
+ # the API publishes a LongFormJobMessage claim-check DIRECTLY to these
1164
+ # per-op-class SQS queues (no SNS topic, no filter routing). A
1165
+ # terraform-owned launcher (EventBridge Pipe, filter=none) consumes
1166
+ # and forks a Fargate task. Two classes are live (compress, merge);
1167
+ # split-video-longform (queue provisioned, publisher deferred per
1168
+ # rcwvUKhI) and audio-overlay-longform (reserve-name-only, no queue)
1169
+ # are NOT modeled as channels — they carry no traffic yet.
1170
+
1171
+ longformCompressVideo:
1172
+ address: gisl-{env}-{region}-ops-compress-video-longform
1173
+ description: |
1174
+ SQS queue for long-form video compression jobs (`compress.video.long_form`,
1175
+ `availability: beta`). The API publishes a `LongFormJobMessage` claim-check
1176
+ here directly (NOT via SNS); a terraform-owned launcher reads the spec from
1177
+ S3 (`pointer`) and runs a Fargate task. `max_receive_count = 2` (ADR-0007).
1178
+
1179
+ On this queue the publisher always sets `operation_type: compress`. The
1180
+ shared `LongFormJobMessage` enum permits `{compress, merge}` (mirroring the
1181
+ shared `JobRequestMessage` across the per-media `jobs-*` queues); per-queue
1182
+ `operation_type` is a publisher invariant documented here, not a separate
1183
+ message schema.
1184
+ parameters:
1185
+ env:
1186
+ description: Environment (local, stg, prod)
1187
+ region:
1188
+ description: AWS region abbreviation (euw1, use1, etc.)
1189
+ messages:
1190
+ longFormJob:
1191
+ $ref: '#/components/messages/LongFormJobMessage'
1192
+
1193
+ longformCompressVideoDlq:
1194
+ address: gisl-{env}-{region}-ops-compress-video-longform-dlq
1195
+ description: DLQ for failed long-form video compression jobs. Messages land here after 2 failed processing attempts (ADR-0007).
1196
+ parameters:
1197
+ env:
1198
+ description: Environment (local, stg, prod)
1199
+ region:
1200
+ description: AWS region abbreviation (euw1, use1, etc.)
1201
+
1202
+ longformMergeVideoReencode:
1203
+ address: gisl-{env}-{region}-ops-merge-video-longform-reencode
1204
+ description: |
1205
+ SQS queue for long-form merge re-encode jobs (`merge.video.long_form_re_encode`,
1206
+ `availability: beta`). The API publishes a `LongFormJobMessage` claim-check
1207
+ here directly (NOT via SNS); a terraform-owned launcher reads the spec from
1208
+ S3 (`pointer`) and runs a Fargate task. `max_receive_count = 2` (ADR-0007).
1209
+
1210
+ On this queue the publisher always sets `operation_type: merge` (shared
1211
+ `LongFormJobMessage` enum permits `{compress, merge}`; per-queue
1212
+ `operation_type` is a publisher invariant documented here, not a separate
1213
+ schema).
1214
+ parameters:
1215
+ env:
1216
+ description: Environment (local, stg, prod)
1217
+ region:
1218
+ description: AWS region abbreviation (euw1, use1, etc.)
1219
+ messages:
1220
+ longFormJob:
1221
+ $ref: '#/components/messages/LongFormJobMessage'
1222
+
1223
+ longformMergeVideoReencodeDlq:
1224
+ address: gisl-{env}-{region}-ops-merge-video-longform-reencode-dlq
1225
+ description: DLQ for failed long-form merge re-encode jobs. Messages land here after 2 failed processing attempts (ADR-0007).
1226
+ parameters:
1227
+ env:
1228
+ description: Environment (local, stg, prod)
1229
+ region:
1230
+ description: AWS region abbreviation (euw1, use1, etc.)
1231
+
1115
1232
  operations:
1116
1233
  # ============================================
1117
1234
  # PUBLISH OPERATIONS (API -> SNS)
@@ -1235,9 +1352,10 @@ operations:
1235
1352
  description: |
1236
1353
  The legacy thumbnail Lambda consumes thumbnail requests routed
1237
1354
  by `operation_type=thumbnail`. Handles thumbnail generation for
1238
- all media types in a single Lambda. This is the current live
1239
- routing target for the API publisher; it will be retired after
1240
- the publisher adopts the four sub-type values.
1355
+ all media types in a single Lambda. Retained as a valid routing
1356
+ target during the migration window, but the API publisher no
1357
+ longer emits `operation_type=thumbnail` (it emits the four
1358
+ sub-type values); this queue is retired once no traffic remains.
1241
1359
  messages:
1242
1360
  - $ref: '#/channels/opsThumbnail/messages/operationRequest'
1243
1361
 
@@ -1249,7 +1367,7 @@ operations:
1249
1367
  description: |
1250
1368
  The image thumbnail Lambda consumes thumbnail requests routed by
1251
1369
  `operation_type=thumbnail_image`. Backed by a Rust image crate.
1252
- Not yet receiving traffic — see channel description.
1370
+ Receives traffic for image inputs — see channel description.
1253
1371
  messages:
1254
1372
  - $ref: '#/channels/opsThumbnailImage/messages/operationRequest'
1255
1373
 
@@ -1260,8 +1378,8 @@ operations:
1260
1378
  summary: Process video thumbnail operation
1261
1379
  description: |
1262
1380
  The video thumbnail Lambda consumes thumbnail requests routed by
1263
- `operation_type=thumbnail_video`. Backed by FFmpeg. Not yet
1264
- receiving traffic — see channel description.
1381
+ `operation_type=thumbnail_video`. Backed by FFmpeg. Receives
1382
+ traffic for video inputs — see channel description.
1265
1383
  messages:
1266
1384
  - $ref: '#/channels/opsThumbnailVideo/messages/operationRequest'
1267
1385
 
@@ -1273,7 +1391,8 @@ operations:
1273
1391
  description: |
1274
1392
  The document (PDF/EPUB) thumbnail Lambda consumes thumbnail
1275
1393
  requests routed by `operation_type=thumbnail_document`. Backed by
1276
- Ghostscript. Not yet receiving traffic — see channel description.
1394
+ Ghostscript. Receives traffic for PDF/EPUB inputs — see channel
1395
+ description.
1277
1396
  messages:
1278
1397
  - $ref: '#/channels/opsThumbnailDocument/messages/operationRequest'
1279
1398
 
@@ -1285,8 +1404,8 @@ operations:
1285
1404
  description: |
1286
1405
  The office document (DOCX/XLSX/PPTX/ODT/ODS/ODP) thumbnail Lambda
1287
1406
  consumes thumbnail requests routed by
1288
- `operation_type=thumbnail_office`. Backed by LibreOffice. Not yet
1289
- receiving traffic — see channel description.
1407
+ `operation_type=thumbnail_office`. Backed by LibreOffice. Receives
1408
+ traffic for office-document inputs — see channel description.
1290
1409
  messages:
1291
1410
  - $ref: '#/channels/opsThumbnailOffice/messages/operationRequest'
1292
1411
 
@@ -1401,14 +1520,18 @@ operations:
1401
1520
  $ref: '#/channels/opsSplit'
1402
1521
  summary: Process split operation
1403
1522
  description: |
1404
- The `operation-split` Lambda (cross-repo follow-up lambdas
1405
- pre-launch epic Wave A, not yet shipped) consumes split
1406
- requests routed by `operation_type=split`. Single-input
1523
+ The `operation-split` Lambda (lambdas pre-launch epic Wave A)
1524
+ consumes split requests routed by `operation_type=split`. Its
1525
+ `audio` path is live on staging (lambdas #161); the
1526
+ `image_gif` / `document_pdf` / `video` workers remain a
1527
+ cross-repo follow-up. Single-input —
1407
1528
  `media_group` derives from the input MIME prefix per the
1408
- existing single-input rule. `availability: planned`; the API
1409
- rejects workflow-create with `feature_not_available` (422)
1410
- until the Lambda ships, so traffic does not reach this channel
1411
- today. Long-form video splits route to a separate
1529
+ existing single-input rule. `availability: beta` for the `audio`
1530
+ mime_group (worker live on staging); the `image_gif`,
1531
+ `document_pdf`, and `video` mime_groups stay `availability:
1532
+ planned`, and the API rejects their workflow-create with
1533
+ `feature_not_available` (422) until those Lambdas ship.
1534
+ Long-form video splits route to a separate
1412
1535
  `split-video-fargate` worker via `processing_class`.
1413
1536
  Per ADR-0004 + ADR-0014
1414
1537
  ([`vKI0CFDu`](https://trello.com/c/vKI0CFDu)).
@@ -1422,14 +1545,14 @@ operations:
1422
1545
  summary: Process video_watermark operation
1423
1546
  description: |
1424
1547
  The `operation-video-watermark` Lambda (cross-repo follow-up —
1425
- lambdas pre-launch epic Wave A, not yet shipped) consumes
1548
+ lambdas pre-launch epic Wave A, live) consumes
1426
1549
  video_watermark requests routed by
1427
1550
  `operation_type=video_watermark`. Multi-input role-based with
1428
1551
  `role: base` video + `role: overlay` image (exactly one of
1429
- each per `per_role_cardinality`). `availability: planned`; the
1430
- API rejects workflow-create with `feature_not_available` (422)
1431
- until the Lambda ships, so traffic does not reach this channel
1432
- today.
1552
+ each per `per_role_cardinality`). `availability: beta` (Wave A
1553
+ activated, [`c3uthIP4`](https://trello.com/c/c3uthIP4)): the API
1554
+ accepts + publishes (MUST NOT 422), so traffic flows to this
1555
+ channel. `short_form` is beta; `long_form` stays planned.
1433
1556
  Per ADR-0004 + ADR-0013
1434
1557
  ([`4NrRPCgh`](https://trello.com/c/4NrRPCgh)).
1435
1558
  messages:
@@ -1461,14 +1584,14 @@ operations:
1461
1584
  summary: Process audio_to_video operation
1462
1585
  description: |
1463
1586
  The `operation-audio-to-video` Lambda (cross-repo follow-up —
1464
- lambdas pre-launch epic Wave A, not yet shipped) consumes
1587
+ lambdas pre-launch epic Wave A, live) consumes
1465
1588
  audio_to_video requests routed by
1466
1589
  `operation_type=audio_to_video`. Multi-input role-based with
1467
1590
  role asymmetry (Path B with `role: base` audio REQUIRED +
1468
1591
  `role: overlay` image OPTIONAL per `per_role_cardinality`).
1469
- `availability: planned`; the API rejects workflow-create with
1470
- `feature_not_available` (422) until the Lambda ships, so
1471
- traffic does not reach this channel today.
1592
+ `availability: beta` (Wave A activated,
1593
+ [`c3uthIP4`](https://trello.com/c/c3uthIP4)): the API accepts +
1594
+ publishes (MUST NOT 422), so traffic flows to this channel.
1472
1595
  Per ADR-0004 + ADR-0015
1473
1596
  ([`SlluxMBN`](https://trello.com/c/SlluxMBN)).
1474
1597
  messages:
@@ -1606,6 +1729,64 @@ operations:
1606
1729
  messages:
1607
1730
  - $ref: '#/channels/uploadProbeCompletionsQueue/messages/uploadProbeCompletion'
1608
1731
 
1732
+ # ============================================
1733
+ # LONG-FORM CLAIM-CHECK PRODUCERS (API -> SQS, direct)
1734
+ # ============================================
1735
+
1736
+ publishLongFormCompressVideo:
1737
+ action: send
1738
+ channel:
1739
+ $ref: '#/channels/longformCompressVideo'
1740
+ summary: Publish a long-form video compression claim-check.
1741
+ description: |
1742
+ The API (`SqsLongFormOperationPublisherAdapter`) writes the full job
1743
+ spec to S3 and publishes a `LongFormJobMessage` claim-check **directly**
1744
+ to this SQS queue (NOT via SNS — no message attributes). `operation_type`
1745
+ is `compress`, `processing_class` is `long_form`.
1746
+ messages:
1747
+ - $ref: '#/channels/longformCompressVideo/messages/longFormJob'
1748
+
1749
+ publishLongFormMergeVideoReencode:
1750
+ action: send
1751
+ channel:
1752
+ $ref: '#/channels/longformMergeVideoReencode'
1753
+ summary: Publish a long-form merge re-encode claim-check.
1754
+ description: |
1755
+ As `publishLongFormCompressVideo`, for `operation_type = merge`
1756
+ (`merge.video.long_form_re_encode`). Direct-to-SQS claim-check; no SNS.
1757
+ messages:
1758
+ - $ref: '#/channels/longformMergeVideoReencode/messages/longFormJob'
1759
+
1760
+ # ============================================
1761
+ # LONG-FORM CLAIM-CHECK CONSUMERS (launcher -> Fargate)
1762
+ # ============================================
1763
+
1764
+ consumeLongFormCompressVideo:
1765
+ action: receive
1766
+ channel:
1767
+ $ref: '#/channels/longformCompressVideo'
1768
+ summary: Consume a long-form video compression claim-check.
1769
+ description: |
1770
+ A terraform-owned launcher (EventBridge Pipe, filter=none -> launcher
1771
+ Lambda) reads the `LongFormJobMessage` from this queue, resolves the
1772
+ full job spec from S3 via `pointer`, and runs a Fargate task. The
1773
+ launcher forks on `operation_type` (`compress`) + `processing_class`
1774
+ (`long_form`). Failures redrive to the DLQ after `max_receive_count = 2`.
1775
+ messages:
1776
+ - $ref: '#/channels/longformCompressVideo/messages/longFormJob'
1777
+
1778
+ consumeLongFormMergeVideoReencode:
1779
+ action: receive
1780
+ channel:
1781
+ $ref: '#/channels/longformMergeVideoReencode'
1782
+ summary: Consume a long-form merge re-encode claim-check.
1783
+ description: |
1784
+ As `consumeLongFormCompressVideo`, for `operation_type = merge`
1785
+ (`merge.video.long_form_re_encode`). The launcher resolves the spec
1786
+ from S3 via `pointer` and runs the merge-re-encode Fargate task.
1787
+ messages:
1788
+ - $ref: '#/channels/longformMergeVideoReencode/messages/longFormJob'
1789
+
1609
1790
  components:
1610
1791
  messages:
1611
1792
  # ============================================
@@ -1689,7 +1870,7 @@ components:
1689
1870
  **non-compression** operation (thumbnail, image_watermark,
1690
1871
  text_watermark, merge, archive, convert, custom_luma,
1691
1872
  audio_overlay, audio_watermark, audio_to_video,
1692
- video_watermark, video_text_watermark). Published to the
1873
+ video_watermark, video_text_watermark, split). Published to the
1693
1874
  `operations` SNS topic; routed by the single-attribute
1694
1875
  filter `operation_type` to one of the ops-family queues.
1695
1876
 
@@ -1699,8 +1880,8 @@ components:
1699
1880
  `thumbnail_office`, `image_watermark`, `text_watermark`,
1700
1881
  `merge`, `archive`, `convert`, `custom_luma`,
1701
1882
  `audio_overlay`, `audio_watermark`, `audio_to_video`,
1702
- `video_watermark`, `video_text_watermark`. Used by SNS as
1703
- the filter attribute on the `operations` topic.
1883
+ `video_watermark`, `video_text_watermark`, `split`. Used by
1884
+ SNS as the filter attribute on the `operations` topic.
1704
1885
  - `media_group`: informational metadata, present for every
1705
1886
  operation except `archive` (which is media-agnostic). Values:
1706
1887
  `image`, `video`, `audio`, `document`. **Not** used by SNS as
@@ -1709,7 +1890,8 @@ components:
1709
1890
 
1710
1891
  **Input models:**
1711
1892
  - Single-input operations (thumbnail, text_watermark, convert,
1712
- audio_watermark): use `source_bucket` + `source_key`.
1893
+ audio_watermark, video_text_watermark, split): use
1894
+ `source_bucket` + `source_key`.
1713
1895
  `file_type` required. For `thumbnail`, the SNS
1714
1896
  `operation_type` attribute is permitted to carry a per-media
1715
1897
  sub-type value for routing (see `OperationRequestAttributes`
@@ -1719,23 +1901,29 @@ components:
1719
1901
  `required_tier: enterprise` so workflow-create rejects with
1720
1902
  422 + 403 today.
1721
1903
  - Multi-input operations (merge, archive, image_watermark,
1722
- custom_luma, audio_overlay, audio_to_video): use `sources`
1723
- array. Merge additionally requires `output_type`.
1724
- image_watermark, custom_luma, audio_overlay, and
1725
- audio_to_video use `role` per `JobInputV2.role`.
1904
+ custom_luma, audio_overlay, audio_to_video, video_watermark):
1905
+ use `sources` array. Merge additionally requires `output_type`.
1906
+ image_watermark, custom_luma, audio_overlay, audio_to_video,
1907
+ and video_watermark use `role` per `JobInputV2.role`.
1726
1908
  audio_to_video has role asymmetry — REQUIRED `base` (audio)
1727
1909
  + OPTIONAL `overlay` (image 0..1) per
1728
1910
  `per_role_cardinality`; sum-of-role-minima drives the
1729
1911
  minimum `sources` count (1 for audio_to_video; 2 for all
1730
- other role-based ops today). custom_luma, audio_overlay,
1731
- and audio_to_video are `availability: planned` so
1732
- workflow-create rejects with 422 today.
1912
+ other role-based ops today). custom_luma and audio_overlay
1913
+ are `availability: planned` so workflow-create rejects with
1914
+ 422 today (audio_to_video and video_watermark are now `beta` —
1915
+ Wave A activated).
1733
1916
 
1734
1917
  **Migration window note.** During the thumbnail sub-type
1735
1918
  migration, both `operation_type=thumbnail` (legacy) and
1736
1919
  `operation_type=thumbnail_{image,video,document,office}` (new)
1737
- are valid routing targets. The API publisher currently emits
1738
- the legacy value only; sub-type adoption is a follow-up API PR.
1920
+ are valid routing targets. The API publisher emits the per-media
1921
+ sub-type value on the SNS `operation_type` attribute (resolved
1922
+ from the operation's effective input MIME); the payload
1923
+ `operation_type` field always remains `thumbnail`. The legacy
1924
+ bare `thumbnail` attribute value is retained as a valid routing
1925
+ target during the migration window but is no longer emitted by
1926
+ the publisher.
1739
1927
  contentType: application/json
1740
1928
  headers:
1741
1929
  $ref: '#/components/schemas/OperationRequestAttributes'
@@ -1912,6 +2100,48 @@ components:
1912
2100
  options:
1913
2101
  format: "zip"
1914
2102
 
2103
+ # ============================================
2104
+ # LONG-FORM CLAIM-CHECK JOB MESSAGE (direct-to-SQS, no SNS)
2105
+ # ============================================
2106
+
2107
+ LongFormJobMessage:
2108
+ name: LongFormJob
2109
+ title: Long-Form Claim-Check Job Message
2110
+ summary: Claim-check job message for long-form (Fargate) operations
2111
+ description: |
2112
+ Published by the API **directly to a per-op-class long-form SQS queue**
2113
+ (not via SNS) and consumed by a terraform-owned launcher (EventBridge
2114
+ Pipe, filter=none -> launcher Lambda -> ECS RunTask). The launcher reads
2115
+ the message body, resolves the full job spec from S3 via `pointer`, and
2116
+ forks the Fargate task on `operation_type` + `processing_class`.
2117
+
2118
+ **No SNS message attributes / headers** — long-form does not flow
2119
+ through an SNS topic, so unlike `JobRequestMessage` /
2120
+ `OperationRequestMessage` this message carries no `headers` block.
2121
+
2122
+ See the `LongFormJobMessage` schema for the claim-check field set and
2123
+ the `processing_class` ratification rationale.
2124
+ contentType: application/json
2125
+ payload:
2126
+ $ref: '#/components/schemas/LongFormJobMessage'
2127
+ examples:
2128
+ - name: Long-form video compression
2129
+ summary: compress.video.long_form claim-check
2130
+ payload:
2131
+ pointer: "job-specs/018f9c42-5d6b-7481-b3df-9fd0a0a5e112.json"
2132
+ job_id: "018f9c42-5d6b-7481-b3df-9fd0a0a5e112"
2133
+ operation_id: "018f9c42-5d6b-7481-b3df-9fd0a0a5e200"
2134
+ operation_type: "compress"
2135
+ processing_class: "long_form"
2136
+ - name: Long-form merge re-encode
2137
+ summary: merge.video.long_form_re_encode claim-check
2138
+ payload:
2139
+ pointer: "job-specs/018f9c42-5d6b-7481-b3df-9fd0a0a5e113.json"
2140
+ job_id: "018f9c42-5d6b-7481-b3df-9fd0a0a5e113"
2141
+ operation_id: "018f9c42-5d6b-7481-b3df-9fd0a0a5e201"
2142
+ operation_type: "merge"
2143
+ processing_class: "long_form"
2144
+
1915
2145
  # ============================================
1916
2146
  # OPERATION PROGRESS MESSAGE
1917
2147
  # ============================================
@@ -2450,9 +2680,10 @@ components:
2450
2680
  prefix per ADR-0015 — the operation is multi-input
2451
2681
  role-based with role asymmetry: required audio base +
2452
2682
  optional image overlay; routing follows the `base` role).
2453
- The operation is `availability: planned` per
2454
- [`SlluxMBN`](https://trello.com/c/SlluxMBN), so this
2455
- constraint is contract-defined but not exercised today.
2683
+ The operation is `availability: beta` per
2684
+ [`SlluxMBN`](https://trello.com/c/SlluxMBN) +
2685
+ [`c3uthIP4`](https://trello.com/c/c3uthIP4) (Wave A activated),
2686
+ so this constraint is exercised on live traffic.
2456
2687
  - For `operation_type = image_watermark`, `media_group` must
2457
2688
  equal `image` while only the stable `image` mime_group is
2458
2689
  dispatchable. The schema declares `image_gif` and `video`
@@ -2630,17 +2861,18 @@ components:
2630
2861
  API to SNS, consumed by Lambda from SQS.
2631
2862
 
2632
2863
  **Single-input operations** (compress, thumbnail, text_watermark,
2633
- convert): use `source_bucket` + `source_key` for the input file.
2634
- `file_type` is required.
2864
+ convert, audio_watermark, video_text_watermark, split): use
2865
+ `source_bucket` + `source_key` for the input file. `file_type` is
2866
+ required.
2635
2867
 
2636
2868
  **Multi-input operations** (merge, archive, image_watermark,
2637
- custom_luma, audio_overlay, audio_to_video): use `sources`
2638
- array. Each entry has `bucket` + `key`. Merge entries may
2639
- include per-input overrides (e.g. transition type). Merge
2640
- also requires `output_type`. custom_luma, audio_overlay, and
2641
- audio_to_video are
2642
- `availability: planned` so workflow-create rejects with 422
2643
- today; the wire shape is contract-defined.
2869
+ custom_luma, audio_overlay, audio_to_video, video_watermark):
2870
+ use `sources` array. Each entry has `bucket` + `key`. Merge
2871
+ entries may include per-input overrides (e.g. transition type).
2872
+ Merge also requires `output_type`. custom_luma and audio_overlay
2873
+ are `availability: planned` so workflow-create rejects with 422
2874
+ today (audio_to_video + video_watermark are now `beta` — Wave A
2875
+ activated, backends live); the wire shape is contract-defined.
2644
2876
 
2645
2877
  Note: `media_group` is **not** a field in this payload. It exists
2646
2878
  only as an SNS MessageAttribute on the non-compression branch; on
@@ -2738,12 +2970,13 @@ components:
2738
2970
  description: |
2739
2971
  Input files for multi-input operations (merge, archive,
2740
2972
  image_watermark, custom_luma, audio_overlay,
2741
- audio_to_video). Each entry specifies an S3 location.
2742
- Order matters for merge (concatenation order). Per-input
2743
- overrides (e.g. transition) can be inlined on each entry.
2744
- Role-based multi-input operations (image_watermark,
2745
- custom_luma, audio_overlay, audio_to_video) require a
2746
- `role` discriminator on each entry — see `SourceEntry.role`.
2973
+ audio_to_video, video_watermark). Each entry specifies an
2974
+ S3 location. Order matters for merge (concatenation order).
2975
+ Per-input overrides (e.g. transition) can be inlined on each
2976
+ entry. Role-based multi-input operations (image_watermark,
2977
+ custom_luma, audio_overlay, audio_to_video, video_watermark)
2978
+ require a `role` discriminator on each entry — see
2979
+ `SourceEntry.role`.
2747
2980
 
2748
2981
  **Minimum source count = sum of role minima** declared in
2749
2982
  the operation's `per_role_cardinality` (per ticket
@@ -2795,11 +3028,84 @@ components:
2795
3028
  Not used in V1 — all outputs go to GISL-managed S3 buckets.
2796
3029
  additionalProperties: true
2797
3030
 
3031
+ LongFormJobMessage:
3032
+ type: object
3033
+ description: |
3034
+ Claim-check job message for long-form (Fargate-processed) operations.
3035
+ Emitted by the API **directly to the per-op-class long-form SQS queues**
3036
+ (NOT via SNS) — see the `longformCompressVideo` / `longformMergeVideoReencode`
3037
+ channels. The full job spec is written to S3 and this message carries only
3038
+ a `pointer` (the claim check) plus routing/identity fields; the consumer
3039
+ (a terraform-owned launcher Lambda fronting a Fargate worker, invoked via
3040
+ an EventBridge Pipe with no filter) reads the spec from S3 and forks the
3041
+ task on `operation_type` + `processing_class`.
3042
+
3043
+ Distinct from `OperationRequest` (the SNS-routed short-form payload):
3044
+ long-form has its own dedicated SQS queues, carries no SNS message
3045
+ attributes/headers, and uses a claim-check body. `processing_class` is
3046
+ ratified here — and ONLY here — as the logical long-form discriminator
3047
+ (per [ADR-0014](../docs/decisions/0014-split-operation.md) §D10 and
3048
+ `schemas/FORMAT.md` §F8). The physical worker / `execution_pool` /
3049
+ backend-dotted form (e.g. `compress.video.long_form`) is deliberately
3050
+ NOT on the wire — the launcher mints it internally.
3051
+
3052
+ **Live `operation_type` subset: `compress`, `merge`** — the two
3053
+ long-form classes flipped to `availability: beta` (CON-1). `split`
3054
+ long-form (queue provisioned, publisher deferred —
3055
+ [`rcwvUKhI`](https://trello.com/c/rcwvUKhI)) and `audio_overlay`
3056
+ long-form (reserve-name-only, no queue) are NOT yet produced and are
3057
+ therefore absent from this enum; they get added when their publishers
3058
+ ship.
3059
+
3060
+ **Scope: the API producer's first-publish.** This schema models the
3061
+ message the API publishes to the long-form queues — the 5 fields above.
3062
+ It is intentionally an **open object** (no `additionalProperties: false`):
3063
+ these queues may also carry downstream-produced messages (e.g. a
3064
+ `FargateRunner` retry republish of chained long-form ops) whose body
3065
+ shape is owned by the worker/lambdas contract, NOT this schema. Those
3066
+ are out of scope here and are not constrained by `LongFormJobMessage`;
3067
+ consumers validating against this schema MUST tolerate additional or
3068
+ differently-shaped redriven messages. The producer contract this schema
3069
+ pins is the **required** set.
3070
+ required:
3071
+ - pointer
3072
+ - job_id
3073
+ - operation_id
3074
+ - operation_type
3075
+ - processing_class
3076
+ properties:
3077
+ pointer:
3078
+ type: string
3079
+ pattern: '^job-specs/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\.json$'
3080
+ description: |
3081
+ Claim-check pointer to the full job spec: an S3 object **key**
3082
+ (NOT a full `s3://` URI, NOT a `{bucket,key}` object), resolved
3083
+ relative to the **input bucket** — the bucket is not encoded in
3084
+ the pointer; the consumer resolves it from its own input-bucket
3085
+ config. Const prefix `job-specs/`; the object is `<jobId>.json`
3086
+ (UUID v7).
3087
+ example: "job-specs/018f9c42-5d6b-7481-b3df-9fd0a0a5e112.json"
3088
+ job_id:
3089
+ type: string
3090
+ format: uuid
3091
+ description: Parent job identifier (UUID v7).
3092
+ example: "018f9c42-5d6b-7481-b3df-9fd0a0a5e112"
3093
+ operation_id:
3094
+ type: string
3095
+ format: uuid
3096
+ description: Unique operation identifier (UUID v7).
3097
+ example: "018f9c42-5d6b-7481-b3df-9fd0a0a5e200"
3098
+ operation_type:
3099
+ $ref: '#/components/schemas/LongFormOperationType'
3100
+ processing_class:
3101
+ $ref: '#/components/schemas/LongFormProcessingClass'
3102
+
2798
3103
  SourceEntry:
2799
3104
  type: object
2800
3105
  description: |
2801
3106
  A single source file for multi-input operations (merge,
2802
- archive, image_watermark, custom_luma, audio_overlay).
3107
+ archive, image_watermark, custom_luma, audio_overlay,
3108
+ audio_to_video, video_watermark).
2803
3109
  Provides the S3 location, optional per-input overrides, and
2804
3110
  the `role` discriminator for role-based multi-input
2805
3111
  operations.
@@ -2822,9 +3128,52 @@ components:
2822
3128
  transition:
2823
3129
  type: string
2824
3130
  description: |
2825
- Per-input transition override for video merge.
2826
- Overrides the global transition option for the join point before this input.
3131
+ Per-input transition override for the join point before this
3132
+ input. Applies to both video and audio merge see the
3133
+ per-media per-input transition catalogs in
3134
+ `schemas/operations/merge.yaml`
3135
+ (`merge.video.per_input_options` / `merge.audio.per_input_options`),
3136
+ which the API validates against. Overrides the global
3137
+ `options.transition` for this join point.
2827
3138
  example: "none"
3139
+ crossfade_duration:
3140
+ type: number
3141
+ minimum: 0
3142
+ maximum: 10.0
3143
+ description: |
3144
+ Per-input crossfade duration override, in seconds, for the
3145
+ join point before this input. Overrides the global
3146
+ `options.crossfade_duration` for this join point. Per the
3147
+ `depends_on` on `merge.*.per_input_options.crossfade_duration`
3148
+ (which resolves against the sibling per-input option, see
3149
+ FORMAT.md), this takes effect only when this input's own
3150
+ `transition` override is `crossfade` — pair it with
3151
+ `transition: crossfade` on the same entry; it does NOT key off
3152
+ the global `options.transition`. Mirrors
3153
+ `merge.*.per_input_options.crossfade_duration` in
3154
+ `schemas/operations/merge.yaml` — the API validates this
3155
+ per-input value but, until this slot existed, dropped it at the
3156
+ wire boundary (the slot lets the merge Lambda's audio path
3157
+ honour it). The 0–10s bound here is a broad transport envelope;
3158
+ the effective per-media limits (video crossfade `0.1`–`5.0`,
3159
+ audio `0`–`10`) are enforced by the per-mime-group
3160
+ operation-options schema in `merge.yaml`, which the API
3161
+ validates against before publishing.
3162
+ example: 1.0
3163
+ gap_duration:
3164
+ type: number
3165
+ minimum: 0
3166
+ maximum: 10.0
3167
+ description: |
3168
+ Per-input silence/gap duration override, in seconds, inserted
3169
+ before this input at the join point. Overrides the global
3170
+ `options.gap_duration` for this join point. Mirrors
3171
+ `merge.audio.per_input_options.gap_duration` in
3172
+ `schemas/operations/merge.yaml` (no transition dependency) —
3173
+ added alongside `crossfade_duration` so the API does not
3174
+ silently drop this sibling per-input audio override at the wire
3175
+ boundary.
3176
+ example: 0.5
2828
3177
 
2829
3178
  # ============================================
2830
3179
  # OPERATION PROGRESS SCHEMA
@@ -2891,8 +3240,9 @@ components:
2891
3240
  `phase_input_index`. For single-input operations (most
2892
3241
  ops) `phase_total_inputs: 1` and `phase_input_index: 1`
2893
3242
  during the relevant phase. For multi-input merge,
2894
- archive, image_watermark, custom_luma, and audio_overlay,
2895
- this matches the inputs[] count. Per ticket I27.
3243
+ archive, image_watermark, custom_luma, audio_overlay,
3244
+ audio_to_video, and video_watermark, this matches the
3245
+ inputs[] count. Per ticket I27.
2896
3246
  example: 4
2897
3247
 
2898
3248
  # ============================================
@@ -3567,12 +3917,22 @@ components:
3567
3917
  description: Container-reported duration (audio + video).
3568
3918
  width:
3569
3919
  type: integer
3920
+ format: int64
3570
3921
  minimum: 1
3571
- description: Pixel width (image + video; best-effort document).
3922
+ description: |
3923
+ Pixel width (image + video; best-effort document). Declared
3924
+ `int64` so Rust SDK generators emit `i64` instead of the
3925
+ default `i32`; `i32` is fine for everything ffmpeg/libcaesium
3926
+ handles today but the format hint keeps the door open for
3927
+ scientific / RAW imagery without future SDK churn (per
3928
+ ticket [`0sTmbUsc`](https://trello.com/c/0sTmbUsc)).
3572
3929
  height:
3573
3930
  type: integer
3931
+ format: int64
3574
3932
  minimum: 1
3575
- description: Pixel height (image + video; best-effort document).
3933
+ description: |
3934
+ Pixel height (image + video; best-effort document). See
3935
+ `width` for the `format: int64` rationale.
3576
3936
  codec:
3577
3937
  type: string
3578
3938
  description: |
@@ -3607,12 +3967,16 @@ components:
3607
3967
  `29.97`, `23.976`).
3608
3968
  bitrate_bps:
3609
3969
  type: integer
3970
+ format: int64
3610
3971
  minimum: 0
3611
3972
  description: |
3612
3973
  Overall stream bitrate, **bits per second**. Units in
3613
3974
  the field name, mirroring `duration_seconds`, so SDKs
3614
3975
  avoid the kbps-vs-bps guessing trap. Container-reported
3615
- for video + audio.
3976
+ for video + audio. Declared `int64` so Rust SDK
3977
+ generators emit `i64` instead of `i32`; `i32` caps at
3978
+ ~2.1 Gbps which is tight for future 4K/8K/RAW workloads
3979
+ (per ticket [`0sTmbUsc`](https://trello.com/c/0sTmbUsc)).
3616
3980
  audio_layout:
3617
3981
  type: string
3618
3982
  description: |
@@ -3759,10 +4123,10 @@ components:
3759
4123
  the first OPTIONAL role on the contract — `role: base`
3760
4124
  audio required, `role: overlay` image 0..1 per
3761
4125
  `per_role_cardinality`). When overlay is omitted, the video
3762
- uses a solid background colour. `availability: planned` per
3763
- the operation schema; the API rejects workflow-create with
3764
- `feature_not_available` (422) until the Lambda ships, so
3765
- traffic does not reach SNS today. `media_group` is derived
4126
+ uses a solid background colour. `availability: beta` (Wave A,
4127
+ [`c3uthIP4`](https://trello.com/c/c3uthIP4)) the Lambda
4128
+ backend is live, so the API accepts + publishes (MUST NOT 422);
4129
+ traffic flows to SNS. `media_group` is derived
3766
4130
  from the `base` role input MIME prefix per ADR-0015 (always
3767
4131
  `audio` for audio_to_video). Routes via
3768
4132
  `operation_type=audio_to_video` to `ops-audio-to-video`.
@@ -3773,7 +4137,9 @@ components:
3773
4137
  of each per `per_role_cardinality { base: 1/1, overlay:
3774
4138
  1/1 }`). Re-encode required; audio stream-copy passthrough.
3775
4139
  Distinct from `image_watermark` (pure-Rust/image-only —
3776
- see ADR-0013). `availability: planned`; routes via
4140
+ see ADR-0013). `availability: beta` (Wave A, `c3uthIP4` —
4141
+ Lambda backend live; `short_form` beta, `long_form` stays
4142
+ `planned`); routes via
3777
4143
  `operation_type=video_watermark` to `ops-video-watermark`.
3778
4144
  Per ADR-0004 + ADR-0013
3779
4145
  ([`4NrRPCgh`](https://trello.com/c/4NrRPCgh)).
@@ -3795,8 +4161,10 @@ components:
3795
4161
  a separate `split-video-fargate` worker via
3796
4162
  `processing_class`. `media_group` derives from the input
3797
4163
  MIME prefix per the existing single-input rule (no
3798
- operation-specific conditional needed). `availability:
3799
- planned`; routes via `operation_type=split` to `ops-split`.
4164
+ operation-specific conditional needed). `availability: beta`
4165
+ for the `audio` mime_group (`image_gif` / `document_pdf` /
4166
+ `video` stay `planned`); routes via `operation_type=split`
4167
+ to `ops-split`.
3800
4168
  Per ADR-0004 + ADR-0014
3801
4169
  ([`vKI0CFDu`](https://trello.com/c/vKI0CFDu)).
3802
4170
  enum:
@@ -3934,6 +4302,47 @@ components:
3934
4302
  - stream_copy
3935
4303
  - re_encode
3936
4304
 
4305
+ LongFormOperationType:
4306
+ type: string
4307
+ description: |
4308
+ Coarse operation verb for the long-form claim-check job
4309
+ (`LongFormJobMessage.operation_type`). Deliberately a call-site
4310
+ **subset** of `OperationType` — only the long-form classes the API
4311
+ actually publishes today (`compress`, `merge`). NOT the full
4312
+ `OperationType` enum (which would over-promise the wire). Future
4313
+ long-form publishers (e.g. `split` per
4314
+ [`rcwvUKhI`](https://trello.com/c/rcwvUKhI)) widen this enum when
4315
+ they ship.
4316
+
4317
+ Named-schema form lifted from inline at
4318
+ `LongFormJobMessage.operation_type` per ticket
4319
+ [`A3DyuYUd`](https://trello.com/c/A3DyuYUd) — generated SDK bindings
4320
+ emit a stable typed name instead of an `AnonymousSchema_N`
4321
+ placeholder.
4322
+ enum:
4323
+ - compress
4324
+ - merge
4325
+
4326
+ LongFormProcessingClass:
4327
+ type: string
4328
+ description: |
4329
+ Logical processing class on the long-form claim-check wire
4330
+ (`LongFormJobMessage.processing_class`) — always the literal
4331
+ `long_form` (never `short_form` / `blocked`; those exist only on the
4332
+ upload-probe response and HTTP plan surfaces). The launcher forks on
4333
+ this field; do not confuse it with the backend worker identity, which
4334
+ stays off the wire per `schemas/FORMAT.md` §F8.
4335
+
4336
+ A single-value enum (not a JSON-Schema `const`): named + `enum` is the
4337
+ repo's proven typed-codegen form (mirrors `JobInputRole` /
4338
+ `ReEncodeDecision`), whereas `const` degraded to an unconstrained
4339
+ `String` in SDK generators. Lifted from inline at
4340
+ `LongFormJobMessage.processing_class` per ticket
4341
+ [`A3DyuYUd`](https://trello.com/c/A3DyuYUd). Single-member enum
4342
+ validates identically to the prior `const long_form`.
4343
+ enum:
4344
+ - long_form
4345
+
3937
4346
  ProgressStatus:
3938
4347
  type: string
3939
4348
  description: |