Skip to content

Releases: pzfreo/draftwright

Draftwright 0.4.30

Choose a tag to compare

@pzfreo pzfreo released this 17 Sep 22:57
37128ff

Draftwright 0.4.30 improves imported AP242 PMI fidelity and makes automatic layout failure more honest. It also shortens ordinary pull-request feedback by moving full coverage to explicit and release-grade runs.

AP242 PMI fidelity

  • Conversion-based length units, including inch-authored dimensions, are resolved through complete conversion chains with finite-value and metadata validation. Imported labels retain their authored presentation while normalized values remain available for geometry and comparison.
  • Angular dimensions retain their support members, source association, included-angle geometry, tolerance presentation and editable Sheet representation. Imported angular support patterns now render without losing provenance.
  • Diameter limit presentation, standalone datums, tolerance-zone qualifiers, surface-group labels and common-label relationships survive extraction, lowering and generated-script round trips. Per-hole sources remain attached to the physical occurrence that owns them.
  • CTC04 datum systems preserve corroborating occurrence paths and composite datum support geometry through lowering.

Automatic planning and honest failure

  • Every required placement drop enters the bounded automatic scale/page recovery path, including drawings with no optional isometric view to remove.
  • A recovery candidate cannot win by replacing a required drop with overlapping or otherwise unreadable ink. Benign informational lint remains admissible.
  • When CTC04 exhausts recovery, the returned drawing records one explicit plan_incomplete result whose blocked measurement, hole-requirement and source provenance matches the actual required drops. The engine continues to own placement; no annotation is hand-positioned.

Development workflow

  • Pull requests run changed-area compatibility tests and changed-line coverage. Full coverage remains available through the full-coverage label and full release-grade runs, reducing ordinary PR latency without lowering the project coverage floor.
  • The test corpus reuses expensive recognition, drawing and export evidence more aggressively while retaining scheduled stress, mutation and cross-platform gates.

Known limits

