Feature: More test and Enhanced Documentation#201
Merged
Eli Pinkerton (wallstop) merged 4 commits intoMay 3, 2026
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This PR expands DxMessaging reliability and developer ergonomics by strengthening test/benchmark coverage, hardening the MessageAwareComponent base-call contract (runtime + analyzer + inspector overlay messaging), and adding prose validation tooling to keep documentation consistent.
Changes:
- Add new runtime/editor tests and benchmarking assemblies, including leak-detection utilities and public-surface contract snapshotting.
- Enhance
MessageAwareComponentbase-call enforcement (per-method DXMSG006 consequence text, inspector overlay consequence rendering, and a one-time runtime self-check breadcrumb). - Add and wire documentation prose validation tooling (custom validator + Vale rules/config) and update docs to emphasize required
base.*()calls.
Reviewed changes
Copilot reviewed 126 out of 132 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| scripts/validate-docs-prose.js.meta | Unity .meta for prose validator script |
| scripts/tests/validate-docs-prose.test.js.meta | Unity .meta for prose validator Jest test |
| llms.txt | Update skills count, add unity category, bump last-updated date |
| docs/reference/troubleshooting.md | Add OnDestroy base-call note + quickstart link |
| docs/reference/faq.md | Add FAQ entry for missing base-call symptoms (DXMSG006) |
| docs/reference/analyzers.md | Expand DXMSG006 docs with per-method messages + updated guarded-method rationale |
| docs/integrations/zenject.md | Refine Zenject overview wording |
| docs/integrations/index.md | Clarify supported DI frameworks and integration guidance |
| docs/guides/patterns.md | Minor prose tightening + more specific scalability example |
| docs/guides/inspector-overlay.md | Prose tightening + “Related” section formatting |
| docs/getting-started/visual-guide.md | Add base-call warning callout + copy tweaks |
| docs/getting-started/quick-start.md | Add “Inheritance and base calls” section with guarded-method table |
| docs/getting-started/install.md | Clarify prerelease package wording |
| docs/getting-started/index.md | Refine doc hub link text and descriptions |
| docs/getting-started/getting-started.md | Add base-call warning and cross-links |
| docs/concepts/index.md | Refine “Message Types” description |
| docs/architecture/performance.md | Update benchmark numbers table |
| docs/architecture/comparisons.md | Update comparison numbers + minor Zenject bullet wording |
| docs/advanced/runtime-configuration.md | Refine testing guide link description |
| docs/advanced/message-bus-providers.md | Replace “best of both worlds” with concrete behavior description |
| docs/advanced/emit-shorthands.md | Shorten “Targeting & Context” link description |
| Tests/Runtime/TestUtilities/MessageScenarios.cs | Add WithAtLeastOneFeatureToggle scenario source |
| Tests/Runtime/TestUtilities/LeakWatcher.cs.meta | Unity .meta for LeakWatcher utility |
| Tests/Runtime/TestUtilities/LeakWatcher.cs | Add LeakWatcher registration-counter snapshot utility |
| Tests/Runtime/Scripts/Messages/ClassTargetedMessage.cs.meta | Unity .meta for class targeted message fixture |
| Tests/Runtime/Scripts/Messages/ClassTargetedMessage.cs | Add class-based targeted message type for tests |
| Tests/Runtime/Scripts/Messages/ClassBroadcastMessage.cs.meta | Unity .meta for class broadcast message fixture |
| Tests/Runtime/Scripts/Messages/ClassBroadcastMessage.cs | Add class-based broadcast message type for tests |
| Tests/Runtime/Scripts/Components/QuitOnDemandMessageAwareComponent.cs.meta | Unity .meta for quit-hook test component |
| Tests/Runtime/Scripts/Components/QuitOnDemandMessageAwareComponent.cs | Add component to invoke protected OnApplicationQuit in tests |
| Tests/Runtime/Scripts/Components/BaseCallContractComponents.cs.meta | Unity .meta for base-call contract fixtures |
| Tests/Runtime/Scripts/Components/BaseCallContractComponents.cs | Add components that intentionally violate base-call contract for runtime symptom tests |
| Tests/Runtime/Core/TestAttributeContractTests.cs | Expand contract tests (parameterization mixing, spawned cleanup pattern, setup-fixture uniqueness, scenario ValueSource enforcement) |
| Tests/Runtime/Core/SuiteWallClockBudgetTest.cs.meta | Unity .meta for suite wall-clock budget fixture |
| Tests/Runtime/Core/SuiteWallClockBudgetTest.cs | Add suite-level wall-clock budget with gated-category bypass |
| Tests/Runtime/Core/Snapshots/public-surface.txt.meta | Unity .meta for public-surface snapshot file |
| Tests/Runtime/Core/Snapshots/public-surface.txt | Add snapshot of public DxMessaging.Core type set |
| Tests/Runtime/Core/Snapshots/.gitkeep | Keep Snapshots folder in source control |
| Tests/Runtime/Core/Snapshots.meta | Unity folder .meta for Snapshots directory |
| Tests/Runtime/Core/ReentrantEmissionExtendedTests.cs.meta | Unity .meta for reentrancy extended tests |
| Tests/Runtime/Core/PublicSurfaceContractTests.cs.meta | Unity .meta for public-surface contract tests |
| Tests/Runtime/Core/PublicSurfaceContractTests.cs | Add public-surface snapshot test + IMessageBus textual mention test + MessageKind coverage check |
| Tests/Runtime/Core/MessageHandlerGlobalBusTests.cs | Update wrapper bus to expose new registration counters |
| Tests/Runtime/Core/LifecycleEdgeCasesTests.cs.meta | Unity .meta for lifecycle edge-case tests |
| Tests/Runtime/Core/LeakWatcherSelfTests.cs.meta | Unity .meta for LeakWatcher self-tests |
| Tests/Runtime/Core/LeakWatcherSelfTests.cs | Add LeakWatcher self-tests parameterized by MessageScenario |
| Tests/Runtime/Core/BaseCallContractTests.cs.meta | Unity .meta for base-call contract runtime tests |
| Tests/Editor/Comparisons/WallstopStudios.DxMessaging.Tests.00.Editor.Benchmarks.asmdef.meta | Unity .meta for editor comparisons asmdef |
| Tests/Editor/Comparisons/WallstopStudios.DxMessaging.Tests.00.Editor.Benchmarks.asmdef | Add editor comparisons asmdef (depends on benchmarks + integrations) |
| Tests/Editor/Comparisons/ComparisonPerformanceTests.cs.meta | Unity .meta updated for comparison performance test |
| Tests/Editor/Comparisons/ComparisonPerformanceTests.cs | Move comparison perf tests to editor namespace/assembly and update imports/guards |
| Tests/Editor/Comparisons.meta | Unity folder .meta for Comparisons |
| Tests/Editor/Benchmarks/WallstopStudios.DxMessaging.Tests.00.Editor.Benchmarks.asmdef.meta | Unity .meta for editor benchmarks asmdef |
| Tests/Editor/Benchmarks/WallstopStudios.DxMessaging.Tests.00.Editor.Benchmarks.asmdef | Rename/move benchmarks asmdef to editor benchmarks |
| Tests/Editor/Benchmarks/PerformanceTests.cs.meta | Unity .meta for editor performance tests |
| Tests/Editor/Benchmarks/PerformanceTests.cs | Move performance tests to editor benchmarks namespace + fix imports |
| Tests/Editor/Benchmarks/BenchmarkTestBase.cs.meta | Unity .meta updated for benchmark base |
| Tests/Editor/Benchmarks/BenchmarkTestBase.cs | Move benchmark base to editor benchmarks namespace + update imports |
| Tests/Editor/Benchmarks/BenchmarkSession.cs.meta | Unity .meta updated for benchmark session |
| Tests/Editor/Benchmarks/BenchmarkSession.cs | Move benchmark session to editor benchmarks namespace |
| Tests/Editor/Benchmarks/AssemblyInfo.cs.meta | Unity .meta for editor benchmark AssemblyInfo |
| Tests/Editor/Benchmarks/AssemblyInfo.cs | Add InternalsVisibleTo for test assemblies |
| Tests/Editor/Benchmarks.meta | Unity folder .meta for Benchmarks |
| Tests/Editor/Allocations/WallstopStudios.DxMessaging.Tests.Editor.Allocations.asmdef.meta | Unity .meta for editor allocations asmdef |
| Tests/Editor/Allocations/WallstopStudios.DxMessaging.Tests.Editor.Allocations.asmdef | Add editor allocations asmdef |
| Tests/Editor/Allocations/ProviderResolutionBenchmarks.cs.meta | Unity .meta updated for provider resolution benchmarks |
| Tests/Editor/Allocations/ProviderResolutionBenchmarks.cs | Move provider benchmarks to editor allocations namespace + reference benchmark helpers |
| Tests/Editor/Allocations/BenchmarkHarnessRobustnessTests.cs.meta | Unity .meta updated for harness robustness tests |
| Tests/Editor/Allocations/BenchmarkHarnessRobustnessTests.cs | Move harness robustness tests to editor allocations namespace + fix imports |
| Tests/Editor/Allocations/AllocationMatrixTests.cs.meta | Unity .meta updated for allocation matrix tests |
| Tests/Editor/Allocations/AllocationMatrixTests.cs | Move allocation matrix tests to editor allocations namespace + add references |
| Tests/Editor/Allocations/AllocationMatrixExtendedTests.cs.meta | Unity .meta for extended allocation matrix tests |
| Tests/Editor/Allocations/AllocationMatrixExtendedTests.cs | Add extended allocation/allocation-budget tests (class messages, feature cross-product, churn, accept-all budgets) |
| Tests/Editor/Allocations.meta | Unity folder .meta updated for Allocations |
| SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.Tests/MessageAwareComponentBaseCallAnalyzerTests.cs | Expand analyzer test coverage (DXMSG007 across all guarded methods, DXMSG006 per-method message checks, meta-tests, parity tests) |
| SourceGenerators/WallstopStudios.DxMessaging.Analyzer/Analyzers/MessageAwareComponentBaseCallAnalyzer.cs | Add per-method DXMSG006 consequence messages, guarded-set expansion, and bool-signature handling |
| Samples~/Mini Combat/Walkthrough.md | Update link description wording |
| Runtime/Unity/MessageAwareComponent.cs | Add editor/debug one-time runtime self-check log in OnEnable when token is null |
| Runtime/Core/MessageBus/MessageBus.cs | Add public counters for interceptors/post-processors/global accept-all |
| Runtime/Core/MessageBus/IMessageBus.cs | Document empty-bus emit contract + add new registration counters to public interface |
| Runtime/Core/DataStructure/CyclicBuffer.cs | Reduce enumerator/getter visibility to internal |
| README.md | Add base-call warning callout + refine positioning language + update AI agent section wording |
| Editor/CustomEditors/MessageAwareComponentInspectorOverlay.cs | Render per-method consequence lines in HelpBox + ASCII ellipsis fix |
| Editor/Analyzers/BaseCallTypeScannerCore.cs | Extend guarded method list + add per-method consequence dictionary + bool-signature lookup helper |
| CLAUDE.md | Remove duplicated rule list (now points to .llm/context.md only) |
| CHANGELOG.md | Add release notes for per-method DXMSG006 messaging, runtime self-check, and new IMessageBus counters |
| AGENTS.md | Remove duplicated rule list (now points to .llm/context.md only) |
| .vale/styles/Vocab/DxMessaging/reject.txt | Add reject vocabulary list for Vale |
| .vale/styles/Vocab/DxMessaging/accept.txt | Add accept vocabulary list for Vale |
| .vale/styles/DxMessaging/Marketing.yml | Add Vale rule to flag marketing adjectives |
| .vale/styles/DxMessaging/LLMFiller.yml | Add Vale rule to flag LLM filler phrases |
| .vale/styles/DxMessaging/Hedges.yml | Add Vale rule to flag hedge transitions |
| .vale/styles/DxMessaging/Capitalization.yml | Add Vale rule to enforce canonical capitalization (e.g., GitHub) |
| .vale.ini | Add Vale configuration and file-scoped rule tuning |
| .pre-commit-config.yaml | Add validate-docs-prose hook invoking scripts/validate-docs-prose.js |
| .llm/skills/unity/base-call-contract.md | Add new skill doc describing base-call contract + enforcement layers |
| .llm/skills/testing/tests-must-be-parameterized-by-message-kind.md | Update links + add related lifecycle/leak-watcher skills |
| .llm/skills/testing/test-production-code-part-2.md | Rename link text to “Test Coverage Requirements” |
| .llm/skills/testing/test-failure-investigation.md | Tighten wording to be more specific/actionable |
| .llm/skills/testing/test-failure-investigation-procedure.md | Rename section heading to “Fix the Root Cause” |
| .llm/skills/testing/test-coverage-unity-anti-patterns.md | Update link text to “Test Coverage Requirements” |
| .llm/skills/testing/test-coverage-scenario-categories.md | Update link text to “Test Coverage Requirements” |
| .llm/skills/testing/test-coverage-organization-assertions.md | Update link text to “Test Coverage Requirements” |
| .llm/skills/testing/test-coverage-data-driven.md | Update link text to “Test Coverage Requirements” |
| .llm/skills/testing/test-code-quality.md | Update link text to “Test Coverage Requirements” |
| .llm/skills/testing/single-thread-contract.md | Update link text to “Test Coverage Requirements” |
| .llm/skills/testing/script-test-coverage.md | Tighten prose guidance + update link text |
| .llm/skills/testing/lifecycle-edge-coverage.md.meta | Unity .meta for lifecycle-edge coverage skill |
| .llm/skills/testing/lifecycle-edge-coverage.md | Add new skill doc for lifecycle edge-case test coverage |
| .llm/skills/testing/leak-watcher-usage.md.meta | Unity .meta for leak-watcher usage skill |
| .llm/skills/testing/leak-watcher-usage.md | Add new skill doc for LeakWatcher usage and counter contract |
| .llm/skills/testing/inspector-overlay-invariants.md | Add “See Also” link to base-call contract skill |
| .llm/skills/testing/git-workflow-robustness.md | Tighten prose/clarify scope |
| .llm/skills/testing/git-workflow-robustness-part-1.md | Update link text to “Test Coverage Requirements” |
| .llm/skills/testing/comprehensive-test-coverage.md | Rename/title tweak to “Test Coverage Requirements” + reduce marketing language |
| .llm/skills/testing/allocation-coverage-required-for-dispatch.md | Update link text to “Test Coverage Requirements” |
| .llm/skills/scripting/validation-patterns-part-2.md | Update link text to “Test Coverage Requirements” |
| .llm/skills/scripting/powershell-best-practices-part-2.md | Tighten prose |
| .llm/skills/scripting/javascript-code-quality-part-2.md | Update link text to “Test Coverage Requirements” |
| .llm/skills/scripting/cross-platform-compatibility.md | Tighten one-line summary + update link text |
| .llm/skills/performance/cache-eviction-policies.md | Tighten one-line summary wording |
| .llm/skills/index.md | Regenerate skills index (counts/categories updated) |
| .llm/skills/documentation/human-prose-policy.md | Add new human-prose policy skill doc |
| .llm/context.md | Add explicit guidance for prose validation, base-call contract, lifecycle edge cases, LeakWatcher usage, and benchmark assembly conventions |
| .cspell.json | Add new words/abbreviations used in tests/docs |
Contributor
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 168 out of 174 changed files in this pull request and generated 2 comments.
Comments suppressed due to low confidence (1)
Tests/Editor/Comparisons/ComparisonPerformanceTests.cs:19
- The file has unconditional
using MessagePipe;,using UniRx;, andusing Zenject;directives, plus now-empty#if UNIRX_PRESENT/#if MESSAGEPIPE_PRESENTblocks. This will fail to compile when those optional packages are not present (theusingdirectives are processed even when the benchmark methods are#if-guarded). Move theseusingdirectives back under their corresponding#if ..._PRESENTblocks (and delete the empty blocks), or avoid theusingdirectives and fully-qualify the types inside the#ifregions.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
This PR strengthens reliability and developer experience for DxMessaging by expanding automated test coverage, adding benchmark/allocation validation, and clarifying key user-facing docs.
What users will notice:
MessageAwareComponentinheritance (especially requiredbase.*()calls), troubleshooting, and integrations.Related Issue
Fixes #
Type of Change
Checklist