draftwright 0.4.33__tar.gz → 0.4.34__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 (717) hide show
  1. {draftwright-0.4.33 → draftwright-0.4.34}/PKG-INFO +1 -1
  2. {draftwright-0.4.33 → draftwright-0.4.34}/pyproject.toml +1 -1
  3. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/_core.py +5 -0
  4. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/analysis.py +11 -3
  5. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/annotations/_common.py +59 -11
  6. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/annotations/from_model.py +590 -45
  7. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/annotations/holes.py +22 -5
  8. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/annotations/leaders.py +108 -20
  9. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/annotations/orchestrator.py +9 -1
  10. draftwright-0.4.34/src/draftwright/annotations/routed.py +107 -0
  11. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/builder.py +19 -3
  12. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/compose.py +7 -2
  13. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/document.py +15 -1
  14. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/document_input.py +43 -3
  15. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/drawing.py +137 -6
  16. draftwright-0.4.34/src/draftwright/linting/boss_coverage.py +242 -0
  17. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/requirements.py +12 -0
  18. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/model/callout.py +7 -3
  19. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/model/compiled.py +3 -1
  20. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/model/detect.py +21 -34
  21. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/model/ir.py +4 -0
  22. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/sheet.py +11 -6
  23. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/sheet_emit.py +2 -0
  24. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_audit_differential.py +4 -0
  25. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_boss_ownership.py +149 -15
  26. draftwright-0.4.34/tests/test_document_build.py +416 -0
  27. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_feature_leader_candidate_regions.py +189 -1
  28. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_gdt_placement.py +85 -0
  29. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1308_machined_leader_analytics.py +4 -4
  30. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_lint_structural.py +1 -0
  31. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_lint_summary.py +11 -0
  32. draftwright-0.4.34/tests/test_pareto_loop_canary_issue_1753.py +171 -0
  33. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_pmi.py +16 -0
  34. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_pmi_gtol_lowering.py +21 -0
  35. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_private_test_attr_reads.py +2 -0
  36. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_private_test_imports.py +8 -0
  37. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_requirement_catalog.py +1 -1
  38. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_requirement_catalog_families.py +1 -0
  39. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_sheet_emit.py +1 -0
  40. draftwright-0.4.34/tests/test_sheet_fallback_issue_1797.py +181 -0
  41. draftwright-0.4.33/tests/test_document_build.py +0 -203
  42. draftwright-0.4.33/tests/test_pareto_loop_canary_issue_1753.py +0 -288
  43. {draftwright-0.4.33 → draftwright-0.4.34}/.gitignore +0 -0
  44. {draftwright-0.4.33 → draftwright-0.4.34}/CHANGELOG.md +0 -0
  45. {draftwright-0.4.33 → draftwright-0.4.34}/LICENSE +0 -0
  46. {draftwright-0.4.33 → draftwright-0.4.34}/README.md +0 -0
  47. {draftwright-0.4.33 → draftwright-0.4.34}/docs/adr/README.md +0 -0
  48. {draftwright-0.4.33 → draftwright-0.4.34}/docs/reference/recogniser-capabilities.md +0 -0
  49. {draftwright-0.4.33 → draftwright-0.4.34}/docs/reference/sheet.md +0 -0
  50. {draftwright-0.4.33 → draftwright-0.4.34}/docs/research/1062-repeating-radial-profile-evidence.md +0 -0
  51. {draftwright-0.4.33 → draftwright-0.4.34}/skills/SKILL.md +0 -0
  52. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/__init__.py +0 -0
  53. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/_build_profile.py +0 -0
  54. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/_geometry.py +0 -0
  55. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/_pmi_part21.py +0 -0
  56. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/_warnings.py +0 -0
  57. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/angular_geometry.py +0 -0
  58. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/annotate.py +0 -0
  59. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/annotations/__init__.py +0 -0
  60. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/annotations/angular.py +0 -0
  61. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/annotations/balloons.py +0 -0
  62. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/annotations/gears.py +0 -0
  63. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/annotations/sections.py +0 -0
  64. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/audit.py +0 -0
  65. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/blend_contract.py +0 -0
  66. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/cli.py +0 -0
  67. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/document_evidence.py +0 -0
  68. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/evaluation/__init__.py +0 -0
  69. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/evaluation/step_analysis.py +0 -0
  70. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/export.py +0 -0
  71. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/feature_identity.py +0 -0
  72. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/fits.py +0 -0
  73. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/fonts/IBMPlexMono-Regular.ttf +0 -0
  74. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/fonts/IBMPlexSansCondensed-Regular.ttf +0 -0
  75. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/fonts/LICENSE-IBMPlexMono-OFL.txt +0 -0
  76. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/fonts/LICENSE-IBMPlexSansCondensed-OFL.txt +0 -0
  77. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/fonts/__init__.py +0 -0
  78. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/inspection.py +0 -0
  79. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/inspection_contract.py +0 -0
  80. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/intents.py +0 -0
  81. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/layout.py +0 -0
  82. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/leader_policy.py +0 -0
  83. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/__init__.py +0 -0
  84. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/_registry.py +0 -0
  85. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/angled_step_coverage.py +0 -0
  86. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/angular.py +0 -0
  87. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/blend_coverage.py +0 -0
  88. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/chamfer_coverage.py +0 -0
  89. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/channel_coverage.py +0 -0
  90. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/circular_blind_step_coverage.py +0 -0
  91. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/coverage.py +0 -0
  92. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/envelope_coverage.py +0 -0
  93. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/evidence.py +0 -0
  94. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/fillet_coverage.py +0 -0
  95. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/flat_coverage.py +0 -0
  96. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/gear_coverage.py +0 -0
  97. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/groove_coverage.py +0 -0
  98. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/gusset_rib_coverage.py +0 -0
  99. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/hole_coverage.py +0 -0
  100. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/ink_overlap.py +0 -0
  101. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/issues.py +0 -0
  102. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/oriented_slot_coverage.py +0 -0
  103. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/pad_coverage.py +0 -0
  104. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/paired_ramp_step_coverage.py +0 -0
  105. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/passage_coverage.py +0 -0
  106. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/plate_coverage.py +0 -0
  107. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/pmi_coverage.py +0 -0
  108. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/pocket_coverage.py +0 -0
  109. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/pocket_pattern_coverage.py +0 -0
  110. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/polygonal_boss_coverage.py +0 -0
  111. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/polygonal_stock_coverage.py +0 -0
  112. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/prismatic_pocket_coverage.py +0 -0
  113. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/profiled_bore_coverage.py +0 -0
  114. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/quality.py +0 -0
  115. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/rectangular_blind_slot_coverage.py +0 -0
  116. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/round_bottom_blind_slot_coverage.py +0 -0
  117. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/schedule_evidence.py +0 -0
  118. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/section_recess_coverage.py +0 -0
  119. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/slot_coverage.py +0 -0
  120. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/structural.py +0 -0
  121. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/suggest.py +0 -0
  122. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/through_step_coverage.py +0 -0
  123. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/linting/turned_step_coverage.py +0 -0
  124. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/location_contract.py +0 -0
  125. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/make_drawing.py +0 -0
  126. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/measurement_support.py +0 -0
  127. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/model/__init__.py +0 -0
  128. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/model/declare.py +0 -0
  129. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/model/planner.py +0 -0
  130. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/model/pmi_lowering.py +0 -0
  131. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/oriented_slot_contract.py +0 -0
  132. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/plate_correspondence.py +0 -0
  133. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/pmi.py +0 -0
  134. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/profile_angles.py +0 -0
  135. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/progress.py +0 -0
  136. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/projection.py +0 -0
  137. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/py.typed +0 -0
  138. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/recogniser_contract.py +0 -0
  139. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/recogniser_policy.py +0 -0
  140. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/recogniser_schema.py +0 -0
  141. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/recognition/__init__.py +0 -0
  142. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/recognition_cache.py +0 -0
  143. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/recognition_frame.py +0 -0
  144. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/recognition_ownership.py +0 -0
  145. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/registry.py +0 -0
  146. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/repair.py +0 -0
  147. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/replay_assessment.py +0 -0
  148. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/reporting.py +0 -0
  149. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/score.py +0 -0
  150. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/section_recess_contract.py +0 -0
  151. {draftwright-0.4.33 → draftwright-0.4.34}/src/draftwright/view_plan.py +0 -0
  152. {draftwright-0.4.33 → draftwright-0.4.34}/tests/_burden_report.py +0 -0
  153. {draftwright-0.4.33 → draftwright-0.4.34}/tests/_corpus_cover.py +0 -0
  154. {draftwright-0.4.33 → draftwright-0.4.34}/tests/_drawing_helpers.py +0 -0
  155. {draftwright-0.4.33 → draftwright-0.4.34}/tests/_evidence_contract.py +0 -0
  156. {draftwright-0.4.33 → draftwright-0.4.34}/tests/_kernel.py +0 -0
  157. {draftwright-0.4.33 → draftwright-0.4.34}/tests/_layout_helpers.py +0 -0
  158. {draftwright-0.4.33 → draftwright-0.4.34}/tests/_layout_sig.py +0 -0
  159. {draftwright-0.4.33 → draftwright-0.4.34}/tests/_mutation_corpus.py +0 -0
  160. {draftwright-0.4.33 → draftwright-0.4.34}/tests/_parts.py +0 -0
  161. {draftwright-0.4.33 → draftwright-0.4.34}/tests/_recogniser_public_contract.py +0 -0
  162. {draftwright-0.4.33 → draftwright-0.4.34}/tests/_section_recess_cases.py +0 -0
  163. {draftwright-0.4.33 → draftwright-0.4.34}/tests/_tier_manifest.py +0 -0
  164. {draftwright-0.4.33 → draftwright-0.4.34}/tests/_unit_manifest.py +0 -0
  165. {draftwright-0.4.33 → draftwright-0.4.34}/tests/conftest.py +0 -0
  166. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/ap242_single_cylinder_diameter.step +0 -0
  167. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/README.md +0 -0
  168. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/ambiguous-open-semicircle.step +0 -0
  169. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/blind-hole.step +0 -0
  170. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/chamfer-asymmetric.step +0 -0
  171. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/chamfer-compound.step +0 -0
  172. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/chamfer-overlap.step +0 -0
  173. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/chamfer-plain.step +0 -0
  174. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/chamfer-planar-x.step +0 -0
  175. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/chamfer-planar-y.step +0 -0
  176. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/chamfer-planar-z.step +0 -0
  177. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/chamfer-topology-a.step +0 -0
  178. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/chamfer-topology-b.step +0 -0
  179. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/chamfer-turned.step +0 -0
  180. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/corpus-chamfers-v1.json +0 -0
  181. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/corpus-countersinks-v1.json +0 -0
  182. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/corpus-double-d-bores-v1.json +0 -0
  183. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/corpus-fillets-v1.json +0 -0
  184. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/corpus-flats-v1.json +0 -0
  185. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/corpus-grooves-v1.json +0 -0
  186. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/corpus-hole-patterns-v1.json +0 -0
  187. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/corpus-plates-v1.json +0 -0
  188. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/corpus-pocket-patterns-v1.json +0 -0
  189. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/corpus-pockets-v1.json +0 -0
  190. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/corpus-polygonal-bosses-v1.json +0 -0
  191. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/corpus-polygonal-stock-v1.json +0 -0
  192. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/corpus-rectangular-pads-v1.json +0 -0
  193. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/corpus-turned-steps-v1.json +0 -0
  194. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/corpus-v1.json +0 -0
  195. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/countersink-deburr.step +0 -0
  196. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/countersink-external-cone.step +0 -0
  197. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/countersink-mixed-pair.step +0 -0
  198. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/countersink-single.step +0 -0
  199. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/countersink-topology-a.step +0 -0
  200. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/countersink-topology-b.step +0 -0
  201. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/double-d-axis-x.step +0 -0
  202. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/double-d-axis-y.step +0 -0
  203. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/double-d-blind.step +0 -0
  204. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/double-d-coaxial-compound.step +0 -0
  205. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/double-d-opposed-blind.step +0 -0
  206. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/double-d-roll-30.step +0 -0
  207. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/double-d-round-bore.step +0 -0
  208. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/double-d-single-z.step +0 -0
  209. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/double-d-topology-a.step +0 -0
  210. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/double-d-topology-b.step +0 -0
  211. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/fillet-compound.step +0 -0
  212. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/fillet-overlap.step +0 -0
  213. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/fillet-plain.step +0 -0
  214. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/fillet-planar-x.step +0 -0
  215. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/fillet-planar-y.step +0 -0
  216. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/fillet-planar-z.step +0 -0
  217. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/fillet-repeated.step +0 -0
  218. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/fillet-topology-a.step +0 -0
  219. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/fillet-topology-b.step +0 -0
  220. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/fillet-turned.step +0 -0
  221. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/flat-coaxial.step +0 -0
  222. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/flat-double-d.step +0 -0
  223. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/flat-lone-d.step +0 -0
  224. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/flat-nonround.step +0 -0
  225. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/flat-slanted-double-d.step +0 -0
  226. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/flat-topology-a.step +0 -0
  227. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/flat-topology-b.step +0 -0
  228. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/groove-compound.step +0 -0
  229. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/groove-lone-x.step +0 -0
  230. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/groove-lone-y.step +0 -0
  231. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/groove-lone-z.step +0 -0
  232. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/groove-monotonic-negative.step +0 -0
  233. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/groove-narrow.step +0 -0
  234. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/groove-topology-a.step +0 -0
  235. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/groove-topology-b.step +0 -0
  236. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pad-compound-equal.step +0 -0
  237. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pad-detached-body-negative.step +0 -0
  238. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pad-full-span-ledge-negative.step +0 -0
  239. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pad-nested-staircase-negative.step +0 -0
  240. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pad-topology-a.step +0 -0
  241. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pad-topology-b.step +0 -0
  242. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pad-x-negative.step +0 -0
  243. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pad-x-positive.step +0 -0
  244. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pad-y-negative.step +0 -0
  245. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pad-y-positive.step +0 -0
  246. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pad-z-negative.step +0 -0
  247. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pad-z-positive.step +0 -0
  248. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pattern-ambiguous.step +0 -0
  249. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pattern-grid.step +0 -0
  250. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pattern-topology-a.step +0 -0
  251. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pattern-topology-b.step +0 -0
  252. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/plain-block.step +0 -0
  253. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/plate-compound-equal.step +0 -0
  254. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/plate-cross-topology-a.step +0 -0
  255. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/plate-cross-topology-b.step +0 -0
  256. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/plate-detached-negative.step +0 -0
  257. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/plate-rotational-negative.step +0 -0
  258. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/plate-single-negative.step +0 -0
  259. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/plate-t-xz.step +0 -0
  260. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/plate-t-yz.step +0 -0
  261. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/plate-thick-negative.step +0 -0
  262. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/plate-u-additive.step +0 -0
  263. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/plate-u-cut.step +0 -0
  264. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pocket-compound.step +0 -0
  265. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pocket-edge-anchored.step +0 -0
  266. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pocket-lone.step +0 -0
  267. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pocket-opposed.step +0 -0
  268. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pocket-pattern-ambiguous.step +0 -0
  269. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pocket-pattern-grid.step +0 -0
  270. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pocket-pattern-linear.step +0 -0
  271. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pocket-pattern-pair.step +0 -0
  272. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pocket-pattern-topology-a.step +0 -0
  273. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pocket-pattern-topology-b.step +0 -0
  274. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pocket-prismatic-negative.step +0 -0
  275. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pocket-side.step +0 -0
  276. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pocket-through-negative.step +0 -0
  277. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pocket-topology-a.step +0 -0
  278. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pocket-topology-b.step +0 -0
  279. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/pocket-two-equal.step +0 -0
  280. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/polygonal-boss-compound-equal.step +0 -0
  281. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/polygonal-boss-detached-negative.step +0 -0
  282. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/polygonal-boss-in-plane-rotated.step +0 -0
  283. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/polygonal-boss-other-protrusions-negative.step +0 -0
  284. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/polygonal-boss-recess-negative.step +0 -0
  285. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/polygonal-boss-stock-negative.step +0 -0
  286. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/polygonal-boss-topology-a.step +0 -0
  287. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/polygonal-boss-topology-b.step +0 -0
  288. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/polygonal-boss-x.step +0 -0
  289. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/polygonal-boss-y.step +0 -0
  290. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/polygonal-boss-z.step +0 -0
  291. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/polygonal-stock-compound-negative.step +0 -0
  292. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/polygonal-stock-cylinder-negative.step +0 -0
  293. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/polygonal-stock-irregular-negative.step +0 -0
  294. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/polygonal-stock-octagon-negative.step +0 -0
  295. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/polygonal-stock-recess-negative.step +0 -0
  296. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/polygonal-stock-roll17.step +0 -0
  297. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/polygonal-stock-topology-a.step +0 -0
  298. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/polygonal-stock-topology-b.step +0 -0
  299. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/polygonal-stock-translated.step +0 -0
  300. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/polygonal-stock-x.step +0 -0
  301. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/polygonal-stock-y.step +0 -0
  302. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/topology-a.step +0 -0
  303. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/topology-b.step +0 -0
  304. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/turned-step-axis-x.step +0 -0
  305. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/turned-step-axis-y.step +0 -0
  306. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/turned-step-axis-z.step +0 -0
  307. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/turned-step-compound.step +0 -0
  308. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/turned-step-repeated-lengths.step +0 -0
  309. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/turned-step-through-bore.step +0 -0
  310. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/turned-step-topology-a.step +0 -0
  311. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/turned-step-topology-b.step +0 -0
  312. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/evaluation/turned-step-translated-blind-bore.step +0 -0
  313. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/grm03_thumbwheel_drive_screw.step +0 -0
  314. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/grm03_thumbwheel_drive_screw_ap242_pmi.step +0 -0
  315. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/grm04_drive_plate.step +0 -0
  316. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/if_step_flat_across_cylinder.step +0 -0
  317. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/issue_1058_wheel_rh.step +0 -0
  318. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/issue_1247_angled_blind_step.step +0 -0
  319. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/issue_1595_whistle_key_frame.step +0 -0
  320. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/issue_1595_whistle_key_lever.step +0 -0
  321. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/issue_909_basic_part_design_017_body.step +0 -0
  322. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/issue_915_case_study_2.step +0 -0
  323. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/nist_ctc_01_asme1_ap203.stp +0 -0
  324. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/nist_ctc_01_asme1_ap242.stp +0 -0
  325. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/nist_ctc_02_asme1_ap203.stp +0 -0
  326. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/nist_ctc_02_asme1_ap242.stp +0 -0
  327. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/nist_ctc_03_asme1_ap203.stp +0 -0
  328. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/nist_ctc_03_asme1_ap242.stp +0 -0
  329. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/nist_ctc_04_asme1_ap203.stp +0 -0
  330. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/nist_ctc_04_asme1_ap242.stp +0 -0
  331. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/nist_ctc_05_asme1_ap203.stp +0 -0
  332. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/nist_ctc_05_asme1_ap242.stp +0 -0
  333. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/tuner_jig_blind_obround_pockets.step +0 -0
  334. {draftwright-0.4.33 → draftwright-0.4.34}/tests/fixtures/whistle_frame_reference.step +0 -0
  335. {draftwright-0.4.33 → draftwright-0.4.34}/tests/refactor_golden/bracket_section.json +0 -0
  336. {draftwright-0.4.33 → draftwright-0.4.34}/tests/refactor_golden/centered_rebate.json +0 -0
  337. {draftwright-0.4.33 → draftwright-0.4.34}/tests/refactor_golden/chamfered.json +0 -0
  338. {draftwright-0.4.33 → draftwright-0.4.34}/tests/refactor_golden/filleted.json +0 -0
  339. {draftwright-0.4.33 → draftwright-0.4.34}/tests/refactor_golden/flange_dense.json +0 -0
  340. {draftwright-0.4.33 → draftwright-0.4.34}/tests/refactor_golden/grid_plate.json +0 -0
  341. {draftwright-0.4.33 → draftwright-0.4.34}/tests/refactor_golden/grooved_shaft.json +0 -0
  342. {draftwright-0.4.33 → draftwright-0.4.34}/tests/refactor_golden/hex_bar.json +0 -0
  343. {draftwright-0.4.33 → draftwright-0.4.34}/tests/refactor_golden/holed_slot.json +0 -0
  344. {draftwright-0.4.33 → draftwright-0.4.34}/tests/refactor_golden/pocketed.json +0 -0
  345. {draftwright-0.4.33 → draftwright-0.4.34}/tests/refactor_golden/prismatic_ladder.json +0 -0
  346. {draftwright-0.4.33 → draftwright-0.4.34}/tests/refactor_golden/scattered_plate.json +0 -0
  347. {draftwright-0.4.33 → draftwright-0.4.34}/tests/refactor_golden/side_drilled.json +0 -0
  348. {draftwright-0.4.33 → draftwright-0.4.34}/tests/refactor_golden/turned_stepped.json +0 -0
  349. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_add_dimension.py +0 -0
  350. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_adr0018_view_routing.py +0 -0
  351. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_adr0018_view_selection.py +0 -0
  352. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_adr_corpus.py +0 -0
  353. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_agent_improvement_canary_issue_1716.py +0 -0
  354. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_agents_guide.py +0 -0
  355. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_analysis_geometry.py +0 -0
  356. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_angle_patterns.py +0 -0
  357. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_angular_references.py +0 -0
  358. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_angular_rendering.py +0 -0
  359. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_annotation_box_composition.py +0 -0
  360. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_annotation_box_corpus.py +0 -0
  361. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_api_docs.py +0 -0
  362. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_architecture_docs.py +0 -0
  363. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_arrangement_gate.py +0 -0
  364. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_assessment_comparison_issue_1712.py +0 -0
  365. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_axial_dimensions.py +0 -0
  366. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_balloon_ring_standoff.py +0 -0
  367. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_build_drawing_entrypoints.py +0 -0
  368. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_build_profile_harness.py +0 -0
  369. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_burden_report.py +0 -0
  370. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_candidate_evidence_issue_1726.py +0 -0
  371. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_canonical_angles.py +0 -0
  372. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_carve_free_position_callers.py +0 -0
  373. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_channel_ownership.py +0 -0
  374. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_circular_blind_step_semantics.py +0 -0
  375. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_cli_behavior.py +0 -0
  376. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_cli_report_sidecar.py +0 -0
  377. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_clone_budget.py +0 -0
  378. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_compiled_plan_boundary.py +0 -0
  379. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_compose_then_pack.py +0 -0
  380. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_corpus_cover.py +0 -0
  381. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_counting_calls.py +0 -0
  382. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_coverage_mode.py +0 -0
  383. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_declaration_identity_issue_1710.py +0 -0
  384. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_declaration_report_issue_1710.py +0 -0
  385. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_declare.py +0 -0
  386. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_declared_recognition_gate.py +0 -0
  387. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_declared_report_issue_1688.py +0 -0
  388. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_deferred_edits.py +0 -0
  389. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_dense_sheet_canary.py +0 -0
  390. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_deprecation_dates.py +0 -0
  391. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_depth_estimators.py +0 -0
  392. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_detail_views.py +0 -0
  393. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_detect_once.py +0 -0
  394. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_detect_registry.py +0 -0
  395. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_diameter_deduplication.py +0 -0
  396. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_diameter_leaders.py +0 -0
  397. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_dimension_lane_canary_issue_1757.py +0 -0
  398. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_dimension_role_vocabulary.py +0 -0
  399. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_document_claim_authority.py +0 -0
  400. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_document_claims.py +0 -0
  401. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_document_coverage.py +0 -0
  402. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_document_report.py +0 -0
  403. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_document_report_authority.py +0 -0
  404. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_drawing_encapsulation.py +0 -0
  405. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_drawing_operations.py +0 -0
  406. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_drawing_state.py +0 -0
  407. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_dynamic_corridors.py +0 -0
  408. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_e2e_slice.py +0 -0
  409. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_e2e_standards.py +0 -0
  410. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_equivalent_dimension_presentations_issue_1759.py +0 -0
  411. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_export_dxf_curves.py +0 -0
  412. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_export_dxf_zoom.py +0 -0
  413. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_export_formats.py +0 -0
  414. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_export_reproducible.py +0 -0
  415. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_export_shape.py +0 -0
  416. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_external_recognition_boundary.py +0 -0
  417. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_feature_edit_corridors.py +0 -0
  418. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_feature_edit_replay.py +0 -0
  419. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_feature_edit_verbs.py +0 -0
  420. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_feature_provenance.py +0 -0
  421. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_feature_queries.py +0 -0
  422. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_fillets_adjacency.py +0 -0
  423. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_fit_calculations.py +0 -0
  424. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_fits.py +0 -0
  425. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_flat_completeness.py +0 -0
  426. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_flat_stock_identity.py +0 -0
  427. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_flat_stock_opposition.py +0 -0
  428. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_format_selector.py +0 -0
  429. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_formatting.py +0 -0
  430. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_framed_step_family_evidence.py +0 -0
  431. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_geometry_graph_spike.py +0 -0
  432. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_grid_lattice_convention.py +0 -0
  433. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_groove_completeness_evidence.py +0 -0
  434. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_groove_profile.py +0 -0
  435. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_gusset_rib_semantics.py +0 -0
  436. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_hole_annotations.py +0 -0
  437. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_hole_pattern_callouts.py +0 -0
  438. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_hole_table.py +0 -0
  439. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_import_boundaries.py +0 -0
  440. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_inspection_contract.py +0 -0
  441. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_interior_label_placement.py +0 -0
  442. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_iso_layout.py +0 -0
  443. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_iso_nts_caption_placement.py +0 -0
  444. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_isometric_orientation.py +0 -0
  445. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_isometric_placement.py +0 -0
  446. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1000_envelope_reuse.py +0 -0
  447. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1006_measurement_comparison.py +0 -0
  448. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1058_wheel_profile.py +0 -0
  449. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1073_cross_body_patterns.py +0 -0
  450. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1082_polygonal_stock.py +0 -0
  451. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1086_declared_gears.py +0 -0
  452. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1116_ap242_hole_tolerance_lowering.py +0 -0
  453. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1126_requesting_less_never_scores_better.py +0 -0
  454. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1130_view_planning_evidence.py +0 -0
  455. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1132_turned_profile_span_is_reported.py +0 -0
  456. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1142_hole_leader_labels.py +0 -0
  457. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1143_hole_completeness.py +0 -0
  458. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1144_transactional_hole_table.py +0 -0
  459. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1146_scale_completeness.py +0 -0
  460. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1147_legibility_pair_aggregation.py +0 -0
  461. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1153_contradictory_dimensions.py +0 -0
  462. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1154_one_owner_per_measurement.py +0 -0
  463. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1155_grm04_sheet_use.py +0 -0
  464. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1157_no_implicit_general_tolerance.py +0 -0
  465. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1166_cross_pass_feature_leaders.py +0 -0
  466. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1176_quality_fidelity.py +0 -0
  467. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1177_angular_dimensions.py +0 -0
  468. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1187_unroutable_leaders.py +0 -0
  469. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1188_per_view_assignment.py +0 -0
  470. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1190_section_decision.py +0 -0
  471. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1196_deterministic_view_names.py +0 -0
  472. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1202_observed_drawing_consumer.py +0 -0
  473. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1204_multiscale_view_issues.py +0 -0
  474. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1209_linear_pmi_witnesses.py +0 -0
  475. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1215_envelope_tolerance.py +0 -0
  476. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1215_no_approved_tolerance_is_dropped.py +0 -0
  477. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1216_callout_reservation_measures_ink.py +0 -0
  478. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1216_pairwise_across_scale_groups.py +0 -0
  479. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1217_claimed_representations.py +0 -0
  480. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1217_the_facility_is_shared.py +0 -0
  481. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1219_location_claims_its_own_axis.py +0 -0
  482. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1229_ledger_member_keying.py +0 -0
  483. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1240_iso_above_strip_visibility.py +0 -0
  484. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1245_passage_disposition.py +0 -0
  485. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1246_prismatic_pocket_disposition.py +0 -0
  486. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1247_angled_step_disposition.py +0 -0
  487. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1254_turned_chamfers.py +0 -0
  488. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1260_view_constraints.py +0 -0
  489. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1262_automatic_turned_views.py +0 -0
  490. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1276_turned_leader_targets.py +0 -0
  491. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1281_turned_fillets.py +0 -0
  492. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1296_cylindrical_diameter_pmi.py +0 -0
  493. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1298_manufacturing_requirements.py +0 -0
  494. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1299_page_escalation.py +0 -0
  495. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1312_engine_costs.py +0 -0
  496. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1325_nominal_agreement.py +0 -0
  497. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1332_overlap_remedy.py +0 -0
  498. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1332_zone_labels.py +0 -0
  499. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1333_bounded_ink_repair.py +0 -0
  500. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1334_prevent_ink.py +0 -0
  501. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1336_grm03_ap242_pmi_fixture.py +0 -0
  502. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1338_scale_before_page_escalation.py +0 -0
  503. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1349_precision_display.py +0 -0
  504. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1350_detected_takeover.py +0 -0
  505. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1351_structured_note_coverage.py +0 -0
  506. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1352_searchable_pdf_text.py +0 -0
  507. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1353_cnc_authoritative_workflow.py +0 -0
  508. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1357_framed_activation.py +0 -0
  509. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1357_framed_boundary.py +0 -0
  510. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1357_plural_turned_profiles.py +0 -0
  511. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1357_pmi_frame.py +0 -0
  512. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1360_thread_depth.py +0 -0
  513. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1369_hole_completeness_evidence.py +0 -0
  514. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1370_countersink_completeness_evidence.py +0 -0
  515. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1370_double_d_completeness_evidence.py +0 -0
  516. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1370_hole_pattern_completeness_evidence.py +0 -0
  517. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1371_flat_completeness_evidence.py +0 -0
  518. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1371_polygonal_stock_completeness_evidence.py +0 -0
  519. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1373_plate_completeness_evidence.py +0 -0
  520. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1374_chamfer_completeness_evidence.py +0 -0
  521. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1374_fillet_completeness_evidence.py +0 -0
  522. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1374_turned_step_completeness_evidence.py +0 -0
  523. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1378_diameter_leader_targets.py +0 -0
  524. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1390_sheet_registration.py +0 -0
  525. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1392_recognisers_048.py +0 -0
  526. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1395_degenerate_iso_region.py +0 -0
  527. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1396_layout_advisories.py +0 -0
  528. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1397_unverifiable_requirement_message.py +0 -0
  529. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1421_rectangular_blind_slot_completeness.py +0 -0
  530. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1421_rectangular_blind_slot_semantics.py +0 -0
  531. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1421_round_bottom_blind_slot_completeness.py +0 -0
  532. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1421_round_bottom_blind_slot_semantics.py +0 -0
  533. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1432_adoption.py +0 -0
  534. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1432_boundary_failures.py +0 -0
  535. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1432_oriented_slot_semantics.py +0 -0
  536. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1433_blend_semantics.py +0 -0
  537. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1450_boss_blend_ownership.py +0 -0
  538. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1460_step_inspection.py +0 -0
  539. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1466_dimension_options.py +0 -0
  540. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1466_semantic_sides.py +0 -0
  541. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1479_radius_leader_targets.py +0 -0
  542. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1485_curved_pockets.py +0 -0
  543. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1485_quiddity_024_boundary.py +0 -0
  544. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1485_rounded_pockets.py +0 -0
  545. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1505_diameter_coverage.py +0 -0
  546. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1505_short_axial_chains.py +0 -0
  547. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1511_turned_boss_heights.py +0 -0
  548. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1514_projection_safeguard.py +0 -0
  549. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1515_first_angle.py +0 -0
  550. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1516_dimension_text.py +0 -0
  551. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1517_through_indicator.py +0 -0
  552. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1518_explicit_rear.py +0 -0
  553. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1524_tolerance_magnitude.py +0 -0
  554. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1530_section_provenance.py +0 -0
  555. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1531_semantic_hole_counts.py +0 -0
  556. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1532_authored_section_examples.py +0 -0
  557. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1533_review_diagnostics.py +0 -0
  558. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1534_build_progress.py +0 -0
  559. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1536_title_overflow.py +0 -0
  560. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1543_feature_schedules.py +0 -0
  561. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1543_schedule_requirements.py +0 -0
  562. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1544_frame_document_canary.py +0 -0
  563. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1555_turned_recognition_format_invariance.py +0 -0
  564. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1560_envelope_axes.py +0 -0
  565. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1563_sheet_pmi_reconciliation.py +0 -0
  566. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1585_title_block_date.py +0 -0
  567. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1593_title_block_keepout.py +0 -0
  568. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1596_bolt_circle_corroboration.py +0 -0
  569. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1598_hex_pockets.py +0 -0
  570. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1599_duplicate_slot_widths.py +0 -0
  571. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1601_flat_precision.py +0 -0
  572. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1603_cli_output_paths.py +0 -0
  573. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1604_internal_section.py +0 -0
  574. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1612_frame_sergio_coverage.py +0 -0
  575. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1612_sheet_margins.py +0 -0
  576. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_1613_circular_channel.py +0 -0
  577. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_367_leader_ink.py +0 -0
  578. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_443_grm03_axial_coverage.py +0 -0
  579. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_563_placement_intent.py +0 -0
  580. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_676_polygonal_boss.py +0 -0
  581. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_676_polygonal_boss_declare.py +0 -0
  582. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_740_leader_assignment.py +0 -0
  583. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_798_floor_cardinality.py +0 -0
  584. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_798_material_field.py +0 -0
  585. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_798_silhouette_lint.py +0 -0
  586. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_827_real_part_canary.py +0 -0
  587. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_883_location_identity.py +0 -0
  588. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_885_prismatic_coverage.py +0 -0
  589. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_909_sloped_profile.py +0 -0
  590. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_915_dense_case.py +0 -0
  591. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_916_pocket_leader.py +0 -0
  592. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_917_open_channel.py +0 -0
  593. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_924_zero_length_shoulders.py +0 -0
  594. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_955_height_contingency.py +0 -0
  595. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_issue_958_cross_solid_recognition.py +0 -0
  596. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_label_provenance.py +0 -0
  597. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_layout.py +0 -0
  598. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_layout_cleanliness.py +0 -0
  599. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_layout_constants.py +0 -0
  600. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_layout_evidence_issue_1711.py +0 -0
  601. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_layout_generalisation.py +0 -0
  602. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_layout_hypothesis.py +0 -0
  603. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_layout_override_lane_issue_1757.py +0 -0
  604. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_layout_override_side_issue_1757.py +0 -0
  605. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_layout_property.py +0 -0
  606. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_leader_footprint.py +0 -0
  607. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_leader_region_policy.py +0 -0
  608. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_lint_box_cache.py +0 -0
  609. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_lint_coverage.py +0 -0
  610. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_lint_ink_overlap.py +0 -0
  611. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_lint_reconciliation.py +0 -0
  612. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_lint_suggestions.py +0 -0
  613. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_linting.py +0 -0
  614. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_location_dimensions.py +0 -0
  615. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_location_vocabulary.py +0 -0
  616. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_machined_feature_callouts.py +0 -0
  617. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_make_drawing_entrypoints.py +0 -0
  618. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_nested_recognition_ownership.py +0 -0
  619. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_note_verb.py +0 -0
  620. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_object_aspects.py +0 -0
  621. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_occupancy_boxes.py +0 -0
  622. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_occurrence_recognition_ownership.py +0 -0
  623. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_overall_height_coverage.py +0 -0
  624. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_pad_completeness_evidence.py +0 -0
  625. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_paired_ramp_semantics.py +0 -0
  626. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_parameter_id.py +0 -0
  627. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_part_classification.py +0 -0
  628. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_part_model.py +0 -0
  629. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_pattern_ownership.py +0 -0
  630. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_pitch_dim_footprint.py +0 -0
  631. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_place_dimension.py +0 -0
  632. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_plate_ownership.py +0 -0
  633. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_pmi_common_labels.py +0 -0
  634. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_pmi_datum_lowering.py +0 -0
  635. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_pmi_part21.py +0 -0
  636. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_pocket_completeness_evidence.py +0 -0
  637. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_pocket_pattern.py +0 -0
  638. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_pocket_pattern_completeness_evidence.py +0 -0
  639. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_pocket_pattern_recognition.py +0 -0
  640. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_polygonal_boss_completeness_evidence.py +0 -0
  641. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_principal_profile_classifier.py +0 -0
  642. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_prismatic_boss_diameter.py +0 -0
  643. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_prismatic_classification.py +0 -0
  644. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_prismatic_dimensions.py +0 -0
  645. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_profile_angles.py +0 -0
  646. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_projection_symbol_default.py +0 -0
  647. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_quality_components.py +0 -0
  648. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_quiddity_lifecycle_boundary.py +0 -0
  649. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_real_part_fixtures.py +0 -0
  650. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_recogniser_adoption.py +0 -0
  651. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_recogniser_capabilities.py +0 -0
  652. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_recogniser_contract.py +0 -0
  653. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_recogniser_policy.py +0 -0
  654. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_recogniser_step_inventory.py +0 -0
  655. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_recognition_boundary_failures.py +0 -0
  656. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_recognition_evidence_schema.py +0 -0
  657. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_recognition_policy_dispositions.py +0 -0
  658. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_recognition_result.py +0 -0
  659. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_refactor_golden.py +0 -0
  660. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_registry.py +0 -0
  661. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_render_seam.py +0 -0
  662. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_repack_geometry_seam.py +0 -0
  663. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_repair.py +0 -0
  664. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_replay_assessment_issue_1715.py +0 -0
  665. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_report_projection.py +0 -0
  666. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_report_status_reasons_issue_1618.py +0 -0
  667. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_report_writer.py +0 -0
  668. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_requirement_applicability.py +0 -0
  669. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_requirement_carriers.py +0 -0
  670. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_scale_policy.py +0 -0
  671. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_scale_selection.py +0 -0
  672. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_score.py +0 -0
  673. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_script_detail_parity.py +0 -0
  674. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_section_hatching.py +0 -0
  675. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_section_recess_contract.py +0 -0
  676. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_section_recess_pockets.py +0 -0
  677. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_shared_box_memo.py +0 -0
  678. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_shared_drawing_cache.py +0 -0
  679. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_sheet_furniture.py +0 -0
  680. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_sheet_gdt.py +0 -0
  681. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_sheet_generation_snapshot.py +0 -0
  682. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_sheet_identity_invariant.py +0 -0
  683. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_sheet_notes.py +0 -0
  684. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_sheet_of.py +0 -0
  685. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_sheet_section.py +0 -0
  686. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_sheet_tables.py +0 -0
  687. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_slanted_blind_step.py +0 -0
  688. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_slot_completeness.py +0 -0
  689. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_slot_pattern.py +0 -0
  690. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_slot_pattern_recognition.py +0 -0
  691. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_slot_recognition.py +0 -0
  692. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_soft_deprecation.py +0 -0
  693. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_solve_trace.py +0 -0
  694. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_step_analysis_evaluation.py +0 -0
  695. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_strip_layout.py +0 -0
  696. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_strip_zones.py +0 -0
  697. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_suite_shape.py +0 -0
  698. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_suppression_ledger.py +0 -0
  699. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_suppression_marks.py +0 -0
  700. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_through_step_ownership.py +0 -0
  701. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_through_step_semantics.py +0 -0
  702. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_tier_manifest.py +0 -0
  703. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_title_block_units_format.py +0 -0
  704. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_tolerances.py +0 -0
  705. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_turned_diameters.py +0 -0
  706. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_turned_lengths.py +0 -0
  707. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_turned_step_ownership.py +0 -0
  708. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_turned_steps.py +0 -0
  709. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_two_pass_layout.py +0 -0
  710. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_typ_dimensions.py +0 -0
  711. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_typed_remediation_projection_issue_1759.py +0 -0
  712. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_version_bump_ci.py +0 -0
  713. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_view_blocks.py +0 -0
  714. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_view_coordinates.py +0 -0
  715. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_view_plan.py +0 -0
  716. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_witness_label_reconciliation.py +0 -0
  717. {draftwright-0.4.33 → draftwright-0.4.34}/tests/test_workflows.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: draftwright
