paperclipai/paperclip · error

Task-watchdog review is stale because the watched subtree st

Error message

Task-watchdog review is stale because the watched subtree stop fingerprint changed; refresh the source state before mutating it.

What it means

assertFreshTaskWatchdogSourceMutation revalidated the watchdog scope and the watched subtree's stop fingerprint changed since the run started, so the watchdog's view of the source state is stale and mutations are refused until the run refreshes state.

Source

Thrown at server/src/routes/issues.ts:4302

      action: "tasks:manage_active_checkouts",
      resource: { type: "issue", companyId, assigneeAgentId },
    });
    return decision.allowed;
  }

  async function assertAgentIssueMutationAllowed(
    req: Request,
    res: Response,
    issue: {
      id: string;
      companyId: string;
      projectId: string | null;
      parentId: string | null;
      status: string;
      assigneeAgentId: string | null;
      assigneeUserId: string | null;
      reviewPolicy?: IssueReviewPolicy | null;
      /** Used only to name the task in denial copy (plan §6). */
      identifier?: string | null;
    },
    options: { allowVisibleIssueWrite?: boolean } = {},
  ) {
    if (req.actor.type !== "agent") return true;
    const actorAgentId = req.actor.agentId;
    if (!actorAgentId) {
      res.status(403).json({ error: "Agent authentication required" });
      return false;
    }
    // Task-watchdog runs receive a scoped *grant* to mutate issues inside the
    // watched subtree. This must be evaluated before the base assignee-ownership
    // boundary below: that boundary denies an agent mutating an issue owned by a
    // different agent, which is exactly the watchdog's primary job
    // (SPEC-implementation §9.9 — comment, transition, reassign within the
    // watched subtree). The watchdog scope can only widen access to the watched
    // subtree; downstream status-transition, assignment, recovery, and budget
    // guards in the route handlers still apply.

View on GitHub (pinned to 01ad858492)

Solutions

  1. Wait for the conflicting state to clear (running job, hold, pause, or stale fingerprint), refresh the current state, then retry the operation.
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at server/src/routes/issues.ts:4138 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-08-18). Data as JSON: /api/errors/10d981b2a72aee94. Report an issue: GitHub.