#!/usr/bin/env zsh # The operator-facing table is also the runtime source of diagnostic wording. planet_error_record() { local message="$1" local evidence_file="${2:-/dev/null}" local catalog="$SCRIPT_DIR/docs/technical/zh/ops-runbook.md" [ -r "$catalog" ] || return 1 [ -r "$evidence_file" ] || evidence_file=/dev/null awk -F '|' -v message="$message" ' function trim(value) { sub(/^[[:space:]]+/, "", value) sub(/[[:space:]]+$/, "", value) return value } NR == FNR { if ($0 == "") active = 1 if ($0 == "") active = 0 if (active && trim($2) ~ /^P_[A-Z_]+$/) { count++ codes[count] = trim($2) signals[count] = tolower(trim($3)) reasons[count] = trim($4) actions[count] = trim($5) if (codes[count] == "P_UNKNOWN") fallback = count } next } { evidence = evidence "\n" tolower($0) } END { evidence = tolower(message) "\n" evidence selected = fallback for (i = 1; i <= count; i++) { if (i == fallback) continue size = split(signals[i], patterns, ";") for (j = 1; j <= size; j++) { pattern = trim(patterns[j]) if (length(pattern) && index(evidence, pattern)) { selected = i break } } if (selected != fallback) break } if (!selected) exit 1 printf "%s\t%s\t%s\n", codes[selected], reasons[selected], actions[selected] } ' "$catalog" "$evidence_file" } report_error_reason() { local record code reason action if ! record="$(planet_error_record "$1" "${2:-/dev/null}")"; then log_note "无法读取运维错误对照表,请检查 docs/technical/zh/ops-runbook.md" return 0 fi IFS=$'\t' read -r code reason action <<< "$record" log_note "原因 [${code}]: ${reason}" log_note "处理: ${action}" }