Skip to content

Release 4.0.0 - #22

Draft
cppcooper wants to merge 60 commits into
mainfrom
develop
Draft

cppcooper wants to merge 60 commits into
mainfrom
develop

Conversation

@cppcooper

Copy link
Copy Markdown
Owner

Changes have been stacking up. The engine seems to work, but the release is waiting on the first complete project port in cppcooper/college-ports
Documentation is mostly the blocking problem. If the documentation isn't sufficient as written for completing the port, then modifications to the documentation need to take place before merging develop into main.

There may also be CI issues to work through related to the cache system.

cppcooper and others added 30 commits October 14, 2026 19:24
Retires the superseded V3 source snapshot while preserving it in main ancestry. Restores the pre-development tree from 617533a so the 58 modern development commits can be replayed with their original changes and snapshots, without retaining obsolete V3-only files.
Note: [important] this commit is copied from another repo with a different state, not all of these commits are important.

Squashed commit of the following:

commit 3b1297b7de5409d2ac899b781b02126fa14b1743
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Thu Jun 27 09:02:59 2024 -0700

    Adds include to scene_nodes.h in v1

commit 76179ab865f78838e6d4a7416c9d17ad820f75a5
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Jun 18 11:18:04 2024 -0700

    Implements some code for testing object pooling (incomplete test)

commit e6e6183cbfef6ff499512b8a6e665367cd3b99bb
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Jun 18 11:17:01 2024 -0700

    Fixes a bug caused by Mem::Manager<>::erase_all()

    also fixed a calculation error for the stats method

commit 1eb4d17d7a83888bccb02d48ebf51d92405150e1
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Jun 18 10:44:55 2024 -0700

    Fixes mismatched delete function

commit dd5bb6b29ad6352cf28a5f26cf296eef6f8a4f9c
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Jun 18 10:44:20 2024 -0700

    Adds UBSan to debug builds

commit 8f8a3064022cc58e2a47d5d7453e039d1872b328
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon Jun 17 16:48:49 2024 -0700

    Updates TEST(resources, objpool)

commit b8c949da1a8a797346a5a197ac0fede58ce9e121
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon Jun 17 16:48:16 2024 -0700

    Fixes errors

commit b6a297144701a60f451144c7df2c3ab054d6df82
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon Jun 17 16:28:45 2024 -0700

    Renames gtest suite, and adds to it

commit 3fa9879e16f492b36d4658bd0c131efd61134fc1
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon Jun 17 16:27:12 2024 -0700

    Removes deprecated includes

commit 0b0a12833b4942e9f38b4c34f4ec8c827dfebd98
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon Jun 17 16:26:33 2024 -0700

    Fixes type error

commit 6b3219187a69b0747a10ad9ae60fafd57219b88e
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon Jun 17 16:01:45 2024 -0700

    Refactors managers directory

commit 58904fc1b3538e7901772024bde1329990f45541
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon Jun 17 15:42:19 2024 -0700

    Refactors namespace Objects => Obj, also renames object-* files

commit 32ab1871f524220ff0efac143bbaa158c6b255f1
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon Jun 17 11:10:25 2024 -0700

    Implements the Pool<>::release method

commit ee7520654a26cb5349753651f79cc3b4153ff254
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon Jun 17 11:09:41 2024 -0700

    Adds Mem::BlockRange::get_length()

commit 148cf77c585bc4b2a9f7ec43864bf9e1e6b0bf57
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon Jun 17 11:08:05 2024 -0700

    Adds a stack trace to critical logs

commit 621cd6c740e004a43b995fed9fd857163f907cc2
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Fri Jun 14 09:57:45 2024 -0700

    Refactors in_use map to be ordered and keyed by Mem::BlockRange

commit b16934557953d0fb7680611bebc129635bd555a2
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Fri Jun 14 09:56:47 2024 -0700

    Fixes memory alignment calculations

commit 7ca8330cba4a17fe7be2a076ab3054b304b99455
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Fri Jun 14 09:54:26 2024 -0700

    Simplifies how BlockRanges are compared

commit 6b42c8f00abf1c3a2dd7c66bc9682a2cd600bd4c
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Jun 11 23:40:23 2024 -0700

    Refactors CE::Objects::ObjectBlock => CE::Objects::Block

commit d53c8b7c3754d63f91513728eacede01f622e2a2
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Jun 11 23:36:50 2024 -0700

    Adds Mem::BlockRange struct and comparison operator

commit eb2c2a91aa2e97a1d716a1c6149ee183c9fe5a8d
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Jun 11 23:36:11 2024 -0700

    Updates main.cpp

commit 075f15df45af9fedaa8df6dbd39d2b513bef47e8
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Jun 11 23:35:55 2024 -0700

    Implements Factory

commit d869aea47be236752e365a8e7438d95d925130ef
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Jun 11 23:35:03 2024 -0700

    Deletes unused pool code ported from v2

commit 09d8106e1c15536dcd2bca4928766609e3877a9e
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Jun 11 09:54:57 2024 -0700

    Adds static asserts for the template params

commit b062cba298464161339fecf8588f67de12cfeea8
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Jun 4 10:15:38 2024 -0700

    Deletes unused header

commit 2f147da7eebf01e0c00b35cf7fac63872f70966c
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Jun 4 10:10:54 2024 -0700

    Minor changes

commit 1cfa5a18b9b88ceb7fb469bc87ca1e127027601f
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Jun 4 10:10:37 2024 -0700

    Removes unused code

commit 40606d13ef3ac38430b80d8315ba3a0ed4743c7e
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Jun 4 10:04:30 2024 -0700

    Minor revisions to memory manager

commit 8f584809774ac740c6eb3a433d36bf74b582d241
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Jun 4 10:04:18 2024 -0700

    Implements object pooling

commit 1649346210ad613efca33f87726db80869a9a958
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sat Jun 1 11:19:14 2024 -0700

    Implementing object pooling

commit 0e4ef09a0c227706b7e98d59a6f3fc443b3e2124
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sat Jun 1 11:18:44 2024 -0700

    Refactors return method

commit d7b97b72e794ef5655653908c127882a54a470b3
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sat Jun 1 01:40:24 2024 -0700

    Updates

commit 284fb36940ed06f634601991e386b63c1a996ba7
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Wed May 29 16:06:56 2024 -0700

    Fixes?? memory manager and tests..?

commit eaf0a2e76c8dc3a22d14006c7be7169452265b0b
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Wed May 29 11:50:47 2024 -0700

    Improving tests, updating memmgr implementations (checkout,split)

commit 033673e5c848ce41e528968bdbc5dba64b84ac3c
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue May 28 17:14:09 2024 -0700

    Updates Memory Manager

commit b8ff0c741087140ecfaabd8e03413b25fd8df2be
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon May 27 23:44:54 2024 -0700

    Updates test

commit 91bd7ed759fd71bae47680c653ab31fe82eb24ed
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon May 27 23:08:58 2024 -0700

    Implements Memory Manager test

commit f8d55874242342481bd90e419e5b49e9600744d4
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon May 27 23:03:48 2024 -0700

    Silly little scope change

commit e374b6a2064b5db07804863dd91d978315c716c2
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon May 27 23:00:05 2024 -0700

    Re-awakening the spdlog test

commit ecc83ea8012069eedd90e3a02ab8a26e56077ba6
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon May 27 22:59:31 2024 -0700

    Establish pattern for log lines

commit c565db909a60f041a5759fb2f895946e955841e7
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon May 27 18:21:51 2024 -0700

    Implements mem mgr?

commit dba94be1e84895e107b88ff06108454fdd475edc
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon May 27 18:21:13 2024 -0700

    Updates mem-mgr documentation, member order, etc.

commit 3cae9a4c305845d7921335344585f24d70c38f8b
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon May 27 18:19:43 2024 -0700

    Integrates stack tracing at the Log level for debugging

commit 71791baad1c26ff5104ec657512202269f41eec0
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue May 14 19:16:29 2024 -0700

    implementing mem mgr
 On branch develop
 Changes to be committed:
	new file:   include/cheryl/resources/memory/allocators/object-pool-allocator.hpp
	new file:   include/cheryl/resources/objects/factory.hpp
	new file:   include/cheryl/resources/objects/object-construction.hpp
	new file:   include/cheryl/resources/objects/pool.h
	new file:   include/cheryl/resources/objects/pool.hpp

Note: [important] this commit message below is copied from another repo with a different state, not all of these commits are important.

Merges branch refactor-objpool into main

Squashed commit of the following:

commit 66a983a094896919a8a6713e8d8a3f6d240ba43f
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Sep 17 12:07:14 2024 -0700

    Fixes build issues

commit 163c31ea738aa3dc075b343fdece118c82ba532d
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Sep 17 12:00:07 2024 -0700

    Completes Pool<T> & Factory<T> implementations?

commit 708920c3c05283646d5c10f29ba0a2e9482a5f12
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon Sep 16 22:51:23 2024 -0700

    Begins Pool<T> implementation

commit 48d161ee9081afab79386e6b9cbfe3fca5207d3a
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sun Sep 15 10:03:46 2024 -0700

    Updates object construction/etc.

commit 39e8003452936dc91580709cbfef29b68ae16613
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sat Sep 14 11:33:13 2024 -0700

    Begins implementing Pool<T>

commit dc31dfa0147b72cad434c58de9943ad511fd4e12
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sat Sep 14 11:31:58 2024 -0700

    Revises Factory<T>

commit c1252d2408a8ac7f4edaae4a7a58ae0438e65352
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sat Sep 14 11:31:19 2024 -0700

    Revises block.h (minor)

commit f3d47334d79d9b93a50540b2a2d7f53e5963d715
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sat Sep 14 11:30:54 2024 -0700

    Revises allocators (simplified)

commit 3cbf6a12846544dc9610a0c8f3245945e9be6fa1
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Sep 10 10:26:09 2024 -0700

    Updates unit test for backwardcpp

commit 9d4ea717fc4e70ed474f94336e99740606c656f0
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Sep 10 10:18:52 2024 -0700

    Implements Mem::Manager::return_portion

commit 0a0a4c36e935680ec60e07b6ef9104d3c656ce7a
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Sep 10 08:53:10 2024 -0700

    Completes implementation of templates/block.h testing

commit 3d8cba7d9fc0b8570ab535adcc0ab2fdded26072
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Sep 10 08:52:02 2024 -0700

    Fixes compare::RegistryOrder in block.h

commit 6270cad9d4d775e9b7c630f97ecd31819c1c28d6
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Sep 10 08:44:39 2024 -0700

    Fixes a check for testing/block.h

commit a7284f00fb36a329816069f6fbdcaaf9388087b8
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Fri Sep 6 11:53:44 2024 -0700

    Fixes alignment error on windows

commit ad271572f68708c6b3f8a4b5c13733217ccb6106
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Fri Sep 6 11:53:10 2024 -0700

    Ensures sanitizers aren't used for MSVC builds

commit 8b7ee238e1e1e1d19a2ae0b4aa319dd653cd4391
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Fri Sep 6 11:18:39 2024 -0700

    Begins reimplementation of Obj::Pool<T>

commit eb06145cbf87711e793bdfed80c5298379c68100
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Fri Sep 6 10:57:58 2024 -0700

    Completes Mem::Manager testing

commit f816eab71ce0e059b6cfe8f26bc1d7628551e32e
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Fri Sep 6 00:13:53 2024 -0700

    Implements tests for BlockManagement validity checkers

commit 9f4950d50df8c8de8abf41e6589dbb97934c74d3
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Fri Sep 6 00:12:50 2024 -0700

    Adds tests/include/

commit ff392859d463898382f5c883a037e8219be8b18b
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Fri Sep 6 00:12:19 2024 -0700

    Removes testing code from main includes

commit a783c23796eefcc4253710c663bfa10141201341
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Thu Sep 5 06:45:25 2024 -0700

    Fixes tests/code being tested

commit 10a3a769b02220fe7d60edcc0ff8268cb70dfa2e
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Wed Sep 4 19:52:17 2024 -0700

    Fixes windows build

commit 1cd6c6e0f73deadc02fa6319fa518e83153c617b
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Wed Sep 4 10:06:49 2024 -0700

    Moves static definitions to header

commit e9c4c86eb91e308ee62290c99d7936567cdcc89a
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Sep 3 21:07:07 2024 -0700

    Fixes windows build stuff

commit 91ee3521a299dc0dd57bc36bef2ce5946bee3e27
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Sep 3 10:04:53 2024 -0700

    Refactors Mem::Manager for last time?

commit 728685e7199dc74e3b76cbe29364a449455988e8
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Sep 3 10:04:23 2024 -0700

    Updates pure headers' includes

commit 50ad0e57d05a1ec12bdbc6a27d6a38f3008dd8e8
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Sep 3 10:03:35 2024 -0700

    Reorganizes tests directory

commit cb7a94a31daa69de1200251d356a3313cfd58c86
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon Sep 2 01:08:47 2024 -0700

    Includes reorganization of tests, linkage fixes, etc.

commit 0888a18f678909bf046712949a5f35daac2f8cb5
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sun Sep 1 19:30:48 2024 -0700

    Fixes include

commit 840b5a3ab0ae202fe8c9e395686f5e31d66c40ba
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sun Sep 1 19:30:33 2024 -0700

    A few more things that will be useful for object pools

commit 0e63ee7dad241995475382069dbb7710157d388c
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sun Sep 1 19:27:45 2024 -0700

    Renames obj-pool files to pool

commit c72f467e02b5e930c67ce5e831ef3ed0d398c9dc
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sun Sep 1 13:56:35 2024 -0700

    Complete? Test integration remains.

commit f1aef1bafdeed9f2ba5162cb10fea7e8839763b5
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Fri Aug 30 11:52:02 2024 -0700

    WIP: refactoring memory manager

commit 2dba1dd9385a40cd15b91e6ca05154e5a91bfac5
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Fri Aug 30 11:51:32 2024 -0700

    Removes many defunct functions

commit 0aa4b487d0a8e2e547509f2a6490937dc3d3875d
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Fri Aug 30 11:49:37 2024 -0700

    Adds new Block<T> methods & ptr math

commit f9a5b4d59450e5988ab260a91ff12148ec1066ef
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Fri Aug 30 09:43:04 2024 -0700

    WIP: refactoring memory manager for new Block<T>

commit 328e7453d07c26f9d414dc0860efa3d17959e598
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Wed Aug 28 12:26:45 2024 -0700

    WIP: refactoring memory manager for new Block<T>

commit 61fdd01c959a1d309d8bdd4b9a1679b6060e9daa
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Wed Aug 28 12:25:55 2024 -0700

    Refactors Blocks into template code

commit 75c1ce8ae36bbbcc9e44c4114d91229cf858cd8d
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon Aug 26 17:12:42 2024 -0700

    Refactors Mem::Manager

commit 8ac8778f210253f8395c43cae3692442a3c7c7ef
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon Aug 26 17:12:15 2024 -0700

    Adds more comparators for Block types

commit 4723589b5cb9a8d8e7bfd790fe0ab32ae235d27e
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sun Aug 25 20:52:03 2024 -0700

    Revises allocator_traits + comments

commit 2dc5653095f51543aa052e96dc47ba22ab67dd9f
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sun Aug 25 16:50:17 2024 -0700

    Updates various includes

commit ccdf1b4e0fc992cffe6e3de1eba9da4322626c93
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sun Aug 25 16:21:58 2024 -0700

    Refactors Factory<T>

commit ea3e0a5e2ad2377d640fd4fdfd032eb64605fa21
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sun Aug 25 16:21:37 2024 -0700

    Adds DefaultAllocator

commit be89af3341c39c6f0f0c74afb3facbad28104aea
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sun Aug 25 16:21:14 2024 -0700

    Revises pointer math utilities

commit b6239bc902f088eb1af669ae979f7376cfaeff85
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sun Aug 25 16:20:25 2024 -0700

    Refactors Mem::Manager & adds BlockPool

commit edf00f11d64969feaaae93a12c0b83b517e46387
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sun Aug 25 16:16:50 2024 -0700

    Moves resources files

commit d83da1ff28f4e5981f35bee037ce773f81cab82b
Merge: 350ffeb 9086ac3
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Fri Aug 23 10:27:42 2024 -0700

    Merge branch 'fix-submodule-heads' into refactor-objpool

commit 350ffeb8ede21c1ac5046f11efdd9453c5f293ea
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Fri Aug 23 10:16:24 2024 -0700

    Refactors Mem::Block, Mem::Manager

