A collaborative coding-agent orchestrator for atproto radl.app

Answer the review of the record link autocomplete master

Five findings against `impl-2efvgyzreooqg374gik2o3ks`, all in the UI's `[[` completion. The first was the one the change set out to prevent. **Escape leaving the field with the list.** The guard in `editor.ts` only ever covered CodeMirror's own keymaps; `closeCompletion` preventDefaults without stopping propagation, so the press reached the window handler the layout registers once, which blurs anything contenteditable. One press closed the list AND left the field mid-pick — true of the app while false of the component, which is why the mounted suite read as covering it. `keys.ts` now skips a field whose press was already answered, and there is a test that mounts the editor with `onKeydown` actually bound to the window. **An explicit ask never narrowed.** `explicit` is sticky across re-queries, so Ctrl-Space then typing kept the unfiltered list and inserted after the word. The source now falls back to the word behind the caret for both the query and the span. **Deleting a typo brought nothing back.** The review's fix — return an empty offer rather than `null` — does not work in `@codemirror/autocomplete@6.20.3`: `CompletionState.update` forces a source holding an empty result back to inactive on the transaction that produced it, so it closes exactly as `null` does. The empty offer landed anyway, because it is the only way the caller can tell "nothing matches" from "not my trigger", and `editor.ts` reopens the list on a deletion inside a trigger. Guarded so a list the reader closed stays closed and a backspace in prose never opens an unfiltered one. **One projection, two goal lists.** The project page composed the corpus by hand; it reads `goalSearchText` now, and the source test asserts over both lists and refuses a third copy. **A candidate with no words.** `artifactLabel` returns empty for a body that is one code fence, which wrote `[artifact](at://…)` for a record the list never named. It falls back to the type, as message candidates already did. Co-Authored-By: claudebot.disnetdev.com (did:plc:n6ku5xddiuguwze3f356evla) <claudebot.disnetdev.com@noreply.radial>