# F6 per-param allow-list — documented exemptions for the broadened
# ``check_no_test_only_kwargs`` rule. Each entry is qualified as
# ``module.path::function_name::param_name`` (one per line). Net-new
# entries here are expected to be RARE and to carry an immediately
# preceding ``#`` comment explaining the rationale that survived
# code-review pushback.
#
# The two broad categories of legitimate entry:
#
# 1. **Public free function with an actual production caller** that
#    passes a non-default value — i.e. the parameter is genuinely a
#    composition seam, not a test reach-in. Operators or use-cases
#    swap implementations through the kwarg in real code paths.
#
# 2. **Defensive-degradation seam on a private helper**, where the
#    None-default branch is the production-default behaviour
#    (graceful fallback against partial-install / unwired backends)
#    and the not-None branch is the override hook. The kwarg in this
#    case is the documented swap point between an outer orchestrator
#    and an inner wiring layer; refactoring to a Deps class would push
#    the same shape onto the orchestrator without removing the smell.
#    These entries are the most likely to receive review pushback —
#    treat the # comment as a forcing-function for the rationale.

# Phase-2 feature flag — Phase 1 (None) keeps the snippet-only behaviour;
# Phase 2 (loader) routes through the SummaryLoader for L0/L1 tier
# promotion. Production callers supply a real SummaryLoader in the
# Phase 2 path; the seam is the documented Phase 1→2 switch, not a
# test-only reach-in.
kairix.core.search.budget::apply_budget::summary_loader

# Documented composition seam for the wikilinks resolver — public
# operator surface; production CLI passes neo4j_loader=<production>
# when the graph backend is online and None to drive the
# bootstrap-loader fallback path.
kairix.knowledge.wikilinks.resolver::get_entities::neo4j_loader
kairix.knowledge.wikilinks.resolver::get_entities::bootstrap_loader

# Operator-config-driven credential resolution — None resolves the
# default chain; non-None overrides for the multi-tenant / per-call
# credential injection use case documented in
# docs/architecture/provider-plugin-architecture.md.
kairix.platform.llm.embed_provider::get_embed_provider::creds_resolver

# Probe / warm orchestrator override seams — the runner caller has the
# option to pass a custom pipeline builder for benchmarking variant
# pipelines without forking the public surface.
kairix.platform.warm.runner::run_warm::pipeline_builder
kairix.quality.eval.monitor::run_monitor::suite_loader
kairix.quality.probe.runner::run_probe_search::suite_loader
kairix.quality.probe.burst::run_probe_burst::suite_loader

# Public free-function override seam in the prep use case — production
# callers may swap chat_backend_factory for provider-specific backend
# selection; today's default resolves the configured provider via the
# normal plugin registry path.
kairix.use_cases.prep::default_chat_callable::chat_backend_factory

# Defensive-degradation seams on private helpers — both branches degrade
# gracefully to operator-visible warnings when the corpus-wiring /
# search-factory subpackages are unwired in a partial install, returning
# a Null fallback so ``kairix eval`` still completes. Refactoring to a
# Deps class would push the same loader-shape onto the orchestrator
# without removing the smell. Long-term: hoist these imports to module
# scope once the alpha-rollout partial-install scenarios stabilise; for
# now the kwarg is the documented composition swap point between
# ``_resolve_deps`` and the wiring layer. See:
#   - kairix/use_cases/eval_suite.py:571 (_resolve_production_fact_extractor)
#   - kairix/use_cases/eval_suite.py:287 (_resolve_search_pipeline)
kairix.use_cases.eval_suite::_resolve_production_fact_extractor::factory_loader
kairix.use_cases.eval_suite::_resolve_search_pipeline::builder_loader
