penerbit

Nim project. "Penerbit" = publisher (Malay).

References

The references/ directory contains Nim language docs: manual, stdlib overview, lessons learned, compiler tools guide, and Mastering Nim raw OCR.

Playbook

[ts-001] +0 expandFilename raises on non-existent paths; use normalizedPath(absolutePath(...)) for safe resolution. [ts-002] +1 Nim parseopt needs : or = for option values; -p 8082 silently fails, use manual next-token fallback. [ts-003] +0 Nim not binds tighter than >; not x.len > 0 does bitwise NOT on int. Use x == "" or parens. [ts-004] +1 Nim Defect (IndexDefect, stack overflow) isn't caught by except CatchableError; use except Exception in handlers. [ts-005] +1 markdown lib v0.8.8 recurses deeply on nested lists; large files (>512KB) blow the stack uncatchably. [code-001] +1 mummy handler: var headers: HttpHeaders; headers["K"] = "V"; request.respond(code, headers, body). [code-002] +0 Thread-safe logging in mummy: std/logging globals aren't gcsafe; use plain echo with formatted timestamps. [code-003] +0 Nim C FFI: {.importc, header: "<h>".} + --passL:"-lname" in nim.cfg; C malloc'd mem needs c_free not dealloc. [shr-001] +0 For crashy third-party libs: layer size guard + except Exception + raised nimCallDepthLimit in nim.cfg. [shr-002] +0 When a Nim lib has unfixable bugs, replace with a minimal C FFI wrapper (~10 lines) to a mature C lib. [conv-001] +1 Project layout: src/ source, bin/ output (gitignored), nim.cfg compiler config, .nimble package. [conv-002] +0 Engineering docs go in docs/ with descriptive filenames.