Skip to content

bidlint v0.3.0

Choose a tag to compare

@github-actions github-actions released this 20 Aug 03:27
2df5b7b

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.