test: replace campaign labels with behavior names

This commit is contained in:
Erik 2026-08-18 12:25:00 +02:00
parent e6fab96f12
commit 9c6b143a03
30 changed files with 135 additions and 97 deletions

File diff suppressed because one or more lines are too long

View file

@ -136,7 +136,7 @@ identifiable in the lane report.
| T-013 controller self-comparison | high-confidence cleanup batch A | Capture the first controller next to the first body and compare every retry with that reference. |
| T-014 seven load-sensitive tests | six mechanisms repaired in batch F; one product defect classified | Virtual/wall-clock mixing, tiered-JIT allocation noise, a live controller clock, and a ThreadPool-start timing oracle were removed without weakening behavioral contracts. `DatSoundCache` #321 is a real in-flight-entry race and now runs as `Status=KnownFailure` pending a product fix. |
| T-015 four non-prerequisite skips | resolved in batches A/B | PVS scaffold deleted with rationale preserved; redundant chat/radar generators deleted in favor of the comprehensive Manual lane; tower oracle is `Status=KnownFailure`. |
| T-016 historical test taxonomy | open | Rename/re-home only after each test's durable owner and oracle are established. |
| T-016 historical test taxonomy | first descriptive-identity batch active in batch J | Remove opaque AP/R/J/K/Slice codes from current test/type names while preserving provenance in comments and ledgers. The 47 `Issue###` files remain an explicit user-decision set because their IDs still connect tests to retail evidence. |
| T-017 Avalonia ownership | reopened and closed in batch D | The full gate exposed the same compositor ownership class between six newer `MainWindowViewTests` facts. Their six named assertion phases now run in one owned Avalonia application session; 25 fresh-process stress iterations and the complete gate pass. |
| T-018 stderr observer race | resolved in R2 | Live reader shares writes/deletes; 25 focused repetitions plus the complete gate. |
| T-019 remaining explicit waits | classified in batch H; nine fixed-delay negative oracles need cleanup | Five of the 38 methods are deterministic cancellation stubs, not wall-clock tests. Preserve four intentional real-time contracts and bounded integration polling; replace the nine tests that infer “still blocked” from a fixed delay with observable synchronization state. |
@ -465,7 +465,7 @@ of three dispositions:
| Disposition | Methods | Owning test files |
|---|---:|---|
| Campaign-era implementation-shape freeze; replace in stages | 46 | `ContentEffectsAudioCompositionTests`, `FrameRootCompositionTests`, `HostInputCameraCompositionTests`, `InteractionRetainedUiCompositionTests`, `LivePresentationCompositionTests`, `SessionPlayerCompositionTests`, `WorldRenderCompositionTests`, `GameWindowLiveSessionOwnershipTests`, `GameWindowRenderLeafCompositionTests`, `GameWindowSlice8BoundaryTests`, `ResourceCleanupGroupTests`, `RetailPViewPassExecutorTests`, `WorldRenderFrameBuilderTests`, `WorldSceneRendererTests`, `LandblockBuildOriginTests`, `LandblockPhysicsPublisherTests`, `LandblockRenderPublisherTests`, `GameWindowLiveEntityCompositionTests`, `UpdateFrameOrchestratorTests` |
| Campaign-era implementation-shape freeze; replace in stages | 46 | `ContentEffectsAudioCompositionTests`, `FrameRootCompositionTests`, `HostInputCameraCompositionTests`, `InteractionRetainedUiCompositionTests`, `LivePresentationCompositionTests`, `SessionPlayerCompositionTests`, `WorldRenderCompositionTests`, `GameWindowLiveSessionOwnershipTests`, `GameWindowRenderLeafCompositionTests`, `GameWindowHostBoundaryTests`, `ResourceCleanupGroupTests`, `RetailPViewPassExecutorTests`, `WorldRenderFrameBuilderTests`, `WorldSceneRendererTests`, `LandblockBuildOriginTests`, `LandblockPhysicsPublisherTests`, `LandblockRenderPublisherTests`, `GameWindowLiveEntityCompositionTests`, `UpdateFrameOrchestratorTests` |
| Whole-tree architecture policy; retain, then make syntax/metadata-aware | 12 | `LinuxPlatformBoundaryTests`, `RenderSceneArchitectureTests`, `RuntimePhysicsOwnershipTests`, `RuntimeEntityOwnershipTests` |
| Source/project/artifact text is the actual cross-artifact contract; retain | 5 | `ParticleBindlessInstanceTests`, `PerformanceToolsTests`, `LauncherProjectBoundaryTests` |
@ -496,3 +496,45 @@ text is appropriate there.
No source-freeze fact is removed in this classification batch. The 46 staged
facts are an ambiguous architecture decision and will be presented for user
approval in behavior-owner groups rather than deleted from a numeric heuristic.
## Batch J descriptive test identities
The first T-016 naming batch changes no oracle or production behavior. It
renames eight opaque type/file identities and fifteen test methods whose AP,
R, J, K, C3c, or Slice labels described the implementation campaign rather
than the contract a maintainer needs to find:
| Former identity family | Durable identity |
|---|---|
| `GameWindowSlice8BoundaryTests` | `GameWindowHostBoundaryTests` |
| `Ap10WaterSemanticsTests`, `Ap71EntryRestrictionGateTests`, `Ap155StaticSpherePopulationMeasurementTests`, `Ap157SortingSphereFloodMeasurementTests` | `WaterSemanticsTests`, `EntryRestrictionGateTests`, `StaticSpherePopulationMeasurementTests`, `SortingSphereFloodMeasurementTests` |
| `ConnectedR6SoakContractTests` | `ConnectedWorldSoakRouteContractTests` |
| `C3cR1F3DriftModelSourcePinTests` | `CreateAuthorityDriftModelSourcePinTests` |
| `R5Host` / `R5ManagerHarness.cs` | `PhysicsObjHostStub` / `PhysicsManagerHarness.cs` |
| J4/J5 Runtime methods | gameplay-view, gameplay-command, checkpoint, simulation, and ownership-ledger names |
| K4/Slice-L/K1c/J9 methods | multi-session profile, unsupported-platform explanation, legacy keymap difference, and stop-speed behavior names |
| AP-135/AP-195 method names | placement-bookkeeping and authored-LED-sprite names |
Provenance is not discarded. AP-157 remains the row key in the retail
divergence register, the connected route keeps its established artifact name,
and historical audit/plan documents retain the old identifiers. Current
cross-references and test comments point to the new descriptive names. The
source-freeze class summary now states its R3 replacement status instead of
claiming to be a temporary Slice 8 checkpoint.
This batch intentionally does not rename the 47 `Issue###` files. Their
descriptive suffixes are often useful, and the issue number can be the shortest
path to a retail trace or reproduction. Re-homing those contracts by component
while retaining `Issue` provenance is an architecture/taxonomy choice for user
approval, not a mechanical cleanup.
Verification before the complete gate:
- all 44 maintained projects build in Release with 0 warnings and 0 errors;
- 102 focused App cases, 203 Core cases, 17 Runtime cases, 5 Headless cases,
1 Launcher.Core case, and 10 UI.Abstractions cases pass; and
- the renamed installed-DAT population measurement passes 1/1 against the
local retail DAT.
The no-retry complete hermetic Release gate passed 14,391/14,391 with zero
skips or failures across all 12 test assemblies.

