From 76453587c94af3439a1446ae8210d1332694db69 Mon Sep 17 00:00:00 2001 From: Chris Huber Date: Thu, 28 May 2026 14:34:40 -0400 Subject: [PATCH] Prevent repeated workspace show loops --- inc/Tools/WorkspaceTools.php | 4 +--- tests/smoke-workspace-policy-tools.php | 8 +++++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/inc/Tools/WorkspaceTools.php b/inc/Tools/WorkspaceTools.php index 4caea7ed..d385dbdd 100644 --- a/inc/Tools/WorkspaceTools.php +++ b/inc/Tools/WorkspaceTools.php @@ -908,8 +908,7 @@ public function getListDefinition(): array */ public function getShowDefinition(): array { - return $this->repeatableDefinition( - array( + return array( 'class' => __CLASS__, 'method' => 'handleShow', 'description' => 'Show detailed information about a workspace repository (branch, remote, latest commit, dirty count).', @@ -923,7 +922,6 @@ public function getShowDefinition(): array ), 'required' => array( 'name' ), ), - ) ); } diff --git a/tests/smoke-workspace-policy-tools.php b/tests/smoke-workspace-policy-tools.php index 9f8e4d20..fba88b4a 100644 --- a/tests/smoke-workspace-policy-tools.php +++ b/tests/smoke-workspace-policy-tools.php @@ -77,7 +77,7 @@ static function ( array $tools ) use ( $tool_id, $definition_callback, $contexts echo "Workspace policy tools - smoke\n"; - new \DataMachineCode\Tools\WorkspaceTools(); + $workspace_tools = new \DataMachineCode\Tools\WorkspaceTools(); $tools = apply_filters('datamachine_tools', array()); $default_pipeline_tools = array( @@ -94,6 +94,12 @@ static function ( array $tools ) use ( $tool_id, $definition_callback, $contexts $assert("{$tool} remains default pipeline-visible", array( 'chat', 'pipeline' ) === ( $tools[ $tool ]['modes'] ?? null )); } + $show_definition = $workspace_tools->getShowDefinition(); + $assert('workspace_show does not allow duplicate repeat calls', 'repeatable' !== ( $show_definition['runtime']['duplicate_policy'] ?? null )); + + $ls_definition = $workspace_tools->getLsDefinition(); + $assert('workspace_ls still allows intentional repeat calls', 'repeatable' === ( $ls_definition['runtime']['duplicate_policy'] ?? null )); + $policy_tools = array( 'workspace_write', 'workspace_edit',