@oss-autopilot/core - v3.42.2
    Preparing search index...

    Interface FetchedPR

    interface FetchedPR {
        actionReason?: ActionReason;
        actionReasons?: ActionReason[];
        attentionBucket?: AttentionBucket;
        authorPingsSinceMaintainerActivity?: number;
        baseRefName?: string;
        checklistStats?: { checked: number; total: number };
        ciCategorization: CIStatusCategorization;
        ciStatus: CIStatus;
        classifiedChecks: ClassifiedCheck[];
        commitsBehindUpstream?: number;
        createdAt: string;
        daysSinceActivity: number;
        daysSinceMaintainerActivity?: number;
        displayDescription: string;
        displayLabel: string;
        failingCheckNames: string[];
        firstMaintainerResponseAt?: string;
        hasIncompleteChecklist: boolean;
        hasMergeConflict: boolean;
        hasUnrespondedComment: boolean;
        headRefName?: string;
        id: number;
        issueUrl?: string;
        lastMaintainerActivityAt?: string;
        lastMaintainerComment?: { author: string; body: string; createdAt: string };
        latestCommitDate?: string;
        localRepoPath?: string;
        maintainerActionHints: MaintainerActionHint[];
        mentionedIssueUrls?: string[];
        missingRequiredFiles?: string[];
        number: number;
        repo: string;
        reviewDecision: ReviewDecision;
        stalenessTier: StalenessTier;
        status: "needs_addressing" | "waiting_on_maintainer";
        title: string;
        updatedAt: string;
        url: string;
        waitReason?: WaitReason;
    }
    Index
    actionReason?: ActionReason

    Granular reason for needs_addressing status. Undefined when waiting_on_maintainer.

    actionReasons?: ActionReason[]

    All applicable action reasons, ordered by priority. Primary reason is first.

    attentionBucket?: AttentionBucket

    Unified attention bucket (#1352), computed by classifyAttentionBucket() from status/ciStatus/reviewDecision/daysSinceActivity. Stamped by the dashboard data path so the SPA renders the same taxonomy the CLI brief counts. Optional: absent on payloads from older producers.

    authorPingsSinceMaintainerActivity?: number

    Contributor issue comments posted after lastMaintainerActivityAt (unanswered pings).

    baseRefName?: string

    Target branch name (e.g., "main", "master").

    checklistStats?: { checked: number; total: number }
    ciCategorization: CIStatusCategorization

    Aggregate 5-state CI categorization (#1272). Derived from ciStatus, failingCheckNames, and classifiedChecks via categorizeCIStatus() — agents read this directly instead of re-deriving the truth table. Always populated on a fresh fetch (v2 architecture has no cached FetchedPR to migrate); pr-monitor's fetchPRDetails sets it on every PR before construction.

    ciStatus: CIStatus
    classifiedChecks: ClassifiedCheck[]

    Failing checks with category classification (#81). Separates actionable failures from fork limitations and auth gates.

    commitsBehindUpstream?: number

    How many commits the PR branch is behind the base branch.

    createdAt: string
    daysSinceActivity: number

    Calendar days since the most recent activity of any kind (updatedAt), including the contributor's own comments, pushes and rebases. Used for follow-up timing (don't nudge right after a ping) and stale-CI demotion. NOT used for stalenessTier; see daysSinceMaintainerActivity.

    daysSinceMaintainerActivity?: number

    Calendar days since lastMaintainerActivityAt. This is the dormancy clock: stalenessTier is computed from it, so the contributor's own pings and rebases no longer keep an ignored PR "active".

    displayDescription: string

    Brief description of what's happening (#79). E.g., "3 checks failed", "@maintainer commented".

    displayLabel: string

    Human-readable status label for consistent display (#79). E.g., "[CI Failing]", "[Needs Response]".

    failingCheckNames: string[]

    Names of failing CI checks. Useful for distinguishing real CI failures from validation bots.

    firstMaintainerResponseAt?: string

    Earliest maintainer (non-bot, non-contributor) comment or review on this PR (#1461). Computed by fetchPRDetails from the comment/review timeline it already fetches. Persisted with the digest's openPRs so merge/close detection can recover it for the outcome ledger after the PR leaves the open set. Undefined when no maintainer has responded yet.

    hasIncompleteChecklist: boolean

    True when the PR body contains unchecked required checkboxes.

    hasMergeConflict: boolean
    hasUnrespondedComment: boolean

    True when a maintainer commented after the contributor's last comment or commit.

    headRefName?: string
    id: number
    issueUrl?: string

    Issue the PR closes, parsed from the first closing keyword in its body (same closingIssueUrl the merged/closed ledger uses, #1824). Lets the daily run tell a closed PR that was superseded by a still-open PR on the same issue from one whose work really ended (#1863). Undefined when the body has no closing keyword.

    lastMaintainerActivityAt?: string

    Timestamp of the latest maintainer activity, or createdAt when there is none (see getLastMaintainerActivity). Maintainer activity is: an issue comment by an OWNER / MEMBER / COLLABORATOR (any non-contributor non-bot author when the association is unknown); a review or inline review comment by any non-contributor non-bot user; a commit or force-push by someone else, including a maintainer's GitHub App but not auto-fixer or dependency bots; a review request or label by a non-contributor non-bot. Optional: absent on payloads from older producers.

    lastMaintainerComment?: { author: string; body: string; createdAt: string }
    latestCommitDate?: string

    ISO timestamp of the latest commit. Used to determine if changes were pushed after review feedback.

    localRepoPath?: string

    Absolute path to local clone, if the repo is cloned on this machine.

    maintainerActionHints: MaintainerActionHint[]

    Hints extracted from maintainer comments about what actions they are requesting.

    mentionedIssueUrls?: string[]

    Every issue or PR the title and body mention, closing keyword or not (#12, owner/repo#12, issue or pull URL), as canonical issue URLs (mentionedIssueUrls, #1863). Widens the supersede check: a follow-up PR that says "supersedes #8" or "another take on #12" counts as the successor of a closed PR even without Fixes #12. Parsed at assembly time so the daily run needs no extra API calls; empty when nothing is mentioned.

    missingRequiredFiles?: string[]

    Required files the PR is missing (e.g., ["changeset", "CLA"]).

    number: number
    repo: string
    reviewDecision: ReviewDecision
    stalenessTier: StalenessTier

    How stale the PR is, from daysSinceMaintainerActivity (not the contributor's own activity). Independent of status — a PR can be both needs_addressing and dormant.

    status: "needs_addressing" | "waiting_on_maintainer"

    Computed by determineStatus() based on the fields below.

    title: string
    updatedAt: string
    url: string
    waitReason?: WaitReason

    Granular reason for waiting_on_maintainer status. Undefined when needs_addressing.