commit 13d7d040fd3535daede7e9c2c710958ea44837ff
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Fri Aug 23 10:15:17 2024 -0700

    Adds utility functions to support details::fitType

commit 92bc5b6eee1f625041edd51c7e3c1cc92cb8aec1
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Fri Aug 23 10:14:08 2024 -0700

    Implements helper functions for pointers

commit 9086ac3f10ad26d3aaa200e4b08328f2204e8ead
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Wed Aug 21 15:03:52 2024 -0700

    Changes HEADs for submodules

commit c15144043b3bedf570870bcc91e400a2b7685efc
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Wed Aug 21 12:51:24 2024 -0700

    Adds shader-mgr.h and .cpp

commit d6787a02fe2fc98fee947482ec1fb1f0c6e262b8
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Wed Aug 21 12:50:52 2024 -0700

    Adds utility headers for pointers

commit 9381064d08fe9fedcaaca1b2f1224fc5718fc73f
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon Aug 19 02:35:57 2024 -0700

    Refactors Factory::create to static

commit e5eecfe48ee037fd81763479264d4bf427f4f766
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon Aug 19 02:32:47 2024 -0700

    Adds comments to Obj::Block's operator<

commit 96624004aca0d5ceeabf80bf86b1fb0d7822e0a1
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon Aug 19 02:31:47 2024 -0700

    Refactors to Obj::Factory::create<N> - adds custom deleter - calls ~T()

commit 42d8cca6bede4b142514f746de8df4fcd7a6718c
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon Aug 19 02:30:03 2024 -0700

    Refactors to Obj::Pool<T> - adds custom deleter

commit 085071448a09d4cebc8ec9889c2bb4dc0f7df865
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Mon Aug 19 02:28:01 2024 -0700

    Refactors Mem::Manager<> size_t growth_base_ -> int32_t

commit 66555fc5207de33062f8a2f6b5ecda2429213787
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sun Aug 18 17:26:56 2024 -0700

    Adds iAssetMgr interface for AssetMgr

commit 70fc139d39674c61e9643d03c538ddb8c8b7b30b
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sun Aug 18 17:26:19 2024 -0700

    Renames TypeMgr => AssetMgr

commit 55af9687e374d8547668aa64cc1876e9c380cdb7
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Fri Aug 16 21:19:53 2024 -0700

    Adds templates/asset-mgr.h

commit d709019e5992d5468407a0f3d452ac5ab6620ea6
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Fri Aug 16 20:20:12 2024 -0700

    Updates gfx/assets & primitives - Adds trivial virtual destructors
cppcooper and others added 29 commits October 14, 2026 19:24
Squashed commit of the following:

commit b0f4176
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sat Nov 9 02:12:19 2024 -0400

    Reverts split used in checkout_chunk (test passed)

commit 2d3e057
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sat Nov 9 02:11:45 2024 -0400

    Shortens test duration of memory manager

commit 4d421ef
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sat Nov 9 02:03:08 2024 -0400

    Disables debug logging for memory management

commit e09bb6f
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Sat Nov 9 01:51:46 2024 -0400

    Adds/modifies logging and memory management implementation details

commit d29c8da
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Wed Oct 9 18:25:30 2024 -0700

    Adds debug logging to memory mgr

commit ca4fdbd
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Oct 8 17:15:15 2024 -0700

    Adds simple check to ensure no blocks are given twice

commit 739ad1b
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Tue Oct 8 12:45:38 2024 -0700

    Merges branch feat-ctlog-internal into fix-mem-mgr

    Squashed commit of the following:

    commit c1f8ca8355989e7417625290ab9a991ea1add16a
    Author: Josh Cooper <cooper.s.josh@outlook.com>
    Date:   Tue Oct 8 12:40:51 2024 -0700

        Adds pointer hash function to math/pointers.h

    commit f1f71f671bb068310b537bb823e1a061f5d31665
    Author: Josh Cooper <cooper.s.josh@outlook.com>
    Date:   Tue Oct 8 12:40:17 2024 -0700

        Updates two headers

    commit 2b93db4abb4d5eda4c7862c56d3cbbce0719b41f
    Author: Josh Cooper <cooper.s.josh@outlook.com>
    Date:   Tue Oct 8 12:39:46 2024 -0700

        Adds new logs to internal-logs

    commit 3d77118a45815fcac17a6311df619489cb845242
    Author: Josh Cooper <cooper.s.josh@outlook.com>
    Date:   Tue Oct 8 12:39:26 2024 -0700

        Adds internals and math

    commit 9cc5e998a69dc7c4bf46f9b7424dde3b386cb128
    Author: Josh Cooper <cooper.s.josh@outlook.com>
    Date:   Tue Oct 8 12:39:09 2024 -0700

        Renames celog.cpp -> internal-logs.cpp

     Changes to be committed:
    	new file:   include/cheryl/math/bytes.h
    	modified:   include/cheryl/math/pointers.h
    	new file:   include/cheryl/math/string-numbers.h
    	modified:   include/internals.h
    	modified:   include/internals/celog.h
    	new file:   include/internals/compile-time-logging.hpp
    	new file:   include/internals/internal-logs.h
    	deleted:    src/internal/celog.cpp
    	new file:   src/internal/internal-logs.cpp

commit d26bcf0
Author: Josh Cooper <cooper.s.josh@outlook.com>
Date:   Thu Sep 26 16:15:25 2024 -0700

    Fixes calculations, logic, and alignment of splits.

 Changes to be committed:
	new file:   include/cheryl/math/bytes.h
	modified:   include/cheryl/math/pointers.h
	new file:   include/cheryl/math/string-numbers.h
	modified:   include/cheryl/resources/memory/mem-mgr.h
	modified:   include/cheryl/resources/memory/mem-mgr.hpp
	modified:   include/cheryl/templates/block.h
	modified:   include/internals.h
	modified:   include/internals/celog.h
	new file:   include/internals/compile-time-logging.hpp
	new file:   include/internals/internal-logs.h
	deleted:    src/internal/celog.cpp
	new file:   src/internal/internal-logs.cpp
	modified:   tests/executables/gtest/resources/memory.cpp
	modified:   tests/include/testing/block.h
* Adds shaders

* Fixes delta calculation

* Writes todo comment

* Adds templates/observed-variables.h

* Minor edits

* Adds unit test for observed-variables.h

* Fixes implementation of observed-variables.h

* Removes pre/post-update methods from the engine abstractions

* Removes various fluff

* Revises layout of ovar

* Adds ovars to glengine

* Refactors file-directory structures

* Refactors tests' includes

* Adds simple event system

* Adds documentation for event system

* Adds events to link projection matrix calculation to its dependencies

* Fixes problems in glslprogram

* Refactors GLSLProgram methods

* Introduces comments about the refactor goals/decisions

* Adds new headers

* Implements OpenGLRenderer

* Simplifies GLSLProgram

* Adds new OpenGLRenderer implementation

* Fixes build errors

* Implements demo.cpp to test glEngine et al.

several adjustments to the graphics systems were made
- preventing crashes
- ensuring compilation
- ensuring a window would render
- preventing freezing on the swap buffer call

* Incorporates monitor scaling into window sizing

This fix is waiting on glfw to fully implement glfwGetMonitorContentScale

* Adds assets/ to .gitignore

* Removes include guards from some headers to keep headers consistent

* Updates .gitignore

* Refactors Anchor math into CE::math namespace

* Replaces std::round with std::lround calls in opengl-renderer.cpp

* Moves shaders to assets/

* Commits files that are a WIP

* Removes non-existent header from demo.cpp

* Adds version to json manifest schema

* Define and apply asset manifest schema

* Model complete asset manifest semantics

- Expand the 1.0 schema with namespaces, nested grids, pivots, views, orientations, reusable profiles, timed animation clips, and Wang/bitmask autotiles.
- Migrate all seven manifests while preserving every prior atlas entry and physical asset region.
- Apply the verified MiniWorld Swordsman animation profile and actor/projectile pivot behavior.
- Import exact Puny World animation timings and both authored Wang sets from the matching Tiled source.
- Document the loader contract, numeric pivot math, implementation order, and remaining non-blocking artwork metadata.

* Move asset documentation to docs

- Relocate the asset-manifest format guide and remaining metadata TODO out of the runtime asset directory.
- Update the documented schema path for the new top-level documentation location.

* Implement typed asset manifest loading

- Parse and semantically validate manifest 1.0 into GL-independent typed definitions
- Orchestrate texture loading before namespaced sprite and tileset construction
- Preserve numeric pivots, views, orientations, facings, timed animations, and autotile lookup data
- Build shared row-major grid geometry and extend runtime asset accessors and frame handling
- Validate every checked-in manifest with focused headless regression coverage
- Document the runtime flow and remaining animation and tile-map integration work
- Fix shader dispatch, bitmap-font vertex accounting, and integration build dependencies

* Establish and apply C++ code style

- add the CLion-derived clang-format configuration at the repository root
- document formatting, naming, include, and scope conventions under docs
- align the manifest loader and related runtime asset code with repository style
- keep legacy-only files limited to formatting the lines touched by the loader work
- make modernized loader headers self-contained with direct standard-library includes

* Adds *.tar.gz to .gitignore

* Repair system font loading and text rendering path

- link shader2d vertex and fragment stages explicitly while preserving existing shader stage keys
- read and bake system fonts with glyph advances, line metrics, and alpha atlas sampling
- replace core-profile-incompatible 2D quads with triangles and update the demo text path
- cover portable font selection and 2D geometry with focused unit tests

* Use engine exceptions across font and asset code

* Add 2D and 3D cameras with shared framebuffer model

* Connect cameras to display windows and renderer viewport

* Connect GLFW input to Gainput before game updates

* Add interactive camera and input demo

* Add X11 linkage to demo target

* Removes redundant Google Test targets

- Keeps all suites in the existing all-tests executable
- Preserves CHERYL_SOURCE_DIR for manifest fixtures
* Updates grid geometry to use pixel dimensions

* Revises monitor snapshots to hide GLFW handles

* Updates VAO with deferred GPU cleanup TODO

* Revises display contracts to hide GLFW handles

* Updates engine input to use adapter contracts

* Revises draw data to use a material contract

* Revises 2D assets to submit through geometry adapters

* Updates asset managers to use selected resource providers

* Fixes legacy font vertex ownership during upload

* Revises renderer contracts for camera and frame settings

* Updates engine composition to use rendering adapters

* Fixes asset cache reuse across resource providers

* Adds an alternative runtime adapter integration probe

* Fixes OpenGL header leak through object pool

* Adds optional sandbox build without X11 and Gainput

* Merges fixes-resource-management into refactor-api-boundaries

Squashed commit of the following:

commit
Fixes block lookups and template test isolation

commit
Updates adjacent_left as a protected predecessor lookup

commit
Fixes partial block merges at allocation head

commit
Updates section lookup to use adjacent_left

commit
Exercise resource managers with deterministic invariants

* Adds retained resource release contexts and object reservations

Retain shared pool bookkeeping in object handles and let reservations own only unclaimed Block ranges. Migrate asset and CPU geometry release callbacks, preserve legacy interfaces, and correct batch allocation and constructor failure cleanup. Add lifetime and allocator regression coverage.

* Adds resource ownership and test intent comments

Describe pool state, reservation and allocator contracts using existing class comment style. Annotate lifecycle phases and invariants in the resource and block tests without changing their behavior.

* Updates resource comments for IDE quick documentation

Attach Doxygen comments directly to resource classes, concepts, and key methods. Give each concept its own description while retaining ordinary inline notes for test phases.

* Updates resource tests with phase explanations

Mark setup, state transitions, and resulting invariants inside the block, memory, and reservation tests. Keep assertions and test behavior unchanged.

* Fixes logging crash in gtests

* Adds X11 back into CMakeLists

* Adds phase explanations to remaining unit tests
* Adds design review TODO documentation

* Adds concurrency review TODO documentation

* Adds runtime and asset flow documentation

* Adds resource and subsystem flow documentation

* Adds parser and resource lifetime phase comments

* Adds input rendering and asset flow comments
- Refactors Frame into a CRTP base that preserves derived return types
- Replaces unsafe reinterpret casting with a checked static downcast
- Removes redundant derived frame-selection implementations
- Adds explicit wrap and clamp frame index policies
- Replaces public reference aliases with value accessors
- Makes Frame inheritance public so frame-selection behavior is part of each derived type's public interface
* Exposes inherited numeric Sprite indexing alongside named animation lookup
* Maps animation loop metadata to wrap and clamp frame index policies
* Removes redundant animation validation now enforced by Frame construction
* Removes unnecessary Frame polymorphism and protects base destruction
* Adds direct standard-library dependencies required by Frame
* Deletes redundant SpriteFrame abstraction

- Replaces the transient SpriteFrame drawable with an internal frame drawing helper
- Draws raw sprite cells and resolved animation cells directly from their owning objects

* Fixes delta timing initialization and sampling semantics

* Initializes the first timing interval at DeltaTime construction
* Keeps elapsed queries independent from interval reset
* Adds explicit check-in semantics for starting a new interval
* Uses a shared clock sample when measuring and advancing through operator()
* Avoids losing time between separate elapsed and check-in samples

* Fixes observed variable callback synchronization

* Snapshots the observed value while holding the write lock
* Invokes callbacks after releasing variable synchronization
* Prevents callback reentrancy from deadlocking on nested writes
* Preserves the value associated with each set operation for observers
* Requires observed values to be copy constructible

* Fixes event listener synchronization

* Snapshots listeners before dispatching callbacks
* Releases listener synchronization before invoking arbitrary callback code
* Prevents callback registration from deadlocking during dispatch
* Uses non-mutating event lookup while holding a shared lock
* Moves registered callbacks into listener storage

* Removes todo comment from Factory::create

* Adds constructor for failed_operation exception

* Updates .clang-format

* Adds logging lifecycle synchronization groundwork

- Adds explicit logger lifecycle states and state requirements
- Adds synchronized lifecycle state access and validation
- Makes logger and sink ownership atomically accessible
- Adds lifecycle-aware resource acquisition
- Begins transactional logger construction and close synchronization
- Removes redundant sink handling from common logger operations

* Revises logging lifecycle and resource synchronization

- Adds explicit logger lifecycle states and state validation rules
- Adds synchronized lifecycle transitions and close waiting support
- Makes logger and sink ownership atomically accessible
- Adds lifecycle-aware resource acquisition
- Preserves log levels for reopening reconstructed resources
- Revises close and reopen around explicit lifecycle state
- Reduces redundant logger and sink access patterns

* Updates .clang-format

* Fixes logger close lifecycle and reopening semantics

- Adds sink-lifetime close completion and condition-variable waiting
- Routes writes through a null fallback while closing or closed
- Makes logger and sink ownership atomically publishable
- Preserves log levels and default logger ownership across reopening
- Makes logger construction transactional with registration rollback
- Serializes lifecycle-sensitive resource and default logger operations
- Moves logging lifecycle helpers into an internal implementation namespace

* Updates logger wrapper lifecycle interface

- Propagates close timeouts through Logger<name>
- Preserves existing zero-argument close calls
- Adds explicit standard-library dependencies for wrapper usage

* Updates logging and resource tests

- Reworks logging tests around lifecycle, close, reopen, timeout, and default-logger contracts
- Adds deterministic coverage for concurrent close and transition states
- Verifies close completion before file inspection
- Exercises compile-time logging during closed and closing states
- Cleans nodiscard warnings in logging, manifest, and memory tests

* Fixes logger destruction and log ID allocation

- Closes logger resources during Log destruction with a bounded timeout
- Preserves sink lifetime safety when external spdlog owners remain
- Removes lingering registry ownership during final teardown
- Hides log ID generation behind a translation-unit-local atomic counter
- Adds destruction coverage to the logging tests
- Replaces the byte-specific bit wrapper with generic BitArray storage
- Selects the narrowest fixed-width integer up to native word size
- Uses native-word arrays for larger bit collections
- Preserves writable indexed bit access and binary stream output
- Separates storage policy from the public bit-array interface
- Replaces byte-specific bit access with generic BitArray storage
- Selects compact backing words up to native word width
- Separates bit-reference proxy semantics from BitArray
- Preserves indexed bit reads, writes, proxy assignment, and stream output
- Adds broad math tests for bit arrays and existing math utilities
- Marks math-specific tests that should migrate from other suites
- Exposes packed backing storage through mutable and const word spans
- Makes word type, width, and count available as public representation metadata
- Presents single-word and multi-word storage through the same contiguous interface
* Adds simple todo for basing a PR

