# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ## [0.1.2] - 2026-02-15 ### Fixed - **Windows** - Module reload now works correctly, idk how it was broken - Temp directory creation fixed - `.tmp` directory now hidden via FILE_ATTRIBUTE_HIDDEN - Test build fixed - Force cmd.exe shell in gmake.mk - Fix bash syntax errors when running build.bat - **All Platforms**: platform_mkdir now checks if directory exists before creating ## [0.1.1] - 2026-02-14 ### Fixed - **Logging**: Corrected log level severity order in enum - Reversed order so DEBUG (0) < INFO (1) < WARN (2) < ERROR (3) - Fixes filtering logic where ERROR/WARN were incorrectly blocked - Default INFO level now properly shows INFO, WARN, and ERROR while filtering DEBUG ## [0.1.0] - 2026-02-14 ### Fixed - **C89 Compliance**: Removed stdint.h dependency (C99 feature) - Replaced all uint8_t with unsigned char throughout codebase - Ensures strict C89 compliance for maximum portability ### Added - **Flags system**: Centralized bitfield for boolean state and settings - Replaces stk_initialized with stk_flags for efficient memory usage - Single byte packs all boolean flags (STK_FLAG_INITIALIZED, STK_FLAG_LOGGING_ENABLED) - Runtime-changeable logging control via stk_set_logging_enabled() - **Enhanced logging system**: Complete rewrite with modern features - Log levels: ERROR, WARN, INFO, DEBUG with runtime filtering - Timestamps: yyyy-mm-dd HH:MM:SS.mmm format (platform-specific implementation) - Configurable log output stream (stk_set_log_output) - Configurable log prefix (stk_set_log_prefix, defaults to "stk") - Configurable minimum log level (stk_set_log_level, defaults to INFO) - Platform abstraction for timestamps (GetLocalTime on Windows, gettimeofday on POSIX) ### Changed - **BREAKING**: stk_log() signature changed from stk_log(FILE *fp, ...) to stk_log(stk_log_level_t level, ...) - **BREAKING**: All uint8_t types replaced with unsigned char - All internal STK messages now use appropriate log levels - Setting log output to NULL disabls logging ### Notes - This release completes Phase 1 logging improvements - Dependency management still in progress for Phase 1 completion ## [0.0.4] - 2026-02-11 ### Fixed - **Linux**: Fixed segfault from invalid module indices during extremely rapid file changes - Added validation check to skip stale UNLOAD/RELOAD events for already-unloaded modules - Prevents is_mod_loaded() returning -1 from being used as array index (SIZE_MAX) - Fixed event count mismatch where loops would run more iterations than valid indices populated - Completes the Linux hot-reload stability fixes from v0.0.2 ## [0.0.3] - 2026-02-10 ### Fixed - **Compilation**: Fixed GCC `-Wrestrict` warning in Linux directory watching code by replacing `strncpy` with `memmove` for overlapping memory operations - Ensures clean compilation without warnings while maintaining identical runtime behavior - Uses semantically correct function for moving memory within the same buffer ## [0.0.2] - 2026-02-09 ### Fixed - **Linux**: Fixed segfaults during rapid module reloads when file changes are detected in quick succession - Enabled file readiness checks on Linux (previously only used on Windows/BSD) to prevent loading partially-written shared libraries - Fixed inotify event deduplication to actually remove duplicate events instead of just marking them - Reordered reload operations to only unload old module after successfully copying new version, preventing invalid state when copy fails - **All platforms**: Improved reload safety by deferring module unload until after successful file copy ### Changed - Made `is_file_ready()` check available on all Unix platforms (was previously excluded on Linux) ## [0.0.1] - 2026-02-01 ### Added - Cross-platform dynamic module loading (Linux, BSD, Windows) - Hot-reloading of native modules at runtime - File watching for automatic module reloads (inotify/kqueue/FindFirstFile) - Basic module metadata support - Basic logging infrastructure (stdout/stderr) - Error handling for failed module loads - Robust filename handling with proper buffer bounds checking - Install/uninstall targets for Unix systems - Test suite with cross-platform support ### Notes - Phase 1 in progress: logging system incomplete (no log levels, verbosity control, or output configurability) - Dependency management and versioning not yet implemented - API is unstable and subject to change in future releases [Unreleased]: https://github.com/anth64/stk/compare/v0.1.2...HEAD [0.1.2]: https://github.com/anth64/stk/releases/tag/v0.1.2 [0.1.1]: https://github.com/anth64/stk/releases/tag/v0.1.1 [0.1.1]: https://github.com/anth64/stk/releases/tag/v0.1.1 [0.1.0]: https://github.com/anth64/stk/releases/tag/v0.1.0 [0.0.4]: https://github.com/anth64/stk/releases/tag/v0.0.4 [0.0.3]: https://github.com/anth64/stk/releases/tag/v0.0.3 [0.0.2]: https://github.com/anth64/stk/releases/tag/v0.0.2 [0.0.1]: https://github.com/anth64/stk/releases/tag/v0.0.1