draftwright 0.5.0rc2__tar.gz → 0.5.0rc3__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.
Files changed (817) hide show
  1. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/CHANGELOG.md +20 -5
  2. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/PKG-INFO +3 -3
  3. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/README.md +2 -2
  4. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/pyproject.toml +10 -6
  5. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/skills/SKILL.md +20 -23
  6. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/_build_profile.py +1 -1
  7. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/_core.py +5 -4
  8. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/_geometry.py +4 -2
  9. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/analysis.py +6 -6
  10. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotate.py +3 -4
  11. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_axial_render.py +2 -4
  12. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_common.py +6 -0
  13. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_diameters.py +27 -10
  14. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_envelope.py +6 -5
  15. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_locations.py +1 -1
  16. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_machined_leaders.py +3 -5
  17. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_patterns.py +2 -1
  18. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_pmi_dimensions.py +12 -12
  19. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_slots.py +4 -9
  20. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_step_lengths.py +5 -3
  21. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/angular.py +1 -1
  22. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/balloons.py +2 -2
  23. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/from_model.py +1 -1
  24. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/hole_locations.py +2 -12
  25. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/holes.py +5 -11
  26. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/leaders.py +27 -17
  27. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/routed.py +6 -2
  28. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/sections.py +1 -1
  29. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/audit.py +1 -1
  30. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/build_once.py +2 -2
  31. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/builder.py +35 -23
  32. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/compose.py +3 -4
  33. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/drawing.py +773 -152
  34. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/drawing_diagnostics.py +9 -4
  35. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/drawing_evidence.py +1 -1
  36. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/drawing_export.py +12 -97
  37. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/evaluation/_edge_profile_evidence.py +3 -1
  38. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/evaluation/_pocket_evidence.py +4 -2
  39. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/evaluation/_turned_step_evidence.py +2 -1
  40. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/evaluation/step_analysis.py +4 -3
  41. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/export.py +7 -12
  42. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/layout.py +4 -2
  43. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/layout_selection.py +5 -6
  44. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/angular.py +1 -1
  45. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/blend_coverage.py +3 -1
  46. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/boss_coverage.py +1 -1
  47. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/coverage.py +10 -7
  48. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/envelope_coverage.py +2 -2
  49. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/gear_coverage.py +4 -2
  50. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/hole_coverage.py +12 -14
  51. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/orchestration.py +5 -0
  52. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/quality.py +2 -0
  53. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/rectangular_blind_slot_coverage.py +3 -1
  54. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/round_bottom_blind_slot_coverage.py +3 -1
  55. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/structural.py +33 -7
  56. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/through_step_coverage.py +2 -2
  57. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/make_drawing.py +2 -2
  58. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/model/declare.py +1 -1
  59. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/model/detect.py +4 -2
  60. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/model/ir.py +1 -1
  61. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/model/planner.py +3 -2
  62. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/model/pmi_lowering.py +9 -2
  63. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/pdf_text.py +28 -18
  64. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/pmi.py +34 -13
  65. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/profile_angles.py +1 -1
  66. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/projection.py +5 -5
  67. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/recognition_ownership.py +1 -1
  68. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/repair.py +1 -1
  69. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/reporting.py +1 -0
  70. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/section_recess_contract.py +4 -2
  71. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/sheet.py +2 -5
  72. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/sheet_emit.py +2 -5
  73. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/sheet_views.py +2 -2
  74. draftwright-0.5.0rc3/tests/_complexity_baseline.json +149 -0
  75. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/_tier_manifest.py +305 -1
  76. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_adr_corpus.py +30 -0
  77. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_annotation_box_composition.py +5 -10
  78. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_annotation_box_corpus.py +4 -4
  79. draftwright-0.5.0rc3/tests/test_architecture_docs.py +53 -0
  80. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_build_drawing_entrypoints.py +26 -17
  81. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_circular_blind_step_semantics.py +26 -4
  82. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_compiled_plan_boundary.py +2 -2
  83. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_compose_then_pack.py +7 -7
  84. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_declare.py +5 -10
  85. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_declared_recognition_gate.py +1 -2
  86. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_deprecation_dates.py +34 -1
  87. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_diameter_leaders.py +85 -1
  88. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_document_build.py +2 -2
  89. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_drawing_encapsulation.py +79 -5
  90. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_export_formats.py +18 -98
  91. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_feature_leader_candidate_regions.py +1 -1
  92. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_gdt_placement.py +3 -1
  93. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_hole_annotations.py +1 -1
  94. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_import_boundaries.py +197 -47
  95. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1058_wheel_profile.py +1 -1
  96. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1166_cross_pass_feature_leaders.py +67 -3
  97. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1176_quality_fidelity.py +7 -3
  98. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1215_envelope_tolerance.py +2 -2
  99. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1215_no_approved_tolerance_is_dropped.py +1 -1
  100. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1298_manufacturing_requirements.py +0 -1
  101. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1352_searchable_pdf_text.py +8 -6
  102. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1370_double_d_completeness_evidence.py +1 -1
  103. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1531_semantic_hole_counts.py +1 -1
  104. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_740_leader_assignment.py +1 -1
  105. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_798_material_field.py +2 -1
  106. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_798_silhouette_lint.py +44 -0
  107. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_916_pocket_leader.py +11 -3
  108. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_layout_override_lane_issue_1757.py +0 -1
  109. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_layout_safety.py +3 -1
  110. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_layout_scheme.py +3 -3
  111. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_lint_summary.py +1 -1
  112. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_location_dimensions.py +3 -4
  113. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_note_verb.py +0 -10
  114. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_pitch_dim_footprint.py +2 -2
  115. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_pmi.py +96 -1
  116. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_pmi_records.py +1 -1
  117. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_pocket_completeness_evidence.py +1 -1
  118. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_pocket_pattern_recognition.py +6 -4
  119. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_private_test_attr_reads.py +6 -7
  120. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_quality_components.py +4 -1
  121. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_requirement_catalog.py +3 -1
  122. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_sheet_emit.py +9 -10
  123. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_sheet_section.py +4 -1
  124. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_sheet_tables.py +5 -3
  125. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_slot_recognition.py +2 -1
  126. draftwright-0.5.0rc3/tests/test_source_shape.py +239 -0
  127. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_strip_layout.py +15 -13
  128. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_tier_manifest.py +82 -4
  129. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_turned_diameters.py +48 -12
  130. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_turned_steps.py +2 -2
  131. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_workflows.py +8 -0
  132. draftwright-0.5.0rc2/src/draftwright/drawing_edits.py +0 -863
  133. draftwright-0.5.0rc2/tests/test_architecture_docs.py +0 -28
  134. draftwright-0.5.0rc2/tests/test_source_shape.py +0 -104
  135. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/.gitignore +0 -0
  136. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/LICENSE +0 -0
  137. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/docs/adr/README.md +0 -0
  138. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/docs/reference/recogniser-capabilities.md +0 -0
  139. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/docs/reference/sheet.md +0 -0
  140. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/docs/research/1062-repeating-radial-profile-evidence.md +0 -0
  141. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/__init__.py +0 -0
  142. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/_pmi_linear_geometry.py +0 -0
  143. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/_pmi_part21.py +0 -0
  144. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/_pmi_schema.py +0 -0
  145. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/_pmi_support_blockers.py +0 -0
  146. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/_warnings.py +0 -0
  147. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/angular_geometry.py +0 -0
  148. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotation_layout_profile.py +0 -0
  149. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/__init__.py +0 -0
  150. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_circular_recesses.py +0 -0
  151. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_dimension_ink.py +0 -0
  152. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_dimension_ink_repair.py +0 -0
  153. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_edge_callouts.py +0 -0
  154. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_gdt.py +0 -0
  155. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_height_ladder.py +0 -0
  156. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_hole_leader_placement.py +0 -0
  157. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_leader_candidates.py +0 -0
  158. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_leader_commit.py +0 -0
  159. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_leader_fixed_ink.py +0 -0
  160. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_placement_geometry.py +0 -0
  161. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_placement_occupancy.py +0 -0
  162. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_pocket_pad.py +0 -0
  163. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_polygonal_prisms.py +0 -0
  164. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_strip_postsolve.py +0 -0
  165. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/_thin_profiles.py +0 -0
  166. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/gears.py +0 -0
  167. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/hole_leader_candidates.py +0 -0
  168. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/orchestrator.py +0 -0
  169. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/annotations/solve_trace.py +0 -0
  170. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/auxiliary_layout.py +0 -0
  171. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/blend_contract.py +0 -0
  172. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/build_options.py +0 -0
  173. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/build_policy.py +0 -0
  174. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/cli.py +0 -0
  175. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/contract_values.py +0 -0
  176. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/document.py +0 -0
  177. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/document_evidence.py +0 -0
  178. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/document_input.py +0 -0
  179. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/drawing_state.py +0 -0
  180. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/drawing_tables.py +0 -0
  181. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/evaluation/__init__.py +0 -0
  182. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/evaluation/_double_d_evidence.py +0 -0
  183. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/evaluation/_flat_polygonal_evidence.py +0 -0
  184. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/evaluation/_groove_evidence.py +0 -0
  185. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/evaluation/_hole_family_evidence.py +0 -0
  186. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/evaluation/_prismatic_evidence.py +0 -0
  187. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/explicit_scale.py +0 -0
  188. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/feature_identity.py +0 -0
  189. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/fits.py +0 -0
  190. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/fonts/IBMPlexMono-Regular.ttf +0 -0
  191. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/fonts/IBMPlexSansCondensed-Regular.ttf +0 -0
  192. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/fonts/LICENSE-IBMPlexMono-OFL.txt +0 -0
  193. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/fonts/LICENSE-IBMPlexSansCondensed-OFL.txt +0 -0
  194. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/fonts/__init__.py +0 -0
  195. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/inspection.py +0 -0
  196. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/inspection_contract.py +0 -0
  197. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/intent_drain.py +0 -0
  198. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/intent_routing.py +0 -0
  199. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/intents.py +0 -0
  200. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/layout_safety.py +0 -0
  201. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/layout_scheme.py +0 -0
  202. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/leader_policy.py +0 -0
  203. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/__init__.py +0 -0
  204. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/_coverage_common.py +0 -0
  205. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/_registry.py +0 -0
  206. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/angled_step_coverage.py +0 -0
  207. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/chamfer_coverage.py +0 -0
  208. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/channel_coverage.py +0 -0
  209. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/circular_blind_step_coverage.py +0 -0
  210. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/evidence.py +0 -0
  211. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/fillet_coverage.py +0 -0
  212. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/flat_coverage.py +0 -0
  213. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/groove_coverage.py +0 -0
  214. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/gusset_rib_coverage.py +0 -0
  215. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/ink_overlap.py +0 -0
  216. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/issues.py +0 -0
  217. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/oriented_slot_coverage.py +0 -0
  218. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/pad_coverage.py +0 -0
  219. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/paired_ramp_step_coverage.py +0 -0
  220. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/passage_coverage.py +0 -0
  221. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/plate_coverage.py +0 -0
  222. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/pmi_coverage.py +0 -0
  223. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/pocket_coverage.py +0 -0
  224. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/pocket_pattern_coverage.py +0 -0
  225. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/polygonal_boss_coverage.py +0 -0
  226. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/polygonal_stock_coverage.py +0 -0
  227. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/prismatic_pocket_coverage.py +0 -0
  228. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/profiled_bore_coverage.py +0 -0
  229. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/requirements.py +0 -0
  230. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/schedule_evidence.py +0 -0
  231. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/section_recess_coverage.py +0 -0
  232. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/slot_coverage.py +0 -0
  233. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/suggest.py +0 -0
  234. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/linting/turned_step_coverage.py +0 -0
  235. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/location_contract.py +0 -0
  236. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/measurement_support.py +0 -0
  237. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/model/__init__.py +0 -0
  238. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/model/callout.py +0 -0
  239. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/model/compiled.py +0 -0
  240. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/model/detect_inventory.py +0 -0
  241. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/model/detect_ownership.py +0 -0
  242. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/model/dimension_intent.py +0 -0
  243. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/model/ir_foundation.py +0 -0
  244. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/model/manufacturing_schedule.py +0 -0
  245. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/model/oriented_slot_geometry.py +0 -0
  246. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/obligations.py +0 -0
  247. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/oriented_slot_contract.py +0 -0
  248. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/plate_correspondence.py +0 -0
  249. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/progress.py +0 -0
  250. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/py.typed +0 -0
  251. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/recogniser_contract.py +0 -0
  252. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/recogniser_policy.py +0 -0
  253. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/recogniser_schema.py +0 -0
  254. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/recognition/__init__.py +0 -0
  255. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/recognition_cache.py +0 -0
  256. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/recognition_frame.py +0 -0
  257. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/registry.py +0 -0
  258. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/replay_assessment.py +0 -0
  259. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/score.py +0 -0
  260. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/sheet_feature_lines.py +0 -0
  261. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/sheet_features.py +0 -0
  262. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/sheet_layout_controls.py +0 -0
  263. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/sheet_object_source.py +0 -0
  264. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/src/draftwright/view_plan.py +0 -0
  265. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/_burden_report.py +0 -0
  266. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/_corpus_cover.py +0 -0
  267. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/_drawing_helpers.py +0 -0
  268. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/_evidence_contract.py +0 -0
  269. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/_kernel.py +0 -0
  270. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/_layout_helpers.py +0 -0
  271. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/_layout_sig.py +0 -0
  272. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/_mutation_corpus.py +0 -0
  273. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/_pad_rendering_fixtures.py +0 -0
  274. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/_parts.py +0 -0
  275. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/_pattern_contract.py +0 -0
  276. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/_recogniser_public_contract.py +0 -0
  277. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/_section_recess_cases.py +0 -0
  278. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/_unit_manifest.py +0 -0
  279. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/conftest.py +0 -0
  280. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/annotation-layout-corpus-v1.json +0 -0
  281. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/annotation-layout-corpus-v2.json +0 -0
  282. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/annotation-layout-holdout-ftc09-v1.json +0 -0
  283. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/annotation-layout-holdout-v1.json +0 -0
  284. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/ap242_single_cylinder_diameter.step +0 -0
  285. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/README.md +0 -0
  286. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/ambiguous-open-semicircle.step +0 -0
  287. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/blind-hole.step +0 -0
  288. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/chamfer-asymmetric.step +0 -0
  289. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/chamfer-compound.step +0 -0
  290. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/chamfer-overlap.step +0 -0
  291. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/chamfer-plain.step +0 -0
  292. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/chamfer-planar-x.step +0 -0
  293. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/chamfer-planar-y.step +0 -0
  294. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/chamfer-planar-z.step +0 -0
  295. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/chamfer-topology-a.step +0 -0
  296. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/chamfer-topology-b.step +0 -0
  297. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/chamfer-turned.step +0 -0
  298. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/corpus-chamfers-v1.json +0 -0
  299. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/corpus-countersinks-v1.json +0 -0
  300. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/corpus-double-d-bores-v1.json +0 -0
  301. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/corpus-fillets-v1.json +0 -0
  302. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/corpus-flats-v1.json +0 -0
  303. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/corpus-grooves-v1.json +0 -0
  304. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/corpus-hole-patterns-v1.json +0 -0
  305. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/corpus-plates-v1.json +0 -0
  306. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/corpus-pocket-patterns-v1.json +0 -0
  307. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/corpus-pockets-v1.json +0 -0
  308. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/corpus-polygonal-bosses-v1.json +0 -0
  309. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/corpus-polygonal-stock-v1.json +0 -0
  310. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/corpus-rectangular-pads-v1.json +0 -0
  311. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/corpus-turned-steps-v1.json +0 -0
  312. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/corpus-v1.json +0 -0
  313. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/countersink-deburr.step +0 -0
  314. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/countersink-external-cone.step +0 -0
  315. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/countersink-mixed-pair.step +0 -0
  316. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/countersink-single.step +0 -0
  317. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/countersink-topology-a.step +0 -0
  318. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/countersink-topology-b.step +0 -0
  319. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/double-d-axis-x.step +0 -0
  320. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/double-d-axis-y.step +0 -0
  321. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/double-d-blind.step +0 -0
  322. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/double-d-coaxial-compound.step +0 -0
  323. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/double-d-opposed-blind.step +0 -0
  324. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/double-d-roll-30.step +0 -0
  325. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/double-d-round-bore.step +0 -0
  326. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/double-d-single-z.step +0 -0
  327. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/double-d-topology-a.step +0 -0
  328. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/double-d-topology-b.step +0 -0
  329. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/fillet-compound.step +0 -0
  330. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/fillet-overlap.step +0 -0
  331. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/fillet-plain.step +0 -0
  332. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/fillet-planar-x.step +0 -0
  333. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/fillet-planar-y.step +0 -0
  334. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/fillet-planar-z.step +0 -0
  335. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/fillet-repeated.step +0 -0
  336. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/fillet-topology-a.step +0 -0
  337. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/fillet-topology-b.step +0 -0
  338. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/fillet-turned.step +0 -0
  339. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/flat-coaxial.step +0 -0
  340. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/flat-double-d.step +0 -0
  341. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/flat-lone-d.step +0 -0
  342. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/flat-nonround.step +0 -0
  343. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/flat-slanted-double-d.step +0 -0
  344. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/flat-topology-a.step +0 -0
  345. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/flat-topology-b.step +0 -0
  346. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/groove-compound.step +0 -0
  347. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/groove-lone-x.step +0 -0
  348. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/groove-lone-y.step +0 -0
  349. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/groove-lone-z.step +0 -0
  350. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/groove-monotonic-negative.step +0 -0
  351. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/groove-narrow.step +0 -0
  352. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/groove-topology-a.step +0 -0
  353. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/groove-topology-b.step +0 -0
  354. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pad-compound-equal.step +0 -0
  355. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pad-detached-body-negative.step +0 -0
  356. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pad-full-span-ledge-negative.step +0 -0
  357. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pad-nested-staircase-negative.step +0 -0
  358. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pad-topology-a.step +0 -0
  359. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pad-topology-b.step +0 -0
  360. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pad-x-negative.step +0 -0
  361. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pad-x-positive.step +0 -0
  362. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pad-y-negative.step +0 -0
  363. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pad-y-positive.step +0 -0
  364. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pad-z-negative.step +0 -0
  365. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pad-z-positive.step +0 -0
  366. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pattern-ambiguous.step +0 -0
  367. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pattern-grid.step +0 -0
  368. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pattern-topology-a.step +0 -0
  369. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pattern-topology-b.step +0 -0
  370. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/plain-block.step +0 -0
  371. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/plate-compound-equal.step +0 -0
  372. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/plate-cross-topology-a.step +0 -0
  373. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/plate-cross-topology-b.step +0 -0
  374. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/plate-detached-negative.step +0 -0
  375. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/plate-rotational-negative.step +0 -0
  376. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/plate-single-negative.step +0 -0
  377. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/plate-t-xz.step +0 -0
  378. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/plate-t-yz.step +0 -0
  379. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/plate-thick-negative.step +0 -0
  380. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/plate-u-additive.step +0 -0
  381. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/plate-u-cut.step +0 -0
  382. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pocket-compound.step +0 -0
  383. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pocket-edge-anchored.step +0 -0
  384. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pocket-lone.step +0 -0
  385. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pocket-opposed.step +0 -0
  386. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pocket-pattern-ambiguous.step +0 -0
  387. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pocket-pattern-grid.step +0 -0
  388. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pocket-pattern-linear.step +0 -0
  389. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pocket-pattern-pair.step +0 -0
  390. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pocket-pattern-topology-a.step +0 -0
  391. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pocket-pattern-topology-b.step +0 -0
  392. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pocket-prismatic-negative.step +0 -0
  393. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pocket-side.step +0 -0
  394. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pocket-through-negative.step +0 -0
  395. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pocket-topology-a.step +0 -0
  396. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pocket-topology-b.step +0 -0
  397. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/pocket-two-equal.step +0 -0
  398. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/polygonal-boss-compound-equal.step +0 -0
  399. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/polygonal-boss-detached-negative.step +0 -0
  400. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/polygonal-boss-in-plane-rotated.step +0 -0
  401. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/polygonal-boss-other-protrusions-negative.step +0 -0
  402. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/polygonal-boss-recess-negative.step +0 -0
  403. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/polygonal-boss-stock-negative.step +0 -0
  404. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/polygonal-boss-topology-a.step +0 -0
  405. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/polygonal-boss-topology-b.step +0 -0
  406. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/polygonal-boss-x.step +0 -0
  407. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/polygonal-boss-y.step +0 -0
  408. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/polygonal-boss-z.step +0 -0
  409. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/polygonal-stock-compound-negative.step +0 -0
  410. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/polygonal-stock-cylinder-negative.step +0 -0
  411. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/polygonal-stock-irregular-negative.step +0 -0
  412. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/polygonal-stock-octagon-negative.step +0 -0
  413. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/polygonal-stock-recess-negative.step +0 -0
  414. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/polygonal-stock-roll17.step +0 -0
  415. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/polygonal-stock-topology-a.step +0 -0
  416. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/polygonal-stock-topology-b.step +0 -0
  417. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/polygonal-stock-translated.step +0 -0
  418. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/polygonal-stock-x.step +0 -0
  419. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/polygonal-stock-y.step +0 -0
  420. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/topology-a.step +0 -0
  421. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/topology-b.step +0 -0
  422. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/turned-step-axis-x.step +0 -0
  423. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/turned-step-axis-y.step +0 -0
  424. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/turned-step-axis-z.step +0 -0
  425. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/turned-step-compound.step +0 -0
  426. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/turned-step-repeated-lengths.step +0 -0
  427. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/turned-step-through-bore.step +0 -0
  428. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/turned-step-topology-a.step +0 -0
  429. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/turned-step-topology-b.step +0 -0
  430. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/evaluation/turned-step-translated-blind-bore.step +0 -0
  431. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/grm03_thumbwheel_drive_screw.step +0 -0
  432. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/grm03_thumbwheel_drive_screw_ap242_pmi.step +0 -0
  433. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/grm04_drive_plate.step +0 -0
  434. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/if_step_flat_across_cylinder.step +0 -0
  435. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/issue_1058_wheel_rh.step +0 -0
  436. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/issue_1247_angled_blind_step.step +0 -0
  437. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/issue_1595_whistle_key_frame.step +0 -0
  438. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/issue_1595_whistle_key_lever.step +0 -0
  439. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/issue_909_basic_part_design_017_body.step +0 -0
  440. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/issue_915_case_study_2.step +0 -0
  441. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/nist_ctc_01_asme1_ap203.stp +0 -0
  442. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/nist_ctc_01_asme1_ap242.stp +0 -0
  443. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/nist_ctc_02_asme1_ap203.stp +0 -0
  444. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/nist_ctc_02_asme1_ap242.stp +0 -0
  445. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/nist_ctc_03_asme1_ap203.stp +0 -0
  446. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/nist_ctc_03_asme1_ap242.stp +0 -0
  447. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/nist_ctc_04_asme1_ap203.stp +0 -0
  448. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/nist_ctc_04_asme1_ap242.stp +0 -0
  449. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/nist_ctc_05_asme1_ap203.stp +0 -0
  450. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/nist_ctc_05_asme1_ap242.stp +0 -0
  451. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/nist_ftc_09_asme1_ap242-e1.stp +0 -0
  452. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/tuner_jig_blind_obround_pockets.step +0 -0
  453. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/fixtures/whistle_frame_reference.step +0 -0
  454. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/refactor_golden/bracket_section.json +0 -0
  455. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/refactor_golden/centered_rebate.json +0 -0
  456. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/refactor_golden/chamfered.json +0 -0
  457. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/refactor_golden/filleted.json +0 -0
  458. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/refactor_golden/flange_dense.json +0 -0
  459. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/refactor_golden/grid_plate.json +0 -0
  460. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/refactor_golden/grooved_shaft.json +0 -0
  461. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/refactor_golden/hex_bar.json +0 -0
  462. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/refactor_golden/holed_slot.json +0 -0
  463. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/refactor_golden/pocketed.json +0 -0
  464. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/refactor_golden/prismatic_ladder.json +0 -0
  465. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/refactor_golden/scattered_plate.json +0 -0
  466. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/refactor_golden/side_drilled.json +0 -0
  467. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/refactor_golden/turned_stepped.json +0 -0
  468. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_add_dimension.py +0 -0
  469. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_adr0018_view_routing.py +0 -0
  470. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_adr0018_view_selection.py +0 -0
  471. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_agent_improvement_canary_issue_1716.py +0 -0
  472. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_agents_guide.py +0 -0
  473. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_analysis_geometry.py +0 -0
  474. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_angle_patterns.py +0 -0
  475. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_angular_references.py +0 -0
  476. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_angular_rendering.py +0 -0
  477. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_annotation_layout_product.py +0 -0
  478. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_annotation_scheme_compare_script.py +0 -0
  479. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_annotation_scheme_corpus_script.py +0 -0
  480. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_annotation_scheme_shadow_script.py +0 -0
  481. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_api_docs.py +0 -0
  482. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_arrangement_gate.py +0 -0
  483. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_assessment_comparison_issue_1712.py +0 -0
  484. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_audit_differential.py +0 -0
  485. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_auxiliary_layout.py +0 -0
  486. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_axial_dimensions.py +0 -0
  487. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_balloon_ring_standoff.py +0 -0
  488. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_blind_slot_completeness.py +0 -0
  489. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_blind_slot_semantics.py +0 -0
  490. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_boss_ownership.py +0 -0
  491. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_build_profile_harness.py +0 -0
  492. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_burden_report.py +0 -0
  493. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_candidate_evidence_issue_1726.py +0 -0
  494. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_candidate_preview_sheet_holdout.py +0 -0
  495. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_canonical_angles.py +0 -0
  496. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_carve_free_position_callers.py +0 -0
  497. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_channel_ownership.py +0 -0
  498. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_cli_behavior.py +0 -0
  499. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_cli_report_sidecar.py +0 -0
  500. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_clone_budget.py +0 -0
  501. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_contract_values.py +0 -0
  502. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_corpus_cover.py +0 -0
  503. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_counting_calls.py +0 -0
  504. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_coverage_mode.py +0 -0
  505. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_declaration_identity_issue_1710.py +0 -0
  506. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_declaration_report_issue_1710.py +0 -0
  507. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_declared_report_issue_1688.py +0 -0
  508. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_deferred_edits.py +0 -0
  509. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_dense_sheet_canary.py +0 -0
  510. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_depth_estimators.py +0 -0
  511. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_derived_view_integration.py +0 -0
  512. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_derived_view_planning.py +0 -0
  513. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_detail_views.py +0 -0
  514. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_detect_once.py +0 -0
  515. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_detect_registry.py +0 -0
  516. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_diameter_deduplication.py +0 -0
  517. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_dimension_intent_contract.py +0 -0
  518. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_dimension_lane_canary_issue_1757.py +0 -0
  519. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_dimension_role_vocabulary.py +0 -0
  520. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_document_claim_authority.py +0 -0
  521. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_document_claims.py +0 -0
  522. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_document_coverage.py +0 -0
  523. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_document_report.py +0 -0
  524. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_document_report_authority.py +0 -0
  525. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_drawing_operations.py +0 -0
  526. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_drawing_state.py +0 -0
  527. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_dynamic_corridors.py +0 -0
  528. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_e2e_slice.py +0 -0
  529. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_e2e_standards.py +0 -0
  530. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_envelope_view_route_issue_1813.py +0 -0
  531. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_equivalent_dimension_presentations_issue_1759.py +0 -0
  532. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_export_dxf_curves.py +0 -0
  533. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_export_dxf_zoom.py +0 -0
  534. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_export_reproducible.py +0 -0
  535. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_export_shape.py +0 -0
  536. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_external_recognition_boundary.py +0 -0
  537. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_feature_edit_corridors.py +0 -0
  538. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_feature_edit_replay.py +0 -0
  539. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_feature_edit_verbs.py +0 -0
  540. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_feature_provenance.py +0 -0
  541. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_feature_queries.py +0 -0
  542. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_fillets_adjacency.py +0 -0
  543. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_fit_calculations.py +0 -0
  544. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_fits.py +0 -0
  545. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_flat_callout_precision.py +0 -0
  546. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_flat_completeness.py +0 -0
  547. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_flat_stock_identity.py +0 -0
  548. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_flat_stock_opposition.py +0 -0
  549. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_format_selector.py +0 -0
  550. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_formatting.py +0 -0
  551. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_framed_step_family_evidence.py +0 -0
  552. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_gdt_ink_shared.py +0 -0
  553. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_geometry_graph_spike.py +0 -0
  554. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_grid_lattice_convention.py +0 -0
  555. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_groove_completeness_evidence.py +0 -0
  556. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_groove_profile.py +0 -0
  557. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_gusset_rib_semantics.py +0 -0
  558. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_hole_pattern_callouts.py +0 -0
  559. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_hole_table.py +0 -0
  560. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_inspection_contract.py +0 -0
  561. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_interior_label_placement.py +0 -0
  562. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_ir_foundation.py +0 -0
  563. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_iso_detail_growth.py +0 -0
  564. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_iso_layout.py +0 -0
  565. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_iso_nts_caption_placement.py +0 -0
  566. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_isometric_orientation.py +0 -0
  567. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_isometric_placement.py +0 -0
  568. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1000_envelope_reuse.py +0 -0
  569. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1006_measurement_comparison.py +0 -0
  570. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1073_cross_body_patterns.py +0 -0
  571. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1082_polygonal_stock.py +0 -0
  572. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1086_declared_gears.py +0 -0
  573. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1116_ap242_hole_tolerance_lowering.py +0 -0
  574. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1126_requesting_less_never_scores_better.py +0 -0
  575. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1130_view_planning_evidence.py +0 -0
  576. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1132_turned_profile_span_is_reported.py +0 -0
  577. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1142_hole_leader_labels.py +0 -0
  578. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1143_hole_completeness.py +0 -0
  579. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1144_transactional_hole_table.py +0 -0
  580. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1146_scale_completeness.py +0 -0
  581. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1147_legibility_pair_aggregation.py +0 -0
  582. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1153_contradictory_dimensions.py +0 -0
  583. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1154_one_owner_per_measurement.py +0 -0
  584. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1155_grm04_sheet_use.py +0 -0
  585. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1157_no_implicit_general_tolerance.py +0 -0
  586. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1177_angular_dimensions.py +0 -0
  587. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1187_unroutable_leaders.py +0 -0
  588. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1188_per_view_assignment.py +0 -0
  589. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1190_section_decision.py +0 -0
  590. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1196_deterministic_view_names.py +0 -0
  591. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1202_observed_drawing_consumer.py +0 -0
  592. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1204_multiscale_view_issues.py +0 -0
  593. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1209_linear_pmi_witnesses.py +0 -0
  594. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1216_callout_reservation_measures_ink.py +0 -0
  595. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1216_pairwise_across_scale_groups.py +0 -0
  596. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1217_claimed_representations.py +0 -0
  597. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1217_the_facility_is_shared.py +0 -0
  598. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1219_location_claims_its_own_axis.py +0 -0
  599. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1229_ledger_member_keying.py +0 -0
  600. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1240_iso_above_strip_visibility.py +0 -0
  601. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1245_passage_disposition.py +0 -0
  602. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1246_prismatic_pocket_disposition.py +0 -0
  603. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1247_angled_step_disposition.py +0 -0
  604. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1254_turned_chamfers.py +0 -0
  605. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1260_view_constraints.py +0 -0
  606. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1262_automatic_turned_views.py +0 -0
  607. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1276_turned_leader_targets.py +0 -0
  608. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1281_turned_fillets.py +0 -0
  609. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1296_cylindrical_diameter_pmi.py +0 -0
  610. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1299_page_escalation.py +0 -0
  611. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1308_machined_leader_analytics.py +0 -0
  612. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1312_engine_costs.py +0 -0
  613. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1325_nominal_agreement.py +0 -0
  614. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1332_overlap_remedy.py +0 -0
  615. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1333_bounded_ink_repair.py +0 -0
  616. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1334_prevent_ink.py +0 -0
  617. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1336_grm03_ap242_pmi_fixture.py +0 -0
  618. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1338_scale_before_page_escalation.py +0 -0
  619. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1349_precision_display.py +0 -0
  620. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1350_detected_takeover.py +0 -0
  621. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1351_structured_note_coverage.py +0 -0
  622. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1353_cnc_authoritative_workflow.py +0 -0
  623. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1357_framed_activation.py +0 -0
  624. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1357_framed_boundary.py +0 -0
  625. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1357_plural_turned_profiles.py +0 -0
  626. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1357_pmi_frame.py +0 -0
  627. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1360_thread_depth.py +0 -0
  628. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1369_hole_completeness_evidence.py +0 -0
  629. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1370_countersink_completeness_evidence.py +0 -0
  630. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1370_hole_pattern_completeness_evidence.py +0 -0
  631. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1371_flat_completeness_evidence.py +0 -0
  632. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1371_polygonal_stock_completeness_evidence.py +0 -0
  633. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1373_plate_completeness_evidence.py +0 -0
  634. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1374_chamfer_completeness_evidence.py +0 -0
  635. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1374_fillet_completeness_evidence.py +0 -0
  636. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1374_turned_step_completeness_evidence.py +0 -0
  637. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1378_diameter_leader_targets.py +0 -0
  638. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1392_recognisers_048.py +0 -0
  639. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1395_degenerate_iso_region.py +0 -0
  640. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1396_layout_advisories.py +0 -0
  641. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1397_unverifiable_requirement_message.py +0 -0
  642. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1432_adoption.py +0 -0
  643. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1432_boundary_failures.py +0 -0
  644. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1432_oriented_slot_semantics.py +0 -0
  645. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1433_blend_semantics.py +0 -0
  646. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1450_boss_blend_ownership.py +0 -0
  647. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1460_step_inspection.py +0 -0
  648. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1466_dimension_options.py +0 -0
  649. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1466_semantic_sides.py +0 -0
  650. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1479_radius_leader_targets.py +0 -0
  651. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1485_curved_pockets.py +0 -0
  652. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1485_quiddity_024_boundary.py +0 -0
  653. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1485_rounded_pockets.py +0 -0
  654. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1505_diameter_coverage.py +0 -0
  655. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1505_short_axial_chains.py +0 -0
  656. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1511_turned_boss_heights.py +0 -0
  657. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1514_projection_safeguard.py +0 -0
  658. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1515_first_angle.py +0 -0
  659. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1516_dimension_text.py +0 -0
  660. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1517_through_indicator.py +0 -0
  661. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1518_explicit_rear.py +0 -0
  662. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1524_tolerance_magnitude.py +0 -0
  663. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1530_section_provenance.py +0 -0
  664. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1532_authored_section_examples.py +0 -0
  665. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1533_review_diagnostics.py +0 -0
  666. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1534_build_progress.py +0 -0
  667. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1536_title_overflow.py +0 -0
  668. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1543_feature_schedules.py +0 -0
  669. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1543_schedule_requirements.py +0 -0
  670. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1544_frame_document_canary.py +0 -0
  671. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1555_turned_recognition_format_invariance.py +0 -0
  672. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1560_envelope_axes.py +0 -0
  673. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1563_sheet_pmi_reconciliation.py +0 -0
  674. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1585_title_block_date.py +0 -0
  675. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1593_title_block_keepout.py +0 -0
  676. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1596_bolt_circle_corroboration.py +0 -0
  677. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1598_hex_pockets.py +0 -0
  678. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1604_internal_section.py +0 -0
  679. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1612_frame_sergio_coverage.py +0 -0
  680. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1612_sheet_margins.py +0 -0
  681. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_1613_circular_channel.py +0 -0
  682. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_367_leader_ink.py +0 -0
  683. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_443_grm03_axial_coverage.py +0 -0
  684. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_563_placement_intent.py +0 -0
  685. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_676_polygonal_boss.py +0 -0
  686. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_676_polygonal_boss_declare.py +0 -0
  687. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_798_floor_cardinality.py +0 -0
  688. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_827_real_part_canary.py +0 -0
  689. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_883_location_identity.py +0 -0
  690. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_885_prismatic_coverage.py +0 -0
  691. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_909_sloped_profile.py +0 -0
  692. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_915_dense_case.py +0 -0
  693. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_917_open_channel.py +0 -0
  694. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_924_zero_length_shoulders.py +0 -0
  695. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_955_height_contingency.py +0 -0
  696. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_issue_958_cross_solid_recognition.py +0 -0
  697. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_label_provenance.py +0 -0
  698. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_layout.py +0 -0
  699. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_layout_cleanliness.py +0 -0
  700. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_layout_constants.py +0 -0
  701. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_layout_evidence_issue_1711.py +0 -0
  702. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_layout_generalisation.py +0 -0
  703. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_layout_hypothesis.py +0 -0
  704. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_layout_override_side_issue_1757.py +0 -0
  705. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_layout_property.py +0 -0
  706. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_leader_footprint.py +0 -0
  707. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_leader_region_policy.py +0 -0
  708. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_lint_box_cache.py +0 -0
  709. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_lint_coverage.py +0 -0
  710. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_lint_coverage_common.py +0 -0
  711. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_lint_ink_overlap.py +0 -0
  712. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_lint_reconciliation.py +0 -0
  713. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_lint_structural.py +0 -0
  714. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_lint_suggestions.py +0 -0
  715. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_linting.py +0 -0
  716. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_location_vocabulary.py +0 -0
  717. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_machined_feature_callouts.py +0 -0
  718. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_make_drawing_entrypoints.py +0 -0
  719. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_manufacturing_schedule.py +0 -0
  720. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_nested_recognition_ownership.py +0 -0
  721. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_nominal_step_pmi.py +0 -0
  722. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_object_aspects.py +0 -0
  723. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_occupancy_boxes.py +0 -0
  724. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_occurrence_recognition_ownership.py +0 -0
  725. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_overall_height_coverage.py +0 -0
  726. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_pad_completeness_evidence.py +0 -0
  727. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_pad_rendering.py +0 -0
  728. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_paired_ramp_semantics.py +0 -0
  729. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_parameter_id.py +0 -0
  730. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_pareto_loop_canary_issue_1753.py +0 -0
  731. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_part_classification.py +0 -0
  732. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_part_model.py +0 -0
  733. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_pattern_contract.py +0 -0
  734. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_pattern_ownership.py +0 -0
  735. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_place_dimension.py +0 -0
  736. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_plate_ownership.py +0 -0
  737. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_pmi_common_labels.py +0 -0
  738. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_pmi_datum_lowering.py +0 -0
  739. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_pmi_gtol_lowering.py +0 -0
  740. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_pmi_part21.py +0 -0
  741. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_pocket_pattern.py +0 -0
  742. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_pocket_pattern_completeness_evidence.py +0 -0
  743. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_polygonal_boss_completeness_evidence.py +0 -0
  744. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_pre_render_profile_choice.py +0 -0
  745. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_principal_profile_classifier.py +0 -0
  746. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_prismatic_boss_diameter.py +0 -0
  747. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_prismatic_classification.py +0 -0
  748. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_prismatic_dimensions.py +0 -0
  749. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_private_test_imports.py +0 -0
  750. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_profile_angles.py +0 -0
  751. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_projection_symbol_default.py +0 -0
  752. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_quiddity_lifecycle_boundary.py +0 -0
  753. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_real_part_fixtures.py +0 -0
  754. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_recogniser_adoption.py +0 -0
  755. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_recogniser_capabilities.py +0 -0
  756. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_recogniser_contract.py +0 -0
  757. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_recogniser_policy.py +0 -0
  758. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_recogniser_step_inventory.py +0 -0
  759. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_recognition_boundary_failures.py +0 -0
  760. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_recognition_evidence_schema.py +0 -0
  761. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_recognition_policy_dispositions.py +0 -0
  762. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_recognition_result.py +0 -0
  763. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_refactor_golden.py +0 -0
  764. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_registry.py +0 -0
  765. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_remaining_ink_overlaps.py +0 -0
  766. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_render_seam.py +0 -0
  767. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_repack_geometry_seam.py +0 -0
  768. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_repair.py +0 -0
  769. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_replay_assessment_issue_1715.py +0 -0
  770. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_report_projection.py +0 -0
  771. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_report_status_reasons_issue_1618.py +0 -0
  772. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_report_writer.py +0 -0
  773. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_requirement_applicability.py +0 -0
  774. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_requirement_carriers.py +0 -0
  775. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_requirement_catalog_families.py +0 -0
  776. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_requirement_dimension_sharing.py +0 -0
  777. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_scale_policy.py +0 -0
  778. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_scale_selection.py +0 -0
  779. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_score.py +0 -0
  780. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_script_detail_parity.py +0 -0
  781. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_section_hatching.py +0 -0
  782. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_section_recess_contract.py +0 -0
  783. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_section_recess_pockets.py +0 -0
  784. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_shared_box_memo.py +0 -0
  785. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_shared_drawing_cache.py +0 -0
  786. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_sheet_fallback_issue_1797.py +0 -0
  787. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_sheet_furniture.py +0 -0
  788. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_sheet_gdt.py +0 -0
  789. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_sheet_generation_snapshot.py +0 -0
  790. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_sheet_identity_invariant.py +0 -0
  791. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_sheet_notes.py +0 -0
  792. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_sheet_of.py +0 -0
  793. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_slanted_blind_step.py +0 -0
  794. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_slot_completeness.py +0 -0
  795. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_slot_pattern.py +0 -0
  796. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_slot_pattern_recognition.py +0 -0
  797. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_soft_deprecation.py +0 -0
  798. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_solve_trace.py +0 -0
  799. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_step_analysis_evaluation.py +0 -0
  800. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_strip_zones.py +0 -0
  801. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_suite_shape.py +0 -0
  802. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_suppression_ledger.py +0 -0
  803. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_suppression_marks.py +0 -0
  804. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_through_step_ownership.py +0 -0
  805. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_through_step_semantics.py +0 -0
  806. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_title_block_units_format.py +0 -0
  807. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_tolerances.py +0 -0
  808. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_turned_lengths.py +0 -0
  809. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_turned_step_ownership.py +0 -0
  810. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_two_pass_layout.py +0 -0
  811. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_typ_dimensions.py +0 -0
  812. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_typed_remediation_projection_issue_1759.py +0 -0
  813. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_version_bump_ci.py +0 -0
  814. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_view_blocks.py +0 -0
  815. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_view_coordinates.py +0 -0
  816. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_view_plan.py +0 -0
  817. {draftwright-0.5.0rc2 → draftwright-0.5.0rc3}/tests/test_witness_label_reconciliation.py +0 -0
