Internal briefing · OSS contributions · rev 2

OSS contribution radar, deep pass

Thirty repos scanned for rejection, not just merges. Seven of the twelve v1 picks turned out to be contested, disputed, claimed, or gated — dropped. Four clean plays survive, verified in source at today's HEAD; two more are worth adopting from stalled PRs. The single best fit remains a cline streaming bug, with mastra state correctness as the volume play.

What the deeper pass changed

The v1 list mostly dissolved

  • Adding the rejection side flipped two headline repos. Counted properly (external merges ÷ external merges + external closes), earendil-works/pi is 15 merged against 59 closed-unmerged (20%) and anomalyco/opencode is 15 vs 47 (24%). Both auto-close or assign aggressively: pi closed a community fix PR with "only contributors approved with lgtm can open PRs"; opencode had all seven fresh bugs we sampled assigned to core members within hours (and the same-class SSRF fix is already assigned). Neither should be where a new outside contributor starts.
  • Claimant audit killed seven v1 picks. Someone is already on pi #10390 (a reference implementation sits in the comments), cline #14810, chrome-devtools-mcp #2837 (plus maintainer pushback), mastra #25965 and #25728, CopilotKit #7417 (maintainer could not reproduce), and all four orca finalists we liked (#25786, #25339, #25348, #24914 gained PRs within days).
  • Two cline "clean" issues have stalled PRs blocked by the repo's author-allowlist gate — useful: it proves the approval gate is enforced and shows exactly how to avoid that failure.
  • Four issues survived full source verification and are unclaimed: cline #14827, mastra #25977, mastra #25897, orca #15098. Two stalled cline PRs (#13494, #13923) are adoptable after approval.

Rejection-adjusted scoreboard

Where outside PRs survive

“Outside merge rate” = external merged ÷ (external merged + external closed-unmerged) across the last 100 closed PRs; median is days to merge for external PRs. This is the number that matters: a repo can merge 80 PRs a window and still refuse almost every community one (see continue, 6 of 100).

RepoMerged (external)Closed unmerged (external)Outside merge rateMedian mergeGate
All-Hands-AI/OpenHands30294%4.7dtriage assigns everything; TS is the frontend half
milind-soni/OpenMausBot21484%0.6dnone; your standing already good
stablyai/orca521578%0.3dfresh bugs get PR'd within days
CopilotKit/CopilotKit692474%0.3dnone; but hard bugs attract failed attempts
mastra-ai/mastra22971%0.2dtriage label enforced by bot; PRs auto-close early
cline/cline552271%0.5dmaintainer approval on the issue first; allowlist enforced
Twigpine/openclaude381769%4.1dnone; quieter issue stream
can1357/oh-my-pi452267%0.8dhuge backlog; cohort snipes top bugs
chrome-devtools-mcp201459%4.3dGoogle CLA; design threads
pingdotgg/t3code baseline292554%1.2dPR #15176 already bot-approved

Drop list with evidence: anomalyco/opencode 24% (plus instant core assignment), earendil-works/pi 20% (lgtm gate + auto-close), google-gemini/gemini-cli 35% (29 vs 53), QwenLM/qwen-code 36% (community closes drag 180d), modelcontextprotocol/typescript-sdk 32% at an 18-day median, continuedev/continue 6% (6 merges vs 94 closes), anthropics/anthropic-sdk-typescript 5%. openai/openai-node shows 86% but is staff-heavy — not a fair signal.

Claim game

Fresh issues live for hours, not days

