paperclipai/paperclip · error

Document has no revision yet.

Error message

Document has no revision yet.

What it means

UI annotation mutation precondition: the target document has no revision yet (not rendered/loaded), so replies or threads cannot be attached because annotations are revision-scoped. The guard fails before the API call; wait for the document revision to load before mutating annotations.

Source

Thrown at ui/src/hooks/useDocumentAnnotationMutations.ts:47

    name: session?.user?.name?.trim() || session?.user?.email?.trim() || "You",
    image: session?.user?.image ?? null,
  }), [session]);
  const queryKey = useMemo(() => options.target.kind === "routine"
    ? queryKeys.routines.documentAnnotations(options.target.routineId, options.target.documentKey, "all")
    : options.target.kind === "case"
      ? queryKeys.cases.documentAnnotations(options.target.caseId, options.target.documentKey, "all")
      : queryKeys.issues.documentAnnotations(options.target.issueId, options.target.documentKey, "all"), [options.target]);
  const invalidateAll = useCallback(() => queryClient.invalidateQueries({
    predicate: (query) => Array.isArray(query.queryKey)
      && query.queryKey[1] === "document-annotations"
      && query.queryKey[2] === (options.target.kind === "issue" ? options.target.issueId : options.target.kind === "case" ? options.target.caseId : options.target.routineId)
      && query.queryKey[3] === options.target.documentKey,
  }), [options.target, queryClient]);

  const createThread = useMutation({
    mutationFn: async (body: string) => {
      if (!options.pendingAnchor) throw new Error("No selection to anchor to.");
      if (!options.baseRevisionId) throw new Error("Document has no revision yet.");
      return documentAnnotationsApi.createForTarget(options.target, {
        baseRevisionId: options.baseRevisionId,
        baseRevisionNumber: options.baseRevisionNumber,
        selector: options.pendingAnchor.selector,
        body,
      });
    },
    onMutate: async (body) => {
      if (!options.pendingAnchor || !options.baseRevisionId) return undefined;
      setMutationError(null);
      await queryClient.cancelQueries({ queryKey });
      const previous = queryClient.getQueryData<DocumentAnnotationThreadWithComments[]>(queryKey);
      const optimistic = buildOptimisticThread(body, options, currentUser);
      queryClient.setQueryData<DocumentAnnotationThreadWithComments[]>(queryKey, (current) => [...(current ?? []), optimistic]);
      options.onFocusThread(optimistic.id);
      return { previous, optimisticId: optimistic.id };
    },
    onError: (error, _body, context) => {

View on GitHub (pinned to 120ae5428f)

Solutions

  1. Wait for the document to load a revision before adding annotations, then retry.
  2. Reload the document so a revision is available.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at ui/src/hooks/useDocumentAnnotationMutations.ts:47 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of paperclipai/paperclip@120ae5428f (2026-08-18). Data as JSON: /api/errors/f073e317be642b7c. Report an issue: GitHub.