fujian_water_biz_doc/scripts/check-ai-doc-governance.sh

102 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
required_readmes=(
"00_Management/README.md"
"01_High_Level/README.md"
"02_Detailed/README.md"
"03_Technical/README.md"
"04_Appendix/README.md"
"docs/README.md"
"scripts/README.md"
)
required_main_docs=(
"01_High_Level/03_Summary_Design.md"
"02_Detailed/01_Detailed_Design.md"
"03_Technical/01_Database_Design.md"
"03_Technical/03_Interface_Design.md"
"03_Technical/04_Security_Design.md"
"03_Technical/05_Deployment_Design.md"
)
required_frontmatter_fields=(
"doc_id"
"doc_role"
"authority"
"scope"
"source_of_truth"
"last_reviewed"
"retrieval_priority"
)
required_ai_assets=(
"00_Management/10_AI_Retrieval_Whitelist.md"
"00_Management/11_Main_Doc_Chapter_Index.md"
"00_Management/12_AI_Weekly_Audit_Template.md"
)
failure_count=0
echo "开始 AI 文档治理检查..."
echo "检查一级目录 README..."
for file in "${required_readmes[@]}"; do
if [[ -f "$file" ]]; then
echo "$file"
else
echo "❌ 缺少: $file"
failure_count=$((failure_count + 1))
fi
done
echo "检查 AI 治理资产..."
for file in "${required_ai_assets[@]}"; do
if [[ -f "$file" ]]; then
echo "$file"
else
echo "❌ 缺少: $file"
failure_count=$((failure_count + 1))
fi
done
echo "检查主文档 Front Matter..."
for file in "${required_main_docs[@]}"; do
if [[ ! -f "$file" ]]; then
echo "❌ 缺少主文档: $file"
failure_count=$((failure_count + 1))
continue
fi
if [[ "$(sed -n '1p' "$file")" != "---" ]]; then
echo "$file 缺少 Front Matter 起始分隔符"
failure_count=$((failure_count + 1))
continue
fi
header_block="$(sed -n '1,40p' "$file")"
file_failed=0
for field in "${required_frontmatter_fields[@]}"; do
if ! grep -q "^${field}:" <<<"$header_block"; then
if [[ "$file_failed" -eq 0 ]]; then
echo "$file Front Matter 字段不完整"
fi
echo " - 缺失字段: ${field}"
file_failed=1
failure_count=$((failure_count + 1))
fi
done
if [[ "$file_failed" -eq 0 ]]; then
echo "$file"
fi
done
if [[ "$failure_count" -gt 0 ]]; then
echo "AI 文档治理检查未通过,问题数: $failure_count"
exit 1
fi
echo "AI 文档治理检查通过"