A small cohort works the same feeds: the same handles appear across pi, cline, mastra, orca and opencode threads (Dante-dan alone shows up with implementations in both pi and cline). Typical lifecycle of a good issue: triage reply → claimant comment within hours → PR in 1–3 days. Getting there first is not a research problem, it is a monitoring problem. The durable edge is (a) repos where you already have standing, (b) quiet older issues with no claimant, and (c) adopting work others abandoned — the two stalled cline PRs are exactly that. Evidence of the gates doing their job: mastra's bot closed PR #25904 because the linked issue still had status: needs triage; cline's stalled PRs (#13497, #14257) sit at “PR author is not in the allowed authors list”; pi auto-closed a correct stdin fix with “only contributors approved with lgtm can open PRs”.

Dossiers

Verified at HEAD, unclaimed at 12:05 UTC

source-verified unclaimed gate: read the dossier

1 · cline #14827 — tool calls built from partial argument deltas

Tier Afit: your OpenAI tool-call fixapproval gate
  • Issue: cline/cline#14827 — CLI run_commands receives {"commands":[]} or fragments like {"commands":[":\""]} on the OpenAI-compatible route; the loop detector then aborts the run. Unclaimed, no PR, Linear CLINE-3548, reproduced by a second reporter on the nightly.
  • Evidence: the reporter captured 2,333 argument deltas behind a logging proxy — every stream concatenated to valid JSON, and the failure only appears on direct connections where chunk boundaries differ. The adapter emits per-delta events (sdk/packages/core/src/services/llms/apihandler-agent-model-adapter.ts:49–64), the compat layer re-emits them as tool_calls chunks (sdk/packages/llms/src/providers/compat.ts:556–576), and the finalize path downstream repairs an incomplete object instead of waiting for the terminal frame.
  • Fix sketch: accumulate fragments per toolCallId until the finish reason arrives; never materialise a call from a partial object; reject/recover instead of repairing into empty arguments; add a split-delta streaming test at the adapter boundary.
  • Gate: comment a reproduction plan and ask for approval; do not open the PR first (the two stalled PRs show what happens).

2 · mastra #25977 — Inngest snapshots miss the prune hook

Tier Aeffort:low labelneeds triage
  • Issue: mastra-ai/mastra#25977 — #25609 stopped durable-agent snapshots storing the system prompt in every step, but only for core; Inngest agents still store 3 copies at suspension vs core's 1. Unclaimed.
  • Verified at HEAD: the prune fn exists (packages/core/src/loop/workflows/prune-snapshot.ts:487, pruneAgentLoopSnapshot), core plumbs it through workflow options (packages/core/src/workflows/workflow.ts:1913), and workflows/inngest/src has zero references to it. Tests for the pruner already exist to copy from.
  • Fix sketch: pass the same pruneSnapshot hook into the Inngest agent workflows; regression: assert one instructions copy at suspension with observability on.
  • Gate: triage comment; auto-triaged route is already “Plan fix”, but the bot auto-closed PR #25904 for jumping the label — comment first and wait for the label to clear.

3 · mastra #25897 — an approved suspension replays as pending after restart

Tier Afit: your restart/snooze state workneeds triage
  • Issue: mastra-ai/mastra#25897 — approve a suspended tool call, restart the process, subscribe with withInitialHistory: true: the replayed suspension is let through and the thread is asked to approve again. Unclaimed.
  • Verified at HEAD: indexThreadHistory adds every entry under pendingToolApprovals and suspendedTools on every message to pendingToolCallIds with no resolution check (packages/core/src/agent/thread-history.ts:44–52), and createThreadHistoryFilter passes approval/suspension chunks for those ids unconditionally (:78–84).
  • Fix sketch: exclude entries whose call has a recorded resolution (later tool result or approval record) when indexing; tests: approved-suspension history must not re-emit tool_suspended on subscribe, while genuinely pending calls still do.
  • Gate: needs triage — same comment-first rule.

4 · orca #15098 — a wedged helper child blocks the runtime handshake

Tier Afit: bounded waits + process lifecycleno gate
  • Issue: stablyai/orca#15098 — a hidden Codex rate-limit subprocess wedges at launch and blocks the runtime handshake; runtimeReachable stays false for 31 minutes until the child is killed. Unclaimed, no PRs, 3 weeks quiet.
  • Evidence: the reporter isolated the blocking child and the recovery (no restart needed) and links the same class in #11752. Readiness surfaces via src/cli/format.ts:137; the transport/handshake machinery lives under src/shared/remote-runtime-*.
  • Fix sketch: never let an auxiliary rate-limit helper gate readiness; bound helper startup and ping it, or make the start path time out and report which child blocks it so recovery is automatic.
  • Gate: none — but orca merges outside PRs at 78% with a 0.3-day median, so comment immediately and move fast.

Adoptable · the two stalled cline PRs

blocked by approval gatesecurity + correctness
  • cline #13494 — web-fetch SSRF: createWebFetchExecutor only checks the protocol and follows redirects, so loopback/IMDS/private hosts return into the model context (code-verified at sdk/packages/core/src/extensions/tools/executors/web-fetch.ts:110–153; no executor tests exist). PR #13497 (Aug 23) is stalled on the author allowlist. Precedent: goose PR #11501; opencode's copy is assigned internally, so cline is the opening.
  • cline #13923 — the transport layer middle-truncates an oversized tool result and inserts ...[truncated N chars to fit provider request budget]... (sdk/packages/core/src/session/services/message-builder.ts:54–62) without invalidating the tool's own “Showing lines 1–424 of 1500” footer (.../executors/file-read.ts:165–192), so the model believes it saw lines it never got. PR #14257 is stalled the same way.
  • Move: one comment on each issue with a short plan; ask whether a fresh PR should supersede the stalled one. Then land both behind the approval — that builds the reviewer relationship cline needs.

Watchlist

Not now, but noted with reasons

IssueStateWhy not now
orca #12747 reconnect replays re-fire notifications2 stale conflicting PRs (#12750, #14635)Fix understood (isReplay dropped from the agentStatus:set payload; startup path suppresses, reconnect path does not) — needs PR diplomacy first.
pi #10390 SSE CRLF split aborts turnsreference implementation in comments (Dante-dan)Perfect fit, wrong week: someone is on it, and the lgtm gate + 20% merge make it the worst odds-to-fit ratio.
CopilotKit #6937 second send during onInitialize3 closed fix attemptsAttractive concurrency bug, but three people already failed; needs a working repro before claiming.
cline #13986 Claude Code provider bypasses approvalsunclaimed, untracedReal security boundary regression; bigger than it looks, good follow-up once cline trust is established.
openclaude #2126 gateway advertises 1M, rejects at ~203kunclaimed; design changeA per-route context-cap override — a feature with infra decisions, not a quick fix.
chrome-devtools-mcp #2837 URLPattern bypassclaimed; maintainer resistingMay be closed as by-design (URLPattern defaults) — follow the thread, don't fight it.

Plan

This week, in order

  • 1cline: one comment, two issuesComment on #14827 (repro + fix sketch, ask approval) and on #13494/#13923 (offer to land clean versions of the stalled PRs). Cline is the highest-value relationship to open; the gate means comments are the submission.
  • 2mastra: queue behind triageComment on #25977 and #25897 with the verified code paths and test plans, then prepare both fixes locally while waiting for labels to clear.
  • 3orca: comment on #15098 immediatelyNo gate, 0.3-day median merge on the outside — but fresh orca issues get picked up within days, and this one is quiet only because it is older. Move today if you want it.
  • 4Keep OpenMausBot warm84% outside merge, 0.6-day median, your best-standing venue anywhere. It is still the highest expected-value hour you can spend.

The edge, stated plainly

Issue discovery is commoditised — a cohort and their agents watch the same feeds, so “found it first” lasts hours. The durable advantages are (1) repos where maintainers already know your name, (2) adopting stalled work that others abandoned, and (3) bug classes where you can show code-level proof before anyone else has read the file. All three are exercised above.