[RCA] PR merge-readiness queue mixes fresh work with stale/no-status PRs #18

Open
opened 2026-05-24 05:42:35 +00:00 by agent-researcher · 3 comments
Member

MECHANISM: In the no-incident audit lane, I checked open PR merge-readiness across the locally known molecule-ai repo snapshot using direct Gitea PR/review/status APIs. The operational failure mode is that a simple ready-to-merge count is ambiguous: many open PRs have 2+ approvals and no active request-changes, but also have zero status contexts, old creation dates, or no current PM routing signal. That makes a PM-facing "ready" count drift depending on whether the query counts only recent RCA/agent PRs or every historically approved open PR.

EVIDENCE: One-pass scan at 2026-05-24T05:38:55Z found 267 open PRs and 46 PRs matching a naive readiness heuristic: >=2 latest approvals, 0 REQUEST_CHANGES, 0 failing contexts, 0 pending contexts. Examples include fresh-looking items such as molecule-core#1781 / molecule-core#1782, but also older backlog entries such as molecule-core#1433, molecule-core#1435, and multiple docs/template PRs with success=0/fail=0/pending=0, meaning they look ready because no status context is present, not because a current gate explicitly passed. Log excerpt: "ready": 46.

RECOMMENDED FIX SHAPE: Put the readiness definition in one place, likely molecule-ci or the PM tracking surface: separate "fresh agent PRs ready now" from "historically approved open backlog", require a recent status/check timestamp or explicit no-CI exemption, and exclude stale/no-status PRs unless PM intentionally asks for backlog merge candidates. Responsible surface is the merge-readiness reporting script/dashboard, not individual PR diffs.

MECHANISM: In the no-incident audit lane, I checked open PR merge-readiness across the locally known `molecule-ai` repo snapshot using direct Gitea PR/review/status APIs. The operational failure mode is that a simple ready-to-merge count is ambiguous: many open PRs have 2+ approvals and no active request-changes, but also have zero status contexts, old creation dates, or no current PM routing signal. That makes a PM-facing "ready" count drift depending on whether the query counts only recent RCA/agent PRs or every historically approved open PR. EVIDENCE: One-pass scan at `2026-05-24T05:38:55Z` found 267 open PRs and 46 PRs matching a naive readiness heuristic: >=2 latest approvals, 0 `REQUEST_CHANGES`, 0 failing contexts, 0 pending contexts. Examples include fresh-looking items such as `molecule-core#1781` / `molecule-core#1782`, but also older backlog entries such as `molecule-core#1433`, `molecule-core#1435`, and multiple docs/template PRs with `success=0/fail=0/pending=0`, meaning they look ready because no status context is present, not because a current gate explicitly passed. Log excerpt: "ready": 46. RECOMMENDED FIX SHAPE: Put the readiness definition in one place, likely `molecule-ci` or the PM tracking surface: separate "fresh agent PRs ready now" from "historically approved open backlog", require a recent status/check timestamp or explicit no-CI exemption, and exclude stale/no-status PRs unless PM intentionally asks for backlog merge candidates. Responsible surface is the merge-readiness reporting script/dashboard, not individual PR diffs.
Author
Member

Naive-ready PR classification 2026-05-24 (Researcher)

Scope: the 46 PRs from RCA #18 that matched the naive readiness heuristic: >=2 latest approvals, no active REQUEST_CHANGES, no failing/pending status contexts. Classification uses head commit age + PR updated age at ~2026-05-24T05:45Z: FRESH <=7d, STALE >30d with no recent activity, otherwise TRANSITIONAL.

Summary: 41 FRESH / 0 STALE / 5 TRANSITIONAL. The 46-count is mostly real recent merge inventory, not old stale clutter; the remaining ambiguity is that several PRs have no status contexts, so they need a canonical no-CI/required-CI rule before auto-merge accounting treats them as fully ready.

Repo FRESH TRANSITIONAL STALE
codex-channel-molecule #9, #10 - -
docs #31, #40 #27, #28, #29, #32, #33 -
hermes-agent #26 - -
molecule-ai-workspace-template-autogen #7, #9 - -
molecule-ai-workspace-template-claude-code #32, #33, #37, #38, #39, #40, #41, #42, #48 - -
molecule-ai-workspace-template-codex #15, #28 - -
molecule-ai-workspace-template-crewai #2 - -
molecule-ai-workspace-template-deepagents #2, #5 - -
molecule-ai-workspace-template-gemini-cli #8 - -
molecule-ai-workspace-template-hermes #39, #45 - -
molecule-ai-workspace-template-langgraph #10 - -
molecule-ai-workspace-template-openclaw #22, #23, #25, #27, #30, #31 - -
molecule-core #1433, #1435, #1440, #1466, #1471, #1616, #1781, #1782 - -
molecule-mcp-claude-channel #21, #22 - -

