draftwright 0.4.16__tar.gz → 0.4.17__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {draftwright-0.4.16 → draftwright-0.4.17}/CHANGELOG.md +280 -1
- {draftwright-0.4.16 → draftwright-0.4.17}/PKG-INFO +6 -2
- {draftwright-0.4.16 → draftwright-0.4.17}/README.md +4 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/docs/adr/README.md +2 -1
- draftwright-0.4.17/docs/reference/recogniser-capabilities.md +691 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/docs/reference/sheet.md +109 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/pyproject.toml +2 -2
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/_core.py +21 -2
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/_geometry.py +214 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/analysis.py +358 -139
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/annotations/_common.py +194 -7
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/annotations/from_model.py +1464 -93
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/annotations/holes.py +124 -81
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/annotations/orchestrator.py +63 -5
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/annotations/sections.py +51 -6
- draftwright-0.4.17/src/draftwright/blend_contract.py +90 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/builder.py +52 -16
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/compose.py +64 -6
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/drawing.py +396 -65
- draftwright-0.4.17/src/draftwright/evaluation/step_analysis.py +5817 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/inspection_contract.py +1 -1
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/linting/__init__.py +38 -0
- draftwright-0.4.17/src/draftwright/linting/angled_step_coverage.py +38 -0
- draftwright-0.4.17/src/draftwright/linting/blend_coverage.py +205 -0
- draftwright-0.4.17/src/draftwright/linting/chamfer_coverage.py +190 -0
- draftwright-0.4.17/src/draftwright/linting/circular_blind_step_coverage.py +345 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/linting/coverage.py +825 -174
- draftwright-0.4.17/src/draftwright/linting/fillet_coverage.py +187 -0
- draftwright-0.4.17/src/draftwright/linting/groove_coverage.py +228 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/linting/hole_coverage.py +16 -5
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/linting/issues.py +5 -0
- draftwright-0.4.17/src/draftwright/linting/pad_coverage.py +384 -0
- draftwright-0.4.17/src/draftwright/linting/paired_ramp_step_coverage.py +221 -0
- draftwright-0.4.17/src/draftwright/linting/passage_coverage.py +38 -0
- draftwright-0.4.17/src/draftwright/linting/plate_coverage.py +1038 -0
- draftwright-0.4.17/src/draftwright/linting/pocket_coverage.py +323 -0
- draftwright-0.4.17/src/draftwright/linting/pocket_pattern_coverage.py +381 -0
- draftwright-0.4.17/src/draftwright/linting/polygonal_boss_coverage.py +387 -0
- draftwright-0.4.17/src/draftwright/linting/polygonal_stock_coverage.py +442 -0
- draftwright-0.4.17/src/draftwright/linting/prismatic_pocket_coverage.py +38 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/linting/quality.py +185 -23
- draftwright-0.4.17/src/draftwright/linting/rectangular_blind_slot_coverage.py +314 -0
- draftwright-0.4.17/src/draftwright/linting/round_bottom_blind_slot_coverage.py +320 -0
- draftwright-0.4.17/src/draftwright/linting/through_step_coverage.py +644 -0
- draftwright-0.4.17/src/draftwright/linting/turned_step_coverage.py +495 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/model/__init__.py +26 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/model/compiled.py +111 -21
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/model/declare.py +232 -12
- draftwright-0.4.17/src/draftwright/model/detect.py +2011 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/model/ir.py +729 -5
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/model/planner.py +52 -13
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/pmi.py +172 -52
- draftwright-0.4.17/src/draftwright/recogniser_contract.py +1425 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/recognition_cache.py +2 -2
- draftwright-0.4.17/src/draftwright/recognition_frame.py +350 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/repair.py +2 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/sheet.py +96 -17
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/sheet_emit.py +179 -13
- draftwright-0.4.17/tests/_recogniser_public_contract.py +144 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/conftest.py +61 -23
- draftwright-0.4.17/tests/fixtures/evaluation/README.md +243 -0
- draftwright-0.4.17/tests/fixtures/evaluation/chamfer-asymmetric.step +505 -0
- draftwright-0.4.17/tests/fixtures/evaluation/chamfer-compound.step +547 -0
- draftwright-0.4.17/tests/fixtures/evaluation/chamfer-overlap.step +776 -0
- draftwright-0.4.17/tests/fixtures/evaluation/chamfer-plain.step +415 -0
- draftwright-0.4.17/tests/fixtures/evaluation/chamfer-planar-x.step +535 -0
- draftwright-0.4.17/tests/fixtures/evaluation/chamfer-planar-y.step +535 -0
- draftwright-0.4.17/tests/fixtures/evaluation/chamfer-planar-z.step +505 -0
- draftwright-0.4.17/tests/fixtures/evaluation/chamfer-topology-a.step +596 -0
- draftwright-0.4.17/tests/fixtures/evaluation/chamfer-topology-b.step +596 -0
- draftwright-0.4.17/tests/fixtures/evaluation/chamfer-turned.step +210 -0
- draftwright-0.4.17/tests/fixtures/evaluation/corpus-chamfers-v1.json +200 -0
- draftwright-0.4.17/tests/fixtures/evaluation/corpus-countersinks-v1.json +188 -0
- draftwright-0.4.17/tests/fixtures/evaluation/corpus-double-d-bores-v1.json +287 -0
- draftwright-0.4.17/tests/fixtures/evaluation/corpus-fillets-v1.json +211 -0
- draftwright-0.4.17/tests/fixtures/evaluation/corpus-flats-v1.json +227 -0
- draftwright-0.4.17/tests/fixtures/evaluation/corpus-grooves-v1.json +164 -0
- draftwright-0.4.17/tests/fixtures/evaluation/corpus-hole-patterns-v1.json +151 -0
- draftwright-0.4.17/tests/fixtures/evaluation/corpus-plates-v1.json +257 -0
- draftwright-0.4.17/tests/fixtures/evaluation/corpus-pocket-patterns-v1.json +199 -0
- draftwright-0.4.17/tests/fixtures/evaluation/corpus-pockets-v1.json +269 -0
- draftwright-0.4.17/tests/fixtures/evaluation/corpus-polygonal-bosses-v1.json +939 -0
- draftwright-0.4.17/tests/fixtures/evaluation/corpus-polygonal-stock-v1.json +198 -0
- draftwright-0.4.17/tests/fixtures/evaluation/corpus-rectangular-pads-v1.json +222 -0
- draftwright-0.4.17/tests/fixtures/evaluation/corpus-turned-steps-v1.json +166 -0
- draftwright-0.4.17/tests/fixtures/evaluation/countersink-deburr.step +876 -0
- draftwright-0.4.17/tests/fixtures/evaluation/countersink-external-cone.step +274 -0
- draftwright-0.4.17/tests/fixtures/evaluation/countersink-mixed-pair.step +736 -0
- draftwright-0.4.17/tests/fixtures/evaluation/countersink-single.step +575 -0
- draftwright-0.4.17/tests/fixtures/evaluation/countersink-topology-a.step +736 -0
- draftwright-0.4.17/tests/fixtures/evaluation/countersink-topology-b.step +736 -0
- draftwright-0.4.17/tests/fixtures/evaluation/double-d-axis-x.step +814 -0
- draftwright-0.4.17/tests/fixtures/evaluation/double-d-axis-y.step +814 -0
- draftwright-0.4.17/tests/fixtures/evaluation/double-d-blind.step +790 -0
- draftwright-0.4.17/tests/fixtures/evaluation/double-d-coaxial-compound.step +1591 -0
- draftwright-0.4.17/tests/fixtures/evaluation/double-d-opposed-blind.step +1164 -0
- draftwright-0.4.17/tests/fixtures/evaluation/double-d-roll-30.step +814 -0
- draftwright-0.4.17/tests/fixtures/evaluation/double-d-round-bore.step +511 -0
- draftwright-0.4.17/tests/fixtures/evaluation/double-d-single-z.step +784 -0
- draftwright-0.4.17/tests/fixtures/evaluation/double-d-topology-a.step +1591 -0
- draftwright-0.4.17/tests/fixtures/evaluation/double-d-topology-b.step +1591 -0
- draftwright-0.4.17/tests/fixtures/evaluation/fillet-compound.step +977 -0
- draftwright-0.4.17/tests/fixtures/evaluation/fillet-overlap.step +597 -0
- draftwright-0.4.17/tests/fixtures/evaluation/fillet-plain.step +415 -0
- draftwright-0.4.17/tests/fixtures/evaluation/fillet-planar-x.step +537 -0
- draftwright-0.4.17/tests/fixtures/evaluation/fillet-planar-y.step +537 -0
- draftwright-0.4.17/tests/fixtures/evaluation/fillet-planar-z.step +507 -0
- draftwright-0.4.17/tests/fixtures/evaluation/fillet-repeated.step +820 -0
- draftwright-0.4.17/tests/fixtures/evaluation/fillet-topology-a.step +617 -0
- draftwright-0.4.17/tests/fixtures/evaluation/fillet-topology-b.step +617 -0
- draftwright-0.4.17/tests/fixtures/evaluation/fillet-turned.step +211 -0
- draftwright-0.4.17/tests/fixtures/evaluation/flat-coaxial.step +437 -0
- draftwright-0.4.17/tests/fixtures/evaluation/flat-double-d.step +419 -0
- draftwright-0.4.17/tests/fixtures/evaluation/flat-lone-d.step +237 -0
- draftwright-0.4.17/tests/fixtures/evaluation/flat-nonround.step +415 -0
- draftwright-0.4.17/tests/fixtures/evaluation/flat-slanted-double-d.step +449 -0
- draftwright-0.4.17/tests/fixtures/evaluation/flat-topology-a.step +437 -0
- draftwright-0.4.17/tests/fixtures/evaluation/flat-topology-b.step +437 -0
- draftwright-0.4.17/tests/fixtures/evaluation/groove-compound.step +665 -0
- draftwright-0.4.17/tests/fixtures/evaluation/groove-lone-x.step +381 -0
- draftwright-0.4.17/tests/fixtures/evaluation/groove-lone-y.step +381 -0
- draftwright-0.4.17/tests/fixtures/evaluation/groove-lone-z.step +351 -0
- draftwright-0.4.17/tests/fixtures/evaluation/groove-monotonic-negative.step +249 -0
- draftwright-0.4.17/tests/fixtures/evaluation/groove-narrow.step +351 -0
- draftwright-0.4.17/tests/fixtures/evaluation/groove-topology-a.step +556 -0
- draftwright-0.4.17/tests/fixtures/evaluation/groove-topology-b.step +556 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pad-compound-equal.step +1595 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pad-detached-body-negative.step +853 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pad-full-span-ledge-negative.step +776 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pad-nested-staircase-negative.step +2230 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pad-topology-a.step +1156 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pad-topology-b.step +1156 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pad-x-negative.step +786 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pad-x-positive.step +786 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pad-y-negative.step +786 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pad-y-positive.step +786 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pad-z-negative.step +786 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pad-z-positive.step +786 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pattern-ambiguous.step +703 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pattern-grid.step +992 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pattern-topology-a.step +1090 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pattern-topology-b.step +1090 -0
- draftwright-0.4.17/tests/fixtures/evaluation/plate-compound-equal.step +1575 -0
- draftwright-0.4.17/tests/fixtures/evaluation/plate-cross-topology-a.step +1497 -0
- draftwright-0.4.17/tests/fixtures/evaluation/plate-cross-topology-b.step +1497 -0
- draftwright-0.4.17/tests/fixtures/evaluation/plate-detached-negative.step +793 -0
- draftwright-0.4.17/tests/fixtures/evaluation/plate-rotational-negative.step +147 -0
- draftwright-0.4.17/tests/fixtures/evaluation/plate-single-negative.step +415 -0
- draftwright-0.4.17/tests/fixtures/evaluation/plate-t-xz.step +776 -0
- draftwright-0.4.17/tests/fixtures/evaluation/plate-t-yz.step +776 -0
- draftwright-0.4.17/tests/fixtures/evaluation/plate-thick-negative.step +776 -0
- draftwright-0.4.17/tests/fixtures/evaluation/plate-u-additive.step +776 -0
- draftwright-0.4.17/tests/fixtures/evaluation/plate-u-cut.step +776 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pocket-compound.step +1595 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pocket-edge-anchored.step +685 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pocket-lone.step +786 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pocket-opposed.step +1156 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pocket-pattern-ambiguous.step +1526 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pocket-pattern-grid.step +2638 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pocket-pattern-linear.step +1897 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pocket-pattern-pair.step +1156 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pocket-pattern-topology-a.step +3008 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pocket-pattern-topology-b.step +3007 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pocket-prismatic-negative.step +966 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pocket-side.step +816 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pocket-through-negative.step +780 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pocket-topology-a.step +1156 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pocket-topology-b.step +1156 -0
- draftwright-0.4.17/tests/fixtures/evaluation/pocket-two-equal.step +1156 -0
- draftwright-0.4.17/tests/fixtures/evaluation/polygonal-boss-compound-equal.step +1008 -0
- draftwright-0.4.17/tests/fixtures/evaluation/polygonal-boss-detached-negative.step +1033 -0
- draftwright-0.4.17/tests/fixtures/evaluation/polygonal-boss-in-plane-rotated.step +966 -0
- draftwright-0.4.17/tests/fixtures/evaluation/polygonal-boss-other-protrusions-negative.step +990 -0
- draftwright-0.4.17/tests/fixtures/evaluation/polygonal-boss-recess-negative.step +966 -0
- draftwright-0.4.17/tests/fixtures/evaluation/polygonal-boss-stock-negative.step +625 -0
- draftwright-0.4.17/tests/fixtures/evaluation/polygonal-boss-topology-a.step +1516 -0
- draftwright-0.4.17/tests/fixtures/evaluation/polygonal-boss-topology-b.step +1516 -0
- draftwright-0.4.17/tests/fixtures/evaluation/polygonal-boss-x.step +996 -0
- draftwright-0.4.17/tests/fixtures/evaluation/polygonal-boss-y.step +996 -0
- draftwright-0.4.17/tests/fixtures/evaluation/polygonal-boss-z.step +966 -0
- draftwright-0.4.17/tests/fixtures/evaluation/polygonal-stock-compound-negative.step +637 -0
- draftwright-0.4.17/tests/fixtures/evaluation/polygonal-stock-cylinder-negative.step +147 -0
- draftwright-0.4.17/tests/fixtures/evaluation/polygonal-stock-irregular-negative.step +595 -0
- draftwright-0.4.17/tests/fixtures/evaluation/polygonal-stock-octagon-negative.step +776 -0
- draftwright-0.4.17/tests/fixtures/evaluation/polygonal-stock-recess-negative.step +705 -0
- draftwright-0.4.17/tests/fixtures/evaluation/polygonal-stock-roll17.step +625 -0
- draftwright-0.4.17/tests/fixtures/evaluation/polygonal-stock-topology-a.step +595 -0
- draftwright-0.4.17/tests/fixtures/evaluation/polygonal-stock-topology-b.step +595 -0
- draftwright-0.4.17/tests/fixtures/evaluation/polygonal-stock-translated.step +625 -0
- draftwright-0.4.17/tests/fixtures/evaluation/polygonal-stock-x.step +625 -0
- draftwright-0.4.17/tests/fixtures/evaluation/polygonal-stock-y.step +625 -0
- draftwright-0.4.17/tests/fixtures/evaluation/turned-step-axis-x.step +381 -0
- draftwright-0.4.17/tests/fixtures/evaluation/turned-step-axis-y.step +279 -0
- draftwright-0.4.17/tests/fixtures/evaluation/turned-step-axis-z.step +249 -0
- draftwright-0.4.17/tests/fixtures/evaluation/turned-step-compound.step +521 -0
- draftwright-0.4.17/tests/fixtures/evaluation/turned-step-repeated-lengths.step +381 -0
- draftwright-0.4.17/tests/fixtures/evaluation/turned-step-through-bore.step +345 -0
- draftwright-0.4.17/tests/fixtures/evaluation/turned-step-topology-a.step +351 -0
- draftwright-0.4.17/tests/fixtures/evaluation/turned-step-topology-b.step +381 -0
- draftwright-0.4.17/tests/fixtures/evaluation/turned-step-translated-blind-bore.step +381 -0
- draftwright-0.4.17/tests/fixtures/issue_1247_angled_blind_step.step +776 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_add_dimension.py +43 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_adr0018_view_selection.py +39 -1
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_compiled_plan_boundary.py +64 -24
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_counting_calls.py +25 -1
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_declare.py +33 -3
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_declared_recognition_gate.py +24 -32
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_detect_once.py +49 -37
- draftwright-0.4.17/tests/test_detect_registry.py +282 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_drawing_encapsulation.py +10 -8
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_external_recognition_boundary.py +8 -5
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_flat_completeness.py +1 -2
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_grid_lattice_convention.py +2 -2
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_import_boundaries.py +450 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_inspection_contract.py +7 -3
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1058_wheel_profile.py +202 -293
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1082_polygonal_stock.py +9 -5
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1143_hole_completeness.py +36 -12
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1146_scale_completeness.py +4 -4
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1166_cross_pass_feature_leaders.py +30 -26
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1202_observed_drawing_consumer.py +8 -9
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1229_ledger_member_keying.py +2 -1
- draftwright-0.4.17/tests/test_issue_1245_passage_disposition.py +180 -0
- draftwright-0.4.17/tests/test_issue_1246_prismatic_pocket_disposition.py +187 -0
- draftwright-0.4.17/tests/test_issue_1247_angled_step_disposition.py +100 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1254_turned_chamfers.py +10 -14
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1260_view_constraints.py +30 -1
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1262_automatic_turned_views.py +5 -2
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1308_machined_leader_analytics.py +5 -1
- draftwright-0.4.16/tests/test_issue_1332_overlap_remedy_fast.py → draftwright-0.4.17/tests/test_issue_1332_overlap_remedy.py +16 -23
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1351_structured_note_coverage.py +4 -2
- draftwright-0.4.17/tests/test_issue_1357_framed_activation.py +224 -0
- draftwright-0.4.17/tests/test_issue_1357_framed_boundary.py +312 -0
- draftwright-0.4.17/tests/test_issue_1357_plural_turned_profiles.py +1013 -0
- draftwright-0.4.17/tests/test_issue_1357_pmi_frame.py +171 -0
- draftwright-0.4.17/tests/test_issue_1369_hole_completeness_evidence.py +166 -0
- draftwright-0.4.17/tests/test_issue_1370_countersink_completeness_evidence.py +524 -0
- draftwright-0.4.17/tests/test_issue_1370_double_d_completeness_evidence.py +702 -0
- draftwright-0.4.17/tests/test_issue_1370_hole_pattern_completeness_evidence.py +335 -0
- draftwright-0.4.17/tests/test_issue_1371_flat_completeness_evidence.py +287 -0
- draftwright-0.4.17/tests/test_issue_1371_polygonal_stock_completeness_evidence.py +1206 -0
- draftwright-0.4.17/tests/test_issue_1372_groove_completeness_evidence.py +677 -0
- draftwright-0.4.17/tests/test_issue_1372_pad_completeness_evidence.py +789 -0
- draftwright-0.4.17/tests/test_issue_1372_pocket_completeness_evidence.py +454 -0
- draftwright-0.4.17/tests/test_issue_1372_pocket_pattern_completeness_evidence.py +906 -0
- draftwright-0.4.17/tests/test_issue_1372_polygonal_boss_completeness_evidence.py +847 -0
- draftwright-0.4.17/tests/test_issue_1373_plate_completeness_evidence.py +1427 -0
- draftwright-0.4.17/tests/test_issue_1374_chamfer_completeness_evidence.py +560 -0
- draftwright-0.4.17/tests/test_issue_1374_fillet_completeness_evidence.py +528 -0
- draftwright-0.4.17/tests/test_issue_1374_turned_step_completeness_evidence.py +1503 -0
- draftwright-0.4.17/tests/test_issue_1382_046_step_inventory.py +66 -0
- draftwright-0.4.17/tests/test_issue_1382_circular_blind_step_semantics.py +1071 -0
- draftwright-0.4.17/tests/test_issue_1382_framed_step_family_evidence.py +426 -0
- draftwright-0.4.17/tests/test_issue_1382_paired_ramp_semantics.py +468 -0
- draftwright-0.4.17/tests/test_issue_1382_through_step_semantics.py +1745 -0
- draftwright-0.4.17/tests/test_issue_1392_recognisers_048.py +584 -0
- draftwright-0.4.17/tests/test_issue_1421_rectangular_blind_slot_completeness.py +589 -0
- draftwright-0.4.17/tests/test_issue_1421_rectangular_blind_slot_semantics.py +448 -0
- draftwright-0.4.17/tests/test_issue_1421_round_bottom_blind_slot_completeness.py +621 -0
- draftwright-0.4.17/tests/test_issue_1421_round_bottom_blind_slot_semantics.py +479 -0
- draftwright-0.4.17/tests/test_issue_1433_blend_semantics.py +651 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_676_polygonal_boss.py +3 -1
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_740_leader_assignment.py +7 -2
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_798_silhouette_lint.py +10 -8
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_885_prismatic_coverage.py +7 -3
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_958_cross_solid_recognition.py +7 -5
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_layout.py +2 -1
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_location_vocabulary.py +3 -3
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_make_drawing.py +85 -33
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_parameter_id.py +64 -1
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_part_model.py +8 -8
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_pmi.py +1 -1
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_pocket_pattern_recognition.py +10 -6
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_private_test_attr_reads.py +2 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_quality_components.py +121 -1
- draftwright-0.4.17/tests/test_recogniser_capabilities.py +1839 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_recogniser_contract.py +322 -65
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_recognition_result.py +16 -71
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_sheet_emit.py +112 -6
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_sheet_identity_invariant.py +6 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_slanted_blind_step.py +0 -48
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_slot_pattern_recognition.py +10 -2
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_strip_layout.py +94 -15
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_view_plan.py +19 -4
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_workflows.py +159 -0
- draftwright-0.4.16/docs/reference/recogniser-capabilities.md +0 -98
- draftwright-0.4.16/src/draftwright/evaluation/step_analysis.py +0 -924
- draftwright-0.4.16/src/draftwright/linting/polygonal_stock_coverage.py +0 -129
- draftwright-0.4.16/src/draftwright/model/detect.py +0 -1142
- draftwright-0.4.16/src/draftwright/recogniser_contract.py +0 -667
- draftwright-0.4.16/tests/fixtures/evaluation/README.md +0 -20
- draftwright-0.4.16/tests/test_detect_registry.py +0 -209
- draftwright-0.4.16/tests/test_issue_1332_overlap_remedy.py +0 -89
- draftwright-0.4.16/tests/test_recogniser_capabilities.py +0 -762
- draftwright-0.4.16/tests/test_recognition_manifest.py +0 -723
- {draftwright-0.4.16 → draftwright-0.4.17}/.gitignore +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/LICENSE +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/docs/research/1062-repeating-radial-profile-evidence.md +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/skills/SKILL.md +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/__init__.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/_build_profile.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/_pmi_part21.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/_warnings.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/annotate.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/annotations/__init__.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/annotations/balloons.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/annotations/gears.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/annotations/leaders.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/audit.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/cli.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/evaluation/__init__.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/export.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/fits.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/fonts/IBMPlexMono-Regular.ttf +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/fonts/IBMPlexSansCondensed-Regular.ttf +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/fonts/LICENSE-IBMPlexMono-OFL.txt +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/fonts/LICENSE-IBMPlexSansCondensed-OFL.txt +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/fonts/__init__.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/intents.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/layout.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/linting/_registry.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/linting/channel_coverage.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/linting/evidence.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/linting/flat_coverage.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/linting/gear_coverage.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/linting/ink_overlap.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/linting/pmi_coverage.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/linting/profiled_bore_coverage.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/linting/slot_coverage.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/linting/structural.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/linting/suggest.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/make_drawing.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/model/callout.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/model/pmi_lowering.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/projection.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/py.typed +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/recognition/__init__.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/registry.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/score.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/src/draftwright/view_plan.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/_kernel.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/_layout_sig.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/ap242_single_cylinder_diameter.step +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/evaluation/ambiguous-open-semicircle.step +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/evaluation/blind-hole.step +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/evaluation/corpus-v1.json +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/evaluation/plain-block.step +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/evaluation/topology-a.step +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/evaluation/topology-b.step +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/grm03_thumbwheel_drive_screw.step +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/grm03_thumbwheel_drive_screw_ap242_pmi.step +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/grm04_drive_plate.step +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/if_step_flat_across_cylinder.step +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/issue_1058_wheel_rh.step +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/issue_909_basic_part_design_017_body.step +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/issue_915_case_study_2.step +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/nist_ctc_01_asme1_ap203.stp +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/nist_ctc_01_asme1_ap242.stp +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/nist_ctc_02_asme1_ap203.stp +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/nist_ctc_02_asme1_ap242.stp +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/nist_ctc_03_asme1_ap203.stp +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/nist_ctc_03_asme1_ap242.stp +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/nist_ctc_04_asme1_ap203.stp +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/nist_ctc_04_asme1_ap242.stp +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/nist_ctc_05_asme1_ap203.stp +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/nist_ctc_05_asme1_ap242.stp +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/fixtures/tuner_jig_blind_obround_pockets.step +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/refactor_golden/bracket_section.json +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/refactor_golden/centered_rebate.json +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/refactor_golden/chamfered.json +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/refactor_golden/filleted.json +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/refactor_golden/flange_dense.json +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/refactor_golden/grid_plate.json +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/refactor_golden/grooved_shaft.json +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/refactor_golden/hex_bar.json +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/refactor_golden/holed_slot.json +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/refactor_golden/pocketed.json +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/refactor_golden/prismatic_ladder.json +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/refactor_golden/scattered_plate.json +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/refactor_golden/side_drilled.json +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/refactor_golden/turned_stepped.json +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_adr0018_arrangement_gate.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_adr0018_view_routing.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_agents_guide.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_api_docs.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_architecture_docs.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_audit_differential.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_balloon_ring_standoff.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_build_profile_harness.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_carve_free_position_callers.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_dense_sheet_canary.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_deprecation_dates.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_dimension_role_vocabulary.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_e2e_slice.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_e2e_standards.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_export_dxf_curves.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_export_dxf_zoom.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_export_reproducible.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_fillets_adjacency.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_fits.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_flat_stock_identity.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_flat_stock_opposition.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_gdt_placement.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_geometry_graph_spike.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_iso_nts_caption_placement.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1000_envelope_reuse.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1073_cross_body_patterns.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1086_declared_gears.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1116_ap242_hole_tolerance_lowering.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1130_view_planning_evidence.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1142_hole_leader_labels.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1144_transactional_hole_table.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1147_legibility_pair_aggregation.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1153_contradictory_dimensions.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1154_one_owner_per_measurement.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1155_grm04_sheet_use.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1176_quality_fidelity.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1177_angular_dimensions.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1187_unroutable_leaders.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1188_per_view_assignment.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1190_section_decision.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1196_deterministic_view_names.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1204_multiscale_view_issues.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1209_linear_pmi_witnesses.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1215_envelope_tolerance.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1215_no_approved_tolerance_is_dropped.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1216_callout_reservation_measures_ink.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1216_pairwise_across_scale_groups.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1217_claimed_representations.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1217_the_facility_is_shared.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1219_location_claims_its_own_axis.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1240_iso_above_strip_visibility.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1276_turned_leader_targets.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1281_turned_fillets.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1296_cylindrical_diameter_pmi.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1298_manufacturing_requirements.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1299_page_escalation.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1312_engine_costs.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1332_zone_labels.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1334_prevent_ink.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1336_grm03_ap242_pmi_fixture.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1338_scale_before_page_escalation.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1349_precision_display.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1350_detected_takeover.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1352_searchable_pdf_text.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1353_cnc_authoritative_workflow.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_1360_thread_depth.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_367_leader_ink.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_443_grm03_axial_coverage.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_563_placement_intent.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_676_polygonal_boss_declare.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_798_floor_cardinality.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_798_material_field.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_909_sloped_profile.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_915_dense_case.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_916_pocket_leader.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_917_open_channel.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_924_zero_length_shoulders.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_issue_955_height_contingency.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_label_provenance.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_layout_cleanliness.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_layout_hypothesis.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_layout_property.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_leader_footprint.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_lint_box_cache.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_lint_ink_overlap.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_lint_reconciliation.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_lint_structural.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_linting.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_note_verb.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_object_aspects.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_occupancy_boxes.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_pitch_dim_footprint.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_pmi_datum_lowering.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_pmi_gtol_lowering.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_pmi_part21.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_pocket_pattern.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_principal_profile_classifier.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_private_test_imports.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_recogniser_adoption.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_recognition.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_refactor_golden.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_registry.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_render_seam.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_repack_geometry_seam.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_score.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_script_detail_parity.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_shared_box_memo.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_sheet_gdt.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_sheet_notes.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_sheet_of.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_sheet_section.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_sheet_tables.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_slot_completeness.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_slot_pattern.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_soft_deprecation.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_solve_trace.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_step_analysis_evaluation.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_suppression_ledger.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_suppression_marks.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_tolerances.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_turned_steps.py +0 -0
- {draftwright-0.4.16 → draftwright-0.4.17}/tests/test_witness_label_reconciliation.py +0 -0
|
@@ -4,6 +4,13 @@
|
|
|
4
4
|
|
|
5
5
|
### Added
|
|
6
6
|
|
|
7
|
+
- Automatic drawings can opt into the provider-owned local recognition frame with
|
|
8
|
+
`framed_recognition=True`. The returned drawing exposes caller provenance, the exact downstream
|
|
9
|
+
working solid, frame, and a copied framed/raw/refusal decision. PMI correlation, off-axis pattern
|
|
10
|
+
placement, compilation, projection and physical lint remain in one coordinate system; typed frame
|
|
11
|
+
refusal performs one visible top-level raw fallback. Raw remains the rollout default (#1357,
|
|
12
|
+
ADR 0020).
|
|
13
|
+
|
|
7
14
|
- Referential and measured Sheet dimensions accept optional `view=` / `side=` placement
|
|
8
15
|
intent. Supported pairs survive IR/compiler and generated-script round trips, constrain
|
|
9
16
|
ordinary corridor candidates without exposing page coordinates, and fail clearly when a
|
|
@@ -37,11 +44,283 @@
|
|
|
37
44
|
|
|
38
45
|
### Changed
|
|
39
46
|
|
|
47
|
+
- Accepted schema-v1 convex `Blend` chains now cross a dedicated end-to-end consumer path:
|
|
48
|
+
`BlendFeature`, explicit `Sheet.blend(...)`, executable generated declarations, one
|
|
49
|
+
compiler-approved `blend.radius` requirement, and a solver-owned grouped `n× R` leader. The
|
|
50
|
+
full canonical `axis_direction` remains in IR instead of being coerced to legacy Fillet
|
|
51
|
+
semantics; the provider aggregate remains the sole exact Fillet/Blend precedence authority.
|
|
52
|
+
Exact public-record/IR validation and completeness follow every accepted occurrence to placed,
|
|
53
|
+
structured-note, authored-suppressed, dropped, missing, or unverifiable outcomes. Raw and
|
|
54
|
+
provider-framed arbitrary rigid motions retain the same radius meaning (#1433; ADRs 0011,
|
|
55
|
+
0013–0017, 0020).
|
|
56
|
+
|
|
57
|
+
- Draftwright now exactly pins the immutable `b123d-recognisers` 0.4.12 release and advances its
|
|
58
|
+
fail-closed capability and inspection joins. This adoption first made the additive `Blend`,
|
|
59
|
+
`OrientedSlot`, `OrientedSlotArray`, and `OrientedSlotGrid` records visible and deferred under
|
|
60
|
+
#1430; Blend is now promoted by #1433 above, while oriented slots/patterns remain deferred and
|
|
61
|
+
recognised-but-unscored. All earlier record schemas remain compatible. The provider's newly
|
|
62
|
+
recognised shallow nonzero `PairedRampStep` keeps its existing
|
|
63
|
+
two-requirement IR, public `Sheet.paired_ramp_step(...)` declaration, generated-code, compiler
|
|
64
|
+
callout, solver placement, and completeness meaning (#1430; ADRs 0011, 0013–0017, 0020).
|
|
65
|
+
|
|
66
|
+
- Rectangular blind slots recognised by `b123d-recognisers` 0.4.10 now cross a dedicated
|
|
67
|
+
Draftwright semantic path: `RectangularBlindSlotFeature`, the explicit
|
|
68
|
+
`Sheet.rectangular_blind_slot(...)` word, generated-code and role-specific tolerance round
|
|
69
|
+
trips, compiler-approved width/capped-run/depth measurements, and one solver-owned
|
|
70
|
+
`OPEN SLOT … DEEP` leader. Authored subsets retain every approved value with explicit
|
|
71
|
+
`WIDE`/`LONG`/`DEEP` roles, and leaders target proved cap/side material rather than the open
|
|
72
|
+
mouth. Native raw and rigidly moved framed builds retain the same three
|
|
73
|
+
measurement outcomes. A seven-case independently authored corpus now pins all six run/open-side
|
|
74
|
+
orientations plus an independently sized specimen: each occurrence contributes separate width,
|
|
75
|
+
capped-run and depth requirements followed by exact structural correspondence and measurement
|
|
76
|
+
provenance to placed, structured-note, suppressed, dropped, missing or unverifiable outcomes.
|
|
77
|
+
Removing recognition cannot shrink that 21-requirement benchmark (#1421; ADRs 0011,
|
|
78
|
+
0013–0017, 0020).
|
|
79
|
+
|
|
80
|
+
- Round-bottom blind slots recognised by `b123d-recognisers` 0.4.10 now have their own complete
|
|
81
|
+
Draftwright path rather than borrowing through-slot, pocket or rectangular-blind-slot grammar.
|
|
82
|
+
`RoundBottomBlindSlotFeature` retains the released run/opening topology and exposes the three
|
|
83
|
+
independent manufacturing requirements: capped run length, straight bottom-flat width and equal
|
|
84
|
+
side radius. `Sheet.round_bottom_blind_slot(...)`, generated code, role-specific tolerances and
|
|
85
|
+
one solver-owned `ROUND-BOTTOM OPEN SLOT …` leader all preserve those exact identities; derived
|
|
86
|
+
total width and depth are not double-counted. A seven-case independently authored corpus covers
|
|
87
|
+
all six signed principal orientations plus a separately sized specimen (21 physical requirements),
|
|
88
|
+
proves raw/framed drawing parity, and follows exact source-to-IR correspondence to placed,
|
|
89
|
+
structured-note, suppressed, dropped, missing or unverifiable outcomes without labels, views or
|
|
90
|
+
page coordinates. The released 0.4.10 API is sufficient; no recogniser change is required (#1421;
|
|
91
|
+
ADRs 0011, 0013–0017, 0020).
|
|
92
|
+
|
|
93
|
+
- Turned-step completeness is now backed by an independently authored, hash-pinned 11-case STEP
|
|
94
|
+
corpus with 26 physical outside-diameter bands, 52 parameter checks and 104 downstream checks.
|
|
95
|
+
Axis line and station preserve body-local occurrence identity across automatic IR, the existing
|
|
96
|
+
public `Sheet.step(...)` DSL word, executed-and-built generated code, and exact compiler-confirmed
|
|
97
|
+
length and OD drawing evidence. Grouped equal-length chains retain every adjacent member identity
|
|
98
|
+
and their exact compiler-approved multiplier and value; native and global OD labels are checked
|
|
99
|
+
in full. Generated declarations preserve the half-thousandth midpoint of odd-thousandth spans,
|
|
100
|
+
complete body-local profile ownership is compared at its full published precision, and malformed
|
|
101
|
+
or surplus records fail closed—including coercible or non-finite groove evidence that controls
|
|
102
|
+
band ownership. The root turned-step and groove inventories must remain immutable tuples; a
|
|
103
|
+
mutable or one-shot substitute is snapshotted once only to preserve its observable requirement
|
|
104
|
+
denominator, then remains unverifiable; a non-iterable substitute retains one explicit aggregate
|
|
105
|
+
contract outcome rather than masquerading as an empty family. A profile OD may
|
|
106
|
+
satisfy one uniquely identifiable equivalent largest-band diameter
|
|
107
|
+
without multiplying across disjoint bodies; and uniquely groove-owned narrow
|
|
108
|
+
bands are excluded once by a shared fail-closed Groove schema and ownership rule used by lowering,
|
|
109
|
+
lint and the evidence ledger. That join accounts for the provider's 0.001 mm Groove coordinate
|
|
110
|
+
quantum against its eight-decimal profile axis without widening either published identity
|
|
111
|
+
(#1374; ADRs 0010, 0011, 0013, 0015, 0017, 0020).
|
|
112
|
+
|
|
113
|
+
- Framed recognition now carries all three 0.4.6 step families through their complete existing
|
|
114
|
+
consumer paths. `CircularBlindStep`, `PairedRampStep` and `ThroughStep` retain the same
|
|
115
|
+
manufacturing requirements from raw recognition through their public `Sheet` words, generated
|
|
116
|
+
code, compiler-owned drawing ink and lint; the provider-owned local records and Draftwright IR
|
|
117
|
+
remain invariant under a combined non-principal rotation and translation. Circular-step
|
|
118
|
+
validation now derives its bound from each independently published endpoint, centre, radius and
|
|
119
|
+
depth value's six-significant-figure decimal cell, while outside-cell geometric inconsistencies
|
|
120
|
+
still fail closed (#1382; ADRs 0011, 0013, 0015, 0017, 0018, 0020).
|
|
121
|
+
|
|
122
|
+
- Countersink completeness is now backed by an independently authored, hash-pinned seven-case STEP
|
|
123
|
+
corpus covering functional seats, solid external-cone and deburr negatives, grouped equal seats,
|
|
124
|
+
and reverse-serialized topology. Detection identity and all four provider measurements are scored
|
|
125
|
+
separately from the two actual drawing requirements. Exact aggregate object ownership follows
|
|
126
|
+
each seat once, validates the provider-selected hole semantically, and fails closed on swapped,
|
|
127
|
+
duplicated, or canonically colliding owners. It then crosses automatic IR, public `Sheet.hole`,
|
|
128
|
+
generated code, and role-specific confirmed placed diameter/angle ink without recounting the parent bore. The known second seat of a two-sided bore
|
|
129
|
+
remains explicitly unverifiable rather than hidden or heuristically attached (#1370; ADRs 0010,
|
|
130
|
+
0013, 0015, 0017).
|
|
131
|
+
|
|
132
|
+
- Double-D completeness is now backed by an independently authored, hash-pinned 11-case STEP
|
|
133
|
+
corpus with ten physical profile facts, 50 provider-parameter checks and 40 downstream checks.
|
|
134
|
+
Full-frame identity preserves disconnected coaxial bodies; exact multiplicity crosses automatic
|
|
135
|
+
IR, public `Sheet.double_d_bore`, generated code and role-specific compiler-confirmed
|
|
136
|
+
`⌀major THRU DOUBLE-D across A/F` ink. Round, blind, opposed-blind, malformed, duplicated and
|
|
137
|
+
foreign-owner mutations fail closed, while the provider's exclusive aggregate ownership keeps
|
|
138
|
+
each profile from being recounted as an ordinary hole (#1370; ADRs 0010, 0011, 0013, 0015,
|
|
139
|
+
0017).
|
|
140
|
+
- Updated the immutable `b123d-recognisers` pin and fail-closed inspection/capability joins to
|
|
141
|
+
0.4.10. All 28 previously consumed family schemas remain unchanged. The two new blind-slot
|
|
142
|
+
families were adopted fail-closed under #1421 and remain visible as unscored recognised
|
|
143
|
+
inventories until each gains independent completeness evidence; Draftwright does not coerce
|
|
144
|
+
their depth, terminal/open-end, or round-floor evidence into its ordinary through-slot grammar.
|
|
145
|
+
The provider's additive evidence API is not consumed by
|
|
146
|
+
this bounded adoption slice. Recognition output does change under the unchanged schemas: the
|
|
147
|
+
release closes slot-depth, subdivided paired-ramp/AngledStep, and noisy stubby-pocket gaps; fixes
|
|
148
|
+
Double-D/Hole ownership, external-cone countersink false positives, Plate tie covariance, and
|
|
149
|
+
turned-step translation covariance; and can move an edge-open rectangular recess from `Pocket`
|
|
150
|
+
to the dedicated blind-slot inventory. Draftwright regression tests pin the consumer-visible
|
|
151
|
+
ownership changes while the provider release suite owns its private predicates
|
|
152
|
+
([provider release](https://github.com/pzfreo/b123d-recognisers/releases/tag/v0.4.10); ADRs 0013,
|
|
153
|
+
0015, 0017, 0020).
|
|
154
|
+
|
|
155
|
+
- Principal-profile lint now correlates its independent extremal-face evidence with the cached
|
|
156
|
+
public `DoubleDBore` aggregate instead of importing provider-private profile helpers. Exact
|
|
157
|
+
axis/span, end-plane, centre, radius, A/F, chord, arc, and flat-direction checks fail closed;
|
|
158
|
+
occurrence mouths are consumed with matching multiplicity, and malformed records cannot earn
|
|
159
|
+
coverage. The exported low-level check now requires the aggregate projection explicitly so an
|
|
160
|
+
omitted inventory fails loudly; lint still owns its physical denominator and never reruns
|
|
161
|
+
recognition (#1411, ADRs 0013, 0015, 0017).
|
|
162
|
+
|
|
163
|
+
- Whole polygonal-stock completeness is now backed by an independently authored, hash-pinned
|
|
164
|
+
13-case STEP corpus covering all principal axes, in-plane rotation, translation, topology
|
|
165
|
+
order and circular/rectangular/irregular/octagonal/attached/recessed/compound negatives. The
|
|
166
|
+
provider's exact six-side stock boundary, A/F, axial length and coupled physical flat supports
|
|
167
|
+
are scored separately from four downstream boundaries. A fail-closed two-requirement ledger
|
|
168
|
+
follows A/F and stock length through automatic IR, public `Sheet.polygonal_stock`, generated
|
|
169
|
+
code and solver-placed semantic ink; malformed or duplicate correspondence cannot borrow
|
|
170
|
+
credit from another support ring (#1371).
|
|
171
|
+
|
|
172
|
+
- Multi-plate slab completeness is now backed by an independently authored, hash-pinned 11-case
|
|
173
|
+
STEP corpus covering all principal orientations, additive/cut channels, equal compound
|
|
174
|
+
occurrences, topology order and envelope/detached/thick/rotational negatives. A fail-closed
|
|
175
|
+
one-requirement ledger follows each body-local `thickness.length` through automatic IR, public
|
|
176
|
+
`Sheet.plate`, generated code and solver-placed Dimension provenance; the compiler-derived
|
|
177
|
+
opposite U-channel wall is represented explicitly without inventing duplicate ink. The corpus
|
|
178
|
+
owns 20 physical occurrences and cannot shrink when provider output is weakened or removed.
|
|
179
|
+
Exact step-level, slot-pattern, polygonal-boss and envelope ownership prevents derived material
|
|
180
|
+
spans from becoming duplicate Plate requirements while failing closed when that ownership cannot
|
|
181
|
+
be established (#1373).
|
|
182
|
+
|
|
183
|
+
- Polygonal-boss completeness is now backed by an independently authored, hash-pinned STEP
|
|
184
|
+
corpus covering all three principal axes, in-plane rotation, equal compound occurrences,
|
|
185
|
+
topology order, and recess/detached/stock/other-protrusion negatives. Detection, the provider's
|
|
186
|
+
six-side schema invariant, across-flats, height, physical flat supports, and four downstream
|
|
187
|
+
boundaries are observed; a
|
|
188
|
+
two-requirement fail-closed ledger follows across-flats and boss height through the existing
|
|
189
|
+
IR/compiler/shared-solve path. The corpus owns the independent evaluation denominator; runtime
|
|
190
|
+
drawing lint remains explicitly denominated by the recognition inventory (#1372).
|
|
191
|
+
|
|
192
|
+
- Updated the immutable `b123d-recognisers` pin and fail-closed manifest joins to 0.4.9. The
|
|
193
|
+
provider's body-local FaceLevel, RiserEvidence, and TurnedProfile schemas now cross an owned
|
|
194
|
+
prepared-frame boundary that normalizes, reuses one cylinder substrate, classifies locally,
|
|
195
|
+
and preserves the exact working solid/result pair. Every frame gauge and typed refusal has an
|
|
196
|
+
explicit conservative policy; refusal never hides a raw retry. Multiple physical turned
|
|
197
|
+
profiles fail explicitly where a singular adapter is required, while the unchanged raw
|
|
198
|
+
production route preserves its historical no-global-profile compound behavior with a visible
|
|
199
|
+
#1357 deferral. Production drawing remains on the explicit raw boundary until rigid-motion,
|
|
200
|
+
PMI, platform, and canary activation evidence is complete (ADR 0020, #1357).
|
|
201
|
+
|
|
202
|
+
- Updated the immutable `b123d-recognisers` pin and lock to 0.4.8. Draftwright now names
|
|
203
|
+
its existing caller/world-coordinate aggregate boundary explicitly with
|
|
204
|
+
`build_raw_recognition_result`; framed recognition remains disabled until #1357's
|
|
205
|
+
frame-to-IR adapter is reviewed end to end. Installed-wheel tests exercise the public
|
|
206
|
+
framed fixes for rectangular pads, polygonal bosses, and nested multi-body plates without
|
|
207
|
+
making that API the production path (#1392).
|
|
208
|
+
|
|
209
|
+
- Rectangular pads now consume `RaisedPad` schema v2 without assuming +Z. The IR, public
|
|
210
|
+
`Sheet.pad`, generated code, compiler, semantic-view planner, shared placement solve, and
|
|
211
|
+
lint correspondence preserve the exact footprint, terminal-to-attachment height, two
|
|
212
|
+
in-plane locations, axis, direction, and world bounds for all six signed principal
|
|
213
|
+
orientations. Every height uses one solver-placed `… HIGH` leader with stable measurement
|
|
214
|
+
identity; side-normal pad footprints no longer leak into the unrelated Z-level grammar
|
|
215
|
+
(#1392).
|
|
216
|
+
|
|
217
|
+
- Rectangular-pad completeness is now independently evidenced by a hash-pinned 12-case STEP
|
|
218
|
+
corpus covering all six signed principal orientations, equal compound occurrences, topology
|
|
219
|
+
order, and ledge/staircase/detached-body negatives. Detection, width/length/height fidelity,
|
|
220
|
+
and four downstream boundaries are scored separately; a five-requirement fail-closed ledger
|
|
221
|
+
follows both footprint sizes, height and directional location evidence through the shared
|
|
222
|
+
compiler and placement solve (#1372).
|
|
223
|
+
|
|
224
|
+
- Circular blind steps recognised by `b123d-recognisers` now have a complete consumer path.
|
|
225
|
+
The oriented terminal-to-open centreline and transverse quarter-arc lower without rescanning
|
|
226
|
+
to an explicit-only IR/Sheet feature; generated code preserves the full correspondence.
|
|
227
|
+
Radius and stopped depth remain independently addressable and tolerance-aware while sharing
|
|
228
|
+
one solver-placed end-view `R… × … DEEP` leader, and a fail-closed two-requirement ledger
|
|
229
|
+
follows each outcome without parsing labels or guessing by order (#1382).
|
|
230
|
+
|
|
231
|
+
- Paired-ramp steps recognised by `b123d-recognisers` now have one complete consumer path:
|
|
232
|
+
exact IR conversion, explicit `Sheet.paired_ramp_step(...)` declaration, generated-code
|
|
233
|
+
round trip, end-view solver-placed `2× angle × run RUN` leader, independent angle/run
|
|
234
|
+
tolerances and authored suppression, and a two-requirement fail-closed completeness ledger
|
|
235
|
+
(#1382).
|
|
236
|
+
|
|
237
|
+
- Rectangular through steps recognised by `b123d-recognisers` now lower without rescanning to
|
|
238
|
+
an explicit-only IR/Sheet feature. Automatic and explicit lowering support every principal
|
|
239
|
+
axis; an X/Y occurrence stays with the established face-level and shoulder/plate grammar only
|
|
240
|
+
when that grammar proves both exact leg intervals, avoiding both silent loss and duplicate
|
|
241
|
+
dimensions. The two
|
|
242
|
+
orthogonal open-section legs are independently addressable, tolerance-aware, solver-placed in
|
|
243
|
+
the end view, preserved by generated code and scored by a fail-closed two-requirement
|
|
244
|
+
completeness ledger. The through extent stays owned by the envelope (#1382).
|
|
245
|
+
|
|
246
|
+
- Hole completeness is now supported by a versioned, independently authored STEP corpus rather
|
|
247
|
+
than a Draftwright-derived census. Detection, parameter fidelity and downstream usefulness stay
|
|
248
|
+
separate, while the IR adapter, public Sheet declaration, executed generated code and placed
|
|
249
|
+
drawing are each observed through their real seam. Mutations prove that a missing provider hole
|
|
250
|
+
or a broken downstream boundary lowers the relevant evidence even when internal state remains
|
|
251
|
+
self-consistent (#1369).
|
|
252
|
+
- Hole-pattern completeness is now supported by a separate independently authored STEP
|
|
253
|
+
arrangement corpus covering grids, bolt circles, linear arrays, false-positive controls,
|
|
254
|
+
compound cases and topology-order variants. It scores one grouping fact per pattern while the
|
|
255
|
+
hole corpus remains the sole owner of member diameter/depth/location requirements, and follows
|
|
256
|
+
each group through the IR, public Sheet declaration, generated code and placed pattern
|
|
257
|
+
dimensions (#1370).
|
|
258
|
+
- Flat completeness is now supported by an independently authored STEP corpus covering lone,
|
|
259
|
+
opposed, slanted, parallel and coaxial stock plus negative and topology-order controls. It
|
|
260
|
+
counts one physical across-flats requirement per stock line and span, then observes automatic
|
|
261
|
+
IR, public `Sheet.flat`, executed generated code and placed measurement provenance independently
|
|
262
|
+
(#1371).
|
|
263
|
+
- Lone-pocket completeness is now supported by an independently authored STEP corpus covering
|
|
264
|
+
off-centre, edge-anchored, equal, opposed-opening, side-opening, compound, ownership-negative
|
|
265
|
+
and topology-order cases. Provider `open_sign` now survives the IR, declaration and generated
|
|
266
|
+
code boundaries; pocket sizes and both physical location ordinates are followed through exact
|
|
267
|
+
semantic placement evidence without counting pocket-pattern members twice (#1372).
|
|
268
|
+
- Pocket-pattern completeness is now supported by a separate independently authored STEP corpus
|
|
269
|
+
covering axis-aligned and 30° linear/grid arrangements, threshold and unequal-spacing
|
|
270
|
+
negatives, a compound underside pattern and reverse-serialized topology variants. One grouped
|
|
271
|
+
count/size/lattice/location requirement reaches automatic IR, public `Sheet.pocket_pattern`,
|
|
272
|
+
generated code and exact placed ink—including approved pitch tolerances—without recounting its
|
|
273
|
+
member pockets. Diagonal pocket-pattern dimensions use exact label-ink clearance instead of a
|
|
274
|
+
false-blocking hull; generated code preserves the member opening side and grouped callouts
|
|
275
|
+
retain structured count provenance (#1372).
|
|
276
|
+
- Groove completeness is now supported by an independently authored STEP corpus covering a
|
|
277
|
+
monotonic-step negative, all principal axes, a narrow circlip ownership contest, equal grooves
|
|
278
|
+
on separate bodies and reversed Boolean order. Each physical groove's width and floor diameter
|
|
279
|
+
pass independently through automatic IR, public `Sheet.groove`, executed generated code and
|
|
280
|
+
one exact compiler-backed `WIDE × ø` callout; mutations prove that recognition, identity,
|
|
281
|
+
parameters, provenance and printed syntax cannot disappear without lowering evidence (#1372).
|
|
282
|
+
- Chamfer completeness is now supported by an independently authored STEP corpus covering all
|
|
283
|
+
principal axes, equal and asymmetric planar bevels, conical turned treatments, equal features
|
|
284
|
+
on separate bodies, topology-order variants, a plain negative and the AngledStep ownership
|
|
285
|
+
boundary. Each physical bevel is followed through exact IR, public `Sheet.chamfer`, executed
|
|
286
|
+
generated code, compiler measurement provenance, callout syntax and its physical leader target;
|
|
287
|
+
equal requirements may share ink without collapsing occurrence identity (#1374).
|
|
288
|
+
- Fillet completeness is now supported by an independently authored STEP corpus covering all
|
|
289
|
+
principal axes, repeated equal rounds, turned toroidal treatments, separate bodies,
|
|
290
|
+
topology-order variants, a plain negative and the CircularBlindStep ownership boundary. Each
|
|
291
|
+
physical round is followed through exact IR, public `Sheet.fillet`, executed generated code,
|
|
292
|
+
compiler measurement provenance, `R`/`n× R` syntax and its physical leader target; grouped ink
|
|
293
|
+
retains every rounded edge's measurement identity (#1374).
|
|
294
|
+
|
|
295
|
+
- Recognised angled blind steps now fail visibly instead of remaining an undecided inventory.
|
|
296
|
+
Each aggregate-reconciled `AngledStep` produces an actionable warning and one `unsupported`
|
|
297
|
+
completeness outcome. A frozen STEP corpus fixture pins the AngledStep/Chamfer ownership
|
|
298
|
+
boundary, while Draftwright deliberately invents no angle/run, IR, Sheet, generated-code,
|
|
299
|
+
section/detail, or annotation semantics (#1247).
|
|
300
|
+
|
|
301
|
+
- Aggregate-reconciled `PrismaticPocket` occurrences now fail visibly instead of
|
|
302
|
+
remaining an unscored inventory. Each produces an actionable warning and one `unsupported`
|
|
303
|
+
completeness outcome, without repeating the provider's cross-family reconciliation or
|
|
304
|
+
inventing width/length, across-flats, IR, Sheet, generated-code, or annotation semantics (#1246).
|
|
305
|
+
|
|
306
|
+
- Recognised prismatic passages now fail visibly instead of disappearing into an unscored
|
|
307
|
+
inventory. Each authoritative `SectionPassage` produces an actionable warning and an
|
|
308
|
+
`unsupported` completeness outcome; the legacy `Passage` compatibility projection is never
|
|
309
|
+
double-counted. Draftwright retains the family-level unsupported disposition rather than
|
|
310
|
+
claiming a regular-polygon callout represents the provider's complete line/arc schema (#1245).
|
|
311
|
+
|
|
40
312
|
- Declared Double-D bore, countersink, chamfer, fillet, and groove geometry reads now use the
|
|
41
|
-
stable `b123d_recognisers.inspection` namespace from the exact 0.4.
|
|
313
|
+
stable `b123d_recognisers.inspection` namespace from the exact 0.4.6 wheel. A separate
|
|
42
314
|
Draftwright-owned format-1 contract fails closed on changes to the consumed signatures, result
|
|
43
315
|
schemas, units, bevel rejection reasons, or cylindrical surface layout (#1362).
|
|
44
316
|
|
|
317
|
+
- Updated the exact `b123d-recognisers` production lock to 0.4.6. At adoption time, circular
|
|
318
|
+
blind, paired ramp, and through-step inventories were carried from the one aggregate and
|
|
319
|
+
surfaced as unscored completeness evidence pending the #1382 semantic slices now recorded
|
|
320
|
+
above. Rectangular-grid pitch placement also uses a
|
|
321
|
+
deterministic outer witness line across plan, front, and side views despite the release's
|
|
322
|
+
coordinate-rounding differences.
|
|
323
|
+
|
|
45
324
|
- `annotation_overlap` now reports the whole defect when the same pair also draws
|
|
46
325
|
line-work through one of the two labels: the message names the crosser, the label
|
|
47
326
|
crossed and the millimetres, and replaces the "use `label_offset_x`" remedy, which
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: draftwright
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.17
|
|
4
4
|
Summary: Automated technical-drawing generation for build123d
|
|
5
5
|
Project-URL: Homepage, https://github.com/pzfreo/draftwright
|
|
6
6
|
Project-URL: Repository, https://github.com/pzfreo/draftwright
|
|
@@ -684,7 +684,7 @@ Classifier: Programming Language :: Python :: 3.14
|
|
|
684
684
|
Classifier: Topic :: Scientific/Engineering
|
|
685
685
|
Requires-Python: <3.15,>=3.10
|
|
686
686
|
Requires-Dist: antlr4-python3-runtime<4.10
|
|
687
|
-
Requires-Dist: b123d-recognisers==0.4.
|
|
687
|
+
Requires-Dist: b123d-recognisers==0.4.12
|
|
688
688
|
Requires-Dist: build123d-drafting-helpers>=0.14.2
|
|
689
689
|
Requires-Dist: build123d<0.11,>=0.9.0; python_full_version < '3.13'
|
|
690
690
|
Requires-Dist: build123d<0.12,>=0.11; python_full_version >= '3.13'
|
|
@@ -703,11 +703,15 @@ Description-Content-Type: text/markdown
|
|
|
703
703
|
</h1>
|
|
704
704
|
|
|
705
705
|
[](https://github.com/pzfreo/draftwright/actions/workflows/ci.yml)
|
|
706
|
+
[](https://pzfreo.github.io/draftwright/)
|
|
706
707
|
[](https://codecov.io/gh/pzfreo/draftwright)
|
|
707
708
|
[](https://pypi.org/project/draftwright/)
|
|
708
709
|
[](https://pypi.org/project/draftwright/)
|
|
710
|
+
[](https://pepy.tech/project/draftwright)
|
|
709
711
|
[](LICENSE)
|
|
710
712
|
[](https://github.com/astral-sh/ruff)
|
|
713
|
+
[](https://mypy-lang.org/)
|
|
714
|
+
[](https://github.com/astral-sh/uv)
|
|
711
715
|
|
|
712
716
|
**[API reference](https://pzfreo.github.io/draftwright/)** ·
|
|
713
717
|
**[Examples and source](https://github.com/pzfreo/draftwright#readme)**
|
|
@@ -3,11 +3,15 @@
|
|
|
3
3
|
</h1>
|
|
4
4
|
|
|
5
5
|
[](https://github.com/pzfreo/draftwright/actions/workflows/ci.yml)
|
|
6
|
+
[](https://pzfreo.github.io/draftwright/)
|
|
6
7
|
[](https://codecov.io/gh/pzfreo/draftwright)
|
|
7
8
|
[](https://pypi.org/project/draftwright/)
|
|
8
9
|
[](https://pypi.org/project/draftwright/)
|
|
10
|
+
[](https://pepy.tech/project/draftwright)
|
|
9
11
|
[](LICENSE)
|
|
10
12
|
[](https://github.com/astral-sh/ruff)
|
|
13
|
+
[](https://mypy-lang.org/)
|
|
14
|
+
[](https://github.com/astral-sh/uv)
|
|
11
15
|
|
|
12
16
|
**[API reference](https://pzfreo.github.io/draftwright/)** ·
|
|
13
17
|
**[Examples and source](https://github.com/pzfreo/draftwright#readme)**
|
|
@@ -33,9 +33,10 @@ architecture** table; open retired or superseded records only for design history
|
|
|
33
33
|
| [0014](0014-collect-then-solve-annotation-placement.md) | Collect-then-solve annotation placement (as built) | Collect, select, assign, and deterministically solve annotations per corridor before rendering; compatible sparse ordinary side/plan hole and post-drain machined leaders share one bounded late inventory. | Accepted; supersedes 0009; #740 Amendment 1; #1166 Amendment 2 | `test_carve_free_position_callers.py`, `test_strip_layout.py`, `test_layout_property.py`, `test_issue_740_leader_assignment.py`, `test_issue_1166_cross_pass_feature_leaders.py`, `test_import_boundaries.py` |
|
|
34
34
|
| [0015](0015-part-drawing-compiler-as-built.md) | The part-drawing compiler, as built | Use one detected-or-declared feature IR and planner-fed dimension groups as the compiler waist. | Accepted; supersedes 0008 | `test_part_model.py`, `test_detect_once.py`, `test_import_boundaries.py` |
|
|
35
35
|
| [0016](0016-declared-dimensioning-intent.md) | Declared dimensioning intent: capture what to measure, let the engine place it | Declare which measurements matter as scale-independent intent routed through the planner and corridor solve; never hardcode dimension geometry. | Accepted; epic #867 complete; phase 6 landed (#940) | `test_compiled_plan_boundary.py`, `test_issue_1215_no_approved_tolerance_is_dropped.py`, `test_label_provenance.py`, `test_sheet_emit.py`, `test_add_dimension.py` |
|
|
36
|
-
| [0017](0017-recognition-inventory-correspondence-and-measurement-provenance.md) | One recognition result per run; correspondence is evidence-gated | Produce one external immutable recognition result held by Draftwright's per-run cache; require vertical-slice evidence before generalising correspondence, identity, requirements, outcomes, or reconciliation. | Accepted; external cache ownership clarified, extensions gated by #1018 | `test_external_recognition_boundary.py`, `
|
|
36
|
+
| [0017](0017-recognition-inventory-correspondence-and-measurement-provenance.md) | One recognition result per run; correspondence is evidence-gated | Produce one external immutable recognition result held by Draftwright's per-run cache; require vertical-slice evidence before generalising correspondence, identity, requirements, outcomes, or reconciliation. | Accepted; external cache ownership clarified, extensions gated by #1018 | `test_external_recognition_boundary.py`, `test_detect_once.py`, `test_declared_recognition_gate.py` |
|
|
37
37
|
| [0018](0018-requirement-driven-view-planning-and-editable-sheet-layout.md) | Requirement-driven view planning and editable sheet layout | Use one `ViewSpec` vocabulary and planner with distinct authored `ViewConstraints` and immutable `ResolvedViewPlan`; jointly validate views, typography, convention, scale, paper and layout against requirement survival. Supersedes ADR 0004's fixed-topology assumption while retaining compose-then-pack. | Accepted 2026-08-16; partially implemented (`ViewSpec`, `ResolvedViewPlan`, `ViewCoverage`, arrangement choice and requirement gate); tracked by #1130/#1259-#1262 | Required guards are listed in the ADR |
|
|
38
38
|
| [0019](0019-display-complete-labels-and-dimension-outcomes.md) | Display-complete labels and a dimension-outcome ledger | The compiled plan carries the full label text (tolerance and collapse wording included) so renderers render and never compose; dimension outcomes reconcile at one seam on both build routes; ladder rungs get per-mark identity. Finishes the ADR 0016 Amdt 1 boundary; supersedes Amdt 6's enforcement mechanism. | Proposed | `test_issue_1215_no_approved_tolerance_is_dropped.py` reduces to plan-equality when implemented |
|
|
39
|
+
| [0020](0020-provider-owned-frame-boundary.md) | Provider-owned frame boundary for detected compilation | Prepare, classify, and recognise against one exact local working solid; retain source provenance, propagate typed refusals, and gate semantic direction claims by frame gauge. | Accepted; explicit opt-in activation, raw rollout default | `test_issue_1357_framed_boundary.py`, `test_issue_1357_framed_activation.py`, `test_recogniser_capabilities.py`, `test_import_boundaries.py` |
|
|
39
40
|
|
|
40
41
|
## Historical records
|
|
41
42
|
|