iwe
Fixed
retrieve --backlinkscan now be turned off:--backlinks falsedisables incoming references, while a bare--backlinks(and the default) still includes them. Previously the flag was stuck on and--backlinks falsewas rejected outright.stats -k <key>accepts a key written with a.md/.djextension (stats -k note.md) instead of reporting the document as not found.find --format keyscombined with--projectnow prints the matched keys instead of nothing.attachreports an error and exits instead of crashing when an action'skey_templateordocument_templateis malformed;attach --listand--dry-runare affected too.schemaandfind --filter '{$type: datetime}'no longer crash when a document holds a datetime value with multibyte characters.
iwes
Fixed
- Renaming a wiki link (
[[target]]or[[target|label]]) now selects the target for editing instead of an empty spot at the closing brackets. - Positions in a document that starts with an empty frontmatter (
---/---) are no longer shifted up by two lines, so goto-definition, hover, rename, and code actions land on the right line. - A failed rename (for example when the target file name is already taken) is now returned as a proper LSP error response instead of an empty success, so the editor surfaces the message to the user instead of silently doing nothing.
- Link completion no longer leaves a stray
[behind when the cursor sits after trailing spaces; the completion is inserted at the cursor instead of overwriting part of an earlier word. - Find references invoked on a link now reports references to the linked document (rather than the current document) when the request asks to include the declaration.
- An unknown LSP request now returns a
MethodNotFounderror instead of panicking the request handler and leaving the client waiting for a response that never arrives. - Formatting a document that is not part of the library (a file outside the library path, or a brand-new unsaved file) no longer crashes the server; it returns no edits.
- A transform action environment value that contains non-ASCII characters no longer crashes code action resolution.
- A long editing session on a document that contains a table no longer grows the server's memory without bound; the table's lines are released each time the document is re-parsed.
Removed
- The advertised
workspace/executeCommandcapability, which offered an unimplementedgeneratecommand that had no handler.
iwec
Fixed
iwe_normalizenow actually reformats documents on disk: it compares each document's normalized form against the file's current contents and rewrites the ones that differ, reporting an accuratenormalizedcount instead of always returning0.iwe_createrejects a title with no alphanumeric characters (e.g."!!!") instead of writing an empty-named file.iwe_attachand theiwe://configresource return an error instead of crashing the server when an attach action's template is malformed.- The file watcher maps a file named
note.md.mdto the keynote.mdinstead ofnote, matching how the graph loads documents from disk. - Repeatedly saving a watched document that contains a table no longer leaks memory as the server re-parses it.
liwe
Fixed
DocumentInline::key_rangenow returns the target range for wiki links ([[target]]and[[target|label]]); it previously assumed[text](url)syntax and returned an empty range at the wrong offset.- The markdown reader now offsets line positions by the stripped empty frontmatter (
---/---), so block and inline ranges point at the original document lines instead of being two lines too low. - Sorting a field that mixes value types (e.g. some documents with
priority: 3and others withpriority: high) now produces a stable, deterministic order: values are grouped by type before being compared, so cross-type pairs no longer collapse to "equal" and scramble the result. - Numeric filters compare integers exactly instead of routing everything through 64-bit floats, so large whole numbers past 2^53 (like
id: 9007199254740993) are no longer treated as equal to their neighbours. - A
not-a-numberfilter target (.nan) no longer compares as equal to every number, so range operators like$gte: .nanmatch nothing instead of matching everything. - Datetime detection in query filters no longer crashes on a value with multibyte characters in the timezone tail (for example
2026-04-26T10:30:00+0é9). - Code blocks whose content contains a run of the fence token are now written with a longer fence, so the block no longer terminates early and leaks its content into the surrounding text.
- A paragraph that starts with an escaped
\*keeps its backslash when written, so it is not re-parsed as a bullet list on the next pass. - A document key strips only one file extension, so a file named
note.md.mdmaps to the keynote.mdinstead of collapsing ontonoteand being duplicated on write. - Deleting a table node now releases its header and row lines back to the arena; repeatedly re-parsing a document that contains a table no longer leaks those line slots and grows memory without bound.