v0.2.10 — declarative-surface fidelity + layout unification
Declarative-surface fidelity and layout-engine unification. Editing and re-running a declarative Sheet script now reproduces more of the drawing, a new lint catches stale declarations, and an intentional scale is respected. Internally the annotation placer moves further onto the single collect-then-solve (ADR 0009), and kiwisolver is dropped as a dependency.
Added
- Declaration-vs-geometry reconciliation lint (
declared_feature_absent) — flags a declared hole/boss/step with no matching geometry (a stale/phantom callout over empty space); closes the last gap in the "did my edit break the drawing?" loop. (#487) - Title-block + layout aspects on the
SheetDSL —Sheet(drawn_by=, tolerance=, scale=, page=); the generated--scriptreproduces them and the CLI forwards the flags on the sheet path. (#474) - PMI reproduced on the declared-model path —
build_drawing(path, model=…, pmi="annotate")synthesises STEP AP242 PMI so a declared build draws the same PMI dims as detection. (#472)
Changed
- An intentional explicit
scale=below the legibility floor is honoured with a warning instead of aValueError; only a genuinely degenerate scale (< 0.1 mm projected) is rejected. (#489) kiwisolveris no longer a dependency — the 1-D strip solve delegates to the built-in deterministic PAVA algorithm (supersedes Cassowary). (#507)
Fixed
- Dimension placement is more robust under contention — candidate priority through the corridor solve so an authored GD&T frame isn't dropped for an auto dim over-capacity (#357); rotational bore leaders bounded + ranked, and pitch dimensions on the per-side obstacle-aware solve — retiring the last fixed-offset stacking placers (#374).
Full changelog: CHANGELOG.md.