#!/usr/bin/env bash set -euo pipefail GIT_STATUS_PATH="${1:?git status file required}" BACKLOG_ROWS_PATH="${2:?backlog rows file required}" DIRTY_WORKTREE=0 if [[ -s "$GIT_STATUS_PATH" ]]; then DIRTY_WORKTREE=1 fi OPEN_ISSUES=$(grep -c '^|' "$BACKLOG_ROWS_PATH" || true) NO_DELTA=true FOCUS="risk_aging,unverified,backlog" AGING_FOCUS="$(python3 - <<'PY' "$BACKLOG_ROWS_PATH" from pathlib import Path import sys rows=[] for line in Path(sys.argv[1]).read_text(encoding='utf-8').splitlines(): if not line.startswith('|'): continue parts=[p.strip() for p in line.strip('|').split('|')] if len(parts) < 6: continue issue_id=parts[0] priority=parts[2] first_exposed=parts[3] impact=parts[5].replace('次','').strip() try: impact_num=int(''.join(ch for ch in impact if ch.isdigit()) or '0') except ValueError: impact_num=0 rows.append((priority, first_exposed, -impact_num, issue_id, impact_num)) priority_rank={'P0':0,'P1':1,'P2':2} rows.sort(key=lambda x:(priority_rank.get(x[0],9), x[1], x[2], x[3])) focus=[] for priority, first_exposed, neg_impact, issue_id, impact_num in rows[:3]: focus.append(f"{issue_id}:{priority}:{impact_num}") print(','.join(focus)) PY )" SAME_DAY_NO_DECISION_FOCUS="$(python3 - <<'PY' "$BACKLOG_ROWS_PATH" from pathlib import Path import sys rows=[] for line in Path(sys.argv[1]).read_text(encoding='utf-8').splitlines(): if not line.startswith('|'): continue parts=[p.strip() for p in line.strip('|').split('|')] if len(parts) < 6: continue issue_id=parts[0] priority=parts[2] impact=parts[5].replace('次','').strip() try: impact_num=int(''.join(ch for ch in impact if ch.isdigit()) or '0') except ValueError: impact_num=0 rows.append((priority, -impact_num, issue_id, impact_num)) priority_rank={'P0':0,'P1':1,'P2':2} rows.sort(key=lambda x:(priority_rank.get(x[0],9), x[1], x[2])) focus=[] for priority, neg_impact, issue_id, impact_num in rows[:2]: focus.append(f"{issue_id}:{priority}:{impact_num}") print(','.join(focus)) PY )" printf 'REVIEW_STATUS no_delta=%s dirty_worktree=%d open_issues=%d focus=%s aging_focus=%s same_day_no_decision_focus=%s\n' "$NO_DELTA" "$DIRTY_WORKTREE" "$OPEN_ISSUES" "$FOCUS" "$AGING_FOCUS" "$SAME_DAY_NO_DECISION_FOCUS"