View file

@ -115,7 +115,7 @@ internal sealed class FramebufferResizeController
// the only trace of whether the native event fired at all). Lives here
// rather than in GameWindow.OnFramebufferResize because the window
// callback is contractually a one-line typed-owner handoff
// (GameWindowSlice8BoundaryTests.FramebufferResize_IsOneTypedOwnerHandoff).
// (GameWindowHostBoundaryTests.FramebufferResize_IsOneTypedOwnerHandoff).
Console.WriteLine($"window: framebuffer resize event {width}x{height}");
// Frozen order: GL viewport, shared aspect publication, camera, then

View file

@ -651,7 +651,7 @@ public sealed class RuntimeCharacterOptionsState
/// <c>480.0</c> (wire research §3.3): the batched module flushes 480
/// seconds after it FIRST went dirty, not after the last change. A
/// property (not a field) so this type keeps zero static mutable state
/// — see <c>GameRuntimeContractTests.J4GameplayOwnersHaveNoStaticMutableSessionState</c>.
/// — see <c>GameRuntimeContractTests.GameplayOwnersHaveNoStaticMutableSessionState</c>.
/// </summary>
public static TimeSpan AutoSaveDelay => TimeSpan.FromSeconds(480);

View file

@ -1,6 +1,6 @@
namespace AcDream.App.Tests.Diagnostics;
public sealed class ConnectedR6SoakContractTests
public sealed class ConnectedWorldSoakRouteContractTests
{
private static readonly string[] ExpectedCheckpointNames =
[

View file

@ -310,7 +310,7 @@ public sealed class LiveEntityNetworkOnPositionCollapseMatrixTests
[Theory]
[InlineData(PlayerGuid)]
[InlineData(CreatureGuid)]
public void WireAirborneNullClassified_BothGuids_WritesOnlyAP135Bookkeeping(
public void WireAirborneNullClassified_BothGuids_WritesOnlyPlacementBookkeeping(
uint guid)
{
using var fixture = new Fixture(guid, nullClassification: true);
@ -334,8 +334,7 @@ public sealed class LiveEntityNetworkOnPositionCollapseMatrixTests
// lazily created only on a genuine arm).
Assert.Null(host.PositionManager.Constraint);
// Positive half (round-2 B1's lesson): AP-135's two writes DID
// happen.
// Positive half: the placement bookkeeping writes did happen.
Assert.Equal(SourceCell, fixture.Remote.CellId);
Assert.Equal(wirePos, fixture.Remote.LastServerPos);
Assert.NotEqual(0d, fixture.Remote.LastServerPosTime);
@ -346,7 +345,7 @@ public sealed class LiveEntityNetworkOnPositionCollapseMatrixTests
[Theory]
[InlineData(PlayerGuid)]
[InlineData(CreatureGuid)]
public void AirborneNoOperation_BothGuids_WritesOnlyAP135BookkeepingNoArm(
public void AirborneNoOperation_BothGuids_WritesOnlyPlacementBookkeepingNoArm(
uint guid)
{
using var fixture = new Fixture(guid);
@ -933,7 +932,7 @@ public sealed class LiveEntityNetworkOnPositionCollapseMatrixTests
// IsConstrained rather than nulling the manager back out (it was
// lazily CREATED by the ConstrainTo test-setup call above, and
// creation is one-way) — this is the exact discriminator
// WireAirborneNullClassified_BothGuids_WritesOnlyAP135Bookkeeping's
// WireAirborneNullClassified_BothGuids_WritesOnlyPlacementBookkeeping's
// own comment names ("Constraint is lazily created only on a
// genuine arm").
Assert.NotNull(host.PositionManager.Constraint);

View file

@ -8,7 +8,7 @@ namespace AcDream.App.Tests.Rendering;
/// of an exception that escaped <c>Run()</c>'s Silk.NET frame loop and was
/// about to crash the process via the CLR's unhandled-exception path.
/// <c>GameWindow</c> cannot be constructed without a live GPU/window (see
/// the established pattern in <c>GameWindowSlice8BoundaryTests</c>), so
/// the established pattern in <c>GameWindowHostBoundaryTests</c>), so
/// this pins the fix as a source-shape test exactly like that file does
/// for the surrounding shutdown machinery.
/// </summary>

View file

@ -1,12 +1,11 @@
namespace AcDream.App.Tests.Rendering;
/// <summary>
/// Temporary source-shape freeze for the Slice 8 cutover. Each later checkpoint
/// replaces the corresponding assertion with functional tests on the extracted
/// owner; this file prevents a mechanical move from silently reordering host
/// behavior before that owner exists.
/// Source-level architecture guards for the narrow graphical-host composition
/// boundary. R3 tracks these literal source-shape checks for staged replacement
/// with semantic owner and lifecycle contracts.
/// </summary>
public sealed class GameWindowSlice8BoundaryTests
public sealed class GameWindowHostBoundaryTests
{
[Fact]
public void Run_PreservesNativeAttributeAndCallbackOrder()
@ -18,9 +17,8 @@ public sealed class GameWindowSlice8BoundaryTests
"RuntimeSettingsSnapshot startup = _runtimeSettings.Startup",
"_displayFramePacing.InitializeStartup(startup.Display.VSync)",
"VSync = startupPacing.UseVSync",
// Campaign V slice V11: the raw-GL "Samples = ..." window option
// is gone — Vulkan takes MSAA as an RHI attachment property, not
// a window attribute. _startupQuality carries it forward instead.
// Vulkan takes MSAA as an RHI attachment property rather than a
// window attribute. _startupQuality carries it forward instead.
"_startupQuality = startup.Quality;",
"Window.Create(options)",
"_displayFramePacing.BindSurface(",

View file

@ -83,7 +83,7 @@ public sealed class LiveEntityCreateSupersessionRecoveryTests
// covered.
// C3c-R1 F3: honest MODEL of the executor drain's advance
// (ApplyWeenieDescriptionAction — the sole production site,
// source-pinned by C3cR1F3DriftModelSourcePinTests); a
// source-pinned by CreateAuthorityDriftModelSourcePinTests); a
// nested production OnCreate can no longer reach it —
// post-residence registration is description-only
// (RuntimeEntityObjectLifetime :660-665,

View file

@ -463,7 +463,7 @@ public sealed class CurrentGameRuntimeAdapterTests
}
[Fact]
public void AdapterBorrowsExactJ4ViewsAndCheckpointState()
public void AdapterBorrowsExactGameplayViewsAndCheckpointState()
{
using var harness = new Harness();
harness.Character.Options.Replace(0x04000000u, 0x00948700u);
@ -502,7 +502,7 @@ public sealed class CurrentGameRuntimeAdapterTests
}
[Fact]
public void J4StateCommandsAreGenerationGatedAndReachCurrentTransport()
public void GameplayStateCommandsAreGenerationGatedAndReachCurrentTransport()
{
using var harness = new Harness();
var trace = new RuntimeTraceRecorder();
@ -668,7 +668,7 @@ public sealed class CurrentGameRuntimeAdapterTests
}
[Fact]
public void GraphicalAndNoWindowJ4CommandsProduceIdenticalCanonicalState()
public void GraphicalAndNoWindowGameplayCommandsProduceIdenticalCanonicalState()
{
using var directEntities = new RuntimeEntityObjectLifetime();
using var directInventory =

View file

@ -276,9 +276,9 @@ public sealed class ChatOptionsPageControllerTests
}
[Fact]
public void Bind_FilterBlocks_ResolveTheAP195LedSprites()
public void Bind_FilterBlocks_ResolveTheAuthoredLedSprites()
{
// AP-195 end-to-end: the regenerated fixture now carries dat properties
// The regenerated fixture carries DAT properties
// 0x10000082/0x10000083 on template consumer 0x10000520
// (0x06004D17/0x06004D19), and DatWidgetFactory threads them into the
// constructed UiCheckboxBitfield64 — every one of the five blocks shares

View file

@ -3,8 +3,7 @@ using System.Text.RegularExpressions;
namespace AcDream.App.Tests.World;
/// <summary>
/// C3c-R1 F3 (coordinator resolution, 2026-08-02): the create-authority
/// drift probes in the expectation-item 6/8 tests
/// The create-authority drift probes in the expectation-item 6/8 tests
/// (LiveEntityHydrationControllerTests + LiveEntityCreateSupersessionRecoveryTests)
/// hand-call <c>record.Canonical.AdvanceCreateAuthority()</c> as an HONEST
/// MODEL of the executor drain's advance — the SOLE remaining production
@ -19,7 +18,7 @@ namespace AcDream.App.Tests.World;
/// STALE if the production site ever moves or loses the advance — the
/// item 6/8 probes must be re-derived from wherever it goes.
/// </summary>
public sealed class C3cR1F3DriftModelSourcePinTests
public sealed class CreateAuthorityDriftModelSourcePinTests
{
[Fact]
public void HandCalledDriftProbe_StillModelsTheExecutorDrainAdvance()

View file

@ -1371,7 +1371,7 @@ public sealed class LiveEntityHydrationControllerTests
// honest MODEL of the executor drain's advance
// (RuntimeInitialCreateContinuationExecutor
// .ApplyWeenieDescriptionAction — the sole production site,
// source-pinned by C3cR1F3DriftModelSourcePinTests). A nested
// source-pinned by CreateAuthorityDriftModelSourcePinTests). A nested
// production OnCreate can no longer reach it here:
// post-residence ExistingGeneration registration is
// description-only (RuntimeEntityObjectLifetime gates the
@ -1509,7 +1509,7 @@ public sealed class LiveEntityHydrationControllerTests
// honest MODEL of the executor drain's advance
// (RuntimeInitialCreateContinuationExecutor
// .ApplyWeenieDescriptionAction — the sole production site,
// source-pinned by C3cR1F3DriftModelSourcePinTests). A nested
// source-pinned by CreateAuthorityDriftModelSourcePinTests). A nested
// production OnCreate can no longer reach it here:
// post-residence ExistingGeneration registration is
// description-only (RuntimeEntityObjectLifetime gates the
@ -1864,7 +1864,7 @@ public sealed class LiveEntityHydrationControllerTests
// revalidation guard stays covered.
// C3c-R1 F3: honest MODEL of the executor drain's advance
// (ApplyWeenieDescriptionAction — the sole production site,
// source-pinned by C3cR1F3DriftModelSourcePinTests); a
// source-pinned by CreateAuthorityDriftModelSourcePinTests); a
// nested production OnCreate can no longer reach it —
// post-residence registration is description-only
// (RuntimeEntityObjectLifetime :660-665,
@ -1983,7 +1983,7 @@ public sealed class LiveEntityHydrationControllerTests
// WeenieDescription stage; model that advance directly.
// C3c-R1 F3: honest MODEL of the executor drain's advance
// (ApplyWeenieDescriptionAction — the sole production site,
// source-pinned by C3cR1F3DriftModelSourcePinTests); a
// source-pinned by CreateAuthorityDriftModelSourcePinTests); a
// nested production OnCreate can no longer reach it —
// post-residence registration is description-only
// (RuntimeEntityObjectLifetime :660-665,
@ -2019,7 +2019,7 @@ public sealed class LiveEntityHydrationControllerTests
// (AdvanceCreateAuthority), not at registration; model it directly.
// C3c-R1 F3: honest MODEL of the executor drain's advance
// (ApplyWeenieDescriptionAction — the sole production site,
// source-pinned by C3cR1F3DriftModelSourcePinTests); a nested
// source-pinned by CreateAuthorityDriftModelSourcePinTests); a nested
// production OnCreate can no longer reach it — post-residence
// registration is description-only (RuntimeEntityObjectLifetime
// :660-665, !beginInitialResidence gate) and ConsumeExecuted

View file

@ -24,7 +24,7 @@ namespace AcDream.Content.Tests;
/// already counted fall into exactly that trap.
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class Ap155StaticSpherePopulationMeasurementTests
public sealed class StaticSpherePopulationMeasurementTests
{
[Fact]
public void InstalledSetups_SphereOnlyStaticPopulation_Measured()

View file

@ -41,7 +41,7 @@ namespace AcDream.Core.Tests.Physics;
/// suite's "resolved" scenarios are what prevents that regression.
/// </para>
/// </summary>
public sealed class Ap71EntryRestrictionGateTests
public sealed class EntryRestrictionGateTests
{
private const uint RestrictionObjGuid = 0x80001234u;
private const uint MoverGuid = 0x50000001u;

View file

@ -12,10 +12,10 @@ namespace AcDream.Core.Tests.Physics.Motion;
/// </summary>
public sealed class ConstraintManagerTests
{
private static (R5Host host, ConstraintManager cm) Setup()
private static (PhysicsObjHostStub host, ConstraintManager cm) Setup()
{
var world = new Dictionary<uint, R5Host>();
var host = new R5Host(10u, world);
var world = new Dictionary<uint, PhysicsObjHostStub>();
var host = new PhysicsObjHostStub(10u, world);
return (host, new ConstraintManager(host));
}

View file

@ -20,11 +20,11 @@ namespace AcDream.Core.Tests.Physics.Motion;
/// <c>receive_target_update</c> seams forward to the owned
/// <see cref="TargetManager"/> exactly as retail's <c>CPhysicsObj</c> does.</para>
/// </summary>
internal sealed class R5Host : IPhysicsObjHost
internal sealed class PhysicsObjHostStub : IPhysicsObjHost
{
public readonly Dictionary<uint, R5Host> World;
public readonly Dictionary<uint, PhysicsObjHostStub> World;
public R5Host(uint id, Dictionary<uint, R5Host> world)
public PhysicsObjHostStub(uint id, Dictionary<uint, PhysicsObjHostStub> world)
{
Id = id;
World = world;

View file

@ -14,11 +14,11 @@ namespace AcDream.Core.Tests.Physics.Motion;
/// </summary>
public sealed class PositionManagerFacadeTests
{
private static (R5Host self, R5Host target, PositionManager pm) Setup()
private static (PhysicsObjHostStub self, PhysicsObjHostStub target, PositionManager pm) Setup()
{
var world = new Dictionary<uint, R5Host>();
var self = new R5Host(10u, world);
var target = new R5Host(20u, world);
var world = new Dictionary<uint, PhysicsObjHostStub>();
var self = new PhysicsObjHostStub(10u, world);
var target = new PhysicsObjHostStub(20u, world);
return (self, target, new PositionManager(self));
}

View file

@ -13,18 +13,18 @@ namespace AcDream.Core.Tests.Physics.Motion;
/// </summary>
public sealed class StickyManagerTests
{
private static (R5Host self, R5Host target, StickyManager sticky) Setup(
private static (PhysicsObjHostStub self, PhysicsObjHostStub target, StickyManager sticky) Setup(
uint targetId = 20u, float targetRadius = 0.5f)
{
var world = new Dictionary<uint, R5Host>();
var self = new R5Host(10u, world);
var target = new R5Host(targetId, world);
var world = new Dictionary<uint, PhysicsObjHostStub>();
var self = new PhysicsObjHostStub(10u, world);
var target = new PhysicsObjHostStub(targetId, world);
var sticky = new StickyManager(self);
return (self, target, sticky);
}
private static StickyManager StuckAndInitialized(
R5Host self, R5Host target, Vector3 targetOrigin, float targetRadius = 0.5f)
PhysicsObjHostStub self, PhysicsObjHostStub target, Vector3 targetOrigin, float targetRadius = 0.5f)
{
var sticky = new StickyManager(self);
sticky.StickTo(target.Id, targetRadius, targetHeight: 1.0f);
@ -130,10 +130,10 @@ public sealed class StickyManagerTests
[Fact]
public void ReStick_TearsDownPreviousBeforeSettingNew()
{
var world = new Dictionary<uint, R5Host>();
var self = new R5Host(10u, world);
var a = new R5Host(20u, world);
var b = new R5Host(21u, world);
var world = new Dictionary<uint, PhysicsObjHostStub>();
var self = new PhysicsObjHostStub(10u, world);
var a = new PhysicsObjHostStub(20u, world);
var b = new PhysicsObjHostStub(21u, world);
var sticky = new StickyManager(self);
sticky.StickTo(a.Id, 0.5f, 1.0f);
@ -159,9 +159,9 @@ public sealed class StickyManagerTests
[Fact]
public void AdjustOffset_SteersTowardTarget_ClampedToStep()
{
var world = new Dictionary<uint, R5Host>();
var self = new R5Host(10u, world) { Radius = 0.5f, MinterpMaxSpeed = 1.0f };
var target = new R5Host(20u, world);
var world = new Dictionary<uint, PhysicsObjHostStub>();
var self = new PhysicsObjHostStub(10u, world) { Radius = 0.5f, MinterpMaxSpeed = 1.0f };
var target = new PhysicsObjHostStub(20u, world);
var sticky = StuckAndInitialized(self, target, new Vector3(5f, 0f, 0f));
var frame = new MotionDeltaFrame();
@ -178,9 +178,9 @@ public sealed class StickyManagerTests
[Fact]
public void AdjustOffset_TooClose_BacksOff_SignedDistance()
{
var world = new Dictionary<uint, R5Host>();
var self = new R5Host(10u, world) { Radius = 0.5f, MinterpMaxSpeed = 1.0f };
var target = new R5Host(20u, world);
var world = new Dictionary<uint, PhysicsObjHostStub>();
var self = new PhysicsObjHostStub(10u, world) { Radius = 0.5f, MinterpMaxSpeed = 1.0f };
var target = new PhysicsObjHostStub(20u, world);
// centerDist 0.9, cyl = 0.9-0.5-0.5 = -0.1, minus 0.3 → dist = -0.4.
var sticky = StuckAndInitialized(self, target, new Vector3(0.9f, 0f, 0f));
@ -194,9 +194,9 @@ public sealed class StickyManagerTests
[Fact]
public void AdjustOffset_DeepOverlap_BacksOff_RateLimited()
{
var world = new Dictionary<uint, R5Host>();
var self = new R5Host(10u, world) { Radius = 0.5f, MinterpMaxSpeed = 1.0f };
var target = new R5Host(20u, world);
var world = new Dictionary<uint, PhysicsObjHostStub>();
var self = new PhysicsObjHostStub(10u, world) { Radius = 0.5f, MinterpMaxSpeed = 1.0f };
var target = new PhysicsObjHostStub(20u, world);
// centerDist 0.1 → cyl = 0.1-0.5-0.5 = -0.9, minus 0.3 → dist = -1.2
// (overlap DEEPER than one tick's step).
var sticky = StuckAndInitialized(self, target, new Vector3(0.1f, 0f, 0f));
@ -214,9 +214,9 @@ public sealed class StickyManagerTests
[Fact]
public void AdjustOffset_UsesCachedPosition_WhenTargetUnresolvable()
{
var world = new Dictionary<uint, R5Host>();
var self = new R5Host(10u, world) { Radius = 0.5f, MinterpMaxSpeed = 1.0f };
var target = new R5Host(20u, world);
var world = new Dictionary<uint, PhysicsObjHostStub>();
var self = new PhysicsObjHostStub(10u, world) { Radius = 0.5f, MinterpMaxSpeed = 1.0f };
var target = new PhysicsObjHostStub(20u, world);
var sticky = new StickyManager(self);
target.Resolvable = false;
sticky.StickTo(target.Id, 0.5f, 1.0f);
@ -233,9 +233,9 @@ public sealed class StickyManagerTests
[Fact]
public void AdjustOffset_NoMinterp_UsesFallbackSpeed()
{
var world = new Dictionary<uint, R5Host>();
var self = new R5Host(10u, world) { Radius = 0.5f, MinterpMaxSpeed = null };
var target = new R5Host(20u, world);
var world = new Dictionary<uint, PhysicsObjHostStub>();
var self = new PhysicsObjHostStub(10u, world) { Radius = 0.5f, MinterpMaxSpeed = null };
var target = new PhysicsObjHostStub(20u, world);
var sticky = StuckAndInitialized(self, target, new Vector3(50f, 0f, 0f));
var frame = new MotionDeltaFrame();

View file

@ -14,11 +14,11 @@ namespace AcDream.Core.Tests.Physics.Motion;
/// </summary>
public sealed class TargetManagerTests
{
private static (R5Host self, R5Host target, Dictionary<uint, R5Host> world) TwoHosts()
private static (PhysicsObjHostStub self, PhysicsObjHostStub target, Dictionary<uint, PhysicsObjHostStub> world) TwoHosts()
{
var world = new Dictionary<uint, R5Host>();
var self = new R5Host(10u, world);
var target = new R5Host(20u, world);
var world = new Dictionary<uint, PhysicsObjHostStub>();
var self = new PhysicsObjHostStub(10u, world);
var target = new PhysicsObjHostStub(20u, world);
return (self, target, world);
}
@ -122,7 +122,7 @@ public sealed class TargetManagerTests
var (self, originalTarget, world) = TwoHosts();
self.TargetManager.SetTarget(0, originalTarget.Id, 1.0f, 0.0);
self.HandleUpdateTargetCalls.Clear();
var replacement = new R5Host(originalTarget.Id, world);
var replacement = new PhysicsObjHostStub(originalTarget.Id, world);
var p = new Position(1u, new Vector3(99f, 0f, 0f), Quaternion.Identity);
self.ReceiveTargetUpdate(
@ -143,7 +143,7 @@ public sealed class TargetManagerTests
self.SetOrigin(Vector3.Zero);
originalTarget.SetOrigin(new Vector3(5f, 0f, 0f));
self.PositionManager.StickTo(originalTarget.Id, 0.5f, 1f);
var replacement = new R5Host(originalTarget.Id, world);
var replacement = new PhysicsObjHostStub(originalTarget.Id, world);
replacement.SetOrigin(new Vector3(10f, 0f, 0f));
originalTarget.SetOrigin(new Vector3(-5f, 0f, 0f));
var delta = new MotionDeltaFrame();
@ -260,7 +260,7 @@ public sealed class TargetManagerTests
watcher.TargetManager.SetTarget(0, target.Id, 1.0f, 0.0);
watcher.HandleUpdateTargetCalls.Clear();
watcher.Resolvable = false;
var replacement = new R5Host(watcher.Id, world);
var replacement = new PhysicsObjHostStub(watcher.Id, world);
target.TargetManager.NotifyVoyeurOfEvent(TargetStatus.Teleported);
@ -273,10 +273,10 @@ public sealed class TargetManagerTests
[Fact]
public void NotifyVoyeurOfEvent_BroadcastsToAll_NoDistanceGate()
{
var world = new Dictionary<uint, R5Host>();
var target = new R5Host(20u, world);
var w1 = new R5Host(10u, world);
var w2 = new R5Host(11u, world);
var world = new Dictionary<uint, PhysicsObjHostStub>();
var target = new PhysicsObjHostStub(20u, world);
var w1 = new PhysicsObjHostStub(10u, world);
var w2 = new PhysicsObjHostStub(11u, world);
// both watch the target (each gets a target_info via SetTarget)
w1.TargetManager.SetTarget(0, target.Id, 1.0f, 0.0);
w2.TargetManager.SetTarget(0, target.Id, 1.0f, 0.0);

View file

@ -463,7 +463,7 @@ public sealed class MotionInterpreterDoMotionFamilyTests
}
[Fact]
public void StopCompletely_DoesNotTouchSidestepOrTurnSpeeds_J9()
public void StopCompletely_DoesNotTouchSidestepOrTurnSpeeds()
{
// A9/J9: retail touches ONLY forward cmd/speed + sidestep/turn
// COMMANDS — it does NOT write sidestep_speed or turn_speed. The

View file

@ -705,8 +705,8 @@ public sealed class MotionInterpreterJumpFamilyTests
[Fact]
public void JumpIsAllowed_LeashArmedAndOverstrained_ReturnsGeneralMovementFailure()
{
var world = new System.Collections.Generic.Dictionary<uint, R5Host>();
var host = new R5Host(10u, world);
var world = new System.Collections.Generic.Dictionary<uint, PhysicsObjHostStub>();
var host = new PhysicsObjHostStub(10u, world);
const uint outdoorCell = 0x12340007u; // low16 < 0x0100 -> outdoor
host.Position = new Position(outdoorCell, Vector3.Zero, Quaternion.Identity);

View file

@ -60,7 +60,7 @@ namespace AcDream.Core.Tests.Physics;
/// </para>
/// </summary>
[Trait("Lane", "InstalledDat")]
public sealed class Ap157SortingSphereFloodMeasurementTests
public sealed class SortingSphereFloodMeasurementTests
{
/// <summary>Arbitrary non-zero landblock id — only its prefix matters for
/// seeding the outdoor flood; the entity is placed at the landblock's own

View file

@ -30,7 +30,7 @@ namespace AcDream.Core.Tests.Physics;
/// </item>
/// </list>
/// </summary>
public class Ap10WaterSemanticsTests
public class WaterSemanticsTests
{
// ── §1: TerrainSurface.SampleWaterDepth golden values ──────────────────

View file

@ -6,7 +6,7 @@ namespace AcDream.Headless.Tests;
public sealed class HeadlessProcessResourceEnvelopeTests
{
[Fact]
public void K4ProfileScalesOnlyPerSessionDimensions()
public void MultiSessionProfileScalesOnlyPerSessionDimensions()
{
HeadlessProcessResourceCeilings ceilings =
HeadlessProcessResourceCeilings.K4Linux;

View file

@ -380,7 +380,7 @@ public sealed class LauncherOrchestratorTests : IDisposable
}
[Fact]
public async Task LinuxRejectsBothGraphicalModesBeforeCompositionOrSpawnWithSliceLExplanation()
public async Task LinuxRejectsBothGraphicalModesBeforeCompositionOrSpawnWithUnsupportedPlatformExplanation()
{
var config = new RecordingConfigService();
var supervisors = new FakeSupervisorFactory();

View file

@ -143,7 +143,7 @@ public sealed class GameRuntimeContractTests
}
[Fact]
public void TraceRecorderIncludesJ4GameplayStateInCheckpoint()
public void TraceRecorderIncludesGameplayStateInCheckpoint()
{
var recorder = new RuntimeTraceRecorder();
var stamp = new RuntimeEventStamp(new(3), 1, 8);
@ -222,7 +222,7 @@ public sealed class GameRuntimeContractTests
}
[Fact]
public void J4GameplayOwnersHaveNoStaticMutableSessionState()
public void GameplayOwnersHaveNoStaticMutableSessionState()
{
Type[] owners =
[

View file

@ -10,7 +10,7 @@ namespace AcDream.Runtime.Tests.Gameplay;
public sealed class RuntimeGameplayOwnershipTests
{
[Fact]
public void J5LedgerConvergesEntityPhysicsAndGameplayAsOneLifetime()
public void GameplayOwnershipLedgerConvergesEntityPhysicsAndGameplayAsOneLifetime()
{
var entities = new RuntimeEntityObjectLifetime();
var inventory = new RuntimeInventoryState(entities);

View file

@ -14,7 +14,7 @@ namespace AcDream.Runtime.Tests;
public sealed class RuntimeSimulationFixtureHostTests
{
[Fact]
public void RuntimeOnlyHostDrivesCompleteJ5SimulationWithoutPresentation()
public void RuntimeOnlyHostDrivesCompleteGameplaySimulationWithoutPresentation()
{
var host = new RuntimeOnlySimulationFixtureHost();

View file

@ -101,7 +101,7 @@ public class KeyBindingsTests
[Fact]
public void AcdreamCurrentDefaults_binds_shift_as_hold_for_run()
{
// K.1b: when ShiftLeft is held the OS keyboard delivers
// When ShiftLeft is held the OS keyboard delivers
// CurrentModifiers=Shift, so the chord must be (ShiftLeft, Shift).
// Lookup with the matching modifier mask succeeds.
var b = KeyBindings.AcdreamCurrentDefaults();
@ -111,11 +111,11 @@ public class KeyBindingsTests
}
[Fact]
public void RetailDefaults_diverges_from_AcdreamCurrentDefaults_in_K1c()
public void RetailDefaults_differs_from_legacy_AcdreamCurrentDefaults()
{
// K.1c flips RetailDefaults() to the retail-faithful preset.
// The acdream-current map remains accessible (for tests pinning
// the older WASD-only behavior), but RetailDefaults is now the
// RetailDefaults is the retail-faithful preset. The acdream-current
// map remains accessible for tests pinning the older WASD-only
// behavior, but RetailDefaults is now the
// canonical startup source. The two MUST differ — at minimum
// RetailDefaults binds X to Backup (retail) where AcdreamCurrent
// bound X to StrafeRight, and RetailDefaults binds Tab to