Paths: File paths (shared/ , references/ , ../ln-* ) are relative to skills repo root. If not found at CWD, locate this SKILL.md directory and go up one level for repo root.
ln-812-query-optimizer
Type: L3 Worker Category: 8XX Optimization Parent: ln-810-performance-optimization-coordinator
Fixes query efficiency issues found by ln-651-query-efficiency-auditor. Each fix verified via tests with keep/discard pattern. Metric: query count reduction (not runtime benchmark).
Overview
Aspect Details
Input Audit findings from docs/project/persistence_audit.md (ln-651 section) OR target file
Output Optimized queries, verification report
Companion ln-651-query-efficiency-auditor (finds issues) → ln-812 (fixes them)
Workflow
Phases: Pre-flight → Load Findings → Prioritize → Fix Loop → Report
Phase 0: Pre-flight Checks
Check Required Action if Missing
Audit findings OR target file Yes Block optimization
Test infrastructure Yes Block (need tests for verification)
Git clean state Yes Block (need clean baseline for revert)
MANDATORY READ: Load shared/references/ci_tool_detection.md — use Test Frameworks section for test detection.
Worktree & Branch Isolation
MANDATORY READ: Load shared/references/git_worktree_fallback.md — use ln-812 row.
Phase 1: Load Findings
From Audit Report
Read docs/project/persistence_audit.md , extract ln-651 findings:
Finding Type Optimization
N+1 query Batch loading / eager loading / .Include() / prefetch_related
Redundant fetch Pass object instead of ID, cache result
Over-fetching Select specific fields / projection / .Select()
Missing index hint Add index annotation / migration
Unbounded query Add .Take() / LIMIT / pagination
From Target File
If no audit report: scan target file for query patterns matching the table above.
Phase 2: Prioritize Fixes
Priority Criteria
1 (highest) N+1 in hot path (called per request)
2 Redundant fetches (same entity loaded multiple times)
3 Over-fetching (SELECT * where few columns needed)
4 Missing pagination on user-facing endpoints
Phase 3: Fix Loop (Keep/Discard)
Per-Fix Cycle
FOR each finding (F1..FN):
- APPLY: Edit query code (surgical change)
- VERIFY: Run tests IF tests FAIL → DISCARD (revert) → next finding
- VERIFY: Tests PASS → KEEP
- LOG: Record fix for report
Keep/Discard Decision
Condition Decision
No tests cover affected file/function SKIP finding — log as "uncovered, skipped"
Tests pass KEEP
Tests fail DISCARD + log failure reason
Fix introduces new N+1 DISCARD
Note: No benchmark needed — query optimization metric is correctness (tests pass) + structural improvement (fewer queries). The audit already identified the inefficiency.
Phase 4: Report Results
Report Schema
Field Description
source Audit report path or target file
findings_total Total findings from audit
fixes_applied Successfully kept fixes
fixes_discarded Failed fixes with reasons
fix_details[] Per-fix: finding type, file, before/after description
Configuration
Options:
Source
audit_report: "docs/project/persistence_audit.md" target_file: "" # Alternative to audit report
Verification
run_tests: true
Scope
fix_types: # Filter which types to fix - n_plus_one - redundant_fetch - over_fetching - unbounded_query
Error Handling
Error Cause Solution
No audit findings ln-651 not run or no issues Report "no findings to optimize"
ORM-specific syntax Unknown ORM Query Context7/Ref for ORM docs
Migration needed Index addition requires migration Log as manual step, skip
References
-
../ln-651-query-efficiency-auditor/SKILL.md (companion: finds issues)
-
shared/references/ci_tool_detection.md (test detection)
Definition of Done
-
Findings loaded from audit report or target file scan
-
Fixes prioritized (N+1 first, then redundant, over-fetch, unbounded)
-
Each fix applied with keep/discard: tests pass → keep, tests fail → discard
-
No new query inefficiencies introduced by fixes
-
Report returned with findings total, fixes applied, fixes discarded
Version: 1.0.0 Last Updated: 2026-03-08