{"record":{"id":"cfd821198bb96517","repo":"phacility/phabricator","slug":"status-s-is-marked-as-default-but-it-is-a-clos","errorCode":null,"errorMessage":"Status \"%s\" is marked as default, but it is a closed status. The default status should be an open status.","messagePattern":"Status \"(.+?)\" is marked as default, but it is a closed status\\. The default status should be an open status\\.","errorType":"validation","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"src/applications/maniphest/constants/ManiphestTaskStatus.php","lineNumber":345,"sourceCode":"      $special = idx($value, 'special');\n      if (!$special) {\n        continue;\n      }\n\n      if (isset($special_map[$special])) {\n        throw new Exception(\n          pht(\n            'Configuration has two statuses both marked with the special '.\n            'attribute \"%s\" (\"%s\" and \"%s\"). There should be only one.',\n            $special,\n            $special_map[$special],\n            $key));\n      }\n\n      switch ($special) {\n        case self::SPECIAL_DEFAULT:\n          if (!empty($value['closed'])) {\n            throw new Exception(\n              pht(\n                'Status \"%s\" is marked as default, but it is a closed '.\n                'status. The default status should be an open status.',\n                $key));\n          }\n          break;\n        case self::SPECIAL_CLOSED:\n          if (empty($value['closed'])) {\n            throw new Exception(\n              pht(\n                'Status \"%s\" is marked as the default status for closing '.\n                'tasks, but is not a closed status. It should be a closed '.\n                'status.',\n                $key));\n          }\n          break;\n        case self::SPECIAL_DUPLICATE:\n          if (empty($value['closed'])) {","sourceCodeStart":327,"sourceCodeEnd":363,"githubUrl":"https://github.com/phacility/phabricator/blob/5720a38cfe95b00ca4be5016dd0d2f3195f4fa04/src/applications/maniphest/constants/ManiphestTaskStatus.php#L327-L363","documentation":"A status marked with \"special\": \"default\" (the status new tasks get) must be an open status, i.e. its spec must not set \"closed\": true. The validator's SPECIAL_DEFAULT case throws naming the offending status constant when the default is also flagged closed.","triggerScenarios":"maniphest.statuses entry like {\"resolved\": {\"name\": \"Resolved\", \"closed\": true, \"special\": \"default\"}} — every newly created task would otherwise be born closed.","commonSituations":"Repointing the default to a 'done'-style status during workflow experiments. Copying a closed status as a starting point for the new default and forgetting to remove the \"closed\" flag.","solutions":["Mark an open status as the default: keep \"closed\" unset/false on the default status.","If you want tasks created directly into a closed-ish state, use an open status with a name like 'Deferred' instead of a closed one.","Re-check the pair of fields ('special' and 'closed') together whenever you change either."],"exampleFix":"// before\n'done' => array('name' => 'Done', 'closed' => true, 'special' => 'default'),\n\n// after\n'open' => array('name' => 'Open', 'special' => 'default'),","handlingStrategy":"validation","validationCode":"foreach ($statuses as $constant => $spec) {\n  if (idx($spec, 'special') === 'default' && !empty($spec['closed'])) {\n    throw new InvalidArgumentException(\"Default status '$constant' must be open\");\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["The 'special': 'default' status must not set 'closed': true.","When repointing the default, review both fields together.","Model new defaults on the shipped 'open' entry."],"tags":["phabricator","maniphest","configuration","status","special-role","semantic-validation"],"backgroundTag":"config-consistency-error","analyzedSha":"5720a38cfe95b00ca4be5016dd0d2f3195f4fa04","analyzedAt":"2026-08-21T05:07:25.672Z","schemaVersion":2},"datasetVersion":"2026-08-21T11:28:35.574Z"}