{"record":{"id":"080da6dfec483537","repo":"phacility/phabricator","slug":"you-can-not-raise-a-concern-with-this-commit-becau-080da6","errorCode":null,"errorMessage":"You can not raise a concern with this commit because you have already raised a concern with it.","messagePattern":"You can not raise a concern with this commit because you have already raised a concern with it\\.","errorType":"validation","errorClass":"Exception","httpStatus":null,"severity":"warning","filePath":"src/applications/diffusion/xaction/DiffusionCommitConcernTransaction.php","lineNumber":58,"sourceCode":"    $status = PhabricatorAuditRequestStatus::CONCERNED;\n    $actor = $this->getActor();\n    $this->applyAuditorEffect($object, $actor, $value, $status);\n  }\n\n  protected function validateAction($object, PhabricatorUser $viewer) {\n    if ($this->isViewerCommitAuthor($object, $viewer)) {\n      throw new Exception(\n        pht(\n          'You can not raise a concern with this commit because you are '.\n          'the commit author. You can only raise concerns with commits '.\n          'you did not author.'));\n    }\n\n    // Even if you've already raised a concern, you can raise again as long\n    // as the author requested you verify.\n    if ($this->isViewerFullyRejected($object, $viewer)) {\n      if (!$object->isAuditStatusNeedsVerification()) {\n        throw new Exception(\n          pht(\n            'You can not raise a concern with this commit because you have '.\n            'already raised a concern with it.'));\n      }\n    }\n  }\n\n  public function getTitle() {\n    return pht(\n      '%s raised a concern with this commit.',\n      $this->renderAuthor());\n  }\n\n  public function getTitleForFeed() {\n    return pht(\n      '%s raised a concern with %s.',\n      $this->renderAuthor(),\n      $this->renderObject());","sourceCodeStart":40,"sourceCodeEnd":76,"githubUrl":"https://github.com/phacility/phabricator/blob/5720a38cfe95b00ca4be5016dd0d2f3195f4fa04/src/applications/diffusion/xaction/DiffusionCommitConcernTransaction.php#L40-L76","documentation":"Concern's second guard: if the viewer already fully rejected the commit (isViewerFullyRejected) and the commit's audit status is not 'Needs Verification', raising concern again is refused. Re-raising only becomes possible after the author requests verification, which resets the cycle; anything else would re-record the same rejection.","triggerScenarios":"A concerned auditor clicks Raise Concern a second time while the commit is still in Concern Raised state - no verification request happened in between.","commonSituations":"Impatient reviewers re-flagging after pushing fixes; UI lag causing double submits; scripts that flag on every CI failure without checking state.","solutions":["No second flag needed - the concern is already on record; wait for the author to Request Verification","Authors: use Request Verification after addressing concerns to reopen the reviewer's actions","Make automation skip flagging when it already holds a standing concern"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"if ($this->isViewerFullyRejected($object, $viewer)\n    && !$object->isAuditStatusNeedsVerification()) {\n  // concern already on record; do not re-apply\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Model the audit state machine (concern -> verify -> re-concern) in tooling","Poll commit audit status before applying audit transactions"],"tags":["phabricator","audit","diffusion","duplicate-action","state-machine"],"backgroundTag":"invalid-state-transition","analyzedSha":"5720a38cfe95b00ca4be5016dd0d2f3195f4fa04","analyzedAt":"2026-08-21T05:07:25.672Z","schemaVersion":2},"datasetVersion":"2026-08-21T11:28:35.574Z"}