makeplane/plane · error · Error

Issue not found

Error message

Issue not found

What it means

Thrown by fetchIssueWithIdentifier in the web issue store when retrieveWithIdentifier returns a falsy issue, or one missing id/project_id. The lookup uses workspaceSlug + project_identifier + sequence_id (e.g. 'PLAN-123'); a miss means no issue matches that identifier triple.

Source

Thrown at apps/web/core/store/issue/issue-details/issue.store.ts:282

      [issueId]
    );
    await this.rootIssueDetailStore.activity.fetchActivities(workspaceSlug, projectId, issueId);
    return currentModule;
  };

  fetchIssueWithIdentifier = async (workspaceSlug: string, project_identifier: string, sequence_id: string) => {
    const query = {
      expand: "issue_reactions,issue_attachments,issue_link,parent",
    };
    const issue = await this.issueService.retrieveWithIdentifier(workspaceSlug, project_identifier, sequence_id, query);
    const issueIdentifier = `${project_identifier}-${sequence_id}`;
    const issueId = issue?.id;
    const projectId = issue?.project_id;
    const rootWorkItemDetailStore = issue?.is_epic
      ? this.rootIssueDetailStore.rootIssueStore.epicDetail
      : this.rootIssueDetailStore.rootIssueStore.issueDetail;

    if (!issue || !projectId || !issueId) throw new Error("Issue not found");

    const issuePayload = this.addIssueToStore(issue);
    this.rootIssueDetailStore.rootIssueStore.issues.addIssue([issuePayload]);

    // handle parent issue if exists
    if (issue?.parent && issue?.parent?.id && issue?.parent?.project_id) {
      this.issueService.retrieve(workspaceSlug, issue.parent.project_id, issue.parent.id).then((res) => {
        this.rootIssueDetailStore.rootIssueStore.issues.addIssue([res]);
      });
    }

    // add identifiers to map
    rootWorkItemDetailStore.rootIssueStore.issues.addIssueIdentifier(issueIdentifier, issueId);

    // add related data
    if (issue.issue_reactions) rootWorkItemDetailStore.addReactions(issue.id, issue.issue_reactions);
    if (issue.issue_link) rootWorkItemDetailStore.addLinks(issue.id, issue.issue_link);
    if (issue.issue_attachments) rootWorkItemDetailStore.addAttachments(issue.id, issue.issue_attachments);

View on GitHub (pinned to 1c8a60f858)

Solutions

  1. Confirm the identifier triple is correct and current (project identifier changes when a project is renamed).
  2. Verify the user has access to the project and the issue is not archived/deleted.
  3. Inspect the network response from retrieveWithIdentifier — a 404 vs 403 vs 200-with-empty-body points to different root causes.
  4. Handle the thrown error in the route to show a 'not found' page instead of crashing the workspace view.

Example fix

// before: throws and propagates upward
if (!issue || !projectId || !issueId) throw new Error("Issue not found");
// after: branch on the API outcome and surface a typed result
if (!issue || !projectId || !issueId) {
  return { status: 'not-found' } as const;
}
Defensive patterns

Strategy: try-catch

Validate before calling

// Validate identifier shape before calling
const seqRe = /^-?\d+$/;
if (!workspaceSlug || !project_identifier || !seqRe.test(sequence_id)) {
  showNotFound();
  return;
}

Type guard

const isResolvedIssue = (i: unknown): i is { id: string; project_id: string } =>
  typeof i === 'object' && i !== null &&
  typeof (i as any).id === 'string' &&
  typeof (i as any).project_id === 'string';

Try / catch

try { await fetchIssueWithIdentifier(workspaceSlug, project_identifier, sequence_id); }
catch (e) { renderNotFoundPage(); }

Prevention

When it happens

Trigger: Navigating to an issue URL whose identifier does not exist (typo in sequence/identifier), the issue was deleted, the project was moved/renamed so the identifier changed, the user lacks access (some backends return 404 instead of 403 to avoid leaking existence), or the API returned a partial/malformed payload missing id/project_id.

Common situations: Old bookmarked link to a deleted issue; pasting a truncated identifier; permission changes that removed the user from the project; cross-workspace link opened by a user without access.

Related errors


AI-assisted analysis of makeplane/plane@1c8a60f858 (2026-08-12). Data as JSON: /api/errors/ff567f6a9bbf2676. Report an issue: GitHub.