MeshCraft ran a long stabilization phase (policy archived at
docs/history/STABILIZATION.md) that is now substantively complete —
gates A-E satisfied, remaining plan.md items are owner-gated/deferred,
not active defect work. This checklist is for when a release is actually
being cut; until then, treat it as the bar to clear, not a completed
process.
-
cmake-build-debug/(Debug): full reconfigure (CLion's bundled cmake — seeCONTRIBUTING.md) + full rebuild, 0 errors/warnings of note.sh "$CLION_CMAKE" -S . -B cmake-build-debug -DBUILD_TESTING=ON ninja -C cmake-build-debug - Release build (fresh directory, system cmake is fine): full
configure + build.
sh cmake -S . -B b-release -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON \ -DFETCHCONTENT_UPDATES_DISCONNECTED=ON cmake --build b-release -j4 - Offline mode builds cleanly
(
-DFETCHCONTENT_UPDATES_DISCONNECTED=ONwith dependencies already fetched from a prior build). - Each CNA-free component builds standalone, without the root
project:
mc3/,mcb/,mc3togltf/,mc3tomcb/(seeTESTING.md's standalone-build loop).
-
ctest --output-on-failureincmake-build-debug/: all tests pass — runctest -Nfor the current count (95 as of 2026-07-11; this number grows over time, do not hard-code it here). - Same in the Release build directory.
- Each standalone component's own test(s) pass — check with
ctest -N -L <label>(format/export/unit/lint/ai/commands/registry/render) rather than trusting a hard-coded per-component count here. - No test was skipped due to a missing optional dependency (SQLite3, OpenSSL, LibXml2) that should actually be present on the release build machine — check the CMake configure log for "not found" messages for any of these.
-
NEXT.mdreflects actual current state (status/blocker/next task) — not stale from a prior session. -
plan.mdis internally consistent — runpython3 test/validate_plan_consistency.py .(add a build directory and--run-teststo also catch live CTest drift, not just registered counts).plan.md(SYS-W13-01) is a bounded active plan using[DONE]/[IN_PROGRESS]/[BLOCKED]/[DEFERRED]/[PROPOSED]text markers on each row, not an emoji-marker summary table — that older format was retired whenplan.mdwas cut down from 2,743 lines; historical detail lives indocs/history/. -
README.md's "Current Features"/"Current Limitations" reflect what actually works — spot-check a few claims against the code, don't just trust the prose (this has caught real staleness before — seeNEXT.md's history for an example). -
MC3_FORMAT.mdcovers every elementmc3.xsddeclares (no N1-N7 gaps). -
mc3.xsddeclares every attribute/elementMc3XmlWriter.cppactually writes (seeCONTRIBUTING.md's "schema/writer symmetry" note — this has been a real, recurring source of bugs). -
TESTING.md's test count and per-test descriptions matchctest -N's actual output.
- Every
test/*.mc3.xmlfixture validates againstmc3/mc3.xsd(covered by thexsd_validationctest, but worth a manual spot check if any fixture changed recently). -
mc3togltfexports at least one representative scene (test/features.mc3.xmlor similar) to.glband the result opens cleanly in a glTF viewer (not just "exit code 0" — a malformed-but-technically-valid GLB can still fail to render). -
mc3tomcbround-trips a representative scene (.mc3.xml → .mcb → .mc3.xml) losslessly.
-
git statusclean, all intended changes committed. -
develop(or the release branch) pushed and in sync with the remote. - No secrets committed (API keys, tokens) — this project has had a
PAT-in-
.git/configissue before; double-check nothing similar snuck into a tracked file.