phacility/phabricator · error · Exception

Unable to load inline "%s".

Error message

Unable to load inline "%s".

What it means

Thrown by loadCommentByIDForEdit() when an inline comment ID from the request cannot be loaded. This path serves comment-edit and comment-preview operations: the controller queries by ID with `needInlineContext(true)` and the acting viewer's policies; a null result (wrong ID, deleted comment, or policy-hidden comment) triggers the exception. It is the edit-path sibling of the reply-path 'Failed to load comment' error.

Source

Thrown at src/infrastructure/diff/PhabricatorInlineCommentController.php:524

  final protected function loadCommentByPHID($phid) {
    $query = $this->newInlineCommentQuery()
      ->withPHIDs(array($phid));

    return $this->loadCommentByQuery($query);
  }

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

    $query = $this->newInlineCommentQuery()
      ->withIDs(array($id))
      ->needInlineContext(true);

    $inline = $this->loadCommentByQuery($query);

    if (!$inline) {
      throw new Exception(
        pht(
          'Unable to load inline "%s".',
          $id));
    }

    if (!$this->canEditInlineComment($viewer, $inline)) {
      throw new Exception(
        pht(
          'Inline comment "%s" is not editable.',
          $id));
    }

    return $inline;
  }

  private function loadCommentByQuery(
    PhabricatorDiffInlineCommentQuery $query) {
    $viewer = $this->getViewer();

View on GitHub (pinned to 5720a38cfe)

Solutions

  1. Reload the review page and open the comment's edit form from the current thread
  2. Confirm the comment ID exists and the acting user can see it (author or appropriate policy)
  3. If comments were purged/migrated, refresh any external links pointing at old inline IDs
Defensive patterns

Strategy: validation

Validate before calling

// Before opening the inline edit endpoint
$inline = id(new PhabricatorDiffInlineCommentQuery())
  ->setViewer($viewer)
  ->withIDs(array($inline_id))
  ->executeOne();
if (!$inline) {
  // render 'comment no longer available' instead of following the edit URL
}

Prevention

When it happens

Trigger: GET/POST to an inline edit endpoint (e.g. `/differential/comment/inline/edit/{id}/`) where the ID does not exist or is invisible; editing a comment that another user deleted moments earlier; IDs from a stale URL for a comment removed by a review update.

Common situations: Stale edit links in open tabs; comment deleted or policy-changed between page load and save; hand-crafted or migrated URLs with wrong IDs.

Related errors


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