Verification
Every change is verified with the same three-step gauntlet: build → contract suite → CTest. The details of each harness live in Testing; this page is the quick operational reference.
1. Contract suite (the behavioral regression oracle)
# CRITICAL: point the suite at the REAL build output, not build_clean
$env:WMMR_DLL_DIR = "C:\path\to\WindowsMovieMakerDecomp\build\bin\Debug"
python32\python.exe tests\mmr-python\run_tests.py
Expected result:
PASS=116 FAIL=0
The suite is a ctypes harness that loads the built 32-bit DLLs and asserts HRESULTs, GUIDs,
calling-convention decorations, factory semantics, and observable side effects. Contracts
live in tests/mmr-python/wmmr/contracts/*.py (submodule); cross-DLL scenarios in
wmmr/workflows.py.
WMMR_DLL_DIR traprun_tests.py defaults the DLL directory to build_clean\bin\Debug — the
reference/parity-stub DLLs that return E_NOTIMPL from many factories. If you forget to set
WMMR_DLL_DIR, contracts fail or silently report stub behavior. Always export the variable
first.
Useful flags:
run_tests.py [DLL-DIR] [--list] [--filter NAME] [--skip NAME] [--retries N]
[--junit PATH] [--json PATH] [--tap PATH] [--quiet]
2. CTest
ctest --test-dir build -C Debug --output-on-failure
Expected: 2/2 pass (sanity checks that MovieMaker.exe and MovieMakerCore.dll exist
in the build output — compare-file self tests wired through include(CTest)).
3. GUI harness (optional, deeper)
# Managed-only self-check (no DLLs needed)
dotnet run --project tests\mmr-gui -- --selfcheck
# Headless DLL gate: 128 checks across 21 DLLs (needs x86 .NET runtime)
dotnet run --project tests\mmr-gui -- --selftest build\bin\Debug
Requires .NET 10, PlatformTarget=x86, and $env:DOTNET_ROOT_X86 pointing at the x86
runtime.
4. Export parity
If you touched any DLL's export surface:
python tools\diff_exports.py <original.dll> build\bin\Debug\<ours>.dll
python tools\diff_exports.py --batch <original_dir> build\bin\Debug
Export parity is mandatory — names, ordinals, and decorations must match the reference exactly. See Stub Design → Ground Rules.
5. TODO audit
python tools\todo_audit.py --check
Reports all TODO(reconstruction): annotations across authored source. Use it before
committing to ensure you have not introduced unclassified stubs. See
TODO Audit.
Definition of done
From AGENTS.md, a change is complete when:
cmake --build build --config Debugis clean (0 errors).WMMR_DLL_DIRset to the real build; contract suite green (PASS=116 FAIL=0).ctest --test-dir build -C Debug --output-on-failurepasses (2/2).- Export parity preserved for any touched DLL.
- No plaintext credentials, no unbounded parser on untrusted input.
- Submodule contract changes committed in the submodule + gitlink bump in the parent repo.