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": "E01.02#9", "attribute": "mounting_height_AFF", "value": "5'-5\"", "source_text": "TYPE: L-6, DESCRIPTION: 16\" PENDANT, MOUNTING: PENDANT, NOTES: PENDANT 5'-5\" AFF", "normalized_value": "65", "normalized_unit": "inches", "normalized_attribute": null, "normalization_notes": null, "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E01.02#10", "attribute": "schedule_entry", "value": "Type X is a LED exit sign with Nickel Cadmium battery and self diagnostics.", "source_text": "TYPE: X, DESCRIPTION: LED EXIT SIGN WITH NICKEL CADMIUM BATTERY AND SELF DIAGNOSTICS", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Descriptive text, no normalization applied.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E01.02#11", "attribute": "note", "value": "Emergency egress operation in fixtures shall provide minimum 400 lumens for minimum 90 minutes.", "source_text": "1. EMERGENCY EGRESS OPERATION IN FIXTURES SHALL PROVIDE MINIMUM 400 LUMENS FOR MINIMUM 90 MINUTES", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Note contains multiple performance requirements.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E01.02#12", "attribute": "connected_load", "value": "5", "source_text": "DESCRIPTION: WATER HEATING, CONNECTED (KVA): 5, DEMAND (KVA): 5", "normalized_value": "5", "normalized_unit": "KVA", "normalized_attribute": null, "normalization_notes": null, "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E01.02#13", "attribute": "connected_load", "value": "21", "source_text": "DESCRIPTION: HVAC HEATING *, CONNECTED (KVA): 21, DEMAND (KVA): 21", "normalized_value": "21", "normalized_unit": "KVA", "normalized_attribute": null, "normalization_notes": null, "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E01.02#14", "attribute": "connected_load", "value": "<17", "source_text": "DESCRIPTION: HVAC COOLING *, CONNECTED (KVA): <17, DEMAND (KVA): <17", "normalized_value": "<17", "normalized_unit": "KVA", "normalized_attribute": null, "normalization_notes": "Operator preserved from original value.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E01.02#15", "attribute": "service_size", "value": "100", "source_text": "RECOMMENDED SERVICE SIZE AT 480V 3P 4W = 100 AMPS", "normalized_value": "100", "normalized_unit": "AMPS", "normalized_attribute": null, "normalization_notes": null, "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E01.02#16", "attribute": "equipment_location", "value": "LOUNGE", "source_text": "PANEL NAME H, LOCATION LOUNGE", "normalized_value": "LOUNGE", "normalized_unit": null, "normalized_attribute": "room_name", "normalization_notes": "Value represents a room name.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E01.02#17", "attribute": "mounting", "value": "SURFACE", "source_text": "MOUNTING SURFACE", "normalized_value": "SURFACE", "normalized_unit": null, "normalized_attribute": null, "normalization_notes": null, "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E01.02#18", "attribute": "equipment_location", "value": "LOUNGE", "source_text": "PANEL NAME L, LOCATION LOUNGE", "normalized_value": "LOUNGE", "normalized_unit": null, "normalized_attribute": "room_name", "normalization_notes": "Value represents a room name.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E02.01#0", "attribute": "general_note", "value": "Coordinate final receptacle/data locations with architect/owner prior to rough-in.", "source_text": "1. COORDINATE FINAL RECEPTACLE/DATA LOCATIONS WITH ARCHITECT/OWNER PRIOR TO ROUGH-IN.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Descriptive text, no normalization applied.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E02.01#1", "attribute": "general_note", "value": "Coordinate final floorbox locations with architect/owner prior to rough-in.", "source_text": "2. COORDINATE FINAL FLOORBOX LOCATIONS WITH ARCHITECT/OWNER PRIOR TO ROUGH-IN.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "Descriptive text, no normalization applied.", "source_text_preserved": true, "normalization_confidence": "high"}, {"assertion_id": "E02.01#2", "attribute": "general_note", "value": "Refer to architectural drawings for dimensional locations of all outlets.", "source_text": "3. REFER TO ARCHITECTURAL DRAWINGS FOR DIMENSIONAL LOCATIONS OF ALL OUTLETS.", "normalized_value": null, "normalized_unit": null, "normalized_attribute": null, "normalization_notes": "DescriptivLine truncated