#!/bin/bash
# resolve_run_ids.sh —— SFT/EVAL runDic 单一可信来源
#
# 规则（与 program.md §756 对齐）：
#   SFT_RUNDIC  = workflow5/ 下「已落盘」（含 metric_diff/lark_template.json）的最大 runDic
#                 = 当轮 eval 自身的 workflow id（因为 resolve 在 eval 落盘后调用）
#                 augment 落盘、SFT yaml、modified_samples 归档全用这个值
#   EVAL_RUNDIC = SFT_RUNDIC + 1
#                 仅下一轮 cml workflow run 提交时使用
#
# 用法：
#   eval "$(./scripts/resolve_run_ids.sh)"
#   echo "$SFT_RUNDIC $EVAL_RUNDIC"
#
# 失败行为：找不到任何已落盘 workflow 时打 ERR 到 stderr 并 exit 1，调用方 set -e 时直接终止。

set -euo pipefail

WF_ROOT=${WF_ROOT:-/mnt/xiaoai-zk-model-train-tj5/workflow5}

if [ ! -d "$WF_ROOT" ]; then
  echo "ERR: WF_ROOT=$WF_ROOT 不存在或不可读" >&2
  exit 1
fi

# 只挑「已落盘」的 workflow：必须存在 metric_diff/lark_template.json
# 这样可以避免 CML 创建了空目录就被算成最大值
MAX=$(
  for d in "$WF_ROOT"/workflow*; do
    [ -d "$d" ] || continue
    [ -f "$d/metric_diff/lark_template.json" ] || continue
    name=$(basename "$d")
    echo "${name#workflow}"
  done | sort -n | tail -1
)

if [ -z "$MAX" ]; then
  echo "ERR: $WF_ROOT 下没有任何已落盘的 workflow（含 metric_diff/lark_template.json）" >&2
  exit 1
fi

echo "SFT_RUNDIC=$MAX"
echo "EVAL_RUNDIC=$((MAX+1))"
