ruvnet/ruflo · error
- ${f.kind} (${f.severity}) @${f.offset}: ${f.reason}
Error message
- ${f.kind} (${f.severity}) @${f.offset}: ${f.reason} What it means
Detail line following a channel-guard audit event: itemizes each sanitized finding — its kind, severity, byte offset, and reason — so operators can see exactly what was stripped from the inter-agent message.
Source
Thrown at v3/@claude-flow/hooks/src/workers/channel-guard-worker.ts:299
/**
* The gate itself: sanitizes `message` and logs a structured audit event
* when findings are present, unless `CLAUDE_FLOW_SECURITY_CHANNEL_GATE=0`.
* Call this at any point content is about to cross an inter-agent boundary.
*/
export function guardChannelMessage(message: string, options: ChannelGuardOptions = {}): ChannelGuardOutcome {
if (!isChannelGateEnabled()) {
return { content: message, result: null };
}
const { sanitized, result } = sanitizeChannelMessage(message, options);
if (!result.safe) {
console.warn(
`[channel-guard] sanitized ${result.findings.length} finding(s) in inter-agent message ` +
`(${result.stats.messageLength} chars, ${result.stats.scanTimeMs}ms scan)`,
);
for (const f of result.findings) {
console.warn(` - ${f.kind} (${f.severity}) @${f.offset}: ${f.reason}`);
}
}
return { content: sanitized, result };
}
// ============================================================================
// Hook registration (HookEvent.PostTask) — opt-in, not eagerly registered
// ============================================================================
/**
* Builds a `HookHandler` that reads `context.data` as the message body (when
* it is a string), guards it, and surfaces any findings as `HookResult`
* warnings plus the sanitized content in `HookResult.data.sanitizedContent`.
* Never aborts — ChannelGuard is a sanitize+log gate, not a blocking one
* (see the ADR: only the Composition Inspector has a block mode).
*/
export function createChannelGuardHandler() {View on GitHub (pinned to fa13ee4ad6)
Solutions
- Inspect the finding kind, severity, and offset; fix the source message content that triggered the guard.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at v3/@claude-flow/hooks/src/workers/channel-guard-worker.ts:299 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/7a04076fa3d17264.
Report an issue: GitHub.