--- phase: 06-config-package-and-sound-overrides plan: 02 subsystem: cmd/encode tags: [cli, config, RunSynthesis, dependency-injection, cobra] # Dependency graph requires: - phase: 06-01 provides: config.Load(configPath string) returns map[classify.TrafficClass]synth.FreqConfig - phase: 05-waveform-types-and-bank-decoupling provides: NewBank(tau, cfgs) with injected config map, FreqConfig.WaveformType provides: - --config flag in CLI (CFG-03) - config.Load called at startup before capture (D-11 fail fast) - RunSynthesis(snapshots, outputPath, freqCfgs) with injected config map (D-10) - Merged config flows end-to-end: TOML file -> config.Load -> RunSynthesis -> NewBank affects: - encode/mp3.go (RunSynthesis signature changed) - cmd/netsynth/main.go (--config flag, config.Load, pass freqCfgs through pipeline) # Tech tracking tech-stack: added: [] patterns: - "Dependency injection: config map flows from main() through runLiveMode/runPcapMode to RunSynthesis to NewBank" - "Fail-fast config loading: config.Load called after BPF validation, before capture starts (D-11)" - "Explicit configPath string var for --config flag, empty string triggers auto-discovery" key-files: created: [] modified: - encode/mp3.go - encode/mp3_test.go - cmd/netsynth/main.go key-decisions: - "Option A for freqCfgs propagation: pass as parameter to runLiveMode/runPcapMode rather than package-level var — explicit data flow, easier to test" - "config.Load called before output path resolution — config errors abort before any state changes" patterns-established: - "Config map injected at call boundary (main -> run -> runLiveMode/runPcapMode -> RunSynthesis -> NewBank)" requirements-completed: [CFG-03] # Metrics duration: 2min completed: 2026-03-26 --- # Phase 6 Plan 02: CLI Config Wiring Summary **--config flag added to Cobra, config.Load wired at startup, RunSynthesis signature changed to accept injected freqCfgs map — end-to-end config flow from TOML file to synthesis** ## Performance - **Duration:** ~2 min - **Started:** 2026-03-26T20:01:59Z - **Completed:** 2026-03-26T20:04:27Z - **Tasks:** 2 - **Files modified:** 3 (encode/mp3.go, encode/mp3_test.go, cmd/netsynth/main.go) ## Accomplishments - Changed `RunSynthesis` third parameter: accepts `freqCfgs map[classify.TrafficClass]synth.FreqConfig` (D-10) - Updated all 3 RunSynthesis call sites in encode tests to pass `synth.ClassFreqConfigs` - Added `configPath string` var and `--config` flag registration in Cobra (CFG-03) - Imported `config` and `synth` packages into cmd/netsynth/main.go - Wired `config.Load(configPath)` into `run()` after BPF validation, before capture (D-11) - Changed `runLiveMode` and `runPcapMode` signatures to accept `freqCfgs` parameter - Updated both `encode.RunSynthesis` call sites to pass `freqCfgs` - Full test suite passes: 7 packages, all green ## Task Commits 1. **Task 1** - `3dfcbbe` feat(06-02): add freqCfgs parameter to RunSynthesis 2. **Task 2** - `413cceb` feat(06-02): wire --config flag and config.Load into CLI pipeline ## Files Created/Modified - `encode/mp3.go` - RunSynthesis now accepts `freqCfgs map[classify.TrafficClass]synth.FreqConfig`; uses `freqCfgs` in `synth.NewBank(1.0, freqCfgs)` call - `encode/mp3_test.go` - Updated 3 RunSynthesis calls to pass `synth.ClassFreqConfigs` as third arg - `cmd/netsynth/main.go` - `configPath` var, `--config` flag, `config` and `synth` imports, `config.Load` call, updated function signatures, updated RunSynthesis calls ## Decisions Made - **Option A for freqCfgs propagation**: Pass config map as function parameter to `runLiveMode`/`runPcapMode` rather than storing in a package-level variable. Cleaner data flow, functions remain testable in isolation. - **config.Load position in run()**: Called after BPF filter validation, before output path resolution and capture start. Config errors abort immediately before any I/O begins (D-11). ## Deviations from Plan None - plan executed exactly as written. The worktree required a rebase onto local master to include phase 05 bank-decoupling code (NewBank 2-arg signature) and phase 06-01 config package before implementation could begin — this is expected prerequisite resolution, not a deviation. ## Issues Encountered - Worktree was based on origin/master (commit 41e2278, pre-phase-05). Rebased onto local master (936aeea) to get WaveformType, 2-arg NewBank, and config package. No code conflicts. ## User Setup Required None. ## Next Phase Readiness - Full end-to-end config flow is wired: user creates netsynth.toml -> `--config` passes path -> `config.Load` merges -> `RunSynthesis` uses merged map -> `NewBank` synthesizes with custom frequencies/waveforms - Phase 06-03 (if any) can build on this wired pipeline for additional config features ## Self-Check: PASSED - FOUND: encode/mp3.go — contains `func RunSynthesis(snapshots []classify.WindowSnapshot, outputPath string, freqCfgs map[classify.TrafficClass]synth.FreqConfig) error` - FOUND: encode/mp3_test.go — contains `RunSynthesis(snaps, tmpPath, synth.ClassFreqConfigs)` - FOUND: cmd/netsynth/main.go — contains `configPath string`, `config.Load(configPath)`, `runLiveMode(cmd, freqCfgs)` - FOUND: 3dfcbbe (Task 1 commit) - FOUND: 413cceb (Task 2 commit) --- *Phase: 06-config-package-and-sound-overrides* *Completed: 2026-03-26*