From 1fa25809de30470182e8e7a0e58925ec42058917 Mon Sep 17 00:00:00 2001 From: codex Date: Tue, 4 Aug 2026 09:26:43 +0300 Subject: [PATCH] fix: queue readiness command for active fixture document --- .../FirstLimitedApplyAutomation.cs | 8 +++++++- .../tests/PRecAnnot.Core.Tests/FoundationTests.cs | 10 ++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Plant3D2026/P_Rec_Annot/src/PRecAnnot.Plant3D2026/FirstLimitedApplyAutomation.cs b/Plant3D2026/P_Rec_Annot/src/PRecAnnot.Plant3D2026/FirstLimitedApplyAutomation.cs index 289711f..df7853e 100644 --- a/Plant3D2026/P_Rec_Annot/src/PRecAnnot.Plant3D2026/FirstLimitedApplyAutomation.cs +++ b/Plant3D2026/P_Rec_Annot/src/PRecAnnot.Plant3D2026/FirstLimitedApplyAutomation.cs @@ -273,8 +273,14 @@ internal sealed class FirstLimitedApplyAutomationCoordinator private void QueueReadinessBarrier() { if (IsTerminal || document is null) return; + var active = AcadApplication.DocumentManager.MdiActiveDocument; + if (active is null || !string.Equals(active.Name, document.Name, StringComparison.OrdinalIgnoreCase)) + { + Complete(false, "AUTOMATION_READINESS_DOCUMENT_NOT_ACTIVE"); + return; + } transitions.Add("ReadinessBarrierQueued"); - document.SendStringToExecute("PHP_REC_AUTOMATION_READY\n", true, true, false); + document.SendStringToExecute("PHP_REC_AUTOMATION_READY\n", true, false, false); } private void OnCommandEnded(object sender, CommandEventArgs e) { diff --git a/Plant3D2026/P_Rec_Annot/tests/PRecAnnot.Core.Tests/FoundationTests.cs b/Plant3D2026/P_Rec_Annot/tests/PRecAnnot.Core.Tests/FoundationTests.cs index da7d2f4..69a0435 100644 --- a/Plant3D2026/P_Rec_Annot/tests/PRecAnnot.Core.Tests/FoundationTests.cs +++ b/Plant3D2026/P_Rec_Annot/tests/PRecAnnot.Core.Tests/FoundationTests.cs @@ -110,6 +110,16 @@ public sealed class FoundationTests Assert.Contains("TryActivateProjectAndVerifyContext();", source); } + [Fact] public void QueueReadinessBarrier_RequiresActiveFixtureAndUsesSafeDispatch() + { + var source = File.ReadAllText(Path.Combine(ProjectRoot, "src", "PRecAnnot.Plant3D2026", "FirstLimitedApplyAutomation.cs")); + var barrier = source[source.IndexOf("private void QueueReadinessBarrier", StringComparison.Ordinal)..source.IndexOf("private void OnCommandEnded", StringComparison.Ordinal)]; + Assert.Contains("MdiActiveDocument", barrier); + Assert.Contains("AUTOMATION_READINESS_DOCUMENT_NOT_ACTIVE", barrier); + Assert.Contains("PHP_REC_AUTOMATION_READY\\n\", true, false, false", barrier); + Assert.True(barrier.IndexOf("AUTOMATION_READINESS_DOCUMENT_NOT_ACTIVE", StringComparison.Ordinal) < barrier.IndexOf("SendStringToExecute", StringComparison.Ordinal)); + } + [Fact] public void AutomationControlledExit_QueuesNativeQuitAfterPublicCommand() { var source = File.ReadAllText(Path.Combine(ProjectRoot, "src", "PRecAnnot.Plant3D2026", "FirstLimitedApplyAutomation.cs"));