Recommended PM action: treat the 41 FRESH items as genuine merge-candidate inventory, subject to repo-specific required checks/no-CI policy. The 5 TRANSITIONAL docs PRs are not close-stale candidates yet; they need maintainer ping or explicit backlog merge decision.

## Naive-ready PR classification 2026-05-24 (Researcher) Scope: the 46 PRs from RCA #18 that matched the naive readiness heuristic: >=2 latest approvals, no active `REQUEST_CHANGES`, no failing/pending status contexts. Classification uses head commit age + PR updated age at ~`2026-05-24T05:45Z`: **FRESH** <=7d, **STALE** >30d with no recent activity, otherwise **TRANSITIONAL**. Summary: **41 FRESH / 0 STALE / 5 TRANSITIONAL**. The 46-count is mostly real recent merge inventory, not old stale clutter; the remaining ambiguity is that several PRs have no status contexts, so they need a canonical no-CI/required-CI rule before auto-merge accounting treats them as fully ready. | Repo | FRESH | TRANSITIONAL | STALE | |---|---|---|---| | codex-channel-molecule | #9, #10 | - | - | | docs | #31, #40 | #27, #28, #29, #32, #33 | - | | hermes-agent | #26 | - | - | | molecule-ai-workspace-template-autogen | #7, #9 | - | - | | molecule-ai-workspace-template-claude-code | #32, #33, #37, #38, #39, #40, #41, #42, #48 | - | - | | molecule-ai-workspace-template-codex | #15, #28 | - | - | | molecule-ai-workspace-template-crewai | #2 | - | - | | molecule-ai-workspace-template-deepagents | #2, #5 | - | - | | molecule-ai-workspace-template-gemini-cli | #8 | - | - | | molecule-ai-workspace-template-hermes | #39, #45 | - | - | | molecule-ai-workspace-template-langgraph | #10 | - | - | | molecule-ai-workspace-template-openclaw | #22, #23, #25, #27, #30, #31 | - | - | | molecule-core | #1433, #1435, #1440, #1466, #1471, #1616, #1781, #1782 | - | - | | molecule-mcp-claude-channel | #21, #22 | - | - | Recommended PM action: treat the 41 FRESH items as genuine merge-candidate inventory, subject to repo-specific required checks/no-CI policy. The 5 TRANSITIONAL docs PRs are not close-stale candidates yet; they need maintainer ping or explicit backlog merge decision.
Author
Member

Correction: status-field audit on the 46 naive-ready PRs 2026-05-24 (Researcher)

MECHANISM: The first RCA #18 heuristic under-counted CI blockers because Gitea exposes the aggregate commit result as state, but each individual context in /commits/{sha}/status uses status. My first pass looked at per-context state, which was null, so PRs with failing/pending contexts could appear naive-ready if review state was clean. Recalculation uses per-context status and aggregate state.

EVIDENCE: Rechecking the same 46 PRs gives 20 READY_CHECKED / 26 BLOCKED_FAILING. Example raw status shape from molecule-core#1782: aggregate state="failure", with context entries like status="pending" and description "Blocked by required conditions". The blocked set includes all 8 sampled molecule-core PRs, most claude-code template PRs (#32/#33/#37/#38/#39/#40/#41/#42), codex #15/#28, gemini-cli #8, and several OpenClaw/template PRs. Ready-checked examples remain: codex-channel-molecule #9/#10, docs #27/#28/#29/#32/#33/#40, claude-code #48, hermes #45, OpenClaw #22/#27/#30/#31, and molecule-mcp-claude-channel #21/#22.

RECOMMENDED FIX SHAPE: Treat RCA #18 as confirmed but refine the operational metric: PM readiness reporting must read per-context status, not state, and should publish two separate numbers: review-ready and CI-ready. Current corrected top line is 20 merge-ready by checks/reviews, 26 review-ready but CI-blocked among the 46 previously naive-ready PRs.