3
- Version: 0.4.33
3
+ Version: 0.4.34
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
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "draftwright"
7
- version = "0.4.33"
7
+ version = "0.4.34"
8
8
  description = "Automated technical-drawing generation for build123d"
9
9
  readme = "README.md"
10
10
  license = { file = "LICENSE" }
@@ -1371,6 +1371,11 @@ class Analysis:
1371
1371
  # from the effective mode so the ignored-PMI diagnostic can distinguish that default from
1372
1372
  # an explicit opt-out without widening the three-mode renderer contract (#623).
1373
1373
  pmi_defaulted: bool
1374
+ # True when this layout is a member projection of a Document's sealed acquisition.
1375
+ document_member: bool = False
1376
+ # Exact top-level annotation objects supplied by the Document acquisition. Member-authored
1377
+ # annotations are absent even when they carry external provenance of their own.
1378
+ document_source_annotations: tuple[object, ...] = ()
1374
1379
  # Standing ISO 7200 title-block fields (#766) — defaulted, so they sit after the
1375
1380
  # non-default fields above. Defaults preserve the prior output: revision "A", the rest
1376
1381
  # blank (the TitleBlock helper's own defaults).
@@ -868,8 +868,8 @@ def _analyse(
868
868
  or {"status": "not_evaluated", "gauge": None, "refusal_reason": None}
869
869
  )
