Security and limits#
Fail-soft is not silent success#
An optional backend may be allowed to fail without aborting a heterogeneous
build, but the failure remains visible through logging and structured
backend_reports. Use strict policy when a missing result must invalidate the
run.
Network boundaries#
URL downloading is subject to scheme/redirect/SSRF/size controls. Network source
permission in RuntimePolicy is explicit. Model/resource downloads are a
separate capability decision.
Model-backed readiness#
installed=True is not enough for systems such as Whisper/EasyOCR. A model
may be absent and first use may download it. The readiness registry reports
ready=None when it cannot prove local asset presence without side effects.
User code#
Custom extractors, factories, ASR backends, downloader handlers and retrieval scorers are executable Python supplied by the caller. Treat configuration that contains callables as code, not as untrusted data to deserialize automatically.
Resource exhaustion#
Keep existing archive/file/download limits enabled. A custom backend also needs its own model/input/time/memory bounds; the generic backend runner cannot infer safe limits for arbitrary third-party engines.
Levenshtein limits#
The pure-Python Levenshtein fallback uses memory-bounded Wagner-Fischer dynamic programming but still has quadratic time in the input lengths. Use bounded input sizes for untrusted very-long strings. The optional native backends improve speed; they do not turn edit distance into constant-cost validation.