Release v0.2.0 evidence
Release: v0.2.0
Status: Completed
Source reference: unreleased at the time of writing. No annotated tag or frozen branch exists
yet. Tagging v0.2.0 and creating release-v0.2.0 remain maintainer steps under
section 7 of the release process.
Verification date: 2026-07-24
Required gates
| Gate | Command | Result | Notes |
|---|---|---|---|
| Fast | ./gate.py fast --all-compositions | Passed | Included in the audit gate below, and run alone during PBI-062 |
| Strict | ./gate.py strict and ./gate.py strict --app desktop | Passed | The required completion gate for every implementation PBI, run per composition |
| Audit | ./gate.py audit --all-compositions | Passed | Final release gate, run over headless and desktop-sdl from the existing build/ tree |
Release checks
Every row was produced by ./gate.py audit --all-compositions unless noted.
| Check | Evidence | Result | Notes |
|---|---|---|---|
| GCC build/test | Included in audit gate | Passed | 7 CTest cases headless, 10 desktop-sdl |
| Clang build/test | Included in audit gate | Passed | Same suites, second toolchain |
| ASan | Included in strict or audit gate | Passed | Both compositions |
| UBSan | Included in strict or audit gate | Passed | Both compositions |
| Cppcheck | Included in fast, strict, or audit gate | Passed | 62 sources analysed |
| Clang-Tidy | Included in strict or audit gate | Passed | Project code only, both compositions |
| Public header self-containment | Included in strict or audit gate | Passed | 14 headers headless and 19 desktop-sdl, GCC and Clang |
| Core boundary symbols | Included in strict or audit gate | Passed | GCC needs nothing external, Clang needs memcpy and memset in 2 objects each, and no Core compile line names a forbidden dependency |
| Include boundary | Included in fast, strict, or audit gate | Passed | boundaries.py, 3 boundaries hold over 47 scanned source files |
| Asset manifest and runtime layout | Included in fast, strict, or audit gate | Passed | assets.py, 1 asset set with 5 manifest references resolving under the build output |
| Runtime allocation probe | Included in audit gate | Passed | 0 allocations, 0 memory errors, both compositions |
| Coverage | Included in audit gate | Passed | Measures src only |
| Valgrind | Included in audit gate | Passed | Allocation probe and test suite report 13 framework allocations and 0 errors |
| Composition selection | python3 tools/tests/test_compositions.py and CMake valid/invalid pairs | Passed | 31 composition tests, and the registry rejects an unknown or incompatible pair before configure |
| Desktop process scenario | pet_desktop_scenario | Passed | Dummy-driver lifecycle plus a real-driver frontend failure path |
| Support matrix | python3 tools/verify/matrix.py | Passed | Release-time step rather than a gate step |
Coverage
| Target | Line coverage | Branch coverage | Notes |
|---|---|---|---|
| Pet Core | 100.0% | 100.0% | 143/143 lines, 94/94 branches, measured over src in both compositions, from _reports/coverage |
The desktop app, the SDL frontend, and the shared components are exercised by their own CTest suites
rather than by the Core coverage figure, which measures src alone.
Desktop runtime evidence
Taken from build/linux-gcc-debug-desktop-sdl as the working directory.
| Command | Result | Kind |
|---|---|---|
./apps/desktop/pet_desktop --steps 240 --step-ms 16 | Exit 0, name=Pixel activity=idle expression=neutral frames=240 canvas=320x240 assets=loaded images=5 on the real Wayland driver | Automated process |
SDL_VIDEODRIVER=x11 ./apps/desktop/pet_desktop --steps 240 --step-ms 16 | Exit 0, same reported line on the real X11 driver | Automated process |
pet_desktop observed by the maintainer on Wayland and X11 | The window with the pet drawn in it, a visible greet response to the space key and the left mouse button, and a clean exit through the window close button and Ctrl-C | Manual observation |
The manual row is the only evidence for visible rendering and synthesised interaction, because no
automated check covers either. That gap is recorded as LIM-011 and has to be repeated by hand for
every release.
Support status
| Environment | Status | Notes |
|---|---|---|
| Linux GCC | Verified | Built and tested, GCC 15.3.0, plus the real-driver desktop runs |
| Linux Clang | Verified | Built and tested, Clang 22.1.8 |
| Windows MSVC | Designed | Presets provided but never executed. The symbol scan and the allocation check cannot run there at all, see LIM-001 and LIM-002 |
| Embedded | Designed | No cross compilation or embedded build attempted, so no runtime claim is made, see LIM-012 |
Verified toolchain
| Tool | Version |
|---|---|
| CMake | 4.3.4 |
| Ninja | 1.13.2 |
| GCC | 15.3.0 |
| Clang and clang-format | 22.1.8 |
| Cppcheck | 2.21.0 |
| Gcovr | 6.0 |
| Valgrind | 3.27.1 |
| GNU nm | 2.45.0 |
| Python | 3.13.13 |
The verification host was Linux x86_64. tools/verify/matrix.py prints this set from the
environment it runs in. The same set is recorded in
section 10.5 of the version architecture.
Notes
- The project version in
CMakeLists.txtis0.2.0, andpet_version_stringreturns it through the generatedpet/version.h. - No check required for the release failed or was skipped. The unavailable Windows checks and the absent embedded build are recorded as unavailable rather than passing, and neither environment is required for this release.
- The full claim-to-evidence mapping is in section 10.5 of the version architecture.
- This evidence is valid for the commit that will be tagged
v0.2.0. If any source changes before tagging, the final required gate must run again against the exact commit to tag. - Future fixes require a new commit and a patch release tag, such as
v0.2.1.