draftwright 0.4.30__tar.gz → 0.4.32__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.30 → draftwright-0.4.32}/CHANGELOG.md +89 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/PKG-INFO +14 -4
- {draftwright-0.4.30 → draftwright-0.4.32}/README.md +12 -2
- {draftwright-0.4.30 → draftwright-0.4.32}/docs/reference/recogniser-capabilities.md +33 -4
- {draftwright-0.4.30 → draftwright-0.4.32}/docs/reference/sheet.md +127 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/pyproject.toml +3 -2
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/__init__.py +3 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/_core.py +118 -21
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/analysis.py +2 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/annotations/_common.py +583 -23
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/annotations/from_model.py +624 -69
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/annotations/holes.py +302 -46
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/annotations/leaders.py +502 -93
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/annotations/orchestrator.py +9 -0
- draftwright-0.4.32/src/draftwright/audit.py +1342 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/builder.py +296 -93
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/cli.py +17 -4
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/drawing.py +110 -22
- draftwright-0.4.32/src/draftwright/inspection.py +789 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/inspection_contract.py +2 -1
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/layout.py +56 -10
- draftwright-0.4.32/src/draftwright/leader_policy.py +52 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/__init__.py +4 -1
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/evidence.py +68 -14
- draftwright-0.4.32/src/draftwright/linting/gusset_rib_coverage.py +182 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/issues.py +5 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/quality.py +79 -20
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/requirements.py +12 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/slot_coverage.py +14 -6
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/structural.py +48 -2
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/model/__init__.py +14 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/model/compiled.py +15 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/model/declare.py +63 -2
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/model/detect.py +107 -1
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/model/ir.py +451 -4
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/model/planner.py +51 -5
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/model/pmi_lowering.py +274 -1
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/pmi.py +34 -1
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/recogniser_contract.py +16 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/recogniser_schema.py +12 -9
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/recognition_ownership.py +20 -4
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/registry.py +37 -1
- draftwright-0.4.32/src/draftwright/replay_assessment.py +348 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/reporting.py +1204 -17
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/section_recess_contract.py +28 -8
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/sheet.py +462 -7
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/sheet_emit.py +281 -19
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/_tier_manifest.py +3 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/conftest.py +40 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/refactor_golden/flange_dense.json +21 -40
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/refactor_golden/grid_plate.json +190 -207
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/refactor_golden/scattered_plate.json +302 -311
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_add_dimension.py +11 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_adr0018_view_selection.py +17 -2
- draftwright-0.4.32/tests/test_agent_improvement_canary_issue_1716.py +281 -0
- draftwright-0.4.32/tests/test_assessment_comparison_issue_1712.py +888 -0
- draftwright-0.4.32/tests/test_candidate_evidence_issue_1726.py +191 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_circular_blind_step_semantics.py +3 -1
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_compiled_plan_boundary.py +7 -5
- draftwright-0.4.32/tests/test_declaration_identity_issue_1710.py +151 -0
- draftwright-0.4.32/tests/test_declaration_report_issue_1710.py +139 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_declare.py +53 -0
- draftwright-0.4.32/tests/test_declared_report_issue_1688.py +113 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_detect_once.py +14 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_detect_registry.py +17 -0
- draftwright-0.4.32/tests/test_dimension_lane_canary_issue_1757.py +151 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_document_report.py +11 -4
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_e2e_standards.py +21 -6
- draftwright-0.4.32/tests/test_equivalent_dimension_presentations_issue_1759.py +102 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_external_recognition_boundary.py +57 -1
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_feature_edit_corridors.py +16 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_feature_edit_replay.py +15 -1
- draftwright-0.4.32/tests/test_feature_leader_candidate_regions.py +687 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_groove_completeness_evidence.py +11 -2
- draftwright-0.4.32/tests/test_gusset_rib_semantics.py +238 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_hole_annotations.py +17 -13
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_import_boundaries.py +11 -3
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_inspection_contract.py +1 -1
- draftwright-0.4.32/tests/test_interior_label_placement.py +268 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1130_view_planning_evidence.py +12 -46
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1143_hole_completeness.py +1 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1146_scale_completeness.py +76 -6
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1155_grm04_sheet_use.py +19 -10
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1157_no_implicit_general_tolerance.py +18 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1166_cross_pass_feature_leaders.py +5 -5
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1176_quality_fidelity.py +32 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1187_unroutable_leaders.py +1 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1202_observed_drawing_consumer.py +1 -1
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1204_multiscale_view_issues.py +1 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1215_no_approved_tolerance_is_dropped.py +24 -3
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1217_the_facility_is_shared.py +10 -1
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1219_location_claims_its_own_axis.py +27 -6
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1276_turned_leader_targets.py +3 -2
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1298_manufacturing_requirements.py +474 -17
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1299_page_escalation.py +146 -4
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1308_machined_leader_analytics.py +66 -20
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1333_bounded_ink_repair.py +11 -9
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1336_grm03_ap242_pmi_fixture.py +7 -2
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1351_structured_note_coverage.py +2 -2
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1397_unverifiable_requirement_message.py +1 -1
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1433_blend_semantics.py +2 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1460_step_inspection.py +227 -11
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1485_curved_pockets.py +4 -4
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1536_title_overflow.py +12 -11
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1543_schedule_requirements.py +1 -1
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1563_sheet_pmi_reconciliation.py +2 -2
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1585_title_block_date.py +2 -1
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1593_title_block_keepout.py +37 -4
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1612_frame_sergio_coverage.py +4 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_740_leader_assignment.py +35 -9
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_798_silhouette_lint.py +10 -7
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_885_prismatic_coverage.py +5 -8
- draftwright-0.4.32/tests/test_layout_evidence_issue_1711.py +186 -0
- draftwright-0.4.32/tests/test_layout_override_lane_issue_1757.py +264 -0
- draftwright-0.4.32/tests/test_layout_override_side_issue_1757.py +223 -0
- draftwright-0.4.32/tests/test_leader_region_policy.py +160 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_lint_structural.py +4 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_lint_suggestions.py +12 -5
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_parameter_id.py +18 -0
- draftwright-0.4.32/tests/test_pareto_loop_canary_issue_1753.py +288 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_pattern_ownership.py +1 -1
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_pitch_dim_footprint.py +54 -1
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_pmi.py +31 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_prismatic_classification.py +4 -5
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_quality_components.py +37 -0
- draftwright-0.4.32/tests/test_quiddity_lifecycle_boundary.py +308 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_recogniser_capabilities.py +47 -21
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_recogniser_contract.py +22 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_refactor_golden.py +7 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_registry.py +16 -2
- draftwright-0.4.32/tests/test_replay_assessment_issue_1715.py +517 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_report_projection.py +66 -9
- draftwright-0.4.32/tests/test_report_status_reasons_issue_1618.py +155 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_report_writer.py +3 -1
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_requirement_catalog.py +1 -1
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_requirement_catalog_families.py +1 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_section_recess_pockets.py +40 -16
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_sheet_emit.py +105 -4
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_sheet_gdt.py +5 -5
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_sheet_generation_snapshot.py +4 -3
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_sheet_identity_invariant.py +61 -11
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_slanted_blind_step.py +5 -5
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_slot_completeness.py +16 -1
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_slot_pattern.py +38 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_slot_recognition.py +45 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_strip_layout.py +38 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_through_step_semantics.py +1 -1
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_tier_manifest.py +12 -0
- draftwright-0.4.32/tests/test_title_block_units_format.py +60 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_tolerances.py +27 -0
- draftwright-0.4.32/tests/test_typed_remediation_projection_issue_1759.py +214 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_workflows.py +16 -6
- draftwright-0.4.30/src/draftwright/audit.py +0 -408
- draftwright-0.4.30/src/draftwright/inspection.py +0 -281
- {draftwright-0.4.30 → draftwright-0.4.32}/.gitignore +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/LICENSE +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/docs/adr/README.md +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/docs/research/1062-repeating-radial-profile-evidence.md +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/skills/SKILL.md +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/_build_profile.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/_geometry.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/_pmi_part21.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/_warnings.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/angular_geometry.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/annotate.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/annotations/__init__.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/annotations/angular.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/annotations/balloons.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/annotations/gears.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/annotations/sections.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/blend_contract.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/compose.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/document.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/document_evidence.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/document_input.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/evaluation/__init__.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/evaluation/step_analysis.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/export.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/feature_identity.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/fits.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/fonts/IBMPlexMono-Regular.ttf +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/fonts/IBMPlexSansCondensed-Regular.ttf +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/fonts/LICENSE-IBMPlexMono-OFL.txt +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/fonts/LICENSE-IBMPlexSansCondensed-OFL.txt +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/fonts/__init__.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/intents.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/_registry.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/angled_step_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/angular.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/blend_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/chamfer_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/channel_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/circular_blind_step_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/fillet_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/flat_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/gear_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/groove_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/hole_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/ink_overlap.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/oriented_slot_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/pad_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/paired_ramp_step_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/passage_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/plate_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/pmi_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/pocket_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/pocket_pattern_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/polygonal_boss_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/polygonal_stock_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/prismatic_pocket_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/profiled_bore_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/rectangular_blind_slot_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/round_bottom_blind_slot_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/schedule_evidence.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/section_recess_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/suggest.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/through_step_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/linting/turned_step_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/location_contract.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/make_drawing.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/measurement_support.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/model/callout.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/oriented_slot_contract.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/plate_correspondence.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/profile_angles.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/progress.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/projection.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/py.typed +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/recogniser_policy.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/recognition/__init__.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/recognition_cache.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/recognition_frame.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/repair.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/score.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/src/draftwright/view_plan.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/_burden_report.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/_corpus_cover.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/_drawing_helpers.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/_evidence_contract.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/_kernel.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/_layout_helpers.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/_layout_sig.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/_mutation_corpus.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/_parts.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/_recogniser_public_contract.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/_section_recess_cases.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/_unit_manifest.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/ap242_single_cylinder_diameter.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/README.md +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/ambiguous-open-semicircle.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/blind-hole.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/chamfer-asymmetric.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/chamfer-compound.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/chamfer-overlap.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/chamfer-plain.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/chamfer-planar-x.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/chamfer-planar-y.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/chamfer-planar-z.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/chamfer-topology-a.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/chamfer-topology-b.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/chamfer-turned.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/corpus-chamfers-v1.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/corpus-countersinks-v1.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/corpus-double-d-bores-v1.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/corpus-fillets-v1.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/corpus-flats-v1.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/corpus-grooves-v1.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/corpus-hole-patterns-v1.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/corpus-plates-v1.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/corpus-pocket-patterns-v1.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/corpus-pockets-v1.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/corpus-polygonal-bosses-v1.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/corpus-polygonal-stock-v1.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/corpus-rectangular-pads-v1.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/corpus-turned-steps-v1.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/corpus-v1.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/countersink-deburr.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/countersink-external-cone.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/countersink-mixed-pair.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/countersink-single.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/countersink-topology-a.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/countersink-topology-b.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/double-d-axis-x.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/double-d-axis-y.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/double-d-blind.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/double-d-coaxial-compound.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/double-d-opposed-blind.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/double-d-roll-30.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/double-d-round-bore.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/double-d-single-z.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/double-d-topology-a.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/double-d-topology-b.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/fillet-compound.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/fillet-overlap.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/fillet-plain.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/fillet-planar-x.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/fillet-planar-y.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/fillet-planar-z.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/fillet-repeated.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/fillet-topology-a.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/fillet-topology-b.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/fillet-turned.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/flat-coaxial.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/flat-double-d.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/flat-lone-d.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/flat-nonround.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/flat-slanted-double-d.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/flat-topology-a.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/flat-topology-b.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/groove-compound.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/groove-lone-x.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/groove-lone-y.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/groove-lone-z.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/groove-monotonic-negative.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/groove-narrow.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/groove-topology-a.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/groove-topology-b.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pad-compound-equal.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pad-detached-body-negative.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pad-full-span-ledge-negative.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pad-nested-staircase-negative.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pad-topology-a.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pad-topology-b.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pad-x-negative.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pad-x-positive.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pad-y-negative.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pad-y-positive.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pad-z-negative.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pad-z-positive.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pattern-ambiguous.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pattern-grid.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pattern-topology-a.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pattern-topology-b.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/plain-block.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/plate-compound-equal.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/plate-cross-topology-a.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/plate-cross-topology-b.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/plate-detached-negative.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/plate-rotational-negative.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/plate-single-negative.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/plate-t-xz.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/plate-t-yz.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/plate-thick-negative.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/plate-u-additive.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/plate-u-cut.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pocket-compound.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pocket-edge-anchored.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pocket-lone.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pocket-opposed.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pocket-pattern-ambiguous.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pocket-pattern-grid.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pocket-pattern-linear.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pocket-pattern-pair.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pocket-pattern-topology-a.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pocket-pattern-topology-b.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pocket-prismatic-negative.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pocket-side.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pocket-through-negative.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pocket-topology-a.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pocket-topology-b.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/pocket-two-equal.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/polygonal-boss-compound-equal.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/polygonal-boss-detached-negative.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/polygonal-boss-in-plane-rotated.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/polygonal-boss-other-protrusions-negative.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/polygonal-boss-recess-negative.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/polygonal-boss-stock-negative.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/polygonal-boss-topology-a.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/polygonal-boss-topology-b.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/polygonal-boss-x.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/polygonal-boss-y.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/polygonal-boss-z.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/polygonal-stock-compound-negative.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/polygonal-stock-cylinder-negative.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/polygonal-stock-irregular-negative.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/polygonal-stock-octagon-negative.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/polygonal-stock-recess-negative.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/polygonal-stock-roll17.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/polygonal-stock-topology-a.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/polygonal-stock-topology-b.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/polygonal-stock-translated.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/polygonal-stock-x.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/polygonal-stock-y.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/topology-a.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/topology-b.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/turned-step-axis-x.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/turned-step-axis-y.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/turned-step-axis-z.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/turned-step-compound.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/turned-step-repeated-lengths.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/turned-step-through-bore.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/turned-step-topology-a.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/turned-step-topology-b.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/evaluation/turned-step-translated-blind-bore.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/grm03_thumbwheel_drive_screw.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/grm03_thumbwheel_drive_screw_ap242_pmi.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/grm04_drive_plate.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/if_step_flat_across_cylinder.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/issue_1058_wheel_rh.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/issue_1247_angled_blind_step.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/issue_1595_whistle_key_frame.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/issue_1595_whistle_key_lever.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/issue_909_basic_part_design_017_body.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/issue_915_case_study_2.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/nist_ctc_01_asme1_ap203.stp +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/nist_ctc_01_asme1_ap242.stp +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/nist_ctc_02_asme1_ap203.stp +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/nist_ctc_02_asme1_ap242.stp +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/nist_ctc_03_asme1_ap203.stp +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/nist_ctc_03_asme1_ap242.stp +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/nist_ctc_04_asme1_ap203.stp +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/nist_ctc_04_asme1_ap242.stp +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/nist_ctc_05_asme1_ap203.stp +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/nist_ctc_05_asme1_ap242.stp +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/tuner_jig_blind_obround_pockets.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/fixtures/whistle_frame_reference.step +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/refactor_golden/bracket_section.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/refactor_golden/centered_rebate.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/refactor_golden/chamfered.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/refactor_golden/filleted.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/refactor_golden/grooved_shaft.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/refactor_golden/hex_bar.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/refactor_golden/holed_slot.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/refactor_golden/pocketed.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/refactor_golden/prismatic_ladder.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/refactor_golden/side_drilled.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/refactor_golden/turned_stepped.json +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_adr0018_view_routing.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_adr_corpus.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_agents_guide.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_analysis_geometry.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_angle_patterns.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_angular_references.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_angular_rendering.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_annotation_box_composition.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_annotation_box_corpus.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_api_docs.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_architecture_docs.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_arrangement_gate.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_audit_differential.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_axial_dimensions.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_balloon_ring_standoff.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_boss_ownership.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_build_drawing_entrypoints.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_build_profile_harness.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_burden_report.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_canonical_angles.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_carve_free_position_callers.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_channel_ownership.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_cli_behavior.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_cli_report_sidecar.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_clone_budget.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_compose_then_pack.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_corpus_cover.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_counting_calls.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_coverage_mode.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_declared_recognition_gate.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_deferred_edits.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_dense_sheet_canary.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_deprecation_dates.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_depth_estimators.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_detail_views.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_diameter_deduplication.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_diameter_leaders.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_dimension_role_vocabulary.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_document_build.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_document_claim_authority.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_document_claims.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_document_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_document_report_authority.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_drawing_encapsulation.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_drawing_operations.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_drawing_state.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_dynamic_corridors.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_e2e_slice.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_export_dxf_curves.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_export_dxf_zoom.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_export_formats.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_export_reproducible.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_export_shape.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_feature_edit_verbs.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_feature_provenance.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_feature_queries.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_fillets_adjacency.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_fit_calculations.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_fits.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_flat_completeness.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_flat_stock_identity.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_flat_stock_opposition.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_format_selector.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_formatting.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_framed_step_family_evidence.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_gdt_placement.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_geometry_graph_spike.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_grid_lattice_convention.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_groove_profile.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_hole_pattern_callouts.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_hole_table.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_iso_layout.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_iso_nts_caption_placement.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_isometric_orientation.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_isometric_placement.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1000_envelope_reuse.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1006_measurement_comparison.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1058_wheel_profile.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1073_cross_body_patterns.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1082_polygonal_stock.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1086_declared_gears.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1116_ap242_hole_tolerance_lowering.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1126_requesting_less_never_scores_better.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1132_turned_profile_span_is_reported.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1142_hole_leader_labels.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1144_transactional_hole_table.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1147_legibility_pair_aggregation.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1153_contradictory_dimensions.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1154_one_owner_per_measurement.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1177_angular_dimensions.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1188_per_view_assignment.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1190_section_decision.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1196_deterministic_view_names.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1209_linear_pmi_witnesses.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1215_envelope_tolerance.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1216_callout_reservation_measures_ink.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1216_pairwise_across_scale_groups.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1217_claimed_representations.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1229_ledger_member_keying.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1240_iso_above_strip_visibility.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1245_passage_disposition.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1246_prismatic_pocket_disposition.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1247_angled_step_disposition.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1254_turned_chamfers.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1260_view_constraints.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1262_automatic_turned_views.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1281_turned_fillets.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1296_cylindrical_diameter_pmi.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1312_engine_costs.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1325_nominal_agreement.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1332_overlap_remedy.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1332_zone_labels.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1334_prevent_ink.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1338_scale_before_page_escalation.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1349_precision_display.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1350_detected_takeover.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1352_searchable_pdf_text.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1353_cnc_authoritative_workflow.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1357_framed_activation.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1357_framed_boundary.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1357_plural_turned_profiles.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1357_pmi_frame.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1360_thread_depth.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1369_hole_completeness_evidence.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1370_countersink_completeness_evidence.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1370_double_d_completeness_evidence.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1370_hole_pattern_completeness_evidence.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1371_flat_completeness_evidence.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1371_polygonal_stock_completeness_evidence.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1373_plate_completeness_evidence.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1374_chamfer_completeness_evidence.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1374_fillet_completeness_evidence.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1374_turned_step_completeness_evidence.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1378_diameter_leader_targets.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1390_sheet_registration.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1392_recognisers_048.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1395_degenerate_iso_region.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1396_layout_advisories.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1421_rectangular_blind_slot_completeness.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1421_rectangular_blind_slot_semantics.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1421_round_bottom_blind_slot_completeness.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1421_round_bottom_blind_slot_semantics.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1432_adoption.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1432_boundary_failures.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1432_oriented_slot_semantics.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1450_boss_blend_ownership.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1466_dimension_options.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1466_semantic_sides.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1479_radius_leader_targets.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1485_quiddity_024_boundary.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1485_rounded_pockets.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1505_diameter_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1505_short_axial_chains.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1511_turned_boss_heights.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1514_projection_safeguard.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1515_first_angle.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1516_dimension_text.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1517_through_indicator.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1518_explicit_rear.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1524_tolerance_magnitude.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1530_section_provenance.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1531_semantic_hole_counts.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1532_authored_section_examples.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1533_review_diagnostics.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1534_build_progress.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1543_feature_schedules.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1544_frame_document_canary.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1555_turned_recognition_format_invariance.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1560_envelope_axes.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1596_bolt_circle_corroboration.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1598_hex_pockets.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1599_duplicate_slot_widths.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1601_flat_precision.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1603_cli_output_paths.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1604_internal_section.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1612_sheet_margins.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_1613_circular_channel.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_367_leader_ink.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_443_grm03_axial_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_563_placement_intent.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_676_polygonal_boss.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_676_polygonal_boss_declare.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_798_floor_cardinality.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_798_material_field.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_827_real_part_canary.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_883_location_identity.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_909_sloped_profile.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_915_dense_case.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_916_pocket_leader.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_917_open_channel.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_924_zero_length_shoulders.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_955_height_contingency.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_issue_958_cross_solid_recognition.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_label_provenance.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_layout.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_layout_cleanliness.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_layout_constants.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_layout_generalisation.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_layout_hypothesis.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_layout_property.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_leader_footprint.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_lint_box_cache.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_lint_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_lint_ink_overlap.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_lint_reconciliation.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_lint_summary.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_linting.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_location_dimensions.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_location_vocabulary.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_machined_feature_callouts.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_make_drawing_entrypoints.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_nested_recognition_ownership.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_note_verb.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_object_aspects.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_occupancy_boxes.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_occurrence_recognition_ownership.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_overall_height_coverage.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_pad_completeness_evidence.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_paired_ramp_semantics.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_part_classification.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_part_model.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_place_dimension.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_plate_ownership.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_pmi_common_labels.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_pmi_datum_lowering.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_pmi_gtol_lowering.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_pmi_part21.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_pocket_completeness_evidence.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_pocket_pattern.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_pocket_pattern_completeness_evidence.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_pocket_pattern_recognition.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_polygonal_boss_completeness_evidence.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_principal_profile_classifier.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_prismatic_boss_diameter.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_prismatic_dimensions.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_private_test_attr_reads.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_private_test_imports.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_profile_angles.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_projection_symbol_default.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_real_part_fixtures.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_recogniser_adoption.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_recogniser_policy.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_recogniser_step_inventory.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_recognition_boundary_failures.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_recognition_evidence_schema.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_recognition_policy_dispositions.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_recognition_result.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_render_seam.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_repack_geometry_seam.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_repair.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_requirement_applicability.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_requirement_carriers.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_scale_policy.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_scale_selection.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_score.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_script_detail_parity.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_section_hatching.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_section_recess_contract.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_shared_box_memo.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_shared_drawing_cache.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_sheet_furniture.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_sheet_notes.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_sheet_of.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_sheet_section.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_sheet_tables.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_slot_pattern_recognition.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_soft_deprecation.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_solve_trace.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_step_analysis_evaluation.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_strip_zones.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_suite_shape.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_suppression_ledger.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_suppression_marks.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_through_step_ownership.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_turned_diameters.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_turned_lengths.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_turned_step_ownership.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_turned_steps.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_two_pass_layout.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_typ_dimensions.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_version_bump_ci.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_view_blocks.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_view_coordinates.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_view_plan.py +0 -0
- {draftwright-0.4.30 → draftwright-0.4.32}/tests/test_witness_label_reconciliation.py +0 -0
|
@@ -4,6 +4,81 @@
|
|
|
4
4
|
|
|
5
5
|
### Added
|
|
6
6
|
|
|
7
|
+
- A hash-pinned AP242 CTC-01 canary now proves the full Pareto-first layout loop against
|
|
8
|
+
a reviewed 80-measurement denominator: read typed finding remedies, apply only two public
|
|
9
|
+
declaration-side overrides, replay once, and establish legibility-only dominance while 12
|
|
10
|
+
unresolved claims remain carried and certification remains unavailable (#1753). Detailed
|
|
11
|
+
diagnostic prose remains optional presentation derived from structured evidence, never a
|
|
12
|
+
comparison identity or decision input.
|
|
13
|
+
- Declared slot width and length dimensions now expose bounded, feature-relative lanes through
|
|
14
|
+
`DimensionIntent.place(lane=...)` and declaration-scoped
|
|
15
|
+
`layout_override(..., parameter=..., lane=...)`. Generated scripts and report-v8 evidence
|
|
16
|
+
retain the layout-only policy; the shared solver admits only wholly interior or exterior,
|
|
17
|
+
page-safe, ink-clear candidates and reports bounded blocker evidence when a requested lane is
|
|
18
|
+
infeasible. Automatic drawings and scripts without lane intent remain unchanged (#1757).
|
|
19
|
+
- Declared sheets now support append-only, build-scoped `layout_override(..., side=...)`
|
|
20
|
+
edits plus structured capability and validation queries. Overrides select only a semantic
|
|
21
|
+
corridor, retain declaration identity through generated-script replay, and appear as
|
|
22
|
+
layout-only resolution evidence in declared report v8; coordinates and engineering meaning
|
|
23
|
+
remain unchanged, and sheets without overrides preserve existing behaviour (#1757).
|
|
24
|
+
- Raw automatic report assessments now include a typed remediation projection that separates
|
|
25
|
+
contradictions, missing carriers, layout, importer/lowering, source ambiguity, and unavailable
|
|
26
|
+
evidence. It retains affected evidence identities, names preservation invariants, advertises
|
|
27
|
+
only bounded public actions, and leaves unknown findings unclassified without guessing (#1759).
|
|
28
|
+
- Raw automatic reports now lead agents with a vector-first `lint.assessment`: per-axis status,
|
|
29
|
+
affected counts, available denominators, unavailable reasons, and stable structured reasons
|
|
30
|
+
for every `needs-attention` verdict. Its human summary is rendered from the same reason rows,
|
|
31
|
+
while legacy lint scores remain compatibility-only diagnostics and cannot select status
|
|
32
|
+
(#1609, #1618).
|
|
33
|
+
- Replay comparison now matches unresolved measurement evidence by its serialized annotation,
|
|
34
|
+
table cell, or ownerless parameter identity and classifies it as carried, resolved,
|
|
35
|
+
introduced, changed, or ambiguous. Carried uncertainty keeps certification unavailable but
|
|
36
|
+
no longer erases an otherwise Pareto-dominant layout improvement; new, changed, or duplicate
|
|
37
|
+
identities fail closed (#1753).
|
|
38
|
+
- Assessment comparison v2 reports independently evidenced requirement, completeness,
|
|
39
|
+
fidelity, legibility, and restraint axes plus their Pareto relation. Dominance,
|
|
40
|
+
equivalence, domination, incomparability, and unavailable evidence are derived from concrete
|
|
41
|
+
transitions rather than any legacy diagnostic, component, or audited-completeness score
|
|
42
|
+
(#1609). The v1 `decision` remains temporarily as a deprecated compatibility policy result.
|
|
43
|
+
- Stadium through-slots now retain Quiddity 0.3.2's proved end radius through detection,
|
|
44
|
+
declared `Sheet` scripts, compiled measurement identity, placement, and completeness. A
|
|
45
|
+
normal-to-arc `2× R…` leader distinguishes an obround from an equal-sized rectangular slot
|
|
46
|
+
without introducing coordinate placement (#1752).
|
|
47
|
+
- The Quiddity 0.3.2 adoption also retains corrected overall extents for rounded-corner
|
|
48
|
+
rectangular slots. Hole-pattern records whose members differ only along the drilling axis
|
|
49
|
+
are explicitly refused at the drafting boundary, preserving their ordinary grouped-hole
|
|
50
|
+
requirements instead of emitting a coincident, undrawable pitch pattern.
|
|
51
|
+
- Feature-leader placement now has one coordinate-free drawing policy across
|
|
52
|
+
`build_drawing`, `make_drawing`, `Sheet`, generated scripts, and the CLI. The default
|
|
53
|
+
`auto` policy keeps the shared interior/exterior solve, `interior` requires proved
|
|
54
|
+
interior candidates for eligible unconstrained families, and `exterior` restores the
|
|
55
|
+
historical exterior-only layout for existing diagrams.
|
|
56
|
+
- The standard title block now states drawing `UNITS` (`mm`) and the effective sheet `FORMAT`
|
|
57
|
+
(for example `A2`). Dimension-specified A-series pages receive the standard designation;
|
|
58
|
+
non-standard pages state their actual `WIDTHxHEIGHT`. Its rows share a four-line column grid,
|
|
59
|
+
avoiding visually offset dividers between adjacent fields.
|
|
60
|
+
- A bounded real-part canary now proves the complete agent improvement loop on NIST CTC-01
|
|
61
|
+
(#1716): inspection-to-declaration joins, traced baseline, one sanctioned `Sheet` layout edit,
|
|
62
|
+
replay assessment, fixed-denominator comparison, and fail-closed deletion/owner/provenance
|
|
63
|
+
checks. It performs exactly two CAD builds in the existing single PR canary lane.
|
|
64
|
+
- Replay assessments v2 now retain exact confirmed compiled measurement meanings, and
|
|
65
|
+
`compare_assessments()` evaluates two same-source replays as separate semantic, lint,
|
|
66
|
+
completeness, fidelity, layout, and availability deltas (#1712). Caller-fixed requirements
|
|
67
|
+
expose shared omissions; authorised design changes remain separate; no composite score is
|
|
68
|
+
produced.
|
|
69
|
+
- Generated scripts now atomically write a versioned post-build replay assessment beside their
|
|
70
|
+
outputs (#1715). It binds the exact STEP and edited Python bytes, producer/run options, output
|
|
71
|
+
hashes, declaration/representation map, layout evidence, and lint from the same finalized
|
|
72
|
+
drawing. Failed replays clear only stale Draftwright-owned assessments; `--no-report` opts out.
|
|
73
|
+
- Declared drawing report schema v8 publishes page/view geometry, named annotation ink and
|
|
74
|
+
public line segments, raw-lint joins, semantic remedy choices, and explicit opt-in solver
|
|
75
|
+
evidence (#1711). Coordinates are review evidence only; editable links remain final-IR
|
|
76
|
+
declarations, and an untraced or partially traced build says so instead of appearing clear.
|
|
77
|
+
- STEP inspection schema v4 projects a deterministic report-local source-face roster and
|
|
78
|
+
Quiddity 0.3.1's closed graph rooted at rejected candidates (#1726). Accepted occurrences and
|
|
79
|
+
candidates carry exact defining/constituent face links; rejected roots and direct relationships
|
|
80
|
+
reconcile with aggregate lifecycle counts. The report still states that this is diagnostic
|
|
81
|
+
evidence, not precision, recall, missed-feature truth, or persistent topology identity.
|
|
7
82
|
- Circular-seat recognition, declared features, and generated-script replay (#1613).
|
|
8
83
|
Diameter, open run, arc sweep, and three datum-to-axis coordinates retain each physical
|
|
9
84
|
seat's measurement identities, including counted coaxial callouts and shared axis marks.
|
|
@@ -13,6 +88,20 @@
|
|
|
13
88
|
|
|
14
89
|
### Fixed
|
|
15
90
|
|
|
91
|
+
- Assessment comparison now rejects an apparent resolution of measurement uncertainty when the
|
|
92
|
+
declaration carrying that unresolved annotation was removed. Deleting crossed GD&T ink can no
|
|
93
|
+
longer masquerade as evidence improvement; genuine resolution with the carrier retained still
|
|
94
|
+
compares normally (#1753).
|
|
95
|
+
- Imported upper/lower limit dimensions now retain their typed absolute interval through the
|
|
96
|
+
compiled evidence boundary. Both bounds together satisfy the owned nominal claim, while a
|
|
97
|
+
changed/missing bound or two coincidental numbers around the nominal still produces
|
|
98
|
+
`claimed_value_absent`; count and through requirements remain separate (#1759).
|
|
99
|
+
- Adopt Quiddity 0.3.1 and require its public rejected-candidate reference in the
|
|
100
|
+
evidence contract (#1726). The provider now suppresses rectangular recess candidates
|
|
101
|
+
that are not material-empty and restores passage discovery used during rotational
|
|
102
|
+
reconciliation; Draftwright's recognition and real-part regression corpora retain
|
|
103
|
+
their reviewed expectations.
|
|
104
|
+
|
|
16
105
|
- Direct and generated builds use the same final IR step ladder for page layout (#1592).
|
|
17
106
|
Raw face levels owned by another feature no longer reserve a phantom step corridor at
|
|
18
107
|
the title-block clearance threshold.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: draftwright
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.32
|
|
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
|
|
@@ -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.
|
|
695
|
+
Requires-Dist: quiddity==0.3.3
|
|
696
696
|
Requires-Dist: reportlab>=4.0
|
|
697
697
|
Requires-Dist: rich>=10.11
|
|
698
698
|
Requires-Dist: steputils==0.1
|
|
@@ -757,14 +757,17 @@ draftwright my_part.step --format pdf,dxf # also: svg, all
|
|
|
757
757
|
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
|
+
draftwright my_part.step --leader-region exterior # historical exterior-only callouts
|
|
760
761
|
draftwright my_part.step --script # write an editable declarative Sheet script
|
|
761
762
|
draftwright /parts/my_part.step --out-dir . # explicitly write into the working directory
|
|
762
763
|
draftwright my_part.step --out-dir drawings # create/use a separate output directory
|
|
763
764
|
```
|
|
764
765
|
|
|
765
766
|
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
|
|
767
|
-
|
|
767
|
+
nested input path. `--script` writes its Python file and recognition-inspection sidecar there;
|
|
768
|
+
replaying the script writes the requested drawings and a distinct current-build assessment,
|
|
769
|
+
then prints that assessment path. The script retains that output destination when run from
|
|
770
|
+
another directory. Use `--out-dir DIR`
|
|
768
771
|
to choose a directory, or `--out PREFIX` to choose a basename as well (these options are
|
|
769
772
|
mutually exclusive). Relative overrides use the current working directory. Live object
|
|
770
773
|
scripts (`module:part`) default to `drawing.py` in the working directory.
|
|
@@ -974,6 +977,10 @@ completeness = crit["quality"]["completeness"]
|
|
|
974
977
|
# became a requirement. (Recognized nothing auditable at all? available is False, not 1.0.)
|
|
975
978
|
audited = completeness["audited_score"]
|
|
976
979
|
assert completeness["scope"] == "audited_recognized_requirements"
|
|
980
|
+
# An aggregate outcome whose physical count is unknown makes the denominator and score
|
|
981
|
+
# indeterminate rather than treating its placeholder row as one requirement.
|
|
982
|
+
completeness["known_requirement_count"]
|
|
983
|
+
completeness["unknown_cardinality_rows"], completeness["unknown_cardinality"]
|
|
977
984
|
completeness["excludes"] # what the denominator cannot see
|
|
978
985
|
completeness["unrecognised_geometry_reports"] # a floor on that gap, never a measure
|
|
979
986
|
legibility = crit["quality"]["legibility"]
|
|
@@ -1002,6 +1009,9 @@ engineering-correct; plain deletion is not an accepted-waiver mechanism.
|
|
|
1002
1009
|
can audit, how many were placed?" — so a part can score 1.0 with whole features missing from the
|
|
1003
1010
|
drawing, if recognition never identified them. Gate on issue codes and severities, and read
|
|
1004
1011
|
`excludes` and `unrecognised_geometry_reports` for what the denominator cannot account for.
|
|
1012
|
+
If any producer reports unknown physical cardinality, `requirements` and `audited_score` are
|
|
1013
|
+
`None`, `coverage` is `"indeterminate"`, and `unknown_cardinality` identifies the aggregate
|
|
1014
|
+
family/parameter outcomes requiring review.
|
|
1005
1015
|
|
|
1006
1016
|
Each `LintIssue` carries a domain-meaningful `code` and, when computable, a
|
|
1007
1017
|
ready-to-apply `suggestion`. See `docs/adr/` for the design (deterministic
|
|
@@ -54,14 +54,17 @@ draftwright my_part.step --format pdf,dxf # also: svg, all
|
|
|
54
54
|
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
|
+
draftwright my_part.step --leader-region exterior # historical exterior-only callouts
|
|
57
58
|
draftwright my_part.step --script # write an editable declarative Sheet script
|
|
58
59
|
draftwright /parts/my_part.step --out-dir . # explicitly write into the working directory
|
|
59
60
|
draftwright my_part.step --out-dir drawings # create/use a separate output directory
|
|
60
61
|
```
|
|
61
62
|
|
|
62
63
|
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
|
|
64
|
-
|
|
64
|
+
nested input path. `--script` writes its Python file and recognition-inspection sidecar there;
|
|
65
|
+
replaying the script writes the requested drawings and a distinct current-build assessment,
|
|
66
|
+
then prints that assessment path. The script retains that output destination when run from
|
|
67
|
+
another directory. Use `--out-dir DIR`
|
|
65
68
|
to choose a directory, or `--out PREFIX` to choose a basename as well (these options are
|
|
66
69
|
mutually exclusive). Relative overrides use the current working directory. Live object
|
|
67
70
|
scripts (`module:part`) default to `drawing.py` in the working directory.
|
|
@@ -271,6 +274,10 @@ completeness = crit["quality"]["completeness"]
|
|
|
271
274
|
# became a requirement. (Recognized nothing auditable at all? available is False, not 1.0.)
|
|
272
275
|
audited = completeness["audited_score"]
|
|
273
276
|
assert completeness["scope"] == "audited_recognized_requirements"
|
|
277
|
+
# An aggregate outcome whose physical count is unknown makes the denominator and score
|
|
278
|
+
# indeterminate rather than treating its placeholder row as one requirement.
|
|
279
|
+
completeness["known_requirement_count"]
|
|
280
|
+
completeness["unknown_cardinality_rows"], completeness["unknown_cardinality"]
|
|
274
281
|
completeness["excludes"] # what the denominator cannot see
|
|
275
282
|
completeness["unrecognised_geometry_reports"] # a floor on that gap, never a measure
|
|
276
283
|
legibility = crit["quality"]["legibility"]
|
|
@@ -299,6 +306,9 @@ engineering-correct; plain deletion is not an accepted-waiver mechanism.
|
|
|
299
306
|
can audit, how many were placed?" — so a part can score 1.0 with whole features missing from the
|
|
300
307
|
drawing, if recognition never identified them. Gate on issue codes and severities, and read
|
|
301
308
|
`excludes` and `unrecognised_geometry_reports` for what the denominator cannot account for.
|
|
309
|
+
If any producer reports unknown physical cardinality, `requirements` and `audited_score` are
|
|
310
|
+
`None`, `coverage` is `"indeterminate"`, and `unknown_cardinality` identifies the aggregate
|
|
311
|
+
family/parameter outcomes requiring review.
|
|
302
312
|
|
|
303
313
|
Each `LintIssue` carries a domain-meaningful `code` and, when computable, a
|
|
304
314
|
ready-to-apply `suggestion`. See `docs/adr/` for the design (deterministic
|
|
@@ -70,11 +70,33 @@ 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.
|
|
73
|
+
### Quiddity 0.3.3 runtime contract
|
|
74
74
|
|
|
75
|
-
The runtime pins the published `quiddity==0.
|
|
75
|
+
The runtime pins the published `quiddity==0.3.3` package. This release adds material-side
|
|
76
|
+
reconstruction facts to fillets, planar chamfers and angled steps, paired ramps, and open-section
|
|
77
|
+
profiles. Draftwright consumes these records to describe and annotate the recognised part; it does
|
|
78
|
+
not reconstruct a cut solid from them, so the new `side`, `corner`, `opening_direction`,
|
|
79
|
+
`half_width`, and `material_side` fields do not enter the drafting IR. The exact consumer schema
|
|
80
|
+
declarations advance with the provider, and the section-recess adapter accepts document schema 4
|
|
81
|
+
while continuing to reject unknown later schemas.
|
|
82
|
+
|
|
83
|
+
Version 0.3.2 followed the 0.2.4 adoption in
|
|
76
84
|
[#1486](https://github.com/pzfreo/draftwright/pull/1486) and the migration in
|
|
77
|
-
[#1471](https://github.com/pzfreo/draftwright/issues/1471).
|
|
85
|
+
[#1471](https://github.com/pzfreo/draftwright/issues/1471). It advanced the public
|
|
86
|
+
`Slot` record to schema 2: `end_radius` distinguishes two semicircular stadium ends and
|
|
87
|
+
`corner_radius` distinguishes rounded rectangular corners. Draftwright consumes
|
|
88
|
+
`end_radius` for through-slot radius requirements; rounded-corner rectangular slots remain a
|
|
89
|
+
separate drafting-policy decision, although their corrected overall extents feed the existing
|
|
90
|
+
width/length grammar. A published hole-pattern relation whose members differ only along their
|
|
91
|
+
drilling axis is retained as recognition evidence but refused as a drawing pattern: its axes
|
|
92
|
+
coincide in the required end view, so Draftwright keeps the ordinary grouped-hole owner instead.
|
|
93
|
+
Version 0.3.1 retained the same 29 families and record
|
|
94
|
+
schemas while tightening material-empty gating for rectangular recesses,
|
|
95
|
+
restoring passage discovery during rotational reconciliation, and adding the public opaque
|
|
96
|
+
`CandidateRef` evidence surface delivered by
|
|
97
|
+
[quiddity#688](https://github.com/pzfreo/quiddity/issues/688). Draftwright requires that symbol
|
|
98
|
+
in the released evidence manifest before consuming candidate-level evidence. 0.2.7 was a patch
|
|
99
|
+
adoption that required
|
|
78
100
|
circumferential cylinder support to establish a turned-profile axis line, so rounded plate corners
|
|
79
101
|
and parallel offset cylinders no longer form a false stepped shaft
|
|
80
102
|
([quiddity#586](https://github.com/pzfreo/quiddity/issues/586), [#1555](https://github.com/pzfreo/draftwright/issues/1555)).
|
|
@@ -102,7 +124,14 @@ and untested. Its public `quiddity`, `quiddity.evidence` and
|
|
|
102
124
|
reads. There is one recognition aggregate per build; consumers project that result rather than
|
|
103
125
|
calling the document builder to obtain another run.
|
|
104
126
|
|
|
105
|
-
The manifest has
|
|
127
|
+
The manifest has 29 families. The `gusset-ribs` family proves rib thickness, support legs and
|
|
128
|
+
body occurrence, while `gusset-rib-patterns` relates accepted ribs as arrays or mirror pairs.
|
|
129
|
+
Draftwright preserves those exact member relations in dedicated `GussetRibFeature` IR, exposes
|
|
130
|
+
the same facts through `Sheet.gusset_rib(...)` and generated scripts, and places one correlated
|
|
131
|
+
solver-owned callout carrying thickness, both legs and the proven pitch or mirror spacing. The
|
|
132
|
+
completeness ledger follows each physical member and the group relation independently (#1705).
|
|
133
|
+
|
|
134
|
+
One `section-recesses` family replaces the former pockets, pocket
|
|
106
135
|
patterns, channels, rectangular and round-bottom blind slots, passages and prismatic pockets.
|
|
107
136
|
`RecognitionResult.section_recesses` contains the immutable occurrences;
|
|
108
137
|
`section_recess_patterns` relates them by run-local occurrence indices; `section_recess_refusals`
|
|
@@ -56,6 +56,12 @@ beyond each centreline. Without an explicit width, the existing widths remain 12
|
|
|
56
56
|
A4 and 150 mm on larger ISO sheets, with the existing extra 1 mm right/bottom clearance.
|
|
57
57
|
Revision defaults also remain unchanged.
|
|
58
58
|
|
|
59
|
+
The standard title block derives two read-only fields from the settled drawing: `UNITS` is
|
|
60
|
+
`mm`, matching Draftwright's drawing and export coordinate convention, and `FORMAT` is the
|
|
61
|
+
effective A-series designation (for example `A2`). A non-standard page states its physical
|
|
62
|
+
`WIDTHxHEIGHT` instead. These are derived after automatic page selection, so they cannot drift
|
|
63
|
+
from the sheet that was actually rendered.
|
|
64
|
+
|
|
59
65
|
CLI parameters carry the same options into rendered drawings and generated scripts:
|
|
60
66
|
|
|
61
67
|
```sh
|
|
@@ -145,6 +151,31 @@ SVG, PDF and DXF export the same resolved ink. Unsupported values raise `ValueEr
|
|
|
145
151
|
The choices affect rendering and its placement footprint, not feature measurements
|
|
146
152
|
or tolerances. These are explicit rendering choices, not a claim of standards conformity.
|
|
147
153
|
|
|
154
|
+
## Feature-leader region policy
|
|
155
|
+
|
|
156
|
+
Feature callouts may use proved whitespace inside a projected view without exposing raw page
|
|
157
|
+
coordinates. The drawing-wide `leader_region` policy is accepted by `Sheet(...)`,
|
|
158
|
+
`build_drawing()`, `make_drawing()`, and generated scripts:
|
|
159
|
+
|
|
160
|
+
```python
|
|
161
|
+
sheet = Sheet(part, leader_region="exterior")
|
|
162
|
+
# or: build_drawing(part, leader_region="interior")
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
- `"auto"` is the default and preserves the normal solve: eligible feature families offer
|
|
166
|
+
interior candidates while retaining their established exterior fallback.
|
|
167
|
+
- `"interior"` requires an interior candidate for an eligible, unconstrained feature. It does
|
|
168
|
+
not invent interior geometry for unsupported families; those remain exterior. If no proved
|
|
169
|
+
interior candidate fits, the eligible callout drops and lint reports it.
|
|
170
|
+
- `"exterior"` removes all interior candidates and restores the historical exterior-only
|
|
171
|
+
feature-leader layout.
|
|
172
|
+
|
|
173
|
+
The CLI spelling is `--leader-region auto|interior|exterior`. Generated `--script` output
|
|
174
|
+
retains a non-default selection in its `Sheet(...)` constructor. A feature carrying an explicit
|
|
175
|
+
`side="left"|"right"|"above"|"below"` remains exterior because authored placement intent is
|
|
176
|
+
stronger than the drawing-wide preference. The policy affects feature leaders only—not linear
|
|
177
|
+
dimensions, free notes, tables, or view placement—and never supplies coordinates.
|
|
178
|
+
|
|
148
179
|
## Through-hole wording
|
|
149
180
|
|
|
150
181
|
The optional argument to a hole handle's `through()` controls its printed indicator:
|
|
@@ -192,6 +223,76 @@ The token associates features; it does not specify an annotation position or add
|
|
|
192
223
|
Generated scripts preserve this association using Draftwright-owned tokens instead of provider
|
|
193
224
|
keys. A groove can still be declared when the authored set omits all of that body's steps.
|
|
194
225
|
|
|
226
|
+
## Build-scoped declaration selectors
|
|
227
|
+
|
|
228
|
+
An editable script can give a feature a declaration identity and later address that intent
|
|
229
|
+
without a list position:
|
|
230
|
+
|
|
231
|
+
```python
|
|
232
|
+
hole = sheet.hole(diameter=6, at=(0, 0, 0), axis="z").identify("declaration:1")
|
|
233
|
+
sheet.dimension(sheet.by_declaration("declaration:1"), "bore.diameter")
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
The identity follows fluent replacements such as `.depth()` and identity-preserving list
|
|
237
|
+
reorders. Assigning another feature into its public `sheet.features` slot or deleting it
|
|
238
|
+
withdraws the identity; it never transfers to the new occupant. Live IDs must be unique.
|
|
239
|
+
Generated scripts use this build-scoped selector to join assessment evidence back to editable
|
|
240
|
+
intent. It is not a persistent feature, face or topology ID and makes no correspondence promise
|
|
241
|
+
across recognition runs. Recognition occurrence IDs, when present, remain local to the exact
|
|
242
|
+
generation run recorded by the declaration.
|
|
243
|
+
|
|
244
|
+
### Declaration-scoped layout overrides
|
|
245
|
+
|
|
246
|
+
An agent editing a generated script can append a bounded layout override without changing the
|
|
247
|
+
original feature declaration or supplying page coordinates:
|
|
248
|
+
|
|
249
|
+
```python
|
|
250
|
+
options = sheet.layout_options("declaration:57")
|
|
251
|
+
check = sheet.validate_layout_override("declaration:57", side="above")
|
|
252
|
+
if check["supported"]:
|
|
253
|
+
sheet.layout_override("declaration:57", side="above")
|
|
254
|
+
|
|
255
|
+
lane_options = sheet.layout_options(
|
|
256
|
+
"declaration:9", parameter="slot_width.length"
|
|
257
|
+
)
|
|
258
|
+
lane_check = sheet.validate_layout_override(
|
|
259
|
+
"declaration:9", parameter="slot_width.length", lane=3
|
|
260
|
+
)
|
|
261
|
+
if lane_check["supported"]:
|
|
262
|
+
sheet.layout_override(
|
|
263
|
+
"declaration:9", parameter="slot_width.length", lane=3
|
|
264
|
+
)
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
Without `parameter=`, `layout_options()` reports the declaration's current side and supported
|
|
268
|
+
values. With an exact declared parameter it reports dimension-lane capability. A lane is an
|
|
269
|
+
integer from 1 through 8: a one-based drafting-spaced rank from that dimension's physical
|
|
270
|
+
witness, not a distance. The shared measured-candidate solve may resolve it into proven
|
|
271
|
+
whitespace inside or outside the view and records that candidate's region explicitly. The
|
|
272
|
+
current lane-capable slice is the linear width/length dimensions of slots. Capability is
|
|
273
|
+
declared in one compiler-owned registry so another dimension family is added deliberately, not
|
|
274
|
+
by teaching each renderer a private spelling.
|
|
275
|
+
|
|
276
|
+
The side surface accepts `above`, `below`, `left`, and `right`;
|
|
277
|
+
`validate_layout_override()` returns
|
|
278
|
+
structured `invalid_declaration`, `unsupported_declaration`, `unsupported_control`, or
|
|
279
|
+
`unsupported_value` refusals, plus `invalid_control_combination` when side and lane addressing
|
|
280
|
+
are mixed, without mutating the sheet. Both documents say
|
|
281
|
+
`requires_build_validation: true`: support means that the declaration and vocabulary are valid,
|
|
282
|
+
not that the final sheet has enough space. `build()` and `lint()` remain the authority for
|
|
283
|
+
feasibility and collision-free placement.
|
|
284
|
+
|
|
285
|
+
`layout_override()` accepts either keyword-only `side`, or an exact `parameter` plus `lane`, and
|
|
286
|
+
rejects duplicate overrides for the same target. Side chooses a feature corridor; lane ranks a
|
|
287
|
+
parallel position for one referential dimension. Neither is pinning or priority, and neither moves
|
|
288
|
+
an annotation to a caller-supplied coordinate or changes its measurement, tolerance, datum, or
|
|
289
|
+
other engineering semantics. Generated scripts
|
|
290
|
+
emit the override as a separate line after the identity-bearing declarations. A declared report
|
|
291
|
+
records the requested and resolved value under `layout.overrides` with
|
|
292
|
+
`intent_class: "layout-only"`; lane rows also retain `parameter_id`. An infeasible lane drops
|
|
293
|
+
honestly with the requested lane in the lint message. Omitting the override retains the existing
|
|
294
|
+
placement behaviour.
|
|
295
|
+
|
|
195
296
|
## Checking dimension placement rules
|
|
196
297
|
|
|
197
298
|
Call `handle.dimension_ids()` to find the measurements a declared feature exposes, then
|
|
@@ -625,6 +726,23 @@ callout. More general ordered operation stacks remain tracked by issue #1360. Un
|
|
|
625
726
|
requirement has a structured parameter, use a feature-linked `note(..., satisfies=(...))` only
|
|
626
727
|
for parameter ids the handle actually exposes; free prose does not satisfy coverage.
|
|
627
728
|
|
|
729
|
+
Generated scripts and editing agents use `structured_note(...)` when the note declaration
|
|
730
|
+
itself needs a stable selector:
|
|
731
|
+
|
|
732
|
+
```python
|
|
733
|
+
note = sheet.structured_note(
|
|
734
|
+
"BORE DIAMETER VERIFIED",
|
|
735
|
+
stack,
|
|
736
|
+
satisfies=("bore.diameter",),
|
|
737
|
+
).identify("declaration:note", provenance="structured-note")
|
|
738
|
+
same_note = sheet.by_declaration("declaration:note")
|
|
739
|
+
```
|
|
740
|
+
|
|
741
|
+
It declares the same solver-placed manufacturing note as `note(...)`, but returns the note's
|
|
742
|
+
own feature handle rather than returning the `Sheet` for chaining. The handle controls intent,
|
|
743
|
+
not page coordinates. Final reports can therefore link the declaration to its exact placed ink
|
|
744
|
+
while separately crediting the physical feature and parameter named by `satisfies`.
|
|
745
|
+
|
|
628
746
|
### Straight and circular Blend chains
|
|
629
747
|
|
|
630
748
|
When recognition accepts a complete schema-v3 straight or circular rolling-ball Blend path that is
|
|
@@ -811,6 +929,15 @@ drop, or missing ink is not hidden by the ownership choice.
|
|
|
811
929
|
options:
|
|
812
930
|
filters: public
|
|
813
931
|
|
|
932
|
+
### Axis-aligned through-slots
|
|
933
|
+
|
|
934
|
+
`Sheet.slot(...)` declares the independently addressable `slot_width.length` and
|
|
935
|
+
`slot_length.length` measurements. Pass `end_radius=` only for a stadium/obround slot; this adds
|
|
936
|
+
`slot_end_radius.radius`, rendered as a solver-placed `2× R…` leader whose arrow remains normal
|
|
937
|
+
to either end arc. Leaving it unset preserves the rectangular-slot grammar. The declared radius
|
|
938
|
+
must equal half the width, and generated Sheet scripts retain the field when recognition proved
|
|
939
|
+
semicircular ends.
|
|
940
|
+
|
|
814
941
|
## GD&T control builder
|
|
815
942
|
|
|
816
943
|
::: draftwright.sheet._Control
|
|
@@ -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.32"
|
|
8
8
|
description = "Automated technical-drawing generation for build123d"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { file = "LICENSE" }
|
|
@@ -23,7 +23,7 @@ dependencies = [
|
|
|
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
25
|
"build123d-drafting-helpers>=0.15.4",
|
|
26
|
-
"quiddity==0.
|
|
26
|
+
"quiddity==0.3.3",
|
|
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
|
|
@@ -96,6 +96,7 @@ timeout = 300
|
|
|
96
96
|
# across its compatibility matrix.
|
|
97
97
|
markers = [
|
|
98
98
|
"slow: end-to-end integration builds, including CTC fixtures (deselected by default)",
|
|
99
|
+
"ctc04: scheduled tests that construct the CPU-heavy NIST CTC-04 drawing",
|
|
99
100
|
"scheduled: compatibility and broad-corpus contracts selected by the scheduled tier",
|
|
100
101
|
"real_part_canary: bounded real STEP semantic/export gate, selected once in PR CI",
|
|
101
102
|
"smoke: curated build-light subset for a fast local check (~30 s)",
|
|
@@ -37,6 +37,7 @@ _LAZY = {
|
|
|
37
37
|
"InspectionUnavailableError": "draftwright.inspection",
|
|
38
38
|
"inspect_step": "draftwright.inspection",
|
|
39
39
|
"Sheet": "draftwright.sheet",
|
|
40
|
+
"LeaderRegionPolicy": "draftwright.leader_policy",
|
|
40
41
|
"Document": "draftwright.document",
|
|
41
42
|
"DocumentResult": "draftwright.document",
|
|
42
43
|
"DocumentBuildError": "draftwright.document",
|
|
@@ -103,6 +104,7 @@ if TYPE_CHECKING: # static analysers / IDEs — no runtime import, no kernel co
|
|
|
103
104
|
InspectionUnavailableError,
|
|
104
105
|
inspect_step,
|
|
105
106
|
)
|
|
107
|
+
from draftwright.leader_policy import LeaderRegionPolicy
|
|
106
108
|
from draftwright.linting import lint_feature_coverage
|
|
107
109
|
from draftwright.pmi import (
|
|
108
110
|
PmiExtractionReport,
|
|
@@ -137,6 +139,7 @@ __all__ = [
|
|
|
137
139
|
"SoftDeprecationWarning",
|
|
138
140
|
"FeatureInfo",
|
|
139
141
|
"InspectionUnavailableError",
|
|
142
|
+
"LeaderRegionPolicy",
|
|
140
143
|
"PmiExtractionReport",
|
|
141
144
|
"PmiRecord",
|
|
142
145
|
"PmiSourceEntity",
|