Questions / Ambiguities Found
channel: "SMS"is accepted by request validation, but the implemented workflow sends and reads from AgentMail email threads.REQUIRES_REPLYexplicitly throws for non-email channels. This looks like a contract gap.maxAttemptsis described in the data model as follow-up attempts, while many readers would assume it means total attempts. The worker logic confirms it only caps follow-ups after the initial outreach.nextActionAtuses the sentinel253402300799999for “unscheduled” states. That value is returned byGET /cases/{id}, which is technically accurate but awkward for API consumers expectingnull.resultStatusis typed as an open string and the implementation mixes lowercase workflow values likegoal_achievedwith uppercase provider-delivery values likeBOUNCEDandREJECTED.resultSchemais documented as JSON Schema, but the API only validates that it is an object. Invalid or partial schemas are accepted.- Webhook delivery has no signature, no custom auth headers, and no retry loop. Failed deliveries are logged and dropped.
GET /cases/{id}omitsmetadata, even thoughmetadatais accepted at creation time and echoed in webhook payloads.GET /cases/{id}withincludeTranscript=truedepends on a live AgentMail fetch, and the handler does not catch transcript-fetch errors locally. A provider failure may surface as a generic platform500.POST /cases/{id}/inputsetsinputRequestStatustoRESOLVEDbefore the worker finishes processing the answer. During that window, the case can still read asINPUT_NEEDED.- The worker only treats inbound AgentMail events as replies when reply headers are present. A non-reply inbound email is ignored even if it relates to the same case.
agentMailInboxIdis currently hardcoded todev-test@agentmail.towhen a case is created. That value also appears in attachment metadata returned to clients. This looks like environment-specific implementation leakage.