Initial commit: Conflict Checker

Cross-discipline design-contradiction checker for construction drawing
sets. Standalone tool broken out from Iron_Bid; a pipeline stage may
later fold back into Iron_Bid.

Pipeline: PDF->images -> per-sheet assertion extraction -> deterministic
clustering by location -> per-cluster reasoning -> report.
Includes CLI (cli/run_check.py) and web UI (backend/main.py).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
woogiandClaude Opus 4.8 committed 2026-07-03 00:22:02 +00:00
commit 1d248a8808
262 files changed
+8209

No files matched your search

@@ -0,0 +1 @@
[{"assertion_id": "M01.01#10", "attribute": "mca", "original_value": "24", "source_text": "MCA 24", "normalized_value": "24", "normalized_unit": "A", "normalized_attribute": null, "normalization_notes": "MCA stands for Minimum Circuit Ampacity, measured in Amperes (A).", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M01.01#11", "attribute": "mocp", "original_value": "25", "source_text": "MOCP 25", "normalized_value": "25", "normalized_unit": "A", "normalized_attribute": null, "normalization_notes": "MOCP stands for Maximum Overcurrent Protection, measured in Amperes (A).", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M01.01#12", "attribute": "efficiency_rating", "original_value": "11.2 EER - 15.5 IEER", "source_text": "11.2 EER - 15.5 IEER", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Value contains multiple distinct ratings (EER and IEER) that cannot be combined into a single normalized value.", "source_text_preserved": true, "normalization_confidence": "low"}, {"assertion_id": "M01.01#13", "attribute": "filter_rating", "original_value": "8 MERV", "source_text": "REMARKS: 1. PROVIDE 8\" MERV FILTERS", "normalized_value": "8", "normalized_unit": "MERV", "normalized_attribute": null, "normalization_notes": "Normalized based on the extracted value '8 MERV'. The source text '8\"' may indicate filter thickness, but the extracted value specifies the MERV rating.", "source_text_preserved": true, "normalization_confidence": "medium"}, {"assertion_id": "M01.01#14", "attribute": "refrigerant_type", "original_value": "R-454B", "source_text": "6. REFRIGERANT SHALL BE R-454B.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Original value is a standard identifier.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M01.01#15", "attribute": "roof_curb_height", "original_value": "14", "source_text": "9. PROVIDE 14\" HIGH INSULATED ROOF CURB.", "normalized_value": "14", "normalized_unit": "in", "normalized_attribute": null, "normalization_notes": "Unit 'inches' inferred from the double prime symbol (\") in the source text.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M01.01#16", "attribute": "accessory", "original_value": "115V single phase powered convenience power outlet", "source_text": "5. PROVIDE 115V SINGLE PHASE POWERED CONVENIENCE POWER OUTLET ON UNIT.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Descriptive text.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M01.01#17", "attribute": "accessory", "original_value": "Low leak enthalpy economizer", "source_text": "10. FURNISH WITH LOW LEAK ENTHALPY ECONOMIZER PER IECC REQUIREMENTS.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Descriptive text.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M02.02#0", "attribute": "scale", "original_value": "1/4\" = 1'-0\"", "source_text": "1 MECHANICAL ROOF PLAN 1/4\" = 1'-0\"", "normalized_value": "1:48", "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Converted architectural scale to a unitless ratio.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M02.02#1", "attribute": "duct_size", "original_value": "8\"RD", "source_text": "VTR 8\"RD", "normalized_value": "8", "normalized_unit": "in", "normalized_attribute": "diameter", "normalization_notes": "RD is interpreted as Round Duct, so the dimension is a diameter. Unit from double prime (\").", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M02.02#2", "attribute": "duct_size", "original_value": "10\"RD", "source_text": "10\"RD VTR", "normalized_value": "10", "normalized_unit": "in", "normalized_attribute": "diameter", "normalization_notes": "RD is interpreted as Round Duct, so the dimension is a diameter. Unit from double prime (\").", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M02.02#3", "attribute": "keynote_assertion", "original_value": "Terminate exhaust duct to manufacturer provided vent cap.", "source_text": "TERMINATE EXHAUST DUCT TO MANUFACTURER PROVIDED VENT CAP.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Descriptive text.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "M02.02#4", "attribute": "keynote_assertion", "original_value": "Supply / return duct to transition in vertical to RTU curb opening.", "source_text": "SUPPLY / RETURN DUCT TO TRANSITION IN VERTICAL TO RTU CURB OPENING.", "normalized_value": null, "normalized_unit": null, "normalizedLine truncated