Fix review findings from PRs #11, #45, #46 - #47
Conversation
- #11: --mod-solving trace clobbered `targets`, dropping Katz. - #45: Doppler frames close for any corpus size (admission, not LRU eviction); flow ids compact and capped; keys per target; falls back to base without SHM; compile failure fails the wiring test. - #46: seed-arm ledgers gate on live-corpus membership, not seed_meta; EEVDF docs state O(n + log n) pick cost. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvj2gdMAa4HA8MGHULfDJE
Reviewer's GuideThis PR closes review findings across directed trace setup, Doppler scheduling, seed-arm accounting, and EEVDF documentation. The implementation preserves existing target state through local renaming, redesigns Doppler admission/eviction and compact flow-id retention with target-aware keys and an SHM capability gate, derives seed membership from the live corpus cache, and adds falsification/adversarial tests that expose the prior failures. Sequence diagram for target-aware Doppler observation and scoringsequenceDiagram
participant Fuzzer
participant SHM as SHM_Coverage
participant Doppler as PowerDoppler
participant Scorer as SeedScorer
Fuzzer->>SHM: get_edge_counts()
Fuzzer->>Doppler: observe(_doppler_key(seed_key), hits)
alt Open frame available
Doppler->>Doppler: observe(seed_key, hits)
else Slots full and frame stale
Doppler->>Doppler: _close(seed_key, ensemble)
Doppler->>Doppler: observe(seed_key, hits)
else Slots full and frames active
Doppler-->>Fuzzer: refuse sample
end
Fuzzer->>Doppler: energy(_doppler_key(seed_key))
Doppler-->>Scorer: doppler energy
Flow diagram for Doppler capability fallbackflowchart TD
A["schedule = doppler"] --> B{SHM coverage available?}
B -->|yes| C["Initialize PowerDoppler"]
B -->|no| D["Print warning"]
D --> E["Use base schedule"]
C --> F["SeedScorer uses doppler"]
E --> G["SeedScorer uses base"]
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Doppler can still starve large cyclic corpora, and corpus membership memoization can become stale after same-length replacements.
Review effort: Balanced
Findings: 1
Open (2)
What changed in this PR
Fixes regressions in directed fuzzing, Doppler scheduling, and seed-arm accounting.
Changes:
- Preserves directed targets during trace solving.
- Bounds and namespaces Doppler state; adds SHM fallback.
- Uses live-corpus membership for seed-arm records and expands tests/docs.
| File | Description |
|---|---|
src/fuzzer_tool/services/fuzzer.py |
Fixes target handling, Doppler wiring, and corpus gating. |
src/fuzzer_tool/core/power_doppler.py |
Adds bounded frames, scores, and flow IDs. |
src/fuzzer_tool/core/fair_queue.py |
Clarifies EEVDF complexity. |
tests/test_regression_katz_resume_contract.py |
Tests trace-mode target preservation. |
tests/test_power_doppler.py |
Tests Doppler limits, fallback, and isolation. |
tests/test_os_net_scheduler_wiring.py |
Tests live-corpus seed accounting. |
docs/DEEP_DIVE.md |
Documents corrected Doppler behavior. |
docs/TODO.md |
Updates resolved and pending work. |
CHANGELOG.md |
Records fixes. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| self._scores: LRUCache = LRUCache(max_scores, on_evict=self._evicted) | ||
| self._max_scores = max_scores | ||
| self._max_flow_ids = max_flow_ids | ||
| self._stale_after = max_seeds * ensemble * STALE_FRAMES |
| n = len(self.corpus) | ||
| memo = self._parent_memo | ||
| if memo is not None and memo[0] is parent and memo[1] == n: | ||
| return memo[2] |
- Doppler: abandon horizon doubles when a dropped seed returns; a fixed horizon thrashed once the corpus cycle outlasted it. - Seed-arm corpus memo: hits re-validated by slot identity, misses not memoized; length-keyed memo went stale on in-place trims. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rvj2gdMAa4HA8MGHULfDJE


Addresses the open Copilot threads on merged PRs #11, #45, #46.
#11
--mod-solving tracereassigned the directedtargetsparam → Katz skipped,_distance_targets= fuzz target. Local renameddiv_targets.#45 (Doppler)
basewith a warning.#46
seed_meta(standalone QEA).Validation
PowerDoppler.observe: 113 → 109 µs at 2k edges (no regression).🤖 Generated with Claude Code
https://claude.ai/code/session_01Rvj2gdMAa4HA8MGHULfDJE
Generated by Claude Code
Summary by Sourcery
Fix scheduling, directed-mode, and seed-accounting regressions while strengthening Doppler behavior and regression coverage.
Bug Fixes:
Enhancements:
Documentation:
Tests: