Objective
Implement type-specific outcome evaluators for create_issue, add_comment, and add_labels — the next highest-priority safe output types per issue #35033.
Context
Depends on the shared outcome model (step 1 of #35033). Issues, comments, and labels provide clear human-observable signals with well-defined lifecycle states.
Approach
create_issue evaluator
accepted (strong): Issue is open AND has been referenced in a merged PR, commit, or closing action
accepted (medium): Issue is open with at least one non-author comment or reaction
rejected (strong): Issue was closed immediately (within configurable window) by a non-author
rejected (medium): Issue was closed with no activity
pending: Issue is open with no engagement
unknown: fallback
add_comment evaluator
accepted (strong): Comment was reacted to, replied to, or quoted in another comment
accepted (medium): Comment still exists, thread was subsequently acted on
rejected (strong): Comment was deleted
pending: Comment exists with no reactions or follow-up
unknown: fallback
add_labels evaluator
Use persisted before-state label list to classify:
accepted (strong): Labels are still present after configurable retention window
rejected (strong): Labels were removed by a non-author within the retention window
pending: Retention window not yet elapsed
unknown: fallback
Files to Modify
- Outcome evaluator module (likely
actions/setup/js/)
- Add dedicated evaluator functions for each type
- Add tests covering all outcome classifications for each type
Acceptance Criteria
Generated by 📋 Plan Command · sonnet46 949.9K · ◷
Objective
Implement type-specific outcome evaluators for
create_issue,add_comment, andadd_labels— the next highest-priority safe output types per issue #35033.Context
Depends on the shared outcome model (step 1 of #35033). Issues, comments, and labels provide clear human-observable signals with well-defined lifecycle states.
Approach
create_issue evaluator
accepted(strong): Issue is open AND has been referenced in a merged PR, commit, or closing actionaccepted(medium): Issue is open with at least one non-author comment or reactionrejected(strong): Issue was closed immediately (within configurable window) by a non-authorrejected(medium): Issue was closed with no activitypending: Issue is open with no engagementunknown: fallbackadd_comment evaluator
accepted(strong): Comment was reacted to, replied to, or quoted in another commentaccepted(medium): Comment still exists, thread was subsequently acted onrejected(strong): Comment was deletedpending: Comment exists with no reactions or follow-upunknown: fallbackadd_labels evaluator
Use persisted before-state label list to classify:
accepted(strong): Labels are still present after configurable retention windowrejected(strong): Labels were removed by a non-author within the retention windowpending: Retention window not yet elapsedunknown: fallbackFiles to Modify
actions/setup/js/)Acceptance Criteria
create_issueevaluator uses engagement signals, not existence aloneadd_commentevaluator detects deletion as rejectionadd_labelsevaluator detects label removal as rejectionacceptedmake agent-finishpasses