--- phase: 11 plan: 01 subsystem: synth, classify tags: [frequency-config, traffic-classes, test-fixes, data-layer] dependency_graph: requires: [classify/types.go TrafficClass constants from Phase 10] provides: [ClassFreqConfigs with 35 entries, AllClasses() returning 35 entries] affects: [synth/bank.go, config/config.go, config/config_test.go, synth/bank_test.go] tech_stack: added: [] patterns: [WaveformPresetHarmonics for all new entries, len(classify.AllClasses()) for dynamic counts] key_files: created: [] modified: - synth/config.go - classify/types.go - synth/bank_test.go - config/config_test.go - classify/classifier_test.go decisions: - "Use len(classify.AllClasses()) in synth and config tests for dynamic count validation" - "LDAP/Kerberos/Syslog placed in Infrastructure section of AllClasses() after SNMP" - "All 21 new ClassFreqConfigs entries use WaveformPresetHarmonics() per D-01 decision" metrics: duration: ~8min completed: "2026-03-27" tasks: 2 files_modified: 5 --- # Phase 11 Plan 01: Frequency Config Data Layer Summary **One-liner:** Added 21 ClassFreqConfigs entries (mDNS through Syslog) and expanded AllClasses() to 35 with LDAP/Kerberos/Syslog, fixing all hardcoded count assertions across synth, config, and classify test files. ## What Was Built ### Task 1: Add 21 ClassFreqConfigs entries and update AllClasses() **synth/config.go** — Added 21 new `FreqConfig` entries to `ClassFreqConfigs` map, organized by protocol family: | Family | Classes | Hz Range | Waveform | |--------|---------|----------|----------| | Infrastructure additions | mDNS, SSDP, SNMP | 93-118 Hz | Triangle | | Web addition | QUIC | 190 Hz | Sawtooth | | Mail additions | IMAP, POP3, SMTP-sub | 241-305 Hz | Triangle | | Remote Access additions | RDP, Telnet, VNC | 385-485 Hz | Square | | File Transfer additions | FTP, SMB, TFTP | 545-687 Hz | Square | | Database additions | MySQL, PostgreSQL, Redis, MongoDB | 1543-2182 Hz | Sawtooth | | VoIP | SIP | 2449 Hz | Sine | | Infrastructure auto-assigned | LDAP, Kerberos, Syslog | 2950-3250 Hz | Triangle | All 21 entries use `WaveformPresetHarmonics()` per D-01. Total map: 35 entries. **classify/types.go** — Updated `AllClasses()`: - Added `ClassLDAP`, `ClassKerberos`, `ClassSyslog` to Infrastructure section (after ClassSNMP) - Updated doc comment: removed Phase 11 exclusion note, now says "AllClasses returns all known traffic classes in display order." - Now returns 35 entries (was 32) ### Task 2: Fix all hardcoded count assertions | File | Change | |------|--------| | synth/bank_test.go | Renamed `TestNewBankHas14Layers` to `TestNewBankHasAllLayers`; `!= 14` → `!= len(classify.AllClasses())` | | config/config_test.go | 4 occurrences of `!= 14` → `!= len(classify.AllClasses())`; TestPrintConfigContainsAllClasses: hardcoded 14-class list → `classify.AllClasses()` loop | | classify/classifier_test.go | `want 32` → `want 35` in TestAllClassesCount | ## Verification Results ``` go test ./... ok github.com/netsynth/netsynth/aggregate ok github.com/netsynth/netsynth/capture ok github.com/netsynth/netsynth/classify ok github.com/netsynth/netsynth/cmd/netsynth ok github.com/netsynth/netsynth/config ok github.com/netsynth/netsynth/encode ok github.com/netsynth/netsynth/synth ``` All 7 packages pass. ## Commits | Task | Commit | Description | |------|--------|-------------| | 1 | 1556ce8 | feat(11-01): add 21 ClassFreqConfigs entries and include LDAP/Kerberos/Syslog in AllClasses() | | 2 | 35d8915 | fix(11-01): update hardcoded count assertions to reflect 35 traffic classes | ## Deviations from Plan **1. [Rule 3 - Blocker] Worktree was at stale commit missing Phase 8-10 changes** - **Found during:** Pre-execution setup - **Issue:** Worktree branch `worktree-agent-af29ad97` was at commit `8e565ec` (milestone v1.2 roadmap docs), 43 commits behind `master`. The target files (synth/config.go, classify/types.go) were in their Phase 7 state. - **Fix:** Ran `git merge master --no-edit` (fast-forward) to bring worktree to current HEAD `683470a`. - **Files modified:** All files (fast-forward merge, no conflicts) - **Commit:** Not a separate commit — prerequisite action before Task 1 ## Known Stubs None — all 35 ClassFreqConfigs entries have complete Hz, waveform, pan, and group values. No placeholder data. ## Self-Check: PASSED