@@ -402,11 +402,13 @@ def opencode_payload(request: MentionRequest) -> dict[str, Any]:
402402 "pr_head_sha" : request .pull_request_head_sha ,
403403 "pr_base_sha" : request .pull_request_base_sha ,
404404 "base_branch" : request .pull_request_base_branch ,
405- "trigger_reviews" : claim ["trigger_reviews" ],
406- "review_dispatch_limit" : claim ["review_dispatch_limit" ],
407- "enable_auto_merge" : claim ["enable_auto_merge" ],
408- "update_branches" : claim ["update_branches" ],
409- "merge_mode" : claim ["merge_mode" ],
405+ "review_policy" : {
406+ "trigger_reviews" : claim ["trigger_reviews" ],
407+ "review_dispatch_limit" : claim ["review_dispatch_limit" ],
408+ "enable_auto_merge" : claim ["enable_auto_merge" ],
409+ "update_branches" : claim ["update_branches" ],
410+ "merge_mode" : claim ["merge_mode" ],
411+ },
410412 "requested_agent" : agent ,
411413 "agent_invocation_key" : agent_invocation_key (request , agent ),
412414 "requested_by" : request .actor ,
@@ -415,6 +417,24 @@ def opencode_payload(request: MentionRequest) -> dict[str, Any]:
415417 }
416418
417419
420+ def _best_effort_target_request (
421+ target_client : GitHubClient ,
422+ args : Sequence [str ],
423+ input_payload : dict [str , Any ],
424+ * ,
425+ operation : str ,
426+ ) -> None :
427+ """Keep target-repository UX failures from causing a duplicate dispatch."""
428+
429+ try :
430+ target_client .request (args , input_payload = input_payload )
431+ except RuntimeError as exc :
432+ print (
433+ "Target-repository "
434+ f"{ operation } unavailable; dispatch remains authoritative: { str (exc )[:500 ]} "
435+ )
436+
437+
418438def dispatch_request (
419439 request : MentionRequest ,
420440 * ,
@@ -478,13 +498,15 @@ def dispatch_request(
478498 ledger_artifact_cache [agent_ledger_artifact_name (request , agent )] = True
479499
480500 target_api = f"repos/{ request .repository } "
481- target_client .request (
501+ _best_effort_target_request (
502+ target_client ,
482503 [
483504 f"{ target_api } /issues/comments/{ request .comment_id } /reactions" ,
484505 "-X" ,
485506 "POST" ,
486507 ],
487- input_payload = {"content" : "eyes" },
508+ {"content" : "eyes" },
509+ operation = "reaction" ,
488510 )
489511 status_parts = [f"Queued { ' and ' .join (handles )} " ]
490512 existing_handles = tuple (
@@ -507,13 +529,15 @@ def dispatch_request(
507529 "are the durable dispatch ledger; existing review workflows remain "
508530 "authoritative for the final verdict and failure evidence."
509531 )
510- target_client .request (
532+ _best_effort_target_request (
533+ target_client ,
511534 [
512535 f"{ target_api } /issues/{ request .pull_request_number } /comments" ,
513536 "-X" ,
514537 "POST" ,
515538 ],
516- input_payload = {"body" : acknowledgement },
539+ {"body" : acknowledgement },
540+ operation = "acknowledgement" ,
517541 )
518542 return handles
519543
0 commit comments