ZEngine
September 17, 2026 · View on GitHub
Status: Active planning document, reconciled with the current source tree on 2026-09-17. Scope: production scene authoring and the engine contracts it depends on.
Current baseline
The following foundations are in source: ECS/Actor/WorldTick/WorldCommands; hierarchy and transform/light render synchronization; component reflection; VFS/asset registry and import coordinator; RenderGraph; RenderResourceManager; PSO cache; ZUI; crash handling; and the current scene YAML serializer.
They are not yet a production editor-authoring stack. The current serializer still uses runtime-oriented scene data; RenderScene is borrowed/rebuilt per rendered frame rather than an immutable full-scene snapshot; editor-wide selection/history/gizmo/picking services are incomplete; and the shipped grid is a finite world-XZ compatibility pass.
The former date-based sprint tables in this file were a historical estimate, not a completion record. They are retired because they named unimplemented APIs and made obsolete dependency promises.
Critical path
stable authored SceneDocument
-> EditorSession mutation/history boundary
-> universal entity/scene selection and stale-safe picking
-> native transform gizmo
-> serialized arbitrary-orientation analytic grid
-> cross-process, visual, validation, and long-session production gates
1. Persistent scene document
Owner: jnyfah for serializer work.
Deliver the source-of-truth scene schema defined in
scene serialization: UUID entity records, stable
component/field schema keys, codecs/migrations, UUID reference resolution, transactional
load, deterministic atomic save, explicit unknown-data policy, and
SceneGridSettings.
Exit gate: a fresh process and another machine can open a saved scene with the same identity, hierarchy, authored components, asset references, and shared grid settings. Runtime EntityIDs, actor handles, and render/GPU handles are rebuilt and never become file identity.
2. EditorSession and history
Create the exclusive main-thread editor mutation phase and bounded semantic history specified in editor undo/redo. It owns the current scene epoch, dirty/saved checkpoint, selection invalidation, transactions, and Edit/Play/scene-replacement cancellation.
Exit gate: inspector edits, entity/subtree changes, grid settings, and completed gizmo drags each commit one undoable semantic operation. Cancelled operations leave neither history nor a dirty change.
3. Generic selection and picking
Use ECS entity UUIDs/complete EntityIDs behind per-frame compact pick tokens, not actor handles or mesh-only IDs. Selection must include every supported scene object and SceneTarget::Grid, with delayed readback discarded when scene/viewport/camera/token revisions are stale.
Exit gate: delayed/out-of-date readback cannot change selection after reload, resize, camera change, Play/Stop, or a new interaction. Multi-selection and hierarchy-root normalization work for actor-backed and pure ECS entities.
4. Gizmo and grid
Implement the native gizmo as an EditorSession adapter, then replace the finite XZ grid with the scene-owned analytic U/V/N grid. Gizmo input uses ZUI capture and one transaction per drag. The renderer receives immutable editor-overlay data and declares resources through RenderGraph.
Exit gate: translate/rotate/scale works across relevant entities under hierarchy; grid supports translate/rotate only; arbitrary orientation and default world-XZ survive save/load; perspective/orthographic/depth/high-DPI visual gates are stable.
5. Production hardening
Before release, run all documented negative, recovery, cross-process, race/lifetime, validation-layer, reference-image, and long-session memory tests. Define supported hardware and GPU-budget telemetry for each target; the environment-lighting 384 MiB gate is a separate renderer policy, not a total-VRAM declaration.
No feature is complete merely because it has an API, a visual prototype, or a passing single-machine smoke test.
Parallel work that does not block authoring
The following can progress independently only after respecting their documents' boundaries: shader/import hardening, render-graph tests, PSO hardware validation, geometry residency, sky rendering, profiling, and post-processing. Do not start physics, audio, game scripting, networking, plugins, asset streaming, or platform services from retired design snippets; their documents now record the decisions required before implementation.
Ownership and generated configuration
project.json is generated by ZodiacEngineHub. It is an input to the application via
--projectConfigFile, not an engine-authored scene document. In particular,
rendering.environment_lighting_budget_mb is a project-level GPU policy: retain the
current generated value, and make schema/default changes in ZodiacEngineHub.
Completion evidence
Each milestone requires linked tests/references and a code-reviewable implementation. The final handoff records source locations, test commands/results, supported-platform coverage, measured CPU/GPU budgets, and any explicitly accepted limitations.