Files
yoloyolo/.planning/RETROSPECTIVE.md
T
gurixandClaude Opus 4.6 1230fd1b9d chore: archive v1.0 MVP milestone
Archive roadmap and requirements to milestones/, reorganize ROADMAP.md,
evolve PROJECT.md with shipped state, create retrospective.

4 phases, 11 plans, 16/16 requirements — all complete.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 15:23:04 +01:00

2.0 KiB

Retrospective

Milestone: v1.0 — MVP

Shipped: 2026-03-26 Phases: 4 | Plans: 11 | Timeline: 3 days (2026-03-24 -> 2026-03-26) LOC: 3,254 Go | Files: 84 modified

What Was Built

  • Config-driven packet classifier with 12 protocol rules and 4 hash-bucketed unknown classes
  • Live packet capture via pure Go go-pcap with privilege detection and non-blocking channel pipeline
  • Additive synthesis engine: per-class oscillators, EMA amplitude smoothing, constant-power stereo mixing
  • MP3 encoding via embedded LAME, zero-packet guard
  • End-to-end pipeline with clean Ctrl+C shutdown
  • BPF filter and offline pcap file sonification with timestamp-based windowing

What Worked

  • Risk-ordered phases: hardest foundation first (capture), then synthesis in isolation, then integration — no phase blocked on another's bugs
  • TDD approach in executor agents caught signature mismatches early
  • Pure Go capture layer (go-pcap) avoided libpcap dependency headaches
  • Hand-rolled synthesis kept dependencies minimal and code understandable
  • Wave-based parallel execution for independent plans

What Was Inefficient

  • Some SUMMARY.md files had empty one-liner fields, causing noisy milestone extraction
  • Phase 4 research could have been lighter — BPF/pcap APIs were straightforward

Patterns Established

  • Ordered []Rule slice for classifier (first-match-wins, extensible)
  • io.Writer injection for testable stderr output
  • Buffered channels between pipeline stages (512-1024) to absorb bursts
  • Package-level globals for Cobra flag binding
  • Timestamp-based windowing for non-live sources

Key Lessons

  • Embedding C source (go-lame) is a good tradeoff: CGo at build time only, no runtime dependency
  • go-audio/wav was unnecessary — writing PCM bytes directly to LameWriter is simpler
  • Hash-bucketed unknowns (4 classes) are sufficient for audio distinction without k-means complexity
Metric v1.0
Phases 4
Plans 11
Days 3
LOC 3,254
Avg plan duration ~8 min