A local-first note taking app

Complete headings after `[[Note#` and `[[#` master

Typing `#` closed the popup, so anchors had to be typed from memory and exactly right. Now `[[#` offers the current document's headings and `[[Note#` offers that note's, each labelled with its level. Two branches, because they have very different costs: - `[[#` (this document) is synchronous and does no I/O — the headings are already in the editor state. That path must never blink, since same-document anchors are the common case. - `[[Note#` reads the target file. `CompletionSource` may return a promise, so the source awaits it; `context.aborted` drops a response the user has already typed past, and a read failure closes the popup rather than crashing. Reading is a new `FileSystemProvider.readFileText`, one method on `LocalFilesystemProvider` that the synced provider inherits — the IPC already existed end to end. Deliberately NOT `documents.openDocument`: for a synced vault that pushes the file to the remote and acquires a live session per call, which would be ruinous per keystroke. Parsed headings are cached under a shared React Query key, so repeatedly typing `#` against one note hits the cache. Headings for other notes ride a separate `wikiLinkHeadingsFacet` rather than being folded into `WikiLinkVaultView`, whose documented synchronous contract the decoration builders depend on. It shares the existing compartment, so there is still one compartment and one reconfigure effect. Options that could not be linked to are filtered out: a heading containing `[`, `]` or `|` cannot appear inside `[[…]]` at all, and duplicate headings are deduped because `findHeading` resolves to the first in document order — offering the rest would navigate somewhere other than where they point. The level badge rides on `Completion.type`, which is inert here since `icons: false`, rendered by an `addToOptions` entry at position 15 so it leads the label (50) and detail (80). The renderer returns null for note-name options, which CodeMirror skips, so one renderer serves both branches. `|` closes the popup in both branches; alias completion remains out of scope. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>