{"record":{"id":"dc7ce8342a55a33f","repo":"phacility/phabricator","slug":"failed-to-load-a-random-user-you-may-need-to-gene","errorCode":null,"errorMessage":"Failed to load a random user. You may need to generate more test users first.","messagePattern":"Failed to load a random user\\. You may need to generate more test users first\\.","errorType":"console","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"src/applications/lipsum/generator/PhabricatorTestDataGenerator.php","lineNumber":53,"sourceCode":"    return $row['phid'];\n  }\n\n  protected function loadRandomUser() {\n    $viewer = $this->getViewer();\n\n    $user_phid = $this->loadRandomPHID(new PhabricatorUser());\n\n    $user = null;\n    if ($user_phid) {\n      $user = id(new PhabricatorPeopleQuery())\n        ->setViewer($viewer)\n        ->withPHIDs(array($user_phid))\n        ->needUserSettings(true)\n        ->executeOne();\n    }\n\n    if (!$user) {\n      throw new Exception(\n        pht(\n          'Failed to load a random user. You may need to generate more '.\n          'test users first.'));\n    }\n\n    return $user;\n  }\n\n  protected function getLipsumContentSource() {\n    return PhabricatorContentSource::newForSource(\n      PhabricatorLipsumContentSource::SOURCECONST);\n  }\n\n  /**\n   * Roll `n` dice with `d` sides each, then add `bonus` and return the sum.\n   */\n  protected function roll($n, $d, $bonus = 0) {\n    $sum = 0;","sourceCodeStart":35,"sourceCodeEnd":71,"githubUrl":"https://github.com/phacility/phabricator/blob/5720a38cfe95b00ca4be5016dd0d2f3195f4fa04/src/applications/lipsum/generator/PhabricatorTestDataGenerator.php#L35-L71","documentation":"Lipsum (fake data) generators attach a random author to each generated object; loadRandomPHID(new PhabricatorUser()) found no user PHID (or the load failed), so no test author could be chosen. On any normal install this means the database has no users yet to pick from -- typical of a fresh install where data generators ran before user generation.","triggerScenarios":"Running './bin/lipsum generate tasks' (or any object generator needing an author) on a database with zero or no loadable users.","commonSituations":"Fresh development install where lipsum is run before users exist; a pruned/reset database; test fixtures generated against an empty DB.","solutions":["Generate users first: './bin/lipsum generate users' (the users generator key is 'users').","Or create at least one real account, then re-run the original generator.","Script installs to always generate users before content generators."],"exampleFix":"// before\n./bin/lipsum generate tasks\n// after\n./bin/lipsum generate users && ./bin/lipsum generate tasks","handlingStrategy":"validation","validationCode":"// Ensure at least one user exists before running object generators:\n$count = id(new PhabricatorPeopleQuery())\n  ->setViewer(PhabricatorUser::getOmnipotentUser())\n  ->execute();\nif (!count($count)) {\n  phutil_passthru('%s generate users', './bin/lipsum');\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Order fixture generation: users first, then content generators.","Wrap lipsum runs in scripts that assert a nonzero user count before invoking generators."],"tags":["lipsum","phabricator","test-data","cli","generator"],"backgroundTag":"missing-test-data","analyzedSha":"5720a38cfe95b00ca4be5016dd0d2f3195f4fa04","analyzedAt":"2026-08-21T05:07:25.672Z","schemaVersion":2},"datasetVersion":"2026-08-21T11:28:35.574Z"}