fix(robomp): clear needs-info on resume

This commit is contained in:
oldschoola
2026-06-15 18:22:34 -07:00
parent a409fd3216
commit b945f54962
8 changed files with 73 additions and 1 deletions
+1
View File
@@ -79,6 +79,7 @@ class GitHubBackend(Protocol):
) -> None: ...
async def add_issue_labels(self, repo: str, number: int, labels: list[str]) -> tuple[str, ...]: ...
async def remove_issue_label(self, repo: str, number: int, label: str) -> None: ...
async def submit_pr_review(
self,
+11
View File
@@ -7,6 +7,7 @@ import time
from collections.abc import Mapping
from dataclasses import dataclass
from typing import Any
from urllib.parse import quote
import httpx
@@ -446,6 +447,16 @@ class GitHubClient:
)
return tuple(str(lbl["name"]) if isinstance(lbl, dict) else str(lbl) for lbl in (data or []))
async def remove_issue_label(self, repo: str, number: int, label: str) -> None:
"""Remove one label from an issue (or PR)."""
if not label:
return
encoded = quote(label, safe="")
await self.request(
"DELETE",
f"/repos/{repo}/issues/{number}/labels/{encoded}",
)
async def submit_pr_review(
self,
*,
+13
View File
@@ -509,6 +509,19 @@ def create_proxy_app(settings: Settings) -> FastAPI:
return _gh_error_response(exc)
return JSONResponse({"labels": list(applied)})
@app.post("/gh/v1/remove_issue_label")
async def remove_issue_label(request: Request) -> JSONResponse:
data = await _json_body(request)
repo = _require_str(data.get("repo"), "repo")
number = _require_int(data.get("number"), "number")
label = _require_str(data.get("label"), "label")
github: GitHubClient = request.app.state.github
try:
await github.remove_issue_label(repo, number, label)
except GitHubError as exc:
return _gh_error_response(exc)
return JSONResponse({"ok": True})
@app.post("/gh/v1/submit_pr_review")
async def submit_pr_review(request: Request) -> JSONResponse:
data = await _json_body(request)
+9
View File
@@ -282,6 +282,15 @@ class GitHubProxyClient:
)
return tuple(str(lbl) for lbl in (data.get("labels") if isinstance(data, dict) else None) or [])
async def remove_issue_label(self, repo: str, number: int, label: str) -> None:
if not label:
return
await self._request(
"POST",
"/gh/v1/remove_issue_label",
json_body={"repo": repo, "number": number, "label": label},
)
async def submit_pr_review(
self,
*,
+8
View File
@@ -22,6 +22,7 @@ from robomp.sandbox import GitTransport, SandboxManager
from robomp.worker import DirectiveInfo, TaskInputs, ThreadMessage, run_task
log = logging.getLogger(__name__)
_NEEDS_INFO_LABEL = "needs-info"
def _comment_from_payload(payload: Mapping[str, Any]) -> CommentInfo:
@@ -498,6 +499,13 @@ async def handle_comment(
author_email=settings.git_author_email,
slot_uid=slot_uid,
)
if existing.state == "needs_info":
try:
await github.remove_issue_label(repo.full_name, issue.number, _NEEDS_INFO_LABEL)
except GitHubError as exc:
if exc.status != 404:
log.warning("needs-info label cleanup failed", extra={"key": key, "err": str(exc)})
db.set_issue_state(key, "reproducing")
inputs = TaskInputs(
settings=settings,
db=db,