The font atlas loader read the bundled Noto Sans Mono from a
cwd-relative path with system-font fallbacks, so launching the editor
from outside the repo root could pick a different font or fail. The
bundled font is now embedded with #load; EditorMono.ttf remains an
optional on-disk override, and the system fallback paths are gone.
Together with the embedded shaders this makes the binary fully
self-contained.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The GPU renderer previously read .spv files from a cwd-relative path at
runtime; when they were missing or the editor was launched from outside
the repo root, it silently fell back to the SDL renderer, losing syntax
highlighting. The shaders are now baked in at compile time, so the
binary is self-contained. The compiled .spv files are committed (no
longer gitignored) since they are required to build; regenerate with
scripts/compile-shaders.sh after editing the GLSL sources.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Daemon: parse requests with kotlinx.serialization and read fields from
the params object instead of scanning the whole line for key markers,
which picked up decoy keys ("path", "version", "id") occurring inside
buffer text. Build all responses and events with JsonObject builders,
which also fixes unescaped control characters in output and \uXXXX
escapes in input. Malformed lines now get a BAD_REQUEST reply instead
of corrupting field extraction.
Client: quote outgoing JSON strings with a strict json_quote helper
instead of Odin's %q verb, whose \x/\e escapes are not valid JSON.
Verified end to end: adversarial payloads (decoy protocol keys,
unicode, control chars, malformed lines) against the daemon, and the
full client smoke flow (ids 1-10) against a real Gradle workspace.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Native SDL3 editor written in Odin with a piece-table buffer core,
backed by a Kotlin/JVM daemon speaking newline-delimited JSON over
localhost TCP for Gradle import, Kotlin/Java diagnostics, and
heuristic completion/hover/definition/references/rename.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>