* Adds typed state tracking and versioned observation primitives

* Revises input bindings to publish semantic action snapshots

* Fixes backward stack trace test ordering

* Revises input binding and device state flow

* Updates versioned and observed variable internals

* Fixes camera matrix change detection

* Replaces glm upsteam with correct repository to fix mat4 operator== bug

* Revert "Fixes camera matrix change detection"

This reverts commit b3fccebf9709be13821bc059dcbbc0d3dcfd4635.

* Fixes .gitignore to only ignore /extern/ and not /tests/gtest/extern

* Adds glm mat4 equality test used to validate new glm remote

* Deletes obsolete engine, runtime, and renderer contracts

* Updates camera file placement under rendering

* Adds composition and runtime contract skeletons

* Revises simulation and render handoff contracts

* Adds tick input context for simulation updates

* Adds render frame submissions and per-instance sprite playback

* Reorganizes asset types and OpenGL backend files

* Refines shared asset and grid geometry layout

* Reorganizes manifest definitions and pixel types

* Moves manifest definition into asset definitions

* Adds reusable render frame writing contract

* Adds runtime modes and tick window snapshots

* Adds GLFW/OpenGL context bootstrap

* Link shader programs and release OpenGL resources with their context

* Adds OpenGL render frame submission

* Adds sequential game runtime loop

* Adds concurrent game runtime scheduling

* Fixes timed input handoff and restores runtime demo

* Adds input capture mode design skeleton

* Fixes independent simulation timing and input State consumption

Replace the transition-driven InputTimeline with an InputAccumulator that
consumes one complete batch without scheduling game updates. Sequential and
concurrent runtimes now invoke update once per cycle; the worker records its
consumption timestamp under the handoff lock.

Retain semantic press/release counts, persistent hold start times, full durations
of completed holds, current hold age, and observed down-time since consumption.
Transitions delivered in one poll share its observation timestamp, so State
reports their counts without inventing unobservable hardware durations.

Distinguish absolute axes from relative deltas. Accumulate relative movement
until publication and consumption, then reset it rather than replaying it.
Update the demo movement, input/runtime documentation, and focused test sources
for the independent-simulation contract.

Validation: static source review and git diff --check. No compilation or tests
were run, as required by the task instructions.

* Adds configurable polling backlog capacity and backpressure

Add lockstep (default), finite completed-poll capacity, and unlimited polling
policies with configurable completion-to-next-poll spacing. Every completed
observation occupies capacity, including unchanged State samples. Consumption
transfers the whole batch and leaves an empty backlog without resetting spacing.

Apply eligibility in both runtime modes. Concurrent handoff wakes polling as
soon as capacity reopens; full batches stop input pumping while frames can still
be presented or recycled. Shutdown and worker failure wake the same scheduler.
Sequential execution can skip a poll for spacing while continuing simulation.

Expose the policy in the runtime constructor and demo command-line options.
Document observation limits, capacity and delay semantics, and add focused
source-only coverage for lockstep, finite/unlimited capacity, and handoff delay.
Format the input/runtime files changed by the first two subtasks according to
the repository settings.

Validation: static review and git diff --check. No compilation or tests run.

* Adds ordered physical input and OS Text capture

Implement independent reference-counted capture requests that latch at the next
platform poll. Publish immutable PollSnapshot handles carrying State and a
separate ordered stream of button/axis/pointer/scroll/text records. One sequence
covers Events and Text so their relative order survives whole-batch handoff.
Every simulation consumer reads the same non-destructive TickInput records.

Capture GLFW callbacks before State mapping, including key repeats, unmapped
key/scancode information, Unicode character callbacks, cursor motion, and
fractional wheel offsets. Expose relative mouse State axes. Record observable
pad sample changes without claiming unreported physical transitions. Associate
callbacks with the actual window adapter rather than a different singleton.

Extend the adapter contract with supported channels and protected complete-poll
publication; keep State-only adapters compatible. Document scoped activation,
custom pump integration, ownership, observation timestamps, and committed-text
limits. Add focused source coverage for channel independence, repeat/text order,
move-only leases, Unicode scalars, and non-destructive single-cycle consumption.

Validation: inspected pinned GLFW/Gainput APIs, formatted changed files, and
checked git diff --check. No compilation or tests run.

* Adds scoped keyboard focus and simulation-side input routing

Keep focus ownership separate from capture activation. Add thread-safe focus
requests and move-only leases; releasing an older owner cannot clear a newer
request, including a replacement with the same target ID. Latch one focus
snapshot at poll start for both State gating and ordered-record routing.

Stamp records with their original target and focus epoch so queued input is
never reassigned after a focus transfer. Expose non-destructive routed views
and gameplay event filtering. Exclusive focus suppresses keyboard gameplay
State while mouse/controller alternatives remain available; pass-through
permits keyboard input for both the focused target and gameplay. Retain
physical state while blocked and resume it at the next eligible poll on blur.

Integrate a focused textbox example in the demo with independently requested
Text, F2 focus toggling, repeated editing/navigation controls, and Unicode
scalar storage. Use the relative scroll State axis for fractional wheel input.
Document the existing ASCII preview/font limit and keep editor/IME work outside
this input contract. Add focused source coverage for ownership, transfers,
pass-through, alternative devices, and teardown.

Validation: formatted changed files, reviewed routing and publication paths,
and checked git diff --check. No compilation or tests run.

* Fixes input adapter ordering, capability checks, and failure cleanup

Map GLFW keyboard/mouse State in the shared callback observation order, and
ignore later Gainput notifications for those externally driven devices. This
preserves brief cross-device chords instead of replaying events in per-device
queue order. Keep Gainput-owned devices and legacy wheel pulses functional.

Map relative movement against the modifiers active when it arrives. Preserve
already mapped deltas through modifier release or unbinding, reject invalid
axis kinds/non-finite results, and handle axis-kind changes at consumption
boundaries without replaying old relative motion as an absolute value.

Add explicit focus capability checks. Capture-capable adapters must publish
complete polls rather than silently returning State-only data. Prevent collector
and routing-owner copies from sharing activation/configuration accidentally.

Catch callback failures on the GLFW path and rethrow from update so exceptions
do not escape through the C callback stack. Detach callbacks, clear focus and
pending capture before final State publication, including partial initialization;
keep destruction non-throwing after explicit teardown reports a failure.

Expand source-only coverage for cross-device chords, modifier-gated relative
movement, kind changes, adapter capability failures, routed capture in both
runtime modes, and poll-failure teardown. Assert one sequential update rather
than the superseded input-driven subdivision.

