v0.16.0
Fixed — whole-element reference-line anchors render on the default lexd <file> --to <fmt> path (#722)
Whole-element reference-line anchors (the [#id]-on-its-own-line form) were silently dropped on the default file-convert path, which routes through the include resolver even when a file has no includes. The resolver used a hand-rolled copy of the source→AST front-end that never ran the reference-line pre-pass, so the list collapsed into a self-linking paragraph. The two front-ends are now unified into a single parse_to_attached_root stage that both the standard pipeline and the include resolver call, so the pre-pass (and any future front-end stage) lives in exactly one place. Entry-file reference lines now anchor correctly; reference lines authored inside included files are not yet propagated through the wire codec (dropped rather than emitted with a wrong range — a documented follow-up).
Removed — pre-1.0 legacy backward-compatibility scaffolding (#727)
Lex is pre-1.0 with no install base, so the compatibility shims that existed only to ease migration from older formats are removed wholesale. Four user- and API-facing surfaces go away:
lexd migrate-labelssubcommand removed (#728). The standalone label-migration command and itslex_core::lex::migratemodule (includingblessed_for_legacy) are deleted. The LSPforbidden-label-prefixquickfix that previously rewrote a legacy label through the curated "blessed" table now simply strips the reserveddoc.prefix, which covers the only case that arises in practice.lexd formatno longer migrates legacy session-based footnotes (#729). The dual-format path that detected child sessions titled1. Noteand converted them to list-based footnotes during formatting is gone (normalize_footnotes,convert_session_notes_to_list,split_numbered_title). List-based footnote formatting is unchanged; the legacy session form was documented as "should not occur in practice".- Legacy detokenizer re-export shim removed (#730). The canonical detokenizer lives in
lex_core::lex::token::formatting; the oldlex::formats::detokenizerre-export that preserved historical import paths is deleted. Direct consumers import{detokenize, ToLexString}fromtoken::formatting. - Parser entry points consolidated (#731). Internal naming around the parser front-end is unified; no behavior change.
Changed — process_full collapsed into parse_document; process_full_permissive renamed to parse_document_permissive (#737)
lex-core's parsing entry points carried two public names for the same pipeline call — parse_document (documented as a backward-compatibility alias) and process_full — plus a matching process_full_permissive. Pre-1.0 there is no compatibility to keep, so the public surface is now a single canonical pair: parse_document (the standard strict parse) and parse_document_permissive (the LSP/diagnostics variant that lets policy-violating doc.* / unknown lex.* labels flow into the AST instead of failing the parse). process_full and process_full_permissive are removed. Direct lex-core consumers calling the old names must rename; parse_document itself is unchanged, so the overwhelming majority of call sites are unaffected.