#!/bin/bash # SOP一致性檢查腳本 - 防止工具與SOP脫節 # 使用方法: ./sop_consistency_check.sh SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(dirname "$(dirname "$SCRIPT_DIR")")" # 設定報告檔案 CURRENT_DATE=$(date +"%Y-%m-%d") CURRENT_TIME=$(date +"%H%M%S") REPORT_FILE="$PROJECT_ROOT/sop/reports/logs/${CURRENT_DATE}_sop-consistency-check-${CURRENT_TIME}.md" # 顏色定義 GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' RED='\033[0;31m' NC='\033[0m' # 初始化報告檔案 init_report() { cat > "$REPORT_FILE" << EOF # SOP一致性檢查報告 ## 📊 檢查概要 **檢查日期**: $CURRENT_DATE **檢查時間**: $(date +"%H:%M:%S") **執行腳本**: sop/scripts/sop_consistency_check.sh **檢查範圍**: 全系統SOP工具一致性驗證 ## 🔍 檢查結果詳細 EOF } # 寫入檢查結果到報告 log_result() { echo "$1" >> "$REPORT_FILE" } # 顯示並記錄 log_and_show() { echo -e "$1" echo "$2" >> "$REPORT_FILE" } init_report echo -e "${BLUE}🔍 SOP一致性檢查工具${NC}" echo "==================================" echo -e "📄 報告將儲存至: ${YELLOW}$REPORT_FILE${NC}" echo "" ISSUES_COUNT=0 # 檢查1: 過時檔案引用 log_and_show "${BLUE}檢查1: 過時檔案引用${NC}" "### 檢查1: 過時檔案引用" echo "--------------------------------" log_result "" # 檢查ISSUES.md引用 ISSUES_MD_REFS=$(grep -r "ISSUES\.md" "$PROJECT_ROOT/sop/" 2>/dev/null | grep -v "archive" | grep -v "sop_consistency_check.sh") if [ -n "$ISSUES_MD_REFS" ]; then log_and_show "${RED}❌ 發現工具仍在使用過時的 ISSUES.md${NC}" "**❌ ISSUES.md引用檢查**: 失敗" log_result "" log_result "發現以下過時引用:" log_result '```' echo "$ISSUES_MD_REFS" >> "$REPORT_FILE" log_result '```' ISSUES_COUNT=$((ISSUES_COUNT + 1)) else log_and_show "${GREEN}✅ 沒有工具使用過時的 ISSUES.md${NC}" "**✅ ISSUES.md引用檢查**: 通過" fi # 檢查PROJECTS.md引用 if grep -r "PROJECTS\.md\|PROJECT\.md" "$PROJECT_ROOT/sop/" 2>/dev/null | grep -v "archive" | grep -v "sop_consistency_check.sh"; then echo -e "${RED}❌ 發現工具仍在使用過時的 PROJECTS.md${NC}" ISSUES_COUNT=$((ISSUES_COUNT + 1)) else echo -e "${GREEN}✅ 沒有工具使用過時的 PROJECTS.md${NC}" fi echo "" # 檢查2: 必要檔案存在性 echo -e "${BLUE}檢查2: 必要檔案存在性${NC}" echo "--------------------------------" # 檢查TASKS.md if [ -f "$PROJECT_ROOT/TASKS.md" ]; then echo -e "${GREEN}✅ TASKS.md 存在${NC}" else echo -e "${RED}❌ TASKS.md 不存在${NC}" ISSUES_COUNT=$((ISSUES_COUNT + 1)) fi # 檢查CLAUDE.md if [ -f "$PROJECT_ROOT/sop/docs/CLAUDE.md" ]; then echo -e "${GREEN}✅ CLAUDE.md 存在${NC}" else echo -e "${RED}❌ CLAUDE.md 不存在${NC}" ISSUES_COUNT=$((ISSUES_COUNT + 1)) fi # 檢查報告模板 if [ -f "$PROJECT_ROOT/sop/tools/reports/templates/analysis-template.md" ]; then echo -e "${GREEN}✅ 分析報告模板存在${NC}" else echo -e "${RED}❌ 分析報告模板不存在${NC}" ISSUES_COUNT=$((ISSUES_COUNT + 1)) fi echo "" # 檢查3: 目錄結構 echo -e "${BLUE}檢查3: 目錄結構完整性${NC}" echo "--------------------------------" REQUIRED_DIRS=( "sop/tools/reports/templates" "sop/tools/reports/analysis" "sop/tools/reports/decision" "sop/reports/analysis" "sop/reports/decision" "sop/reports/logs" "sop/scripts" "sop/archive" ) for dir in "${REQUIRED_DIRS[@]}"; do if [ -d "$PROJECT_ROOT/$dir" ]; then echo -e "${GREEN}✅ $dir 存在${NC}" else echo -e "${RED}❌ $dir 不存在${NC}" ISSUES_COUNT=$((ISSUES_COUNT + 1)) fi done echo "" # 檢查4: 工具腳本可執行性 echo -e "${BLUE}檢查4: 關鍵工具可執行性${NC}" echo "--------------------------------" # 檢查./dl指令 if [ -x "$PROJECT_ROOT/dl" ]; then echo -e "${GREEN}✅ ./dl 可執行${NC}" else echo -e "${RED}❌ ./dl 不可執行或不存在${NC}" ISSUES_COUNT=$((ISSUES_COUNT + 1)) fi echo "" # 總結 log_and_show "${BLUE}檢查總結${NC}" "## 📊 檢查總結" echo "==================================" log_result "" if [ $ISSUES_COUNT -eq 0 ]; then log_and_show "${GREEN}🎉 所有檢查通過!SOP與工具系統一致${NC}" "**結果**: ✅ 所有檢查通過" log_result "" log_result "系統狀態良好,所有工具與SOP v4.1完全一致。" # 完成報告 log_result "" log_result "## 📋 建議行動" log_result "" log_result "- 無需立即行動" log_result "- 建議定期執行此檢查 (每次SOP更新後)" log_result "- 繼續保持工具與SOP的一致性" echo -e "📄 詳細檢查報告已儲存至: ${YELLOW}$REPORT_FILE${NC}" exit 0 else log_and_show "${RED}⚠️ 發現 $ISSUES_COUNT 個問題,需要修正${NC}" "**結果**: ❌ 發現 $ISSUES_COUNT 個問題" echo "" log_result "" log_result "## 📋 修正建議" log_result "" echo -e "${YELLOW}建議執行以下修正:${NC}" echo "1. 更新過時的工具腳本" echo "2. 建立缺失的目錄結構" echo "3. 確認所有引用使用TASKS.md而非ISSUES.md" echo "4. 重新執行此檢查直到所有問題解決" log_result "1. **更新過時工具腳本**: 修正所有仍使用 ISSUES.md/PROJECTS.md 的腳本" log_result "2. **建立缺失目錄**: 確保所有必要的目錄結構存在" log_result "3. **統一引用標準**: 所有工具改用 TASKS.md 系統" log_result "4. **驗證修正**: 重新執行檢查直到通過" log_result "" log_result "## 📋 後續追蹤" log_result "" log_result "- 建議在 TASKS.md 中記錄修正任務" log_result "- 修正完成後再次執行此檢查" log_result "- 建立定期檢查機制防止問題復發" echo -e "📄 詳細檢查報告已儲存至: ${YELLOW}$REPORT_FILE${NC}" exit 1 fi