5.3 KiB
Phase 3: Pipeline Integration and MVP - Discussion Log
Audit trail only. Do not use as input to planning, research, or execution agents. Decisions are captured in CONTEXT.md — this log preserves the alternatives considered.
Date: 2026-03-26 Phase: 03-pipeline-integration-and-mvp Areas discussed: Auto-clustering strategy, Cluster tone assignment, Shutdown & encoding feedback, Post-run output
Auto-clustering Strategy
| Option | Description | Selected |
|---|---|---|
| Hash-bucketing | Deterministic: hash (dst_port, protocol) into N fixed buckets. Same traffic always maps to same cluster/tone. Simple, no warmup, predictable. | ✓ |
| K-means clustering | Statistical: feature vectors into muesli/kmeans. Discovers natural groupings. Needs warmup, non-deterministic, adds dependency. | |
| You decide | Claude picks based on codebase fit and simplicity. |
User's choice: Hash-bucketing Notes: None
Bucket count
| Option | Description | Selected |
|---|---|---|
| 4 buckets | Enough variety without overwhelming stereo field. Total 14 layers (10 known + 4 unknown). | ✓ |
| 8 buckets | More granularity. Total 18 layers — thinner per-layer gain. | |
| You decide | Claude picks balancing variety vs mixing headroom. |
User's choice: 4 buckets Notes: None
Placement
| Option | Description | Selected |
|---|---|---|
| Inside classifier | Classifier returns unknown-1 through unknown-4. Clean: final class in one place. | ✓ |
| Post-classification step | Separate stage re-maps unknowns. Keeps classifier untouched but adds complexity. | |
| You decide | Claude picks based on minimal code change. |
User's choice: Inside classifier Notes: None
Cluster Tone Assignment
Frequency approach
| Option | Description | Selected |
|---|---|---|
| Dissonant range | All 4 buckets in 850-1100 Hz range above known protocols. Detuned intervals. Extends Phase 2 D-04. | ✓ |
| Hash-to-frequency | Hash bucket ID to frequency. Deterministic but could collide with known tones. | |
| You decide | Claude picks frequencies fitting existing harmonic scheme. |
User's choice: Dissonant range (850-1100 Hz) Notes: None
Timbre
| Option | Description | Selected |
|---|---|---|
| Same dissonant character | All 4 use same detuned/beating harmonics as original unknown. Differentiated by pitch only. | ✓ |
| Varied timbres per bucket | Each gets own harmonic ratio set. More variety but harder to recognize as unknown family. | |
| You decide | Claude picks based on coherence. |
User's choice: Same dissonant character Notes: None
Migration
| Option | Description | Selected |
|---|---|---|
| Replace entirely | Remove ClassUnknown, add ClassUnknown1-4. AllClasses() returns 14. Clean break. | ✓ |
| Keep as fallback | ClassUnknown remains for edge cases. Buckets are ClassUnknown1-4 for hashable unknowns. | |
| You decide | Claude picks based on realistic edge cases. |
User's choice: Replace entirely Notes: None
Shutdown & Encoding Feedback
Feedback level
| Option | Description | Selected |
|---|---|---|
| Status line | Print "Encoding N windows..." then "Saved path (Xs, N KB, encoded in Xs)". Minimal but confirms activity. | ✓ |
| Silent encoding | No output during encoding. File appearing on disk is enough. | |
| Progress bar | Show encoding progress. Adds dependency or custom logic for likely <1s operation. | |
| You decide | Claude picks appropriate level. |
User's choice: Status line Notes: None
Output order
| Option | Description | Selected |
|---|---|---|
| Before encoding | Ctrl+C → summary → Encoding → Saved. Summary appears instantly. | ✓ |
| After encoding | Ctrl+C → Encoding → Saved → summary. File ready sooner. | |
| You decide | Claude picks best feel. |
User's choice: Before encoding (summary first) Notes: None
Post-run Output
Saved line verbosity
| Option | Description | Selected |
|---|---|---|
| Path + duration + size | e.g., "Saved out.mp3 (12.5s, 198 KB, encoded in 0.3s)". Everything at a glance. | ✓ |
| Path only | e.g., "Saved out.mp3". Minimal. | |
| Path + duration | e.g., "Saved out.mp3 (12.5s audio)". Middle ground. | |
| You decide | Claude picks verbosity level. |
User's choice: Path + duration + size Notes: None
Cluster info in summary
| Option | Description | Selected |
|---|---|---|
| Yes, in protocol summary | Unknown buckets appear naturally as unknown-1: 42, unknown-2: 17 etc. Falls out of existing logic. | ✓ |
| No, keep summary as-is | Only show known protocol classes. Buckets are implementation details. | |
| You decide | Claude picks based on usefulness. |
User's choice: Yes, in protocol summary Notes: None
Claude's Discretion
- Exact hash function for port/protocol → bucket mapping
- Exact Hz values for 4 unknown bucket tones (within 850-1100 Hz)
- GainPerLayer recalculation for 14 layers
- Stereo panning positions for unknown buckets
- Encoding time measurement implementation
Deferred Ideas
None — discussion stayed within phase scope