Docs: hygiene sweep — stale/misattributed doc-comments + CLAUDE.md example

- Repoint CLAUDE.md testing example from the deleted HeartbeatSystemTests to HealthApplyDamageSystemTests.
- Stale deleted-system refs: ResourceFieldSpawner/ClutterFieldSpawner(+Authoring) now cite RoomFieldSystem (was ExpeditionFieldSystem); BuildPlaceRequest drops the deleted RegionTransitRequest from its 'mirrors' list.
- Stale package version: 'Netcode 1.13.2' -> 'Netcode 1.x' in ProjectileClassificationSystem + BuildPlaceRequest.
- WorldCollisionComponents: remove the duplicated EnvironmentMask summary line; FeelConfig: fix the mangled 'is hitmap)' sentence.

Comment/doc only; compiles clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-07 23:54:44 -07:00
parent be7aa8affd
commit 7460ab9d1c
9 changed files with 11 additions and 12 deletions
@@ -6,7 +6,7 @@ namespace ProjectM.Authoring
{
/// <summary>
/// Authoring for the baked <see cref="ClutterFieldSpawner"/> singleton (mirrors ResourceFieldSpawnerAuthoring).
/// Place once in the gameplay subscene and assign the Blight-clutter ghost prefab; ExpeditionFieldSystem
/// Place once in the gameplay subscene and assign the Blight-clutter ghost prefab; RoomFieldSystem
/// scatters the clutter each expedition alongside the resource field. Carries no transform.
/// </summary>
public class ClutterFieldSpawnerAuthoring : MonoBehaviour
@@ -6,7 +6,7 @@ namespace ProjectM.Authoring
{
/// <summary>
/// Authoring for the baked <see cref="ResourceFieldSpawner"/> singleton (mirrors StorageSpawnerAuthoring).
/// Place once in the gameplay subscene and assign the resource-node ghost prefab; ExpeditionFieldSystem
/// Place once in the gameplay subscene and assign the resource-node ghost prefab; RoomFieldSystem
/// scatters the field each Expedition. Carries no transform.
/// </summary>
public class ResourceFieldSpawnerAuthoring : MonoBehaviour
@@ -28,7 +28,7 @@ namespace ProjectM.Client
[CreateAfter(typeof(GhostReceiveSystem))]
// NOTE: intentionally NOT [BurstCompile]d. The cross-assembly generic
// SnapshotDataBufferComponentLookup.TryGetComponentDataFromSnapshotHistory&lt;T&gt;() trips a Burst
// internal compiler error (type-hash resolution) on Netcode 1.13.2. Classification only runs when
// internal compiler error (type-hash resolution) on Netcode 1.x (installed: 6.5.0). Classification only runs when
// ghost spawns are received (a cold path, not the prediction loop), so a managed job is fine here.
public partial struct ProjectileClassificationSystem : ISystem
{
@@ -239,7 +239,7 @@ namespace ProjectM.Client
// Deferred-items pass (2026-06)
BodyFlashEnabled = true;
BodyFlashColor = new Color(3.2f, 2.8f, 2.2f, 1f); // hot near-white overdrive (multiplies the Synty atlas base map)
PlayerHurtFlashColor = new Color(2.6f, 0.55f, 0.4f, 1f); // C2: hot red-orange body flash when the player is hitmap)
PlayerHurtFlashColor = new Color(2.6f, 0.55f, 0.4f, 1f); // C2: hot red-orange body flash when the player is hit
BodyFlashDurationSec = 0.16f;
RemoteSwingEnabled = true;
RemoteSlashColor = new Color(1.4f, 2.2f, 2.8f, 1f); // cool teammate arc
@@ -4,10 +4,10 @@ namespace ProjectM.Simulation
{
/// <summary>
/// Client -&gt; server request to build a structure of <see cref="StructureType"/> at grid cell
/// (<see cref="CellX"/>, <see cref="CellZ"/>). A one-off action, so an RPC (mirrors StorageOpRequest /
/// RegionTransitRequest). StructureType is a byte; the cell is two int scalars (NOT an int2) to stay
/// (<see cref="CellX"/>, <see cref="CellZ"/>). A one-off action, so an RPC (mirrors StorageOpRequest).
/// StructureType is a byte; the cell is two int scalars (NOT an int2) to stay
/// within the project's scalar-only RPC payload precedent (avoids first-of-its-kind composite-math-in-RPC
/// codegen risk on Netcode 1.13.2). The server re-validates legality + cost authoritatively.
/// codegen risk on Netcode 1.x). The server re-validates legality + cost authoritatively.
/// </summary>
public struct BuildPlaceRequest : IRpcCommand
{
@@ -3,11 +3,11 @@ using Unity.Entities;
namespace ProjectM.Simulation
{
/// <summary>
/// Baked singleton holding the Blight-clutter ghost prefab + field shape. ExpeditionFieldSystem reads it
/// Baked singleton holding the Blight-clutter ghost prefab + field shape. RoomFieldSystem reads it
/// (alongside <see cref="ResourceFieldSpawner"/>) to scatter <see cref="Count"/> clutter ghosts within
/// <see cref="Radius"/> of the expedition origin on the SAME empty-&gt;occupied epoch edge as the resource
/// field (seeded distinctly so clutter and nodes don't co-locate), and clears them on occupied-&gt;empty.
/// OPTIONAL — if the singleton is absent, ExpeditionFieldSystem simply skips clutter. Mirrors
/// OPTIONAL — if the singleton is absent, RoomFieldSystem simply skips clutter. Mirrors
/// <see cref="ResourceFieldSpawner"/>; carries no transform.
/// </summary>
public struct ClutterFieldSpawner : IComponentData
@@ -3,7 +3,7 @@ using Unity.Entities;
namespace ProjectM.Simulation
{
/// <summary>
/// Baked singleton holding the resource-node ghost prefab + field shape. ExpeditionFieldSystem reads it to
/// Baked singleton holding the resource-node ghost prefab + field shape. RoomFieldSystem reads it to
/// scatter <see cref="Count"/> nodes within <see cref="Radius"/> of the expedition region origin on each
/// Expedition phase entry (seeded by the cycle number). Mirrors <see cref="StorageSpawner"/>.
/// </summary>
@@ -11,7 +11,6 @@ namespace ProjectM.Simulation
/// </summary>
public struct WorldCollisionConfig : IComponentData
{
/// <summary>BelongsTo bitmask of the Environment physics layer (<c>1u &lt;&lt; layerIndex</c>).</summary>
/// <summary>BelongsTo bitmask of the Environment physics layer (<c>1u &lt;&lt; layerIndex</c>).</summary>
public uint EnvironmentMask;
+1 -1
View File
@@ -153,7 +153,7 @@ Full rules: `.claude/skills/dots-dev/references/dots-conventions.md` (in-repo; t
## Testing
- **Default = plain-Entities EditMode test:** create a `World`, register the system in `SimulationSystemGroup`, tick, assert. Public API, version-independent. Example: `Assets/_Project/Tests/EditMode/HeartbeatSystemTests.cs`. Run via `run_tests(mode="EditMode", assembly_names=["ProjectM.Tests.EditMode"])`.
- **Default = plain-Entities EditMode test:** create a `World`, register the system in `SimulationSystemGroup`, tick, assert. Public API, version-independent. Example: `Assets/_Project/Tests/EditMode/HealthApplyDamageSystemTests.cs`. Run via `run_tests(mode="EditMode", assembly_names=["ProjectM.Tests.EditMode"])`.
- **`NetCodeTestWorld` is `internal`** (6.5.0 re-check: not even loaded outside test asmdefs), exposed only to a fixed `[InternalsVisibleTo]` allow-list — to use it, name a test asmdef to match an entry (e.g. `Unity.NetcodeSamples.EditModeTests`) or vendor the test utils. Netcode world boot is covered by the Play Mode check, not a NetCodeTestWorld test. See [[DR-001_Netcode_Test_Harness]].
- Burst/source-gen errors surface at editor compile, not a plain build — always `read_console` after script changes, and run a play/tick test, not just a compile. **Cover swept hit-detection with a tunnelling regression test** (the point-check tunnel bug doesn't surface in a point-based unit test).