fix: enforce triage author only on issue arrival

This commit is contained in:
codex-bot-andresmgsl 2026-07-22 19:41:26 +00:00
parent cbb0fb5eee
commit a811da8b4f
3 changed files with 28 additions and 18 deletions

View file

@ -7,4 +7,7 @@ runs:
shell: bash
env:
LABELS_CONF: ${{ github.workspace }}/.github/labels.conf
EVENT_NAME: ${{ github.event_name }}
EVENT_ACTION: ${{ github.event.action }}
EVENT_ISSUE: ${{ github.event.issue.number }}
run: bash "$GITHUB_ACTION_PATH/issueflow-reconcile.sh"

View file

@ -143,24 +143,7 @@ last_issue_activity() {
}
reconcile_issue() {
local n="$1" author triage=false decision refs states age assignees open_pr=false remove="" label owners
author="$(jq -r '.user.login' <<<"$ISSUE_JSON")"
is_triage_actor "$author" && triage=true
decision="$(author_decision "$triage" <<<"$ISSUE_LABELS")"
if [ "$decision" = ADD_NEEDS_TRIAGE ]; then
for label in epic "${QUEUE_LABELS[@]}"; do
has_issue_label "$label" && remove="$remove,$label"
done
remove="${remove#,}"
if [ -n "$remove" ]; then
run gh issue edit "$n" -R "$REPO" --add-label needs-triage --remove-label "$remove" >/dev/null
else
run gh issue edit "$n" -R "$REPO" --add-label needs-triage >/dev/null
fi
log "#$n: needs-triage (opened by $author)"
ISSUE_LABELS=needs-triage
fi
local n="$1" decision refs states age assignees open_pr=false label owners
decision="$(queue_decision <<<"$ISSUE_LABELS")"
case "$decision" in
ADD_NEEDS_TRIAGE)
@ -219,12 +202,35 @@ reconcile_issue() {
fi
}
reconcile_opened_issue() {
local n="$1" author triage=false labels remove="" label
ISSUE_JSON="$(gh api "repos/$REPO/issues/$n")"
jq -e 'has("pull_request") | not' <<<"$ISSUE_JSON" >/dev/null || return
author="$(jq -r '.user.login' <<<"$ISSUE_JSON")"
is_triage_actor "$author" && triage=true
labels="$(jq -r '.labels[].name' <<<"$ISSUE_JSON")"
[ "$(author_decision "$triage" <<<"$labels")" = ADD_NEEDS_TRIAGE ] || return
for label in epic "${QUEUE_LABELS[@]}"; do
grep -qxF "$label" <<<"$labels" && remove="$remove,$label"
done
remove="${remove#,}"
if [ -n "$remove" ]; then
run gh issue edit "$n" -R "$REPO" --add-label needs-triage --remove-label "$remove" >/dev/null
else
run gh issue edit "$n" -R "$REPO" --add-label needs-triage >/dev/null
fi
log "#$n: needs-triage (opened by $author)"
}
main() {
local owner name
REPO="${REPO:?set REPO to owner/name}"
LABELS_CONF="${LABELS_CONF:-.github/labels.conf}"
load_issueflow_config "$LABELS_CONF"
NOW="$(date +%s)"
if [ "${EVENT_NAME:-}" = issues ] && [ "${EVENT_ACTION:-}" = opened ]; then
reconcile_opened_issue "${EVENT_ISSUE:?set EVENT_ISSUE for issues:opened}"
fi
owner="${REPO%%/*}"
name="${REPO#*/}"
OPEN_PR_ISSUES="$(gh api graphql --paginate -f owner="$owner" -f name="$name" -f query='

View file

@ -48,6 +48,7 @@ check "unreadable blocker is flagged" 0 "FLAG_UNPARSEABLE" blocked_decision "12"
check "triage-authored ready issue is accepted" 0 "KEEP" author_decision true <<<"ready"
check "outside author receives needs-triage" 0 "ADD_NEEDS_TRIAGE" author_decision false <<<"ready"
check "outside author already marked needs-triage is stable" 0 "KEEP" author_decision false <<<"needs-triage"
check "later sweep accepts a normalized outside-authored issue" 0 "KEEP" queue_decision <<<"ready"
# Invariant 5: completed epics get one nudge; incomplete/unparseable do not.
epic_refs="$(epic_references <<< $'- [ ] #3 first\n- [x] #2 done\nplain #8')"