Skip to content

P2: Split flush_outbound_queue_to_relay into smaller composable units #206

@vrknetha

Description

@vrknetha

Summary

flush_outbound_queue_to_relay in crates/clawdentity-core/src/runtime/relay.rs has #[allow(clippy::too_many_lines)] suppressed and handles multiple concerns inline: queue draining, payload deserialization, frame construction, WebSocket send, error recovery with re-enqueue, trusted receipt marking, and dead letter routing.

The HARNESS_ACTION_PLAN.md Phase 1 already identified this pattern as a quality issue.

Current State

The function:

  1. Loops up to max_items times
  2. Checks relay connection state
  3. Takes oldest item from SQLite queue
  4. Deserializes JSON payload (handles malformed → dead letter)
  5. Constructs ConnectorFrame::Enqueue
  6. Sends via relay_sender
  7. On send failure: re-enqueues the item
  8. On success: marks trusted receipt

This is ~60 lines of mixed concerns with error handling interleaved.

Proposed Refactor

Split into:

// relay.rs
pub async fn flush_outbound_queue_to_relay(...) -> Result<FlushOutboundResult> {
    // orchestration only: loop, take, delegate, aggregate
}

// relay_send.rs
fn prepare_outbound_frame(item: &OutboundQueueItem) -> Result<ConnectorFrame, OutboundPrepareError> {
    // deserialize + construct frame
}

fn handle_send_failure(store: &SqliteStore, item: OutboundQueueItem) -> Result<()> {
    // re-enqueue logic
}

fn handle_malformed_payload(store: &SqliteStore, item: &OutboundQueueItem, error: &serde_json::Error) -> Result<()> {
    // dead letter logic
}

Files to Change

  • crates/clawdentity-core/src/runtime/relay.rs — extract helpers, remove #[allow(clippy::too_many_lines)]
  • New file: crates/clawdentity-core/src/runtime/relay_send.rs (or inline in relay.rs as private fns)

Acceptance Criteria

  • #[allow(clippy::too_many_lines)] removed
  • Each extracted function has a single responsibility
  • No behavior change — existing tests pass unchanged
  • clippy -D warnings clean

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Quality improvementconnectorConnector packagerustRust crate

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions