{"record":{"id":"a541097adbe97dbf","repo":"phacility/phabricator","slug":"user-aborted-the-workflow-a54109","errorCode":null,"errorMessage":"User aborted the workflow.","messagePattern":"User aborted the workflow\\.","errorType":"console","errorClass":"PhutilArgumentUsageException","httpStatus":null,"severity":"info","filePath":"src/applications/repository/management/PhabricatorRepositoryManagementClusterizeWorkflow.php","lineNumber":105,"sourceCode":"        echo id(new PhutilConsoleBlock())\n          ->addParagraph(\n            pht(\n              'Service \"%s\" is actively bound to more than one device (%s).',\n              $service_name,\n              implode(', ', $device_names)))\n          ->addParagraph(\n            pht(\n              'If you clusterize a repository onto this service it may be '.\n              'unclear which devices have up-to-date copies of the '.\n              'repository. If so, leader/follower ambiguity will freeze the '.\n              'repository. You may need to manually promote a device to '.\n              'unfreeze it. See \"Ambiguous Leaders\" in the documentation '.\n              'for discussion.'))\n          ->drawConsoleString();\n\n        $prompt = pht('Continue anyway?');\n        if (!phutil_console_confirm($prompt)) {\n          throw new PhutilArgumentUsageException(\n            pht('User aborted the workflow.'));\n        }\n      }\n    } else {\n      $service_phid = null;\n    }\n\n    $content_source = $this->newContentSource();\n    $diffusion_phid = id(new PhabricatorDiffusionApplication())->getPHID();\n\n    foreach ($repositories as $repository) {\n      $xactions = array();\n\n      $xactions[] = id(new PhabricatorRepositoryTransaction())\n        ->setTransactionType(\n          PhabricatorRepositoryServiceTransaction::TRANSACTIONTYPE)\n        ->setNewValue($service_phid);\n","sourceCodeStart":87,"sourceCodeEnd":123,"githubUrl":"https://github.com/phacility/phabricator/blob/5720a38cfe95b00ca4be5016dd0d2f3195f4fa04/src/applications/repository/management/PhabricatorRepositoryManagementClusterizeWorkflow.php#L87-L123","documentation":"Thrown by 'bin/repository clusterize' when its safety confirmation prompt (Continue anyway?) is answered negatively. The prompt appears when the target service has devices without up-to-date copies, risking leader/follower ambiguity that can freeze the repository; aborting is the designed outcome and nothing has been modified at this point.","triggerScenarios":"Answering 'n' or EOF to the phutil_console_confirm prompt during clusterize; running clusterize non-interactively where stdin supplies a negative answer.","commonSituations":"Admin reads the ambiguity warning about devices without up-to-date copies and correctly aborts to fix state first; automation invoking the command without a TTY defaulting to no.","solutions":["If you intended to proceed, resolve the ambiguity first (verify which devices hold current copies), then re-run and answer y","Read the Ambiguous Leaders documentation referenced by the prompt before forcing a clusterize onto a partially synced service","For automation, ensure all devices are synced so the prompt does not appear"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// In automation, ensure preconditions hold so the prompt never appears:\n// all devices bound to the service hold up-to-date repository copies.\n// Non-interactive callers should run only when devices are synced.","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Verify device sync state before clusterizing onto partially copied services","Read the Ambiguous Leaders documentation so the warning is understood, not bypassed","Run interactive maintenance commands from a real TTY"],"tags":["phabricator","cli","confirmation","clustering","aborted"],"backgroundTag":"user-aborted-confirmation","analyzedSha":"5720a38cfe95b00ca4be5016dd0d2f3195f4fa04","analyzedAt":"2026-08-21T05:07:25.672Z","schemaVersion":2},"datasetVersion":"2026-08-21T11:28:35.574Z"}