CTC04 is still geometrically infeasible under the bounded current planner; 0.4.30 reports that outcome explicitly rather than presenting overlapping ink or silent required drops as success. Independent B-rep coverage for geometry outside the recogniser vocabulary (#1597) and explicit omissions for undimensioned envelope axes (#1560) remain open trust work for a subsequent release.

Full changelog: v0.4.29...v0.4.30

Draftwright 0.4.29

Choose a tag to compare

@pzfreo pzfreo released this 14 Sep 09:12
a5461e1

Draftwright 0.4.29 improves the fidelity of technical drawings for the whistle-frame fixtures and adds an opt-in sheet layout for Sergio's filing and folding requirements. It pins the published Quiddity 0.2.9 provider.

Drawing and measurement changes

  • The frame's six interrupted hinge bores remain six physical occurrences. Three partial-arc cylindrical tube seats now carry diameter, run length, sweep and datum-axis locations; six blind hex nut pockets carry across-flats, depth and locations. Their counted callouts keep source-owned measurement identities through automatic drawings, Sheet declarations and generated scripts.
  • A square or incomplete hole set no longer gets an invented bolt-circle diameter without a concentric physical witness. Individual holes retain their size, count and stock-datum locations. Refused in-plane patterns retain their physical member identity in the hole ledger.
  • Location dimensions honor explicit decimal precision; displayed rounding no longer creates a false topology error. Dense frame detail gains a useful section, while duplicate coincident dimensions and several short-arrow, leader and furniture conflicts are reduced. Missing envelope axes and genuine title-field overflow are reported explicitly.

Sheet and CLI

  • Set independent margin_left, margin_right, margin_top, margin_bottom and title_block_width values in Python, or use the matching CLI flags. Sergio's 25/10/10/10 mm margins and 175 mm block are opt-in; omitted values retain the existing defaults. --script replays the selected values.

    draftwright frame.step --frame \
      --margin-left 25 --margin-right 10 --margin-top 10 --margin-bottom 10 \
      --title-block-width 175 --format svg,dxf,pdf,png
  • CLI destination change: a STEP input now writes its drawing, generated script and report beside that STEP by default. Use --out-dir . for the former current-directory behavior, --out-dir DIR for another directory, or --out PREFIX for an explicit basename. Python export defaults are unchanged.

  • DXF model and paper limits now match the selected A4, A3 or A2 page in millimetres.

Scope and known limits

The frame example is a preliminary quotation/DFM drawing, not a manufacturing certification. The datum-aligned reference's automatic sheet still reports two dropped 0.3 mm pad-height annotations and plan_incomplete; its authored Document credits 43 of 77 known physical requirements and flags the remaining 34. The nominal 1.2 mm clamp split is an assembly gap between the frame and separate caps. It was checked at all six interfaces in the closed assembly, but cannot truthfully be dimensioned from a frame-only STEP.

Quiddity's repeated Ø110 spool-pattern limitation remains upstream (#595), although its 24 separate Ø8 bores retain identity. Oblique refused-pattern recognition (#1607), generic duplicate-target/long-callout guards (#1599/#1601) and broader independent coverage (#1597) remain open. A counted frame callout does not imply those general cases are complete.

Qualification: the merged source tree passed the full Linux Python 3.10–3.14 suite in PR shards, the exact-main slow suite, and the full macOS 3.12/3.14 and Windows 3.12/3.14 suites. A redundant unsharded Ubuntu 3.10 job in the extra exact-main dispatch timed out in one corpus test after 8,706 passes; that test passed separately on Python 3.10. The extra dispatch was canceled after the full Mac/Windows jobs passed. The release-candidate evidence and accepted equivalent-tree gate disclose that non-green workflow and the remaining drawing limits.

Full changelog: v0.4.28...v0.4.29

Draftwright 0.4.28

Choose a tag to compare

@pzfreo pzfreo released this 10 Sep 22:37
a868b9e

Recognition of turned parts is substantially more accurate, and a part that draftwright cannot
fully describe now produces a drawing that says so instead of producing nothing.

Three changes alter existing behaviour. Read these before upgrading.

  • An unauthored general tolerance is no longer invented. The title block used to default to
    ISO 2768-m, asserting a manufacturing requirement on every drawing whose caller supplied
    none — including every STEP-derived generated script. It now states UNSPECIFIED. Pass
    tolerance="ISO 2768-m" explicitly to keep the old output; tolerance="" leaves the cell
    blank (#1157, and this dissolves #501).
  • Turned-step recognition changed, through Quiddity 0.2.6 → 0.2.8. Rounded plate corners and
    parallel offset cylinders no longer form a false stepped shaft, a modelled thread is no longer
    read as one shoulder per turn, and contiguous equal-diameter bands coalesce into the single
    span they physically are. Drawings of turned parts may show different diameter and length
    callouts than 0.4.27 — in every case measured, fewer false ones (#1555, #1135).
  • A partial turned profile warns instead of raising. generate_sheet_script and
    Sheet.build() used to raise ValueError when declared step() segments did not span the
    body, which meant no script and no drawing at all. They now build and report
    turned_profile_not_spanned, naming the undescribed stretch. A hand-authored .step()
    misuse — #631's original case — is therefore a warning rather than an error (#1132).

New diagnostics.

  • Sheet can now reconcile AP242 PMI. Pass Sheet(part, source="part.step", pmi="annotate");
    generated scripts do this for you. Unlowered records report pmi_not_lowered, content with no
    census behind it reports pmi_unreconciled, and a declaration claiming a source identity the
    document does not contain reports pmi_source_unknown. Previously a script-built drawing ran
    no PMI reconciliation at all — deleting a raw PMI record changed nothing it reported (#1563).
  • lint_summary()["pmi"] now names the document it was reconciled against, with its sha256.

Fixed. On a geometry-only import, lint_summary()["score"] no longer rises when declared
features are removed (#1126). The score remains a severity heuristic, not a quality verdict —
read lint_summary()["quality"] for that.

Quiddity is pinned to 0.2.8.

Full changelog: v0.4.27...v0.4.28

Draftwright 0.4.27

Choose a tag to compare

@pzfreo pzfreo released this 10 Sep 06:30
b595cbc

Drawings now show their projection convention by default.

  • The projection symbol matches the resolved first- or third-angle view layout, including the default third-angle layout.
  • Hide it explicitly with projection_symbol=False in Python or --no-projection-symbol on the CLI. This changes symbol visibility only.
  • Visibility survives generated Sheet-script replay, and the symbol respects framed-sheet margins.
  • Added a plain-English guide to the layout algorithm.

Quiddity remains pinned to 0.2.6.

Full changelog: v0.4.26...v0.4.27

Draftwright 0.4.26

Choose a tag to compare

@pzfreo pzfreo released this 09 Sep 08:38
e3b2063

Draftwright 0.4.26 delivers the correctness and authoring improvements from epic #1529.

  • Trustworthy sections: hatch only material exposed by the cutting plane, and align cutting indicators with the rendered viewing direction. Retain complete placements that demonstrably improve the existing fallback when search reaches its budget. (#1539)
  • Safe hole-count advice: keep same-diameter through holes and blind sockets as distinct operations, and suggest edits only for verified feature owners. (#1540)
  • Shared drawing documents: Document.from_part(...).sheet(...) gives multiple sheets one source-owned requirement inventory. Repeated measurements earn one credit, live edits retain obligations, and conflicting engineering claims remain visible. (#1551)
  • Typed feature schedules: Sheet.schedule() uses compiler-owned values and exact per-member measurement identities. Only verified rendered cells earn coverage; descriptive text and uncredited notes do not. (#1552)
  • Clearer review and progress: explain layout, coverage and fidelity separately; preview unresolved leader targets; expose build-stage progress and cooperative cancellation. (#1545, #1546)
  • Practical authoring guidance: executable authored-section examples, honest title overflow diagnostics, isolated execution instructions and measured lossless artifact handling. (#1541, #1548#1550)
  • Verified two-sheet frame example: a public recipe and bounded real-part canary check section material, bore operations, all 18 scheduled location values and coverage when measurements move between sheets. (#1553)

Uses Quiddity 0.2.6 and build123d-drafting-helpers 0.15.1 or later. Automatic rear-view selection remains disabled.

Validation: independent Google-style review against all five ADRs for every epic PR; green supported-Python CI and platform canaries; 8,387 tests in the final full local gate; the post-merge slow suite (46 passed, 2 expected failures); and the new frame canary on both CAD dependency generations and in Linux CI. A freshly installed release wheel executed the two-sheet frame recipe with PDF/SVG/PNG exports. Release artifacts are built from the reviewed main commit e3b206356229f2a9b163d37b6245ea32ca5028eb.

The example is a quotation/DFM review: it intentionally credits 15 of 58 known obligations while retaining unsupported pockets, missing measurements and fidelity uncertainty. Material grade, hinge fit/pin retention and other engineering decisions remain unresolved; the software release does not certify the example for manufacture.

Two-sheet frame guide · Full changelog

Draftwright 0.4.25

Choose a tag to compare

@pzfreo pzfreo released this 08 Sep 22:05
d49efac

Draftwright 0.4.25 delivers the drawing-convention and presentation improvements from #1508.

  • First-angle layout: plan and side views follow the selected convention, with the matching projection symbol. Named views retain their physical viewing directions; packing, measurement placement and authored view constraints use the same convention. (#1522)
  • Dimension-text choices: independent text_position="inline"|"above" and text_orientation="aligned"|"horizontal" settings, shared by builds, generated scripts and exports. Existing defaults are preserved. (#1523)
  • Through-hole wording: hole.through() retains the default, hole.through("THRU") selects explicit wording, and hole.through("") hides the indicator while preserving through-hole semantics. Callouts, compatible groups and hole tables measure and render the selected content. (#1526)
  • Explicit rear views: supported hole, pattern, location and envelope measurements use the shared planning and placement pipeline, with correct handedness, physical targets and script replay. Rear must be explicitly requested; automatic rear selection remains disabled. (#1527)
  • Tolerance fidelity: preserve authored tolerance magnitudes in drawing text. (#1525)

Uses Quiddity 0.2.6 and requires build123d-drafting-helpers 0.15.1 or later.

Validation includes the supported Python CI matrix, macOS/Windows and real-part canaries, and the post-merge slow suite. The final combined canary preserves 11 expected labels across declared builds and generated scripts with real SVG/PDF/DXF exports.

Full changelog

Draftwright 0.4.24

Choose a tag to compare

@pzfreo pzfreo released this 08 Sep 09:03
c3ec926

Fixes missing height dimensions on turned parts, including STC618’s 62 mm overall height and both 6 mm end caps.

  • Keep the overall extent when a step chain does not reach both physical ends (#1510).
  • Render approved boss heights, reserve their space, and report them if missing (#1513). Preserve authored omissions, tolerances, physical witness supports and generated-script parity.
  • STC618 retains its previous measurement annotations and now shows the missing heights with no warning/error lint.

Known limitations:

  • A synthetic Y-axis flange still reports two annotation crossings. No measurements are lost; follow-up #1512 tracks the shared-placement repair.
  • First-angle layout is not supported. The existing projection="first" / --projection first option changes the symbol without changing the third-angle view layout (#1508). Use the default or explicit third-angle output; this patch does not resolve that mismatch.

Quiddity remains pinned to 0.2.6.

Draftwright 0.4.23

Choose a tag to compare

@pzfreo pzfreo released this 08 Sep 02:46
b3db97b

Draftwright 0.4.23 adds editable angular dimensions and restores short shoulder dimensions that could disappear from technical drawings.

  • Recognise and dimension supported outside-profile angles using Quiddity 0.2.6. Rounded corners retain their virtual intersections; verified repeated profiles can use angle labels.
  • Discover, declare and edit angles through the shared API, including per-member identities, tolerances, omission, side preferences, pins and generated-script round trips.
  • Preserve independently placeable shoulder lengths and diameter ownership. Semantic enlarged details support X-, Y- and Z-axis shoulders, with physical coverage checked from the resulting dimensions.
  • Continue the bounded page search when a detail drawing still loses a required annotation.
  • Constrain fresh installations to compatible OCP dependencies, including the macOS wheel exclusion previously applied only by the development resolver.
  • Include angle requirements and outcomes in report schema v3. Consumers that validate report versions should use the v3 schema.

STC618 validation shows both repeated angle groups and both 22+3 mm shoulder chains, with all 39 requirements in audited recognised families placed and no warning/error findings. This remains partial recognised-family coverage, not a claim that every feature of an arbitrary part is recognised.

Changes: #1506. Fixes #1504 and #1505.

Draftwright 0.4.22

Choose a tag to compare

@pzfreo pzfreo released this 07 Sep 14:36
f40cde6

Draftwright 0.4.22 adopts Quiddity 0.2.5 for recognition performance improvements, with the exact runtime and declared-inspection contracts updated together (#1501). Existing drawing, measurement and supported-geometry expectations are retained.

Development and release automation is faster: coverage runs in two shards, repeated corpus checks are reduced, and exact post-release development-version bumps use lock validation and package builds instead of the geometry matrix (#1494, #1496, #1497, #1499). Dependency changes still run normal CI.

Validation: 7,358 local fast tests passed (5 skipped, 14 expected failures), and 46 slow tests passed (2 expected failures). Overall local coverage was 96.02%. The release commit passed hosted PR CI and the post-merge slow suite. Local wheel and source-distribution metadata and packaged Python source were checked before publication. After publication, both PyPI artifacts passed checksum, version, dependency and all-99-Python-source checks; a fresh Python 3.12 installation passed 30 release checks, including the fixed real-part SVG/DXF export canary.

Release source: f40cde6bfda6f648d30039cf4873e6efb608152d.

Upstream details: Quiddity 0.2.5.

Draftwright 0.4.21

Choose a tag to compare

@pzfreo pzfreo released this 07 Sep 08:22
0989c87

Draftwright 0.4.21 improves annotation preservation and gives drawing agents usable controls with checks on the result.

  • Adopt Quiddity 0.2.4 and restore supported common-part annotations: the tuner jig's five rounded pockets and corner radii, supported pierced-channel measurements, and maximum-depth intent for pockets in cylindrical stock.
  • Discover and apply supported left/right placement preferences through the shared solver. Generated Sheet scripts retain the authored choices.
  • Select declaration-local hole members and location axes precisely. Measurement comparison detects lost or substituted values and witnesses, and reports uncertain correspondence explicitly.
  • Repair the demonstrated dimension-label/ink collision class with a bounded operation that preserves measurements and pins, rejects worse results, and rolls back rejected candidates.
  • Fix diameter leader anchors that slipped off the bore rim near a part edge. Independent target lint checks actual trimmed boundaries and reports misplaced tips or missing physical authority; short leaders reserve enough room for the arrow head.
  • Gate pull requests with a real STEP canary that checks fixed annotation and measurement expectations plus SVG/DXF validity.

Complex profiles outside the supported drafting grammar retain explicit unsupported diagnostics. Bounded repair can leave infeasible collisions visible. Framed builds currently lack the occurrence-to-face evidence needed to certify diameter targets, so those targets report as unverifiable. Measurement comparison does not promise persistent identity across fresh recognition runs.

Released from main commit 0989c87f0c595b6a0557cc1d205c162a07a98901. The final PR passed 7,356 tests with 96.03% coverage; final-main slow integration passed 46 tests with 2 expected failures. The GRM04 edit audit preserved all 15 fixed expected measurements and rejected a shared omission.

Post-publication verification: both public PyPI archives match all 99 reviewed Python source files and require Quiddity 0.2.4. A fresh Python 3.12 installation of the public wheel passed 30 target/canary tests and the 15-measurement GRM04 edit audit; exported drawings were inspected.

Delivered through #1486, #1487, #1488, #1489, #1490, #1491, #1492 and #1493. Completes the scoped AI drawing-edit milestone in #1277.

Full changes · Final integration run