-`xdg-shell.h` / `xdg-shell.c` are generated by `wayland-scanner` from the vendored `xdg-shell.xml` into `build/include/` and `build/`. Do not edit them; rebuild to regenerate. `CMakeLists.txt` lists the generated `.c` in `SOURCES` and the `.h` as a source to force generation.
-`compile_commands.json` at the repo root is a symlink to `build/compile_commands.json`; configure first.
- Hashtable: `hashtable_new(size)` requires `size > 0` (used as a modulo). `hashtable_destroy` frees keys/entries but not values (caller owns values). `hashtable_set` returns the previous value or `NULL`, indistinguishable from "key absent".
- Entry point is `wlgol.c`; modules `tkeyboard.c`, `tpointer.c`, `hashtable.c`; headers in `include/`.