phacility/phabricator · info · PhutilArgumentUsageException
Aborted, your objects are safe.
Error message
Aborted, your objects are safe.
What it means
Without --force, the destroy workflow asks for an interactive confirmation ('Are you absolutely certain...'). Declining throws PhutilArgumentUsageException with this message and nothing is destroyed. It is a deliberate safety stop, not a malfunction.
Source
Thrown at src/applications/system/management/PhabricatorSystemRemoveDestroyWorkflow.php:140
foreach ($named_objects as $object_name => $object) {
$phid = $object->getPHID();
$console->writeOut(
" - %s (%s) %s\n",
$object_name,
get_class($object),
$handles[$phid]->getFullName());
}
$force = $args->getArg('force');
if (!$force) {
$ok = $console->confirm(
pht(
'Are you absolutely certain you want to destroy these %s object(s)?',
phutil_count($named_objects)));
if (!$ok) {
throw new PhutilArgumentUsageException(
pht('Aborted, your objects are safe.'));
}
}
$console->writeOut("%s\n", pht('Destroying objects...'));
$notes = array();
foreach ($named_objects as $object_name => $object) {
$console->writeOut(
pht(
"Destroying %s **%s**...\n",
get_class($object),
$object_name));
$engine = id(new PhabricatorDestructionEngine())
->setCollectNotes(true);
$engine->destroyObject($object);View on GitHub (pinned to 5720a38cfe)
Solutions
- Re-run and answer y if destruction is really intended
- In validated automation, pass --force to skip the prompt entirely
- Treat a non-zero exit carrying this message as a clean no-op abort, not a failure to retry
Example fix
# before: interactive prompt, declined ./bin/remove destroy T123 # after: explicit non-interactive destroy after validation ./bin/remove destroy --force T123
Defensive patterns
Strategy: validation
Validate before calling
# Validate the target list yourself, then decide the prompt's fate explicitly if [ "$CONFIRMED" = "yes" ]; then ./bin/remove destroy --force $NAMES else echo "not confirmed; skipping destroy" >&2 fi
Prevention
- Use --force only after independently validating the target list
- Scripts should expect a non-zero exit whose output contains 'Aborted' and treat it as a clean no-op
- Never automate answering the interactive prompt blindly
When it happens
Trigger: Running ./bin/remove destroy interactively and answering no; scripts driving the command non-interactively where stdin supplies a negative or empty answer.
Common situations: Automation piping unanticipated input into the command; an operator changing their mind at the prompt.
Related errors
- Aborted workflow.
- Declining to invoice.
- User aborted the workflow.
- Specify one or more objects to destroy.
- No such object "%s" exists!
AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21).
Data as JSON: /api/errors/babe0221d5fd2cbf.
Report an issue: GitHub.