Validation: pinned dependency API inspection, static C++ parsing (accounting
for the parser's valid empty-brace default-argument limitation), repository
formatting, and git diff --check. No compilation or tests run.

* Updates input implementation status and remaining validation gate

Record the implemented input work items and distinguish authored test sources and static review from execution. Add the remaining acceptance checklist for both runtimes, polling backpressure and spacing, ordered Events/Text, focus transfer, and shutdown failures. Document backend observation limits and the committed-text contract.

Clarify State observations crossing consumption boundaries and sequential polling eligibility. Compilation, automated tests, and real demo validation remain unperformed in this patch-preparation pass.

* Fixes runtime session cleanup and backend input ownership

Pair game cleanup with attempted initialization in both modes, preserve the first failure, and reject reused runtime or adapter graphs before touching stopped resources. Own the default GLFW input adapter and detach it before destroying its window. Add lifecycle and ownership regression sources; compilation and tests remain unrun.

* Adds platform-thread task dispatch for simulation resource requests

Execute FIFO request batches with the platform context, wake polling even at capacity, and deliver values or exceptions through futures. Retain request captures only in the queue, cancel them before worker join, and reject submissions outside the runtime. Add queued shader reload in the demo and cancellation, ownership, and failure regression sources. Builds and tests remain unrun.

* Revises semantic material binding and camera publication boundaries

Bind pass and draw values through Shader, keeping GLSL role names in the backend. Cache linked programs without camera broadcasts; expose explicit reload with retained old handles and failure-safe publication. Update camera scalar revision checks, stale camera test APIs, draw contract probes, and internal frame exceptions. Builds and tests remain unrun.

* Fixes asset cache publication and provider teardown synchronization

Synchronize cache lookup, publication, replacement, and clear; release retired handles outside cache locks. Bind loads to one provider owner thread and reject teardown refills. Preserve font defaults under the same lock and stable reservation selection during clears. Add concurrent-reader, retained-handle, wrong-thread, and reentrant-deleter regression sources. Builds and tests remain unrun.

* Revises asset preparation and transient resource upload

* Fixes OpenGL current-context checks and retained handle invalidation

* Updates runtime refactor status and remaining acceptance gate

* Reformats codebase

* Reformats codebase - second time is the charm

Apparently the clang-format file was overriding clion settings
It is unfortunate the clang-format file can't seem to reproduce the clion format precisely

* Replaces .clang-format with clion-code-format.xml

This unfortunately locks in the IDE with the repo, but the .clang-format
wasn't capable of reproducing the preferred code style.

* Fixes runtime build dependencies and stale test includes

* Updates successful build validation and remaining execution gate

* Fixes nodiscard warning in tests/

* Fixes formatting

* Fixes minor formatting

* Adds a best effort .clang-format - not as good as the clion xml

should be a bit better than the previous .clang-format

* Updates cmake min version

* Adds architecture implementation work order and checkpoint ledger

Records the original task base and second-pass task dependencies before source changes. Preserves discovery boundaries, patch sequencing, and the distinction between prepared regression sources and authorized execution.

* Revises platform task queue naming to PlatformDispatcher

Renames the dispatch type, source files, and EngineContext accessor together. Updates runtime calls, asset-loading examples, demo submission, and regression sources without changing detached FIFO delivery or future cancellation semantics.

* Fixes platform submission lifetime across runtime shutdown

Adds copyable submission endpoints backed by synchronized shared state, with rejection after close or dispatcher destruction. Preserves owned future results and capture cancellation outside queue locks. Guards detached drains against reentrancy and retains scheduler lifetime in wake callbacks.

Prepares regressions for saved endpoints and owner-thread reentrant posts. Moves EngineContext fields above its methods. Compilation and test execution remain unrequested.

* Adds an owned SimulationDispatcher with safe submission endpoints

Transfers move-owned no-argument work to an explicitly bound simulation owner. Accepts initialization-time requests before binding, rejects closed targets, preserves detached FIFO delivery and future exception results, and cancels pending captures outside locks.

Documents distinct dispatch APIs, delayed owner binding, queue lifetime, and self-wait restrictions. Runtime integration and regression sources follow in the next checkpoint.

* Adds simulation mailbox delivery at runtime update boundaries

Opens simulation acceptance during initialization and binds its execution owner in either runtime mode. Drains detached simulation work without scheduler locks before transferring the complete polling backlog, with no manufactured early ticks. Cancels pending captures on the owner before game cleanup and closes unbound queues after startup failure.

Prepares regressions for both owners, FIFO reentrant boundaries, cancellation, startup failure, and saved endpoint lifetime. Documents notification versus update cadence and keeps general-worker shutdown integration explicitly pending.

* Adds persistent EventBus registrations behind the default EventSystem

Extracts the owned named-event registry without changing the singleton access pattern. Returns bus-qualified non-RAII identifiers, keeps ignored registrations alive, and invokes callbacks outside registry locks in registration order.

Documents isolated bus architecture, producer-thread affinity, nested dispatch, and overlapping producers. Prepares source regressions for persistence, isolation, immediate order, and registration during dispatch; safe unregister and asynchronous delivery follow separately.

* Adds safe event unregister and in-flight completion barriers

Serializes active-state checks with invocation entry so detached registry snapshots cannot authorize a fresh callback after unregister. Provides nonblocking removal, explicit completion waiting, duplicate-removal safety, and nested self-wait detection. Close invalidates entries without destroying captures under registry locks.

Prepares controlled regressions for snapshot removal, bus-qualified IDs, self-removal, running borrowed targets, callback exceptions, and closed buses. Documents the caller obligation to wait before destroying a borrowed target.

* Adds owned queued event delivery with explicit failure reporting

Keeps EventBus independent of execution services through a deferred delivery callable. Copies payloads, serializes producer enqueue within each listener stream, and checks invocation lifetime at execution. Owned delivery tickets report rejected or cancelled work even when a dispatcher future is discarded.

Adds safe platform and simulation delivery adapters and requires a nonthrowing observable error sink for queued registrations. Prepares regressions for payload lifetime, order, invalidation, cancellation, callback failures, rejection reentrancy, and runtime affinity. Ordered worker delivery remains dependent on WorkerGroup.

* Adds independently owned WorkerPool and shared WorkerGroup capacity

Implements move-owned jobs, future results and exception containment, predicate sleeping, fair group selection, and enforced group concurrency caps. Accepted jobs retain group accounting independent of handle lifetime. Close rejects new submissions while drain/join completes ordinary work and releases captures outside scheduler locks.

Handles partial thread startup and rejects same-pool blocking drain or self-join. Prepares regressions for futures, FIFO serial groups, independent groups, graceful destruction, retained handles, and self-wait. Native affinity and weighted policy follow in the next checkpoint.

* Adds enforceable WorkerGroup scheduling and native CPU policy

Applies smooth weighted scheduling share, priority, concurrency caps, and previous-worker preferences across shared root capacity. Reports requested/effective eligibility and native capabilities. Linux jobs set and read back CPU masks before execution; hard unavailable CPU, cache-domain, or NUMA requirements reject explicitly instead of being ignored.

Retains compatible masks, restores baseline eligibility for unconstrained work, and delivers policy failures to futures without invoking jobs under unverified masks. Preferred fallback records failure accounting. Serializes external shutdown joins and moves mask allocation into the thread-start rollback path. Prepares native capability regressions; no builds or tests executed.

* Adds ordered event streams on shared WorkerGroup capacity

Uses one owned serial pump per delivery stream so parallel worker jobs cannot reorder event completion. Copied adapters share ordering across listeners; separately created streams remain concurrent. Group closure rejects new stream work, and failed pump ownership releases pending tickets outside locks for observable cancellation.

Guards publication failure before arming cancellation and prepares regressions for order on a parallel root, shared listener streams, and saved-target rejection. Completes optional platform/simulation/worker event composition without coupling the registry headers to execution services.

* Adds configured EngineContext worker ownership and injection

Creates a modest owned root lazily or shares application-provided physical capacity. Tracks groups created through the context as its shutdown domain, closes and drains only those groups, and joins only an owned root. Waiting releases the context mutex so finishing jobs can safely reenter and receive closure rejection.

Keeps existing owned/borrowed input construction compatible through default execution options. Runtime dependency pumping follows in the next checkpoint.

* Fixes execution shutdown ordering across platform and worker dependencies

Closes context CPU acceptance, stops simulation delivery, and continues pumping platform requests while joining simulation and settling accepted CPU work. Keeps game resources and frames alive until jobs finish, then cancels remaining platform requests before deinitialization. Injected roots keep unrelated groups open.

Adds a platform quiesce hook for producer shutdown and explicit borrowed-event invalidation without premature dependency destruction. Preserves startup/simulation failures through later quiesce and cleanup errors. Replaces the asset-preparation example with an owned WorkerGroup-to-platform handoff and prepares source regressions for upload-dependent shutdown and injected ownership.

* Updates execution bootstrap and final source preparation checks

Forwards owned or injected worker configuration through the normal GLFW/OpenGL factory. Makes new default-value types explicit for source readability and unambiguous syntax-tree inspection. Adds controlled weighted-service coverage and corrects the implementation ledger to reflect completed execution work.

Static C++ syntax parsing and whitespace review are preparation checks only; compilation, linkage, scheduler execution, and native affinity acceptance remain unrun.

* Updates architecture execution checkpoint and continuation status

Records tasks zero through four as source-complete, names the remaining timing/resource/material/render work, and reserves the next incremental patch number. Clarifies that older normal/sandbox build reports do not validate this continuation.

Preserves the original task base and unsquashed fifteen-commit mailbox series. Documents static syntax/diff and mailbox replay as preparation checks only; compilation, regression execution, native affinity, and real runtime acceptance remain unrequested and unrun.

* Adds bounded simulation scheduling with configurable lag recovery

Extracts a clock-driven scheduler shared by the upcoming runtime timing integration. Variable pacing, fixed delta, bounded fixed updates, and direct or fixed-prefix VariableCatchUp use explicit configuration. Excess debt is reported and dropped; fixed recovery preserves sub-step phase. Adds deterministic regression sources for stalls, expensive updates, recovery caps, invalid policies, and deadline saturation. Continues from the identical source tree pushed by the user while preserving the original task base.

* Adds explicit simulation-time input contributions and tick timing metadata

Keeps TickInput durations on their observation clock while TickContext carries a selected simulation delta, update kind, and discarded recovery time. Introduces button_simulation_seconds to map observed down-time proportion onto simulation time with a held-State fallback for a zero observation interval. Migrates demo movement and prepares scenarios for a tap within a 500 ms stall, persistent held state, input between recovery calls, and invalid manual deltas.

* Revises both runtime modes to use bounded simulation timing

Uses the clock-driven timing policy for sequential and concurrent execution. Each selected step drains simulation work and transfers the entire current input backlog; cycles without updates retain that backlog. Publishes at most one useful frame after each bounded batch and retains the latest complete frame for rendering. Adds demo timing switches and prepares runtime scenarios for fixed delta, capped hybrid recovery after a slow update, and validation before startup.

* Updates simulation recovery contracts and observation-clock regression coverage

Documents shared variable/fixed scheduling, recovery thresholds and caps, suspension behavior, discarded-time accounting, observation-based input, zero-interval control mapping, and latest-frame retention. Replaces hard-coded-cadence statements in active runtime/input documents and records task 5 as source-complete with executed acceptance still open. Adds clock-independence and transient-input recovery scenarios, exposes the optimization-configurer TODO, and makes the demo recovery switch select fixed mode.

* Updates the simulation timing checkpoint and continuation ledger

Records completed timing source tasks, static preparation and mailbox replay evidence, the pushed continuation base, reserved incremental numbers, and pending executed acceptance. Preserves the original-base cumulative route while providing a continuation-only route for the already applied execution series. Records cache residency and idle-maintenance as the next task and completes local formatting preparation.

* Revises the provider guard naming to AssetCacheContext

Names the shared cache publication and teardown domain without changing strong cache retention, provider/thread checks, reentrant refill rejection, or retained reader handles. Moves declaration members above methods and records the identical pushed timing checkpoint as the continuation base.

* Adds platform retirement maintenance independent of rendering

Introduces the backend-neutral maintain_resources operation and moves OpenGL collection out of clear/render. Both runtime modes service retirement before waiting, with a 10 ms idle-wait bound even before the first frame or with a full polling backlog. Keeps maintenance available while accepted execution work settles and after game/frame releases, without treating partial renderer initialization as ready. Prepares no-frame and maintenance-failure scenarios for both modes.

* Fixes native resource adoption and guarded failure cleanup

Transfers a linked program into its tracked OpenGLHandle before logical-program allocation can fail, removing duplicate immediate/deferred ownership. Centralizes untracked texture, VAO, buffer, program, and shader-stage fallback deletion behind owner/current-context checks without replacing the original error. Rejects unknown tracked resource kinds and prepares recording-native scenarios for worker retirement, shutdown retention, moves/slot reuse, wrong-context maintenance, and failure cleanup.

* Updates strong resource residency contracts and retention scenarios

Traces cache, composite, font, frame, linked-program, and native-handle ownership without introducing eviction. Documents independent retirement maintenance, the idle-wait bound and its practical scheduling limits, guarded failure cleanup, retained logical handles after closure, and pending material domains. Adds strong-residency/clear/provider-rebind regression preparation, updates active runtime documents, and records task 6 as source-complete with executed acceptance open.

* Updates the residency checkpoint and validates native program adoption

Retains native resource-kind metadata through handle moves and rejects logical program adoption of a non-program registration without losing its retirement owner. Prepares invalid-registration and failed-adoption scenarios, completes field declaration order, and records source preparation, delivery bases, reserved patch numbers, and the handoff to pipeline/material work. Builds, regression execution, and GPU acceptance remain open.

* Adds copied pipeline parameters and explicit override validation

* Adds immutable pipeline and material definition snapshots

* Revises geometry and image binding to use per-draw texture units

* Updates texture unit validation to retain upload-time context limits

* Updates the partial pipeline checkpoint and remaining integration work

* Adds linked program reflection and native resource domain checks

* Adds explicit GLSL pipeline building and validated parameter binding

* Adds recording coverage for native pipeline contracts and image binding

* Updates native pipeline contracts and the remaining integration checkpoint

* Fixes event invalidation publication during concurrent closure

Serialize listener invalidation with registry removal so every close observes closed invocation gates, including entries detached by concurrent unregister. Preserve destruction outside registry and listener locks. Prepare concurrent close and capture-destructor reentry coverage; execution remains open.

* Fixes polling deadline saturation across the signed clock range

Compare completed timestamps against max minus nonnegative spacing so a timestamp before the epoch does not overflow the saturation check. Prepare near-limit, maximum-spacing, and zero-spacing polling coverage; the negative-epoch case remains established by arithmetic review rather than an executed fixture.

* Adds worker cap and cross-group affinity restoration coverage

Hold two accepted jobs behind a latch and verify a capped parallel group leaves another physical worker for an independent group. Inspect the effective native mask across pinned/inherited/pinned jobs on one shared Linux worker. These audit scenarios are prepared, not compiled or executed.

* Updates earlier-task audit findings and completion evidence

Record reviewed paths, two corrected defects, worker coverage additions, and remaining lifecycle/native acceptance work. Distinguish implemented source scope from audit sign-off and executed correctness. Reconcile native checkpoints 31–34 with the pushed base and correct stale timing/resource ownership documentation.

* Fixes queued event preparation failure reporting

Capture payload/task construction failures under the queued error contract, preserving their original exception and reporting once outside entry/posting locks. Keep intentional invalidation suppression and immediate propagation. Prepare payload-copy reentry and throwing-target recovery coverage.

* Adds validated pipeline drawing and complete fixed state

Expose immutable geometry layout/topology/range metadata and validate common pass constraints before publication. Verify native geometry/program domains and all parameters before binding, then reapply blend/depth/cull policy for every draw. Enable depth writes for framebuffer clearing. Prepare common/native compatibility and adjacent-state scenarios; frame consumption remains a separate migration.

* Adds immutable material recipe publication and reload

Build complete material/pipeline candidates through explicit bootstrap callbacks and publish only after success. Strongly retain old generations for existing readers, preserve the current recipe on failure, and clear recipe caches during provider teardown. Prepare replacement/failure/rebind/loading-owner coverage; application and frame migration follow separately.

* Adds resolved draw packets and CPU asset submission

* Migrates frame playback and demo reload to material packets

* Retires immediate asset drawing and mutable font printing

* Updates migration documentation and continuation checkpoint

* Fixes worker event pump publication and closure ordering

* Fixes cache candidate ownership during fallible publication

* Fixes texture unbinding context and unit ownership

* Adds frame generation and failure cleanup integration coverage

* Adds required CPU mask revalidation coverage

* Updates architecture convergence evidence and acceptance gates

* Adds worker capture release and overlapping affinity coverage

* Adds context recovery and abandonment ownership coverage

* Updates recovered checkpoint and remaining acceptance evidence

* Fixes event pump cancellation ownership before publication

* Adds controlled event pump cancellation and reentry coverage

* Updates pump failure coverage and continuation evidence

* Fixes rejected event payload destruction under posting locks

Retains copied payloads inside the locally pinned delivery ticket so returning-false and throwing targets cannot release reentrant payload destructors while posting is locked. Adds controlled same-listener redispatch and recovery sources, and records audit A11 without claiming executed acceptance.

* Updates completed subtask audit evidence and review gaps

Records completed task-0–8 requirements and the factory discovery against inspected source and dependent paths. Revisits batch-ending claims, retains unfinished source review and acceptance, records the 58–59 checkpoint, and pauses further task-9 completion work.

* Fixes native upload failure publication and retirement coverage

Reject pending errors before creating texture, vertex-array and buffer IDs. Check generation, storage uploads, mipmap generation and vertex layouts before returning a logical resource. Preserve guarded discard for untracked IDs and retirement for tracked IDs on constructor unwind. Restore atlas alignment before reporting base-upload failure.

Prepare recording-native scenarios for 2D and both legacy mesh upload failures, atlas alignment and mipmap suppression, mipmap rejection, preexisting errors and generation errors. Record audit A12 and its limited synthetic evidence. Syntax-tree and whitespace inspection only; no compilation, regression execution or real-driver recovery is claimed.

* Updates text compatibility audit and declaration conventions

Compare the original and checkpoint-43 FFont print path with const layout and packet submission. Record retained bank widths and line advance, and the explicit caller-model, local-axis newline, safe byte fallback and space/CR compatibility decisions. Prepare rotated multiline submission coverage without native work.

Move confirmed frame/writer and STBFont data declarations before methods, and reconcile CODE-STYLE with the root 140-column configuration. Match the completed subtask matrix to all 62 checked task-0–8 entries plus ledger discovery 4.7, and record the remote-57 reconciliation, pending 58–61 delivery and remaining review. Static preparation only; the audit remains open and no compilation or tests were executed.

* Adds controlled worker policy and startup failure coverage

Keep native worker operations in a private per-pool adapter and preserve pthread affinity plus std::thread as production defaults. Centralize set/readback verification so recording adapters exercise the actual policy loop, promise settlement, capture release and construction rollback. Keep the public construction API unchanged.

Prepare eight scenarios for discovery, set, readback and fallback failures, cached-mask revalidation, recovery and capture-deleter reentry, and rejection after one thread actually starts. Record the synthetic coverage limits. Static inspection only; no configuration, compilation or regression execution.

* Adds event producer invalidation and worker policy failure scenarios

Prepare simultaneous producer ordering on one worker stream and invalidation while a copied payload is still being prepared. Check skipped callback entry and copied-payload destructor reentry without imposing global producer order.

Use the private per-pool native adapter with production worker submission to reject a published pump joined by two listeners, check worker-thread cancellation, reentrant recovery and completed accounting. Release held gates and join before borrowed recording state disappears. Synthetic source coverage only; no tests executed.

* Updates worker event audit evidence and remaining review

Record bounded event-ordering, invalidation, policy-failure and constructor-rollback review together with eleven prepared scenarios. Keep real OS failures, type/link checks and all execution gates explicitly open. Clarify startup fixture capture ownership after clearing a permitted moved-from source adapter.

Retain remaining resource/category/allocation/context-loss, combined context/asset/runtime shutdown and full formatting review. Preserve pending 58–61 and record numbered 62–64, combined 58–64 and original-base delivery routes. No new implementation defect is claimed in this pass and no tests were executed.

* Fixes native program construction and reflection error publication

Rejects native stage, link, detach and reflection errors before publishing executable resources. Keeps production construction behind a private entry shared with synthetic fault fixtures, preserving untracked cleanup, single adoption and retained-program retirement.

Prepares recording coverage for construction and logical failures, partial file loading, lost-current cleanup and pipeline reflection recovery. No compilation or test execution performed.

* Updates subtask audit with native program failure and dependent ownership review

Records A13 and seven unexecuted construction/reflection fixtures, checks failed builds before cache replacement and traces first-failure cleanup in both runtime modes. Leaves category/allocation, combined runtime and format review open; task 9 remains paused.

* Fixes font publication ownership and default-selection failure atomicity

Routes fonts through retained cache publication and prepares default path copies before construction. Commits default selection through a nonthrowing metadata callback under the publication lock. Keeps the default cache allocator and adds scoped allocator injection with allocator-preserving clear.

Prepares node and rehash allocation failure, replacement/reentrant deleter and stateful allocator cleanup sources. No build or regression execution performed.

* Adds partial resource upload and retained category failure coverage

Prepares scoped provider failures for CPU geometry and Graphic image unwinding, partial sprite/tileset batches, unchanged metadata on failure, retry and retained geometry through cache clear. Native driver execution and font atlas failure injection remain open.

* Updates allocation and category audit evidence through checkpoint 69

Records A14, scoped map allocation-request rejection and partial composite/CPU resource upload coverage. Keeps native registration/later logical allocations, font atlas, combined runtime failures and formatting open; no executed acceptance or task 9 advancement.

* Adds scoped native registration and logical allocation failure coverage

* Fixes texture query errors before consuming output values

* Updates allocation failure fixtures and the audit checkpoint

* Adds controlled baked-font upload and failure ownership coverage

* Adds registration allocation failures for textures and geometry

* Fixes allocating group snapshots during worker shutdown recovery

* Updates font file rejection coverage and the remaining audit work

* Adds controlled font bake retry and allocation failure coverage

* Fixes execution cleanup on runtime startup exits

* Adds partial adapter and worker policy runtime failure coverage

* Updates startup audit evidence and fixture owner lifetimes

* Adds owned worker startup rollback runtime coverage

* Adds simulation thread startup failure dependency coverage

* Adds combined native construction and missing context coverage

* Fixes cleanup after initial OpenGL context acquisition failure

* Revises tile demo and runtime fixture declaration order

* Updates composed startup and native context loss audit evidence

* Fixes renderer state publication and covers retained native dependencies

* Revises task code with clang-format 23 and completes declaration dependencies

* Fixes legacy shader diagnostics and failed location query caching

* Updates completed task audit closure and outstanding acceptance gates

* Fixes startup regression expectations for accepted request cancellation

The first sandbox aggregate run exposed two startup-failure fixtures expecting
failed_operation from already accepted requests cancelled during cleanup. Both
dispatchers document broken_promise for that path; failed_operation instead
rejects new submissions after closure.

Check readiness and the exact future_errc::broken_promise code for the owned-root
rollback and dedicated simulation-thread startup cases. Preserve their assertions
on callback suppression, capture release, worker/upload completion and the original
startup error through later cleanup failures. Production behavior is unchanged.

Validation: normal and sandbox Release targets compile and link with GCC 13.3 and
C++23. Full aggregate reruns pass all 332 normal and 330 sandbox tests, with no
failures, errors, disabled tests or skips. Real demo/driver/font acceptance remains
open under task 9.5.

* Updates task-nine build evidence and remaining native acceptance

Record exact remote/audit reconciliation, current Release build configurations,
initial regression failures and successful complete normal/sandbox aggregate runs.
Separate executed Linux affinity and controlled adapter evidence from real demo,
GL driver/context/font and remaining OS failure/restriction acceptance.

Add completed 9.5a/b substeps without closing the overall 9.5 gate. Align current
status, source-audit history, convergence notes and the local PR description draft.
Preserve the original base and ordered patches; new delivery is 91-92 from integrated
remote checkpoint 90. No push or PR publication is included.

Validation: documentation links and git diff --check pass. Documentation only;
validated C++ remains unchanged from checkpoint 91, whose full normal/sandbox
regressions pass 332/330 cases with no skips.

* Adds finite update limits for repeatable native demo validation

Accept --max-updates=N in the existing demo; zero or omission preserves interactive
execution. A positive limit calls GameRuntime::stop from the simulation owner and
reports completed updates after normal shutdown. Keep all demo members above methods.

Validation: normal Release demo builds. Eight real GLFW/OpenGL runs on Mesa llvmpipe
complete twelve updates and return zero: sequential/concurrent variable finite,
variable unlimited, fixed drop with capacity one, and fixed hybrid configurations.
These exercise configured paths without claiming forced recovery or visual sign-off.

* Adds opt-in real-context retirement and shutdown acceptance

Integrate two native tests into the existing aggregate executable. Require explicit
CHERYL_NATIVE_GL_TESTS=1 for normal builds; the sandbox translation unit is empty.
A real provider texture released on a foreign thread survives until owner maintenance
without drawing. A second unshared GLFW context rejects use/collection; shutdown
restores the selected context, deletes retained native storage and supports final
foreign release after both windows and the engine are destroyed.

Validation: both Release builds pass. In an authorized TCP Xvfb session on Mesa 25.2.8
llvmpipe OpenGL 4.5, full normal/sandbox suites pass 334/330 cases with no skips or
failures. No additional regression executable is created. Hardware-driver, interactive
input/resize/reload and remaining native failure/font acceptance stay open.

* Updates native validation evidence and desktop acceptance handoff

Records successful full Release builds, 334 native-enabled normal and 330 sandbox tests without skips, and eight finite demo runs on Mesa llvmpipe. Distinguishes actual context retirement and shutdown evidence from remaining hardware, interactive input/resize/reload, forced overload and font/OS failure acceptance.

Provides a short desktop sequence for the user while preserving the open task-9 gates and the verified remote-92 delivery baseline. Source execution was validated at checkpoint 94; this checkpoint records results only.

* Updates desktop acceptance evidence and clarifies shader reload checks

Records the user-reported desktop checklist pass after remote checkpoint 95: input/text focus, resize, valid/failed/recovered F5 reload and normal close behaved as expected. Provides explicit copied-asset commands and explains the positional asset-root argument.

Keeps forced overload, further native failure/resource combinations, stb allocation, rotated FFont, OS policy acceptance and PR publication open. Updates the local PR draft and status records without changing source or automated counts. Delivers only checkpoint 96 from the verified remote-95 baseline.

* Fixes bound program deletion during OpenGL maintenance and shutdown

The last drawn program can remain current after its final CPU owner retires. OpenGL defers program deletion while it is current, so idle maintenance and renderer shutdown previously left its native storage alive while the borrowed window/context remained alive. Require the selected current context and unbind the program before collection or the shutdown sweep. Later draws select their own complete program state.

Adds three opt-in real-context acceptance cases: shader-source replacement and cache clear preserve retained red/green frame output; compile/link/missing-file/reflection failures preserve the published material while deleting partial or retired candidates; shutdown deletes programs, VAOs, buffers and textures before context destruction and supports final foreign owner release afterward. Native forwarding traces observe actual driver IDs without replacing the native implementation.

The initial native shutdown case reproduced one failure among five tests. Both complete Release builds and corrected full suites pass: 337 normal and 330 sandbox, no skips. Real checks ran on Mesa llvmpipe. Remaining task-9 acceptance stays open.

* Updates native failure evidence and pending patch routing

Records the initial real-driver shutdown failure and corrected maintenance/shutdown behavior, retained shader-source generation readbacks, native partial failure cleanup and late final owner release. Full builds and 337 normal / 330 sandbox tests pass with all five native cases enabled and no skips.

Preserves the user-reported desktop checklist pass and includes pending documentation checkpoint 96 in the next code delivery from confirmed remote 95. Keeps forced overload, further native context faults, stb allocation, rotated FFont, OS policy acceptance and PR publication open. Source work stopped at the first checkpoint past 20 minutes; this commit changes documentation only.

* Fixes real font allocation failure cleanup

Routes real stb scratch allocations through a private scoped memory-resource
boundary while preserving the public font-loading API. Intrusive allocation
records release all outstanding glyph/raster scratch when bad_alloc unwinds
stb manual cleanup. Scope ownership restores across nested bakes and is local
to the calling thread. Allocation failure precedes geometry/atlas publication.

Adds aggregate opt-in real TrueType and CFF fault sweeps, rejecting each of
793 and 727 allocation requests respectively, including the heap scanline
path. Checks zero outstanding scratch, no uploads, successful subsequent
loads, and nested failure with both successful and failing outer loads.

Validation: full normal/sandbox Release builds and suites, 340/333 passes
with no failures/errors/disabled/skips, including all five native GL cases.
An isolated null-return vendor reproduction gives a successful but altered
TrueType atlas and SIGSEGV on CFF. The managed loader rejects these requests
with bad_alloc and releases its tracked scratch.

* Updates real font allocation evidence and pending acceptance

Records the isolated TrueType partial-atlas and CFF null-allocation crash
reproductions, the tracked allocation boundary, complete request sweeps and
nested-failure ownership checks at source checkpoint 99.

Records full normal/sandbox Release build success, 340/333 passing tests
without failures/errors/disabled/skips, all five native OpenGL cases, and
successful finite sequential/concurrent demos after the font allocator fix.
Marks bounded real-font allocation acceptance 9.5e.1 complete while leaving
rotated FFont and remaining overload/native/OS/publication acceptance open.

Reconciles active evidence and the pending 96-100 delivery from confirmed
remote 95. Retains the original cumulative base and historical result scopes.
This checkpoint changes documentation only; prior source validation applies.

* Fixes RGBA atlas row orientation and validates rotated legacy fonts

Converts top-to-bottom RGBA source rows to bottom-up OpenGL storage while
preserving the source buffer and stb's separate one-channel baked UV order.
Both raw/file Texture paths and decoded provider uploads share this boundary.
Checks row-storage size before allocating the transient reordered copy.

Adds native aggregate acceptance through real FFont widths loading, uploaded
atlas geometry, production shader contracts and retained text packets.
Asymmetric colored cells verify normal/alternate banks, distinct stored
widths and spaces, quarter-turn rotation, the legacy transformed newline,
source/cache release and final idle retirement of texture/VAO/buffer/program.
The initial real-context run reproduced incorrect atlas-row selection.

A second native case decodes a small committed PNG and reads actual driver
storage for direct file construction, file loading and prepared RGBA upload.
It verifies unchanged input pixels and unchanged odd-width stb alpha rows.

Validation: full normal/sandbox Release builds and aggregate suites pass
342/333 tests without failures/errors/disabled/skips, including seven native
GL and three real-font allocation cases. Both finite real demo modes pass.

* Updates rotated font acceptance and RGBA row evidence

Records the native FFont pixel failure and shared RGBA row-orientation fix
at source 101, plus real widths/geometry/shader/packet rendering acceptance.
Documents normal/alternate banks, width/space motion, quarter-turn output,
legacy newline displacement and retained resource retirement.

Records actual PNG decoding, direct/file/prepared image storage readbacks,
unchanged caller pixels and unchanged odd-width stb alpha rows. Updates
image upload documentation to the explicit CPU and backend row conventions.

Full normal/sandbox Release builds and aggregate suites pass 342/333 tests
without failures/errors/disabled/skips, including seven native GL and three
real-font allocation cases. Both finite demo modes pass after the fix.
Closes bounded font acceptance 9.5e while retaining overload, native/context
failure, OS acceptance and PR publication gates. Pending delivery is 96-102
from confirmed remote 95; the cumulative original base remains unchanged.
This checkpoint changes documentation only.

* Adds real runtime overload and input backpressure acceptance

Executes both runtime owners with real GLFW/Gainput/OpenGL adapters and
resolved geometry/material packets. Forces an 80 ms update workload under
variable, fixed-drop and capped variable-catch-up timing, with both zero
and one fixed-prefix recovery configurations. Checks actual update kinds,
fixed deltas, observed elapsed lag, recovery caps and dropped time.

Adds a delegating native context whose first completed swap holds the
platform within presentation. Sequential timing reflects the workload;
concurrent simulation must advance eight updates while at most two frame
preparations fit the remaining slots. A condition predicate establishes
that progress; its deadline bounds failure. Real framebuffer pixel reads
verify packet playback before native swaps and presentation resumes.

Forwards real input State snapshots to fill lockstep and three-poll finite
batches during a held concurrent update. Two separately completed platform
drains prove native polling stays paused while presentation and platform
requests continue. The next update consumes every retained poll in order,
and subsequent polling resumes. This does not inject hardware Events/Text
or claim physical GPU/compositor pacing. Adds three cases to the existing
opt-in aggregate native suite; production behavior is unchanged.

* Updates real runtime overload evidence and applied patch routing

Records source 103's eight real-clock timing workload runs, two-mode native
presentation hold, real packet pixel readbacks and coordinated lockstep/
finite State backpressure. The concurrent presentation hold reports eight
updates with two preparations; full input batches pause actual native polls
while platform drains and retained-frame presentation continue, then transfer
all polls in order and resume polling.

Records complete normal/sandbox Release builds and aggregate execution:
345 normal and 333 sandbox cases pass without failures, errors, disabled
cases or skips, including ten real-context and three real-font cases.
Keeps physical GPU/compositor stalls and hardware Events/Text outside this
controlled workload claim; ordered native records under forced backlog,
further native/context faults, OS policy acceptance and PR publication remain
open. Closes only the bounded 9.5c.1/c.2 scopes and retains 9.5e completion.

Uses the user's confirmed application through patch 98 as delivery baseline
even though a fresh fetch still observes remote 95. Pending delivery contains
99-104, excluding applied 96-98, with a unique bundle and original cumulative
base. Updates timing/acceptance/status/work-order/ledger and local PR draft.
This checkpoint changes documentation only.

* Adds native X11 ordered input and overload recovery acceptance

Sends synthetic key events through this test's own X server window and the
runtime's normal GLFW pump, exercising real key translation, repeat handling,
character conversion, Gainput State publication and ordered record capture.
Runs sequential/concurrent fixed-drop and capped catch-up configurations.
Each run receives exactly eleven records: a shifted repeated A, a B tap,
and a C tap after focus/capture replacement. Checks native codes/modifiers,
combined sequence/timestamp order, old exclusive and new pass-through routing,
and one semantic press/release without replay in later recovery updates.

A concurrent simulation-mailbox gate precedes backlog consumption. Three
actual native polls fill capacity while two separate platform drains verify
polling remains paused. The C tap is already in Xlib's queue during that
pause; normal resumed polling captures it under the replacement focus.
Old queued records survive capture-lease release and focus replacement.
Sequential mode exercises the same real record/focus/recovery pipeline on
its shared owner. A deliberate 120 ms workload forces dropped/catch-up lag;
future/predicate coordination proves ordering independently of that delay.

Extends only the aggregate native fixture and its forwarding observer.
Production behavior and dependencies are unchanged. The Linux X11 case is
opt-in with CHERYL_NATIVE_GL_TESTS and skips on another GLFW platform.
Synthetic server events do not claim physical keyboard/IME/device coverage.

* Updates native ordered input evidence and remaining acceptance scopes

Records source 105's synthetic X server input through normal GLFW key/text
conversion in sequential/concurrent fixed-drop and capped catch-up runs.
Each delivers eleven records once with native codes/modifiers, chronological
sequence, old exclusive/new pass-through focus metadata and one semantic
press/release. Coordinated concurrent capacity keeps later server events
queued until native polling resumes; capture replacement retains older data.

Both full Release builds and enabled aggregate suites pass 346 normal and
333 sandbox cases without failures/errors/disabled/skips, including eleven
native-context and three real-font cases. Closes bounded 9.5c acceptance with
103's timing/presentation/State checks and prior reported desktop/demo results.
Retains font 9.5e closure and explicitly scopes the remaining work to native
resource/runtime failure cleanup (9.5d.2), actual OS affinity restrictions and
request rejection (9.5f.1), plus separately requested PR publication (9.7).
Does not infer physical device/IME, privileged policy or GPU reset coverage.

Updates input/timing/acceptance/status/work-order/ledger and local PR draft.
Delivery remains based on user-confirmed applied 98 while fresh fetch still
observes remote 95. Pending patches 99-106 exclude already-applied 96-98;
original cumulative base and author/history replay are preserved. This
checkpoint changes documentation only.

* Fixes native X11 test references in optional backend builds

Enables the aggregate X11 input fixture only when the Linux normal build
selects GLFW_BUILD_X11. A source-specific compile definition guards both
the native-access include and the X server case, preserving native tests
that do not require that backend. Production dependencies remain unchanged.

Checks the affected translation unit with the macro absent and verifies
no glfwGetX11/XSendEvent/XSync references. Both Release builds and rebuilt
native-enabled suites pass 346 normal and 333 sandbox cases without skips.
Retains the earlier full-suite run separately because it overlapped the
rebuild; final acceptance runs only after the rebuilt executable completes.
This check does not claim a complete Wayland-only build.

Records the guard as a necessary checkpoint-buffer correction after source
105 and evidence 106. Bounded 9.5c/9.5e closures remain; native runtime failure
cleanup, actual OS affinity rejection/restrictions and PR metadata remain
open. Delivery is 99-107 from user-confirmed applied 98, with preserved
numbered patches, cumulative original base and exact replay evidence.

* Adds native runtime failure cleanup acceptance in both modes

Exercises initialization, partially prepared frame and completed-swap failures
with real GLFW/OpenGL resources in sequential and concurrent GameRuntime runs.
Accepted CPU work waits until quiesce and posts a real platform upload during
shutdown; checks owner execution, settled futures and resource dependency life.

Unbinds the actual current context during game deinit and raises a secondary
cleanup error. Verifies original-error preservation, input detachment, context
recovery, expired retained owners and native program/VAO/buffer/texture deletion
while the borrowed window remains alive. Records all six exercised scenarios.

* Adds real inherited affinity restriction and kernel rejection acceptance

Narrows only the calling test thread mask, constructs a production worker pool
with the restricted inheritance, and verifies discovered capability, required
rejection, preferred intersection/fallback and actual worker execution masks.
Joins every child before restoring the caller mask, including exceptional exits.

Submits an in-range mask containing an absent CPU through the production native
adapter. Records the actual kernel error, checks future failure and subsequent
required-group recovery/accounting on the same worker. Keeps this callback error
separate from controlled pre-callback scheduler policy failures.

* Updates task-nine technical acceptance closure and remaining PR publication

Records six native runtime failure combinations and actual Linux inherited mask
restriction/discovery/restoration and kernel request rejection at sources 108-109.
Normal/sandbox Release builds and complete 349/335 suites pass without skips;
twelve real-context and three real-font cases execute. The affected native source
also compiles with its X11 test macro absent and has no X11 helper references.

Reconciles these results with prior finite-demo, reported desktop, native reload/
retirement, timing/input/presentation and real-font acceptance. Closes 9.5d.2,
9.5f.1 and parent 9.5d/f/9.5 for their recorded scopes; retains historical audit
and execution claims at their original checkpoints. Only separately requested
9.7 PR metadata publication remains open, with its local draft updated.

Preserves user-confirmed applied checkpoint 98 as pending delivery base, keeping
99-107 intact and adding 108-110. Records unique pending bundle routing, fixed
original-base cumulative delivery, exact replay and evidence archive scope.

* Fixes compile warning
* Revises external library checks directory naming

Rename projects/tools to projects/dependency-checks to reflect the standalone Backward external-library verification executable. Update root CMake selection and layout/planning documentation with the new owner path and purpose.

Preserve both moved file contents, the backward-cpp target and its existing test-option selection. Static path, byte-preservation and whitespace checks pass; no builds or tests were run.

* Adds bounded module validation sequence and static preparation scope

Sequence Engine-only, native and full OpenGL acceptance with reusable Release outputs, standalone bootstrap/target reuse and a separate Debug Engine-linked crash consumer. Preserve CLion profiles, limit any later authorized builds to one low-priority job and avoid repeating passed checks without a concrete reason.

Record the owner selection of preparation and static checks only for this pass. Configuration, compilation and executable acceptance remain pending an explicit request.

* Adds Engine-linked Debug signal acceptance preparation

Add a consumer that references no Engine entry point and receives its crash bootstrap solely through Cheryl::Engine. Keep it outside the default build unless acceptance runners are selected and outside automatic CTest execution.

Provide a manual POSIX driver for Debug and NDEBUG consumers with isolated working directories, bounded subprocesses and disabled core files. Require Backward-specific trace output in Debug and ordinary signal termination without that output in NDEBUG builds.

Document the target, execution scope and pending G5 evidence. Static review passed: Python AST syntax, exact production manifests, preservation of all original named tests, unchanged owner memory source, neutral Engine include boundaries, local documentation links and staged whitespace. No configuration, compilation or test execution was performed, per the owner-selected static-only scope.

* Updates G5 with reviewed assembly and standalone validation recipes

Record the static preparation checkpoint and keep executable isolation acceptance open in the groundwork and U9 plans. Account for the 52/6/11 production manifests, preserved named cases, owner consumer probes, module include boundaries and standalone helper paths.

Prepare a Release sequence that adds Native GLFW and OpenGL while reusing neutral outputs, a minimal Debug signal check, exact target/driver selections and an enclosing-host supplied-target example. Require PRE_TEST discovery and host-root CTest enablement, preserve CLion profiles, and distinguish native display limits and installed-package scope from source-target validation.

Reviewed source paths, public quoted includes, consumer header inventories, dependency selectors and plan links without configuring, compiling or executing tests. Keep all executable outcomes and cost measurements pending under the owner-selected static-only scope.

* Updates test aggregation plan with owner runners and cross-project composition

Record the owner-reported extracted aggregate result of 393 passes and 17 ignored/skipped cases without inferring configuration or native coverage.

Plan complete Engine, Native GLFW and OpenGL runners with reusable suite case objects and a single runner entry point. Move combined all-tests ownership and its diagnostics driver to projects/tests while preserving focused runners, selections, dependencies and source bytes. Keep implementation verification static until explicitly authorized to build or run tests.

* Revises test ownership with project aggregates and shared case objects

Add engine-all-tests, platform-module_native-glfw-all-tests and graphics-module_opengl-all-tests under their implementing owners. Define combined all-tests in projects/tests after owner registration and move the cross-project diagnostics driver there without changing its bytes or executable expectations.

Compile each focused suite into one reusable object target with private include hooks and definitions. Separate test support from the runner entry point, link cases directly into focused, owner and combined runners, and propagate conditional native X11 dependencies through the acceptance case target. Preserve focused/manual runners, selection options, native/font opt-ins and output locations.

Record the owner-reported pre-change aggregate result of 393 passes and 17 ignored/skipped cases. Static review accounts for 333 Engine, 4 Native GLFW and 73 OpenGL cases, preserves every original suite source/helper manifest and all 310 recorded source/header/fixture/driver bytes, and verifies documentation paths and CMake source structure. No configuration, compilation or executable tests were run for this follow-up.

* Revises planning context and active task checklists

Replace completed planning journals with concise contract references, remaining requirements, discovery gates and scoped Git recovery pointers.

Preserve UI probe and adapter prerequisites, module isolation acceptance, ownership constraints and unfinished public documentation work. Track G5 and U9 progress in one checklist per macro task, retaining checked subtasks until the whole task completes.

Add documentation discipline that preserves useful context and reusable procedures while preventing routine execution-report accumulation. Keep existing Git rules and Cheryl conventions intact.

* Revises GoogleTest target names by runner role

Use concise focused and acceptance runner names, with engine-all, native-glfw-all and opengl-all for owner aggregates. Keep all-tests as the selected assembly aggregate.

Update aggregate assignments, the Engine acceptance link option, the logging driver and current documentation. Preserve case-object reuse, ownership, discovery, acceptance selection, build options and dependencies; unrelated verification executables retain their names.

Verify exact target-name substitutions and unchanged shared composition helpers through static inspection. Repository searches find no old target names; Python syntax and diff whitespace checks pass. No configuration, compilation or test execution performed.

Original task base: 2d1786e056caeadcde4a6414adf4370abb9ffdb4

* Fixes warning in all-tests build

* Fixes standalone module test registration scope

Enables CTest in each selected module directory before adding its test owners. The previous helper enabled it inside a function, losing the CMAKE_TESTING_ENABLED definition on return and preventing standalone top-level registration.

Checks fresh Engine-only and standalone Native configurations for isolated source/target graphs and the generated top-level CTest file. Updates the active G5 checklist to reuse owner-reported current all-tests and demo evidence, combine isolated and standalone selections, reuse compiler results and reserve execution for missing composition/bootstrap coverage.

* Revises module guidance after isolation acceptance

Close G5 after fresh neutral Engine, standalone Native GLFW and whole OpenGL selections, supplied-target reuse, owner consumers and CTest registration, isolated logging/diagnostics, and automatic Debug/Release signal delivery.

Reuse the owner's current combined all-tests and demo evidence rather than rebuilding those assemblies. Execute missing native OpenGL opt-ins, including publication backpressure and shutdown cases. Use serial low-priority builds and a task-local compiler cache; the Debug signal check reuses the existing neutral archive.

Replace accumulated execution journals with reusable validation procedures and coverage limits. Remove the completed one-purpose checklist and repair roadmap links. Preserve sandbox migration, reverse teardown, future UI/input/Steam prerequisites, and separate installed-package and wider platform acceptance. Clarify that signal installation follows the compiled bootstrap object's NDEBUG scope.

Validation: independent consumers passed; 126 Engine, four Native GLFW and 73 OpenGL cases passed without skips in the selected runs. Native GL includes 14 display checks. Standalone and supplied-target CTest registration match. Manual logging, diagnostics and bounded POSIX crash drivers passed; documentation links and whitespace checked.

* Adds retained clipping and colored 2D geometry

Define copied top-left logical clip regions, finite/ordered validation, nested intersection, viewport clamping and outward framebuffer rounding. Draw styles resolve clips into immutable packets; empty regions suppress native draws.

Add a separate position/UV/float-RGBA layout and transient provider upload without changing Vertex2D storage. Unsupported providers reject colored uploads explicitly. Keep VAO storage, shader attribute mapping and scissor implementation inside the whole OpenGL owner; validate before native state changes and reset scissor for unclipped draws and full clears.

Add neutral mapping/retention/layout checks, OpenGL recording checks and an opt-in pixel check of color, alpha, scaled top-left clips and scissor reset. Document contracts and the ordered U9 probe units.

Static validation: affected CMake paths exist, Engine headers remain native/graphics-free, whitespace checked. Executable U9 acceptance is pending explicit authorization; source completion does not close that gate.

* Updates AGENTS.md

* Adds the neutral UI runtime recording probe

Extend the existing Engine-owned portable graph with copied colored geometry and image/atlas storage. Record overlapping translucent panels, nested scroll clipping, an image and synthetic ASCII data through the real STBFont layout/submission contract.

Exercise exclusive committed-text focus alongside controller gameplay State in both runtime modes. Submit image replacement to the platform owner, adopt its completed future during simulation and retain earlier packet resources through replacement and teardown. Bound the session and inspect ordering, thread affinity, focus epochs and final ownership without introducing widget APIs or another engine target.

Require an explicit framebuffer extent for clipped direct OpenGL pipeline draws, preserving the original unclipped overload. Document the reusable probe procedure and the next adapter's pipeline/atlas bootstrap decision.

Static validation: whitespace, documentation paths, test-name uniqueness and neutral Engine SDK boundaries checked. No U9 compilation or executable tests run; focused acceptance remains open while source work proceeds under the owner's conditional build/test instruction.

* Fixes routed text access in the neutral UI probe

Read records for the focused field and its lease epoch through the existing TickInput API. Extract TextEvent values safely so routed button and editing-control records do not cause variant access failures.

Validation: recompiled only the affected Release translation unit with one low-priority job. No full rebuild or test suite was run.

* Adds missing include

* Adds portable keyboard and pointer event identities

Add backend-neutral keyboard and mouse button codes alongside existing opaque State and native/scancode tokens. Populate them in the native GLFW adapter and retain callback-time pointer positions on button and scroll records.

Add native mapping and Engine capture-to-tick preservation checks, including a click followed by movement and unmapped State keys. Select TGUI 1.13.0 custom-backend requirements, application-owned materials, immutable atlas snapshots and platform upload ownership before adapter implementation.

Static mapping coverage, documentation links and whitespace checks pass. Added executable checks remain pending; no build or test suite was run.

* Adds the optional TGUI module and input event bridge

Introduce Cheryl::UI::TGUI as an opt-in owner with module-local tests, an aggregate and an independent consumer/header probe. Reuse supplied TGUI targets or an explicit 1.13.0 source/package, require custom FreeType-only features and avoid dependency downloads or host backend rewrites.

Translate portable key, committed-text and observation-time pointer records without native SDK calls or destructive consumption. Preserve repeats and fractional vertical scrolling, reject invalid coordinates/text and leave unsupported controls and key releases in the original stream.

Suppress UI selection in Engine/module consumer bootstrap, document the current input-only scope and leave retained rendering, uploads and toolkit-session lifecycle in the owning U9 checklist. Static source/dependency/include/CMake/link checks pass; builds and executable acceptance remain pending.

* Adds the pinned TGUI dependency to the default assembly

Register extern/tgui at the reviewed v1.13.0 release and select the optional UI owner in the root assembly. Reuse supplied toolkit targets, explicit sources or package locations before the bundled source, without fetching during CMake configuration. Keep Engine-only and independent module bootstrap free of toolkit discovery.

Document FreeType requirements and cached CLion selection, and refine the remaining resource/render bridge work before its implementation. Static diff and dependency revision checks only; no configure, compilation or tests were run.

* Adds retained TGUI rendering and scene publication

Copy toolkit RGBA generations and expand indexed, transformed colored triangles into owned logical recordings. Preserve draw order, view mapping, image UV orientation and nested clips, with explicit configured texture limits and a smoothed-only provider policy.

Upload complete recordings on the original provider/platform owner through owned dispatcher submissions. Reuse live image generations through a weak cache, resolve application-supplied materials into retained neutral packets, and adopt ready scenes without waiting or replacing the current scene on failure or cancellation.

Add owner-local texture, recording, resource, retention and adoption checks plus independent consumer/header coverage. Reconcile current contracts and the remaining U9 session/widget work. Static checks only; configuration, compilation and executable acceptance remain pending.

* Updates CTTI submodule upstream

Use Manu343726/ctti as the external dependency upstream and synchronize the initialized submodule remote. Preserve the existing pinned CTTI revision; no dependency update, build or test is performed.

* Updates CTTI upstream to the selected fork

Point extern/ctti at RexarX/ctti and synchronize its initialized local remote. Keep the pinned dependency revision unchanged and preserve the previous commit series.

* Updates Gainput upstream to the selected fork

Point extern/gainput at jochumdev/gainput and synchronize its initialized local remote. Preserve the pinned Gainput revision and leave the pre-existing CTTI working-tree change untouched.

* Fixes native input composition for updated Gainput targets

Select and reuse gainput::gainput, gainputstatic or gainput instead of assuming the legacy static target. Apply warning options only to an owned concrete library and inherit exported public headers, repairing usage requirements only for legacy source builds.

Suppress upstream samples and tests in a local dependency scope while preserving host cache choices and HID configuration. Document composition and record the separately discovered CTTI name-API migration required before compilation.

The supplied CLion configure command succeeds with the existing default cache. No project targets were built and no tests were run. Preserve the existing user-selected submodule revisions as uncommitted work.

* Fixes Engine type introspection for the updated CTTI API

Use ctti/name.hpp and name_of for fully qualified singleton diagnostics and the unevaluated type-name macros. Replace the removed type_id factories with type_id_of in the macros and dependency acceptance cases.

Extend the existing CTTI cases to cover namespace qualification, reference preservation, value-ID decay and expression non-evaluation. Document the CTTI 1.1 requirement and the remaining tracked submodule revision alignment. Preserve the user's pending CTTI and Gainput revision changes outside this commit.

Static inspection finds no removed CTTI API references in Cheryl sources and all referenced CTTI headers exist in the selected checkout. No builds or tests were run.

* Fixes Gainput initialization before native input polling

Initialize the selected Gainput manager explicitly on the first window attachment before device creation. Validate window ownership first, pass the native HWND on Windows, and initialize the non-Windows HID backend without a window instance. Pair initialization with Exit at adapter destruction while preserving devices across window detachment and reattachment.

Pass elapsed steady-clock seconds to Update instead of its zero default, resetting the interval on attachment to exclude detached time. Add an opt-in native composition case for the first poll, repeated attachment, clock advancement, retained device IDs and context destruction.

Document the lifecycle and callback contracts alongside the remaining tracked dependency revision alignment and process-global HID/Windows notification ownership limits. Static whitespace and affected formatting checks pass; no project builds or tests were run. Exclude the pending mapper declaration/definition changes and user-selected dependency revisions from this commit.

* Adds logical window dimensions to runtime ticks

Copy logical window dimensions beside framebuffer dimensions on the platform owner in sequential and concurrent execution. Transfer the pair under the existing concurrent handoff lock and append the logical dimensions to TickContext so existing aggregate initialization remains valid.

Extend the controlled-window scenario with distinct logical/pixel dimensions, platform-thread accessor checks and a focused concurrent case. Document the copied snapshot contract and order the remaining U9 session/demo work around it. The new checks are source-complete; no builds or tests were run.

* Adds simulation-owned TGUI sessions and routed widget input

Own the custom toolkit backend, recording GUI and guarded FreeType font factory
in one session. Use copied logical/pixel dimensions and explicit simulation
time; preserve focus epochs, modifier releases and input capture lifetimes.
Report unavailable clipboard/cursor/IME services and reject destructive
clipboard shortcuts before widgets edit a selection.

Keep the backend alive through GUI/global-resource destruction and allow final
serial teardown after the simulation owner stops. Extend the independent
consumer and module-local source checks for real text widgets, view mapping,
atlas generations and teardown. Executable acceptance remains pending; no
builds or tests were run for this unit.

* Updates upstream uri for ctti and gainput submodules

* Refactors implementation of gainput interface

* Adds an optional TGUI panel to the demo

Compose the TGUI session only when the UI module is selected, preserving the
toolkit-free demo. Build app-owned colored-triangle shaders/materials on the
platform owner and create widgets lazily on simulation. Keep Game's UI boundary
to neutral status values and a camera-reset action.

Exercise text focus, scrolling, image replacement, translucent panels and an
edge tooltip. Submit at most one complete recording through the existing
platform dispatcher and retain the last successful scene until adoption.
Frame preparation reads only retained Cheryl packets; widget destruction occurs
after simulation joins and before toolkit-backend teardown.

Reconcile U9 and document selection, controls and focused acceptance procedures.
Static formatting, selection-conditional and documentation-link checks pass;
compilation, executable checks and native appearance remain pending.

* Fixes ignored nodiscard results in TGUI tests

Explicitly cast intentionally discarded results to void in TGUI input, rendering, scene and session tests. This keeps exception-path checks and side-effect-only calls clear while suppressing nodiscard diagnostics without changing test behavior.

* Fixes TGUI glyph recording and exact clip bounds

Record unindexed triangle lists in vertex order alongside indexed geometry.
TGUI submits font text and direct triangles without an index buffer; skipping
zero index counts discarded every glyph draw. Preserve complete-triangle,
missing-buffer and index validation, as well as empty-draw no-ops.

Map intersected view-space clip edges directly to logical viewport edges in
double precision. The toolkit's intermediate float viewport introduced small
errors that expanded exact scissor bounds by a pixel under conservative
framebuffer rounding. Preserve genuine fractional edges without snapping.

Add regression cases for unindexed/textured triangles, empty or malformed
submissions, unequal view scales and fractional pixel bounds. Keep the existing
strict nested-clip expectations and real-font/session checks. Reconcile the
adapter contracts and U9 checklist; focused executable rerun remains pending.

* Updates U9 acceptance after TGUI module verification

Accept the module-local recording, resource, input and session checks from the
user's passing TGUI aggregate run. Remove the resolved recorder-fix checklist
and stale rerun blockers while retaining the durable rendering contracts.

Keep independent consumer/header composition, Engine/native prerequisites and
actual queued demo/widget/runtime lifetime proofs open. Update the remaining
validation procedure to reuse the accepted module suite instead of rebuilding
or rerunning it without a new change.

* Fixes ambiguous demo Escape instructions

Label Escape as releasing keyboard focus in both the selected TGUI panel and toolkit-free HUD. Document the window close control as the way to end the demo.

Account for desktop touchpad disable-while-typing behavior in simultaneous input checks and retain native interaction acceptance in U9.

* Updates README setup and module guides

Expand the root README with contents, build and engine-only examples, CMake defaults, source and system dependencies, target consumption, test selection and troubleshooting. Document Linux GLFW selections and the Gainput HID fetch.

Add demo control and command-line tables, native UI interaction procedures, standalone module instructions and documentation navigation. Preserve current ownership and coverage contracts without changing future roadmap priorities.

* Revises U9 to require an independent second UI adapter

Treat TGUI acceptance as an intermediate checkpoint while keeping U9 open until a second adapter and a small coexistence/focus proof are accepted. Allow that implementation to remain incomplete while independent work proceeds; retain RmlUi as the leading candidate without selecting a version yet.

Reconcile the module roadmap and stale dependency/probe TODO status. Record the top badge placement correction as the next native demo work item.

* Fixes TGUI demo badge placement inside its parent clip

Place the badge beside the title within the main panel instead of above the child clip. Preserve normal parent and scroll clipping, and document the demo hierarchy.

* Adds controlled sequential and concurrent TGUI runtime checks

Exercise real GameRuntime, TGUI sessions and platform dispatch with module-owned memory resources and controlled platform adapters. Verify copied window sizes and thread ownership, immutable queued image replacement, published packets retained through toolkit/game/provider teardown, and release after recycling.

Coordinate progress through renderer observations with a bounded window deadline. Register the checks in the existing selected module suite and distinguish authored coverage from pending executable and native acceptance.

* Adds direct game shutdown requests through the simulation tick

Share a standard stop source between GameRuntime::stop() and
TickContext::request_stop(). Register scheduler wakeup for the duration of
run() and supply the same state in both runtime modes. Saved sources retain
stop state without borrowing a runtime pointer; unbound manual ticks reject
stop requests explicitly.

Extend the neutral runtime contracts for sequential and concurrent game
shutdown, repeated requests, stop before run, saved-source lifetime, and
ordinary cleanup ordering. Document the public request and retain focused
executable acceptance in the U9 checklist.

* Improves formatting of TickContext instantiation in game-runtime.cpp

* Adds QuitGame action to demo

* Updates U9 demo visual acceptance

Record accepted native demo appearance, including the badge within its parent clip. Keep input, focus, resize, DPI, and teardown acceptance separate from visual inspection.

* Adds typed TGUI placement and scalable sizing

Introduce WidgetLayout, Offset and Scalable through Session::set_layout.
Bind normalized anchors and mixed logical/relative offsets to the parent's
content area using TGUI numeric layouts. Apply optional per-axis size
fractions with minimum and maximum bounds, preserving other native sizing.

Validate rules and GUI ownership before widget mutation. Keep weak sizing
bookkeeping for rule replacement and retain the target through native
callbacks, including callbacks that remove the widget.

Add focused layout, resize, recording and lifetime cases, extend independent
consumer/header coverage, and document the contract and remaining U9
acceptance. Executable checks remain for the user's validation batch.

* Revises demo UI placement around typed layout rules

Replace the demo's layout strings and coordinate-based edge placement with
Session::set_layout. Anchor the panel at the window's top-right, apply a
bounded width fraction, and keep field/list/image widths bound to its content
area with fixed margins.

Anchor the badge inside its panel with mixed fixed and relative offsets,
center its label, and anchor the tooltip button at the window's bottom-right.
Keep native widget styling, readable control heights and normal clipping.

Document the demo's size limits and focused resize/DPI inspection procedure.
Mark the U9 source refactor complete while leaving executable and native
acceptance pending for the user's checks.

* Fixes event capture in TGUI layout tests

The layout test input stub inherited State-only support, so Session's
mandatory Events capture threw before every layout assertion. Declare State
and Events support and publish complete empty polls through the existing
input capture implementation.

Keep production Session capability checks intact. The existing layout cases
cover session construction; executable acceptance remains pending.

* Fixes demo UI resizing hidden by tight size bounds

Widen the panel's width range and add a bounded height fraction so ordinary
window resizing visibly changes its geometry. Keep the image region anchored
at the bottom and bind the list's remaining height to the fixed header,
image row and margins.

Bind row widths to the list viewport and use native automatic content extent,
avoiding the old fixed content width clipping wider rows. Preserve readable
text and control heights through native widget sizing.

Document expected panel sizes and resize inspection. Record the user's
acceptance of the focused layout cases while keeping native resize/DPI
acceptance pending. No agent builds or test execution were performed.

* Updates U9 resize acceptance and adapter author guidance

Record the user's acceptance of visible demo resizing while retaining separate
resize/DPI, input, composition and lifetime coverage. Add a concise adapter
author guide for module ownership, native toolkit authoring, neutral rendering,
immutable resource publication, routed input and serial toolkit teardown.

Link the durable guide from the documentation index and TGUI owner, and mark
its source completion in U9 without claiming the second adapter or remaining
executable acceptance is complete.

* Adds independent RmlUi owner and pinned dependency

Select RmlUi 6.3 Core with stock FreeType as the second U9 adapter. Add opt-in root and standalone composition, source/package/target dependency handling, portable input translation, and independent consumer/header checks. Keep native backends, samples, and other UI owners outside its dependency graph.

Record the rendering, input, lifetime, and acceptance boundaries before implementing the session. Executable acceptance is pending; no configure, build, or test commands were run.

* Adds RmlUi retained rendering and scene publication

Copy compiled triangles and premultiplied texture generations into CPU recordings with logical rectangular clips. Expand translated draws, correct image UV orientation, premultiply decoded file images once, and reject unsupported effects before publication.

Upload complete scenes on the original provider owner, reuse immutable image generations, and preserve the previous retained scene on failure or cancellation. Add focused ownership, alpha, clipping, material, and retained-frame checks; executable acceptance remains pending.

* Adds RmlUi native sessions and routed runtime proof

Own Core initialization, its logical context and explicit simulation clock on the UI thread. Expose native document authoring, retain copied memory fonts through shutdown, route physical keys and committed text by target/epoch, and apply observation-time pointer positions. Report optional OS/effect limits and preserve host-installed interfaces.

Add real document/font/editing/lifetime checks, queued sequential/concurrent runtime publication cases, and a meaningful independent consumer with first-include probes. Require a real test font instead of silently skipping coverage. Checks are source-complete and unexecuted.

* Fixes RmlUi font atlas bounds and extends pointer checks

Reject session texture bounds smaller than the stock FreeType atlas before installing toolkit globals. Document the supported bound and add coverage for observation-time fractional scrolling and zero-size views. Executable acceptance remains pending.

* Adds independent RmlUi demo and UI coexistence acceptance

Compose the native RML/RCSS view independently of TGUI, with bounded percentage/flex layout, routed editing, explicit focus/visibility controls and retained premultiplied scenes. Keep shared application status separate from either toolkit.

Add assembly-owned coverage for poll-latched focus transfer, stale lease release, distinct alpha passes and resources retained through independent toolkit teardown. Preserve module isolation and include the cross-project cases in all-tests only when both UI owners are selected.

Document adapter differences, selection and focused standalone/native acceptance. Record the complete TGUI suite as accepted from the user report; new RmlUi, coexistence, composition and remaining native checks still require executable acceptance. No builds or tests were run.

* Adds centralized Cheryl CMake metadata declarations

Adds declarative CMake metadata for project versions, target names, output
artifacts, and linkage relationships.

Separates shared build metadata from project-specific build and composition
logic so individual CMakeLists.txt files can consume consistent declarations.

* Updates CMake project version metadata

Sets Cheryl Engine to version 4.0.0 and establishes independent 1.0.0
versions for the demo and extracted module projects.

Adds the shared CMake metadata includes for versions, targets, outputs, and
linkage, and documents the metadata block in the top-level build.

* Updates centralized CMake build metadata

Moves shared build options into CherylOptions.cmake and extends the centralized
linkage declarations to cover test support, unit tests, acceptance tests,
consumer checks, aggregate runners, and dependency checks.

Adds the fixed test-support and test target identities required by the expanded
linkage metadata while keeping project-specific build and composition logic in
the owning CMakeLists.txt files.

* Updates CMake owners to consume centralized build metadata

Wires engine, module, demo, support, test, consumer, and generated GLAD targets
to shared target identities, project versions, artifact names, and scoped
linkage declarations. Keeps public Cheryl aliases as the composition boundary
for standalone builds and supplied targets, and resolves Gainput candidates
from the centralized declaration.

Reloads declarative metadata in each caller scope while retaining guarded
helper definitions, so local dependency bootstraps cannot hide declarations
from later module or consumer entry points. Extends the metadata for logging,
signal, consumer, header-probe, and GLAD support targets.

Updates manual acceptance drivers, build/run examples, and the module template
to the declared names. Records inherited RmlUi consumer selection as remaining
composition work in the owning UI plan.

* Updates owner source collection to use CMake globbing

Collects implementation, support, demo, consumer, dependency-check, and focused
suite translation units within their owning directories using CONFIGURE_DEPENDS.
Keeps generated GLAD sources and explicit public-header probes in their existing
owners and extends the module template with the same source collection policy.

Preserves native-input and optional demo-toolkit source selection. Partitions
legacy shared Engine cases into the existing focused and acceptance selections,
while collecting new cases from each suite's own src directory. Documents these
source ownership and selection rules in the module guide.

* Revises CMake support metadata names to identify their owners

Marks Engine logging and signal support targets with TARGET_LIB_ENGINE_S_*
and the OpenGL GLAD support target with TARGET_LIB_MODULE_OPENGL_S_GL46.
Uses the matching support suffix in output and linkage declarations and all
owning CMakeLists.txt references.

Groups support entries explicitly beneath their Engine/OpenGL owners and
documents the _S_ convention in the module guide. Retains the declared concrete
target identities, public aliases, artifact values, and dependency behavior.

* Renames test targets to help sort them

* Sets RmlUi integration default to ON

* Revises module composition to use repository root metadata

Use CHERYL_REPOSITORY_ROOT directly for shared helper includes and Engine bootstrapping in module and consumer entry points. Remove CHERYL_ENGINE_SOURCE alternatives, source-path guards, and helper-path fallbacks, including the module template.

Document the explicit repository-root argument for standalone configurations and retain the existing RmlUi bootstrap isolation prerequisite in consumer setup instructions.

* Updates setup guides and grouped target references

Separate cloning, pinned submodule updates, CMake configuration, combined test execution, and demo launch instructions. Provide Debug, RelWithDebInfo, and Release configuration examples with CMake option and compile-time macro tables.

List core, module, application, and each test target group with concrete names, public aliases, artifact names, selection rules, and coverage limits. Update module/demo READMEs and linked composition procedures for renamed targets and the current RmlUi default.

* Fixes inherited RmlUi selection in consumer bootstraps

Suppress CHERYL_BUILD_UI_RMLUI in the existing local variable blocks for Engine, Native GLFW, and OpenGL consumers, matching their TGUI isolation. Preserve enclosing cache choices and remove the obsolete standalone configuration workaround.

* Fixes RmlUi runtime fixture URL resolution

Give the in-memory runtime document a source URL anchored beside its image fixtures and author relative image names. The pinned RmlUi JoinPath implementation strips a leading slash from image URLs, so POSIX absolute attributes previously prevented both retained-frame runtime checks from loading their pixels.

Keep production adapters and demo behavior unchanged. The focused RmlUi aggregate, coexistence, Engine runtime/input/stop, and portable native input checks pass with sanitizer checks enabled.

* Updates UI adapter contracts after independent RmlUi acceptance

Remove completed UI roadmap work and stale U9/G6 checklist referrals. Keep
adapter requirements, ownership decisions, focused acceptance procedures and
native coverage limits in the module, demo and adapter-author guides.

Record the independent RmlUi consumer/header composition contract, retained
runtime and coexistence scope, and fixture-relative image URL requirement.
Reuse accepted TGUI coverage unless affected; retain deferred platform, text,
resource and routing capabilities as explicit consumer-driven work.

Validation: focused RmlUi, coexistence, Engine and native input checks passed;
the independent Release consumer passed with all four first-include probes.
Engine, Native GLFW and OpenGL consumers configure with both cached UI options
ON while excluding toolkit targets and preserving those cached selections.
Native demo acceptance in both runtime modes comes from the user's report.
Affected Markdown links and shell examples pass static checks.

* Completes ui integration plan

* Revises planning catalogue and defers Steam integration

Add a short planning index for short-, mid- and long-term work. Consolidate deferred input composition, Steam policy/transport gates and optional engine/module candidates into a long-term plan while preserving their requirements and acceptance boundaries.

Move durable module selection criteria and implemented TGUI/RmlUi requirements into development documentation. Retire the superseded groundwork and subsystem plans, and repair roadmap, index and module-guide links.

* Fixes native input ownership of Gainput lifetime

Claim process-wide native input ownership before Gainput initialization and retain it through device teardown. Reject competing initialized adapters without exiting the existing backend, release failed initialization claims, and reject Windows reattachment to a different notification window while preserving same-window devices.

Add module-local ownership policy regressions and native owner/reattachment acceptance cases. Document the supported single-owner lifetime, defer broader adapter ownership to consumer-selected work, and retain explicit Linux/Windows executable acceptance in the roadmap; builds and tests remain unrun.

* Updates file indexing and font discovery contracts

Document incremental FileMgr indexing, missing roots, unsorted buckets, path identity, borrowed results and partial failure behavior. Correct the stale loader-discovery comment and distinguish persistent indexing from Loader preparation.

Specify system-font root enumeration, best-effort traversal, candidate ordering and filename preference selection. Document FontMgr's provider owner, fixed-size first-face loading, default publication and retained handles. Add the authoritative discovery guide and reconcile the completed U15 contract subtasks without changing executable code.

* Updates display and window ownership contracts

Specify platform affinity, borrowed windows and monitor snapshots, cached logical/framebuffer observations and resize-event lifetime. Correct the unsupported runtime-refresh claim, document initial active-window selection and explain monitor scale versus per-window UI capabilities.

Add the authoritative display/window guide and link it from the module and UI documentation. Reconcile the completed U15 display subtask and keep consumer-selected hotplug/scale work deferred. Public interfaces and executable code remain unchanged.

* Revises native HID acceptance boundaries

Distinguish ownership rollback when Gainput initialization throws from HID backend readiness. The selected dependency ignores HIDInit's return code, so native acceptance must observe controller reports and device notifications rather than infer readiness from successful initialization or a device-free poll.

Keep explicit startup-failure reporting as a consumer-selected dependency contract change and retain the source/acceptance distinction in the active lifetime task.

* Updates asset value and playback contracts

Document direct construction versus loader validation, grid and font units, retained resources and borrowed metadata, cache lookup/publication behavior, and independent sprite/tile playback. Specify CPU submission copying, image-key selection and failure boundaries without changing executable code.

Add the authoritative asset value/playback guide and split the remaining U15 inventory into coherent documentation units; reconcile the completed asset subtask. Builds and tests remain pending authorization.

* Updates render submission and camera contracts

Specify partial versus complete parameter validation, immutable recipe ownership, cache replacement behavior, and backend validation boundaries. Document borrowed frame views/writers, per-pass insertion failure, authored order and exclusive slot recycling.

Define unsynchronized camera revisions, framebuffer pixel dimensions and perspective units without changing executable code. Correct OpenGL header ownership and sampler guidance, and reconcile the completed U15 render subtask.

* Updates input and dispatch ownership contracts

Document platform-owned input staging, cross-thread retained snapshots and leases, poll/consumption validation, borrowed record views, focus publication and nontransactional collection failures. Clarify accumulator and backlog ownership without changing executable code.

Specify dispatcher and worker capture/result lifetime, queued-work observations, required event error-sink ownership, and borrowed context/runtime adapters. Reconcile the completed U15 input/dispatch subtask while retaining native execution acceptance as outstanding.

* Updates utility contracts and closes documentation inventory

Document sampled/versioned state, observer and transition callback sequencing, throwing-value behavior, packed-bit borrowing, numeric/timing units, pointer preconditions and CPU anchor output. Clarify independent Block element ownership and correct already-resolved manifest texture paths.

Add the utility subject guide, replace stale U5/U8 referrals with authoritative contracts and validation procedures, and correct current logging target names and Engine-only selection. Remove the completed U15 checklist after preserving its continuing documentation requirements; native lifetime execution remains open.

* Adds typed event channels with persistent delivery ownership

Identify typed channels by owned exact name and payload type, require exact copy-constructible payload submissions, and check erased values before invoking typed callbacks. Keep legacy named channels separate and reuse the existing registration, invalidation, wait, FIFO and error-ticket machinery with allocation-free heterogeneous lookup.

Expose typed forwarding through EventSystem and add Engine consumer/header probes plus regression sources for identity, payload copying, nested invalidation, waits, callback/copy failures, cancellation, error-sink ownership and worker FIFO. Record source completion in U13 while native integration and authorized executable acceptance remain open.

* Updates native resize delivery with a canonical typed channel

Expose window_resized_event in the neutral window contract and publish it after legacy window-resized delivery using one saved framebuffer observation. Preserve nested resize snapshots and the existing synchronous and native callback failure boundaries.

Extend runtime owner checks and native acceptance sources for typed resize payloads, reentry, unchanged-size suppression and typed/legacy failures. Document borrowed-window limits and focused validation; executable U13 acceptance remains outstanding.

* Adds an asset package download catalog

Map all seven checked-in artwork manifests to author download pages, archive names and expected image locations. Distinguish the MiniWorld sprite archive from its separate Character Customizer download.

Separate the unconfirmed legacy dungeon sheet into a source-matching section with dimensions, layout and a candidate package. Record its provenance requirement in the existing metadata plan and link the catalog from asset and demo documentation.

* Updates dungeon asset sources and defers new package manifests

Identify the existing dungeon sheet as Buch artwork from OpenGameArt and correct its catalog and manifest attribution while preserving image paths and grid data.

Record the two downloaded 0x72 packages and their source receipts. Ignore the local asset-downloads cache outside the recursively scanned runtime asset root, and defer unpacking, metadata inventory and one manifest per package to the long-term plan.

* Fixes formatting mistake in docs/assets/catalog.md

* Adds stateless tile animation timing resolution

Resolve tile clip cells from caller-owned elapsed milliseconds without retaining a clock or playback cursor. Use half-open frame intervals, wrap looping timelines, and hold the last cell for nonlooping clips. Reject negative time, empty clips, nonpositive durations, and total-duration overflow before lookup.

Add owner-local regression sources for boundaries, lookup order, malformed timelines, and millisecond limits, plus a neutral first-include probe. Document the timing contract and retain the remaining U10 selection work and executable acceptance in its active checklist.

* Adds a pending automated and QA testing request queue

Aggregate current tile timing, typed event, native input lifetime and resize acceptance into user-run requests with explicit Ninja configurations, focused CTest selections, and one-job target builds. Provide desktop resize and controller QA requirements, and distinguish report smoke coverage from HID lifecycle and Windows notification acceptance blocked on an observation harness.

Require agents to maintain the queue across development cycles, reconcile actual user-reported coverage, and use Ninja for user-run command-line configuration. Link the queue from the documentation index and roadmap and record the missing HID observation prerequisite without changing existing build or test authorization.

* Fixes testing request commands launched from documentation

Resolve the Git checkout root inside each automated and QA command block so source and build paths remain correct when launched from docs or another checkout subdirectory. Preserve the starting directory with Bash subshells and PowerShell location scopes, and retain explicit Ninja configuration.

Require future testing requests to establish their own working directory and provide reusable rooted demo launch blocks for desktop and controller QA.

* Fixes user-run commands to use normal priority and parallelism

Restrict resource-sharing priority and job limits to agent-run work. Remove low-priority wrappers and single-job settings from user testing requests and use the available processor count for their builds and CTest runs on Linux and Windows.

Align setup, validation and module command examples with normal-priority parallel Ninja builds while retaining directory scopes, focused test selection and existing build/test authorization requirements.

* Fixes warning-producing tile animation exception assertions

Explicitly discard cell_at results inside five exception assertions while retaining every invocation, expected exception, value assertion and the public nodiscard attribute. Require normal test builds to avoid intentional diagnostic noise and use isolated captured probes when testing compiler diagnostics themselves.

Accept the user-reported TR1 Linux Engine-only timing, typed event and consumer coverage in the owning roadmaps. Remove the completed request and add a focused TR7 incremental build and tile regression request for warning verification, preserving normal-priority parallel Ninja commands and checkout-root scopes.

* Updates Linux native input and resize acceptance scope

Accept the user-reported Linux native owner-policy and input integration cases, plus typed and legacy resize callback ordering, nested observations and failure handling. Retain the unresolved Windows, desktop-generated resize and physical HID/notification requirements in their owning plans.

Narrow TR2 to the unreported native consumer/header confirmation and shared QA build setup, removing accepted test selections. Preserve rooted normal-priority parallel Ninja commands and print a success marker after the otherwise silent consumer exits.

* Updates testing requests after Linux native acceptance

Remove completed TR2 after user confirmation of the native GLFW consumer and header probes. Repair desktop and controller QA setup references to reuse the existing Linux demo.

Record Linux native consumer acceptance in the owning roadmap and narrow outstanding native automation to Windows. Preserve desktop resize, physical HID and notification coverage as pending requests.

* Updates resize acceptance and DualSense testing prerequisites

Accept the reported Linux/X11 desktop resize, input and shutdown observations in both runtime modes. Retain Windows resize QA and preserve the reusable Linux procedure.

Record Bluetooth DualSense detection as a TR5 blocker. Document the pinned Gainput HID device-ID and retained-state mismatch and the Linux joystick mapping limit, and schedule their correction before further controller QA. Preserve the controller launch commands without requiring a repeat of accepted resize checks.

* Revises Gainput HID integration ownership and prerequisites

Clarify that the fixed logical controller ID is shared by PS4 and PS5 parsers in the pinned fork, and that Cheryl uses normal assigned device IDs and pad-state queries.

Record the missing HID compiler definition found in the existing Linux build rules. Order feature wiring before report identity, retained state and controller acceptance; qualify initialization-return limits for enabled HID.

* Adds opt-in native controller pipeline diagnostics

Trace Gainput gamepad and unresolved-device callbacks separately from the native adapter's sampled pad state. Record assigned/report IDs, initialization boundaries, availability and a one-second polling heartbeat through the existing OS-platform logger without changing input mapping.

Add the demo's --input-diagnostics option with early TRACE file configuration and rejection of stripped TRACE builds. Keep GLFW keyboard, pointer and committed-text values out of this trace.

Document the observation limits and queue TR8 for the consumer/mapper build and actual Gainput compiler-command snapshot, followed by TR9 for Bluetooth DualSense captures in both runtime modes. Retain controller and HID readiness acceptance as pending.

* Updates Linux controller integration with corrected joystick mapping

Pin the local Gainput correction for kernel button and axis translation, held-state clearing and descriptor cleanup on reconnect. Add an isolated Linux joystick runner that exercises the actual managed pad and mapper with synthetic metadata and reports, preserving ordinary owner and aggregate runners.

Reconcile the observed axis-only Bluetooth traces with the backend limits. Expand TR8 to build and accept the correction with owned static Gainput and HID disabled; update TR5 for Cross counting, mapped controls and physical reconnect. Keep HID routing and fork publication as unresolved work.

* Updates controller acceptance after confirmed button delivery

Record Bluetooth DualSense button delivery following the Linux joystick mapping correction. Retain pending counting, hold/release, runtime mode, mapped-control and reconnection checks without treating the report as automated or complete QA acceptance.

* Updates extern/gainput submodule after forking gainput for fixes

* Updates HID capability scope and platform integration requirements

Document Sony report parsing and output code separately from the unfinished normal-pad bridge. Record Windows and macOS fallback dependencies, Linux transport requirements and kernel alternatives, and the limits of battery and adaptive-trigger support.

Carry lifecycle, platform source-selection, touch routing and output timing corrections into the owning native-input plan. Preserve pending runtime acceptance and require feature scope decisions before extending Cheryl's portable input contract.

* Updates Gainput handoff pin and native-input planning links

Pin the submodule's deferred HID and adaptive-trigger handoff and link it from the native module guide. Delegate backend implementation details to that document while retaining Cheryl's owner-policy, observation and controller acceptance responsibilities.

Reconcile the plan with the existing personal-fork URL and distinguish future local revisions from authorized remote publication. Preserve all pending testing requests.

* Updates controller acceptance after Linux TR5 QA

Remove accepted Linux Bluetooth controller checks from the pending queue while retaining Windows TR5 and the unreported TR8 automated regressions. Preserve the reusable Linux report, held-input, startup and reconnection procedure in the desktop checks guide.

Align native-input planning, documented physical coverage and the Gainput handoff baseline with the user-reported QA. Update the submodule pin without treating this joystick result as USB or HID acceptance.

* Revises platform acceptance scheduling for Linux short-term work

Shelves Windows, macOS, Wayland and other platform testing in the long-term plan. Preserves Windows TR3-TR5 procedures and HID notification requirements outside the active Linux testing queue, and retains Linux HID lifecycle work independently.

Reconciles the roadmap and subject-guide links after completing the Linux typed-event and resize scope. Deferred coverage remains explicitly unaccepted.

* Adds isolated Linux HID lifecycle foundation coverage

Pins the Gainput connection-tracker and Sony startup cleanup fixes, and adds a separate real-tracker/parser runner with synthetic hidapi, udev, polling and timer fixtures. Covers path identity, removal/retry, read failure, capacity/reuse, restart and notification fallback without enabling the unfinished HID report bridge.

Batches the new runner with pending Linux joystick and mapper acceptance in TR8. Reconciles current backend limits and the owning HID plan while retaining physical-source association, connection generations and retained pad state as prerequisites for runtime activation.

Validation is limited to source review, whitespace checks, documentation links and queued shell syntax. Project builds and tests remain deferred to explicitly authorized execution.

* Revises Gainput pin to the prior detached baseline

Pins extern/gainput to d94c60fa6bd3c0538bff8991e55501fd896f8fa2 and detaches its checkout there. Preserves the newer HID lifecycle work at the existing Gainput branch tip without selecting it for Cheryl.

Reverses the dependent regression target, fixtures, testing-request expansion and source-completion claims from 9d7c106. Retains the multi-platform testing deferral from 75b1d8e and the prior Linux joystick acceptance scope.

Verifies that the staged tree matches the prior Cheryl baseline, the submodule is clean and detached, and the gitlink matches its HEAD. No builds, tests or pushes were run.

* Adds deterministic CPU tile rule selection

Sample caller-owned cell, shared-edge and shared-corner terrain with explicit boundary and diagonal policies. Return missing-rule or incomplete-neighborhood values and choose Wang variants from a fixed seeded draw over validated positive weights in definition order.

Align four-neighbor manifest and schema validation with cardinal-only directions. Add focused source regressions and a neutral public-header probe, promote U10 to short-term work, retain the deferred Gainput pin, and aggregate pending Linux acceptance in TR7. Builds and tests remain unexecuted.

* Adds simulation-time Tileset selection and submission coverage

Resolve a selected original target through its animation once using caller-owned elapsed milliseconds. Check original and resolved grid cells, reject negative time before sampling, preserve explicit selector failures and retain existing named metadata/playback interfaces.

Add phase, boundary, invalid-cell and missing-rule regressions plus resource-retaining CPU submission coverage and a Tileset first-include probe. Publish the resulting contracts, keep U10 open for user-run acceptance, and batch the new cases into TR7. No builds or tests executed.

* Adds UTF-8 scalar decoding with owned source ranges

Decode complete UTF-8 views into scalar records with original byte ranges and malformed-input flags. Apply maximal-subpart replacement without consuming valid successors; preserve NUL, BOM and noncharacter scalars, and keep byte/scalar positions separate from future grapheme and shaping clusters.

Add focused decoder source regressions and a neutral first-include probe. Start U11 with ordered encoding/font units and explicit shaping/resource boundaries, document the encoding contract, and aggregate pending Linux acceptance in TR7. Builds and tests remain unexecuted.

* Fixes STBFont fallback to follow UTF-8 scalars

Use the neutral scalar decoder for layout and callback traversal so valid multibyte characters produce one ASCII fallback each. Preserve ASCII controls, spacing, alternate-bank rejection, callback failure semantics and the deprecated FFont byte contract.

Add synthetic layout, malformed-input and retained text-packet regressions plus a neutral STBFont header probe. Reconcile encoding/docs and aggregate Linux acceptance in TR7; record the script, fallback-font and paragraph decisions required before shaped-run dependencies and atlas-generation work. No builds or tests executed.

* Adds owned Unicode font selection and embedded fallback

Snapshot ordered application files and installed families with FreeType coverage metadata. Append repository-owned licensed DejaVu Sans bytes so the initial Latin and Cyrillic alphabets and a visible replacement do not require a system font or UI module.

Record the selected bidi, wrapping and grayscale scope, add isolated font-selection regressions and a neutral header probe, and extend the pending Engine acceptance queue. Builds and tests remain unrun.

* Adds bundled fallback font redistribution notices

Track the unmodified DejaVu and Bitstream/Arev notices alongside the embedded font. The repository text-file ignore rule otherwise excludes this required license file.

* Adds shaped Unicode paragraphs with bidi and wrapping

Use private HarfBuzz and ICU services to shape accented Latin and Cyrillic, resolve paragraph and mixed-run direction, select whole-grapheme fallback and fit optional local widths. Retain owned byte/scalar cluster ranges and font snapshots with explicit overflow and replacement behavior.

Preserve legacy font APIs, add focused source regressions and a neutral layout header probe, and extend the pending Linux Engine request. Builds and tests remain unrun.

* Adds immutable Unicode glyph preparation and retained submission

Rasterize message-specific grayscale outline glyphs into cropped padded pages, deduplicate repeated glyphs and upload complete geometry/atlas generations through ResourceProvider. Preserve previous text on candidate failure and retain matching old page handles in submitted packets.

Add separate RenderedText submission without extending legacy Font APIs, focused resource/retention regression sources and a neutral header probe. Extend the pending Linux Engine acceptance request; builds and tests remain unrun.

* Adds Unicode demo previews and asynchronous text replacement

Use owned Unicode layouts and immutable glyph generations for the builtin HUD and camera label. Prepare changed text and width on a context-owned CPU worker, marshal uploads through the platform dispatcher and coalesce later changes while retaining the previous complete text.

Expose automatic, builtin-only, explicit file/family and paragraph-direction previews; encode the scalar input probe as UTF-8. Tighten collection-face and language validation, preserve grapheme boundaries across wrapped bidi lines, and queue Linux native observations alongside the batched demo build.

Reconcile source-complete U11 acceptance and defer color emoji to a possible following text batch. Static checks passed; builds, compilation and tests remain unrun.

* Adds Debug terminal and graphical developer console plans

Define a Debug-only native terminal for engine, game and module output while preserving CTest and GoogleTest reporting through the existing terminal connection. Specify closure after normal shutdown, retention after crashes, and continued application execution after manual viewer closure.

Record the routing, terminal availability, crash detection and test-viewer design boundaries that need resolving before implementation. Keep non-Debug builds on their existing output destinations and defer the built-in graphical developer console to the long-term plan.

Link the console plan from the documentation and planning catalogues and add the unresolved facilities to the todo list. Source implementation and executable acceptance remain future work.

* Adds neutral audio clips and playback contracts

Define immutable mono/stereo PCM snapshots and synchronized voice/system interfaces with explicit playback states, normalized gain and safe post-shutdown handles. Keep audio application-owned and independent of graphics/runtime adapters.

Select miniaudio as the first optional backend, defer FMOD and game-owned world/collision work, and record the ordered implementation plan. Add clip validation regressions and neutral header probes to pending Linux Engine acceptance; executable checks remain unrun.

* Adds the optional miniaudio playback backend

Pin miniaudio 0.11.25 and isolate its SDK behind Cheryl::Audio::Miniaudio with root and standalone module selection. Add bounded CPU file decode, independent retained clip voices, streamed files, native output that excludes Null, and explicit offline mixing.

Synchronize controls and ownership, preserve one-shots after handle release, rebuild voice cursors on restart, and retire native state before device teardown while retaining safe closed handles. Add device-free PCM/decode/stream/lifetime regressions, an independent consumer and public-header probe, and document pending Linux automation separately from audible acceptance.

* Adds native audio observation and owned codec fixtures

Extend the independent audio consumer with an owned twenty-second stereo stream, overlapping retained effects, terminal playback/gain controls and optional background producers. Settle producers before closing output and observe voice handles after system destruction.

Add reproducible owned FLAC/MP3 tone fixtures and source regressions for decoded channel frequencies, levels, duration and lossless PCM. Reconcile the audio plan and Linux automated/native QA requests, preserving compressed-stream, standalone, supplied-SDK and deferred platform coverage limits. Builds and engine tests remain unrun.

* Modifies organization of .cmake files

* Adds optional tile and sprite samples to the demo

Loads selected Puny World tiles and MiniWorld sprites independently, preserving demo startup when package metadata or images are missing or broken. A failed full asset batch also leaves the demo able to load available samples.

Displays static cells, authored tile timelines, four walking facings, idle and a replayable one-shot attack. Simulation-owned pause and visibility controls publish retained cell packets through separate triangle and triangle-strip materials, with paired shader reload adoption.

Documents controls and image placement, reconciles the existing Linux build request, and queues present, partial, absent and broken artwork observations using temporary roots. Records selectable sampling as separate follow-on work. Validation is limited to source, manifest/image metadata, whitespace, documentation links and command syntax; no project build, tests or native launches were run.

* Fixes bidi control source indices in Unicode text layout

Omit ICU Bidi_Control characters from HarfBuzz buffers after paragraph and line direction resolution. Keep original scalar indices and line source ranges, and preserve joiners and variation selectors for shaping.

Extend override source-range assertions and cover embeddings, isolates, direction marks, nested overrides, control-only text and ZWNJ ligature suppression. Reconcile the Unicode plan, source-mapping guide and TR7 retest scope.

Validation: git diff --check passes. Builds and tests remain deferred under repository instructions. Automated formatting review is unavailable with clang-format 22 because the repository configuration requires version 23 or newer.

* Fixes offline audio startup and silent graph rendering

Disable unused pitch processing for clip and stream voices so matching-rate PCM starts at its first frame while differing rates remain resampled. Accept successful short graph reads as silence and advance the offline clock over the full requested interval.

Cover initially empty graphs, retired voices and subsequent playback. L…
Adds an introductory link describing the API reference and game setup guides, plus an Online documentation entry in Contents.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant