bidlint v0.3.0
bidlint v0.3.0
Released: 2026-08-20
v0.3.0 adds a provider-neutral boundary for optional AI-assisted or external structured extraction while keeping the deterministic compliance engine authoritative.
Highlights
Replaceable extraction providers
Optional integrations can implement the StructuredExtractor protocol and return structured requirement or vendor-fact candidates. The core package does not depend on a specific model vendor, SDK, API key or network service.
Evidence before provider confidence
Every provider candidate must include confidence plus source evidence. Before a candidate can enter the deterministic core, bidlint verifies:
- confidence is finite and within
[0, 1] - confidence meets the configured minimum threshold
- the declared source page exists
- the evidence snippet actually occurs on that PDF page after whitespace normalization
- the candidate type matches specification/vendor extraction
- numeric requirement fields are structurally consistent
Rejected candidates remain outside compare() and are returned with explicit rejection reasons.
Deterministic evaluation remains authoritative
Provider confidence is extraction confidence only. It does not become the compliance confidence and it cannot emit PASS, DEVIATION, MISSING or REVIEW.
Validated candidates are converted to the existing Requirement and VendorFact models. The existing terminology matcher, engineering-unit conversion and deterministic evaluator then produce the final findings.
Provider contract
A provider implements:
class MyExtractor:
name = "my-provider"
def extract(self, document: Path, kind: ExtractionKind) -> ExtractionBatch:
...Use extract_with_provider() to invoke and validate an adapter, or validate_extraction() when a structured batch is already available.
See docs/AI_EXTRACTION.md for the full contract.
No new runtime AI dependency
The standard installation still requires no LLM SDK and makes no automatic external AI calls. The deterministic PDF parser and all existing CLI workflows continue to work unchanged.
Safety boundary
v0.3.0 deliberately does not:
- bundle a model/provider implementation
- allow model output to set compliance status
- treat high provider confidence as proof of engineering correctness
- introduce model-defined comparison operators or unit rules
- solve OCR/image interpretation automatically
This release establishes an auditable integration boundary for future optional providers without weakening the deterministic decision model.