Repository navigation
Platform Certification
Audience: QA | Programmers
Thread Context: N/A (offline tooling)
Platform/Backend Scope: Windows 11 x64, MSVC v143, D3D11 + NullRHI (stable-v1 scope)
Platform certification (PLT-200, gate G08) proves that a specific commit builds, installs, launches, renders, and behaves correctly on every declared support-matrix row. The tooling is fail-closed: missing, stale, mismatched, or non-passing evidence blocks certification — silence is never treated as success.
- Before a release milestone: validate that the support matrix rows have fresh, passing evidence for the release commit.
- After a toolchain or driver update: re-collect evidence to confirm nothing regressed.
-
In CI or local QA: run
validate_certification.pyto gate a build.
| Path | Purpose |
|---|---|
tools/platform-cert/validate_certification.py |
Fail-closed validator (CLI + importable) |
tools/platform-cert/support_matrix_schema.json |
JSON Schema for the support matrix |
tools/platform-cert/evidence_schema.json |
JSON Schema for evidence records |
docs/certification/support-matrix.json |
Seed support matrix (stable-v1) |
docs/certification/evidence/*.json |
Per-row evidence records (one file per row) |
Tests/Tools/test_platform_certification.py |
136 adversarial tests |
The support matrix (docs/certification/support-matrix.json) declares every platform row and its required evidence categories. Each row specifies:
-
id — unique slug (e.g.
win11-x64-msvc143-d3d11) -
tier —
primaryorsupported(certifiable),experimentalorunsupported(skipped) - os / arch / compiler / gpu / audio — exact environment spec
- cpuFeatures — required CPU instruction sets
- evidenceRequired — which of the 13 probe categories must pass
| Row ID | Tier | GPU API | Evidence categories |
|---|---|---|---|
win11-x64-msvc143-d3d11 |
primary | D3D11 | All 13 |
win11-x64-msvc143-nullrhi |
supported | NullRHI | 9 (no renderer/content/input/audio) |
Each evidence file captures the result of exercising a support-matrix row on a physical or CI host. Required fields:
- commitSha — must match the matrix's commit exactly
-
collectedAt — ISO 8601 timestamp; must be within
maxAgeHours(default 168h = 7 days) - host — OS family/version/build/locale, arch, CPU model/features, RAM, GPU, audio, compiler (required)
- probes — one entry per evidence category, each with status (pass/fail/skip/error), durationMs, optional detail/artifacts
build, install, launch, renderer, content, input, audio, save, crash, upgrade, rollback, uninstall, dependency_closure
The validator rejects a row under any of these conditions:
| Condition | Result |
|---|---|
| No evidence file for a certifiable row | FAIL |
Evidence commitSha ≠ matrix commitSha
|
FAIL |
Evidence older than maxAgeHours
|
FAIL |
Evidence older than its own staleBefore
|
FAIL |
| Missing required probe | FAIL |
Probe status ≠ pass (fail/skip/error) |
FAIL |
| Host OS family/version mismatch | FAIL |
| Host arch mismatch | FAIL |
| Host GPU API mismatch | FAIL |
| Host compiler ID or toolset mismatch | FAIL |
| Host missing required CPU features | FAIL |
| Host audio API mismatch | FAIL |
| Schema validation failure | FAIL |
| Duplicate JSON keys in any file | FAIL |
| NaN/Infinity in any numeric field | FAIL |
| Extra fields (additionalProperties) at any level | FAIL |
| Timestamps before 2020 or beyond 5-min clock skew | FAIL |
| Pass probe with zero duration (< 1ms) | FAIL |
| SHA-256 not 64 lowercase hex | FAIL |
| Artifact path absolute, traversal, or backslash | FAIL |
| Missing artifact sizeBytes | FAIL |
| Canonical profile (stable-v1) row missing/unexpected | FAIL |
| GPU vendor/device/driver/featureLevel mismatch | FAIL |
| Compiler version/toolset mismatch | FAIL |
| Missing dependency closure when required | FAIL |
| Collector identity blank or missing | FAIL |
| Resource limits exceeded (rows, deps, strings, etc.) | FAIL |
Rows with tier=experimental or tier=unsupported are skipped with a warning — they do not block certification.
# Full validation (matrix + evidence)
python tools/platform-cert/validate_certification.py
# Matrix-only schema check
python tools/platform-cert/validate_certification.py --matrix-only
# Custom paths and staleness
python tools/platform-cert/validate_certification.py \
--matrix docs/certification/support-matrix.json \
--evidence-dir docs/certification/evidence \
--max-age-hours 72Exit code 0 = all certifiable rows pass. Exit code 1 = at least one failure.
Evidence is not fabricated — it must come from actual test runs on matching hardware. The workflow:
- Build the engine at the exact commit declared in the matrix.
- Run each probe category on the target hardware.
- Record results in a JSON file following
evidence_schema.json. - Place the file in
docs/certification/evidence/named{rowId}.json. - Run the validator to confirm the evidence passes.
The certification infrastructure is in place. What remains is physical-host evidence collection — an operator must:
- Build, install, launch, and exercise SparkEngine on a Windows 11 x64 machine with an NVIDIA GPU (D3D11 row)
- Build, install, launch, and exercise SparkEngine in NullRHI headless mode (NullRHI row)
- Record the results as evidence JSON files
- Run the validator to confirm pass
This cannot be automated away — it requires real hardware running real builds.
python -m pytest Tests/Tools/test_platform_certification.py -v136 tests covering schema loading, strict JSON parsing (duplicate keys, NaN/Infinity), additionalProperties enforcement, timestamp bounds, compiler identity, zero-duration pass rejection, SHA-256/artifact path confinement, canonical profile coverage, complete host matching, dependency closure, collector identity, resource limits, cross-validation, and CLI modes.
- Created: 2026-08-28 for PLT-200
-
Commit:
360c05e883d4d5d1c0d050455a5cbb226cce3ffc - Status: Infrastructure complete; evidence collection pending
Published from 2b03dc797148. Edit the canonical source in wiki/.
- Documentation
- Docs route
- Wiki index
- Guides
- Tutorials
- Samples
- Examples
- API Reference
- API route
- Reference
- Build Guide
- Dependencies
- FAQ
- Changelog
- Roadmap
- Contributing
- Code of Conduct
- Home
- FAQ
- Getting Started
- Quick-Start Tutorial
- Making Your First Game
- Making Your First Multiplayer Game
- Artist Workflow Guide
- Editor Walkthrough
- Migration Guide
- How SparkEngine Works
- Architecture Overview
- Engine Architecture Flowchart
- Creating a Game Module
- Game Modules (catalog)
- Entity Component System
- Rendering and Graphics
- Physics
- Cloth Simulation
- Audio
- Input System
- Camera System
- Scripting with AngelScript
- Visual Scripting
- AI and Navigation
- Animation
- 2D Systems
- Networking
- Dedicated Server
- Multiplayer Quick Start
- Area Server Architecture
- Scene Management
- Large World Support
- Collaborative Editing
- Coroutine System
- Event System
- Event Response System
- Job System
- UI System
- UI Layout Extensions
- Localization
- Dialogue System
- Destruction System
- Replay System
- Achievement System
- Loading System
- Mod System
- Content Delivery
- Tween System
- Memory Integrity
- Gameplay Systems
- Terrain and Procedural Generation
- Save System
- Persistence System
- Day Night Cycle and Weather
- Cinematic Sequencer
- Runtime Prefabs
- SparkEditor
- Editor Tutorials
- SparkConsole
- SparkDaemon
- Shader Pipeline
- Asset Pipeline
- Asset Validation
- Asset Migration
- Game Packaging
- Online Services
- DataTable System
- Loot and Crafting System
- CSG System
- Font System
- Timer Manager
- Movie Render Pipeline
- HLOD and World Partition
- Remote Debug System
- Selection Manager
- Asset Dependency Graph
- Editor Automation
- File Watcher
- Project Templates
- System Requirements
- VR Support
- Mobile Platform
- Accessibility
- Platform Input
- Platform Certification
- Cross-Compilation: Wine Testing
- RHI Abstraction Layer
- D3D11 Backend
- D3D12 Backend
- Vulkan Backend
- OpenGL Backend
- Metal Backend
- DXR Raytracing
- Hybrid Ray Tracing
- Upscaling (DLSS/FSR)
- Render Graph
- Shader Graph
- GPU Particles
- GPU-Driven Rendering
- Volumetric Fog
- Volumetric Clouds
- Global Illumination
- Virtual Texturing
- Water Rendering
- Clustered Lighting
- Material System
- Post-Processing
- Shadow System
- Particle System
- Decal System
- Sky and Atmosphere
- Foliage System
- Mesh Shaders
- Neural Rendering
- Configuration Reference
- Performance Tips
- Benchmark Framework
- Threading Model
- Fuzz Policy and Parser Security
- Memory Safety
- Memory Management Patterns
- Build System and CMake Modules
- Profiler and Debugging
- Performance Profiling Guide
- Telemetry System
- Crash Reporting
- Golden Image Testing
- Utilities
- Testing
- Fuzz Policy and Parser Security
- Codebase Statistics
- Codebase Health
- Error Handling Patterns
- Hot Reload Overview
- Troubleshooting
- Contributing
- Workflow Patterns
- Build Optimizations
- CI Reproducible Builds
- GitHub API and PR Checks
- Git Rebase Conflicts
- Clang-Format
- Code Quality Violations
- AI Bloat Pattern
- MinGW + Wine Cross-Compilation
- Live Editor Testing
- Engine & Renderer Landscape
- DuetOS Portability Catalog
- Five-Engine Analysis
- Eleven-Engine Analysis
- ThorVG / Unity Graphics Analysis
- Advanced Techniques Catalog
- Third-Party Library Evaluation
- Engine Viability Evaluation
- Engine Feature Recommendations
- Project Recommendations
- Mac Compatibility Analysis
- Codebase Observations
- Codebase Bloat Audit
- Test Suite Audit
- Documentation Coverage Audit
- ThirdParty Dependencies Audit
- Load Test Baseline
- Gameplay Systems Status
- SparkGame Module Status
- Stub and Abandoned Features
- Memory Integrity System
- Memory Safety Evaluation
- Hardware Acceleration Systems
- Jolt Physics Integration
- GPU/CPU Separation Plan
- Daemon Services Architecture
- Reflection & Polymorphism Refactoring Plan
- SparkBuild In-Tree
- Wine No-JobSystem Breakthrough
- Wine Role and Fallback Tiers