Skip to content

bidlint v0.7.0

Choose a tag to compare

@github-actions github-actions released this 20 Aug 17:29
15fbdc0

bidlint v0.7.0

Released: 2026-08-20

v0.7.0 moves bidlint from single vendor-document comparison toward deterministic real-world bid intake. A supplier submission can now be treated as a multi-document evidence package while preserving the existing rule that uncertainty, source disagreement and hidden precedence must never become automatic technical decisions.

Highlights

Multi-document vendor packages

A vendor input may be a directory containing supported direct-child PDF, XLSX and explicitly scoped IFC evidence:

Supplier-A/
├── compliance-schedule.xlsx
├── pump-datasheet.pdf
├── technical-offer.pdf
└── model.ifc

The package enters the same VendorFact and deterministic compliance pipeline used by direct vendor files.

Equivalent facts across documents collapse deterministically, including compatible engineering-unit conversions. Conflicting evidence is preserved as an explicit provenance-rich REVIEW condition instead of choosing a source silently.

Explicit document classification

Every direct-child package file is assigned a visible document class:

  • specification
  • datasheet
  • compliance-schedule
  • technical-offer
  • ignored

Classification uses deterministic filename rules plus exact programmatic overrides. Copied employer specifications and ignored/commercial material do not become vendor technical evidence.

Unsupported file types remain visible as ignored package documents rather than being parsed or guessed.

Explicit evidence priority

Packages may opt into an ordered evidence-priority policy across technical document classes.

package = parse_vendor_package(
    "Supplier-A",
    evidence_priority=(
        "compliance-schedule",
        "technical-offer",
        "datasheet",
    ),
)

No priority exists by default. Without an explicit policy, conflicting facts continue to produce REVIEW.

Priority only narrows a parameter group to the highest available configured class. It never breaks a disagreement between two documents in the same highest-priority class; those conflicts still require review.

Project terminology aliases participate in consolidation

The existing project-specific alias mapping now applies before package duplicate/conflict consolidation as well as during requirement matching.

{
  "supplier rated output": "motor power"
}

This allows vendor-specific nomenclature in different package documents to resolve to the same canonical parameter before evidence consistency is evaluated.

Aliases do not introduce fuzzy grouping, hidden source precedence or additional confidence.

Mixed-package ranking selector scoping

rank can mix direct files and package directories while using IFC/XLSX selector options.

Selector validation looks inside package directories only at evidence-classified files. IFC selectors are applied only to direct IFC inputs and packages containing evidence IFC files; --xlsx-sheet is applied only to direct XLSX inputs and packages containing evidence XLSX files.

This prevents a global selector from invalidating unrelated PDF-only suppliers in the same ranking run.

Package-level evidence audit

VendorPackage.evidence_audit records how every parsed technical fact was treated during consolidation.

Each audit entry preserves:

  • canonical parameter
  • original VendorFact and provenance
  • document class
  • disposition: selected, equivalent-duplicate, conflict or lower-priority
  • explicit priority rank when applicable

VendorPackage.to_audit_dict() exposes a JSON-ready package audit containing document classifications, ignored documents, priority policy, raw evidence dispositions, consolidated facts and conflict facts.

The evaluator contract remains unchanged; the audit surface adds traceability rather than a second decision engine.

Sanitized regression packages

The release includes generated multi-document regression fixtures for five engineering families:

  • pump: alias-aware equivalent evidence across PDF/XLSX documents
  • motor: explicit compliance-schedule priority over conflicting lower-priority evidence
  • valve: unresolved disagreement inside the same highest-priority class
  • HVAC: aliasing, engineering-unit conversion, copied-specification exclusion and ignored commercial material
  • electrical: equivalent evidence alongside an unprioritized technical conflict

Fixtures are synthetic and vendor-neutral. Tests generate temporary PDF and formula-free XLSX files and run the normal parsers rather than replacing extraction with mocks.

Existing safety boundaries remain in force

v0.7.0 does not weaken earlier input constraints:

  • XLSX formulas, VBA/macros, external relationships, hidden evidence worksheets, merged cells and ambiguous layouts remain rejected
  • IFC evidence still requires explicit element scope through the existing IFC selection rules
  • unsupported package files are not interpreted as technical evidence
  • copied specification documents are not allowed to satisfy vendor requirements
  • file type alone never establishes authority
  • source disagreement never becomes an automatic PASS or DEVIATION

Validation

The v0.7 branch is covered by GitHub Actions on Python 3.11, 3.12 and 3.13 with Ruff and pytest, including regression coverage for:

  • deterministic package discovery
  • document classification and overrides
  • unit-aware equivalent evidence consolidation
  • conflict-to-REVIEW behavior
  • explicit evidence-priority policy and same-class tie handling
  • project alias threading through CLI package intake
  • mixed PDF/XLSX/IFC package selector scoping
  • package-level evidence audit dispositions and provenance
  • generated pump, motor, valve, HVAC and electrical multi-document packages

Deliberate limits

This release keeps package intake intentionally conservative:

  • only direct-child package documents are considered
  • document-class overrides are currently a programmatic surface rather than a package manifest or dedicated CLI policy file
  • evidence priority is explicit and opt-in; no hidden default hierarchy is inferred
  • package intake does not add commercial or price scoring
  • the deterministic requirement matcher and compliance evaluator remain authoritative

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