Skip to content

bidlint v0.6.0

Choose a tag to compare

@github-actions github-actions released this 20 Aug 12:45
a8b76bc

bidlint v0.6.0

Released: 2026-08-20

v0.6.0 adds deterministic XLSX vendor-input support to the existing technical-compliance engine. Explicit spreadsheet offer tables can now enter the same VendorFact model used by PDF and IFC evidence without adding a spreadsheet runtime dependency or weakening the evidence-first boundary.

Highlights

XLSX vendor inputs

A formula-free vendor offer workbook can now be compared directly with a specification:

bidlint compare specification.pdf supplier-offer.xlsx

The selected worksheet must expose one explicit parameter column and one explicit offered-value column. Unit and section columns are optional.

For workbooks with more than one visible worksheet, select the evidence sheet explicitly:

bidlint compare specification.pdf supplier-offer.xlsx \
  --xlsx-sheet "Technical Offer"

The same XLSX adapter is available through extract and rank.

bidlint extract supplier-offer.xlsx --kind vendor \
  --xlsx-sheet "Technical Offer"

Mixed vendor ranking can combine supported PDF, XLSX and explicitly scoped IFC inputs:

bidlint rank specification.pdf vendor-a.pdf vendor-b.xlsx vendor-c.ifc \
  --xlsx-sheet "Technical Offer" \
  --ifc-guid 1AbCdEfGhIjKlMnOpQrStu

Evidence provenance

Every accepted spreadsheet row becomes a normal VendorFact and preserves:

  • workbook filename
  • worksheet row number
  • selected worksheet name
  • optional row section/category/system context

A source section can therefore identify evidence such as:

XLSX:Technical Offer/Electrical

After extraction, the existing terminology matcher, engineering-unit conversion and deterministic compliance evaluator remain authoritative.

Spreadsheet safety boundary

The workbook is treated as evidence, not executable logic.

v0.6.0 deliberately rejects structures that would require calculation, hidden state or positional guessing:

  • formulas
  • VBA/macros
  • external workbook relationships
  • hidden evidence worksheets
  • merged cells in the selected worksheet
  • multiple visible worksheets without explicit --xlsx-sheet selection
  • duplicate or ambiguous parameter/offered headers
  • incomplete evidence rows containing only a parameter or only an offered value
  • conflicting units between the offered cell and an explicit unit column

Boolean cells remain qualitative TRUE / FALSE evidence rather than being converted into numeric 1 / 0 compliance values.

The parser does not recalculate workbooks, follow links, unhide worksheets or reconstruct merged spreadsheet layouts.

Dependency model

XLSX input is parsed directly from OOXML using the Python standard library.

The standard installation remains:

pip install bidlint

No Excel, LibreOffice, openpyxl or other spreadsheet runtime is required for XLSX input or existing XLSX technical-bid output.

Optional integrations remain separate:

pip install 'bidlint[ifc]'
pip install 'bidlint[mcp]'

Existing deterministic core remains authoritative

Specification PDF ──> Requirement ───────────────────────────────┐
                                                                │
Vendor PDF ─────────> VendorFact ────────────────────────────────┤
Vendor XLSX ────────> explicit OOXML adapter ─────> VendorFact ─┤
Selected IFC ───────> property adapter ───────────> VendorFact ─┤
                                                                ▼
                                                     terminology matcher
                                                                │
                                                                ▼
                                                      unit-aware evaluator
                                                                │
                                                                ▼
                                           PASS / DEVIATION / MISSING / REVIEW

XLSX support adds a new evidence adapter, not a new decision engine.

Validation

The stable release is covered by GitHub Actions on Python 3.11, 3.12 and 3.13, including regression coverage for:

  • explicit header discovery
  • visible worksheet selection
  • row and section provenance
  • numeric and qualitative values
  • boolean preservation
  • explicit engineering units
  • formula rejection
  • macro and external-link rejection
  • merged-cell rejection
  • ambiguous worksheet/header rejection
  • CLI extract, compare and rank dispatch
  • coexistence with existing PDF and IFC workflows

Deliberate limits

This release does not:

  • infer spreadsheet formulas
  • execute spreadsheet code
  • follow external workbook links
  • guess hidden evidence
  • reconstruct merged worksheets
  • choose among multiple visible evidence sheets without an explicit selection
  • replace the existing deterministic matcher or evaluator
  • add commercial or price scoring to bidlint

v0.6.0 keeps the project rule unchanged: evidence before confidence.