Repository navigation
v1.20.6-alpha -- converter: unit rules, lazy book validation (BDE apply 20+ min -> 26 s), unreachable-member warnings, fast proptree
Converter/editor engine gaps + property-tree redesign. Merge notice for the editor team: docs/NOTICE-2026-10-05-engine-1.20.6-merged.md (local). Battery 630/637 (7 = known environment failures + run-order flakes that pass alone).
MINOR-in-PATCH: the converter engine gains what the rule-book editor asked for. Only
DRAGLINT_VERSION moves; the extractor version is unchanged -- no index needs a re-parse.
Added
- convert-apply applies unit rules (
#unuse,#use,#useswap).info --jsonadvertises
capabilities.apply_unit_rules; the apply/1 JSON gainscomponent_part,uses[],
uses_removedanduses_added. #depth Nbook directive. The default proptree / convert-scaffold depth is now 5
(previously effectively 3).--ruleson proptree / convert-scaffold.--progress-interval S: one JSON progress line on stderr every S seconds; off by default.info --jsoncapabilitiesbook_depth,progress_lines,lazy_validate.- apply/1
refused+reason; text mode printsREFUSED: <reason>. - apply/1
unreachable[](and the unreachable-path warning text) andclasses_built. - R26 refusal: a
#unuse/#useswapthat would remove the unit declaring the From type of
an instance left unconverted (skipped, or excluded by--only) refuses the unit:
<rule> would leave <N> unconverted instance(s) of <Type> -- unit not changed.
Changed
- convert-validate / convert-apply resolve paths lazily through a per-class member cache, and
every#convertblock is validated; proptree expands through the same cache. - Private members are never shown or resolved.
- A rule through an inaccessible member is a warning and is skipped (owner ruling 2026-09-30).
- JSON/text output is written in one buffered write, and stderr is flushed first, so a merged
stdout/stderr stream still parses. REFUSED: <reason>replacesERROR:for refusals.--onlystill filters instances only, never unit rules; a removal it would make unsafe is now
refused (R26) instead of breaking the compile.- A
.dfmcut short after indexing (an object's span runs past the end of the file) refuses the
unit as stale (<Name>: index is stale for this .dfm -- reindex) instead of skipping that one
instance and converting the rest.
Removed
--validate-all-blocks,blocks_not_validated,trees_built(replaced byclasses_built).
Fixed
- Per-file lint of a
.dprruns the AST checks. try-except-swallowedaccepts a captured exception in the routine's own local that is
checked after the try.- An indented doc block directly on its declaration keeps its indent.
- convert-apply refuses to splice a stale
.dfmspan, including a block that lost lines so its
recorded end line now holds a later sibling'send(the splice used to delete the sibling). - A From-only header (
#convert TFoo ->with its trailing space, or#convert TFoo) no longer reads
as a From typeTFoo ->: it is aline N:error#convert TFoo has no To type(R27); likewise
#useswap X ->is#useswap X has no replacement unit.
Performance
- BDE book convert-apply dry run: more than 20 min (cap hit) -> 26.5 s.
- convert-validate BDE (TQuery -> TFDQuery): 408.6 s -> 17.9 s.
- TabcToggleBtn book convert-apply: 129.8 s -> 16.7 s.
- TFDQuery proptree depth-5 JSON: 80 s -> 14 s (byte-identical output).
Known
- The
unused-unit-in-usesparser false positive ships in 1.21.0 with a re-parse.