phacility/phabricator · error · Exception

Unable to load inline "%d".

Error message

Unable to load inline "%d".

What it means

loadCommentForDone() loads an inline comment by ID for the 'Done' action. A null result — no such inline visible to the user — throws 'Unable to load inline'. The ID came from a stale page or a comment that no longer exists.

Source

Thrown at src/applications/differential/controller/DifferentialInlineCommentEditController.php:74

          'Changeset ID "%s" is part of diff ID "%s", but that diff '.
          'is attached to revision "%s", not revision "%s".',
          $changeset_id,
          $diff->getID(),
          $diff->getRevisionID(),
          $revision->getID()));
    }

    return id(new DifferentialInlineComment())
      ->setRevision($revision)
      ->setChangesetID($changeset_id);
  }

  protected function loadCommentForDone($id) {
    $viewer = $this->getViewer();

    $inline = $this->loadCommentByID($id);
    if (!$inline) {
      throw new Exception(pht('Unable to load inline "%d".', $id));
    }

    $changeset = id(new DifferentialChangesetQuery())
      ->setViewer($viewer)
      ->withIDs(array($inline->getChangesetID()))
      ->executeOne();
    if (!$changeset) {
      throw new Exception(pht('Unable to load changeset.'));
    }

    $diff = id(new DifferentialDiffQuery())
      ->setViewer($viewer)
      ->withIDs(array($changeset->getDiffID()))
      ->executeOne();
    if (!$diff) {
      throw new Exception(pht('Unable to load diff.'));
    }

View on GitHub (pinned to 5720a38cfe)

Solutions

  1. Reload the revision view and retry the 'Done' action.
  2. Verify the comment still exists on the current diff.
  3. Discard stale dialog state after failed requests instead of resubmitting.
Defensive patterns

Strategy: try-catch

Try / catch

try {
  // perform the 'Done' action on the inline comment
} catch (Exception $ex) {
  if (preg_match('/Unable to load inline/', $ex->getMessage())) {
    // comment gone: refresh the revision view and drop stale dialog state
  } else {
    throw $ex;
  }
}

Prevention

When it happens

Trigger: Marking an inline comment 'Done' with a stale or deleted comment id, or with an id the viewer cannot see (drafts of other users, policy-hidden comments).

Common situations: Clicking 'Done' on a page rendered before the comment was deleted or before the diff was updated; stale dialog state after a failed request.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21). Data as JSON: /api/errors/02fa18e7c677bf6b. Report an issue: GitHub.