Keep Gitea assignee aligned with agent handoffs

This commit is contained in:
Timmy Jr. 2026-08-07 14:38:52 +00:00
parent f42f7b9ddc
commit 1dcbf7270d
2 changed files with 10 additions and 1 deletions

View File

@ -73,6 +73,11 @@ class Gitea:
{"labels": [label_map[name] for name in sorted(names)]}, {"labels": [label_map[name] for name in sorted(names)]},
) )
def set_assignee(self, number: int, agent: str) -> None:
if agent not in AGENTS:
raise LoopError(f"Unsupported assignee: {agent}")
self.request("PATCH", f"/repos/{self.repo}/issues/{number}", {"assignee": agent})
def comment(self, number: int, body: str) -> None: def comment(self, number: int, body: str) -> None:
if not body.strip(): if not body.strip():
raise LoopError("Refusing to post an empty comment") raise LoopError("Refusing to post an empty comment")
@ -163,6 +168,7 @@ def cmd_handoff(api: Gitea, agent: str, args: argparse.Namespace) -> int:
body = read_body(args, f"Continue the bounded task in issue #{args.number}.") body = read_body(args, f"Continue the bounded task in issue #{args.number}.")
api.comment(args.number, f"[HANDOFF] from={agent} to={args.to}\n\n{body.strip()}") api.comment(args.number, f"[HANDOFF] from={agent} to={args.to}\n\n{body.strip()}")
api.set_labels(args.number, transition(names, agent=args.to, state="ready")) api.set_labels(args.number, transition(names, agent=args.to, state="ready"))
api.set_assignee(args.number, args.to)
verified = api.issue(args.number) verified = api.issue(args.number)
validate_owner(verified, args.to, "ready") validate_owner(verified, args.to, "ready")
print(json.dumps({"status": "handed_off", "number": args.number, "from": agent, "to": args.to})) print(json.dumps({"status": "handed_off", "number": args.number, "from": agent, "to": args.to}))

View File

@ -86,7 +86,10 @@ def main() -> int:
if missing: if missing:
raise RuntimeError(f"Missing labels: {sorted(missing)}") raise RuntimeError(f"Missing labels: {sorted(missing)}")
request("POST", f"/repos/{REPO}/issues/{issue['number']}/comments", token, {"body": cycle_body(day)}) request("POST", f"/repos/{REPO}/issues/{issue['number']}/comments", token, {"body": cycle_body(day)})
request("PATCH", f"/repos/{REPO}/issues/{issue['number']}", token, {"labels": [label_ids[name] for name in sorted(desired)]}) request("PATCH", f"/repos/{REPO}/issues/{issue['number']}", token, {
"labels": [label_ids[name] for name in sorted(desired)],
"assignee": "timmy",
})
verified = request("GET", f"/repos/{REPO}/issues/{issue['number']}", token) verified = request("GET", f"/repos/{REPO}/issues/{issue['number']}", token)
names = {label["name"] for label in verified.get("labels", [])} names = {label["name"] for label in verified.get("labels", [])}
if not {"agent:timmy", "state:ready", "series:daily-slop", "cadence:daily"}.issubset(names): if not {"agent:timmy", "state:ready", "series:daily-slop", "cadence:daily"}.issubset(names):