Files
codex/prs/bolinfest/study/PR-3060-study.md
2025-09-02 15:17:45 -07:00

2.2 KiB
Raw Blame History

DOs

  • Avoid unnecessary clones in comparisons: Compare borrowed values directly; cloning allocates needlessly.
    // Good
    let is_current = preset.model == current_model && preset.effort == current_effort;
    
  • Log state changes with before/after context: Include both previous and new values to make audits useful.
    let prev_model = current_model.clone();
    let prev_effort = current_effort;
    let model_slug = preset.model.to_string();
    let effort = preset.effort;
    
    let actions: Vec<SelectionAction> = vec![Box::new(move |tx| {
        tx.send(AppEvent::UpdateModel(model_slug.clone()));
        tx.send(AppEvent::UpdateReasoningEffort(effort));
        tracing::info!(
            "Model change: prev={}, new={}; Effort: prev={}, new={}",
            prev_model, model_slug, prev_effort, effort
        );
    })];
    
  • Clone only at ownership boundaries: Clone when an API requires owned data; borrow for formatting/logging.
    tx.send(AppEvent::UpdateModel(model_slug.clone())); // needs owned String
    tracing::info!("New model: {}", model_slug);        // borrow; no clone
    
  • Use concise, consistent log phrasing: Keep keys stable and values inline for grepability.
    tracing::info!("Model change: prev={}, new={}; Effort: prev={}, new={}", prev_model, model_slug, prev_effort, effort);
    

DON'Ts

  • Dont clone just to compare: Cloning for equality checks wastes CPU and allocates.
    // Bad
    let is_current = preset.model == current_model.clone() && preset.effort == current_effort;
    
  • Dont clone just to log: tracing/format! take references; cloning adds no value.
    // Bad
    tracing::info!("New model: {}", model_slug.clone());
    
  • Dont shadow when capturing previous state: Use a distinct name instead of reusing the same identifier.
    // Bad
    let current_model = current_model.clone();
    
    // Good
    let prev_model = current_model.clone();
    
  • Dont log only the new value: Without the previous value, change events are hard to interpret.
    // Bad
    tracing::info!("New model: {}", model_slug);
    
    // Better
    tracing::info!("Model change: prev={}, new={}", prev_model, model_slug);