ruvnet/ruflo · error · Error

unknown inbox message ${messageId} for ${audience}

Error message

unknown inbox message ${messageId} for ${audience}

What it means

Thrown when acknowledging or reading a message ID unknown for the given audience. Defense: only act on IDs obtained from a prior poll for that same audience, and tolerate messages expiring between poll and ack.

Source

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

    const now = this.now();
    for (const record of this.records) {
      if (
        BigInt(record.cursor) > after
        && record.message.audience === audience
        && (record.message.expiresAt === undefined || Date.parse(record.message.expiresAt) > now)
      ) {
        yield clone(record.message);
      }
    }
  }

  acknowledge(audience: string, messageId: string, issuer?: string): void {
    const matches = this.records.filter(
      (candidate) => candidate.message.audience === audience
        && candidate.message.messageId === messageId
        && (issuer === undefined || candidate.message.issuer === issuer),
    );
    if (!matches.length) throw new Error(`unknown inbox message ${messageId} for ${audience}`);
    if (matches.length > 1) throw new Error(`ambiguous inbox message ${messageId}; issuer is required`);
    const record = matches[0]!;
    if (record.acknowledgedAt === undefined) record.acknowledgedAt = new Date(this.now()).toISOString();
  }

  pending(audience: string): InMemoryInboxRecord[] {
    return this.records
      .filter((record) => record.message.audience === audience && record.acknowledgedAt === undefined)
      .map(clone);
  }

  quarantineRecords(): InMemoryQuarantinedMessage[] {
    return this.quarantined.map(clone);
  }

  private parseCursor(cursor: string): bigint {
    try {
      return parseCanonicalUnsigned(cursor, 'inbox cursor');

View on GitHub (pinned to fa13ee4ad6)

Solutions

  1. Check the inbox listing for the audience and use an existing messageId.
  2. Account for message expiry: re-post the message if it has been evicted.
  3. Verify the audience matches the audience the message was posted for.
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at v3/@claude-flow/codex/src/harness/in-memory-inbox-reference.ts:138 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/f998ed4d7fc13d85. Report an issue: GitHub.