ruvnet/ruflo · error
Inbound rejected: non-canonical payload from ${sourceNodeId}
Error message
Inbound rejected: non-canonical payload from ${sourceNodeId} (addr=${address}) What it means
Log warning in dispatchInbound: canonicalizing the envelope for verification failed (disabled/unknown signature version or malformed payload), so signature verification is impossible; the message is rejected as INVALID_PAYLOAD.
Source
Thrown at v3/@claude-flow/plugin-agent-federation/src/application/inbound-dispatcher.ts:328
});
return { accepted: false, reason: 'PEER_EVICTED' };
}
let signatureVersion: EnvelopeSignatureVersion;
let canonicalEnvelope: string;
try {
signatureVersion = envelopeSignatureVersion(message);
const accepted = deps.acceptedSignatureVersions ?? ['legacy-v1', 'jcs-v1'];
if (!accepted.includes(signatureVersion)) {
throw new TypeError(`Signature version ${signatureVersion} is disabled`);
}
canonicalEnvelope = canonicalizeEnvelopeForVerify(message, signatureVersion);
} catch {
await deps.audit.log('message_rejected', {
sourceNodeId,
metadata: { address, reason: 'INVALID_PAYLOAD' },
});
deps.logger.warn(`Inbound rejected: non-canonical payload from ${sourceNodeId} (addr=${address})`);
return { accepted: false, reason: 'INVALID_PAYLOAD' };
}
// Cryptographic signature verification (closes the trust gate that
// peer-state checks alone don't provide — without this, a malicious
// sender could just claim sourceNodeId='known-peer' in metadata and
// pass the previous gates).
if (deps.verifyEnvelope) {
const sig = typeof meta.signature === 'string' ? meta.signature : null;
let ok = false;
try {
ok = deps.verifyEnvelope(canonicalEnvelope, sig, peer.publicKey);
} catch {
await deps.audit.log('message_rejected', {
sourceNodeId,
metadata: { address, reason: 'INVALID_PAYLOAD' },
});
deps.logger.warn(`Inbound rejected: non-canonical payload from ${sourceNodeId} (addr=${address})`);View on GitHub (pinned to fa13ee4ad6)
Solutions
- Fix the sending peer to produce canonical payloads (field order/encoding); non-canonical payloads are rejected.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at v3/@claude-flow/plugin-agent-federation/src/application/inbound-dispatcher.ts:328 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/4a378e1a82fdade8.
Report an issue: GitHub.