Living quality record · memory & resource safety
Long-run minification without hidden resource growth.
This page is the maintained memory/leak-testing record for Minify++. The goal is not a snapshot claim of “no leaks”; it is a release gate that repeatedly stresses every format, malformed-input cleanup and the CLI/API paths that process many files.
Current phase
Checkpoints 2A and 2B are complete. Minify++ now has a maintained long-lived multi-format lifetime corpus plus batch CLI stress. At commit db2a6ff on Linux x86-64 with GCC 14.2.0, an 80-iteration ASan/LSan/UBSan corpus run completed with zero findings. A separate 300-iteration native soak moved from 7,096 KiB RSS after warm-up to 7,160 KiB at midpoint and 7,160 KiB at completion, indicating a stable operating band rather than continued growth.
On Linux x86-64 at Minify++ commit 2a51a38, Valgrind 3.26.0 ran 30 maintained lifetime-corpus iterations with 0 errors, 0 bytes in use at exit, all 2,448 allocations freed, and no leaks possible. Peak Valgrind process RSS was 184,908 KiB. This closes the standalone Minify++ lifetime gate; Nift-owned integration remains a later cross-project checkpoint.
The sanitizer CLI stress completed 8 rounds × 42 mixed-format files, including overwrite and controlled partial-batch failure cleanup. A separate native CLI soak completed 30 rounds × 70 files. The broader sanitizer suite also passed the deterministic fuzz corpus (70,000 cases), source smoke tests and CLI smoke tests. No production Minify++ source fix was required by this checkpoint.
The independent Valgrind target remains part of the maintained standalone gate rather than being inferred from sanitizer success. Nift-owned Minify++ integration stress stays at the cross-project ownership boundary so this page does not double-count the same evidence.
Planned workloads
- ASan + LeakSanitizer across HTML, CSS, JS, JSX, JSON, XML and SVG suites
- thousands of repeated minify calls in one process, alternating small and large inputs
- malformed-input and rejection paths, especially after partial scanner/parser state has been built
- batch CLI runs over large file sets and repeated overwrite/non-overwrite cycles
- standalone API/CLI resource behavior here; Nift-owned integration stress is tested later at the actual ownership boundary
- Valgrind confirmation on Linux and heap/RSS trend logging for long soaks
Acceptance rule
Zero reported definite/indirect leaks under the maintained instrumentation, no sanitizer lifetime errors, and no unexplained monotonic resource growth after warm-up. Allocator-retained capacity is recorded rather than mislabeled as a leak.
Checkpoint plan
- standardize sanitizer/leak build targets and reporting;
- run per-format API lifetime soaks;
- run generated/adversarial corpora repeatedly in one process;
- stress CLI batch and failure cleanup;
- verify the synchronized Nift copy without duplicating Nift-owned integration stress;
- cross-check with Valgrind and convert failures into permanent regressions;
- publish the current reproducible result here and keep it in the release checklist.
See Battle tested for syntax/semantic evidence and Production readiness for the overall maintained verdict.