diff --git a/tests/Polyphony.Tests/Routing/CrossProcessPhaseDetectorTests.cs b/tests/Polyphony.Tests/Routing/CrossProcessPhaseDetectorTests.cs
new file mode 100644
index 00000000..af6682ff
--- /dev/null
+++ b/tests/Polyphony.Tests/Routing/CrossProcessPhaseDetectorTests.cs
@@ -0,0 +1,583 @@
+using Polyphony.Routing;
+using Polyphony.Tests.TestFixtures;
+using Shouldly;
+using Twig.Domain.Enums;
+using Twig.Domain.Services.Process;
+using Xunit;
+
+namespace Polyphony.Tests.Routing;
+
+///
+/// Cross-process template tests for composite plannable→plannable→implementable hierarchy chains.
+/// Validates that phase detection routes correctly at each level of a three-tier hierarchy
+/// across Basic, Agile, Scrum, and CMMI process templates.
+///
+public sealed class CrossProcessPhaseDetectorTests
+{
+ ///
+ /// Defines the composite hierarchy structure for a single process template.
+ ///
+ private sealed record CompositeTemplate(
+ string Name,
+ string TopType,
+ string MiddleType,
+ string[] MiddleCapabilities,
+ string LeafType,
+ string ProposedState,
+ string InProgressState,
+ string CompletedState);
+
+ private static readonly CompositeTemplate[] Templates =
+ [
+ new("Basic", "Epic", "Issue", ["plannable"], "Task", "To Do", "Doing", "Done"),
+ new("Agile", "Epic", "User Story", ["plannable", "implementable"], "Task", "New", "Active", "Closed"),
+ new("Scrum", "Epic", "Product Backlog Item", ["plannable", "implementable"], "Task", "New", "Committed", "Done"),
+ new("CMMI", "Epic", "Requirement", ["plannable", "implementable"], "Task", "Proposed", "Active", "Closed"),
+ ];
+
+ public static IEnumerable