bidlint v0.2.1
bidlint v0.2.1
Released: 2026-08-20
v0.2.1 hardens bidlint for more realistic engineering datasheets and larger multi-vendor review workflows while keeping the deterministic decision model conservative.
Highlights
Layout-aware vendor PDF parsing
- preserves horizontal PDF layout for vendor datasheets
- reconstructs explicit parameter/unit/required/offered tables
- reads the offered column without confusing it with requirement/reference columns
- supports two independent numeric parameter/value pairs on one visual row
- supports a final offered value wrapped to the next numeric line
- supports parameter labels continued by an explicit trailing hyphen
- skips ambiguous multi-column rows rather than guessing
Broader deterministic unit conversion
The registry now covers:
- power: W / kW / MW
- voltage: mV / V / kV
- current: mA / A / kA
- frequency: Hz / kHz / MHz
- apparent power: VA / kVA / MVA
- pressure: Pa / kPa / MPa / mbar / bar / psi
- length: mm / cm / m / km / in / ft
- mass: g / kg / t
- force: N / kN
- flow: L/s / L/min / m³/s / m³/h
- temperature: °C / °F / K
Dimension safety remains explicit. Real power is not treated as apparent power, voltage is not current, gauge/absolute pressure suffixes are not collapsed, and frequency is not converted into rotational speed.
Sanitized datasheet regression fixtures
Tests now render vendor-neutral motor, pump and valve layouts into temporary PDFs and verify:
- multi-page source provenance
- revision/metadata noise
- explicit technical tables
- side-by-side fields
- wrapped table continuations
No third-party vendor PDF or confidential project data is embedded in these fixtures.
Batch comparison ergonomics
- multi-vendor Markdown technical bid tabulation export
rank --top Nfor compact terminal display- full JSON / Markdown / HTML / CSV exports remain complete even when terminal output is limited
Safety boundaries
v0.2.1 deliberately does not claim arbitrary merged-cell reconstruction. Coordinate-aligned sparse cells and advanced ambiguous multi-column layouts remain scheduled for v0.2.2 so they can be implemented without positional guessing.
OCR also remains outside the deterministic parser.
Validation
The release branch must pass Ruff and pytest on Python 3.11, 3.12 and 3.13 before merge.