- when porting features from upstream Zig, it should be a mechanical copy. Don't invent. Most of what you are doing is invented, but needs to be re-done in C. Keep the structure in place, name functions and types the same way (or within reason equivalently if there are namespacing constraints). It should be easy to reference one from the other; and, if there are semantic differences, they *must* be because Zig or C does not support certain features (like errdefer). - See README.md for useful information about this project, incl. how to test this. - **Never ever** remove zig-cache, nether local nor global. - Zig code is in ~/code/zig, don't look at /nix/... - when translating functions from Zig to C (mechanically, remember?), add them in the same order as in the original Zig file. - debug printfs: add printfs only when debugging a specific issue; when done debugging, remove them (or comment them if you may find them useful later). I prefer committing code only when `zig build` returns no output. - Always complete all tasks before stopping. Do not stop to ask for confirmation mid-task. If you have remaining work, continue without waiting for input. - no `cppcheck` suppressions. They are here for a reason. If it is complaining about automatic variables, make it non-automatic. I.e. find a way to satisfy the linter, do not suppress it. - if you are in the middle of porting AstGen, load up the skill .claude/skills/port-astgen/SKILL.md and proceed with it. - remember: **mechanical copy** when porting existing stuff, no new creativity.