{"record":{"id":"9d56709e3464bb18","repo":"ruvnet/ruflo","slug":"message-expiresat-must-be-an-iso-timestamp","errorCode":null,"errorMessage":"message expiresAt must be an ISO timestamp","messagePattern":"message expiresAt must be an ISO timestamp","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"v3/@claude-flow/codex/src/harness/in-memory-inbox-reference.ts","lineNumber":87,"sourceCode":"    const receivedAt = new Date(this.now()).toISOString();\n    let suppliedDigest: string;\n    try {\n      suppliedDigest = harnessMessageContentDigest(message.content);\n    } catch {\n      this.quarantine(message, 'content-digest-mismatch', receivedAt);\n      throw new Error('message content is not canonical JSON');\n    }\n    if (suppliedDigest !== message.contentDigest) {\n      this.quarantine(message, 'content-digest-mismatch', receivedAt);\n      throw new Error('message contentDigest does not match canonical content');\n    }\n    try {\n      parseCanonicalUnsigned(message.sequence, 'message sequence');\n    } catch {\n      throw new Error('message sequence must be a canonical unsigned decimal integer');\n    }\n    if (message.expiresAt !== undefined && !Number.isFinite(Date.parse(message.expiresAt))) {\n      throw new Error('message expiresAt must be an ISO timestamp');\n    }\n\n    const envelopeDigest = sha256(canonicalJson(message));\n    const prior = this.byIdentity.get(identity);\n    if (prior) {\n      if (prior.issuer !== message.issuer || prior.messageId !== message.messageId) {\n        throw new Error('inbox identity hash collision');\n      }\n      if (prior.envelopeDigest !== envelopeDigest) {\n        this.quarantine(message, 'message-id-content-conflict', receivedAt);\n        throw new Error('message ID was reused with different content');\n      }\n      return { messageId: message.messageId, acceptedAt: prior.record.receivedAt, duplicate: true };\n    }\n\n    const record: InMemoryInboxRecord = {\n      cursor: (this.nextCursor++).toString(),\n      message: clone(message),","sourceCodeStart":69,"sourceCodeEnd":105,"githubUrl":"https://github.com/ruvnet/ruflo/blob/fa13ee4ad60ac2090b1480656eb233521790d640/v3/@claude-flow/codex/src/harness/in-memory-inbox-reference.ts#L69-L105","documentation":"The optional expiresAt field, when present, must be a parseable ISO timestamp (Date.parse must yield a finite time). A non-ISO or unparseable expiry string is rejected because expiry-based eviction and quarantine logic depend on comparing real timestamps.","triggerScenarios":"Thrown at v3/@claude-flow/codex/src/harness/in-memory-inbox-reference.ts:87 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set expiresAt to a valid ISO 8601 timestamp (e.g. new Date(ms).toISOString()).","Validate the timestamp with the inbox's ISO check before posting the message."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"fa13ee4ad60ac2090b1480656eb233521790d640","analyzedAt":"2026-08-18T21:34:22.708Z","contentChangedAt":"2026-08-18T21:34:22.708Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}