870
870
  src = str(_reuse.step_file)
871
- pmi_defaulted = _reuse.pmi_defaulted
872
- pmi_mode = _reuse.pmi_mode
871
+ pmi_defaulted = pmi is None
872
+ pmi_mode = _reuse.pmi_mode if pmi_defaulted else pmi
873
873
  pmi_report = _reuse.pmi_report
874
874
  pmi_records = _reuse.pmi if pmi_mode != "off" else []
875
875
  bb = _reuse.bb
@@ -1192,7 +1192,11 @@ def _analyse(
1192
1192
  )
1193
1193
  sizing_groups = annotation_groups(strip_sizing_model, sizing_groups)
1194
1194
  bore_callout_width = _est_planned_bore_callout_width(
1195
- sizing_groups, _draft_est, font_size=_FONT_SIZE, pad_around_text=_pad_around_text
1195
+ sizing_groups,
1196
+ _draft_est,
1197
+ font_size=_FONT_SIZE,
1198
+ pad_around_text=_pad_around_text,
1199
+ include_source_pmi=_document_input is None or pmi_mode == "annotate",
1196
1200
  )
1197
1201
  section_count = _planned_section_count(
1198
1202
  sizing_model,
@@ -1517,6 +1521,10 @@ def _analyse(
1517
1521
  pmi_report=pmi_report,
1518
1522
  pmi_mode=pmi_mode,
1519
1523
  pmi_defaulted=pmi_defaulted,
1524
+ document_member=_document_input is not None,
1525
+ document_source_annotations=(
1526
+ _document_input.source_annotations() if _document_input is not None else ()
1527
+ ),
1520
1528
  # The sizing model IS the render model when detection ran (identical inputs by
1521
1529
  # construction — #584 WP1 A); store it so the pipeline never detects twice
1522
1530
  # (ADR 1 (was 0008 Amdt 5), #602). A declared model (layout_model) is NOT stored: the
@@ -19,7 +19,7 @@ from pathlib import Path
19
19
  from typing import Any
20
20
 
21
21
  from build123d import FontStyle
22
- from build123d_drafting.helpers import DEFAULT_FONT_PATH, Dimension, Note, SafeDimension
22
+ from build123d_drafting.helpers import DEFAULT_FONT_PATH, Dimension, Leader, Note, SafeDimension
23
23
 
24
24
  from draftwright._core import ( # noqa: F401 — _anno_box re-exported (#700)
25
25
  _STRIP_SPACING,
@@ -1862,10 +1862,44 @@ def annotation_ink_clear(dwg, candidate, *, view=None, additional=()) -> bool:
1862
1862
  ):
1863
1863
  return False
1864
1864
  if annotation_segments:
1865
- if not crossable_strokes and any(
1866
- _segments_cross_or_overlap(start, end, fixed_start, fixed_end)
1867
- for start, end in candidate_segments
1868
- for fixed_start, fixed_end in annotation_segments
1865
+ candidate_tip = getattr(candidate, "tip", None)
1866
+ annotation_tip = getattr(annotation, "tip", None)
1867
+ candidate_elbow = getattr(candidate, "elbow", None)
1868
+ annotation_elbow = getattr(annotation, "elbow", None)
1869
+ shares_leader_trunk = (
1870
+ type(candidate) is Leader
1871
+ and type(annotation) is Leader
1872
+ and candidate_tip is not None
1873
+ and annotation_tip is not None
1874
+ and candidate_elbow is not None
1875
+ and annotation_elbow is not None
1876
+ and math.dist(tuple(candidate_tip[:2]), tuple(annotation_tip[:2])) <= 1e-6
1877
+ and abs(
1878
+ (candidate_elbow[0] - candidate_tip[0])
1879
+ * (annotation_elbow[1] - annotation_tip[1])
1880
+ - (candidate_elbow[1] - candidate_tip[1])
1881
+ * (annotation_elbow[0] - annotation_tip[0])
1882
+ )
1883
+ <= 1e-6
1884
+ and (
1885
+ (candidate_elbow[0] - candidate_tip[0])
1886
+ * (annotation_elbow[0] - annotation_tip[0])
1887
+ + (candidate_elbow[1] - candidate_tip[1])
1888
+ * (annotation_elbow[1] - annotation_tip[1])
1889
+ )
1890
+ > 0.0
1891
+ )
1892
+ # Collinear, same-direction leaders from one physical target form a trunk with
1893
+ # separate shelves. Their label-region checks above remain authoritative. Exact
1894
+ # type checks exclude routed leaders, whose paths can cross again away from the tip.
1895
+ if (
1896
+ not crossable_strokes
1897
+ and not shares_leader_trunk
1898
+ and any(
1899
+ _segments_cross_or_overlap(start, end, fixed_start, fixed_end)
1900
+ for start, end in candidate_segments
1901
+ for fixed_start, fixed_end in annotation_segments
1902
+ )
1869
1903
  ):
1870
1904
  return False
1871
1905
  continue
@@ -2832,6 +2866,10 @@ class PlacementContext:
2832
2866
  # Whether the model was DECLARED (vs detected) — the ADR 4 (was 0011) gate the orchestrator reads,
2833
2867
  # threaded off ``getattr(dwg, "_model_declared")`` (#639).
2834
2868
  model_declared: bool = False
2869
+ # Document models are declared for common-geometry authority, while their imported PMI
2870
+ # remains discovery-sourced and obeys the member's pmi= policy (#1794).
2871
+ document_member: bool = False
2872
+ document_source_annotation_ids: frozenset[int] = frozenset()
2835
2873
  # Per-run cache for :meth:`feature_of_hole_at` — the model is fixed after build, so a
2836
2874
  # per-ctx (per-run) index is correct (mirrors the old ``Drawing._hole_feature_index``).
2837
2875
  _hole_feature_index: Any = field(default=None, repr=False)
@@ -3630,9 +3668,9 @@ def place_strip_candidates(
3630
3668
  continue
3631
3669
  real = _geom_box(dim)
3632
3670
  solved.append((name, natural if _real_box_conflict(name, real) else dim))
3633
- # Curved ink can enclose large empty rectangles. After the shared strip
3634
- # solve, try a bounded contraction using actual segments and labels against
3635
- # both committed ink and this batch. Never move an anchored dimension.
3671
+ # Some annotation ink can enclose large empty rectangles. After the shared
3672
+ # strip solve, try a bounded contraction using actual segments and labels
3673
+ # against both committed ink and this batch. Never move an anchored item.
3636
3674
  active_names = {name for name, _build in cands}
3637
3675
  label_clear = view_label_clearance(dwg, view) if compact_candidates else None
3638
3676
  for name, alternatives in (compact_candidates or {}).items():
@@ -3643,8 +3681,13 @@ def place_strip_candidates(
3643
3681
  index = next((i for i, (key, _dim) in enumerate(solved) if key == name), None)
3644
3682
  original = solved[index][1] if index is not None else None
3645
3683
  others = [item for key, item in solved if key != name]
3646
- for candidate in alternatives():
3647
- if original is not None and candidate.arc_radius >= original.arc_radius - 1e-6:
3684
+ for candidate in alternatives(original):
3685
+ if (
3686
+ original is not None
3687
+ and hasattr(candidate, "arc_radius")
3688
+ and hasattr(original, "arc_radius")
3689
+ and candidate.arc_radius >= original.arc_radius - 1e-6
3690
+ ):
3648
3691
  break
3649
3692
  box = _geom_box(candidate)
3650
3693
  if (
@@ -3672,7 +3715,12 @@ def place_strip_candidates(
3672
3715
  entry["strip_pos"] = entry["pos"]
3673
3716
  entry["pos"] = (label[idx] + label[idx + 2]) / 2
3674
3717
  if tp is not None:
3675
- tp.setdefault("angular_contractions", []).append(name)
3718
+ trace_field = (
3719
+ "angular_contractions"
3720
+ if hasattr(candidate, "arc_radius")
3721
+ else "ink_contractions"
3722
+ )
3723
+ tp.setdefault(trace_field, []).append(name)
3676
3724
  break
3677
3725
  for name, dim in solved:
3678
3726
  # Record feature provenance (ADR 5 (was 0010)): the drain-time seam for corridor-placed