acdream/tests/AcDream.Core.Tests
Erik 39fc0372a3 fix(test): A6.P3 slice 1 T5 — redesign test to actually catch synthesis regression
Code-review feedback on commit 5f7722a: the test was gamed —
placing the sphere exactly on the floor (worldPosZ = floorZ) made it
pass regardless of whether synthesis was present. With sphere center at
Z=0.48 (= floorZ + SphereRadius), PolygonHitsSpherePrecise's distance
guard fires immediately (|dist|=0.48 > rad=0.478) and
TryFindIndoorWalkablePlane returns false even WITH synthesis code. The
test would have passed even if the strip were reverted.

Redesign: restore worldPosZ = floorZ - 0.05f (sphere center at Z=0.43).
Now |dist|=0.43 < rad=0.478 → the guard passes → TryFindIndoorWalkablePlane
finds the floor polygon → synthesis would fire → CP writes every frame.
Path 5 (Contact branch) is not a concern: the loop moves only in X so
movement = (0.001, 0, 0), Dot(movement, floor_normal=(0,0,1)) = 0 ≥ 0 →
PosHitsSphere front-face cull rejects the floor hit even with sphere
center below the floor. Path 5 returns OK with zero CP writes. Contact
flag is left set to keep the test on the realistic grounded-mover path.

Validated locally by temporarily re-introducing the synthesis call —
test fails with 60 writes (1 per frame) pre-strip, passes with 0
additional writes post-strip. Now a real regression sentinel.

1148 pass + 8 pre-existing fail baseline maintained.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 09:28:16 +02:00
..
Allegiance feat(allegiance): Phase H.2 AllegianceRequests + AllegianceTree model 2026-04-18 17:17:45 +02:00
Audio feat(audio): Phase E.2 OpenAL engine + SoundTable cookbook + hook wiring 2026-04-18 16:38:26 +02:00
Chat fix(chat): /help client-side handler + System dedup + ThatIsNotAValidCommand template 2026-04-25 21:22:07 +02:00
Combat feat(combat): Phase L.1c wire live attack input 2026-04-28 11:58:57 +02:00
Input fix(camera): #38 render-interpolate player motion 2026-05-06 17:53:34 +02:00
Items feat(items): Phase F.2 ItemRepository + AppraiseRequest round-trip 2026-04-18 16:55:36 +02:00
Lighting feat(lighting): Phase G.2 — Setup.Lights + SetLightHook wiring 2026-04-19 10:46:49 +02:00
Meshing feat(vfx #C.1.5b): SetupPartTransforms helper for per-part anchor transforms 2026-05-11 23:54:33 +02:00
Physics fix(test): A6.P3 slice 1 T5 — redesign test to actually catch synthesis regression 2026-05-22 09:28:16 +02:00
Player feat(player): #5 PlayerDescription parser — Stam/Mana via attribute block 2026-04-25 16:42:24 +02:00
Plugins feat(core): add IGameState, IEvents, WorldEvents with replay-on-subscribe 2026-04-10 20:29:29 +02:00
Rendering chore(O-T7): code-review housekeeping after WB extraction 2026-05-21 17:29:06 +02:00
Selection test(picker): Cluster A #86 — screen-rect cell-occlusion tests 2026-05-19 14:56:51 +02:00
Spells fix(player): EnchantmentMask bit fix + Vitae key=0 + absolute Vitals overlay 2026-04-25 18:15:20 +02:00
Streaming feat(vfx #C.1.5b): GpuWorldState fires activator for dat-hydrated entities 2026-05-12 00:07:38 +02:00
Terrain fix(O-T7): actually delete SplitFormulaDivergenceTest (drop workaround) 2026-05-21 17:30:30 +02:00
Textures feat(O-T2): extract pure stateless helpers to AcDream.Core.Rendering.Wb 2026-05-21 15:13:26 +02:00
Ui fix(retail): rotation rate, useability gate, retail toast strings 2026-05-16 12:17:54 +02:00
Vfx fix(vfx #56): ParticleHookSink applies CreateParticleHook.PartIndex transform 2026-05-11 23:57:20 +02:00
World fix(world #53): namespace stab Ids globally for Tier 1 cache safety 2026-05-10 20:07:19 +02:00
AcDream.Core.Tests.csproj fix(O-T7): actually delete SplitFormulaDivergenceTest (drop workaround) 2026-05-21 17:30:30 +02:00
SmokeTest.cs chore: phase 1 — add Core, Abstractions, App, Tests projects 2026-04-10 09:22:33 +02:00