draftwright 0.4.27__tar.gz → 0.4.29__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {draftwright-0.4.27 → draftwright-0.4.29}/CHANGELOG.md +268 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/PKG-INFO +13 -3
- {draftwright-0.4.27 → draftwright-0.4.29}/README.md +10 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/docs/reference/recogniser-capabilities.md +26 -3
- {draftwright-0.4.27 → draftwright-0.4.29}/docs/reference/sheet.md +59 -1
- {draftwright-0.4.27 → draftwright-0.4.29}/pyproject.toml +3 -3
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/_core.py +298 -30
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/analysis.py +76 -13
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/annotations/_common.py +127 -36
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/annotations/balloons.py +5 -4
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/annotations/from_model.py +453 -167
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/annotations/holes.py +57 -38
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/annotations/leaders.py +18 -11
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/annotations/orchestrator.py +49 -18
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/annotations/sections.py +22 -10
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/builder.py +243 -102
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/cli.py +73 -2
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/compose.py +166 -44
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/drawing.py +179 -32
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/evaluation/step_analysis.py +13 -3
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/export.py +11 -3
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/feature_identity.py +17 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/inspection_contract.py +1 -1
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/__init__.py +6 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/_registry.py +24 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/circular_blind_step_coverage.py +3 -25
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/coverage.py +111 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/evidence.py +19 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/hole_coverage.py +38 -6
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/pmi_coverage.py +91 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/quality.py +32 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/requirements.py +19 -3
- draftwright-0.4.29/src/draftwright/linting/section_recess_coverage.py +402 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/structural.py +204 -8
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/model/__init__.py +8 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/model/compiled.py +194 -46
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/model/declare.py +17 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/model/detect.py +33 -2
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/model/ir.py +130 -8
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/model/planner.py +80 -2
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/pmi.py +29 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/recognition_ownership.py +76 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/repair.py +9 -4
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/section_recess_contract.py +265 -1
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/sheet.py +58 -9
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/sheet_emit.py +206 -23
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/README.md +6 -1
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/corpus-hole-patterns-v1.json +4 -4
- draftwright-0.4.29/tests/fixtures/evaluation/pattern-topology-a.step +1192 -0
- draftwright-0.4.29/tests/fixtures/evaluation/pattern-topology-b.step +1192 -0
- draftwright-0.4.29/tests/fixtures/issue_1595_whistle_key_frame.step +19649 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/refactor_golden/bracket_section.json +45 -14
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/refactor_golden/centered_rebate.json +39 -8
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/refactor_golden/chamfered.json +33 -2
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/refactor_golden/filleted.json +33 -2
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/refactor_golden/flange_dense.json +121 -71
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/refactor_golden/grid_plate.json +35 -4
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/refactor_golden/grooved_shaft.json +39 -8
- draftwright-0.4.29/tests/refactor_golden/hex_bar.json +170 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/refactor_golden/holed_slot.json +39 -8
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/refactor_golden/pocketed.json +29 -22
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/refactor_golden/prismatic_ladder.json +29 -22
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/refactor_golden/scattered_plate.json +39 -8
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/refactor_golden/side_drilled.json +42 -11
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/refactor_golden/turned_stepped.json +39 -8
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_add_dimension.py +30 -1
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_adr0018_arrangement_gate.py +13 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_adr0018_view_selection.py +72 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_audit_differential.py +1 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_compiled_plan_boundary.py +14 -3
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_declare.py +7 -1
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_drawing_encapsulation.py +6 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_export_dxf_zoom.py +44 -1
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_export_reproducible.py +39 -18
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_flat_stock_identity.py +14 -9
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_inspection_contract.py +1 -1
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1058_wheel_profile.py +12 -3
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1086_declared_gears.py +5 -5
- draftwright-0.4.29/tests/test_issue_1126_requesting_less_never_scores_better.py +99 -0
- draftwright-0.4.29/tests/test_issue_1132_turned_profile_span_is_reported.py +174 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1143_hole_completeness.py +5 -1
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1146_scale_completeness.py +6 -2
- draftwright-0.4.29/tests/test_issue_1157_no_implicit_general_tolerance.py +140 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1187_unroutable_leaders.py +0 -2
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1215_no_approved_tolerance_is_dropped.py +8 -1
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1217_claimed_representations.py +27 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1217_the_facility_is_shared.py +16 -8
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1246_prismatic_pocket_disposition.py +9 -9
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1296_cylindrical_diameter_pmi.py +11 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1298_manufacturing_requirements.py +5 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1299_page_escalation.py +21 -6
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1308_machined_leader_analytics.py +14 -5
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1333_bounded_ink_repair.py +15 -7
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1338_scale_before_page_escalation.py +7 -7
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1349_precision_display.py +103 -12
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1357_framed_activation.py +6 -4
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1357_plural_turned_profiles.py +12 -8
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1370_hole_pattern_completeness_evidence.py +1 -1
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1396_layout_advisories.py +32 -1
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1438_policy_dispositions.py +1 -1
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1460_step_inspection.py +39 -2
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1466_semantic_sides.py +14 -16
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1536_title_overflow.py +26 -8
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1543_schedule_requirements.py +2 -2
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1544_frame_document_canary.py +87 -27
- draftwright-0.4.29/tests/test_issue_1555_turned_recognition_format_invariance.py +84 -0
- draftwright-0.4.29/tests/test_issue_1560_envelope_axes.py +69 -0
- draftwright-0.4.29/tests/test_issue_1563_sheet_pmi_reconciliation.py +185 -0
- draftwright-0.4.29/tests/test_issue_1585_title_block_date.py +183 -0
- draftwright-0.4.29/tests/test_issue_1593_title_block_keepout.py +145 -0
- draftwright-0.4.29/tests/test_issue_1596_bolt_circle_corroboration.py +452 -0
- draftwright-0.4.29/tests/test_issue_1598_hex_pockets.py +388 -0
- draftwright-0.4.29/tests/test_issue_1599_duplicate_slot_widths.py +41 -0
- draftwright-0.4.29/tests/test_issue_1601_flat_precision.py +47 -0
- draftwright-0.4.29/tests/test_issue_1603_cli_output_paths.py +122 -0
- draftwright-0.4.29/tests/test_issue_1604_internal_section.py +80 -0
- draftwright-0.4.29/tests/test_issue_1612_frame_sergio_coverage.py +32 -0
- draftwright-0.4.29/tests/test_issue_1612_sheet_margins.py +210 -0
- draftwright-0.4.29/tests/test_issue_1613_circular_channel.py +638 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_740_leader_assignment.py +19 -5
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_909_sloped_profile.py +6 -1
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_label_provenance.py +0 -7
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_layout_cleanliness.py +11 -1
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_lint_structural.py +284 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_location_vocabulary.py +38 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_make_drawing.py +95 -34
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_parameter_id.py +27 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_pmi.py +13 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_private_test_attr_reads.py +2 -2
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_recogniser_capabilities.py +1 -1
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_refactor_golden.py +14 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_render_seam.py +1 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_sheet_emit.py +146 -10
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_sheet_identity_invariant.py +5 -0
- draftwright-0.4.27/src/draftwright/linting/section_recess_coverage.py +0 -102
- draftwright-0.4.27/tests/fixtures/evaluation/pattern-topology-a.step +0 -1090
- draftwright-0.4.27/tests/fixtures/evaluation/pattern-topology-b.step +0 -1090
- draftwright-0.4.27/tests/refactor_golden/hex_bar.json +0 -139
- {draftwright-0.4.27 → draftwright-0.4.29}/.gitignore +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/LICENSE +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/docs/adr/README.md +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/docs/research/1062-repeating-radial-profile-evidence.md +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/skills/SKILL.md +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/__init__.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/_build_profile.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/_geometry.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/_pmi_part21.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/_warnings.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/angular_geometry.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/annotate.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/annotations/__init__.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/annotations/angular.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/annotations/gears.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/audit.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/blend_contract.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/document.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/document_evidence.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/document_input.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/evaluation/__init__.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/fits.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/fonts/IBMPlexMono-Regular.ttf +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/fonts/IBMPlexSansCondensed-Regular.ttf +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/fonts/LICENSE-IBMPlexMono-OFL.txt +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/fonts/LICENSE-IBMPlexSansCondensed-OFL.txt +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/fonts/__init__.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/inspection.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/intents.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/layout.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/angled_step_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/angular.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/blend_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/chamfer_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/channel_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/fillet_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/flat_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/gear_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/groove_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/ink_overlap.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/issues.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/oriented_slot_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/pad_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/paired_ramp_step_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/passage_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/plate_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/pocket_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/pocket_pattern_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/polygonal_boss_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/polygonal_stock_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/prismatic_pocket_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/profiled_bore_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/rectangular_blind_slot_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/round_bottom_blind_slot_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/schedule_evidence.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/slot_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/suggest.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/through_step_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/linting/turned_step_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/location_contract.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/make_drawing.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/measurement_support.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/model/callout.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/model/pmi_lowering.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/oriented_slot_contract.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/plate_correspondence.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/profile_angles.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/progress.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/projection.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/py.typed +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/recogniser_contract.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/recogniser_policy.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/recogniser_schema.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/recognition/__init__.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/recognition_cache.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/recognition_frame.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/registry.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/reporting.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/score.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/src/draftwright/view_plan.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/_evidence_contract.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/_kernel.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/_layout_sig.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/_mutation_corpus.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/_recogniser_public_contract.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/_section_recess_cases.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/conftest.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/ap242_single_cylinder_diameter.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/ambiguous-open-semicircle.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/blind-hole.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/chamfer-asymmetric.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/chamfer-compound.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/chamfer-overlap.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/chamfer-plain.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/chamfer-planar-x.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/chamfer-planar-y.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/chamfer-planar-z.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/chamfer-topology-a.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/chamfer-topology-b.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/chamfer-turned.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/corpus-chamfers-v1.json +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/corpus-countersinks-v1.json +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/corpus-double-d-bores-v1.json +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/corpus-fillets-v1.json +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/corpus-flats-v1.json +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/corpus-grooves-v1.json +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/corpus-plates-v1.json +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/corpus-pocket-patterns-v1.json +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/corpus-pockets-v1.json +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/corpus-polygonal-bosses-v1.json +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/corpus-polygonal-stock-v1.json +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/corpus-rectangular-pads-v1.json +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/corpus-turned-steps-v1.json +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/corpus-v1.json +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/countersink-deburr.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/countersink-external-cone.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/countersink-mixed-pair.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/countersink-single.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/countersink-topology-a.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/countersink-topology-b.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/double-d-axis-x.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/double-d-axis-y.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/double-d-blind.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/double-d-coaxial-compound.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/double-d-opposed-blind.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/double-d-roll-30.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/double-d-round-bore.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/double-d-single-z.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/double-d-topology-a.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/double-d-topology-b.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/fillet-compound.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/fillet-overlap.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/fillet-plain.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/fillet-planar-x.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/fillet-planar-y.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/fillet-planar-z.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/fillet-repeated.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/fillet-topology-a.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/fillet-topology-b.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/fillet-turned.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/flat-coaxial.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/flat-double-d.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/flat-lone-d.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/flat-nonround.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/flat-slanted-double-d.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/flat-topology-a.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/flat-topology-b.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/groove-compound.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/groove-lone-x.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/groove-lone-y.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/groove-lone-z.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/groove-monotonic-negative.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/groove-narrow.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/groove-topology-a.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/groove-topology-b.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pad-compound-equal.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pad-detached-body-negative.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pad-full-span-ledge-negative.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pad-nested-staircase-negative.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pad-topology-a.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pad-topology-b.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pad-x-negative.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pad-x-positive.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pad-y-negative.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pad-y-positive.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pad-z-negative.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pad-z-positive.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pattern-ambiguous.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pattern-grid.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/plain-block.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/plate-compound-equal.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/plate-cross-topology-a.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/plate-cross-topology-b.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/plate-detached-negative.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/plate-rotational-negative.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/plate-single-negative.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/plate-t-xz.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/plate-t-yz.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/plate-thick-negative.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/plate-u-additive.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/plate-u-cut.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pocket-compound.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pocket-edge-anchored.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pocket-lone.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pocket-opposed.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pocket-pattern-ambiguous.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pocket-pattern-grid.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pocket-pattern-linear.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pocket-pattern-pair.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pocket-pattern-topology-a.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pocket-pattern-topology-b.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pocket-prismatic-negative.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pocket-side.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pocket-through-negative.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pocket-topology-a.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pocket-topology-b.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/pocket-two-equal.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/polygonal-boss-compound-equal.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/polygonal-boss-detached-negative.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/polygonal-boss-in-plane-rotated.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/polygonal-boss-other-protrusions-negative.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/polygonal-boss-recess-negative.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/polygonal-boss-stock-negative.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/polygonal-boss-topology-a.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/polygonal-boss-topology-b.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/polygonal-boss-x.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/polygonal-boss-y.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/polygonal-boss-z.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/polygonal-stock-compound-negative.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/polygonal-stock-cylinder-negative.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/polygonal-stock-irregular-negative.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/polygonal-stock-octagon-negative.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/polygonal-stock-recess-negative.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/polygonal-stock-roll17.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/polygonal-stock-topology-a.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/polygonal-stock-topology-b.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/polygonal-stock-translated.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/polygonal-stock-x.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/polygonal-stock-y.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/topology-a.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/topology-b.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/turned-step-axis-x.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/turned-step-axis-y.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/turned-step-axis-z.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/turned-step-compound.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/turned-step-repeated-lengths.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/turned-step-through-bore.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/turned-step-topology-a.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/turned-step-topology-b.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/evaluation/turned-step-translated-blind-bore.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/grm03_thumbwheel_drive_screw.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/grm03_thumbwheel_drive_screw_ap242_pmi.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/grm04_drive_plate.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/if_step_flat_across_cylinder.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/issue_1058_wheel_rh.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/issue_1247_angled_blind_step.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/issue_909_basic_part_design_017_body.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/issue_915_case_study_2.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/nist_ctc_01_asme1_ap203.stp +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/nist_ctc_01_asme1_ap242.stp +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/nist_ctc_02_asme1_ap203.stp +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/nist_ctc_02_asme1_ap242.stp +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/nist_ctc_03_asme1_ap203.stp +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/nist_ctc_03_asme1_ap242.stp +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/nist_ctc_04_asme1_ap203.stp +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/nist_ctc_04_asme1_ap242.stp +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/nist_ctc_05_asme1_ap203.stp +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/nist_ctc_05_asme1_ap242.stp +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/tuner_jig_blind_obround_pockets.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/fixtures/whistle_frame_reference.step +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_adr0018_view_routing.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_adr_corpus.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_agents_guide.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_api_docs.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_architecture_docs.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_balloon_ring_standoff.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_build_profile_harness.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_carve_free_position_callers.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_clone_budget.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_counting_calls.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_declared_recognition_gate.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_dense_sheet_canary.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_deprecation_dates.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_detect_once.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_detect_registry.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_dimension_role_vocabulary.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_e2e_slice.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_e2e_standards.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_export_dxf_curves.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_external_recognition_boundary.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_fillets_adjacency.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_fits.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_flat_completeness.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_flat_stock_opposition.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_gdt_placement.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_geometry_graph_spike.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_grid_lattice_convention.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_import_boundaries.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_iso_nts_caption_placement.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1000_envelope_reuse.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1006_measurement_comparison.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1073_cross_body_patterns.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1082_polygonal_stock.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1116_ap242_hole_tolerance_lowering.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1130_view_planning_evidence.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1142_hole_leader_labels.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1144_transactional_hole_table.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1147_legibility_pair_aggregation.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1153_contradictory_dimensions.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1154_one_owner_per_measurement.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1155_grm04_sheet_use.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1166_cross_pass_feature_leaders.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1176_quality_fidelity.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1177_angular_dimensions.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1188_per_view_assignment.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1190_section_decision.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1196_deterministic_view_names.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1202_observed_drawing_consumer.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1204_multiscale_view_issues.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1209_linear_pmi_witnesses.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1215_envelope_tolerance.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1216_callout_reservation_measures_ink.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1216_pairwise_across_scale_groups.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1219_location_claims_its_own_axis.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1229_ledger_member_keying.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1240_iso_above_strip_visibility.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1245_passage_disposition.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1247_angled_step_disposition.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1254_turned_chamfers.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1260_view_constraints.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1262_automatic_turned_views.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1276_turned_leader_targets.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1281_turned_fillets.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1312_engine_costs.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1325_nominal_agreement.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1332_overlap_remedy.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1332_zone_labels.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1334_prevent_ink.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1336_grm03_ap242_pmi_fixture.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1350_detected_takeover.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1351_structured_note_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1352_searchable_pdf_text.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1353_cnc_authoritative_workflow.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1357_framed_boundary.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1357_pmi_frame.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1360_thread_depth.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1369_hole_completeness_evidence.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1370_countersink_completeness_evidence.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1370_double_d_completeness_evidence.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1371_flat_completeness_evidence.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1371_polygonal_stock_completeness_evidence.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1372_groove_completeness_evidence.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1372_pad_completeness_evidence.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1372_pocket_completeness_evidence.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1372_pocket_pattern_completeness_evidence.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1372_polygonal_boss_completeness_evidence.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1373_plate_completeness_evidence.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1374_chamfer_completeness_evidence.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1374_fillet_completeness_evidence.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1374_turned_step_completeness_evidence.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1378_diameter_leader_targets.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1382_046_step_inventory.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1382_circular_blind_step_semantics.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1382_framed_step_family_evidence.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1382_paired_ramp_semantics.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1382_through_step_semantics.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1390_sheet_registration.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1392_recognisers_048.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1395_degenerate_iso_region.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1397_unverifiable_requirement_message.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1421_rectangular_blind_slot_completeness.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1421_rectangular_blind_slot_semantics.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1421_round_bottom_blind_slot_completeness.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1421_round_bottom_blind_slot_semantics.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1432_adoption.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1432_boundary_failures.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1432_oriented_slot_semantics.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1433_blend_semantics.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1438_boss_ownership.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1438_channel_ownership.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1438_cli_report_sidecar.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1438_generation_snapshot.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1438_nested_ownership.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1438_occurrence_ownership.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1438_pattern_ownership.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1438_plate_ownership.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1438_report_projection.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1438_report_writer.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1438_through_step_ownership.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1438_turned_step_ownership.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1450_boss_blend_ownership.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1466_dimension_options.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1471_boundary_failures.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1471_evidence_schema.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1471_groove_profile.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1471_section_recess_contract.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1471_section_recess_pockets.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1479_radius_leader_targets.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1485_curved_pockets.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1485_quiddity_024_boundary.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1485_rounded_pockets.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1504_angle_patterns.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1504_angular_references.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1504_angular_rendering.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1504_canonical_angles.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1504_profile_angles.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1505_diameter_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1505_short_axial_chains.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1511_turned_boss_heights.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1514_projection_safeguard.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1515_first_angle.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1516_dimension_text.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1517_through_indicator.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1518_explicit_rear.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1524_tolerance_magnitude.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1530_section_provenance.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1531_semantic_hole_counts.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1532_authored_section_examples.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1533_review_diagnostics.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1534_build_progress.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1542_applicability.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1542_catalog.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1542_catalog_families.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1542_claim_authority.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1542_document.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1542_document_claims.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1542_document_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1542_document_report.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1542_report_authority.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1542_requirement_carriers.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_1543_feature_schedules.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_367_leader_ink.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_443_grm03_axial_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_563_placement_intent.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_676_polygonal_boss.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_676_polygonal_boss_declare.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_798_floor_cardinality.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_798_material_field.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_798_silhouette_lint.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_827_real_part_canary.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_883_location_identity.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_885_prismatic_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_915_dense_case.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_916_pocket_leader.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_917_open_channel.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_924_zero_length_shoulders.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_955_height_contingency.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_issue_958_cross_solid_recognition.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_layout.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_layout_hypothesis.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_layout_property.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_leader_footprint.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_lint_box_cache.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_lint_ink_overlap.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_lint_reconciliation.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_linting.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_note_verb.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_object_aspects.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_occupancy_boxes.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_overall_height_coverage.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_part_model.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_pitch_dim_footprint.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_pmi_datum_lowering.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_pmi_gtol_lowering.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_pmi_part21.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_pocket_pattern.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_pocket_pattern_recognition.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_principal_profile_classifier.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_private_test_imports.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_projection_symbol_default.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_quality_components.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_recogniser_adoption.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_recogniser_contract.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_recognition_result.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_registry.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_repack_geometry_seam.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_score.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_script_detail_parity.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_shared_box_memo.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_sheet_gdt.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_sheet_notes.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_sheet_of.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_sheet_section.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_sheet_tables.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_slanted_blind_step.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_slot_completeness.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_slot_pattern.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_slot_pattern_recognition.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_soft_deprecation.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_solve_trace.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_step_analysis_evaluation.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_strip_layout.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_suppression_ledger.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_suppression_marks.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_tolerances.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_turned_steps.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_version_bump_ci.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_view_plan.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_witness_label_reconciliation.py +0 -0
- {draftwright-0.4.27 → draftwright-0.4.29}/tests/test_workflows.py +0 -0
|
@@ -2,6 +2,259 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Circular-seat recognition, declared features, and generated-script replay (#1613).
|
|
8
|
+
Diameter, open run, arc sweep, and three datum-to-axis coordinates retain each physical
|
|
9
|
+
seat's measurement identities, including counted coaxial callouts and shared axis marks.
|
|
10
|
+
- Opt-in independent sheet margins and exact title-block width on `Sheet`, `build_drawing`,
|
|
11
|
+
`make_drawing`, and the CLI, including generated-script replay (#1612, #1589). Sergio's
|
|
12
|
+
25/10/10/10 mm margins and 175 mm block are explicit options; existing defaults remain.
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
- Direct and generated builds use the same final IR step ladder for page layout (#1592).
|
|
17
|
+
Raw face levels owned by another feature no longer reserve a phantom step corridor at
|
|
18
|
+
the title-block clearance threshold.
|
|
19
|
+
|
|
20
|
+
- Location intents now accept `.format(decimals=...)` for all selected directions (#1610),
|
|
21
|
+
including plan locations, side-drilled holes and slots. Compiler-owned labels reach
|
|
22
|
+
placement footprints, live location edits and generated scripts. Coincident marks with
|
|
23
|
+
incompatible explicit display text are refused instead of overriding an intent.
|
|
24
|
+
|
|
25
|
+
- Explicit dimension precision, including `.format(decimals=0)`, now reaches geometric
|
|
26
|
+
label critique (#1620). Correct rounding is reported as information; labels outside
|
|
27
|
+
the requested rounding interval still produce `label_vs_measured`. Height and step
|
|
28
|
+
ladders retain the same compiler policy as ordinary dimensions.
|
|
29
|
+
|
|
30
|
+
- **`label_vs_measured` no longer reports the drawing's own rounding as a topology error
|
|
31
|
+
(#1600).** A sheet at one decimal place prints 4.450 as `4.5`; the check then compared
|
|
32
|
+
`4.5` against 4.450 and said "possible axis swap or wrong endpoint". The comparison was
|
|
33
|
+
*relative*, so the same 0.05 mm of rounding passed silently on a 100 mm dimension and was
|
|
34
|
+
an error on a 4 mm one — it fired on smallness, not on wrongness.
|
|
35
|
+
|
|
36
|
+
A label now states its own precision: `4.5` shows one place, `4.45` two, `12` none. A
|
|
37
|
+
difference within half of the last displayed place is the label doing its job; anything
|
|
38
|
+
beyond it is still reported, and an axis swap or wrong endpoint misses by far more.
|
|
39
|
+
|
|
40
|
+
This is a prerequisite for #1602's proposed CI gate: `label_vs_measured` sits in the
|
|
41
|
+
register of codes meaning *the sheet says something untrue*, and a code that fires on
|
|
42
|
+
correct rounding cannot be hard-failed on.
|
|
43
|
+
|
|
44
|
+
### Added
|
|
45
|
+
|
|
46
|
+
- **`nominal_rounded` says where the sheet's precision loses the model value.** Silencing
|
|
47
|
+
the false alarm above left nothing reporting it at all, and `4.5` for 4.450 is still a
|
|
48
|
+
real 0.05 mm between drawing and model — on a part carrying 0.05 mm clearances, the whole
|
|
49
|
+
clearance. One `info` per sheet, naming the worst case:
|
|
50
|
+
|
|
51
|
+
> 7 dimension(s) print a nominal the model does not have, rounded to the sheet's
|
|
52
|
+
> precision; the largest is '15.7' for 15.6500 (0.0500 mm). Within a general tolerance
|
|
53
|
+
> this is ordinary; where a fit depends on it, raise that dimension's places with
|
|
54
|
+
> `.format(decimals=...)`
|
|
55
|
+
|
|
56
|
+
`.format(decimals=…)` cannot yet reach a **location** dimension (#1610), and on the
|
|
57
|
+
fixture this was measured against six of the seven offenders are locations — so the
|
|
58
|
+
message says so rather than prescribing a remedy that raises `ValueError`.
|
|
59
|
+
|
|
60
|
+
It does **not** guess, and does not change any rounding. `4.450` locating a hinge axis is
|
|
61
|
+
design intent; `71.595` as an overall envelope is parametric fallout no drafter would
|
|
62
|
+
print in full — and telling them apart needs to know what the part is *for*, which a STEP
|
|
63
|
+
file does not carry (the same gap as #1597). So the engine reports and the author decides:
|
|
64
|
+
`.format(decimals=…)` already sets places per dimension and survives the `--script` round
|
|
65
|
+
trip.
|
|
66
|
+
|
|
67
|
+
Measured: 7 of 25 numeric dimension labels on `whistle_frame_reference.step`; silent on
|
|
68
|
+
every golden fixture, all of which are built from round numbers.
|
|
69
|
+
|
|
70
|
+
### Fixed
|
|
71
|
+
- Adopt published Quiddity 0.2.9 (#1619). The frame document now retains six separate
|
|
72
|
+
hinge bores instead of a single path spanning air gaps. Three cylindrical seat occurrences
|
|
73
|
+
are reported explicitly; their drawing grammar remains pending #1613.
|
|
74
|
+
- Refused hole patterns retain their members in the hole-completeness ledger (#1607).
|
|
75
|
+
The adapter records the refusal against the exact recognition run, so a six-hole group
|
|
76
|
+
is no longer reported as an unverifiable four-hole pattern and two loose holes. Declared
|
|
77
|
+
pattern mismatches still undergo the independent correspondence checks.
|
|
78
|
+
|
|
79
|
+
- **A required dimension with nowhere to go now re-plans the sheet instead of being
|
|
80
|
+
reported and left (#1590).** The automatic recovery ladder — larger scales on the
|
|
81
|
+
selected page, then dropping the optional pictorial, then a larger page — already
|
|
82
|
+
existed and already refused any candidate that had not fixed the problem. It ran on
|
|
83
|
+
two symptoms: a turned part missing an axial station, and an **authored** intent that
|
|
84
|
+
failed to place. A required *envelope* dimension that found no room was neither, so
|
|
85
|
+
these drawings never entered the ladder at all — `scale_decision["attempts"]` came
|
|
86
|
+
back empty and an `overall_dim_withheld` error was reported on the first sheet tried.
|
|
87
|
+
|
|
88
|
+
`overall_dim_withheld` is deliberately not a scale blocker, and that is right:
|
|
89
|
+
reporting it through `placement_unsatisfiable` once made `build_drawing(part,
|
|
90
|
+
scale=...)` raise on parts that had always built. But that argument is about refusing
|
|
91
|
+
the scale a **caller asked for**. Choosing one automatically is a different question,
|
|
92
|
+
and one predicate was answering both.
|
|
93
|
+
|
|
94
|
+
What it changes, measured:
|
|
95
|
+
|
|
96
|
+
| part | before | after |
|
|
97
|
+
|---|---|---|
|
|
98
|
+
| stepped `Box(80, 60, 30)` | A4 1:1, overall depth withheld (error) | A4 1:1, **clean**, pictorial dropped |
|
|
99
|
+
| 80 × 60 plate, two close bores | A4 1:1, `incomplete`: unlocated hole, dropped location, withheld depth | A2 2:1, **clean**, every dimension placed |
|
|
100
|
+
|
|
101
|
+
**ADR 2 invariant 13 is amended** to match. It read "the optional isometric yields only
|
|
102
|
+
to close missing axial coverage", which had been one trigger behind the code since
|
|
103
|
+
2026-08-23 — the record was consolidated twelve days later and transcribed the narrower
|
|
104
|
+
claim. It now states the principle the triggers share: the isometric yields only to
|
|
105
|
+
preserve manufacturing completeness, never for space, crowding or preference. The list
|
|
106
|
+
itself is `builder._ISO_YIELD_TRIGGERS`, and a guard fails if it changes, so the next
|
|
107
|
+
widening is caught by a test rather than by a reader.
|
|
108
|
+
|
|
109
|
+
Dropping the optional pictorial is the first lever, which is the order #443/#1299
|
|
110
|
+
already argue for — a pictorial cannot outrank a dimension needed to manufacture the
|
|
111
|
+
part. Pin `page=` or `scale=` to opt out; a pinned sheet still reports honestly rather
|
|
112
|
+
than replanning.
|
|
113
|
+
|
|
114
|
+
- **A generated `--script` reproduces a re-planned layout.** A declared build does what
|
|
115
|
+
it is told and never enters the recovery ladder, so `generate_sheet_script` pins the
|
|
116
|
+
settled page, scale and view set into the script. It used to do that only for the two
|
|
117
|
+
families whose replan could be predicted from the model; nothing predicts the new
|
|
118
|
+
trigger, because whether a mark fits is a fact about a measured sheet. The reference
|
|
119
|
+
build is now unconditional — one extra `build_drawing` per generated script, measured
|
|
120
|
+
at 0.19 s for a plain box, 0.34 s for a pocket and 1.17 s for a part that actually
|
|
121
|
+
replans — and an **undrawable** source can never be the reason a script is not
|
|
122
|
+
written, the standard the inspection sidecar beside it already meets. A deliberate
|
|
123
|
+
refusal (an unknown page size, `ScaleIncompatibilityError`, `ViewPlanIncomplete`)
|
|
124
|
+
still reaches the caller.
|
|
125
|
+
|
|
126
|
+
A script that keeps `auto_dimensions()` is not handed a pinned view set: `Sheet`
|
|
127
|
+
refuses `authored_views()` beside it, so the two together wrote a script that raised
|
|
128
|
+
when run. The settled set is reported in a comment instead.
|
|
129
|
+
|
|
130
|
+
- **A bolt circle is no longer stated unless something other than the fit supports it
|
|
131
|
+
(#1596).** `EQ SP ON ø… BC` tells a machinist to work from a centre; #1595 found a real
|
|
132
|
+
part where that centre was in mid-air. Six ⌀2.4 holes in a 2×3 rectangular grid came out
|
|
133
|
+
as `4× ⌀2.4 THRU EQ SP ON ø34.4 BC` plus an unrelated `2× ⌀2.4 THRU`, the circle centred
|
|
134
|
+
on (0, −20.11) — nothing is concentric with it.
|
|
135
|
+
|
|
136
|
+
The fit was not a near miss. **Any three non-collinear points are concyclic, and so are the
|
|
137
|
+
four corners of any rectangle** — for those arrangements the residual is zero by
|
|
138
|
+
construction, so no tolerance on it can help. Nor does equal spacing rescue it: that
|
|
139
|
+
rectangle is near-square (24.30 × 24.38), so its corners sit 90.19° / 89.81° apart and
|
|
140
|
+
would pass an `EQ SP` check too.
|
|
141
|
+
|
|
142
|
+
What gives it away is the leftover callout beside it. Corroboration must now come from
|
|
143
|
+
somewhere the fit cannot reach — any one of:
|
|
144
|
+
|
|
145
|
+
1. **five or more members** — a circle through five holes could have failed to fit;
|
|
146
|
+
2. **a concentric physical feature** — a boss, spigot, central bore, or a round body whose
|
|
147
|
+
own axis is the circle's, something a machinist can indicate off;
|
|
148
|
+
3. **it accounts for every hole of its kind** — no identical hole left off the circle.
|
|
149
|
+
|
|
150
|
+
(3) is the discriminator here: six identical holes and the circle claimed four. A drawing
|
|
151
|
+
does not put two of six bolts on a different plan. It is also a question about the part
|
|
152
|
+
rather than about its angle to the axes, unlike the row/column test it replaced.
|
|
153
|
+
|
|
154
|
+
Refused patterns keep every hole: the members fall through to ordinary grouping, so the
|
|
155
|
+
#1595 part now reads `6× ⌀2.4 THRU` — which also repairs the fragmentation into 4 + 2.
|
|
156
|
+
|
|
157
|
+
**What refusing costs, measured.** `hole_requirement_outcomes` builds its pattern-member
|
|
158
|
+
set from the recogniser's patterns rather than the ones the IR adopted, so after a refusal
|
|
159
|
+
it keeps those holes out of the loose groups, finds no `PatternFeature` to join, and warns
|
|
160
|
+
`hole_requirement_unverifiable` about holes the sheet states correctly — two on this part,
|
|
161
|
+
26 issues against 23. The pre-existing oblique-pattern refusal (#971) has the same hole and
|
|
162
|
+
was simply never reachable; #1596 makes it so. Tracked as **#1607** with three attempted
|
|
163
|
+
fixes recorded, and guarded by an `xfail(strict)` here.
|
|
164
|
+
|
|
165
|
+
Refused at the recognition→IR adapter, not in the recogniser: a circle through those holes
|
|
166
|
+
is genuinely findable, and ADR 3 leaves the recogniser to report the geometry it finds.
|
|
167
|
+
Whether it may be *stated as a drafting datum* is drafting policy, which is draftwright's.
|
|
168
|
+
|
|
169
|
+
### Changed
|
|
170
|
+
|
|
171
|
+
- **The title block carries every ISO 7200:2004 mandatory data field.** Three had
|
|
172
|
+
no representation at all before — segment/sheet number (5.1.6), approval person
|
|
173
|
+
(5.3.4) and document type (5.3.6) — and are now `sheet=`, `approved_by=` and
|
|
174
|
+
`document_type=` on `build_drawing`, `make_drawing`, `Sheet`, the CLI and the
|
|
175
|
+
`--script` emitter. Cell widths come from the standard's own recommended
|
|
176
|
+
character counts (via `build123d-drafting-helpers>=0.15.4`), so they follow ISO
|
|
177
|
+
7200 and the font rather than a chosen proportion.
|
|
178
|
+
|
|
179
|
+
Eleven fields need four rows, so **the block is 32 mm tall rather than 16**, and
|
|
180
|
+
the band reserved for it goes 35 → 40 mm. `material` and `general_tolerance`
|
|
181
|
+
stay although neither is an ISO 7200 title-block field; they are on every real
|
|
182
|
+
drawing.
|
|
183
|
+
|
|
184
|
+
- **The scale is stated outside the title block**, beside the projection symbol,
|
|
185
|
+
per ISO 7200 §4 ("presented outside the title block only when used, e.g. scale,
|
|
186
|
+
projection symbol"). It is drawn unconditionally, and the new **`scale_not_stated`
|
|
187
|
+
error** checks the rendered sheet rather than trusting the code that draws it.
|
|
188
|
+
The `SCALE` cell is gone from the block.
|
|
189
|
+
|
|
190
|
+
**Two consequences worth knowing before you upgrade:**
|
|
191
|
+
|
|
192
|
+
- A dense sheet may escalate a page size. In the golden corpus one fixture of
|
|
193
|
+
fourteen (`flange_dense`) moves A4 → A3; the other thirteen keep their page
|
|
194
|
+
and scale, and a sweep of ten ordinary shapes showed no change at all.
|
|
195
|
+
- **Dimension placement now avoids the title block (#1593)**, which it never
|
|
196
|
+
did: the block is drawn after placement, so only GD&T frames ever avoided it
|
|
197
|
+
(#481). A two-row block kept that out of reach; a four-row one does not.
|
|
198
|
+
`build_drawing(Box(40, 30, 12))` used to run its `30` dimension 2.1 mm into
|
|
199
|
+
the block with `lint()` reporting a clean sheet; a stepped
|
|
200
|
+
`Box(80, 60, 30)` put the whole `60` label inside it, reported only as an
|
|
201
|
+
`annotation_overlap` between the labels `60` and `DRAWING`.
|
|
202
|
+
|
|
203
|
+
Most displaced dimensions move to the view's opposite strip and stay on the
|
|
204
|
+
sheet. Where both strips are full the dimension is **withheld as an error
|
|
205
|
+
naming the block**, rather than drawn through it: in the golden corpus
|
|
206
|
+
`pocketed` and `prismatic_ladder` lose their overall depth at the automatic
|
|
207
|
+
A4/1:1, and place it on A3 or at 1:2. Likewise a **pinned** A4 for a
|
|
208
|
+
five-step turned shaft no longer reaches 5:1, because at that scale the front
|
|
209
|
+
view runs down past the block and the overall height cannot be placed; the
|
|
210
|
+
2:1 sheet is returned with `axial_length_missing` stated. Leaving the page
|
|
211
|
+
automatic still carries every station, on A3 at 5:1.
|
|
212
|
+
|
|
213
|
+
Choosing a page and scale without knowing which dimensions will still need
|
|
214
|
+
room is #1590.
|
|
215
|
+
|
|
216
|
+
### Changed
|
|
217
|
+
|
|
218
|
+
- **Exports are reproducible by default.** `reproducible` now defaults to `True`
|
|
219
|
+
on `build_drawing`, `make_drawing`, `Drawing` and `Drawing.export`, so two
|
|
220
|
+
exports of one drawing are byte-identical without asking. Pass
|
|
221
|
+
`reproducible=False` to opt out.
|
|
222
|
+
|
|
223
|
+
It was opt-in on a cost argument, and the cost turns out to be small at the
|
|
224
|
+
scale most drawings are made: on the NIST CTC-01 AP242 fixture, +0.27 s on a
|
|
225
|
+
13.4 s job (+3.2% of export, +2.0% overall). The +32% of export measured when
|
|
226
|
+
the flag was introduced was a 358-part assembly; the ordering work is one
|
|
227
|
+
bounding box and one edge walk per part, so it scales with part count and a
|
|
228
|
+
part-heavy sheet is still the case to opt out of.
|
|
229
|
+
|
|
230
|
+
Two things pushed the default over. A file that changes between runs cannot be
|
|
231
|
+
diffed, checksummed or cached — the reason to want it is not speed-shaped. And
|
|
232
|
+
neither the CLI nor `Sheet` exposes the flag at all, so every drawing made
|
|
233
|
+
through those surfaces was non-reproducible with no way to change it.
|
|
234
|
+
|
|
235
|
+
One behaviour follows from the default rather than from this change: a DXF
|
|
236
|
+
export that cannot reach the ezdxf document to pin its metadata now raises
|
|
237
|
+
rather than writing live data, because every export now claims
|
|
238
|
+
reproducibility. Opting out restores the old fallback.
|
|
239
|
+
### Fixed
|
|
240
|
+
|
|
241
|
+
- **A supplied title-block `date` is stated on the sheet** (#1585). `TitleBlock`
|
|
242
|
+
could show only one of `revision`/`date` in its top-right cell and revision
|
|
243
|
+
won, while draftwright defaults `revision` to `"A"` — so every drawing that
|
|
244
|
+
set a date lost it, silently, in every version that has had the parameter.
|
|
245
|
+
Adopting `build123d-drafting-helpers>=0.15.4` gives the date a cell of its
|
|
246
|
+
own whenever a revision is also set, and `_make_title_block` now names that
|
|
247
|
+
cell, so the date reaches the PDF text layer and the cell-overflow lint
|
|
248
|
+
rather than only the rendered geometry.
|
|
249
|
+
|
|
250
|
+
`date`, `revision` and `company` are stripped before use, matching what the
|
|
251
|
+
block itself does: a whitespace-only `company` previously raised `KeyError`
|
|
252
|
+
from `cell_bbox`, and padded values were measured at a width the sheet never
|
|
253
|
+
drew. (The DRAWN BY narrowing this entry originally described, and the shared
|
|
254
|
+
top-right cell it named, are both gone with the ISO 7200 layout above — the
|
|
255
|
+
date has its own cell in its own row, so it costs DRAWN BY nothing.)
|
|
256
|
+
|
|
257
|
+
|
|
5
258
|
### Added
|
|
6
259
|
|
|
7
260
|
- Report schema v1 now projects one recognition-owned physical requirement ledger shared with
|
|
@@ -154,6 +407,21 @@
|
|
|
154
407
|
|
|
155
408
|
### Changed
|
|
156
409
|
|
|
410
|
+
- Updated the exact Quiddity runtime and declared-inspection contract to **0.2.8**, which stops
|
|
411
|
+
a modelled thread being read as a stack of turned shoulders and coalesces contiguous
|
|
412
|
+
equal-diameter bands into the one span they physically are. Measured on the repo corpus,
|
|
413
|
+
NIST CTC-05 is again the only fixture that moves: its ⌀304.8 region was three adjacent
|
|
414
|
+
rungs and is now one, in both STEP encodings (#1135, quiddity#587).
|
|
415
|
+
|
|
416
|
+
- Updated the exact Quiddity runtime and declared-inspection contract to **0.2.7**. Unlike the
|
|
417
|
+
0.2.5 adoption below, this one changes drawings: the provider now requires circumferential
|
|
418
|
+
cylinder support to establish a turned-profile axis line, so rounded plate corners and parallel
|
|
419
|
+
offset cylinders no longer form a false stepped shaft. Measured on the repo corpus, NIST CTC-05
|
|
420
|
+
is the only fixture whose recognised turned profile moves — its two STEP encodings previously
|
|
421
|
+
disagreed (3 steps and 9 steps for the same solid) and now agree on 5 — and a plate part that
|
|
422
|
+
previously raised out of `generate_sheet_script` now emits and builds. No family, record schema
|
|
423
|
+
or adapter changed (#1555, quiddity#586).
|
|
424
|
+
|
|
157
425
|
- Updated the exact Quiddity runtime and declared-inspection contract to 0.2.5 for the
|
|
158
426
|
provider's recognition performance improvements.
|
|
159
427
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: draftwright
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.29
|
|
4
4
|
Summary: Automated technical-drawing generation for build123d
|
|
5
5
|
Project-URL: Homepage, https://github.com/pzfreo/draftwright
|
|
6
6
|
Project-URL: Repository, https://github.com/pzfreo/draftwright
|
|
@@ -684,7 +684,7 @@ Classifier: Programming Language :: Python :: 3.14
|
|
|
684
684
|
Classifier: Topic :: Scientific/Engineering
|
|
685
685
|
Requires-Python: <3.15,>=3.10
|
|
686
686
|
Requires-Dist: antlr4-python3-runtime<4.10
|
|
687
|
-
Requires-Dist: build123d-drafting-helpers>=0.15.
|
|
687
|
+
Requires-Dist: build123d-drafting-helpers>=0.15.4
|
|
688
688
|
Requires-Dist: build123d<0.11,>=0.9.0; python_full_version < '3.13'
|
|
689
689
|
Requires-Dist: build123d<0.12,>=0.11; python_full_version >= '3.13'
|
|
690
690
|
Requires-Dist: cadquery-ocp-novtk!=7.9.3.1.1; python_full_version >= '3.13'
|
|
@@ -692,7 +692,7 @@ Requires-Dist: numpy>=1.24
|
|
|
692
692
|
Requires-Dist: ocp-gordon<0.3
|
|
693
693
|
Requires-Dist: pillow>=10
|
|
694
694
|
Requires-Dist: pypdfium2>=4
|
|
695
|
-
Requires-Dist: quiddity==0.2.
|
|
695
|
+
Requires-Dist: quiddity==0.2.9
|
|
696
696
|
Requires-Dist: reportlab>=4.0
|
|
697
697
|
Requires-Dist: rich>=10.11
|
|
698
698
|
Requires-Dist: steputils==0.1
|
|
@@ -758,8 +758,18 @@ draftwright my_part.step --no-report # opt out of the JSON sidecar
|
|
|
758
758
|
draftwright my_part.step --scale 2 --page A3 # override the auto scale / page
|
|
759
759
|
draftwright my_part.step --scale 1 --page A4 --scale-policy strict
|
|
760
760
|
draftwright my_part.step --script # write an editable declarative Sheet script
|
|
761
|
+
draftwright /parts/my_part.step --out-dir . # explicitly write into the working directory
|
|
762
|
+
draftwright my_part.step --out-dir drawings # create/use a separate output directory
|
|
761
763
|
```
|
|
762
764
|
|
|
765
|
+
CLI outputs default to the directory containing the STEP input, including an absolute or
|
|
766
|
+
nested input path. `--script` writes its Python file and inspection sidecar there too; the
|
|
767
|
+
script retains that output destination when run from another directory. Use `--out-dir DIR`
|
|
768
|
+
to choose a directory, or `--out PREFIX` to choose a basename as well (these options are
|
|
769
|
+
mutually exclusive). Relative overrides use the current working directory. Live object
|
|
770
|
+
scripts (`module:part`) default to `drawing.py` in the working directory.
|
|
771
|
+
|
|
772
|
+
|
|
763
773
|
`draftwright --help` lists every flag; `--version` prints the version.
|
|
764
774
|
|
|
765
775
|
### Python
|
|
@@ -55,8 +55,18 @@ draftwright my_part.step --no-report # opt out of the JSON sidecar
|
|
|
55
55
|
draftwright my_part.step --scale 2 --page A3 # override the auto scale / page
|
|
56
56
|
draftwright my_part.step --scale 1 --page A4 --scale-policy strict
|
|
57
57
|
draftwright my_part.step --script # write an editable declarative Sheet script
|
|
58
|
+
draftwright /parts/my_part.step --out-dir . # explicitly write into the working directory
|
|
59
|
+
draftwright my_part.step --out-dir drawings # create/use a separate output directory
|
|
58
60
|
```
|
|
59
61
|
|
|
62
|
+
CLI outputs default to the directory containing the STEP input, including an absolute or
|
|
63
|
+
nested input path. `--script` writes its Python file and inspection sidecar there too; the
|
|
64
|
+
script retains that output destination when run from another directory. Use `--out-dir DIR`
|
|
65
|
+
to choose a directory, or `--out PREFIX` to choose a basename as well (these options are
|
|
66
|
+
mutually exclusive). Relative overrides use the current working directory. Live object
|
|
67
|
+
scripts (`module:part`) default to `drawing.py` in the working directory.
|
|
68
|
+
|
|
69
|
+
|
|
60
70
|
`draftwright --help` lists every flag; `--version` prints the version.
|
|
61
71
|
|
|
62
72
|
### Python
|
|
@@ -70,11 +70,34 @@ issue. The contract test derives package record outputs, converter registries, l
|
|
|
70
70
|
and emitter branches independently, so copying a new name into the declaration alone cannot make CI
|
|
71
71
|
pass.
|
|
72
72
|
|
|
73
|
-
### Quiddity 0.2.
|
|
73
|
+
### Quiddity 0.2.9 runtime contract
|
|
74
74
|
|
|
75
|
-
The runtime pins the published `quiddity==0.2.
|
|
75
|
+
The runtime pins the published `quiddity==0.2.9` package, following the 0.2.4 adoption in
|
|
76
76
|
[#1486](https://github.com/pzfreo/draftwright/pull/1486) and the migration in
|
|
77
|
-
[#1471](https://github.com/pzfreo/draftwright/issues/1471).
|
|
77
|
+
[#1471](https://github.com/pzfreo/draftwright/issues/1471). 0.2.7 is a patch adoption: it requires
|
|
78
|
+
circumferential cylinder support to establish a turned-profile axis line, so rounded plate corners
|
|
79
|
+
and parallel offset cylinders no longer form a false stepped shaft
|
|
80
|
+
([quiddity#586](https://github.com/pzfreo/quiddity/issues/586), [#1555](https://github.com/pzfreo/draftwright/issues/1555)).
|
|
81
|
+
No family, record schema or adapter changed.
|
|
82
|
+
|
|
83
|
+
Quiddity 0.2.9 exposes native cylindrical seats as open-arc `SectionRecess` channels and
|
|
84
|
+
keeps coaxial bores separated across exterior air gaps. The pinned frame now retains six
|
|
85
|
+
Ø1.1 × 3.0 mm hinge bores and three Ø14.3 seats. The seat grammar remains explicitly
|
|
86
|
+
unsupported in Draftwright pending [#1613](https://github.com/pzfreo/draftwright/issues/1613).
|
|
87
|
+
Adapter refusals of derived hole patterns are recorded with same-run identity so their
|
|
88
|
+
physical members remain in the ordinary-hole requirement ledger (#1607/#1619). These changes
|
|
89
|
+
use the existing public schemas. Identical patterns on different opening planes retain the
|
|
90
|
+
provider's documented grouping limitation ([quiddity#595](https://github.com/pzfreo/quiddity/issues/595));
|
|
91
|
+
separate physical bores must not be merged to recover a pattern.
|
|
92
|
+
|
|
93
|
+
0.2.7 also partitions bands by physical axis line rather than by axis direction, requiring two
|
|
94
|
+
distinct diameters *per line*. One body can therefore publish **several** coaxial
|
|
95
|
+
`TurnedProfile`s where 0.2.6 published at most one. `Analysis.profiles` already holds every
|
|
96
|
+
body-local profile and is unaffected; `Analysis.prof` remains the compatible zero/one view and
|
|
97
|
+
is `None` for a plural result, which sends `holes.py`'s `a.prof is not None` branches down their
|
|
98
|
+
non-rotational path. **No fixture in this repository reaches plural cardinality on either
|
|
99
|
+
version**, so the green tiers are not evidence that path behaves well — it is newly reachable
|
|
100
|
+
and untested. Its public `quiddity`, `quiddity.evidence` and
|
|
78
101
|
`quiddity.inspection` surfaces supply recognition, exact occurrence evidence and declared geometry
|
|
79
102
|
reads. There is one recognition aggregate per build; consumers project that result rather than
|
|
80
103
|
calling the document builder to obtain another run.
|
|
@@ -28,6 +28,47 @@ retain the requested convention. Annotation footprints, scale/page selection and
|
|
|
28
28
|
repacking use the same convention. An authored relation contradicting the principal layout
|
|
29
29
|
fails before projection; a whole-view pin must preserve the convention's relationships.
|
|
30
30
|
|
|
31
|
+
## Sheet margins and title-block width
|
|
32
|
+
|
|
33
|
+
Set each physical sheet edge independently with `margin_left`, `margin_right`,
|
|
34
|
+
`margin_top`, and `margin_bottom` (millimetres). Omitted edges remain 10 mm. `frame=True`
|
|
35
|
+
draws the border at those margins and reserves a further 6 mm inside it for content.
|
|
36
|
+
`zones=True` adds the zone ruler and implies a frame; each margin must fit its labels.
|
|
37
|
+
|
|
38
|
+
Sergio's folded-sheet arrangement is an explicit option on A4, A3, or A2:
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
from draftwright import build_drawing
|
|
42
|
+
|
|
43
|
+
drawing = build_drawing(
|
|
44
|
+
"part.step", page="A3", frame=True,
|
|
45
|
+
margin_left=25, margin_right=10, margin_top=10, margin_bottom=10,
|
|
46
|
+
title_block_width=175,
|
|
47
|
+
)
|
|
48
|
+
drawing.export("sergio", formats=("pdf", "svg"))
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
The same keywords work on `Sheet(...)` and `make_drawing(...)`. An explicit
|
|
52
|
+
`title_block_width` measures between border centrelines and aligns the block to the right
|
|
53
|
+
and bottom sheet margins. The 175 mm block therefore fits the 210 mm folded face with
|
|
54
|
+
25 mm left and 10 mm right clearance. Its visible border extends half its 0.15 mm stroke
|
|
55
|
+
beyond each centreline. Without an explicit width, the existing widths remain 120 mm on
|
|
56
|
+
A4 and 150 mm on larger ISO sheets, with the existing extra 1 mm right/bottom clearance.
|
|
57
|
+
Revision defaults also remain unchanged.
|
|
58
|
+
|
|
59
|
+
CLI parameters carry the same options into rendered drawings and generated scripts:
|
|
60
|
+
|
|
61
|
+
```sh
|
|
62
|
+
draftwright part.step --page A3 --frame \
|
|
63
|
+
--margin-left 25 --margin-right 10 --margin-top 10 --margin-bottom 10 \
|
|
64
|
+
--title-block-width 175 --out sergio --format pdf,svg
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Add `--script` to write a replayable `Sheet` script. Margins must be finite and nonnegative;
|
|
68
|
+
the width must be finite and positive. An explicit sheet too small for its margins and
|
|
69
|
+
block is refused. `drawing.drawable_bounds` exposes the physical drawable rectangle as
|
|
70
|
+
`(left, bottom, right, top)` page coordinates in millimetres.
|
|
71
|
+
|
|
31
72
|
## Dimension text style
|
|
32
73
|
|
|
33
74
|
### Title fields and notes at paper size
|
|
@@ -278,7 +319,7 @@ produces `angular_support_unverifiable`; contradictory supports produce
|
|
|
278
319
|
`angular_support_mismatch`.
|
|
279
320
|
|
|
280
321
|
Automatic drawings derive outside-profile angular requirements from ordered face
|
|
281
|
-
supports
|
|
322
|
+
supports, available since Quiddity 0.2.6. Angles already defined by a recognised chamfer or
|
|
282
323
|
regular-polygon callout do not add duplicate automatic requirements. This requires
|
|
283
324
|
the same run's exact face or shared-edge evidence, not matching numerical angles;
|
|
284
325
|
explicit angle declarations remain available on those corners.
|
|
@@ -642,8 +683,15 @@ and reports capacity/crossing failures. Trailing zeroes are intentional manufact
|
|
|
642
683
|
sheet.authored_dimensions()
|
|
643
684
|
sheet.dimension(envelope, "width.length").format(decimals=2) # 13.5 prints as 13.50
|
|
644
685
|
sheet.dimension(tapped_hole, "bore.diameter", view="plan", side="left")
|
|
686
|
+
sheet.dimension(tapped_hole, "location").format(decimals=2) # all selected directions
|
|
645
687
|
```
|
|
646
688
|
|
|
689
|
+
A location intent's precision applies to all its selected directional values, including
|
|
690
|
+
side-drilled holes and slots. The policy survives generated-script replay. When several
|
|
691
|
+
location intents share one coincident mark, give them matching display precision; incompatible
|
|
692
|
+
printed values raise an actionable error instead of silently choosing one intent's label.
|
|
693
|
+
|
|
694
|
+
|
|
647
695
|
::: draftwright.sheet.DimensionIntent
|
|
648
696
|
options:
|
|
649
697
|
filters: public
|
|
@@ -665,6 +713,16 @@ sheet.dimension(tapped_hole, "bore.diameter", view="plan", side="left")
|
|
|
665
713
|
Circular-blind, paired-ramp and through steps use a multi-parameter handle because their
|
|
666
714
|
requirements remain separately addressable:
|
|
667
715
|
|
|
716
|
+
Circular seats open at both run ends use `sheet.circular_channel(...)`. The
|
|
717
|
+
`centreline` gives ordered endpoints on the cylinder axis; `section` gives three
|
|
718
|
+
physical arc points (start, angular midpoint, end) in ascending transverse world axes.
|
|
719
|
+
The geometry supports minor, semicircular, and major arcs. The engine anchors its
|
|
720
|
+
leader on the curved wall and locates the axis from the stock bounding-box minimum.
|
|
721
|
+
In an authored set, request `seat_diameter.diameter`, `seat_run.length`,
|
|
722
|
+
`seat_sweep.angle`, and `location` independently. A location intent covers X, Y, and Z;
|
|
723
|
+
its `format(decimals=...)` applies to all three. Generated scripts retain the full
|
|
724
|
+
geometry and these intents.
|
|
725
|
+
|
|
668
726
|
```python
|
|
669
727
|
ramp = sheet.paired_ramp_step(
|
|
670
728
|
axis="y",
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "draftwright"
|
|
7
|
-
version = "0.4.
|
|
7
|
+
version = "0.4.29"
|
|
8
8
|
description = "Automated technical-drawing generation for build123d"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { file = "LICENSE" }
|
|
@@ -22,8 +22,8 @@ dependencies = [
|
|
|
22
22
|
# This novtk release lacks OCP.GccEnt on macOS. The exclusion must reach
|
|
23
23
|
# published wheels, not only uv's development resolver constraints.
|
|
24
24
|
"cadquery-ocp-novtk!=7.9.3.1.1 ; python_full_version >= '3.13'",
|
|
25
|
-
"build123d-drafting-helpers>=0.15.
|
|
26
|
-
"quiddity==0.2.
|
|
25
|
+
"build123d-drafting-helpers>=0.15.4",
|
|
26
|
+
"quiddity==0.2.9",
|
|
27
27
|
"numpy>=1.24",
|
|
28
28
|
# PNG raster export (SVG→PDF→PNG). Both permissively licensed (Pillow HPND; pypdfium2
|
|
29
29
|
# Apache-2.0 wrapping Google PDFium BSD-3) and ship pre-built wheels with NO native system
|