refactor!: introduce generic processors registry and remove normalize registry adapter

- add new `processors` package with canonical `Processor` interface
- add `processors.Registry` with Register/Build/BuildChain factory model
- switch `pipeline.Pipeline` to `[]processors.Processor`
- replace `normalize.Registry` + registry adapter with direct `normalize.Processor`
- remove `normalize/registry.go`
- update root docs to position normalize as one optional processing stage
- add tests for processors registry, normalize processor behavior, and pipeline flow

BREAKING CHANGE:
- `pipeline.Processor` removed; use `processors.Processor`
- `normalize.Registry` and old normalize processor adapter APIs removed
- downstream daemons must update processor wiring to new `processors.Registry`
  and `normalize.NewProcessor(...)`
This commit is contained in:
2026-03-16 13:14:24 -05:00
parent 6c5f95ad26
commit 96039f6530
12 changed files with 543 additions and 162 deletions

18
doc.go
View File

@@ -5,16 +5,15 @@
//
// Conceptual flow:
//
// Collect -> Normalize (optional) -> Policy -> Route -> Emit
// Collect -> Process (optional stages, including normalize) -> Route -> Emit
//
// In feedkit this maps to:
//
// Collect: sources + scheduler
// Normalize: normalize (optional pipeline stage)
// Policy: pipeline
// Route: dispatch
// Emit: sinks
// Config: config
// Collect: sources + scheduler
// Process: pipeline + processors + normalize (optional stage)
// Route: dispatch
// Emit: sinks
// Config: config
//
// feedkit intentionally does not define domain payload schemas or domain-specific
// validation rules. Those belong in each concrete daemon.
@@ -62,8 +61,11 @@
// Processor chain between scheduler and dispatch.
// Processors can transform, drop, or reject events.
//
// - processors
// Generic processor interface and named factory registry for wiring chains.
//
// - normalize
// Optional pipeline processor for raw->canonical mapping.
// Concrete pipeline processor for raw->canonical mapping.
// If no normalizer matches, the event passes through unchanged by default.
//
// - dispatch