@reneturcios/greenlight 0.3.2 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Merge velocity: how fast outside PRs land in a repo. Signal only, never
3
+ * a verdict input: resend merges outsiders same-day while crewAI's
4
+ * buildable issues were all claimed by a cohort, and only the share of
5
+ * non-collaborator merges tells those stories apart.
6
+ *
7
+ * Economical by design: a single /pulls call (author_association comes
8
+ * back in the list response, so no per-author collaborator checks).
9
+ */
10
+ import { apiGet } from "./github.js";
11
+ const INTERNAL = new Set(["OWNER", "MEMBER", "COLLABORATOR"]);
12
+ const SAMPLE = 30;
13
+ export function computeMergeVelocityStats(rows) {
14
+ const merged = rows.filter((r) => r.mergedAt);
15
+ if (merged.length === 0)
16
+ return null;
17
+ const external = merged.filter((r) => !INTERNAL.has(r.authorAssociation)).length;
18
+ const days = merged
19
+ .map((r) => (new Date(r.mergedAt).getTime() - new Date(r.createdAt).getTime()) / 86400000)
20
+ .sort((a, b) => a - b);
21
+ const mid = Math.floor(days.length / 2);
22
+ const median = days.length % 2 === 1 ? days[mid] : (days[mid - 1] + days[mid]) / 2;
23
+ return {
24
+ mergedPRs: merged.length,
25
+ externalShare: Math.round((external / merged.length) * 100) / 100,
26
+ medianMergeDays: Math.round(median * 10) / 10,
27
+ };
28
+ }
29
+ /** One-line human summary, e.g. "external merge share 40%, median merge 2.1d (28 merged PRs)". */
30
+ export function describeMergeVelocity(s) {
31
+ return `external merge share ${Math.round(s.externalShare * 100)}%, median merge ${s.medianMergeDays}d (${s.mergedPRs} merged PRs)`;
32
+ }
33
+ /** The newest closed PRs (bounded), from which the merged sample is drawn. */
34
+ export async function fetchMergeVelocity(owner, repo, deps = {}) {
35
+ let rows;
36
+ if (deps.listClosedPulls) {
37
+ rows = await deps.listClosedPulls(owner, repo);
38
+ }
39
+ else {
40
+ const data = (await apiGet(`/repos/${owner}/${repo}/pulls?state=closed&sort=updated&direction=desc&per_page=${SAMPLE}`));
41
+ rows = (data ?? []).map((p) => ({
42
+ authorAssociation: String(p.author_association ?? ""),
43
+ createdAt: String(p.created_at ?? ""),
44
+ mergedAt: p.merged_at == null ? null : String(p.merged_at),
45
+ }));
46
+ }
47
+ return computeMergeVelocityStats(rows);
48
+ }
49
+ //# sourceMappingURL=merge-velocity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-velocity.js","sourceRoot":"","sources":["../src/merge-velocity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface ServerSideDeps {
2
+ /** Test seam: number of code-search hits for a literal string in the repo. */
3
+ codeSearch?: (owner: string, repo: string, literal: string) => Promise<number>;
4
+ }
5
+ /**
6
+ * Pull candidate error strings out of an issue body: backtick-quoted spans,
7
+ * double-quoted spans that start capitalized (error text, not prose), and
8
+ * explicit "error:" lines. Bounded at 4 candidates; each 8-160 chars so
9
+ * short tokens do not become useless search queries.
10
+ */
11
+ export declare function extractErrorStrings(body: string): string[];
12
+ /**
13
+ * Returns { flag: "possibly-server-side", evidence } when a distinctive
14
+ * quoted error string from the body has zero hits in the repo, else null.
15
+ * Only the first two candidates are searched (each costs one API call).
16
+ * Any search failure returns null: no evidence, no flag.
17
+ */
18
+ export declare function detectServerSideOnly(owner: string, repo: string, body: string, deps?: ServerSideDeps): Promise<{
19
+ flag: string;
20
+ evidence: string;
21
+ } | null>;
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Server-side-only detection. Some issues cannot be fixed in the repo at
3
+ * all: ComposioHQ/composio#4852's HTTP 422 / code 1706 rejection is enforced
4
+ * by Composio's closed backend, while the repo holds only SDKs that pass
5
+ * the auth config straight through. A full build burned on it before anyone
6
+ * noticed the error text existed nowhere in the codebase.
7
+ *
8
+ * Heuristic: extract quoted error strings from the issue body and code-search
9
+ * the repo for them. Zero hits on a distinctive string means the check
10
+ * probably lives outside the repo. Best-effort by contract: rate limits,
11
+ * search failures, or an empty candidate list all yield null, never a
12
+ * guess. No verdict change, warning only.
13
+ */
14
+ import { apiGet } from "./github.js";
15
+ /**
16
+ * Pull candidate error strings out of an issue body: backtick-quoted spans,
17
+ * double-quoted spans that start capitalized (error text, not prose), and
18
+ * explicit "error:" lines. Bounded at 4 candidates; each 8-160 chars so
19
+ * short tokens do not become useless search queries.
20
+ */
21
+ export function extractErrorStrings(body) {
22
+ const out = [];
23
+ const add = (s) => {
24
+ const t = s.trim();
25
+ if (t.length >= 8 && t.length <= 160 && !out.includes(t))
26
+ out.push(t);
27
+ };
28
+ for (const m of body.matchAll(/`([^`]{8,160})`/g))
29
+ add(m[1]);
30
+ for (const m of body.matchAll(/"([A-Z][^"\n]{7,159})"/g))
31
+ add(m[1]);
32
+ for (const m of body.matchAll(/\berror\s*[:=]\s*["']?([^"'\n]{8,160})/gi))
33
+ add(m[1]);
34
+ return out.slice(0, 4);
35
+ }
36
+ /**
37
+ * Returns { flag: "possibly-server-side", evidence } when a distinctive
38
+ * quoted error string from the body has zero hits in the repo, else null.
39
+ * Only the first two candidates are searched (each costs one API call).
40
+ * Any search failure returns null: no evidence, no flag.
41
+ */
42
+ export async function detectServerSideOnly(owner, repo, body, deps = {}) {
43
+ const candidates = extractErrorStrings(body);
44
+ if (candidates.length === 0)
45
+ return null;
46
+ const search = deps.codeSearch ??
47
+ (async (o, r, literal) => {
48
+ const data = (await apiGet(`/search/code?q=${encodeURIComponent(`repo:${o}/${r} "${literal}"`)}&per_page=1`));
49
+ return data.total_count ?? 0;
50
+ });
51
+ for (const c of candidates.slice(0, 2)) {
52
+ let hits;
53
+ try {
54
+ hits = await search(owner, repo, c);
55
+ }
56
+ catch {
57
+ return null; // rate limited or search failed: emit nothing rather than guessing
58
+ }
59
+ if (hits === 0) {
60
+ return {
61
+ flag: "possibly-server-side",
62
+ evidence: `error text "${c}" not found anywhere in ${owner}/${repo}; the check may be enforced by a backend service outside this repo`,
63
+ };
64
+ }
65
+ }
66
+ return null;
67
+ }
68
+ //# sourceMappingURL=server-side.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-side.js","sourceRoot":"","sources":["../src/server-side.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAOrC;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAS,EAAQ,EAAE;QAC9B,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAAa,EACb,IAAY,EACZ,IAAY,EACZ,OAAuB,EAAE;IAEzB,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,MAAM,GACV,IAAI,CAAC,UAAU;QACf,CAAC,KAAK,EAAE,CAAS,EAAE,CAAS,EAAE,OAAe,EAAmB,EAAE;YAChE,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CACxB,kBAAkB,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,OAAO,GAAG,CAAC,aAAa,CACjF,CAA6B,CAAC;YAC/B,OAAO,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACvC,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC,CAAC,mEAAmE;QAClF,CAAC;QACD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,sBAAsB;gBAC5B,QAAQ,EAAE,eAAe,CAAC,2BAA2B,KAAK,IAAI,IAAI,oEAAoE;aACvI,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
package/dist/types.d.ts CHANGED
@@ -17,6 +17,14 @@ export interface LinkedPR {
17
17
  url: string;
18
18
  /** How strongly the PR is tied to the issue. Only "closing" PRs take an issue. */
19
19
  linkStrength: "closing" | "mention";
20
+ /**
21
+ * Where the link was found: "timeline" for GitHub's own
22
+ * cross-referenced timeline events (the strongest race signal; a PR in
23
+ * flight against the issue even when its body never says "closes #N"),
24
+ * "search" for issue-number search hits, "comment" for PRs cited in
25
+ * comments. Absent on older fixtures.
26
+ */
27
+ via?: "timeline" | "search" | "comment";
20
28
  }
21
29
  /** A pull request referenced in an issue comment, fetched and checked for issue overlap. */
22
30
  export interface MentionedPR {
@@ -25,6 +33,15 @@ export interface MentionedPR {
25
33
  state: "open" | "closed" | "merged";
26
34
  /** True when the PR title/body references this issue's number. */
27
35
  mentionsIssue: boolean;
36
+ /**
37
+ * True when the PR was linked from a fix-announcement comment: a
38
+ * "/attempt" (or "/claim") bot command, or a "Submitted fix for ... in
39
+ * <PR url>" narrative. Seen on tscircuit/tscircuit#5563, where a
40
+ * contributor posted /attempt comments and then linked fix PRs for each
41
+ * sub-bug (in other repos of the same org) that no list view surfaced.
42
+ * These count as race signals even when the PR does not name the issue.
43
+ */
44
+ attemptLinked?: boolean;
28
45
  /**
29
46
  * True when the citing comment came from the issue author. The open-PR
30
47
  * downgrade (rule 11) only trusts non-author heads-ups, but a
@@ -59,6 +76,25 @@ export interface IssueSnapshot {
59
76
  contributing?: string;
60
77
  /** Gates supplied from a gatefile contribution-gates.json, already mapped to Greenlight kinds. */
61
78
  externalGates?: Gate[];
79
+ /** Detected-only gates from the .github/workflows scan (external_prs_closed). */
80
+ workflowGates?: Gate[];
81
+ /**
82
+ * Other issues this issue is marked a duplicate of (from "duplicate of
83
+ * #N" comments and marked-as-duplicate timeline signals), each fetched
84
+ * for its current state. n8n-io/n8n#41215 was a duplicate of #40803,
85
+ * already closed as completed: a full build was nearly wasted on it.
86
+ */
87
+ duplicateOf?: DuplicateTarget[];
88
+ /**
89
+ * Server-side-only signal (best-effort): set when a quoted error string
90
+ * from the issue body has zero hits in the repo, meaning the check may
91
+ * be enforced by a backend service outside this repo. Absent when there
92
+ * is no evidence.
93
+ */
94
+ serverSide?: {
95
+ flag: string;
96
+ evidence: string;
97
+ };
62
98
  }
63
99
  /** One detected claim signal from a comment. */
64
100
  export interface ClaimSignal {
@@ -73,7 +109,27 @@ export interface ClaimSignal {
73
109
  scopeWord?: string;
74
110
  }
75
111
  /** A contribution gate parsed from CONTRIBUTING / repo policy. */
76
- export type GateKind = "assignment_required" | "claim_first" | "vouch_required" | "cla_required" | "dco_required" | "discussion_first" | "collaborators_only";
112
+ export type GateKind = "assignment_required" | "claim_first" | "vouch_required" | "cla_required" | "dco_required" | "discussion_first" | "collaborators_only"
113
+ /**
114
+ * The repo has paused unsolicited outside PRs. Seen on
115
+ * activepieces/activepieces#16580/#16581: CONTRIBUTING said unsolicited
116
+ * PRs from outside the core team were paused, and two finished PRs were
117
+ * auto-closed within about a minute.
118
+ */
119
+ | "unsolicited_prs_paused"
120
+ /**
121
+ * A repo workflow closes external PRs automatically ("Close external
122
+ * PRs" style), the sharp end of the paused-PR policy above.
123
+ */
124
+ | "external_prs_closed";
125
+ /** Another issue this one is marked a duplicate of, with its live state. */
126
+ export interface DuplicateTarget {
127
+ number: number;
128
+ url: string;
129
+ state: "open" | "closed";
130
+ /** GitHub's state_reason: "completed" | "not_planned" | "reopened" | undefined. */
131
+ stateReason?: string;
132
+ }
77
133
  export interface Gate {
78
134
  kind: GateKind;
79
135
  detected: boolean;
@@ -128,4 +184,10 @@ export interface FrictionReport {
128
184
  gates: Gate[];
129
185
  reasons: string[];
130
186
  signals: RepoSignals;
187
+ /**
188
+ * Merge velocity, when computed (signal only, never a score input):
189
+ * share of recent merged PRs authored by non-collaborators and the
190
+ * median days to merge. Absent when it could not be computed.
191
+ */
192
+ mergeVelocity?: import("./merge-velocity.js").MergeVelocityStats | null;
131
193
  }
package/dist/verdict.d.ts CHANGED
@@ -10,6 +10,23 @@
10
10
  * timeline cross-reference only) does not take it: it only adds the
11
11
  * "weak-pr-mention" flag (issue #1, seen on shadcn-labs/pdfcn#61 and
12
12
  * #71, where PR #91 closes #70 but lists sibling issues in its body).
13
+ * 3b. Marked duplicate of an issue closed as completed -> RISKY, flag
14
+ * "duplicate-of-closed". The work already shipped: n8n-io/n8n#41215
15
+ * was a duplicate of #40803 (closed as completed) and a full build
16
+ * was nearly wasted on it.
17
+ * 3c. Marked duplicate of a still-open (or not-planned) issue -> warning
18
+ * only, never a verdict change. The target's URL and live state are
19
+ * quoted with the "duplicate-of-open" flag.
20
+ * 3d. An OPEN PR GitHub cross-referenced in the issue's timeline ->
21
+ * TAKEN, flag "cross-referenced-pr", with the PR URL and title
22
+ * quoted. The timeline records PRs already in flight that comments
23
+ * never link (e2b-dev/E2B#1986/#1984/#1981, ComposioHQ/composio#4904,
24
+ * convex/convex-js#197, ghostfolio/ghostfolio#4605's #4958).
25
+ * 3e. A MERGED timeline cross-reference not consumed by any other rule
26
+ * caps an otherwise-GO verdict at RISKY, flag
27
+ * "cross-referenced-pr-merged", with a "verify what shipped" note.
28
+ * Merged usually means fixed, but not always (#7522 fixed only the
29
+ * unrestricted variant of #4605), so never TAKEN.
13
30
  * 4. Two or more strong whole-issue claimants -> TAKEN (claim race). Seen on
14
31
  * langchain-ai/langchain#41185 (3 claimants while still "unassigned").
15
32
  * Scoped (partial) claims do not count toward a race: part of the work
@@ -26,9 +43,13 @@
26
43
  * claimed 2026-08-11, never opened a PR). A closing PR, open or not,
27
44
  * counts as "a PR was opened" here; a mere mention does not. Stale
28
45
  * partial claims get the same treatment, scoped.
29
- * 7. Any hard gate (assignment / vouch / collaborators_only) with no
30
- * assignee -> GATED. The code might be welcome, but the ritual blocks
31
- * you: PrefectHQ/fastmcp#5718 (assignment), triggerdotdev/trigger.dev#5016 (vouch).
46
+ * 7. Any hard gate (assignment / vouch / collaborators_only /
47
+ * unsolicited_prs_paused / external_prs_closed) with no assignee ->
48
+ * GATED. The code might be welcome, but the ritual blocks you:
49
+ * PrefectHQ/fastmcp#5718 (assignment), triggerdotdev/trigger.dev#5016
50
+ * (vouch), activepieces/activepieces (paused unsolicited PRs plus a
51
+ * "Close external PRs" workflow that auto-closed two finished PRs
52
+ * within about a minute).
32
53
  * 8. No activity for 180+ days -> STALE. The issue is probably abandoned,
33
54
  * the repro may not even hold on current code.
34
55
  * 9. Soft claim-first gate (comment before starting, shadcn-labs/pdfcn
@@ -41,6 +62,18 @@
41
62
  * "comment-mentioned-pr" ("PR #NNN referenced in comments may already
42
63
  * cover part of this issue"). A merged one is only an informational
43
64
  * note; neither can produce TAKEN. Seen on reticlehq/reticle#691.
65
+ * Fix-announcement comments ("/attempt #N" commands or "Submitted fix
66
+ * for ... in <PR url>" narratives, often in sibling repos) add
67
+ * "attempt-linked-pr" evidence with the PR URL quoted before rule 4,
68
+ * so claim verdicts carry it, and cap an otherwise-GO verdict at RISKY
69
+ * at the end, even when the PR never names the issue. Seen on
70
+ * tscircuit/tscircuit#5563.
71
+ * W. Warning-only signals, never a verdict change: weak claims (soft
72
+ * claims quoted with their age in days, e.g. a 2-month-old "taking a
73
+ * look"), bounty liveness ("bounty-platform-dead" when the named
74
+ * platform is dead like Algora, "bounty-unverified" when no platform
75
+ * or payer is identifiable), and "possibly-server-side" when a quoted
76
+ * error string from the body has zero hits in the repo.
44
77
  * 12. Partially-addressed: merged PRs that reference the issue number
45
78
  * (comment-mentioned or linked), or maintainer comments signaling part
46
79
  * of the work already shipped ("Half addressed", "leaving this open
package/dist/verdict.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { detectClaims, strongClaimants } from "./claims.js";
2
2
  import { parseGates, parseGatesFromSources, hardGates, gateLabel } from "./gates.js";
3
3
  import { isClosingPR } from "./linkstrength.js";
4
+ import { detectBounty } from "./bounty.js";
4
5
  import { extractPRReferences } from "./github.js";
5
6
  const FRESH_CLAIM_DAYS = 45;
6
7
  const STALE_INACTIVITY_DAYS = 180;
@@ -27,6 +28,18 @@ export function scoreIssue(snapshot, now = new Date()) {
27
28
  }
28
29
  }
29
30
  }
31
+ // Workflow gates (auto-close automation) merge the same way: a detected
32
+ // .github/workflows signal fills a kind the prose pass did not catch.
33
+ if (snapshot.workflowGates) {
34
+ for (const wg of snapshot.workflowGates) {
35
+ const m = gates.find((x) => x.kind === wg.kind);
36
+ if (m && !m.detected) {
37
+ m.detected = true;
38
+ m.evidence = wg.evidence;
39
+ m.source = wg.source;
40
+ }
41
+ }
42
+ }
30
43
  const reasons = [];
31
44
  const flags = [];
32
45
  const repoRef = `${snapshot.owner}/${snapshot.repo}`;
@@ -40,12 +53,56 @@ export function scoreIssue(snapshot, now = new Date()) {
40
53
  reasons.push(`assigned to ${snapshot.assignees.join(", ")}`);
41
54
  return { verdict: "TAKEN", reasons, claims, gates, flags };
42
55
  }
56
+ // Timeline cross-references (computed before rule 3 so a closing PR
57
+ // verdict can still quote the rest of the in-flight field).
58
+ const timelineXrefs = snapshot.linkedPRs.filter((pr) => pr.via === "timeline");
59
+ const openTimelineXrefs = timelineXrefs.filter((pr) => pr.state === "open");
60
+ const mergedTimelineXrefs = timelineXrefs.filter((pr) => pr.state === "merged");
61
+ const xrefLabel = (pr) => `#${pr.number} "${pr.title}" (${pr.url})`;
43
62
  // Rule 3: open linked PR that closes the issue.
44
63
  const openClosingPR = snapshot.linkedPRs.find((pr) => pr.state === "open" && isClosingPR(pr));
45
64
  if (openClosingPR) {
46
65
  reasons.push(`open PR #${openClosingPR.number} closes this issue`);
66
+ const others = openTimelineXrefs.filter((pr) => pr.number !== openClosingPR.number);
67
+ if (others.length > 0) {
68
+ flags.push("cross-referenced-pr");
69
+ reasons.push(`also cross-referenced in the issue timeline and in flight: ${others.map(xrefLabel).join("; ")}`);
70
+ }
71
+ return { verdict: "TAKEN", reasons, claims, gates, flags };
72
+ }
73
+ // Rule 3d: timeline cross-reference race. GitHub records a
74
+ // cross-referenced timeline event when a PR's body or a commit message
75
+ // references the issue: the PR is in flight against it even when its
76
+ // body never says "closes #N" and no comment ever links it. Comment-only
77
+ // race checks missed five of twelve claims in one evening this way
78
+ // (e2b-dev/E2B#1986/#1984/#1981, ComposioHQ/composio#4904,
79
+ // convex/convex-js#197, ghostfolio/ghostfolio#4605's #4958). Any OPEN
80
+ // timeline cross-reference takes the issue; closed-unmerged ones are
81
+ // (timelineXrefs computed above, before rule 3; open ones are quoted
82
+ // here even when a closing PR already took the issue, and merged ones
83
+ // get flag 3e below.)
84
+ if (mergedTimelineXrefs.length > 0) {
85
+ flags.push("cross-referenced-pr-merged");
86
+ }
87
+ if (openTimelineXrefs.length > 0) {
88
+ flags.push("cross-referenced-pr");
89
+ reasons.push(`open PR(s) cross-referenced in the issue timeline: ${openTimelineXrefs.map(xrefLabel).join("; ")}`);
90
+ if (mergedTimelineXrefs.length > 0) {
91
+ reasons.push(`also merged in the timeline: ${mergedTimelineXrefs.map(xrefLabel).join("; ")}`);
92
+ }
47
93
  return { verdict: "TAKEN", reasons, claims, gates, flags };
48
94
  }
95
+ // Rule 3b: duplicate-of a completed issue. If this issue is marked a
96
+ // duplicate of another issue that is closed as completed, the work
97
+ // already shipped and building here is wasted. n8n-io/n8n#41215 was a
98
+ // duplicate of #40803 (closed as completed): a full build was nearly
99
+ // wasted on it because the comment sat unread below the bot ticket.
100
+ const dupClosedCompleted = (snapshot.duplicateOf ?? []).find((d) => d.state === "closed" && d.stateReason === "completed");
101
+ if (dupClosedCompleted) {
102
+ reasons.push(`marked duplicate of #${dupClosedCompleted.number}, which is closed as completed`);
103
+ flags.push("duplicate-of-closed");
104
+ return { verdict: "RISKY", reasons, claims, gates, flags };
105
+ }
49
106
  // An open PR that only mentions the issue is a weak signal, not a takeover.
50
107
  const openMentionPRs = snapshot.linkedPRs.filter((pr) => pr.state === "open" && !isClosingPR(pr));
51
108
  if (openMentionPRs.length > 0)
@@ -55,6 +112,20 @@ export function scoreIssue(snapshot, now = new Date()) {
55
112
  // of the work open, so only whole-issue claims can form a claim race.
56
113
  const fullStrong = strong.filter((c) => c.scope !== "partial");
57
114
  const partialStrong = strong.filter((c) => c.scope === "partial");
115
+ // Attempt-linked PRs (fix-announcement comments: "/attempt #N" commands
116
+ // or "Submitted fix for ... in <PR url>" narratives, often in sibling
117
+ // repos) are race signals with the URL quoted, even when the PR never
118
+ // names the issue. The evidence is added here so every later return
119
+ // (claim race, fresh/stale claim) carries it; the GO downgrade happens
120
+ // at the end, after rules 11-12, so it only fires when nothing else did.
121
+ // Seen on tscircuit/tscircuit#5563.
122
+ const attemptLinkedOpen = (snapshot.commentMentionedPRs ?? []).filter((p) => p.state === "open" && p.attemptLinked);
123
+ if (attemptLinkedOpen.length > 0) {
124
+ flags.push("attempt-linked-pr");
125
+ const urls = attemptLinkedOpen.slice(0, 3).map((p) => p.url);
126
+ const more = attemptLinkedOpen.length > 3 ? ` and ${attemptLinkedOpen.length - 3} more` : "";
127
+ reasons.push(`fix PRs linked from fix-announcement comments may already cover this work: ${urls.join(", ")}${more}`);
128
+ }
58
129
  // Rule 4: claim race.
59
130
  if (fullStrong.length >= 2) {
60
131
  const names = fullStrong.map((c) => c.author).join(", ");
@@ -116,6 +187,34 @@ export function scoreIssue(snapshot, now = new Date()) {
116
187
  // as the weak-PR-mention rule below.
117
188
  const claimFirst = gates.some((g) => g.kind === "claim_first" && g.detected);
118
189
  const claimFirstNote = "repo asks contributors to comment before starting (claim first)";
190
+ // Warning-only signals: flags with reasons that never change the
191
+ // verdict. They ride along on whatever verdict the rules above and
192
+ // below produce.
193
+ // Soft claims carry their comment date so a months-old soft claim weighs
194
+ // differently from yesterday's: actualbudget/actual#6643's "I'm going
195
+ // to take a look at this one" sat two months with nothing landing.
196
+ const softClaims = claims.filter((c) => c.strength === "soft");
197
+ if (softClaims.length > 0) {
198
+ const c = softClaims[0];
199
+ flags.push("weak-claim");
200
+ reasons.push(`soft claim by ${c.author} ${c.ageDays} day(s) ago ("${c.phrase}"); no verdict change`);
201
+ }
202
+ // Bounty liveness: a bounty is context, never landability evidence. A
203
+ // dead platform (algora.io 404s, API empty since 2025) behind a "$250
204
+ // bounty" label means there is no money to chase (onyx#2281 style).
205
+ const bounty = detectBounty({ labels: snapshot.labels, title: snapshot.title, body: snapshot.body ?? "" });
206
+ if (bounty && bounty.flag) {
207
+ flags.push(bounty.flag);
208
+ reasons.push(bounty.flag === "bounty-platform-dead"
209
+ ? `bounty names a dead platform: ${bounty.evidence}`
210
+ : `bounty offered but unverified: ${bounty.evidence}`);
211
+ }
212
+ // Server-side-only: a quoted error string from the body with zero hits
213
+ // in the repo means the check may live outside it entirely.
214
+ if (snapshot.serverSide) {
215
+ flags.push(snapshot.serverSide.flag);
216
+ reasons.push(snapshot.serverSide.evidence);
217
+ }
119
218
  // Rule 10: nothing blocking, unless an open PR merely mentions the issue.
120
219
  let verdict = "GO";
121
220
  if (openMentionPRs.length > 0) {
@@ -195,6 +294,34 @@ export function scoreIssue(snapshot, now = new Date()) {
195
294
  continue;
196
295
  reasons.push(`PR #${p.number} (merged) referenced in comments; issue may be partially addressed`);
197
296
  }
297
+ // Rule 3e: merged timeline cross-references that no other rule consumed.
298
+ // A merged PR GitHub recorded against this issue usually means the work
299
+ // already shipped, but not always: ghostfolio/ghostfolio#4605's merged
300
+ // #7522 fixed only the unrestricted impersonation case while the
301
+ // restricted-view case stayed open. So this caps an otherwise-GO verdict
302
+ // at RISKY; it never produces TAKEN.
303
+ if (mergedTimelineXrefs.length > 0 && verdict === "GO") {
304
+ const unconsumed = mergedTimelineXrefs.filter((p) => !consumedByRule12.has(p.number));
305
+ if (unconsumed.length > 0) {
306
+ reasons.push(`timeline cross-referenced PR(s) already merged: ${unconsumed.map(xrefLabel).join("; ")}; the issue may already be fixed, verify what shipped before building`);
307
+ verdict = "RISKY";
308
+ }
309
+ }
310
+ // Rule 3c: duplicate-of warning. A still-open duplicate target (or one
311
+ // closed as not_planned) is a heads-up to check there before building,
312
+ // never a verdict change: the target's issue number and live state are
313
+ // quoted so the contributor can go look.
314
+ const dupOther = (snapshot.duplicateOf ?? []).find((d) => !(d.state === "closed" && d.stateReason === "completed"));
315
+ if (dupOther) {
316
+ const status = dupOther.state === "closed" ? `closed as ${dupOther.stateReason ?? "unknown"}` : "still open";
317
+ flags.push("duplicate-of-open");
318
+ reasons.push(`marked duplicate of #${dupOther.number} (${dupOther.url}), which is ${status}; check there before building`);
319
+ }
320
+ // Attempt-linked downgrade: the evidence was added before rule 4 so claim
321
+ // returns carry it; cap an otherwise-GO verdict at RISKY here, after
322
+ // every other rule has had its say.
323
+ if (attemptLinkedOpen.length > 0 && verdict === "GO")
324
+ verdict = "RISKY";
198
325
  return { verdict, reasons, claims, gates, flags };
199
326
  }
200
327
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"verdict.js","sourceRoot":"","sources":["../src/verdict.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verdict.js","sourceRoot":"","sources":["../src/verdict.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -25,7 +25,7 @@
25
25
  "test": "tsx --test test/*.test.ts"
26
26
  },
27
27
  "type": "module",
28
- "version": "0.3.2",
28
+ "version": "0.3.4",
29
29
  "mcpName": "io.github.CloudCorpRecords/greenlight",
30
30
  "publishConfig": {
31
31
  "access": "public"
package/server.json CHANGED
@@ -6,13 +6,13 @@
6
6
  "url": "https://github.com/CloudCorpRecords/greenlight",
7
7
  "source": "github"
8
8
  },
9
- "version": "0.3.2",
9
+ "version": "0.3.4",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "registryBaseUrl": "https://registry.npmjs.org",
14
14
  "identifier": "@reneturcios/greenlight",
15
- "version": "0.3.2",
15
+ "version": "0.3.4",
16
16
  "runtimeHint": "npx",
17
17
  "packageArguments": [
18
18
  {