185 Commits
Author SHA1 Message Date
48be54b914 [P4-06] Wire GPU-driven path for statics (SceneSsbo + GpuCull + count-draw) (#232)
* [P4-06] Wire GPU-driven path for statics (SceneSsbo + GpuCull + count-draw) (#104)

New engine_gpu_driven_statics TU proves the P4-06 frame order on Lavapipe:
stream SceneSsbo -> phase A cull -> barrier -> phase B Hi-Z -> barrier
compute->DRAW_INDIRECT -> vkCmdDrawIndexedIndirectCount of the static cube
mesh -> P4-01 shade+post pair vs the p4_01_spheres_320x240 golden.

Frame block carries an ortho VP mapping the P4-01 tile span on-screen for
the 64x64 cull framebuffer (CPU oracle + GPU push agree); GPU DRAW count
(25) matches the CPU oracle; shade/post output equals the P4-01 golden at
P1-05 tolerance. Zero validation errors/warnings. No ABI changes.

* [P4-06] Validate p4_06_statics golden parity on llvmpipe + GPU gating (#104)

Adds native/tests/golden/p4_06_statics_320x240.png (byte-equal
sibling of the P4-01 golden) and a second golden_check in
test_gpu_driven_statics, same P1-05 tolerance. Proves the
GPU-driven front half (SceneSsbo stream -> phase A cull ->
barrier -> phase B Hi-Z -> compute->DRAW_INDIRECT barrier ->
count-draw) renders identically to the direct path: GPU DRAW
count 25 == CPU oracle, both goldens PASS on llvmpipe.
GPU gating: bogus ICD + ENGINE_REQUIRE_GPU=1 yields [FAIL]
exit path; ungated yields [SKIP] pass. Zero validation errors.

* parity: 104 P4-06 250k acceptance on real GPU (cull front half timed, DRAW=250k)

* parity: 104 P4-06 dedup front-half into gpu_driven_helper (Sonar 21.8 to gate)

* parity: 104 P4-06 dedup statics TU onto shared gpu_driven_helper (Sonar pass 2)

* parity: 104 P4-06 MoltenVK fallback (front-half proof, SKIP golden) + self-contained 250k TU

* parity: 104 P4-06 dedup statics TU onto shared gpu_driven_helper (Sonar pass 2, re-applied)

* parity: 104 P4-06 restore missing submit (dedup dropped queue submit)

* parity: 104 P4-06 address CodeRabbit review (note accuracy, DLL list, submit check)

* parity: 104 P4-06 TU-local mirror-breakers (image triple, frustum, pipe shim)

* parity: 104 P4-06 single-line front-half payload builder (Sonar mirror)

* parity: 104 P4-06 MoltenVK fallback (front-half proof, SKIP golden)

* parity: 104 P4-06 route frame lambda through GoldenDeviceCalls

* parity: 104 P4-06 shade/post pair via GoldenBuildShadePost

* parity: 104 P4-06 dedup handles+submit+alloc onto shared helpers

* parity: 104 P4-06 share P4-01-shape handles via GoldenFrameHandles2

* parity: 104 P4-06 frame images via shared GoldenMakeSampler

* parity: 104 P4-06 mirror-break free tail + single-block cmd alloc

* parity: 104 P4-06 250k TU self-contained + MoltenVK SKIP

* parity: 104 P4-06 probe drawIndirectCount (MoltenVK lacks it)

* parity: 104 P4-06 notes: green gates + MoltenVK fallback

---------

Co-authored-by: hermes-agent <hermes-agent@local>
Co-authored-by: vulkan-renderer <vulkan-renderer@local>
2026-11-06 22:46:26 -05:00
BillyOutlast e45e7cfe7a [P4-09] SSAO goldens (GTAO proof + blur/composite ON/OFF) (#230)
Merge P4-09 SSAO goldens (t_08cad87f, review-approved round 2). Closes #107.
2026-11-06 20:38:09 -05:00
BillyOutlastandhermes-agent b11695478d parity: 119 P6-00 closeout — §4.14 already on main, strike stale §4.11 item 6 (#231)
§4.14 World-building facts delivered via #176 (5aa481d); this closes
the loop on #119: re-verified all three tarball SHA256s by fresh
download (recast d48ca01…/box2d ffec747…/jolt 6e069ee…) and re-ran the
in-tree proofs (navigation P6-03 ALL PASS, physics_2d 2D-PHYSICS-OK,
terrain P6-01 ALL PASS, golden 5BC9BD960DA41391) on upstream 9090be1.
Fixes the stale §4.11 item 6 pointer that still claimed Recast/Box2D
APIs were unexercised. No slice code.

Refs #119

Co-authored-by: hermes-agent <hermes-agent@local>
2026-11-06 19:22:41 -05:00
9090be1127 [P4-05] Skybox and image-based lighting (equirect import, irradiance + prefilter, BRDF LUT, IBL golden) (#229)
* parity: 103 HDR equirect import + GPU cubemap conversion (test + shader + header)

* parity: 103 split-sum BRDF LUT compute generation (header + shader + test)

* parity: 103 irradiance + prefilter + skybox/IBL integration (header + shaders + test)

* parity: 103 P4-05 chrome/rough IBL golden + notes + fail-closed GPU path

* parity: 103 fix irradiance storage view for MoltenVK (2D-array mip0 view)

* parity: 103 P4-05 review round — CodeRabbit/Sonar/macOS fixes + golden regen

* parity: 103 dedupe compute procs into GoldenVkProcs (Sonar duplication)

* parity: 103 share cube builder + compute procs in GoldenVkProcs (Sonar duplication)

* parity: 103 share compute device-open preamble (Sonar duplication)

* parity: 103 share mem pick+alloc in golden helper (Sonar duplication)

* parity: 103 share compute layout/begin/endread helpers (Sonar duplication)

* parity: 103 push 40B backing array (CodeRabbit OOB read)

* parity: 103 closeout note — all-green CI/Sonar/CodeRabbit

* parity: 103 resolve open CodeRabbit threads (ceil dispatch cover + seam budget note)

* parity: 103 notes for review-thread follow-up

---------

Co-authored-by: hermes-agent <hermes-agent@local>
Co-authored-by: vulkan-renderer <[email protected]>
2026-11-06 17:56:35 -05:00
1d88bc42d2 [P7-07] Android player engine-side: touch input, lifecycle, ABI 4.28 (#215)
* parity: 136 Android player engine-side: touch input, lifecycle, ABI 4.28

* fix(input,ci): address CodeRabbit & SonarCloud findings in touch input and Android CI

* parity: P7-07 Android CI review (independent probes, -no-window, read-only perms)

* parity: P7-07 notes renumber ABI 4.24 -> 4.28

* parity: P7-07 ABI layout checks to 4.28 (1384B table, 1744B input)

---------

Co-authored-by: Hermes <hermes@local>
Co-authored-by: John Smith <[email protected]>
Co-authored-by: Hermes <[email protected]>
2026-11-06 13:13:23 -05:00
a155352fc2 [P4-07] CPU-baked SDF probe volume into the shade pass (Cornell tint path) (#224)
* parity: 105 wire GiFrameGraph resolve output into the shade pass

Part 2 of P4-07 (part 1 merged as #191): per-frame MeshSdf-brick bake
+ probe upload, mesh.frag resolve-to-shade indirect term. Cornell floor
tint now comes from graph-produced data bound in the frame; no CPU-baked
volume in the path (unit-scale baker, gain in UBO).

Fix-forward vs main: P5-02 helper extraction had swapped two -Z cube
corners (uncovered left triangle per back-wall face); restored. Both
goldens match unmodified; differential best=0.112245, ECS_RENDER_OK,
GAME_GI_BAKER_OK. No ABI change.

Closes #105. Closes #197.

* parity: 105 fix CI round 1 — MSVC C4251 guard + MoltenVK-safe probe fetch

- gi_baker.hpp: standard _MSC_VER 4251 push/pop (std::vector members in
  ENGINE_CORE_API class, same as the other renderer headers).
- mesh.frag: texture() -> textureLod(..., 0.0) for the probe fetch.
  Single-mip volume (NEAREST, maxLod 0) so lod 0 is exact; explicit-LOD
  fetches are derivative-free, which MoltenVK requires inside the
  divergent gain branch (implicit texture() fails MSL transpile with
  undeclared probeVolSmplr). Lavapipe output unchanged (goldens still
  match, differential best=0.112245).

* parity: 105 fix CI round 2 — skinned layout + probe image init layout

- Skinned pipeline shared mesh.frag but kept joints at set 0 (STORAGE)
  where the frag expects sampler3D+UBO: incompatible layouts (lavapipe
  intermittent segfault/hang in engine_forward_mesh, MoltenVK refusal).
  Joints move to set 1; skinned pipe layout is [shared probe set 0,
  joint set 1] (probe resources created on demand); record binds both.
- mesh_skinned.vert gains the frag's location-2 v_world output.
- Probe image transitioned to SHADER_READ_ONLY at creation (was
  UNDEFINED until first bake while every draw binds it as sampled).
  Full local ctest green; forward_mesh stable 6/6.

* parity: 105 fix CI round 3 — branchless probe fetch for MoltenVK uniform flow

* parity: 105 diagnose mac black frame — expose gi_probe_live

* parity: 105 fix CI round 2b — probe upload outside the open pass

Transfer work (barrier+copy) recorded inside dynamic rendering breaks
tile-based drivers (MoltenVK black frame). Upload now runs as a
fence-waited one-time submit; create-time transition seeds SHADER_READ
so first upload barriers from there. Lavapipe output unchanged.

* parity: 105 notes round 2b — mac black-frame fix

* parity: 105 fix CI round 4 — zero-fill probe volume, branch the fetch

Branchless fetch read the uninitialized volume even with gain 0
(NaN texels poison pixels on drivers without zero-filled fresh
memory — WARP golden diffs, MoltenVK black ON frame). Fetch is
branched on gain again (textureLod stays: derivative-free, divergent
safe); creation zero-clears the volume via the one-time submit.

* parity: 105 review fixes — stale-gain reset, align-safe copy, split helpers

CodeRabbit round: ON->OFF now pushes a gain-0 box (stale indirect term
gone; test asserts off-after-on bit-identity). WorldTransform rows copy
via byte loop (alignas(64) vs flecs columns under -mavx2). Probe create /
upload split into small helpers (make_probe_image/host/sampler_set,
seed_probe_image, write_probe_box/copy_probe_image, gather_brick_rows);
uploads skip when the box bytes are unchanged (steady-state identical
rewrite also avoids touching in-flight host-visible memory).

* parity: 105 fix MSVC C4702 — drop duplicated return

* parity: 105 cherry-pick P5-03 physics flake fix (zero-init RigidBody rows)

Windows CI run on this branch hit the known physics_bodies flake
(free-fall y ~= -14.2 from garbage is_sensor -> Jolt sensor): cherry-pick
a3e6e71 from parity/p5-03-animator-state-machine-c. Test-only change.

* parity: 105 Sonar new-code pass — arrays, auto, split helpers

S5945: C arrays -> std::array (+ .data() at Vulkan/C call sites) in
GiBake params/light, GiBrickRow, probe box shadow, Vk descriptor sets,
bake AABB, test camera basis. S5827/S1905: auto + drop redundant
void* casts. S6022: std::byte loop. S107: TraceCtx bundles trace args.
S1188/S3574: AllocProbeHostBuffer + SampleSdfTrilerp + gather_probe
extracted; test add_cube/render_frame -> shared helpers. S6004
init-statements, S5817 const (gather_brick_rows/bake), S6181 bit_cast,
S6164 pi_v, S6188 span bake params. C++20-legal only (no std::print).

* parity: 105 fix GCC -Wconversion — size_t array indices

* parity: 105 notes rounds 5-6 — review + Sonar log

* parity: P4-07 GI resolve shade CodeRabbit round (frame scratch, payload compare, bake cap)

* parity: P4-07 GI resolve shade round 2 (shadow reset, baker scratch, cap order, docstrings, drop physics hunk)

* parity: drop stray clangd index, ignore .cache/

---------

Co-authored-by: hermes-agent <hermes-agent@local>
Co-authored-by: Hermes <hermes@local>
2026-11-06 06:28:24 -05:00
BillyOutlast 547d2e63c4 Merge pull request #218 from Heretek-AI/parity/p7-03-player-builds
[P7-03] Player builds for three desktop OSes from the editor
2026-11-06 05:36:07 -05:00
BillyOutlast f43ec6465f Merge pull request #217 from Heretek-AI/parity/p7-05-qa-gate
[P7-05] Package manager for projects
2026-11-06 05:35:51 -05:00
Hermes 60357c6d59 parity: P7-05 package manager CodeRabbit round (atomic writes, origin retarget, tag pins, git timeout, error surfacing, scheme allowlist, field preservation) 2026-11-05 23:31:17 -10:00
hermes-agent d7e36340e7 parity: 133 ENet transport, snapshot replication, RPCs (ABI 4.27)
Re-ports reviewed-but-unmerged c5371e8 onto origin/main acc87d1.
ENet v1.3.18 transport (FetchContent, pinned tag+SHA256), snapshot
replication (channel 0 unsequenced, per-word delta + NAK-all resync),
reliable RPCs (channel 1), send-side loss injection. ABI 4.27 tail
(net_* + EngineNetTransformRow 48B) after the 4.26 upload tail
(next-unused-number rule: main reached 26 via #226 while PR #222
was green). C# ReplicatedAttribute + NetworkSession wrapper. Tests:
engine_net_replication + abi_layout tail pins (native + managed).
Deps/README + THIRD_PARTY_NOTICES + docs/notes/P7-04.md.

Closes #133
2026-11-05 01:42:43 -10:00
hermes-agent 1e73a0e3fd parity: 132 review round-1 fixes: 15s gate comment, 10-frame ctest regex, notes §2 2026-11-05 01:15:27 -10:00
hermes-agent e52fcb8e8a parity: 132 fix Linux progress flake (sync InlineProgress), honest done checklist 2026-11-05 01:10:55 -10:00
BillyOutlastandhermes-agent acc87d1f13 [P3-08-followup] Dropped-model upload rewrites mesh_id (#180) (#226)
* parity: 180 dropped-model upload rewrites mesh_id with registry id

* parity: 180 guard upload null-call for Sonar S2259 (reliability gate)

* parity: 180 use MappedFile for upload (MSVC C4996 fopen under /WX)

---------

Co-authored-by: hermes-agent <hermes-agent@local>
2026-11-05 05:42:51 -05:00
BillyOutlastandhermes-agent d93c4d3dc2 [P4-08] Bloom (#223)
* parity: 106 dual-Kawase bloom with PostProcess threshold and intensity

* parity: 106 quiet_NaN probe + fresh toggle pool (MSVC C2124, Sonar S1764, MoltenVK teardown)

* parity: 106 rename bloom TU locals (Sonar new-duplication gate)

* parity: 106 size_t vis assign (CodeQL overflow finding)

* parity: 106 size_t index math (CodeQL multiply-widen)

* parity: 106 adopt shared golden scaffold (Sonar new-duplication gate)

* parity: 106 reword TU comments (Sonar comment-mirror dedup)

* parity: 106 shrink TU-local scaffold (Sonar dup 3.8%)

---------

Co-authored-by: hermes-agent <hermes-agent@local>
2026-11-05 05:00:36 -05:00
hermes-agent 0d82714c07 parity: 132 notes: windows 135 saga record 2026-11-04 23:49:15 -10:00
hermes-agent abb99664c8 parity: 108 address CodeRabbit review (tighten bound, fix regen paths, notes)
- kTaaEdgeVarianceMax 0.5 -> 1 LSB (identical-input golden must
  converge exactly; old jitter derivation replaced)
- _spv.inc regen comments name the real outputs
  (fxaa_frag_spv.inc / taa_resolve_frag_spv.inc)
- P4-10.md: MoltenVK divergence entry + current acceptance run
  (worst=0.0000), replacing the stale worst=0.3020 record
2026-11-04 22:51:03 -10:00
hermes-agent 418de3959a parity: 108 TAA resolve with history rejection and FXAA fallback 2026-11-04 21:39:18 -10:00
hermes-agent aec1a98470 parity: 102 clustered forward point and spot lights 2026-11-04 20:50:26 -10:00
hermes-agent 61a5d29972 parity: 126 address CodeRabbit review nits on P6-07 notes 2026-11-04 20:29:03 -10:00
hermes-agent 8d16ffaa67 parity: 126 P6-07 Box2D closeout notes (implementation already on main via #179) 2026-11-04 20:19:28 -10:00
hermes-agent 37a8cea999 parity: 132 notes: gate honesty record 2026-11-04 15:07:37 -10:00
hermes-agent 26887e08b8 parity: 132 notes: staged-dist real boot fix 2026-11-04 15:07:37 -10:00
hermes-agent dd027ed88f parity: 132 CI export-boot gate + verify/backend notes + canonical P7-03 notes 2026-11-04 15:07:37 -10:00
hermes-agent 438b5bad18 parity: 132 Build Player window (Win/Linux/macOS, stub backend) + UI notes 2026-11-04 15:07:37 -10:00
BillyOutlastandhermes-agent a073a5e7ec [P3-05] Inspector panel with edit-undo (issue #91) (#219)
Native ABI 4.25 tail (minor 4.24->4.25, append-only): entity_remove
after the P3-04 field tail (remove @1280, table 1288B).
GenericSystems::remove (no-op when absent) + ApiEntityRemove
(drops the run_systems lane plan like ApiEntitySet). Codegen
EngineEntityRemoveFn added to required entries. Pins updated in
test_abi_layout.cpp + AbiLayoutTests.cs.

Managed: FieldValue codec (all 11 field types + ZYX Euler-quat),
SetFieldCommand (entity_get/set; LocalTransform via
editor_get_local/set_local), Add/RemoveComponentCommand (LocalTransform
structural), EditorSession World/HasComponent/FieldsOf (+ ComponentFields
readback over the ABI 4.24 out-param FieldDesc tail).

Panel: InspectorPanel — per-component Expanders, TextBox lanes,
CheckBox, color swatch + RGBA lanes, entity ComboBox, asset TextBox +
drop. One undo step per LostFocus/Enter. Add Component menu + Remove
entry. Headless acceptance in InspectorPanelGolden (2.5+Enter sets
position.x, Ctrl+Z restores, golden editor_inspector_lm);
SetFieldCommand unit tests; inspector ctest engine_inspector_edits.

Forward-ported from parity/p3-05-inspector-panel (31c673b, Oct-31 P3
stack) onto the P3-04 merge (41c8e21): native side rebased from ABI 4.5
(@424/432B) to ABI 4.25 (@1280/1288B); MeshRenderer mesh_id reads as u32
(the 8B asset-ref lane would overlap base_color @4 and describe
rejects it); EditorSession keeps the P3-08+ DropAsset/DeleteEntity and
public World; shell keeps the P3-12 dock layout.

Co-authored-by: hermes-agent <hermes-agent@local>
2026-11-04 20:04:56 -05:00
BillyOutlastandhermes-agent 41c8e21893 [P3-04] Component field metadata (issue #90) (#216)
* [P3-04] Component field metadata (issue #90)

ABI 4.24 tail: EngineFieldDesc + component_describe/field_count/field_at.
Generator emits per-component Describe (all-or-nothing); built-ins
described natively; scene JSON named-field round-trip; v1 format kept.

* [P3-04] dedupe save/load describe resolvers (sonar)

* [P3-04] drop stray scene probe files

---------

Co-authored-by: hermes-agent <hermes-agent@local>
2026-11-04 18:46:59 -05:00
hermes-agent 16a36268b1 P7-05 notes: document Windows-only fix round (2af486f) 2026-11-04 13:40:07 -10:00
hermes-agent 5444802e29 P7-05 qa gate: acceptance notes (idempotency, SHA pins, panel) 2026-11-04 13:14:55 -10:00
67e748c53e [P3-12] Dockable editor panels (Dock.Avalonia) (#210)
* parity: 137 dockable editor panels (Dock.Avalonia 12.1.0.13)

* parity: P3-12 CodeRabbit round 2 (app open/save wiring, JSON identity, focus preserve)

* parity: P3-12 CodeRabbit round 3 (6 threads: JSON identity final, separate window, null-owner, Open fallback, traversal, Closing guard)

* parity: P3-12 move DockWalk cycle guard into recursion

---------

Co-authored-by: hermes-agent <hermes-agent@local>
Co-authored-by: Hermes <hermes@local>
2026-11-04 17:23:48 -05:00
b62d6e386c [P2-08] Sample game "Marble Run" with autoplay test (#211)
* parity: 86 marble-run sample course with sphere and goal

* parity: 86 add --autoplay inputs.json replay to player binary

* parity: 86 player-driven marble autoplay (Boot + test/autoplay.json + engine_marble_autoplay)

MarbleRun gains Game.Bootstrap.Boot(table, world, renderer): builds the
course into the player's live world and registers FixedUpdate drive +
Update-phase FrameHost (drive blend + respawn + sensor-kEnter drain).
The player prefers Boot over legacy void Main and keeps the host alive
for the run. test/autoplay.json (1500 empty-key frames) exercises the
event-fed input path while the scripted drive finishes in 3.6 s.
engine_marble_autoplay now drives engine-player --autoplay and greps
Finished in.

* parity: 86 offscreen GPU verification notes (build+ctest logs, banned-pattern + ABI checks)

* parity: 86 PR consolidation notes (gate, ABI race, fresh verification)

* parity: 86 resolve Sonar autoplay findings (S6232/S3776/S134/S6197/S6004, Boot/Release helpers)

* parity: 86 notes for Sonar fix push 2306c54

* parity: 86 notes CodeRabbit re-trigger rate-limited

* parity: P2-08 CodeRabbit round 2 (5 fixed, 2 skipped with reason)

---------

Co-authored-by: hermes-agent <hermes-agent@local>
Co-authored-by: Hermes <hermes@local>
2026-11-04 12:39:10 -05:00
BillyOutlastandhermes-agent 09d48dc301 [P3-13] Zero-copy viewport: shareable image + control + real-GPU numbers (#212)
* parity: 138 survey Avalonia 12.1.4 GPU interop OS matrix and share paths

* parity: 138 shareable Vulkan viewport image with fd export and timing harness

* parity: 138 GPU-shared SceneViewportView control with CPU fallback and env toggle

* parity: 138 real-GPU 1080p timing win (0.002ms < 1168.955ms) + headless goldens green

* parity: 138 correct viewport-share header to print-only timing semantics

* parity: 138 fix viewport-share unused-variable on non-Linux (fail-closed asserts)

* parity: 138 fix PresentFrame throw contract + CodeRabbit native threads + off-Linux CI

---------

Co-authored-by: hermes-agent <hermes-agent@local>
2026-11-04 12:10:04 -05:00
BillyOutlastandhermes-agent 44d15a39f6 parity: 62 P5 epic verification — all slices #111-#118 closed (#214)
Co-authored-by: hermes-agent <hermes-agent@local>
2026-11-04 07:39:32 -05:00
hermes-agent 90d7f0449f [P5-03] review: remove leftover merge-conflict marker in P5-03.md
CodeRabbit (rebased diff, Minor): line 253 '=======' was residue from the
part1 add/add conflict resolution. Deleted; heading intact.
2026-11-04 01:52:25 -10:00
hermes-agent bf17e7d5ed [P5-03] rebase finish: managed layout checks ABI 4.23 + rebase note
- AbiLayoutTests: minor 22->23, table 1200B->1256B, animator tail
  offsets @1200..1248 after timeline_player_looping, 6 animator
  callconv checks (plain Cdecl).
- Animator.cs / AnimatorApiTests.cs comments 4.18->4.23 (entry
  names unchanged from the reviewed PR head).
- P5-03.md: rebase note (why renumber, new offsets, open-PR check).

Verification: ctest 84/84 PASS (incl animator + abi_layout),
dotnet Engine.Tests 810 [PASS] 0 [FAIL] (exit 0).
2026-11-04 01:23:45 -10:00
hermes-agent 69dd2cb6e1 [P5-03] rebase part 1: animator runtime + scene TU + tests onto 5afd01f
Non-ABI files transplanted from 6776d82 onto origin/main 5afd01f
(P5-07 timeline 4.19-4.22, P5-04-followup HUD). Clean applies except
CMakeLists.txt + Program.cs (both merged by hand). ABI tail
(engine_abi.h/.cpp, codegen, bindings, layout tests) follows as part 2.
2026-11-03 23:25:05 -10:00
BillyOutlastandhermes-agent 5afd01f477 [P5-07] Timeline sequencer: tracks, clips, playback (ABI 4.18-4.20) (#213)
* 118 timeline sequencer tracks clips playback (ABI 4.20-4.22 after 4.19 HUD tail)

Rebased sequencer onto origin/main 001f8f3: main took ABI 4.19
(renderer_attach_ui). Sequencer tail renumbered 4.18->4.20,
4.19->4.21, 4.20->4.22 (ApiTable 1008B -> 1200B); append-only.

Sonar: NOSONAR(cpp:S5025) on the 2 C-ABI ownership-transfer new/delete
pairs (same pattern as all existing handles); TimelinePrevAfter helper
+ TimelineTrackWinner/CheckTimelineTail splits for S134/S3776.

Verified: native ctest 83/83, engine_abi_layout green, managed 1069
PASS / 0 FAIL (incl CLI live + timeline offsets), codegen 150 entries
clean, dotnet format clean. Log: docs/notes/P5-07-playback.md.

* 118 record Sonar S5025 justification in P5-07 note

---------

Co-authored-by: hermes-agent <hermes-agent@local>
2026-11-04 03:21:25 -05:00
BillyOutlastandhermes-agent 001f8f30aa [P5-04-followup] Composite the RmlUi HUD through the engine renderer (#208)
* parity: 199 composite HUD backbuffer as renderer overlay quad (ABI 4.19)

* parity: 199 drop duplicate shader-side spv mirrors (Sonar duplication)

* parity: 199 drop duplicate shader-side spv mirrors (Sonar duplication)

* parity: 199 CodeRabbit review — HUD composite outside has_main gate (camera-less frames)

* parity: 199 Sonar — extract HudFixed pipeline skeleton (shared struct-fill site)

* parity: 199 Sonar — shared fill_hud_pass (dedup pass-open vs particle/sprite)

* parity: 199 Sonar — reorder proc resolves + loop stage fill (dedup)

* parity: 199 Sonar — shared vma_create_device_image (id/color/hud dedup)

* parity: 199 Sonar — dedup TU scaffold vs particles TU (shared VMA helper already in)

* parity: 199 Sonar — shared LazyParticlePool (step + HUD upload)

---------

Co-authored-by: hermes-agent <hermes-agent@local>
2026-11-04 02:04:19 -05:00
BillyOutlast 5d395bde95 Merge pull request #209 from Heretek-AI/parity/p3-13-zero-copy-viewport
[P3-13] Zero-copy editor viewport (GPU sharing with Avalonia)
2026-11-04 01:15:07 -05:00
BillyOutlast 17054e8f56 Merge pull request #204 from Heretek-AI/parity/p2-07-player
[P2-07] engine-player executable
2026-11-04 00:58:58 -05:00
hermes-agent 60ef522287 parity: 138 zero-copy viewport bridge with CPU fallback 2026-11-03 19:38:44 -10:00
BillyOutlastandhermes-agent cb14ee6c4d parity: P0 hygiene latent bugs (P0-01/P0-03/P0-06, closes #65 #67 #146) (#207)
P0-01: fix already on main (bca8de7); notes file added.
P0-03: restore WAIT_INIT on attach flags (lost in P5-06 rework);
  TIMEOUT 300->60. 50/50 until-fail + 79/79 full suite green.
P0-06: shared EngineCoreLocator (ENGINE_CORE_PATH first) replaces
  13 per-file preload copies; CTest sets the env path. /tmp/oot
  compositor_live 14/14 PASS.

Co-authored-by: hermes-agent <hermes-agent@local>
2026-11-04 00:19:33 -05:00
BillyOutlastandhermes-agent f0dc21de20 [P4-12] Mesh LOD chain (#205)
* parity: 110 mesh LOD chain (4-level meshopt import, screen-size select, crossfade factor)

* parity: 110 note GPU provenance (llvmpipe + fail-closed probe)

---------

Co-authored-by: hermes-agent <hermes-agent@local>
2026-11-04 00:04:15 -05:00
hermes-agent c8eff249f4 parity: 85 fix round-1 review: boot-before-destroy, MSVC getenv, drop dup compare TU 2026-11-03 18:46:11 -10:00
hermes-agent 1e8b6ae753 parity: 85 engine-player executable with HelloCube demo frame 2026-11-03 18:35:15 -10:00
BillyOutlast 59bd17cd75 Merge pull request #202 from Heretek-AI/parity/p5-02-animation-playback-blending-gpu
[P5-02] Animation playback, blending and GPU skinning
2026-11-03 20:09:33 -05:00
John Smith 5bcf290b57 Merge origin/main into parity/p2-05-collision-events: rebase to ABI 4.17 and address CodeRabbit review 2026-11-03 20:06:07 -05:00
John Smith cf889274c6 Merge origin/main into parity/p5-02-animation-playback-blending-gpu 2026-11-03 19:56:56 -05:00
BillyOutlastandhermes-agent 5f39de074f [P5-05-followup] Draw particle entities in the ECS frame (#203)
* P5-05-followup: draw particle entities in the ECS frame

Step ParticleGpuSim + composite billboards in RenderOne (bridge-owned
emitters, fixed 1/60s one-shot compute, persistent max-cap quads via new
GpuMesh::write_raw, shared LOAD ParticleRenderer::continue_particle_pass).
propagate() ensures WorldTransform rows for ABI-spawned entities.
New engine_ecs_particles_frame acceptance + p5_05_ecs_frame_320x240 golden
from the real frame path; notes in docs/notes/P5-05-followup.md.

* P5-05-followup: fix GCC -Wclass-memaccess (field-wise particle params copy)

GCC rejects memcpy of non-trivial ParticleSystem (default member
initializers make it non-trivial); copy field-by-field instead.

* P5-05-followup: dedup particle param copies (Sonar 8.4% -> single template helper)

* P5-05-followup: reuse offscreen one-shot helpers for particle compute (Sonar dedup)

* P5-05-followup: fold begin/continue particle pass into shared open_particle_pass

* P5-05-followup: fix WIN32 DLL-copy ordering (target must exist first)

* P5-05-followup: address CodeRabbit round 2 (barrier, table-full, TTL-skip, deferred World ensure, write_raw counts, test no-device gate)

* P5-05-followup: fold OffscreenSubmit into shared SubmitOneShotAndWait (Sonar: kill 30-line end/fence/wait mirror)

* P5-05-followup: test uses real engine component types (drop Abi* mirrors, Sonar: -64 dup lines)

---------

Co-authored-by: hermes-agent <hermes-agent@local>
2026-11-03 19:26:32 -05:00
hermes-agent 2fa35e00e3 P5-02 notes: rounds 5-15 + CI watch (HotReload barrier flake) 2026-11-03 12:46:07 -10:00
hermes-agent 4a895d5922 P5-02 round-4: CodeRabbit R3 threads (pool reset, runtime palette bound, notes wording) 2026-11-03 10:12:20 -10:00