Repository navigation
Session Handoff 2026 09 27
Audience: Programmers (the next session, human or AI)
Thread Context: Mixed (process page; no runtime code)
Platform/Backend Scope: Work was built and tested on Linux GCC 13 only. Nothing from this run has been compiled with MSVC.
This run implemented release-readiness slices on branch claude/release-readiness-ultracode-agents-lofqcu (PR #587) with parallel agents in one shared checkout. It landed about 200 commits between 2026-09-24 and 2026-09-27. The branch is not behind Working and is fully pushed. No hosted CI has run on it; every result below is local.
The authoritative per-criterion state is the readiness ledger (docs/readiness/work-items/*.json). The generated summary is docs/readiness/ENGINE_READINESS_HANDOFF.md. This page is the narrative: what landed, how it was checked, what is left, and what went wrong in the process.
- You are the first session after this run, most likely on a Windows machine with MSVC.
- You need to know what "implemented" means right now, and what has never been run on Windows.
- You are about to run multi-agent work in one checkout again; read Process Lessons first.
| Measure | Value |
|---|---|
| Readiness criteria implemented / total | 46 / 259 (0 evidenced) |
| Work items | 0 done, 51 in progress, 5 blocked, 8 open |
Linux GCC Release build (linux-gcc-release, LTO off) |
Full build succeeds |
| CTest, full run before the last fixes | 247 / 257 passed |
| CTest after fixes | All 10 failing lanes pass on rerun (OpenGL lanes need xvfb-run); the full 257-test suite was not rerun afterwards |
| Windows MSVC build | Never built from this run |
"Implemented" means production code plus a registered test at HEAD. "Evidenced" needs an exact-commit hosted CI run (ci:<workflow>/<run>@<sha>), and there are none. The ledger reconciliation (10a0a8b) checked all 64 items against HEAD.
The commit subject names the work item; list a slice with git log --oneline origin/Working..HEAD --grep <ID>. Highlights:
-
Runtime and platform:
-
RDY-015: Linux
-require-gameand a post-teardownSPARK_MODULE_LIFECYCLErecord. Withbde4105, the script engine is created before modules load on every host, so all tenExperimentalModuleLifecycle_*lanes pass locally. - PLT-210: module content is staged next to the engine executable, and windowed startup refuses to continue when the render device fails.
-
EDT-210:
-sceneruns on the Linux host; the editor executable smoke test runs under Xvfb. -
HEAD-220: bounded
-execscripts, and an opt-in 10-minute FPS NullRHI soak (SPARK_ENABLE_SOAK_TESTS). -
LIFE-200 / OD-01: the Windows hosts no longer call the deleted
RegisterCoreSubsystems. That was a Windows-only build break found by reading, not by compiling.
-
RDY-015: Linux
-
Persistence:
- DATA-120: TFDatabase backup/restore and a crash-recovery drill.
-
SAVE-230: an
AtomicWrite_interruption rehearsal, reflected-scene validation diagnostics and on-disk fixtures. - MOD-340: Platformer progress survives a relaunch.
- MOD-380: race results survive a SaveSystem restart.
-
Rendering:
- RHI-230: the shipped GLSL shaders are compiled to SPIR-V, with Vulkan goldens on Lavapipe.
- RHI-240: OpenGL goldens on llvmpipe, and the device row is classified independently of GLDevice.
- ENG-220: glTF skeletons and clips are imported into AnimationManager, the asset reference-closure validator is added, and the Linux DirectXMath stub gets a true slerp.
-
Networking and security:
- NET-100: protocol-version negotiation.
- MOD-315: FPS multiplayer runs on NetworkManager handlers, with a three-process LAN convergence harness and hostile-input rejection.
- SEC-100: security-runtime and network-integration CI lanes.
- SEC-110: the supply-chain checker accepts only symlinks tracked by the pinned submodule commit.
-
Scripting:
- ENG-200: real physics and event script bindings, plus engine-owned collision and trigger dispatch to scripts.
-
MOD-390: engine-owned
.vscriptgraph I/O, and the shipped scripts run headless to the win objective.
-
Game modules:
- MOD-300: exact quickload state.
- MOD-320: exact-case area scenes; unauthored dungeons fail closed.
- MOD-330: the ARPG hero, monsters and props live in the ECS World.
- MOD-350: RPG NPCs route through NavMesh.
- MOD-360: a fail-closed asset-reference check for OpenWorld.
- MOD-370: unattached RTS behavior trees removed.
- MOD-380: Racing drives on Jolt vehicles, with barrier and checkpoint bodies.
-
Assets: Blender kits for the discovered game modules (
Art/Blender/<Module>/, exported toAssets/Models/<Short>/Kit/) with provenance. Procedurally composed WAV music ships for Platformer, Racing, RPG and RTS (tools/audio/compose_module_music.py). -
CI and tooling:
- CI-110: a per-check clang-tidy diagnostic budget ratchet.
-
CI-120: documented build commands are checked against the presets, and a strict dependency closure is derived from
dependencies.lock. - REL-100: stable tag and changelog helpers.
- BLD-100: a two-tree reproducibility comparator.
-
Fuzzing: fuzzing moved to
FuzzerTests/with a minimized generated corpus. - Builds: faster local builds (LTO off, ccache, mold, a SparkTests precompiled header).
These were committed because the owner asked for everything to be committed. They need attention first:
| Commit | Item | Gap |
|---|---|---|
b2d2953 |
DATA-120 | The operation-id idempotency ledger has no caller: unlock purchases persist through a debounced sweep with no per-request id. It has since been removed and TFDatabase is back to schema v2; a v3 file with an empty ledger still loads (see docs/specs/persistence.md). |
14d56eb |
REL-190 | The profile-required-gates job in release.yml was mid-edit when the session restarted. Review it before trusting it. |
445f240, 11058e2, 3ff83ad, 3d1adfc
|
ENG-220, SDK-240, SAVE-230, MOD-390 | Started by readiness runs and interrupted (usage limit or restart) before an adversarial review. They build and their tests pass on Linux. |
a4b152e |
SEC-120 |
VisualScriptGraphIO (a .vscript JSON parser) is covered by the ENG-200 Engine/Scripting subtree exemption. Decide whether it should get its own SEC-120 parser entry. |
The full CTest run before the final fixes passed 247 of 257. The ten failures and their outcome:
| Lane | Cause | Outcome |
|---|---|---|
| FuzzPolicy, FuzzPolicyAdversarial | New parser files not classified | Fixed, a4b152e
|
| SparkNetworkBoundaryStatic |
FuzzerTests/ not treated as non-shipped after the move |
Fixed, 9ebd5de
|
| ModuleManifest_Contract | Stale FPSScene_ count pin |
Fixed, 7c59c28
|
| ExperimentalModuleLifecycle_SparkGameVisualScript | Script engine created after modules load | Fixed, bde4105
|
| readiness-cross-references, runtime-bundle-validation | Ledger listed now-existing CI jobs and selectors as planned | Fixed, 10a0a8b
|
| site-data-contract | Took ~13 min against a 300 s timeout: every in-process validation re-lexed module sources, re-resolved 1200+ manifest entries per asset root and re-ran shlex over every documented command | Fixed, 6193f62 (memoized scans; now 180 s) |
docs/update-all-docs.sh (symbol indexes) |
The symbol TSV reader used csv quoting, so a brief starting with " lost its quotes and failed the source-projection check |
Fixed in the final docs commit (tools/docs_contract.py reads with QUOTE_NONE; regression test in test_docs_health.py) |
| SparkOpenGLTests, SparkOpenGLGoldenTests | No DISPLAY in the CTest environment |
Environment only; both pass under xvfb-run -a
|
-
Windows MSVC build and tests. Configure
windows-release(andwindows-debug), build everything and run CTest. Expect Windows-only breaks: OD-01 was one, and thebde4105Windows host changes were never compiled. -
Hosted CI on PR #587 at one commit. Fix what fails, then promote criteria to
evidencedwithci:references. Hosted CI is the only way to get evidence. -
Remaining code work: the remaining unmet criteria are listed by need in the reconciliation commit (
10a0a8b) and the handoff. The largest code items:- NET-100: the SecureChannel is not wired into NetworkManager, and the plaintext login field is still sent.
- NET-110.
- SEC-110/120.
- TF-110/120.
- LIFE-200: the Linux headless lifecycle loop.
- EDT-210: asset drag-and-drop and the cook scenario.
- SAVE-230: prefab and editor-state work.
- INST-130/131/132.
- MOD-320: timestamp-based character IDs.
-
Slices that were queued but never ran (both relaunched readiness runs were lost to a restart):
-
Scripting: MOD-390 real
playSound/playAnimationbindings; ENG-200 package-root resolution and the hot-reload state rule. -
TF-110: forged loadout rejection,
net_*impairment wiring, and the multi-client harness. - Modules: the MOD-360 player controller, the MOD-300 localization and positioning labels, the MOD-340/360 README boundaries, and three MOD-320 persistence slices.
- SDK-240: the installed-SDK template, and the FPS private-include ratchet (shared with MOD-310).
- RDY: RDY-010 mirror-test retirement, and RDY-015 removal of the mirror smoke files.
-
SAVE-230: SceneMigration fixtures (partly in
3ff83ad). -
REL-190: gating (partly in
14d56eb). - INST-130: rollback rebuild, staged install and preflight.
- EDT-210: asset drag and the cook scenario.
-
Platform and CI:
- PLT-200 MSVC toolset derivation;
- GOV-400 wording selectors;
- PLT-220 macOS target and preset;
- OPS-100 selectors and the OPS-110 runbook;
- PLT-230/240/250;
- the CI-110 Linux golden baseline.
- Others: the LIFE-200 boot loop, the ASSET-220 installed package smoke, the SEC-100 hostile-frame regressions, the HEAD-220 save/reload test, and the ENG-220 animation-versus-reference check.
-
Scripting: MOD-390 real
- Release rehearsal (REL-190/191/192/193, REL-200) needs owner sign-off, protected publication and independent download verification.
-
Out of scope by owner decision: consoles (PLT-250, OD-12). Steam Deck is tracked separately as DECK-100 in
docs/plans/steam-deck-target.md.
-
Never export
GIT_DIRorGIT_WORK_TREEfor a command that may rungit init. A validator run with both set against a scratch export madetest_validate_ctest_policy.py's nestedgit initre-initialise the main repository. It setcore.worktreeto the export, so for about two hours everygit statusread the export. Agents then wrongly decided that four implemented slices were "already in HEAD". Fixed in2f75a82; the test now stripsGIT_*. -
git configandgit submodule init/updateinside a linkedgit worktreewrite the shared.git/config. Usegit clone --shared --no-checkout <repo> <dir>for an isolated checkout that has its own config. -
A clean
git statusis not proof that something is committed. Check withgit grep HEAD/git log -S. Rungit update-index --really-refreshbefore trusting status after heavy agent churn; one agent found a stale stat cache hiding modified files. - Workflow resume does not help parallel batches. The resume cache matches an unchanged prefix of agent calls, and parallel calls start in a different order each run. Relaunch only the unfinished batches instead.
-
Validators that the contract suite runs in-process must stay fast.
site-data-contractsilently grew past its 300 s timeout as the asset manifest and module sources grew;6193f62memoizes the scans. Watch its runtime when adding validation. -
Never delete from shared scratch with globs. One integrator's
*.jsoncleanup deleted other agents' files. - Container restarts kill every background agent. Commit and push small units often, so a restart loses in-flight work only.
-
Private builds in fresh worktrees miss ccache when
base_diris the main checkout, so each agent paid for a near-full build. On a fast machine prefer one shared build tree behindtools/build-lock.sh.
-
A link to a heading that contains backticks fails
validate_docs_links.heading_idsblanks code spans before slugging, so it never matches GitHub's anchor. Keep linked headings free of code spans (seeb16b711), or fixheading_idsto keep code-span text like GitHub does. Afterb16b711,docs/update-all-docs.sh checkpasses, so the DOC-410 note that the link validator fails at HEAD is out of date. -
The OpenGL lanes fail locally. CTest does not inherit a display; run
xvfb-run -a ctest -R OpenGL. -
The
Saves/test_*.dbfiles appear after a SparkTests run from the repo root. They are ignored now. The TF120 tests should move to a temporary directory. -
Stray
crash-*files in the repo root are libFuzzer reproducers and are ignored now. Minimize them intoFuzzerTests/corpora/if they are new.
- Workflow Patterns: fast rebuilds, the build lock, disk budget.
- CI Reproducible Builds
- Release Publication Stages
- Readiness handoff (generated)
Written 2026-09-27 at the end of the run, from git log origin/Working..HEAD, the reconciled ledger (10a0a8b), the full CTest log and the agents' integration reports. Replace or archive this page once the Windows build and a hosted CI run have happened.
Published from 614bca17b41e. 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
- CI Controlled-Failure Rehearsal
- Release Publication Stages
- Session Handoff 2026-09-27
- 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
- Online Service Boundary
- Server Operations Runbook
- Reflection & Polymorphism Refactoring Plan
- SparkBuild In-Tree
- Wine No-JobSystem Breakthrough
- Wine Role and Fallback Tiers