Files
yoloyolo/.planning/phases/03-pipeline-integration-and-mvp/03-DISCUSSION-LOG.md
T
2026-03-26 12:36:44 +01:00

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