@@ -2,6 +2,26 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ### Changed
6
+
7
+ - The agent usage guide moved from `AGENTS.md` to `docs/using-draftwright.md`; `AGENTS.md`
8
+ now holds the contributor instructions formerly in `CLAUDE.md` (#1938).
9
+
10
+ ### Removed
11
+
12
+ - Removed the eight expired `Drawing` methods (`add`, `add_view`, `clear_annotations`,
13
+ `set_view_coordinates`, `drop_view_coordinates`, `attach_part_model`,
14
+ `attach_solve_trace`, and `export_pdf`) and the legacy `Drawing.export` tuple
15
+ forms at their published 0.5.0 target. Pass `formats=` explicitly; export
16
+ returns a `{format: path}` dict. `Drawing.place_dim`, `Sheet.add_view`,
17
+ `Sheet.export`'s PDF default, and `make_drawing`'s SVG/DXF tuple remain (#2113).
18
+
19
+ ## v0.4.11–v0.5.0-rc1 — cumulative notes since v0.4.10
20
+
21
+ These entries accumulated across patch releases and were all present by v0.4.31.
22
+ They describe changes included by RC1; they do not assign each change to its first
23
+ released version.
24
+
5
25
  ### Added
6
26
 
7
27
  - A hash-pinned AP242 CTC-01 canary now proves the full Pareto-first layout loop against
@@ -86,11 +106,6 @@
86
106
  `make_drawing`, and the CLI, including generated-script replay (#1612, #1589). Sergio's
87
107
  25/10/10/10 mm margins and 175 mm block are explicit options; existing defaults remain.
88
108
 
89
- ### Changed
90
-
91
- - The agent usage guide moved from `AGENTS.md` to `docs/using-draftwright.md`; `AGENTS.md`
92
- now holds the contributor instructions formerly in `CLAUDE.md` (#1938).
93
-
94
109
  ### Fixed
95
110
 
96
111
  - Assessment comparison now rejects an apparent resolution of measurement uncertainty when the
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: draftwright
3
- Version: 0.5.0rc2
3
+ Version: 0.5.0rc3
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
@@ -807,8 +807,8 @@ issues = dwg.lint() # list[LintIssue] — coverage, page b
807
807
  paths = dwg.export("my_part", formats=("svg", "dxf")) # {"svg": ..., "dxf": ...}
808
808
  ```
809
809
 
810
- `export()` with no `formats=` returns the old `(svg, dxf)` tuple; that shape is deprecated
811
- and removed in 0.5.0 (see [docs/deprecations.md](docs/deprecations.md)).
810
+ `Drawing.export()` requires `formats=` and returns a `{format: path}` dict. For the
811
+ SVG/DXF pair, pass `formats=("svg", "dxf")` (see [docs/deprecations.md](docs/deprecations.md)).
812
812
 
813
813
  ### Declarative drawings — reference features, declare intent
814
814
 
@@ -104,8 +104,8 @@ issues = dwg.lint() # list[LintIssue] — coverage, page b
104
104
  paths = dwg.export("my_part", formats=("svg", "dxf")) # {"svg": ..., "dxf": ...}
105
105
  ```
106
106
 
107
- `export()` with no `formats=` returns the old `(svg, dxf)` tuple; that shape is deprecated
108
- and removed in 0.5.0 (see [docs/deprecations.md](docs/deprecations.md)).
107
+ `Drawing.export()` requires `formats=` and returns a `{format: path}` dict. For the
108
+ SVG/DXF pair, pass `formats=("svg", "dxf")` (see [docs/deprecations.md](docs/deprecations.md)).
109
109
 
110
110
  ### Declarative drawings — reference features, declare intent
111
111
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "draftwright"
7
- version = "0.5.0rc2"
7
+ version = "0.5.0rc3"
8
8
  description = "Automated technical-drawing generation for build123d"
9
9
  readme = "README.md"
10
10
  license = { file = "LICENSE" }
@@ -89,17 +89,17 @@ testpaths = ["tests"]
89
89
  timeout = 300
90
90
  # `slow` covers end-to-end integration builds, including the large NIST CTC fixtures
91
91
  # (minutes each), deselected by default. `smoke` is a curated, build-light subset
92
- # (~30 s) for a quick local "did I break something obvious" check — run it with
92
+ # for a quick local "did I break something obvious" check — run it with
93
93
  # `uv run pytest -m smoke`. The default run is the full supported-behavior tier
94
- # (`-m 'not slow and not scheduled'`; runtime depends on worker count). CI runs bounded
95
- # real-part canaries before merge, the scheduled tier after merge, and the full tier
96
- # across its compatibility matrix.
94
+ # (`-m 'not slow and not scheduled'`; runtime depends on worker count). Ordinary PR
95
+ # CI selects fast modules by changed source, with a bounded real-part canary; the
96
+ # scheduled tier runs after merge, and the full-matrix label widens the PR sweep.
97
97
  markers = [
98
98
  "slow: end-to-end integration builds, including CTC fixtures (deselected by default)",
99
99
  "ctc04: scheduled tests that construct the CPU-heavy NIST CTC-04 drawing",
100
100
  "scheduled: compatibility and broad-corpus contracts selected by the scheduled tier",
101
101
  "real_part_canary: bounded real STEP semantic/export gate, selected once in PR CI",
102
- "smoke: curated build-light subset for a fast local check (~30 s)",
102
+ "smoke: curated build-light subset for a quick local check",
103
103
  "unit: pure-logic inner-loop tier — constructs NO OCC geometry (enforced by conftest, #656)",
104
104
  ]
105
105
  # `SoftDeprecationWarning` marks a surface that is discouraged but SUPPORTED and not going
@@ -163,8 +163,12 @@ target-version = "py310"
163
163
 
164
164
  [tool.ruff.lint]
165
165
  select = ["E", "F", "I", "UP"]
166
+ extend-select = ["B"]
166
167
  ignore = ["E501"]
167
168
 
169
+ [tool.ruff.lint.flake8-bugbear]
170
+ extend-immutable-calls = ["typer.Option"]
171
+
168
172
  [dependency-groups]
169
173
  docs = [
170
174
  "mkdocs>=1.6,<2",
@@ -12,12 +12,13 @@ to be installed in the execution environment.
12
12
  **There are two paths — start with the automatic one.**
13
13
 
14
14
  1. **Automatic (`make_drawing`)** — one call turns a part (or STEP file) into a
15
- four-view SVG + DXF with dimensions, centrelines, and an ISO 7200 title
15
+ multi-view SVG + DXF with dimensions, centrelines, and an ISO 7200 title
16
16
  block.
17
17
  2. **Builder (`build_drawing`)** — the same pipeline, but it hands back a live
18
18
  `Drawing` you can edit before export.
19
19
 
20
- Requires `draftwright >= 0.4.0` and `build123d-drafting-helpers >= 0.14.1`.
20
+ Requires `draftwright >= 0.4.0`; the current package requires
21
+ `build123d-drafting-helpers >= 0.15.5`.
21
22
  Install: `pip install draftwright`.
22
23
 
23
24
  (The old floor said 0.1.9, which cannot run this guide: none of the feature-backed
@@ -63,8 +64,8 @@ svg, dxf = make_drawing(
63
64
  )
64
65
  ```
65
66
 
66
- `make_drawing` chooses the scale + ISO page size, projects front/plan/side/iso
67
- views, and annotates automatically — then lints and writes both SVG and DXF.
67
+ `make_drawing` chooses the scale, ISO page size, and views required by the part,
68
+ then annotates, lints, and writes both SVG and DXF.
68
69
 
69
70
  Automatic annotation covers **prismatic parts in full**: every recognised hole
70
71
  gets a grouped callout ("4× ø10 THRU", counterbore/depth symbols), bolt circles
@@ -87,11 +88,10 @@ name a detected *feature* and the measurement you want; the engine decides the
87
88
  offset, stacking, and strip slot.** You give *what*, never *where on the page*:
88
89
  placement is automatic and constraint-based.
89
90
 
90
- Prefer the feature-backed verbs (`dimension` / `locate` / `callout` / `note` /
91
- `drop`) over the raw page-coordinate primitives. The low-level API (`place_dim`,
92
- `add`, `add_view`, the view-coordinate plumbing) is **deprecated** — see
93
- `docs/deprecations.md` — because a raw coordinate does not route through the
94
- layout solve, so it cannot be re-flowed when anything around it moves.
91
+ Use the feature-backed verbs (`dimension` / `locate` / `callout` / `note` /
92
+ `drop`) for edits. `Drawing.place_dim` remains a deprecated raw-coordinate
93
+ escape hatch; `Drawing.add`, `Drawing.add_view`, and the public view-coordinate
94
+ plumbing were removed in 0.5.0. See `docs/deprecations.md`.
95
95
 
96
96
  ```python
97
97
  from draftwright import build_drawing
@@ -109,7 +109,7 @@ dwg.annotations() # {name: type} of every named annotation already on
109
109
  dwg.get_annotation(name) # the named annotation object, or None
110
110
  dwg.view_bounds("front") # (x_min, y_min, x_max, y_max) page bbox of a view, or None
111
111
  dwg.items # the ordered, mutable list of annotation objects
112
- dwg.views # {"front","plan","side","iso"} → (visible, hidden) compounds
112
+ dwg.views # selected view names → (visible, hidden) compounds
113
113
  dwg.draft / dwg.scale / dwg.page_w / dwg.page_h
114
114
  ```
115
115
 
@@ -179,16 +179,15 @@ paths = dwg.export("drawings/bracket", formats=("svg", "dxf", "pdf"))
179
179
  svg, dxf = paths["svg"], paths["dxf"]
180
180
  ```
181
181
 
182
- Pass `formats=` and read the `{format: path}` dict. Calling `export()` with no
183
- `formats` — or with the `svg=`/`dxf=` booleans — takes the legacy path and returns
184
- a `(svg, dxf)` tuple. Both are deprecated (v0.3.1) and removed in 0.5.0, and both
185
- warn from 0.4.0. See `docs/deprecations.md`.
182
+ Pass `formats=` and read the `{format: path}` dict. `Drawing.export()` without
183
+ `formats`, with `formats=None`, or with the old `svg=`/`dxf=` booleans was removed
184
+ in 0.5.0. See `docs/deprecations.md`.
186
185
 
187
186
  `make_drawing(...)` is unaffected and does not warn: it still returns
188
187
  `(svg_path, dxf_path)`, and passes `formats=` internally to get them.
189
188
 
190
- `make_drawing(...)` is `build_drawing(...).export(formats=("svg", "dxf"))`, unpacked to a
191
- tuple — not a bare `.export()`, which is the deprecated shape above.
189
+ `make_drawing(...)` calls `build_drawing(...).export(formats=("svg", "dxf"))`
190
+ and returns the two paths as a tuple.
192
191
 
193
192
  **Authored section views** use `section_view()` alongside an explicit dimension and
194
193
  view set. This complete example declares the bore diameter and overall extents;
@@ -240,14 +239,12 @@ method for your view source above. `Drawing.section()` remains the automatic
240
239
  post-build section operation: it may return no section when the geometry does not
241
240
  warrant one. It does not replace an explicit authored section request.
242
241
 
243
- Arbitrary **auxiliary** views have no public verb: `add_view()` was the way to
244
- project one and is deprecated, so a custom viewing direction is not currently part
245
- of the supported surface.
242
+ Arbitrary **auxiliary** views have no public `Drawing` verb, so a custom viewing
243
+ direction is not currently part of the supported surface.
246
244
 
247
- `add_view()` and the view-coordinate plumbing (`set_view_coordinates`,
248
- `drop_view_coordinates`, and the `vc.pp(...)` projector) are **deprecated** (#817):
249
- view projection is engine plumbing, and hand-placed views do not participate in the
250
- compose-then-pack layout.
245
+ `Drawing.add_view()` and its public view-coordinate plumbing were removed in
246
+ 0.5.0 (#2113). `Sheet.add_view()` is a separate supported verb for augmenting an
247
+ automatic view set; view projection itself remains engine plumbing.
251
248
 
252
249
  ---
253
250
 
@@ -100,7 +100,7 @@ def pytest_configure(config) -> None:
100
100
  # The public lazy package attribute and Sheet's import-time binding otherwise bypass a
101
101
  # patch installed only on builder.py. That omission made the first #1307 census a lower
102
102
  # bound, so all three bindings are explicit here.
103
- setattr(draftwright, "build_drawing", builder_public)
103
+ setattr(draftwright, "build_drawing", builder_public) # noqa: B010 - lazy package attribute
104
104
  sheet.build_drawing = _timed("sheet.build_drawing", sheet.build_drawing)
105
105
  builder._build_drawing_once = _timed(
106
106
  "builder._build_drawing_once", builder._build_drawing_once
@@ -1184,21 +1184,22 @@ def y_chain_detail_scale_needed(
1184
1184
  if not segments:
1185
1185
  return None
1186
1186
  centres = sorted(
1187
- ((pa + pb) / 2, width) for (pa, pb, _length), width in zip(segments, label_widths)
1187
+ ((pa + pb) / 2, width)
1188
+ for (pa, pb, _length), width in zip(segments, label_widths, strict=True)
1188
1189
  )
1189
1190
  labels_clear = all(
1190
1191
  next_centre - centre >= (width + next_width) / 2 + text_padding
1191
- for (centre, width), (next_centre, next_width) in zip(centres, centres[1:])
1192
+ for (centre, width), (next_centre, next_width) in zip(centres, centres[1:], strict=False)
1192
1193
  )
1193
1194
  inside_arrows_fit = all(
1194
1195
  abs(pb - pa) >= width + 2 * arrow_length + 2 * text_padding
1195
- for (pa, pb, _length), width in zip(segments, label_widths)
1196
+ for (pa, pb, _length), width in zip(segments, label_widths, strict=True)
1196
1197
  )
1197
1198
  if labels_clear and inside_arrows_fit:
1198
1199
  return None
1199
1200
  return max(
1200
1201
  (width + 2 * arrow_length + 2 * text_padding) / length
1201
- for (_pa, _pb, length), width in zip(segments, label_widths)
1202
+ for (_pa, _pb, length), width in zip(segments, label_widths, strict=True)
1202
1203
  if length > 0
1203
1204
  )
1204
1205
 
@@ -315,7 +315,9 @@ def _turned_profile_site(site, axis: str, view: str, cylinders) -> tuple[float,
315
315
  )
316
316
  surface_gap = abs(radial_distance - float(cylinder["diameter"]) / 2)
317
317
  direction = tuple(float(value) for value in cylinder["dir_xyz"])
318
- axial_station = sum(value * component for value, component in zip(values, direction))
318
+ axial_station = sum(
319
+ value * component for value, component in zip(values, direction, strict=False)
320
+ )
319
321
  s_lo = float(cylinder["s_lo"])
320
322
  s_hi = float(cylinder["s_hi"])
321
323
  axial_gap = max(s_lo - axial_station, 0.0, axial_station - s_hi)
@@ -615,7 +617,7 @@ def _fmt_angle(value, decimals=None, tolerance=None) -> str:
615
617
 
616
618
  def _boxes_overlap(a, b) -> bool:
617
619
  """True when two ``(x0, y0, x1, y1)`` AABBs overlap (strict: a touch is not
618
- an overlap). The one pairwise test behind both the placement-side
620
+ an overlap). A shared pairwise test behind both the placement-side
619
621
  ``_box_hits`` and the lint-side overlap checks (#700). Nuance: a degenerate
620
622
  (zero-width/height) box strictly inside the other counts as overlapping
621
623
  here, where the pre-#700 ``_box_hits`` form said no — the conservative
@@ -157,13 +157,14 @@ def _automatic_y_chain_detail_footprints(
157
157
  # line. A single pre-sheet box would otherwise plan a phantom combined
158
158
  # chain and could enlarge the sheet without any matching detail request.
159
159
  if any(
160
- abs(previous[1] - current[0]) > 1e-3 + 1e-9 for previous, current in zip(rows, rows[1:])
160
+ abs(previous[1] - current[0]) > 1e-3 + 1e-9
161
+ for previous, current in zip(rows, rows[1:], strict=False)
161
162
  ):
162
163
  return None
163
164
  # The renderer states a contiguous repeated pitch of three or more once on
164
165
  # the parent view. Such a chain does not request an enlarged detail.
165
166
  repeat = 1
166
- for prev, current in zip(rows, rows[1:]):
167
+ for prev, current in zip(rows, rows[1:], strict=False):
167
168
  old, new = prev[2], current[2]
168
169
  same_text = (
169
170
  old.value_text == new.value_text
@@ -302,7 +303,8 @@ def _automatic_x_head_detail_footprints(
302
303
  # different physically sorted run until both boundaries share ordering.
303
304
  return None
304
305
  if any(
305
- abs(previous[1] - current[0]) > 1e-3 + 1e-9 for previous, current in zip(rows, rows[1:])
306
+ abs(previous[1] - current[0]) > 1e-3 + 1e-9
307
+ for previous, current in zip(rows, rows[1:], strict=False)
306
308
  ):
307
309
  return None
308
310
  # The renderer crops against the controlled step's physical profile, not
@@ -1063,7 +1065,7 @@ def _validate_explicit_scale(
1063
1065
  if advisories is not None:
1064
1066
  advisories.append(("legibility_floor_breached", message))
1065
1067
  if warn_advisory:
1066
- warnings.warn(message)
1068
+ warnings.warn(message, stacklevel=1)
1067
1069
 
1068
1070
 
1069
1071
  @dataclass(frozen=True)
@@ -1939,7 +1941,6 @@ def _select_sheet(
1939
1941
  _measure_strips(
1940
1942
  strip_sizing_model,
1941
1943
  n_steps_i,
1942
- bb,
1943
1944
  arrow_length=_arrow_length,
1944
1945
  pad_around_text=_pad_around_text,
1945
1946
  bore_callout_width=bore_callout_width,
@@ -2090,7 +2091,6 @@ def _place_sheet(
2090
2091
  _measure_strips(
2091
2092
  strip_sizing_model,
2092
2093
  n_steps,
2093
- bb,
2094
2094
  arrow_length=_arrow_length,
2095
2095
  pad_around_text=_pad_around_text,
2096
2096
  bore_callout_width=bore_callout_width,
@@ -1,9 +1,8 @@
1
1
  """Compat facade: the annotation passes moved to the annotations/ subpackage (#164).
2
2
 
3
- `_auto_annotate` (the orchestrator) now lives in `annotations.orchestrator`; the
4
- individual passes in `annotations.{sections,turned,pmi,holes}`. This module re-exports
5
- the orchestrator entry point and the two helpers still referenced by name elsewhere,
6
- so `from draftwright.annotate import _auto_annotate` keeps working.
3
+ `_auto_annotate` and its companion entry points live in
4
+ `annotations.orchestrator`; rendering passes live in `annotations/`. This module
5
+ retains the historical import path for callers of those entry points.
7
6
  """
8
7
 
9
8
  import warnings
@@ -117,7 +117,7 @@ def _step_measurements(segs: list[_StepChainSegment]) -> tuple[Any, ...]:
117
117
  return tuple(result)
118
118
 
119
119
 
120
- def _record_step_chain_drop(dwg, why: str, *, ctx, measurement=()) -> None:
120
+ def _record_step_chain_drop(why: str, *, ctx, measurement=()) -> None:
121
121
  """Record the ``step_dim_dropped`` warning for unresolved turned lengths.
122
122
  These drops were silent (debug log only) — the user got
123
123
  a drawing with no step-length dimensioning and no signal. Mirrors
@@ -221,7 +221,7 @@ def _draw_step_chain(
221
221
  def _clear(items):
222
222
  return all(
223
223
  c2 - c1 >= (w1 + w2) / 2 + draft.pad_around_text
224
- for (c1, w1), (c2, w2) in zip(items, items[1:])
224
+ for (c1, w1), (c2, w2) in zip(items, items[1:], strict=False)
225
225
  )
226
226
 
227
227
  if _clear(cw):
@@ -231,7 +231,6 @@ def _draw_step_chain(
231
231
  else:
232
232
  _log.info("step-length chain skipped: too dense even when staggered")
233
233
  _record_step_chain_drop(
234
- dwg,
235
234
  "shoulders too dense to dimension even when staggered",
236
235
  ctx=ctx,
237
236
  measurement=_step_measurements(segs),
@@ -300,7 +299,6 @@ def _draw_step_chain(
300
299
  page[0] <= box[0] and box[2] <= page[2] and page[1] <= box[1] and box[3] <= page[3]
301
300
  ):
302
301
  _record_step_chain_drop(
303
- dwg,
304
302
  "a dimension would fall off the drawable page",
305
303
  ctx=ctx,
306
304
  measurement=measurements,
@@ -1286,6 +1286,9 @@ class PlacementContext:
1286
1286
  source=None,
1287
1287
  outcome_stage=None,
1288
1288
  evidence_reason=None,
1289
+ annotation_name=None,
1290
+ view=None,
1291
+ related_annotation_names=(),
1289
1292
  ) -> None:
1290
1293
  """Record a build-time lint issue on the run's registry (#639). Replaces the passes'
1291
1294
  old `dwg._record_build_issue`."""
@@ -1316,6 +1319,9 @@ class PlacementContext:
1316
1319
  outcome_stage=outcome_stage,
1317
1320
  measurement_spans=spans,
1318
1321
  evidence_reason=evidence_reason,
1322
+ annotation_name=annotation_name,
1323
+ view=view,
1324
+ related_annotation_names=tuple(related_annotation_names),
1319
1325
  )
1320
1326
  )
1321
1327
 
@@ -73,9 +73,9 @@ def _diameter_row_below(
73
73
  """ø-callout row BELOW the front view for X-turned step/boss diameters (#77).
74
74
  *items* is ``[(anchor, dia, value_text, feature, tolerance, thread, mids), ...]``. The row is dropped clear of anything
75
75
  already below the profile; labels spread along page-x by the ADR 2 (was 0003) strip
76
- solve. Skips (returns 0) if there is no room — the diameters then surface as
77
- ``feature_not_dimensioned``. *trace* (#736): one ``pass_events`` record with a
78
- placed/dropped item per callout."""
76
+ solve. Skips (returns 0) if there is no room; the caller may then try radial
77
+ leaders, and any still-missing diameter reaches coverage lint. *trace* (#736): one
78
+ ``pass_events`` record with a placed/dropped item per callout."""
79
79
  if not items:
80
80
  return 0
81
81
  ev = trace.pass_event("diameter_row_below", view="front") if trace is not None else None
@@ -86,8 +86,8 @@ def _diameter_row_below(
86
86
  # `view_bounds` has always documented `None` for a view it does not have; with a
87
87
  # fixed four-view topology that could not happen, so the caller unpacked it directly
88
88
  # and a view set without the front crashed here. Skipping is the established
89
- # behaviour of this function when there is no room — the diameters then surface as
90
- # `feature_not_dimensioned` — and it is what lets the requirement gate WEIGH a view
89
+ # behaviour of this function when there is no room. Later radial fallback or
90
+ # coverage lint resolves the outcome, letting the requirement gate WEIGH a view
91
91
  # set instead of the build dying inside a pass.
92
92
  return 0
93
93
  fx0, fy0, fx1, _ = bounds
@@ -95,8 +95,25 @@ def _diameter_row_below(
95
95
  for o in dwg.items:
96
96
  try:
97
97
  ob = o.bounding_box()
98
- except Exception: # noqa: BLE001 — not every annotation bbox-es cleanly
99
- continue
98
+ except Exception as exc: # noqa: BLE001 — an unreadable obstacle cannot be ignored
99
+ for _, _, text, _, _, _, mids in items:
100
+ ctx.record_issue(
101
+ "warning",
102
+ "diameter_row_obstacle_unverified",
103
+ f"ø{text} shared row withheld: below-front obstacle could not be measured "
104
+ f"({type(exc).__name__})",
105
+ measurement=mids,
106
+ evidence_reason="obstacle_unverified",
107
+ )
108
+ if ev is not None:
109
+ ev["items"].append(
110
+ {
111
+ "label": f"ø{text}",
112
+ "outcome": "dropped",
113
+ "reason": "obstacle_unverified",
114
+ }
115
+ )
116
+ return 0
100
117
  if ob.min.Y < fy0 and ob.max.X > fx0 and ob.min.X < fx1:
101
118
  obstacle_bottom = min(obstacle_bottom, ob.min.Y)
102
119
  label_y = obstacle_bottom - (draft.font_size + 4 * draft.pad_around_text)
@@ -156,7 +173,7 @@ def _diameter_row_below(
156
173
  return out
157
174
 
158
175
  def _collides(ivals):
159
- pairs = zip(sorted(ivals), sorted(ivals)[1:])
176
+ pairs = zip(sorted(ivals), sorted(ivals)[1:], strict=False)
160
177
  return any(a1 > b0 for (_a0, a1), (b0, _b1) in pairs)
161
178
 
162
179
  while len(survivors) > 1 and _collides(_label_ivals(survivors, xs)):
@@ -179,7 +196,7 @@ def _diameter_row_below(
179
196
  for s in specs
180
197
  if id(s) not in kept
181
198
  )
182
- for i, ((tip, dia, label, feat, mids), lx) in enumerate(zip(survivors, xs, strict=True)):
199
+ for i, ((tip, _dia, label, feat, mids), lx) in enumerate(zip(survivors, xs, strict=True)):
183
200
  ctx.place(
184
201
  Leader(tip=(tip[0], tip[1], 0), elbow=(lx, label_y, 0), label=label, draft=draft),
185
202
  f"m_dia_x{start + i}",
@@ -258,7 +275,7 @@ def _diameter_column_left(
258
275
  )
259
276
  occupied = strip_obstacles(dwg, view="front", crossable=CROSSABLE_TYPES)
260
277
  placed = 0
261
- for i, ((tip, dia, label, feat, mids), ly) in enumerate(zip(survivors, ys, strict=True)):
278
+ for i, ((tip, _dia, label, feat, mids), ly) in enumerate(zip(survivors, ys, strict=True)):
262
279
  ldr = Leader(tip=(tip[0], tip[1], 0), elbow=(elbow_x, ly, 0), label=label, draft=draft)
263
280
  if _box_hits(_anno_box(ldr), occupied):
264
281
  if ev is not None:
@@ -268,7 +268,7 @@ def render_envelope(
268
268
  # The same model-space X span is visible in front. Route it there
269
269
  # before the shared corridor solve if that view has a real tier;
270
270
  # neither a later drop nor an interior retry can create strip depth.
271
- def _one_tier_fits(strip):
271
+ def _one_tier_fits(strip, slot=slot):
272
272
  if strip is None:
273
273
  return False
274
274
  lo, hi, _inner = strip_free_span(strip)
@@ -299,6 +299,7 @@ def render_envelope(
299
299
  p1, p2 = dwg.at(view, *start_pt), dwg.at(view, *end_pt)
300
300
  witness = p1[1] - _WITNESS_LIFT_MM
301
301
  zones = frame.zones(view)
302
+ label = _env_label(extent, dwg.draft)
302
303
  _queue(
303
304
  ann_name,
304
305
  zones.below,
@@ -307,8 +308,8 @@ def render_envelope(
307
308
  slot,
308
309
  abs(end_pt[index] - start_pt[index]),
309
310
  (p1[0], p2[0]),
310
- _env_label(extent, dwg.draft),
311
- lambda pos, _p1=p1, _p2=p2, _w=witness, _v=_env_label(extent, dwg.draft): dim_builder(
311
+ label,
312
+ lambda pos, _p1=p1, _p2=p2, _w=witness, _v=label: dim_builder(
312
313
  (_p1[0], _w, 0),
313
314
  (_p2[0], _w, 0),
314
315
  "below",
@@ -319,8 +320,8 @@ def render_envelope(
319
320
  # Measure the same rendered label used by the Dimension. The span
320
321
  # usually dominates this footprint, but outside arrows can make the
321
322
  # label affect its extent.
322
- footprint=lambda pos, _p1=p1, _p2=p2, _w=witness, _v=_env_label(extent, dwg.draft): (
323
- dim_footprint((_p1[0], _w, 0), (_p2[0], _w, 0), "below", _w - pos, dwg.draft, _v)
323
+ footprint=lambda pos, _p1=p1, _p2=p2, _w=witness, _v=label: dim_footprint(
324
+ (_p1[0], _w, 0), (_p2[0], _w, 0), "below", _w - pos, dwg.draft, _v
324
325
  ),
325
326
  measurement=extent.id,
326
327
  measurement_span=extent.span,
@@ -722,7 +722,7 @@ def _register_y_locations(
722
722
  and any(SX(ry) + 10 > iso_x0 - 4 for _, ry, _feat, _pin, _mids, _facts, _entries in y_refs)
723
723
  ):
724
724
  a.sv_zones.above.outer_limit = min(a.sv_zones.above.outer_limit, iso_y0 - 4)
725
- for i, (rx, ry, feat, pin_ref, mids, location_facts, location_entries) in enumerate(
725
+ for i, (_rx, ry, feat, pin_ref, mids, location_facts, location_entries) in enumerate(
726
726
  sorted(y_refs, key=lambda r: abs(r[1] - datum_y))
727
727
  ):
728
728
  if abs(ry - datum_y) * a.SCALE < 1.0:
@@ -72,9 +72,7 @@ class _MachinedJobContext:
72
72
  if view not in self.foreign_boxes_by_view:
73
73
  self.foreign_boxes_by_view[view] = tuple(
74
74
  (box, has_label)
75
- for _name, owner, box, has_label in self.bindings.attribute_annotations(
76
- self.dwg, self.a
77
- )
75
+ for _name, owner, box, has_label in self.bindings.attribute_annotations(self.dwg)
78
76
  if owner != view
79
77
  )
80
78
  pad = self.dwg.draft.pad_around_text
@@ -362,14 +360,14 @@ class _MachinedJobContext:
362
360
  )
363
361
  search_tip = normal_stub
364
362
 
365
- def build_at(elbow, _tip=tip, _feature=feature):
363
+ def build_at(elbow, _tip=tip, _feature=feature, normal_stub=normal_stub):
366
364
  if normal_stub is not None:
367
365
  return decorate(
368
366
  bindings.RoutedLeader(_tip, (normal_stub,), elbow, label, dwg.draft)
369
367
  )
370
368
  return build(_tip, (*elbow, 0), _feature)
371
369
 
372
- def build_routed(bends, elbow, _tip=tip):
370
+ def build_routed(bends, elbow, _tip=tip, normal_stub=normal_stub):
373
371
  route_bends = (normal_stub, *bends) if normal_stub is not None else bends
374
372
  return decorate(bindings.RoutedLeader(_tip, route_bends, elbow, label, dwg.draft))
375
373
 
@@ -132,7 +132,8 @@ def _coalesce_aligned_linear_pitch_dims(dwg, a: Analysis, *, ctx) -> None:
132
132
  dwg.remove(name)
133
133
  identity["measurement"] = tuple(measurements)
134
134
  ctx.registry.reapply(chosen_name, identity)
135
- setattr(chosen, "source_features", tuple(owners))
135
+ # Feature annotations acquire this provenance after they are built.
136
+ setattr(chosen, "source_features", tuple(owners)) # noqa: B010
136
137
 
137
138
 
138
139
  def _add_grid_pitch_dims(