v0.4.9
The recogniser upgrade, the authored-tolerance epic, and the layout-visibility fixes.
Added
-
Lint now verifies that an annotation claiming to carry a measurement actually renders it
(#1217). Coverage checks read provenance riders the annotations carry about themselves and
believed them; nothing checked the claim against what the annotation draws. Four new codes —
claimed_value_absent,claimed_measurement_not_compiled, and two that report an
unverifiable claim rather than passing it — andDrawing.add_tablenow keeps the rows it
draws so a table's claims are readable back. Measured over all 21 STEP fixtures: 1,081
claims, 1,078 confirmed, and three findings — all instances of one genuine provenance
defect, see #1219. -
lint_summary()["quality"]gains a fourth component,fidelity: whether what the drawing
says is TRUE. The existing three ask whether required content landed (completeness),
whether there is too much of it (restraint), and whether a reader can make it out
(legibility) — none asked whether it is correct, so a drawing labelled 99 over a 16 mm
path reported a perfect score on every component available to it. Also covers a callout
drawn for a feature the part does not have, and a gear data table stating a tooth count
the geometry contradicts — the last of which reportspassed: Trueand zero errors, so
the only existing channel that names it isby_code. Completeness, restraint and fidelity
reportavailable: Falsewith areasonrather than a flattering number when they have no
evidence, and every lint code the engine emits is classified onto exactly one component,
an explicit unscored register, or a register of codes whose component depends on the
issue'soutcome_stage.quality["unscored"]reports the findings that reached no
component at all and flags any whose classification nobody made —section_droppedwas
found scoring on nothing while a comment beside its emission said the opposite, and eleven
more*_droppedcodes reach the engine asdrop_codedata with the same shape (#1176).
Changed
-
Updated the exact
b123d-recognisersproduction lock from 0.2.4 to 0.2.6.
The immutable PyPI wheel/sdist hashes and capability-manifest digestaa52bc04216cd1eccc05796d2262547c7f476b80a3ec77334a77b9d8e3241a58are
recorded in.github/recogniser-release.json; focused compatibility evidence and the
normal consumer gates run on the generated PR. -
HoleRequirementOutcomegainsmembersandfeatures,ClaimOutcomegainsmeasurement,
andlinting.hole_coverage.canonical_hole_sitesis public (#1217). A consumer attributing a
requirement outcome to a specific recognised hole needs the evidence the outcome accounts
for, and needs to key into the canonical space the ledger publishes it in — a through hole's
own-axis coordinate is zeroed there. -
The STEP-analysis benchmark's
drawing_consumerboundary now consumes
hole_requirement_outcomesinstead of a second correspondence implementation of its own
(#1206), and follows the ledger's pointer throughlinting.evidencerather than trusting it.
Holes the ledger reportsunverifiablenow scoreunknownwhere the duplicate credited them
by guessing: 26 holes, five on each CTC-03 fixture and eight on each CTC-04 fixture. The
five-case evaluation corpus is unchanged, and one lint message on CTC-03 now reports its
coordinates in the ledger's own canonical space. -
Drawing.suppressions()rows gain aconveyed_bykey: the dimension that states a
withheld measurement instead, orNonewhen nothing takes the fact over (#1154). It is not
a synonym for the existingauthoredflag — that says whose decision it was, this says
where the measurement went. -
Updated the exact
b123d-recognisersproduction lock from 0.2.2 to 0.2.4.
The immutable PyPI wheel/sdist hashes and capability-manifest digestd0023d30e583c03abc55f09dfeaaa56fddf56334afa0417818480b2fa2ce3f0fare
recorded in.github/recogniser-release.json; focused compatibility evidence and the
normal consumer gates run on the generated PR. -
Updated the exact
b123d-recognisersproduction lock from 0.2.1 to 0.2.2.
The immutable PyPI wheel/sdist hashes and capability-manifest digest7985befc8572bfe6d1c0805dfdf690d74a5a4a5f14d5988cc29c366315ff04caare
recorded in.github/recogniser-release.json; focused compatibility evidence and the
normal consumer gates run on the generated PR.
Fixed
-
An authored tolerance the compiler approved now reaches the sheet wherever the measurement
is drawn (#1215, #1216).build123d_draftingresolves a dimension's text as
label if label is not None else _number_with_units(measured, tolerance), and every
dimension this engine emits passes a label — so a forwardedtolerance=rendered nothing
while type-checking and reading back correctly fromDimension.label. Ten render paths
discarded the band that way: envelope extents, the height ladder, the turned-step chain, two
publicDrawingverbs, the deferred corridor route, the detail-view redraw, the short-rise
escape, step shoulders, pattern pitch, compound-callout recess terms, grid pitch, and both
hole tables. A general guard now decorates every parameter of every feature across a corpus,
through bothdecorations=key shapes, and joins what the compiler approved against what the
claiming annotation renders. -
Collapsed
N×marks no longer state a tolerance their members do not share (#1216). A
pattern's pitch claimed the authored band of eve
Full changelog: https://github.com/pzfreo/draftwright/blob/main/CHANGELOG.md