Two user-visible bugs:
1. `<CR>` on a wikilink whose target wasn't indexed yet (typical for
"follow this link → page doesn't exist → I want a fresh buffer for
it") did nothing. Cause: `Backend::resolve_target_uri` returned
`None` once `WorkspaceIndex::resolve` came up empty, so
`goto_definition` had no Location to hand back to the client and
`vim.lsp.buf.definition()` / `:LspDefinition` silently no-op'd.
Vimwiki's behaviour is "open a fresh buffer for the future page".
`Backend::resolve_target_uri` now synthesises a
`<wiki_root>/<path><file_extension>` URI when the lookup misses,
for both `LinkKind::Wiki` and the `LinkKind::Interwiki` fallback.
The editor opens an empty buffer; saving writes the file. New
helper `synthesise_page_uri` does the path walk so subdirectory
wikilinks like `[[notes/Daily]]` get the right output path.
2. Folding occasionally surfaced an `E5108` from inside
`vim.lsp.foldexpr()` — happens when the function fires before the
LSP client has finished attaching to the buffer, or when the
server's `foldingRange` response hasn't yet arrived. The error
gets shouted once per visible line.
`lua/nuwiki/folding.lua` now exports `lsp_expr` which `pcall`s
`vim.lsp.foldexpr` and falls back to the regex implementation
(`M.expr`) on error or when the LSP function isn't available.
`ftplugin.lua` points `foldexpr` at the wrapper instead of
`vim.lsp.foldexpr` directly. `foldtext` is set in both branches
now so collapsed folds keep the nicer summary line.
Tests: 4 new in `phase19_followlink_creates.rs` covering indexed
resolution, missing-page fallback, the canonical
`<root>/<page>.wiki` shape, and the slash-bearing subdirectory link.
Total 381 tests pass; fmt + clippy clean.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>