ruvnet/ruflo · error · Error

message ID, issuer, and audience are required

Error message

message ID, issuer, and audience are required

What it means

send() on the in-memory inbox reference requires the three identity fields — messageId, issuer, and audience — to be non-blank strings. The guard fires when any of them is missing or whitespace-only, because the dedup identity key and delivery routing both depend on them.

Source

Thrown at v3/@claude-flow/codex/src/harness/in-memory-inbox-reference.ts:66

 * reference.
 */
export class InMemoryInboxReference {
  readonly referenceOnly = true;
  private readonly records: InMemoryInboxRecord[] = [];
  private readonly byIdentity = new Map<string, {
    issuer: string;
    messageId: string;
    envelopeDigest: string;
    record: InMemoryInboxRecord;
  }>();
  private readonly quarantined: InMemoryQuarantinedMessage[] = [];
  private nextCursor = 1n;

  constructor(private readonly now: () => number = Date.now) {}

  send(message: HarnessMessage): MessageReceipt {
    if (!message.messageId.trim() || !message.issuer.trim() || !message.audience.trim()) {
      throw new Error('message ID, issuer, and audience are required');
    }
    const identity = inMemoryInboxIdentityKey(message.issuer, message.messageId);
    const receivedAt = new Date(this.now()).toISOString();
    let suppliedDigest: string;
    try {
      suppliedDigest = harnessMessageContentDigest(message.content);
    } catch {
      this.quarantine(message, 'content-digest-mismatch', receivedAt);
      throw new Error('message content is not canonical JSON');
    }
    if (suppliedDigest !== message.contentDigest) {
      this.quarantine(message, 'content-digest-mismatch', receivedAt);
      throw new Error('message contentDigest does not match canonical content');
    }
    try {
      parseCanonicalUnsigned(message.sequence, 'message sequence');
    } catch {
      throw new Error('message sequence must be a canonical unsigned decimal integer');

View on GitHub (pinned to fa13ee4ad6)

Solutions

  1. Populate messageId, issuer, and audience on the message before sending it to the inbox.
  2. Validate the message shape at the producer so incomplete messages fail before reaching the inbox.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at v3/@claude-flow/codex/src/harness/in-memory-inbox-reference.ts:66 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of ruvnet/ruflo@fa13ee4ad6 (2026-08-18). Data as JSON: /api/errors/d466ab6d971233d4. Report an issue: GitHub.