Living quality record · memory & resource safety
Memory behavior is a maintained build-system contract.
Nift has short CLI commands, parallel builds and a genuinely long-running watch mode, so memory testing has to cover more than “the process exits cleanly once”. This page records the completed memory/resource campaign and the later battle-hardening checkpoints that built on it.
Memory/resource work did not stop at Checkpoint 4. Cross-component integration closed at Checkpoint 6, then Checkpoints 7–10 established scoped incremental-vs-clean equivalence, filesystem/transaction integrity, parser fuzz/resource boundaries and cross-platform behavioural equivalence. Those later checkpoints test broader correctness properties rather than claiming ever-larger leak campaigns.
Nift has committed ASan/LSan/UBSan build targets, a fast memory-safety smoke gate, common JSON evidence output, peak-RSS capture and a Valgrind-compatible wrapper. These became reusable infrastructure for the lifecycle and integration campaigns that followed.
The embedded parser has a maintained one-process lifetime corpus covering parse/dump, malformed partial-allocation cleanup, mutation, copy/move ownership, deep/large JSON, streaming and early-stop paths. On 18 August 2026, 120 ASan + LSan + UBSan corpus iterations completed with zero findings; a separate 400-iteration RSS soak settled at 10,688 KiB. Independent Valgrind 3.26.0 confirmation at Jsonic++ commit b9d0ff3 completed 40 corpus iterations with 0 errors, 0 bytes in use at exit and all 6,579,515 allocations freed.
The standalone Minify++ component has a maintained one-process multi-format lifetime corpus and batch CLI stress. At commit db2a6ff, 80 ASan/LSan/UBSan corpus iterations completed with zero findings and a separate 300-iteration native soak stabilized at 7,160 KiB RSS. Independent Valgrind confirmation at commit 2a51a38 ran 30 maintained lifetime-corpus iterations with 0 errors, 0 bytes in use at exit and all 2,448 allocations freed.
Checkpoint 3 exercised 57 sanitizer-backed core lifecycle/test phases spanning project creation, tracking mutations, deliberate failures and repair, incremental modes, Project Contracts, JSON Schema, requirements, template-less tracking, Minify++ integration and cross-feature behavior, with no ASan/LSan/UBSan finding. Checkpoint 4A kept one native build --auto process alive for 180 deterministic invalidations; RSS stayed within 5,976–6,356 KiB. The 10,000-page matrix remained below 12 MiB peak RSS across tested worker counts. Checkpoint 4B then completed 30 acknowledgement-driven watch cycles under the external Valgrind wrapper at Nift commit 92e6c05.
A 90-page mixed project completed 60 native mutation/recovery rounds combining schema-validated JSON, Project Contracts, HTML/CSS minification and ordinary content/template rebuilds. Twenty malformed-JSON or minifier-configuration failures were deliberately propagated through Nift and every repaired incremental build recovered. The sanitizer variant completed without findings. The corrected external 6B run directly monitored 19 Nift invocations under Valgrind across a 40-page, 12-round workload with four expected component failures; every invocation reported zero Valgrind errors and no non-zero definite, indirect or possible leak bytes.
After the generic memory campaign closed, Nift moved on to different failure classes: 720 incremental-vs-clean public-tree comparisons across modified/hash/hybrid modes; 16 adversarial filesystem/transaction cases; 1,217 sanitizer-backed n++ parser/resource cases; and an 18-case portable behavioural corpus compared across Linux, macOS and Windows with zero normalized portable mismatches. These are scoped correctness results, not additional memory-leak claims.
What matters for Nift
- Short-lived correctness: sanitizer-backed build, tracking, configuration, contracts, JSON/schema and failure paths.
- Repeated-build stability: repeated successful and failed/repaired builds with memory telemetry.
- Watch-mode stability: sustained invalidation cycles in one long-running process.
- Concurrency: many-page and shared-dependency builds under multiple worker counts.
- Integrated components: Jsonic++ parsing and Minify++ final-artifact paths exercised under Nift ownership.
- Large projects: 10k-page fixtures used as operational memory-pressure cases, not only timing benchmarks.
Acceptance rule
No sanitizer or definite/indirect leak findings in the maintained workloads; no unexplained monotonic heap/RSS growth in long-running watch/soak tests after warm-up; failed builds must clean up without requiring process restart. RSS alone is not treated as a leak oracle because allocators may retain freed capacity.
Completed campaign
- Instrumentation baseline. Reproducible sanitizer configurations, Valgrind-compatible focused gates and machine-readable summaries.
- Component lifetime gates. Jsonic++ and Minify++ standalone/embedded lifetime stress.
- Core Nift lifecycle. Build, tracking, configuration, failure and recovery paths.
- Watch endurance + 10k pressure. Long-running invalidation and large-project worker-count testing.
- Cross-project integration. Jsonic++, Project Contracts and Minify++ combined under Nift ownership.
- Incremental equivalence. Incremental output compared byte-for-byte with clean rebuild output across the maintained corpus.
- Filesystem/transaction integrity. Interrupted/failed writes, permissions, symlinks and recovery.
- Parser/resource boundaries. Grammar-aware mutations, recursion/size limits and sanitizer-backed failure control.
- Cross-platform behavioural equivalence. Normalized portable semantics compared across Linux, macOS and Windows.
How this page is maintained
Evidence remains scoped to the commits, tools, platforms and workloads actually exercised. New protected behavior should bring new regression evidence, and a later code change can invalidate or refresh a result explicitly rather than inheriting an old “battle tested” badge forever.