tcef-notifications/src/matcher
vjrj a1ed206985 Fase 1b: cableado del matcher (ingesta polling, runner shadow/full, comparador)
- config: bloque matcher (MATCHER_MODE off/shadow/full, IRON_PASSWORD, audiencia,
  poll, batch) + validacion
- db: colecciones subscriptions/activefires/notifications_shadow/matcher_state +
  ensureMatcherIndexes (2dsphere en notifications_shadow para el dedupe 500m)
- matcher/context: MatchContext sobre Mongo real (candidatas geo $near 1000km +
  audiencia; dedupe geo $near 500m; lang del owner)
- matcher/ingest: polling de activefires por createdAt>checkpoint (Mongo 3.2 sin
  change streams), checkpoint persistido en matcher_state
- matcher/runner: loop shadow(->notifications_shadow)/full(->notifications),
  idempotente por dedupe+checkpoint
- matcher/compare: comparador de shadow (shadowOnly=spam, realOnly=faltantes,
  contentMismatches) — el gate antes del cutover
- index: arranca el matcher; fake-repo ampliado (upsert, sort, $gt/$lt)
- docs/env/README actualizados

73 tests en verde, typecheck y build OK.
2026-07-13 18:07:06 +02:00
..
compare.ts Fase 1b: cableado del matcher (ingesta polling, runner shadow/full, comparador) 2026-07-13 18:07:06 +02:00
content.ts Fase 1b: nucleo del matcher geoespacial (caracterizado + testeado) 2026-07-13 17:58:43 +02:00
context.ts Fase 1b: cableado del matcher (ingesta polling, runner shadow/full, comparador) 2026-07-13 18:07:06 +02:00
geo.ts Fase 1b: nucleo del matcher geoespacial (caracterizado + testeado) 2026-07-13 17:58:43 +02:00
ingest.ts Fase 1b: cableado del matcher (ingesta polling, runner shadow/full, comparador) 2026-07-13 18:07:06 +02:00
matcher.ts Fase 1b: nucleo del matcher geoespacial (caracterizado + testeado) 2026-07-13 17:58:43 +02:00
runner.ts Fase 1b: cableado del matcher (ingesta polling, runner shadow/full, comparador) 2026-07-13 18:07:06 +02:00
seal.ts Fase 1b: nucleo del matcher geoespacial (caracterizado + testeado) 2026-07-13 17:58:43 +02:00
types.ts Fase 1b: nucleo del matcher geoespacial (caracterizado + testeado) 2026-07-13 17:58:43 +02:00