Architecture

Acquisition stays separate from inference. Reports stay separate from codegen.

┌──────────────┐    ┌───────────────────┐    ┌─────────────────┐
│  Importers / │───▶│ Inference engine  │───▶│ Structured      │
│  CaptureSrc  │    │ passes + compete  │    │ Report (JSON)   │
│  hex/bin/    │    │ cluster / index   │    └────────┬────────┘
│  pcapng/dir  │    └───────────────────┘             │
└──────────────┘                                      ▼
                                           CLI / TUI / SVG / codegen

Principles

  1. Observation vs hypothesis — measured facts vs evidence-backed guesses
  2. Competing candidates — pruned/ranked per offset; losers explained
  3. Determinism — same inputs ⇒ same ordered outputs (--jobs merges by name)
  4. Budgetsquick / normal / exhaustive
  5. Extensibility — public Pass registry
  6. Annotations trusted — never auto-overwritten
  7. Honest entropy — never claim “encrypted” without caveats

Packages

PathRole
pkg/wiretapPublic API + Pass registry
internal/captureHex/binary/PCAPNG + drop-folder
internal/analysisPipeline, parallel passes
internal/inferenceField/checksum/TLV/…/compete
internal/clusterMulti-signal clustering
internal/indexOn-disk sample index
internal/visualizeSVG/HTML field maps
internal/compareDiff, correlation, experiments
internal/evalMeasured evaluation
internal/tuiInteractive report browser
schemaAST + Go/Kaitai/Wireshark codegen

Full write-up: docs/architecture.md in the repository (wiretap docs architecture).