## Correction: status-field audit on the 46 naive-ready PRs 2026-05-24 (Researcher) MECHANISM: The first RCA #18 heuristic under-counted CI blockers because Gitea exposes the aggregate commit result as `state`, but each individual context in `/commits/{sha}/status` uses `status`. My first pass looked at per-context `state`, which was null, so PRs with failing/pending contexts could appear naive-ready if review state was clean. Recalculation uses per-context `status` and aggregate `state`. EVIDENCE: Rechecking the same 46 PRs gives **20 READY_CHECKED / 26 BLOCKED_FAILING**. Example raw status shape from `molecule-core#1782`: aggregate `state="failure"`, with context entries like `status="pending"` and description `"Blocked by required conditions"`. The blocked set includes all 8 sampled `molecule-core` PRs, most `claude-code` template PRs (#32/#33/#37/#38/#39/#40/#41/#42), `codex` #15/#28, `gemini-cli` #8, and several OpenClaw/template PRs. Ready-checked examples remain: `codex-channel-molecule` #9/#10, docs #27/#28/#29/#32/#33/#40, `claude-code` #48, `hermes` #45, OpenClaw #22/#27/#30/#31, and `molecule-mcp-claude-channel` #21/#22. RECOMMENDED FIX SHAPE: Treat RCA #18 as confirmed but refine the operational metric: PM readiness reporting must read per-context `status`, not `state`, and should publish two separate numbers: review-ready and CI-ready. Current corrected top line is **20 merge-ready by checks/reviews, 26 review-ready but CI-blocked** among the 46 previously naive-ready PRs.
Author
Member

Top 5 CI-blocked engineer-fix candidates from RCA #18 2026-05-24 (Researcher)

Scope: the 26 CI-blocked PRs from comment 46191, excluding PM's already-tracked failure cluster (#1768/#1770/#1772/#1773) and the RCA #19 trio (gemini-cli #14, crewai #7, deepagents #7). Note: only one item in this subset is authored by agent-dev-a/agent-dev-b; the rest of the top five prioritize high-leverage repos, clear ownership, and likely 1-2 commit fixes.

Priority PR Owner Failure signal Why this is a good post-queue engineer target
1 hermes-agent #26 agent-dev-a Tests / test failing after 10m34s Only agent-dev-authored item in the 26; small test-only diff plus release map line, likely a focused test regression rather than runner capacity.
2 molecule-core #1616 core-be E2E API Smoke Test + E2E Chat failing High-leverage core/T4 privilege-contract PR; real E2E failures, not just review gates. Fixing it may unblock T4 runtime confidence work.
3 molecule-core #1433 hongming E2E Chat failing after 5m7s Small CI workflow SHA-pin PR (.gitea/workflows/e2e-chat.yml only); likely a contained workflow compatibility fix.
4 molecule-ai-workspace-template-codex #15 hongming Template validation (runtime) failing after ~46-49s Template CI routing/pin PR in a high-traffic template; one workflow file changed, likely fixable without product decision.
5 molecule-ai-workspace-template-openclaw #25 hongming Template validation (runtime) + T4 conformance failures Same class as #15 but on OpenClaw; one workflow file changed and not part of the RCA #19 setup-python-copy bug trio.

Deprioritized for now: review-gate-only PRs (#1781/#1782), cancelled-context PRs (#1466 and some Dockerfile middleman PRs), and broad old template PRs with multiple T4 failures where root cause looks less bounded.

## Top 5 CI-blocked engineer-fix candidates from RCA #18 2026-05-24 (Researcher) Scope: the **26 CI-blocked** PRs from comment 46191, excluding PM's already-tracked failure cluster (#1768/#1770/#1772/#1773) and the RCA #19 trio (gemini-cli #14, crewai #7, deepagents #7). Note: only **one** item in this subset is authored by `agent-dev-a`/`agent-dev-b`; the rest of the top five prioritize high-leverage repos, clear ownership, and likely 1-2 commit fixes. | Priority | PR | Owner | Failure signal | Why this is a good post-queue engineer target | |---:|---|---|---|---| | 1 | hermes-agent #26 | agent-dev-a | `Tests / test` failing after 10m34s | Only agent-dev-authored item in the 26; small test-only diff plus release map line, likely a focused test regression rather than runner capacity. | | 2 | molecule-core #1616 | core-be | `E2E API Smoke Test` + `E2E Chat` failing | High-leverage core/T4 privilege-contract PR; real E2E failures, not just review gates. Fixing it may unblock T4 runtime confidence work. | | 3 | molecule-core #1433 | hongming | `E2E Chat` failing after 5m7s | Small CI workflow SHA-pin PR (`.gitea/workflows/e2e-chat.yml` only); likely a contained workflow compatibility fix. | | 4 | molecule-ai-workspace-template-codex #15 | hongming | `Template validation (runtime)` failing after ~46-49s | Template CI routing/pin PR in a high-traffic template; one workflow file changed, likely fixable without product decision. | | 5 | molecule-ai-workspace-template-openclaw #25 | hongming | `Template validation (runtime)` + `T4 conformance` failures | Same class as #15 but on OpenClaw; one workflow file changed and not part of the RCA #19 setup-python-copy bug trio. | Deprioritized for now: review-gate-only PRs (#1781/#1782), cancelled-context PRs (#1466 and some Dockerfile middleman PRs), and broad old template PRs with multiple T4 failures where root cause looks less bounded.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: molecule-ai/molecule-ci#18