Discovery
NOTE
Статус: Live (HEAD
5e4ce54, 2026-05-06). Сейчас содержит единственный sub-BC —discovery/visibility, который применяет visibility-policies в proposal pipeline. Полный discovery flow (search/match/enrich) распределён по другим BC.
discovery — зонтичный namespace для механик «обнаружения» подходящих предложений в proposal pipeline. На 2026-05-06 в нём один sub-BC — visibility, который filter’ит candidate’ов по customer/group rules (P4a + P4b).
Назначение
Применить data-visibility policy (ADR-0012 + ADR-0040) перед формированием proposal’а: какие offer’ы вообще видны клиенту, какие seller’ы заблокированы, какой preferred-seller bias.
Статус документа
- Тип знания:
current service(узкий namespace) - Статус реализации:
discovery/visibility/—Enginealways-on, admin HTTP, health, outbox publisher. - Текущее место кода:
backend/internal/core/discovery/visibility/{api,app,domain,infra}/. - Что читать дальше:
../visibility/(concern docs),../../20-architecture/adr/0012-data-visibility-policy.md,../../20-architecture/adr/0040-visibility-policies.md.
Область действия
Входит:
discovery/visibilityBC:VisibilityRuleaggregate +Engine+VisibilityFilter(Layer 1.1.5) +ObservationVisibilityFilter(Layer 1.3.5, P4b).- Admin HTTP
/api/v1/admin/visibility/*(rules CRUD). - Outbox publisher для policy change events.
Не входит:
- Search через ES (это
searchBC). - Matching offer↔canonical (это
matchingBC). - Enrichment job runner (это
enrichmenttarget boundary).
Публичный контракт
Внутренний Go API
Engine.Filter(ctx, subject, candidates)— применить policy к candidate’ам proposal’а.RuleRepo.UpsertVisibilityRule(...)/.List(...)— admin CRUD.
HTTP
/api/v1/admin/visibility/*— admin CRUD rules.
Внутренняя архитектура
discovery/visibility/:
domain/—VisibilityRuleaggregate, scope/subject/specificity.app/—Engine(cache + invalidation).infra/pg/— Repo.infra/http/— admin handlers.infra/outbox/— events publisher.fx.go— Module composition.
Зависимости
- PostgreSQL —
visibility_rule. - outbox — policy change events.
- search/proposal — потребитель (вызывает
Engine.Filter).
Хранилище
visibility_rule— (scope, subject_kind, subject_id, target_kind, effect=allow|deny, specificity).
Тестирование
- Unit:
go test ./internal/core/discovery/visibility/... - Integration:
-tags=integration+integration_test.goend-to-end через httptest.
Наблюдаемость
- Metrics:
visibility_evaluations_total{target_kind},visibility_evaluation_duration_seconds,visibility_cache_hits_total,visibility_filtered_total{effect}. - Phase logs:
visibility.compile.phase.
Открытые вопросы / TODO
- Поглотит ли namespace
discoveryдругие sub-BC (search-side discovery, enrichment) — пока только visibility.
Связанные документы
- ADR:
0012,0040. - Concern doc:
../visibility/. - Memory:
tracium_p4a_execution.md,tracium_p4b_execution.md.