feat: sync lijiaoqiao implementation and staging validation artifacts
This commit is contained in:
183
scripts/ci/tok007_release_recheck.sh
Executable file
183
scripts/ci/tok007_release_recheck.sh
Executable file
@@ -0,0 +1,183 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
|
||||
TS="$(date +%F_%H%M%S)"
|
||||
OUT_DIR="${ROOT_DIR}/review/outputs"
|
||||
mkdir -p "${OUT_DIR}"
|
||||
OUT_FILE="${OUT_DIR}/tok007_release_recheck_${TS}.md"
|
||||
LOG_FILE="${ROOT_DIR}/reports/gates/tok007_release_recheck_${TS}.log"
|
||||
|
||||
log() {
|
||||
echo "$1" | tee -a "${LOG_FILE}"
|
||||
}
|
||||
|
||||
latest_file_or_empty() {
|
||||
local pattern="$1"
|
||||
local latest
|
||||
latest="$(ls -1t ${pattern} 2>/dev/null | head -n 1 || true)"
|
||||
echo "${latest}"
|
||||
}
|
||||
|
||||
extract_md_checkbox_conclusion() {
|
||||
local file="$1"
|
||||
local go="0"
|
||||
local cgo="0"
|
||||
local nogo="0"
|
||||
if [[ ! -f "${file}" ]]; then
|
||||
echo "UNKNOWN"
|
||||
return
|
||||
fi
|
||||
grep -Eq '^- \[x\] (通过|GO)' "${file}" && go="1" || true
|
||||
grep -Eq '^- \[x\] (有条件通过|CONDITIONAL GO)' "${file}" && cgo="1" || true
|
||||
grep -Eq '^- \[x\] (不通过|NO-GO)' "${file}" && nogo="1" || true
|
||||
|
||||
if [[ "${go}" == "1" ]]; then
|
||||
echo "GO"
|
||||
return
|
||||
fi
|
||||
if [[ "${cgo}" == "1" ]]; then
|
||||
echo "CONDITIONAL_GO"
|
||||
return
|
||||
fi
|
||||
if [[ "${nogo}" == "1" ]]; then
|
||||
echo "NO_GO"
|
||||
return
|
||||
fi
|
||||
echo "UNKNOWN"
|
||||
}
|
||||
|
||||
extract_bold_decision() {
|
||||
local file="$1"
|
||||
if [[ ! -f "${file}" ]]; then
|
||||
echo "UNKNOWN"
|
||||
return
|
||||
fi
|
||||
local row
|
||||
row="$(grep -E '^- (决策|判定):\*\*' "${file}" | head -n 1 || true)"
|
||||
if [[ -z "${row}" ]]; then
|
||||
echo "UNKNOWN"
|
||||
return
|
||||
fi
|
||||
if echo "${row}" | grep -q 'NO_GO'; then
|
||||
echo "NO_GO"
|
||||
return
|
||||
fi
|
||||
if echo "${row}" | grep -q 'CONDITIONAL_GO'; then
|
||||
echo "CONDITIONAL_GO"
|
||||
return
|
||||
fi
|
||||
if echo "${row}" | grep -q 'GO'; then
|
||||
echo "GO"
|
||||
return
|
||||
fi
|
||||
echo "UNKNOWN"
|
||||
}
|
||||
|
||||
extract_superpowers_decision() {
|
||||
local file="$1"
|
||||
extract_bold_decision "${file}"
|
||||
}
|
||||
|
||||
extract_pass_fail_result() {
|
||||
local file="$1"
|
||||
if [[ ! -f "${file}" ]]; then
|
||||
echo "UNKNOWN"
|
||||
return
|
||||
fi
|
||||
if grep -Eq '^- 结果:\*\*PASS\*\*' "${file}"; then
|
||||
echo "PASS"
|
||||
return
|
||||
fi
|
||||
if grep -Eq '^- 结果:\*\*FAIL\*\*' "${file}"; then
|
||||
echo "FAIL"
|
||||
return
|
||||
fi
|
||||
echo "UNKNOWN"
|
||||
}
|
||||
|
||||
TOK006_REPORT="$(latest_file_or_empty "${ROOT_DIR}/reports/gates/tok006_gate_bundle_*.md")"
|
||||
SP_REPORT="$(latest_file_or_empty "${ROOT_DIR}/reports/gates/superpowers_stage_validation_*.md")"
|
||||
TOK_RUNTIME_READINESS_REPORT="$(latest_file_or_empty "${ROOT_DIR}/reports/gates/token_runtime_readiness_*.md")"
|
||||
SUP_REVIEW_REPORT="${ROOT_DIR}/reports/supply_gate_review_2026-03-31.md"
|
||||
FINAL_DECISION_REPORT="${ROOT_DIR}/review/final_decision_2026-03-31.md"
|
||||
|
||||
TOK006_DECISION="$(extract_bold_decision "${TOK006_REPORT}")"
|
||||
SP_DECISION="$(extract_superpowers_decision "${SP_REPORT}")"
|
||||
TOK_RUNTIME_READINESS_RESULT="$(extract_pass_fail_result "${TOK_RUNTIME_READINESS_REPORT}")"
|
||||
SUP_DECISION="$(extract_md_checkbox_conclusion "${SUP_REVIEW_REPORT}")"
|
||||
FINAL_DECISION_CURRENT="$(extract_md_checkbox_conclusion "${FINAL_DECISION_REPORT}")"
|
||||
|
||||
has_unknown=0
|
||||
if [[ "${TOK006_DECISION}" == "UNKNOWN" || "${SP_DECISION}" == "UNKNOWN" || "${TOK_RUNTIME_READINESS_RESULT}" == "UNKNOWN" || "${SUP_DECISION}" == "UNKNOWN" ]]; then
|
||||
has_unknown=1
|
||||
fi
|
||||
|
||||
DECISION="CONDITIONAL_GO"
|
||||
DECISION_REASON="all available checks are non-failing but at least one source is conditional/mock/deferred"
|
||||
if [[ "${TOK006_DECISION}" == "NO_GO" || "${SP_DECISION}" == "NO_GO" || "${TOK_RUNTIME_READINESS_RESULT}" == "FAIL" || "${SUP_DECISION}" == "NO_GO" ]]; then
|
||||
DECISION="NO_GO"
|
||||
DECISION_REASON="at least one upstream gate is NO_GO"
|
||||
elif [[ "${TOK006_DECISION}" == "GO" && "${SP_DECISION}" == "GO" && "${TOK_RUNTIME_READINESS_RESULT}" == "PASS" && "${SUP_DECISION}" == "GO" ]]; then
|
||||
DECISION="GO"
|
||||
DECISION_REASON="all upstream gates report GO"
|
||||
elif [[ "${has_unknown}" -eq 1 ]]; then
|
||||
DECISION="NO_GO"
|
||||
DECISION_REASON="missing/unknown upstream decision source"
|
||||
fi
|
||||
|
||||
RECOMMEND_ACTION_1="补齐真实 staging 参数后执行 scripts/supply-gate/staging_precheck_and_run.sh"
|
||||
RECOMMEND_ACTION_2="重跑 scripts/ci/superpowers_stage_validate.sh 并确认 PHASE-07=PASS"
|
||||
RECOMMEND_ACTION_3="更新 reports/supply_gate_review_2026-03-31.md 与 review/final_decision_2026-03-31.md 签署页"
|
||||
|
||||
cat > "${OUT_FILE}" <<EOF
|
||||
# TOK-007 发布门禁复审报告
|
||||
|
||||
- 时间戳:${TS}
|
||||
- 生成脚本:\`scripts/ci/tok007_release_recheck.sh\`
|
||||
|
||||
## 1. 输入证据
|
||||
|
||||
| 来源 | 路径 | 判定 |
|
||||
|---|---|---|
|
||||
| TOK-006 Gate 汇总 | ${TOK006_REPORT:-N/A} | ${TOK006_DECISION} |
|
||||
| Superpowers 阶段验证 | ${SP_REPORT:-N/A} | ${SP_DECISION} |
|
||||
| Token Runtime Readiness (M-021) | ${TOK_RUNTIME_READINESS_REPORT:-N/A} | ${TOK_RUNTIME_READINESS_RESULT} |
|
||||
| SUP Gate 汇总评审 | ${SUP_REVIEW_REPORT} | ${SUP_DECISION} |
|
||||
| 当前最终决议文档 | ${FINAL_DECISION_REPORT} | ${FINAL_DECISION_CURRENT} |
|
||||
|
||||
## 2. 复审结论
|
||||
|
||||
- [ ] GO
|
||||
- [ ] CONDITIONAL GO
|
||||
- [ ] NO-GO
|
||||
|
||||
- 机判结论:**${DECISION}**
|
||||
- 结论依据:${DECISION_REASON}
|
||||
|
||||
## 3. 状态建议
|
||||
|
||||
1. ${RECOMMEND_ACTION_1}
|
||||
2. ${RECOMMEND_ACTION_2}
|
||||
3. ${RECOMMEND_ACTION_3}
|
||||
EOF
|
||||
|
||||
case "${DECISION}" in
|
||||
GO)
|
||||
sed -i 's/^- \[ \] GO/- [x] GO/' "${OUT_FILE}"
|
||||
;;
|
||||
CONDITIONAL_GO)
|
||||
sed -i 's/^- \[ \] CONDITIONAL GO/- [x] CONDITIONAL GO/' "${OUT_FILE}"
|
||||
;;
|
||||
NO_GO)
|
||||
sed -i 's/^- \[ \] NO-GO/- [x] NO-GO/' "${OUT_FILE}"
|
||||
;;
|
||||
esac
|
||||
|
||||
log "[INFO] TOK006=${TOK006_DECISION}, SP=${SP_DECISION}, M021=${TOK_RUNTIME_READINESS_RESULT}, SUP=${SUP_DECISION}, FINAL_CURRENT=${FINAL_DECISION_CURRENT}"
|
||||
log "[RESULT] ${DECISION}"
|
||||
log "[INFO] output=${OUT_FILE}"
|
||||
|
||||
if [[ "${DECISION}" == "NO_GO" ]]; then
|
||||
exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user