{"record":{"id":"b28f93ef2ce09359","repo":"phacility/phabricator","slug":"you-can-not-resign-from-this-commit-because-you-ar","errorCode":null,"errorMessage":"You can not resign from this commit because you are not an active auditor.","messagePattern":"You can not resign from this commit because you are not an active auditor\\.","errorType":"validation","errorClass":"Exception","httpStatus":null,"severity":"warning","filePath":"src/applications/diffusion/xaction/DiffusionCommitResignTransaction.php","lineNumber":46,"sourceCode":"\n  public function getActionName() {\n    return pht('Resigned');\n  }\n\n  public function generateOldValue($object) {\n    $actor = $this->getActor();\n    return !$this->isViewerAnyActiveAuditor($object, $actor);\n  }\n\n  public function applyExternalEffects($object, $value) {\n    $status = PhabricatorAuditRequestStatus::RESIGNED;\n    $actor = $this->getActor();\n    $this->applyAuditorEffect($object, $actor, $value, $status);\n  }\n\n  protected function validateAction($object, PhabricatorUser $viewer) {\n    if (!$this->isViewerAnyActiveAuditor($object, $viewer)) {\n      throw new Exception(\n        pht(\n          'You can not resign from this commit because you are not an '.\n          'active auditor.'));\n    }\n  }\n\n  public function getTitle() {\n    return pht(\n      '%s resigned from this commit.',\n      $this->renderAuthor());\n  }\n\n  public function getTitleForFeed() {\n    return pht(\n      '%s resigned from %s.',\n      $this->renderAuthor(),\n      $this->renderObject());\n  }","sourceCodeStart":28,"sourceCodeEnd":64,"githubUrl":"https://github.com/phacility/phabricator/blob/5720a38cfe95b00ca4be5016dd0d2f3195f4fa04/src/applications/diffusion/xaction/DiffusionCommitResignTransaction.php#L28-L64","documentation":"Resign requires the actor to hold an active auditor request on the commit (isViewerAnyActiveAuditor). If you were never added as an auditor, or already resigned, the action has nothing to resign from and validateAction() refuses it.","triggerScenarios":"A user who is CC'd but not an auditor tries Resign; an auditor who already resigned clicks it again; a Differential reviewer (not a commit auditor) attempts to resign from a commit.","commonSituations":"Confusion between Differential reviewers and Diffusion commit auditors; users trying to silence audit mail by 'resigning' from commits they were merely subscribed to.","solutions":["Check the commit's Auditors table - Resign only applies to active auditor entries naming you","If you were only subscribed, use unsubscribe/notification settings instead","If you already resigned, nothing further is needed"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"if (!$this->isViewerAnyActiveAuditor($object, $viewer)) {\n  // hide or disable the Resign action\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Offer the action only when isViewerAnyActiveAuditor() is true - the class already exposes this check for isValid()","Teach users the difference between commit auditors and subscribers"],"tags":["phabricator","audit","diffusion","resign","state-machine"],"backgroundTag":"invalid-state-transition","analyzedSha":"5720a38cfe95b00ca4be5016dd0d2f3195f4fa04","analyzedAt":"2026-08-21T05:07:25.672Z","schemaVersion":2},"datasetVersion":"2026-08-21T11:28:35.574Z"}