ruvnet/ruflo · error · Error
ambiguous inbox message ${messageId}; issuer is required
Error message
ambiguous inbox message ${messageId}; issuer is required What it means
Thrown when a message ID matches multiple issuers and no issuer was specified. Defense: always qualify lookups with the expected issuer when the inbox can contain same-ID messages from different issuers.
Source
Thrown at v3/@claude-flow/codex/src/harness/in-memory-inbox-reference.ts:139
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');
} catch {View on GitHub (pinned to fa13ee4ad6)
Solutions
- Include the issuer field when fetching the message so the id lookup is unambiguous.
- Query with a fully-qualified (issuer, messageId) pair instead of messageId alone.
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at v3/@claude-flow/codex/src/harness/in-memory-inbox-reference.ts:139 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/208bd1a15ca911ee.
Report an issue: GitHub.