forked from niuniu/llm-intelligence
fix: harden review and verifier governance
This commit is contained in:
69
scripts/review/review_status_summary.sh
Executable file
69
scripts/review/review_status_summary.sh
Executable file
@@ -0,0 +1,69 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user